├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── dependabot.yaml └── workflows │ ├── checkout.yml │ ├── deploy.yml │ ├── example-deploy-production.yml │ └── example-deploy-staging.yml ├── .gitignore ├── .metadata ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── CHANGELOG.md ├── LICENSE ├── Makefile ├── README.md ├── analysis_options.yaml ├── example ├── .firebase │ └── hosting.YnVpbGRcd2Vi.cache ├── .firebaserc ├── .gitignore ├── .metadata ├── Makefile ├── README.md ├── analysis_options.yaml ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── kotlin │ │ │ │ └── dev │ │ │ │ │ └── plugfox │ │ │ │ │ └── octopus │ │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ │ ├── drawable-v21 │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable │ │ │ │ ├── background.png │ │ │ │ └── launch_background.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ │ ├── values-night-v31 │ │ │ │ └── styles.xml │ │ │ │ ├── values-night │ │ │ │ └── styles.xml │ │ │ │ ├── values-v31 │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ └── styles.xml │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ └── settings.gradle ├── assets │ ├── data │ │ ├── categories.json │ │ ├── images │ │ │ ├── product-1-1.webp │ │ │ ├── product-1-2.webp │ │ │ ├── product-1-3.webp │ │ │ ├── product-1-4.webp │ │ │ ├── product-1-thumbnail.webp │ │ │ ├── product-10-1.webp │ │ │ ├── product-10-2.webp │ │ │ ├── product-10-3.webp │ │ │ ├── product-10-thumbnail.webp │ │ │ ├── product-100-1.webp │ │ │ ├── product-100-2.webp │ │ │ ├── product-100-3.webp │ │ │ ├── product-100-thumbnail.webp │ │ │ ├── product-11-1.webp │ │ │ ├── product-11-2.webp │ │ │ ├── product-11-3.webp │ │ │ ├── product-11-thumbnail.webp │ │ │ ├── product-12-1.webp │ │ │ ├── product-12-2.webp │ │ │ ├── product-12-3.webp │ │ │ ├── product-12-4.webp │ │ │ ├── product-12-thumbnail.webp │ │ │ ├── product-13-1.webp │ │ │ ├── product-13-2.webp │ │ │ ├── product-13-3.webp │ │ │ ├── product-13-4.webp │ │ │ ├── product-13-thumbnail.webp │ │ │ ├── product-14-1.webp │ │ │ ├── product-14-2.webp │ │ │ ├── product-14-3.webp │ │ │ ├── product-14-thumbnail.webp │ │ │ ├── product-15-1.webp │ │ │ ├── product-15-2.webp │ │ │ ├── product-15-3.webp │ │ │ ├── product-15-4.webp │ │ │ ├── product-15-thumbnail.webp │ │ │ ├── product-16-1.webp │ │ │ ├── product-16-2.webp │ │ │ ├── product-16-3.webp │ │ │ ├── product-16-4.webp │ │ │ ├── product-16-thumbnail.webp │ │ │ ├── product-17-1.webp │ │ │ ├── product-17-2.webp │ │ │ ├── product-17-3.webp │ │ │ ├── product-17-thumbnail.webp │ │ │ ├── product-18-1.webp │ │ │ ├── product-18-2.webp │ │ │ ├── product-18-3.webp │ │ │ ├── product-18-4.webp │ │ │ ├── product-18-thumbnail.webp │ │ │ ├── product-19-1.webp │ │ │ ├── product-19-2.webp │ │ │ ├── product-19-3.webp │ │ │ ├── product-19-thumbnail.webp │ │ │ ├── product-2-1.webp │ │ │ ├── product-2-2.webp │ │ │ ├── product-2-3.webp │ │ │ ├── product-2-thumbnail.webp │ │ │ ├── product-20-1.webp │ │ │ ├── product-20-2.webp │ │ │ ├── product-20-3.webp │ │ │ ├── product-20-4.webp │ │ │ ├── product-20-thumbnail.webp │ │ │ ├── product-21-1.webp │ │ │ ├── product-21-2.webp │ │ │ ├── product-21-3.webp │ │ │ ├── product-21-thumbnail.webp │ │ │ ├── product-22-1.webp │ │ │ ├── product-22-2.webp │ │ │ ├── product-22-3.webp │ │ │ ├── product-22-thumbnail.webp │ │ │ ├── product-23-1.webp │ │ │ ├── product-23-2.webp │ │ │ ├── product-23-3.webp │ │ │ ├── product-23-4.webp │ │ │ ├── product-23-thumbnail.webp │ │ │ ├── product-24-1.webp │ │ │ ├── product-24-2.webp │ │ │ ├── product-24-3.webp │ │ │ ├── product-24-4.webp │ │ │ ├── product-24-thumbnail.webp │ │ │ ├── product-25-1.webp │ │ │ ├── product-25-2.webp │ │ │ ├── product-25-3.webp │ │ │ ├── product-25-4.webp │ │ │ ├── product-25-thumbnail.webp │ │ │ ├── product-26-1.webp │ │ │ ├── product-26-2.webp │ │ │ ├── product-26-3.webp │ │ │ ├── product-26-4.webp │ │ │ ├── product-26-5.webp │ │ │ ├── product-26-thumbnail.webp │ │ │ ├── product-27-1.webp │ │ │ ├── product-27-2.webp │ │ │ ├── product-27-3.webp │ │ │ ├── product-27-4.webp │ │ │ ├── product-27-thumbnail.webp │ │ │ ├── product-28-1.webp │ │ │ ├── product-28-2.webp │ │ │ ├── product-28-3.webp │ │ │ ├── product-28-4.webp │ │ │ ├── product-28-thumbnail.webp │ │ │ ├── product-29-1.webp │ │ │ ├── product-29-2.webp │ │ │ ├── product-29-3.webp │ │ │ ├── product-29-4.webp │ │ │ ├── product-29-thumbnail.webp │ │ │ ├── product-3-1.webp │ │ │ ├── product-3-thumbnail.webp │ │ │ ├── product-30-1.webp │ │ │ ├── product-30-2.webp │ │ │ ├── product-30-3.webp │ │ │ ├── product-30-thumbnail.webp │ │ │ ├── product-31-1.webp │ │ │ ├── product-31-2.webp │ │ │ ├── product-31-3.webp │ │ │ ├── product-31-4.webp │ │ │ ├── product-31-thumbnail.webp │ │ │ ├── product-32-1.webp │ │ │ ├── product-32-2.webp │ │ │ ├── product-32-3.webp │ │ │ ├── product-32-thumbnail.webp │ │ │ ├── product-33-1.webp │ │ │ ├── product-33-2.webp │ │ │ ├── product-33-3.webp │ │ │ ├── product-33-4.webp │ │ │ ├── product-33-thumbnail.webp │ │ │ ├── product-34-1.webp │ │ │ ├── product-34-2.webp │ │ │ ├── product-34-3.webp │ │ │ ├── product-34-4.webp │ │ │ ├── product-34-thumbnail.webp │ │ │ ├── product-35-1.webp │ │ │ ├── product-35-2.webp │ │ │ ├── product-35-3.webp │ │ │ ├── product-35-4.webp │ │ │ ├── product-35-thumbnail.webp │ │ │ ├── product-36-1.webp │ │ │ ├── product-36-2.webp │ │ │ ├── product-36-3.webp │ │ │ ├── product-36-4.webp │ │ │ ├── product-36-thumbnail.webp │ │ │ ├── product-37-1.webp │ │ │ ├── product-37-2.webp │ │ │ ├── product-37-3.webp │ │ │ ├── product-37-4.webp │ │ │ ├── product-37-thumbnail.webp │ │ │ ├── product-38-1.webp │ │ │ ├── product-38-2.webp │ │ │ ├── product-38-3.webp │ │ │ ├── product-38-4.webp │ │ │ ├── product-38-thumbnail.webp │ │ │ ├── product-39-1.webp │ │ │ ├── product-39-2.webp │ │ │ ├── product-39-3.webp │ │ │ ├── product-39-4.webp │ │ │ ├── product-39-thumbnail.webp │ │ │ ├── product-4-1.webp │ │ │ ├── product-4-2.webp │ │ │ ├── product-4-3.webp │ │ │ ├── product-4-4.webp │ │ │ ├── product-4-thumbnail.webp │ │ │ ├── product-40-1.webp │ │ │ ├── product-40-2.webp │ │ │ ├── product-40-thumbnail.webp │ │ │ ├── product-41-1.webp │ │ │ ├── product-41-2.webp │ │ │ ├── product-41-3.webp │ │ │ ├── product-41-4.webp │ │ │ ├── product-41-thumbnail.webp │ │ │ ├── product-42-1.webp │ │ │ ├── product-42-2.webp │ │ │ ├── product-42-3.webp │ │ │ ├── product-42-4.webp │ │ │ ├── product-42-thumbnail.webp │ │ │ ├── product-43-1.webp │ │ │ ├── product-43-2.webp │ │ │ ├── product-43-3.webp │ │ │ ├── product-43-4.webp │ │ │ ├── product-43-thumbnail.webp │ │ │ ├── product-44-1.webp │ │ │ ├── product-44-2.webp │ │ │ ├── product-44-3.webp │ │ │ ├── product-44-4.webp │ │ │ ├── product-44-thumbnail.webp │ │ │ ├── product-45-1.webp │ │ │ ├── product-45-2.webp │ │ │ ├── product-45-3.webp │ │ │ ├── product-45-4.webp │ │ │ ├── product-45-thumbnail.webp │ │ │ ├── product-46-1.webp │ │ │ ├── product-46-2.webp │ │ │ ├── product-46-3.webp │ │ │ ├── product-46-4.webp │ │ │ ├── product-46-thumbnail.webp │ │ │ ├── product-47-1.webp │ │ │ ├── product-47-2.webp │ │ │ ├── product-47-3.webp │ │ │ ├── product-47-thumbnail.webp │ │ │ ├── product-48-1.webp │ │ │ ├── product-48-2.webp │ │ │ ├── product-48-3.webp │ │ │ ├── product-48-4.webp │ │ │ ├── product-48-thumbnail.webp │ │ │ ├── product-49-1.webp │ │ │ ├── product-49-2.webp │ │ │ ├── product-49-3.webp │ │ │ ├── product-49-thumbnail.webp │ │ │ ├── product-5-1.webp │ │ │ ├── product-5-2.webp │ │ │ ├── product-5-3.webp │ │ │ ├── product-5-thumbnail.webp │ │ │ ├── product-50-1.webp │ │ │ ├── product-50-2.webp │ │ │ ├── product-50-3.webp │ │ │ ├── product-50-thumbnail.webp │ │ │ ├── product-51-1.webp │ │ │ ├── product-51-2.webp │ │ │ ├── product-51-3.webp │ │ │ ├── product-51-thumbnail.webp │ │ │ ├── product-52-1.webp │ │ │ ├── product-52-2.webp │ │ │ ├── product-52-3.webp │ │ │ ├── product-52-4.webp │ │ │ ├── product-52-thumbnail.webp │ │ │ ├── product-53-1.webp │ │ │ ├── product-53-2.webp │ │ │ ├── product-53-3.webp │ │ │ ├── product-53-4.webp │ │ │ ├── product-53-thumbnail.webp │ │ │ ├── product-54-1.webp │ │ │ ├── product-54-2.webp │ │ │ ├── product-54-3.webp │ │ │ ├── product-54-4.webp │ │ │ ├── product-54-thumbnail.webp │ │ │ ├── product-55-1.webp │ │ │ ├── product-55-2.webp │ │ │ ├── product-55-3.webp │ │ │ ├── product-55-4.webp │ │ │ ├── product-55-thumbnail.webp │ │ │ ├── product-56-1.webp │ │ │ ├── product-56-2.webp │ │ │ ├── product-56-3.webp │ │ │ ├── product-56-4.webp │ │ │ ├── product-56-5.webp │ │ │ ├── product-56-thumbnail.webp │ │ │ ├── product-57-1.webp │ │ │ ├── product-57-2.webp │ │ │ ├── product-57-3.webp │ │ │ ├── product-57-4.webp │ │ │ ├── product-57-thumbnail.webp │ │ │ ├── product-58-1.webp │ │ │ ├── product-58-2.webp │ │ │ ├── product-58-3.webp │ │ │ ├── product-58-4.webp │ │ │ ├── product-58-thumbnail.webp │ │ │ ├── product-59-1.webp │ │ │ ├── product-59-2.webp │ │ │ ├── product-59-3.webp │ │ │ ├── product-59-4.webp │ │ │ ├── product-59-thumbnail.webp │ │ │ ├── product-6-1.webp │ │ │ ├── product-6-2.webp │ │ │ ├── product-6-3.webp │ │ │ ├── product-6-4.webp │ │ │ ├── product-6-thumbnail.webp │ │ │ ├── product-60-1.webp │ │ │ ├── product-60-2.webp │ │ │ ├── product-60-3.webp │ │ │ ├── product-60-thumbnail.webp │ │ │ ├── product-61-1.webp │ │ │ ├── product-61-2.webp │ │ │ ├── product-61-3.webp │ │ │ ├── product-61-thumbnail.webp │ │ │ ├── product-62-1.webp │ │ │ ├── product-62-2.webp │ │ │ ├── product-62-thumbnail.webp │ │ │ ├── product-63-1.webp │ │ │ ├── product-63-2.webp │ │ │ ├── product-63-3.webp │ │ │ ├── product-63-4.webp │ │ │ ├── product-63-thumbnail.webp │ │ │ ├── product-64-1.webp │ │ │ ├── product-64-2.webp │ │ │ ├── product-64-3.webp │ │ │ ├── product-64-thumbnail.webp │ │ │ ├── product-65-1.webp │ │ │ ├── product-65-2.webp │ │ │ ├── product-65-3.webp │ │ │ ├── product-65-4.webp │ │ │ ├── product-65-thumbnail.webp │ │ │ ├── product-66-1.webp │ │ │ ├── product-66-2.webp │ │ │ ├── product-66-3.webp │ │ │ ├── product-66-thumbnail.webp │ │ │ ├── product-67-1.webp │ │ │ ├── product-67-2.webp │ │ │ ├── product-67-3.webp │ │ │ ├── product-67-4.webp │ │ │ ├── product-67-thumbnail.webp │ │ │ ├── product-68-1.webp │ │ │ ├── product-68-2.webp │ │ │ ├── product-68-thumbnail.webp │ │ │ ├── product-69-1.webp │ │ │ ├── product-69-2.webp │ │ │ ├── product-69-3.webp │ │ │ ├── product-69-4.webp │ │ │ ├── product-69-thumbnail.webp │ │ │ ├── product-7-1.webp │ │ │ ├── product-7-2.webp │ │ │ ├── product-7-3.webp │ │ │ ├── product-7-thumbnail.webp │ │ │ ├── product-70-1.webp │ │ │ ├── product-70-2.webp │ │ │ ├── product-70-thumbnail.webp │ │ │ ├── product-71-1.webp │ │ │ ├── product-71-2.webp │ │ │ ├── product-71-3.webp │ │ │ ├── product-71-thumbnail.webp │ │ │ ├── product-72-1.webp │ │ │ ├── product-72-2.webp │ │ │ ├── product-72-3.webp │ │ │ ├── product-72-4.webp │ │ │ ├── product-72-thumbnail.webp │ │ │ ├── product-73-1.webp │ │ │ ├── product-73-2.webp │ │ │ ├── product-73-3.webp │ │ │ ├── product-73-thumbnail.webp │ │ │ ├── product-74-1.webp │ │ │ ├── product-74-2.webp │ │ │ ├── product-74-3.webp │ │ │ ├── product-74-4.webp │ │ │ ├── product-74-thumbnail.webp │ │ │ ├── product-75-1.webp │ │ │ ├── product-75-2.webp │ │ │ ├── product-75-3.webp │ │ │ ├── product-75-thumbnail.webp │ │ │ ├── product-76-1.webp │ │ │ ├── product-76-2.webp │ │ │ ├── product-76-thumbnail.webp │ │ │ ├── product-77-1.webp │ │ │ ├── product-77-2.webp │ │ │ ├── product-77-3.webp │ │ │ ├── product-77-thumbnail.webp │ │ │ ├── product-78-thumbnail.webp │ │ │ ├── product-79-1.webp │ │ │ ├── product-79-thumbnail.webp │ │ │ ├── product-8-1.webp │ │ │ ├── product-8-2.webp │ │ │ ├── product-8-3.webp │ │ │ ├── product-8-4.webp │ │ │ ├── product-8-thumbnail.webp │ │ │ ├── product-80-1.webp │ │ │ ├── product-80-2.webp │ │ │ ├── product-80-3.webp │ │ │ ├── product-80-4.webp │ │ │ ├── product-80-thumbnail.webp │ │ │ ├── product-81-1.webp │ │ │ ├── product-81-2.webp │ │ │ ├── product-81-3.webp │ │ │ ├── product-81-4.webp │ │ │ ├── product-81-thumbnail.webp │ │ │ ├── product-82-1.webp │ │ │ ├── product-82-2.webp │ │ │ ├── product-82-3.webp │ │ │ ├── product-82-4.webp │ │ │ ├── product-82-thumbnail.webp │ │ │ ├── product-83-1.webp │ │ │ ├── product-83-2.webp │ │ │ ├── product-83-3.webp │ │ │ ├── product-83-4.webp │ │ │ ├── product-83-thumbnail.webp │ │ │ ├── product-84-1.webp │ │ │ ├── product-84-2.webp │ │ │ ├── product-84-thumbnail.webp │ │ │ ├── product-85-1.webp │ │ │ ├── product-85-2.webp │ │ │ ├── product-85-thumbnail.webp │ │ │ ├── product-86-1.webp │ │ │ ├── product-86-2.webp │ │ │ ├── product-86-3.webp │ │ │ ├── product-86-4.webp │ │ │ ├── product-86-thumbnail.webp │ │ │ ├── product-87-1.webp │ │ │ ├── product-87-2.webp │ │ │ ├── product-87-3.webp │ │ │ ├── product-87-4.webp │ │ │ ├── product-87-thumbnail.webp │ │ │ ├── product-88-1.webp │ │ │ ├── product-88-2.webp │ │ │ ├── product-88-3.webp │ │ │ ├── product-88-4.webp │ │ │ ├── product-88-thumbnail.webp │ │ │ ├── product-89-1.webp │ │ │ ├── product-89-2.webp │ │ │ ├── product-89-3.webp │ │ │ ├── product-89-4.webp │ │ │ ├── product-89-thumbnail.webp │ │ │ ├── product-9-1.webp │ │ │ ├── product-9-2.webp │ │ │ ├── product-9-3.webp │ │ │ ├── product-9-4.webp │ │ │ ├── product-9-thumbnail.webp │ │ │ ├── product-90-1.webp │ │ │ ├── product-90-2.webp │ │ │ ├── product-90-3.webp │ │ │ ├── product-90-4.webp │ │ │ ├── product-90-thumbnail.webp │ │ │ ├── product-91-1.webp │ │ │ ├── product-91-2.webp │ │ │ ├── product-91-3.webp │ │ │ ├── product-91-4.webp │ │ │ ├── product-91-thumbnail.webp │ │ │ ├── product-92-1.webp │ │ │ ├── product-92-2.webp │ │ │ ├── product-92-3.webp │ │ │ ├── product-92-4.webp │ │ │ ├── product-92-thumbnail.webp │ │ │ ├── product-93-1.webp │ │ │ ├── product-93-2.webp │ │ │ ├── product-93-3.webp │ │ │ ├── product-93-4.webp │ │ │ ├── product-93-thumbnail.webp │ │ │ ├── product-94-1.webp │ │ │ ├── product-94-2.webp │ │ │ ├── product-94-3.webp │ │ │ ├── product-94-thumbnail.webp │ │ │ ├── product-95-1.webp │ │ │ ├── product-95-2.webp │ │ │ ├── product-95-3.webp │ │ │ ├── product-95-4.webp │ │ │ ├── product-95-thumbnail.webp │ │ │ ├── product-96-1.webp │ │ │ ├── product-96-2.webp │ │ │ ├── product-96-3.webp │ │ │ ├── product-96-4.webp │ │ │ ├── product-96-thumbnail.webp │ │ │ ├── product-97-1.webp │ │ │ ├── product-97-2.webp │ │ │ ├── product-97-3.webp │ │ │ ├── product-97-4.webp │ │ │ ├── product-97-thumbnail.webp │ │ │ ├── product-98-1.webp │ │ │ ├── product-98-2.webp │ │ │ ├── product-98-3.webp │ │ │ ├── product-98-4.webp │ │ │ ├── product-98-thumbnail.webp │ │ │ ├── product-99-1.webp │ │ │ ├── product-99-2.webp │ │ │ ├── product-99-3.webp │ │ │ ├── product-99-4.webp │ │ │ └── product-99-thumbnail.webp │ │ └── products.json │ ├── icons │ │ └── icon-1024x1024.png │ └── shaders │ │ └── shimmer.frag ├── bin │ └── web_move_images.dart ├── build.yaml ├── config │ ├── development.json │ ├── production.json │ └── staging.json ├── devtools_options.yaml ├── firebase.json ├── flutter_launcher_icons.yaml ├── flutter_native_splash.yaml ├── integration_test │ ├── app_test.dart │ └── src │ │ ├── fake │ │ ├── fake_authentication.dart │ │ ├── fake_dependencies.dart │ │ └── fake_product.dart │ │ └── util │ │ └── tester_extension.dart ├── ios │ ├── .gitignore │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── WorkspaceSettings.xcsettings │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ ├── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ ├── Icon-App-50x50@1x.png │ │ │ │ ├── Icon-App-50x50@2x.png │ │ │ │ ├── Icon-App-57x57@1x.png │ │ │ │ ├── Icon-App-57x57@2x.png │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ ├── Icon-App-72x72@1x.png │ │ │ │ ├── Icon-App-72x72@2x.png │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ ├── LaunchBackground.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── background.png │ │ │ └── LaunchImage.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ └── README.md │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h │ └── RunnerTests │ │ └── RunnerTests.swift ├── lib │ ├── main.dart │ └── src │ │ ├── common │ │ ├── constant │ │ │ ├── assets.gen.dart │ │ │ ├── config.dart │ │ │ └── pubspec.yaml.g.dart │ │ ├── controller │ │ │ ├── controller.dart │ │ │ ├── controller_observer.dart │ │ │ ├── droppable_controller_concurrency.dart │ │ │ ├── sequential_controller_concurrency.dart │ │ │ ├── state_consumer.dart │ │ │ └── state_controller.dart │ │ ├── localization │ │ │ ├── generated │ │ │ │ ├── intl │ │ │ │ │ ├── messages_all.dart │ │ │ │ │ └── messages_en.dart │ │ │ │ └── l10n.dart │ │ │ ├── intl_en.arb │ │ │ └── localization.dart │ │ ├── model │ │ │ └── dependencies.dart │ │ ├── router │ │ │ ├── authentication_guard.dart │ │ │ ├── home_guard.dart │ │ │ ├── router_state_mixin.dart │ │ │ ├── routes.dart │ │ │ └── shop_guard.dart │ │ ├── util │ │ │ ├── color_util.dart │ │ │ ├── error_util.dart │ │ │ ├── log_buffer.dart │ │ │ ├── platform │ │ │ │ ├── error_util_js.dart │ │ │ │ └── error_util_vm.dart │ │ │ ├── screen_util.dart │ │ │ └── timeouts.dart │ │ └── widget │ │ │ ├── app.dart │ │ │ ├── app_error.dart │ │ │ ├── common_actions.dart │ │ │ ├── form_placeholder.dart │ │ │ ├── history_button.dart │ │ │ ├── not_found_screen.dart │ │ │ ├── outlined_text.dart │ │ │ ├── radial_progress_indicator.dart │ │ │ ├── scaffold_padding.dart │ │ │ ├── shimmer.dart │ │ │ └── text_placeholder.dart │ │ └── feature │ │ ├── account │ │ └── widget │ │ │ ├── about_app_dialog.dart │ │ │ ├── profile_icon_button.dart │ │ │ ├── profile_screen.dart │ │ │ └── settings_dialog.dart │ │ ├── authentication │ │ ├── controller │ │ │ ├── authentication_controller.dart │ │ │ └── authentication_state.dart │ │ ├── data │ │ │ └── authentication_repository.dart │ │ ├── model │ │ │ ├── sign_in_data.dart │ │ │ └── user.dart │ │ └── widget │ │ │ ├── authentication_scope.dart │ │ │ ├── log_out_button.dart │ │ │ ├── signin_screen.dart │ │ │ └── signup_screen.dart │ │ ├── gallery │ │ └── widget │ │ │ ├── gallery_screen.dart │ │ │ └── picture_screen.dart │ │ ├── home │ │ └── widget │ │ │ └── home_screen.dart │ │ ├── initialization │ │ ├── data │ │ │ ├── initialization.dart │ │ │ ├── initialize_dependencies.dart │ │ │ └── platform │ │ │ │ ├── platform_initialization.dart │ │ │ │ ├── platform_initialization_js.dart │ │ │ │ └── platform_initialization_vm.dart │ │ └── widget │ │ │ ├── inherited_dependencies.dart │ │ │ └── initialization_splash_screen.dart │ │ └── shop │ │ ├── controller │ │ ├── favorite_controller.dart │ │ ├── favorite_state.dart │ │ ├── shop_controller.dart │ │ └── shop_state.dart │ │ ├── data │ │ ├── product_repository.dart │ │ └── shop_tabs_cache_service.dart │ │ ├── model │ │ ├── category.dart │ │ └── product.dart │ │ ├── shop_screens.dart │ │ └── widget │ │ ├── basket_screen.dart │ │ ├── catalog_breadcrumbs.dart │ │ ├── catalog_screen.dart │ │ ├── category_screen.dart │ │ ├── checkout_screen.dart │ │ ├── favorite_button.dart │ │ ├── favorites_screen.dart │ │ ├── product_image_dialog.dart │ │ ├── product_screen.dart │ │ ├── shop_back_button.dart │ │ ├── shop_scope.dart │ │ └── shop_screen.dart ├── linux │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ │ ├── CMakeLists.txt │ │ ├── generated_plugin_registrant.cc │ │ ├── generated_plugin_registrant.h │ │ └── generated_plugins.cmake │ ├── main.cc │ ├── my_application.cc │ └── my_application.h ├── macos │ ├── .gitignore │ ├── Flutter │ │ ├── Flutter-Debug.xcconfig │ │ ├── Flutter-Release.xcconfig │ │ └── GeneratedPluginRegistrant.swift │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── app_icon_1024.png │ │ │ │ ├── app_icon_128.png │ │ │ │ ├── app_icon_16.png │ │ │ │ ├── app_icon_256.png │ │ │ │ ├── app_icon_32.png │ │ │ │ ├── app_icon_512.png │ │ │ │ └── app_icon_64.png │ │ ├── Base.lproj │ │ │ └── MainMenu.xib │ │ ├── Configs │ │ │ ├── AppInfo.xcconfig │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── Warnings.xcconfig │ │ ├── DebugProfile.entitlements │ │ ├── Info.plist │ │ ├── MainFlutterWindow.swift │ │ └── Release.entitlements │ └── RunnerTests │ │ └── RunnerTests.swift ├── pubspec.lock ├── pubspec.yaml ├── web │ ├── favicon.png │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ ├── index.html │ └── manifest.json └── windows │ ├── .gitignore │ ├── CMakeLists.txt │ ├── flutter │ ├── CMakeLists.txt │ ├── generated_plugin_registrant.cc │ ├── generated_plugin_registrant.h │ └── generated_plugins.cmake │ └── runner │ ├── CMakeLists.txt │ ├── Runner.rc │ ├── flutter_window.cpp │ ├── flutter_window.h │ ├── main.cpp │ ├── resource.h │ ├── resources │ └── app_icon.ico │ ├── runner.exe.manifest │ ├── utils.cpp │ ├── utils.h │ ├── win32_window.cpp │ └── win32_window.h ├── extension └── devtools │ └── config.yaml ├── firebase.json ├── lib ├── octopus.dart └── src │ ├── controller │ ├── config.dart │ ├── controller.dart │ ├── delegate.dart │ ├── guard.dart │ ├── information_parser.dart │ ├── information_provider.dart │ ├── information_provider_js.dart │ ├── information_provider_vm.dart │ ├── navigator │ │ ├── controller.dart │ │ ├── delegate.dart │ │ └── observer.dart │ ├── observer.dart │ ├── singleton.dart │ ├── state_queue.dart │ └── typedefs.dart │ ├── state │ ├── name_regexp.dart │ ├── node_extra_storage.dart │ ├── state.dart │ └── state_codec.dart │ ├── util │ ├── jenkins_hash.dart │ ├── logs.dart │ ├── platform │ │ ├── system_navigator_util_js.dart │ │ └── system_navigator_util_vm.dart │ ├── state_util.dart │ └── system_navigator_util.dart │ └── widget │ ├── bucket_navigator.dart │ ├── build_context_extension.dart │ ├── dialog_page.dart │ ├── inherited_octopus.dart │ ├── navigator.dart │ ├── no_animation.dart │ ├── route_context.dart │ ├── tabs.dart │ └── tools.dart ├── pubspec.yaml └── test ├── octopus_test.dart └── src ├── unit ├── hash_test.dart └── state_test.dart └── widget ├── fake_routes.dart ├── observer_test.dart └── tester_extension.dart /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | #github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: plugfox 5 | #open_collective: # Replace with a single Open Collective username 6 | #ko_fi: # Replace with a single Ko-fi username 7 | #tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | #community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | #liberapay: # Replace with a single Liberapay username 10 | #issuehunt: # Replace with a single IssueHunt username 11 | #otechie: # Replace with a single Otechie username 12 | #lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: ['https://www.buymeacoffee.com/plugfox', 'https://boosty.to/plugfox'] 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **To Reproduce** 13 | Steps to reproduce the behavior: 14 | 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | 28 | - OS: [e.g. iOS] 29 | - Browser [e.g. chrome, safari] 30 | - Version [e.g. 22] 31 | 32 | **Smartphone (please complete the following information):** 33 | 34 | - Device: [e.g. iPhone6] 35 | - OS: [e.g. iOS8.1] 36 | - Browser [e.g. stock browser, safari] 37 | - Version [e.g. 22] 38 | 39 | **Additional context** 40 | Add any other context about the problem here. 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | enable-beta-ecosystems: true 3 | updates: 4 | - directory: "/" 5 | open-pull-requests-limit: 5 6 | package-ecosystem: "pub" 7 | rebase-strategy: auto 8 | schedule: 9 | interval: "monthly" 10 | # timezone: "UTC" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. 26 | /pubspec.lock 27 | .dart_tool 28 | build/ 29 | **/doc/api/ 30 | **/ios/Flutter/.last_build_id 31 | .flutter-plugins 32 | .flutter-plugins-dependencies 33 | .packages 34 | .pub-cache/ 35 | 36 | # Pana 37 | log.pana.json 38 | 39 | # Test 40 | coverage/ 41 | .coverage/ 42 | /test/**/*.json 43 | /test/.test_coverage.dart 44 | 45 | # Temp 46 | /tmp 47 | /temp -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "db7ef5bf9f59442b0e200a90587e8fa5e0c6336a" 8 | channel: "stable" 9 | 10 | project_type: package 11 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "Dart-Code.dart-code", 4 | "Dart-Code.flutter" 5 | ] 6 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.0.9 2 | 3 | - Update to 3.24.0 flutter version 4 | 5 | ## 0.0.8 6 | 7 | - Lower `collection` version constraint to `^1.17.2` 8 | 9 | ## 0.0.7 10 | 11 | - Lower `meta` version constraint to `^1.9.0` 12 | 13 | ## 0.0.6 14 | 15 | - Lower `Dart SDK` constraint to `^3.1.0` 16 | 17 | ## 0.0.5 18 | 19 | - Lower the minimum version of `flutter` to `^3.13.9` 20 | - Add end-to-end tests 21 | 22 | ## 0.0.4 23 | 24 | - Avoid duplicates in the history of navigator reports 25 | 26 | ## 0.0.3 27 | 28 | - **BUG FIX**: Fix nested hash algorithm 29 | 30 | ## 0.0.2 31 | 32 | - **BREAKING CHANGE**: Add `state` to the routes builder 33 | - Public version 34 | - Basic "how to" and documentation 35 | 36 | ## 0.0.1-pre.2 37 | 38 | - Dialogs and pop buttons logic 39 | 40 | ## 0.0.1-pre.1 41 | 42 | - Refactoring 43 | 44 | ## 0.0.1-pre.0 45 | 46 | - Initial publication 47 | -------------------------------------------------------------------------------- /example/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "flutter-octopus-example" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Symbolication related 35 | app.*.symbols 36 | 37 | # Obfuscation related 38 | app.*.map.json 39 | 40 | # Android Studio will place build artifacts here 41 | /android/app/debug 42 | /android/app/profile 43 | /android/app/release 44 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # octopus 2 | 3 | Routing example 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /example/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/app/src/main/kotlin/dev/plugfox/octopus/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.plugfox.octopus 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable-v21/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/android/app/src/main/res/drawable-v21/background.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/android/app/src/main/res/drawable/background.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 10 | } 11 | } 12 | 13 | allprojects { 14 | repositories { 15 | google() 16 | mavenCentral() 17 | } 18 | } 19 | 20 | rootProject.buildDir = '../build' 21 | subprojects { 22 | project.buildDir = "${rootProject.buildDir}/${project.name}" 23 | } 24 | subprojects { 25 | project.evaluationDependsOn(':app') 26 | } 27 | 28 | tasks.register("clean", Delete) { 29 | delete rootProject.buildDir 30 | } 31 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | } 9 | settings.ext.flutterSdkPath = flutterSdkPath() 10 | 11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") 12 | 13 | repositories { 14 | google() 15 | mavenCentral() 16 | gradlePluginPortal() 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false 21 | } 22 | } 23 | 24 | plugins { 25 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 26 | id "com.android.application" version "7.3.0" apply false 27 | } 28 | 29 | include ":app" 30 | -------------------------------------------------------------------------------- /example/assets/data/categories.json: -------------------------------------------------------------------------------- 1 | { 2 | "categories": [ 3 | { 4 | "parent": null, 5 | "id": "electronics", 6 | "title": "Electronics" 7 | }, 8 | { 9 | "parent": "electronics", 10 | "id": "laptops-tablets", 11 | "title": "Laptops & tablets" 12 | }, 13 | { 14 | "parent": "electronics", 15 | "id": "smartphones", 16 | "title": "Smartphones" 17 | }, 18 | { 19 | "parent": "laptops-tablets", 20 | "id": "laptops", 21 | "title": "Laptops" 22 | }, 23 | { 24 | "parent": null, 25 | "id": "fragrances", 26 | "title": "Fragrances" 27 | }, 28 | { 29 | "parent": null, 30 | "id": "skincare", 31 | "title": "Skincare" 32 | }, 33 | { 34 | "parent": null, 35 | "id": "groceries", 36 | "title": "Groceries" 37 | }, 38 | { 39 | "parent": null, 40 | "id": "home-decoration", 41 | "title": "Home decoration" 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /example/assets/data/images/product-1-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-1-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-1-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-1-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-1-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-1-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-1-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-1-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-1-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-1-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-10-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-10-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-10-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-10-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-10-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-10-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-10-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-10-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-100-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-100-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-100-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-100-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-100-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-100-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-100-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-100-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-11-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-11-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-11-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-11-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-11-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-11-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-11-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-11-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-12-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-12-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-12-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-12-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-12-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-12-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-12-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-12-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-12-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-12-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-13-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-13-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-13-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-13-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-13-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-13-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-13-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-13-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-13-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-13-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-14-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-14-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-14-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-14-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-14-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-14-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-14-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-14-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-15-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-15-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-15-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-15-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-15-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-15-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-15-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-15-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-15-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-15-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-16-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-16-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-16-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-16-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-16-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-16-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-16-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-16-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-16-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-16-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-17-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-17-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-17-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-17-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-17-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-17-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-17-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-17-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-18-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-18-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-18-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-18-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-18-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-18-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-18-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-18-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-18-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-18-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-19-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-19-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-19-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-19-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-19-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-19-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-19-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-19-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-2-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-2-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-2-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-2-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-2-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-2-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-2-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-2-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-20-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-20-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-20-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-20-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-20-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-20-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-20-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-20-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-20-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-20-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-21-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-21-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-21-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-21-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-21-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-21-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-21-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-21-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-22-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-22-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-22-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-22-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-22-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-22-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-22-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-22-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-23-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-23-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-23-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-23-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-23-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-23-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-23-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-23-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-23-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-23-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-24-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-24-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-24-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-24-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-24-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-24-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-24-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-24-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-24-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-24-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-25-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-25-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-25-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-25-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-25-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-25-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-25-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-25-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-25-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-25-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-26-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-26-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-26-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-26-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-26-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-26-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-26-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-26-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-26-5.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-26-5.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-26-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-26-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-27-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-27-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-27-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-27-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-27-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-27-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-27-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-27-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-27-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-27-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-28-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-28-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-28-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-28-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-28-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-28-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-28-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-28-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-28-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-28-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-29-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-29-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-29-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-29-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-29-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-29-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-29-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-29-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-29-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-29-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-3-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-3-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-3-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-3-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-30-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-30-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-30-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-30-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-30-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-30-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-30-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-30-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-31-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-31-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-31-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-31-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-31-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-31-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-31-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-31-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-31-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-31-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-32-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-32-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-32-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-32-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-32-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-32-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-32-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-32-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-33-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-33-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-33-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-33-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-33-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-33-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-33-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-33-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-33-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-33-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-34-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-34-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-34-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-34-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-34-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-34-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-34-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-34-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-34-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-34-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-35-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-35-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-35-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-35-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-35-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-35-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-35-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-35-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-35-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-35-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-36-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-36-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-36-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-36-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-36-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-36-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-36-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-36-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-36-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-36-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-37-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-37-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-37-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-37-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-37-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-37-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-37-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-37-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-37-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-37-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-38-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-38-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-38-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-38-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-38-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-38-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-38-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-38-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-38-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-38-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-39-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-39-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-39-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-39-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-39-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-39-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-39-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-39-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-39-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-39-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-4-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-4-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-4-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-4-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-4-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-4-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-4-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-4-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-4-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-4-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-40-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-40-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-40-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-40-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-40-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-40-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-41-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-41-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-41-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-41-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-41-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-41-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-41-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-41-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-41-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-41-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-42-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-42-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-42-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-42-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-42-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-42-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-42-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-42-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-42-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-42-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-43-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-43-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-43-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-43-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-43-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-43-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-43-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-43-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-43-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-43-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-44-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-44-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-44-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-44-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-44-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-44-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-44-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-44-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-44-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-44-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-45-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-45-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-45-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-45-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-45-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-45-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-45-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-45-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-45-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-45-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-46-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-46-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-46-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-46-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-46-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-46-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-46-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-46-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-46-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-46-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-47-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-47-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-47-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-47-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-47-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-47-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-47-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-47-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-48-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-48-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-48-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-48-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-48-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-48-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-48-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-48-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-48-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-48-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-49-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-49-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-49-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-49-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-49-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-49-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-49-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-49-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-5-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-5-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-5-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-5-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-5-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-5-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-5-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-5-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-50-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-50-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-50-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-50-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-50-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-50-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-50-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-50-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-51-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-51-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-51-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-51-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-51-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-51-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-51-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-51-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-52-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-52-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-52-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-52-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-52-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-52-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-52-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-52-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-52-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-52-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-53-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-53-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-53-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-53-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-53-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-53-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-53-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-53-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-53-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-53-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-54-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-54-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-54-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-54-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-54-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-54-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-54-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-54-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-54-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-54-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-55-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-55-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-55-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-55-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-55-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-55-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-55-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-55-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-55-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-55-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-56-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-56-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-56-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-56-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-56-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-56-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-56-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-56-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-56-5.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-56-5.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-56-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-56-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-57-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-57-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-57-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-57-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-57-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-57-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-57-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-57-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-57-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-57-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-58-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-58-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-58-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-58-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-58-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-58-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-58-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-58-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-58-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-58-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-59-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-59-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-59-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-59-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-59-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-59-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-59-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-59-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-59-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-59-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-6-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-6-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-6-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-6-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-6-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-6-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-6-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-6-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-6-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-6-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-60-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-60-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-60-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-60-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-60-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-60-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-60-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-60-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-61-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-61-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-61-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-61-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-61-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-61-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-61-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-61-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-62-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-62-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-62-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-62-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-62-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-62-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-63-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-63-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-63-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-63-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-63-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-63-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-63-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-63-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-63-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-63-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-64-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-64-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-64-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-64-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-64-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-64-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-64-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-64-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-65-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-65-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-65-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-65-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-65-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-65-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-65-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-65-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-65-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-65-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-66-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-66-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-66-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-66-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-66-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-66-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-66-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-66-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-67-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-67-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-67-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-67-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-67-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-67-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-67-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-67-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-67-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-67-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-68-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-68-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-68-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-68-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-68-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-68-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-69-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-69-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-69-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-69-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-69-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-69-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-69-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-69-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-69-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-69-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-7-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-7-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-7-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-7-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-7-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-7-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-7-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-7-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-70-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-70-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-70-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-70-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-70-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-70-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-71-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-71-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-71-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-71-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-71-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-71-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-71-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-71-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-72-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-72-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-72-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-72-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-72-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-72-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-72-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-72-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-72-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-72-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-73-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-73-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-73-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-73-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-73-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-73-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-73-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-73-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-74-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-74-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-74-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-74-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-74-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-74-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-74-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-74-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-74-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-74-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-75-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-75-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-75-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-75-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-75-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-75-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-75-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-75-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-76-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-76-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-76-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-76-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-76-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-76-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-77-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-77-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-77-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-77-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-77-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-77-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-77-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-77-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-78-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-78-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-79-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-79-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-79-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-79-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-8-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-8-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-8-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-8-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-8-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-8-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-8-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-8-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-8-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-8-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-80-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-80-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-80-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-80-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-80-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-80-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-80-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-80-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-80-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-80-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-81-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-81-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-81-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-81-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-81-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-81-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-81-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-81-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-81-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-81-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-82-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-82-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-82-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-82-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-82-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-82-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-82-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-82-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-82-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-82-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-83-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-83-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-83-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-83-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-83-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-83-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-83-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-83-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-83-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-83-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-84-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-84-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-84-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-84-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-84-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-84-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-85-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-85-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-85-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-85-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-85-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-85-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-86-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-86-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-86-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-86-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-86-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-86-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-86-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-86-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-86-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-86-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-87-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-87-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-87-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-87-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-87-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-87-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-87-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-87-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-87-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-87-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-88-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-88-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-88-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-88-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-88-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-88-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-88-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-88-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-88-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-88-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-89-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-89-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-89-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-89-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-89-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-89-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-89-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-89-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-89-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-89-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-9-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-9-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-9-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-9-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-9-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-9-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-9-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-9-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-9-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-9-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-90-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-90-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-90-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-90-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-90-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-90-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-90-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-90-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-90-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-90-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-91-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-91-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-91-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-91-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-91-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-91-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-91-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-91-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-91-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-91-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-92-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-92-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-92-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-92-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-92-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-92-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-92-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-92-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-92-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-92-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-93-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-93-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-93-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-93-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-93-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-93-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-93-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-93-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-93-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-93-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-94-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-94-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-94-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-94-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-94-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-94-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-94-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-94-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-95-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-95-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-95-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-95-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-95-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-95-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-95-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-95-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-95-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-95-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-96-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-96-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-96-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-96-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-96-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-96-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-96-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-96-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-96-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-96-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-97-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-97-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-97-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-97-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-97-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-97-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-97-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-97-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-97-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-97-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-98-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-98-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-98-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-98-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-98-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-98-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-98-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-98-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-98-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-98-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-99-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-99-1.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-99-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-99-2.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-99-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-99-3.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-99-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-99-4.webp -------------------------------------------------------------------------------- /example/assets/data/images/product-99-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/data/images/product-99-thumbnail.webp -------------------------------------------------------------------------------- /example/assets/icons/icon-1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/assets/icons/icon-1024x1024.png -------------------------------------------------------------------------------- /example/build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | sources: 4 | - $package$ 5 | - pubspec.yaml 6 | - lib/** 7 | - test/** 8 | builders: 9 | pubspec_generator: 10 | options: 11 | output: lib/src/common/constant/pubspec.yaml.g.dart -------------------------------------------------------------------------------- /example/config/development.json: -------------------------------------------------------------------------------- 1 | { 2 | "ENVIRONMENT": "development" 3 | } 4 | -------------------------------------------------------------------------------- /example/config/production.json: -------------------------------------------------------------------------------- 1 | { 2 | "ENVIRONMENT": "production" 3 | } 4 | -------------------------------------------------------------------------------- /example/config/staging.json: -------------------------------------------------------------------------------- 1 | { 2 | "ENVIRONMENT": "staging" 3 | } 4 | -------------------------------------------------------------------------------- /example/devtools_options.yaml: -------------------------------------------------------------------------------- 1 | extensions: 2 | -------------------------------------------------------------------------------- /example/firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "build/web", 4 | "ignore": [ 5 | "firebase.json", 6 | "**/.*", 7 | "**/node_modules/**" 8 | ], 9 | "rewrites": [ 10 | { 11 | "source": "**", 12 | "destination": "/index.html" 13 | } 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /example/flutter_launcher_icons.yaml: -------------------------------------------------------------------------------- 1 | flutter_icons: 2 | image_path: "assets/icons/icon-1024x1024.png" 3 | android: true 4 | ios: true 5 | remove_alpha_ios: true 6 | min_sdk_android: 21 # android min sdk min:16, default 21 7 | background_color_ios: "#ffffff" 8 | web: 9 | generate: true 10 | image_path: "assets/icons/icon-1024x1024.png" 11 | background_color: "#ffffff" 12 | theme_color: "#ffffff" 13 | windows: 14 | generate: true 15 | image_path: "assets/icons/icon-1024x1024.png" 16 | icon_size: 256 # min:48, max:256, default: 48 17 | macos: 18 | generate: true 19 | image_path: "assets/icons/icon-1024x1024.png" 20 | -------------------------------------------------------------------------------- /example/flutter_native_splash.yaml: -------------------------------------------------------------------------------- 1 | flutter_native_splash: 2 | color: "#42a5f5" 3 | -------------------------------------------------------------------------------- /example/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "background.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "LaunchImage.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "LaunchImage@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "LaunchImage@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /example/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /example/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /example/lib/src/common/controller/controller_observer.dart: -------------------------------------------------------------------------------- 1 | import 'package:example/src/common/controller/controller.dart'; 2 | import 'package:l/l.dart'; 3 | 4 | class ControllerObserver implements IControllerObserver { 5 | @override 6 | void onCreate(IController controller) { 7 | l.v6('Controller | ${controller.runtimeType} | Created'); 8 | } 9 | 10 | @override 11 | void onDispose(IController controller) { 12 | l.v5('Controller | ${controller.runtimeType} | Disposed'); 13 | } 14 | 15 | @override 16 | void onStateChanged( 17 | IController controller, Object prevState, Object nextState) { 18 | l.d('Controller | ${controller.runtimeType} | $prevState -> $nextState'); 19 | } 20 | 21 | @override 22 | void onError(IController controller, Object error, StackTrace stackTrace) { 23 | l.w('Controller | ${controller.runtimeType} | $error', stackTrace); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /example/lib/src/common/controller/state_controller.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:example/src/common/controller/controller.dart'; 4 | import 'package:flutter/foundation.dart'; 5 | 6 | /// State controller 7 | abstract interface class IStateController 8 | implements IController { 9 | /// The current state of the controller. 10 | State get state; 11 | } 12 | 13 | /// State controller 14 | abstract base class StateController extends Controller 15 | implements IStateController { 16 | /// State controller 17 | StateController({required State initialState}) : _$state = initialState; 18 | 19 | @override 20 | @nonVirtual 21 | State get state => _$state; 22 | State _$state; 23 | 24 | @protected 25 | @nonVirtual 26 | void setState(State state) { 27 | runZonedGuarded( 28 | () => Controller.observer?.onStateChanged(this, _$state, state), 29 | (error, stackTrace) {/* ignore */}, 30 | ); 31 | _$state = state; 32 | if (isDisposed) return; 33 | notifyListeners(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /example/lib/src/common/util/color_util.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_classes_with_only_static_members 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | abstract final class ColorUtil { 6 | /// Get list of colors with length [count]. 7 | static List getColors(int count) { 8 | final primariesLength = Colors.primaries.length; 9 | if (count <= primariesLength) return Colors.primaries.take(count).toList(); 10 | 11 | final colors = List.filled(count, Colors.transparent); 12 | final step = count / (primariesLength - 1); 13 | 14 | var index = 0; 15 | for (var i = 0; i < primariesLength - 1; i++) { 16 | for (var j = 0; j < step; j++) { 17 | final color1 = Colors.primaries[i], color2 = Colors.primaries[i + 1]; 18 | colors[index] = Color.lerp(color1, color2, j / step)!; 19 | index++; 20 | if (index == count) return colors; 21 | } 22 | } 23 | 24 | while (index < count) { 25 | colors[index] = Colors.primaries.last; 26 | index++; 27 | } 28 | 29 | return colors; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /example/lib/src/common/util/platform/error_util_js.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_positional_boolean_parameters 2 | 3 | Future $captureException( 4 | Object exception, 5 | StackTrace stackTrace, 6 | String? hint, 7 | bool fatal, 8 | ) => 9 | Future.value(null); 10 | 11 | Future $captureMessage( 12 | String message, 13 | StackTrace? stackTrace, 14 | String? hint, 15 | bool warning, 16 | ) => 17 | Future.value(null); 18 | -------------------------------------------------------------------------------- /example/lib/src/common/util/timeouts.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | /// Extension methods for [Future]. 4 | extension TimeoutsExtension on Future { 5 | /// Returns a [Future] that completes with this future's result, or with the 6 | /// result of calling the [onTimeout] function, if this future doesn't 7 | /// complete before the timeout is exceeded. 8 | /// 9 | /// The [onTimeout] function must return a [Future] which will be used as the 10 | /// result of the returned [Future], and must not throw. 11 | Future logicTimeout({ 12 | double coefficient = 1, 13 | FutureOr Function()? onTimeout, 14 | }) => 15 | timeout( 16 | const Duration(milliseconds: 20000) * coefficient, 17 | onTimeout: onTimeout, 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /example/lib/src/common/widget/common_actions.dart: -------------------------------------------------------------------------------- 1 | import 'dart:collection'; 2 | 3 | import 'package:example/src/common/widget/history_button.dart'; 4 | import 'package:example/src/feature/account/widget/profile_icon_button.dart'; 5 | import 'package:example/src/feature/authentication/widget/log_out_button.dart'; 6 | import 'package:flutter/widgets.dart'; 7 | 8 | class CommonActions extends ListBase { 9 | CommonActions([List? actions]) 10 | : _actions = [ 11 | ...?actions, 12 | const HistoryButton(), 13 | const ProfileIconButton(), 14 | const LogOutButton(), 15 | ]; 16 | 17 | final List _actions; 18 | 19 | @override 20 | int get length => _actions.length; 21 | 22 | @override 23 | set length(int newLength) => _actions.length = newLength; 24 | 25 | @override 26 | Widget operator [](int index) => _actions[index]; 27 | 28 | @override 29 | void operator []=(int index, Widget value) => _actions[index] = value; 30 | } 31 | -------------------------------------------------------------------------------- /example/lib/src/common/widget/scaffold_padding.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math' as math; 2 | 3 | import 'package:example/src/common/constant/config.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | /// {@template scaffold_padding} 7 | /// ScaffoldPadding widget. 8 | /// {@endtemplate} 9 | class ScaffoldPadding extends EdgeInsets { 10 | const ScaffoldPadding._(final double value) 11 | : super.symmetric(horizontal: value); 12 | 13 | /// {@macro scaffold_padding} 14 | factory ScaffoldPadding.of(BuildContext context) => 15 | ScaffoldPadding._(math.max( 16 | (MediaQuery.sizeOf(context).width - Config.maxScreenLayoutWidth) / 2, 17 | 16)); 18 | 19 | /// {@macro scaffold_padding} 20 | static Widget widget(BuildContext context, [Widget? child]) => 21 | Padding(padding: ScaffoldPadding.of(context), child: child); 22 | 23 | /// {@macro scaffold_padding} 24 | static Widget sliver(BuildContext context, [Widget? child]) => 25 | SliverPadding(padding: ScaffoldPadding.of(context), sliver: child); 26 | } 27 | -------------------------------------------------------------------------------- /example/lib/src/common/widget/text_placeholder.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math' as math; 2 | 3 | import 'package:example/src/common/widget/shimmer.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | /// {@template text_placeholder} 7 | /// TextPlaceholder widget. 8 | /// {@endtemplate} 9 | class TextPlaceholder extends StatelessWidget { 10 | /// {@macro text_placeholder} 11 | TextPlaceholder({ 12 | double width = double.infinity, 13 | double height = 28, 14 | super.key, 15 | }) : size = Size(width, height); 16 | 17 | /// Size of the placeholder 18 | final Size size; 19 | 20 | @override 21 | Widget build(BuildContext context) => LayoutBuilder( 22 | builder: (context, constraints) => Shimmer( 23 | size: Size( 24 | math.min(size.width, constraints.maxWidth - 16), 25 | size.height, 26 | ), 27 | color: Colors.grey[400], 28 | backgroundColor: Colors.grey[100], 29 | ), 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /example/lib/src/feature/account/widget/profile_icon_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:example/src/common/localization/localization.dart'; 2 | import 'package:example/src/common/router/routes.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/services.dart'; 5 | import 'package:octopus/octopus.dart'; 6 | 7 | /// {@template profile_icon_button} 8 | /// ProfileIconButton widget 9 | /// {@endtemplate} 10 | class ProfileIconButton extends StatelessWidget { 11 | /// {@macro profile_icon_button} 12 | const ProfileIconButton({super.key}); 13 | 14 | @override 15 | Widget build(BuildContext context) => IconButton( 16 | icon: const Icon(Icons.person), 17 | tooltip: Localization.of(context).profileButton, 18 | onPressed: () { 19 | Octopus.maybeOf(context)?.setState((state) => state 20 | ..removeByName(Routes.profile.name) 21 | ..add(Routes.profile.node())); 22 | HapticFeedback.mediumImpact().ignore(); 23 | }, 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /example/lib/src/feature/account/widget/settings_dialog.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | /// {@template settings_screen} 4 | /// SettingsScreen widget. 5 | /// {@endtemplate} 6 | class SettingsDialog extends StatelessWidget { 7 | /// {@macro settings_screen} 8 | const SettingsDialog({super.key}); 9 | 10 | @override 11 | Widget build(BuildContext context) => AlertDialog.adaptive( 12 | title: const Text('Settings'), 13 | content: const Text('Coming soon...'), 14 | actions: [ 15 | TextButton( 16 | onPressed: () => Navigator.maybePop(context), 17 | child: const Text('Close'), 18 | ), 19 | ], 20 | shape: RoundedRectangleBorder( 21 | borderRadius: BorderRadius.circular(16), 22 | ), 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /example/lib/src/feature/authentication/model/sign_in_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | @immutable 4 | final class SignInData { 5 | const SignInData({ 6 | required this.username, 7 | required this.password, 8 | }); 9 | 10 | /// Username. 11 | final String username; 12 | 13 | /// Password. 14 | final String password; 15 | } 16 | -------------------------------------------------------------------------------- /example/lib/src/feature/initialization/data/platform/platform_initialization.dart: -------------------------------------------------------------------------------- 1 | export 'platform_initialization_vm.dart' 2 | // ignore: uri_does_not_exist 3 | if (dart.library.html) 'platform_initialization_js.dart'; 4 | -------------------------------------------------------------------------------- /example/lib/src/feature/initialization/data/platform/platform_initialization_vm.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io' as io; 2 | 3 | Future $platformInitialization() => 4 | io.Platform.isAndroid || io.Platform.isIOS 5 | ? _mobileInitialization() 6 | : _desktopInitialization(); 7 | 8 | Future _mobileInitialization() async {} 9 | 10 | Future _desktopInitialization() async {} 11 | -------------------------------------------------------------------------------- /example/lib/src/feature/shop/shop_screens.dart: -------------------------------------------------------------------------------- 1 | export 'package:example/src/feature/shop/widget/basket_screen.dart'; 2 | export 'package:example/src/feature/shop/widget/catalog_screen.dart'; 3 | export 'package:example/src/feature/shop/widget/category_screen.dart'; 4 | export 'package:example/src/feature/shop/widget/checkout_screen.dart'; 5 | export 'package:example/src/feature/shop/widget/favorites_screen.dart'; 6 | export 'package:example/src/feature/shop/widget/product_image_dialog.dart'; 7 | export 'package:example/src/feature/shop/widget/product_screen.dart'; 8 | export 'package:example/src/feature/shop/widget/shop_screen.dart'; 9 | -------------------------------------------------------------------------------- /example/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /example/linux/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | 10 | void fl_register_plugins(FlPluginRegistry* registry) { 11 | } 12 | -------------------------------------------------------------------------------- /example/linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /example/linux/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | ) 7 | 8 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 9 | ) 10 | 11 | set(PLUGIN_BUNDLED_LIBRARIES) 12 | 13 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 14 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) 15 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 16 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 18 | endforeach(plugin) 19 | 20 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 21 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) 22 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 23 | endforeach(ffi_plugin) 24 | -------------------------------------------------------------------------------- /example/linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /example/linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /example/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /example/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "ephemeral/Flutter-Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /example/macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import path_provider_foundation 9 | import shared_preferences_foundation 10 | 11 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 12 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 13 | SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) 14 | } 15 | -------------------------------------------------------------------------------- /example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /example/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = octopus 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = dev.plugfox.octopus 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2023 dev.plugfox. All rights reserved. 15 | -------------------------------------------------------------------------------- /example/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /example/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /example/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /example/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /example/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import FlutterMacOS 2 | import Cocoa 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /example/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/web/favicon.png -------------------------------------------------------------------------------- /example/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/web/icons/Icon-192.png -------------------------------------------------------------------------------- /example/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/web/icons/Icon-512.png -------------------------------------------------------------------------------- /example/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /example/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /example/web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "octopus", 3 | "short_name": "octopus", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#ffffff", 7 | "theme_color": "#ffffff", 8 | "description": "Routing example", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /example/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /example/windows/flutter/generated_plugin_registrant.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #include "generated_plugin_registrant.h" 8 | 9 | 10 | void RegisterPlugins(flutter::PluginRegistry* registry) { 11 | } 12 | -------------------------------------------------------------------------------- /example/windows/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void RegisterPlugins(flutter::PluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /example/windows/flutter/generated_plugins.cmake: -------------------------------------------------------------------------------- 1 | # 2 | # Generated file, do not edit. 3 | # 4 | 5 | list(APPEND FLUTTER_PLUGIN_LIST 6 | ) 7 | 8 | list(APPEND FLUTTER_FFI_PLUGIN_LIST 9 | ) 10 | 11 | set(PLUGIN_BUNDLED_LIBRARIES) 12 | 13 | foreach(plugin ${FLUTTER_PLUGIN_LIST}) 14 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) 15 | target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) 16 | list(APPEND PLUGIN_BUNDLED_LIBRARIES $) 17 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) 18 | endforeach(plugin) 19 | 20 | foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) 21 | add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) 22 | list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) 23 | endforeach(ffi_plugin) 24 | -------------------------------------------------------------------------------- /example/windows/runner/flutter_window.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_FLUTTER_WINDOW_H_ 2 | #define RUNNER_FLUTTER_WINDOW_H_ 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | #include "win32_window.h" 10 | 11 | // A window that does nothing but host a Flutter view. 12 | class FlutterWindow : public Win32Window { 13 | public: 14 | // Creates a new FlutterWindow hosting a Flutter view running |project|. 15 | explicit FlutterWindow(const flutter::DartProject& project); 16 | virtual ~FlutterWindow(); 17 | 18 | protected: 19 | // Win32Window: 20 | bool OnCreate() override; 21 | void OnDestroy() override; 22 | LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, 23 | LPARAM const lparam) noexcept override; 24 | 25 | private: 26 | // The project to run. 27 | flutter::DartProject project_; 28 | 29 | // The Flutter instance hosted by this window. 30 | std::unique_ptr flutter_controller_; 31 | }; 32 | 33 | #endif // RUNNER_FLUTTER_WINDOW_H_ 34 | -------------------------------------------------------------------------------- /example/windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /example/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PlugFox/octopus/18f7fdc26734d8533ac981e1bee74c05a12f6526/example/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /example/windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /example/windows/runner/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef RUNNER_UTILS_H_ 2 | #define RUNNER_UTILS_H_ 3 | 4 | #include 5 | #include 6 | 7 | // Creates a console for the process, and redirects stdout and stderr to 8 | // it for both the runner and the Flutter library. 9 | void CreateAndAttachConsole(); 10 | 11 | // Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string 12 | // encoded in UTF-8. Returns an empty std::string on failure. 13 | std::string Utf8FromUtf16(const wchar_t* utf16_string); 14 | 15 | // Gets the command line arguments passed in as a std::vector, 16 | // encoded in UTF-8. Returns an empty std::vector on failure. 17 | std::vector GetCommandLineArguments(); 18 | 19 | #endif // RUNNER_UTILS_H_ 20 | -------------------------------------------------------------------------------- /extension/devtools/config.yaml: -------------------------------------------------------------------------------- 1 | name: octopus-devtools 2 | issueTracker: https://github.com/PlugFox/octopus/issues 3 | version: 0.0.1 4 | materialIconCodePoint: '0xe542' -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "public": "example/build/web", 4 | "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], 5 | "rewrites": [ 6 | { 7 | "source": "**", 8 | "destination": "/index.html" 9 | } 10 | ] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/octopus.dart: -------------------------------------------------------------------------------- 1 | library octopus; 2 | 3 | export 'src/controller/controller.dart'; 4 | export 'src/controller/delegate.dart'; 5 | export 'src/controller/guard.dart'; 6 | export 'src/controller/observer.dart'; 7 | export 'src/state/state.dart'; 8 | export 'src/widget/bucket_navigator.dart'; 9 | export 'src/widget/build_context_extension.dart'; 10 | export 'src/widget/navigator.dart'; 11 | export 'src/widget/no_animation.dart'; 12 | export 'src/widget/route_context.dart'; 13 | export 'src/widget/tools.dart'; 14 | -------------------------------------------------------------------------------- /lib/src/controller/delegate.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'package:octopus/src/state/state.dart'; 3 | 4 | /// Octopus delegate. 5 | abstract base class OctopusDelegate extends RouterDelegate { 6 | /// Routes hash table. 7 | abstract final Map routes; 8 | 9 | /// Whether the controller is currently processing a tasks. 10 | bool get isProcessing; 11 | 12 | /// Completes when processing queue is empty 13 | /// and all transactions are completed. 14 | /// This is mean controller is ready to use and in a idle state. 15 | Future get processingCompleted; 16 | 17 | /// Build pages from [OctopusNode]s. 18 | List> buildPages(BuildContext context, List nodes); 19 | } 20 | -------------------------------------------------------------------------------- /lib/src/controller/singleton.dart: -------------------------------------------------------------------------------- 1 | import 'package:meta/meta.dart'; 2 | import 'package:octopus/src/controller/controller.dart'; 3 | 4 | /// Current singleton instance of the [Octopus]. 5 | @internal 6 | Octopus? $octopusSingletonInstance; 7 | -------------------------------------------------------------------------------- /lib/src/controller/typedefs.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | 3 | /// Builder for the unknown route. 4 | typedef NotFoundBuilder = Widget Function( 5 | BuildContext ctx, 6 | String name, 7 | Map arguments, 8 | ); 9 | -------------------------------------------------------------------------------- /lib/src/state/name_regexp.dart: -------------------------------------------------------------------------------- 1 | import 'package:meta/meta.dart'; 2 | 3 | /// Regular expression for the name of the state. 4 | @internal 5 | final Pattern $nameRegExp = RegExp(r'^[a-zA-Z0-9\-]+$'); 6 | -------------------------------------------------------------------------------- /lib/src/state/node_extra_storage.dart: -------------------------------------------------------------------------------- 1 | import 'package:meta/meta.dart'; 2 | 3 | /// $NodeExtraStorage Singleton class 4 | @internal 5 | class $NodeExtraStorage { 6 | factory $NodeExtraStorage() => _internalSingleton; 7 | $NodeExtraStorage._internal() : _storage = ?>{}; 8 | static final $NodeExtraStorage _internalSingleton = 9 | $NodeExtraStorage._internal(); 10 | 11 | final Map?> _storage; 12 | 13 | @internal 14 | Map getByKey(String key) => 15 | _storage[key] ??= {}; 16 | 17 | @internal 18 | void removeByKey(String key) => _storage.remove(key); 19 | 20 | @internal 21 | void removeByKeys(Set keys) => keys.forEach(_storage.remove); 22 | 23 | @internal 24 | void removeEverythingExcept(Set keys) => 25 | removeByKeys(_storage.keys.toSet().difference(keys)); 26 | } 27 | -------------------------------------------------------------------------------- /lib/src/util/platform/system_navigator_util_vm.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/services.dart'; 2 | import 'package:meta/meta.dart'; 3 | import 'package:octopus/src/util/logs.dart'; 4 | 5 | /// Push state. 6 | @internal 7 | void $pushState(Object? data, String? title, Uri? url) { 8 | fine('pushState($url)'); 9 | // SystemNavigator.selectMultiEntryHistory(); // selectSingleEntryHistory 10 | SystemNavigator.routeInformationUpdated( 11 | uri: url, 12 | state: data, 13 | replace: false, 14 | ).ignore(); 15 | } 16 | 17 | /// Replace state. 18 | @internal 19 | void $replaceState(Object? data, String? title, Uri? url) { 20 | fine('replaceState($url)'); 21 | // SystemNavigator.selectMultiEntryHistory(); // selectSingleEntryHistory 22 | SystemNavigator.routeInformationUpdated( 23 | uri: url, 24 | state: data, 25 | replace: true, 26 | ).ignore(); 27 | } 28 | 29 | /// Close app. 30 | @internal 31 | void $closeApp() { 32 | fine('closeApp()'); 33 | SystemNavigator.pop().ignore(); 34 | } 35 | -------------------------------------------------------------------------------- /lib/src/util/system_navigator_util.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_classes_with_only_static_members 2 | 3 | import 'package:meta/meta.dart'; 4 | import 'package:octopus/src/util/platform/system_navigator_util_js.dart' 5 | // ignore: uri_does_not_exist 6 | if (dart.library.io) 'package:octopus/src/util/platform/system_navigator_util_vm.dart'; 7 | 8 | @internal 9 | abstract final class SystemNavigatorUtil { 10 | static void pushState({Object? data, String? title, Uri? url}) => 11 | $pushState(data, title, url); 12 | 13 | static void replaceState({Object? data, String? title, Uri? url}) => 14 | $replaceState(data, title, url); 15 | 16 | static void closeApp() => $closeApp(); 17 | } 18 | -------------------------------------------------------------------------------- /lib/src/widget/build_context_extension.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart' show BuildContext; 2 | import 'package:octopus/src/controller/controller.dart'; 3 | import 'package:octopus/src/state/state.dart'; 4 | import 'package:octopus/src/widget/inherited_octopus.dart'; 5 | 6 | /// Extension methods for [BuildContext]. 7 | extension OctopusBuildContextExtension on BuildContext { 8 | /// Receives the [Octopus] instance from the elements tree. 9 | Octopus get octopus => InheritedOctopus.of(this, listen: false).octopus; 10 | 11 | /// Receives the current [OctopusState] instance from the elements tree. 12 | OctopusState$Immutable get readOctopusState => 13 | InheritedOctopus.of(this, listen: false).state; 14 | 15 | /// Receives the current [OctopusState] instance from the elements tree 16 | /// and listen for changes. 17 | OctopusState$Immutable get watchOctopusState => 18 | InheritedOctopus.of(this, listen: true).state; 19 | } 20 | -------------------------------------------------------------------------------- /lib/src/widget/dialog_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:meta/meta.dart'; 3 | 4 | /// Used for creating a dialog route if route name end with '-dialog'. 5 | @internal 6 | class OctopusDialogPage extends Page { 7 | const OctopusDialogPage({ 8 | required this.builder, 9 | super.key, 10 | super.name, 11 | super.arguments, 12 | super.restorationId, 13 | }); 14 | 15 | final WidgetBuilder builder; 16 | 17 | @override 18 | Route createRoute(BuildContext context) => DialogRoute( 19 | context: context, 20 | builder: builder, 21 | settings: this, 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /lib/src/widget/tabs.dart: -------------------------------------------------------------------------------- 1 | // TODO(plugfox): implement tabs with internal navigators 2 | -------------------------------------------------------------------------------- /test/octopus_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: unnecessary_lambdas 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | 5 | import 'src/unit/hash_test.dart' as hash_test; 6 | import 'src/unit/state_test.dart' as state_test; 7 | import 'src/widget/observer_test.dart' as observer_test; 8 | 9 | void main() { 10 | group('unit', () { 11 | state_test.main(); 12 | hash_test.main(); 13 | }); 14 | 15 | group('widget', () { 16 | observer_test.main(); 17 | }); 18 | } 19 | --------------------------------------------------------------------------------