diff --git a/CHANGELOG.md b/CHANGELOG.md
index b8182874..f53a648c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
# ImageOptimize Changelog
+## 4.0.3 - 2022.11.17
+### Changed
+* Fixed HMR in local dev with explicit alias that resolves to the actual directory
+
+### Fixed
+* Fixed an issue where the `craft image-optimize/optimize/create` CLI command did not properly optimize all images ([#350](https://github.com/nystudio107/craft-imageoptimize/issues/350))
+* Fixed an issue which caused the Imgix `auto` to no longer work for auto format ([#357](https://github.com/nystudio107/craft-imageoptimize/issues/357))
+* Fixed a JavaScript console error in field settings due to Garnish shuffling around how things work for menus
+* Fixed an issue where `srcsetWidth()` wouldn't return the proper variant, due to strict comparison operator ([#327](https://github.com/nystudio107/craft-imageoptimize/issues/327))
+* Fixed an issue where using a transform method other than Craft along with `asset.getUrl()` in your templates could throw an exception ([#363](https://github.com/nystudio107/craft-imageoptimize/issues/363))
+
## 4.0.2 - 2022.07.17
### Changed
* Add `allow-plugins` to `composer.json` to allow CI tests to work
diff --git a/README.md b/README.md
index ad02bf77..71f0f178 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/quality-score.png?b=v1)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/?branch=v1) [![Code Coverage](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/coverage.png?b=v1)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/?branch=v1) [![Build Status](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/build.png?b=v1)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/build-status/v1) [![Code Intelligence Status](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/code-intelligence.svg?b=v1)](https://scrutinizer-ci.com/code-intelligence)
+[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/quality-score.png?b=v4)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/?branch=v4) [![Code Coverage](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/coverage.png?b=v4)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/?branch=v4) [![Build Status](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/build.png?b=v4)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/build-status/v4) [![Code Intelligence Status](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/code-intelligence.svg?b=v4)](https://scrutinizer-ci.com/code-intelligence)
-# ImageOptimize plugin for Craft CMS 3.x
+# ImageOptimize plugin for Craft CMS 4.x
Automatically create & optimize responsive image transforms, using either native Craft transforms or a service like imgix or Thumbor, with zero template changes.
@@ -10,7 +10,7 @@ Automatically create & optimize responsive image transforms, using either native
## Requirements
-This plugin requires Craft CMS 3.0.0 or later.
+This plugin requires Craft CMS 4.0.0 or later.
## Installation
@@ -28,10 +28,6 @@ To install the plugin, follow these instructions.
You can also install ImageOptimize via the **Plugin Store** in the Craft Control Panel.
-ImageOptimize works on Craft 3.x.
-
-If you want to use ImageOptimize with Cloudinary, install the [Cloudinary](https://github.com/timkelty/craft3-cloudinary) plugin that will make Cloudinary available as a file system for Craft CMS 3.
-
## Documentation
Click here -> [Image Optimize Documentation](https://nystudio107.com/plugins/imageoptimize/documentation)
diff --git a/buildchain/Makefile b/buildchain/Makefile
index 192283f8..0e1e3b08 100644
--- a/buildchain/Makefile
+++ b/buildchain/Makefile
@@ -11,24 +11,30 @@ DOCKERRUN=docker container run \
.PHONY: build dev docker install clean npm
+# Build the production assets
build: docker install
${DOCKERRUN} \
run build
+# Start up the dev server
dev: docker install
${DOCKERRUN} \
run dev
+# Start the Docker container
docker:
docker build \
. \
-t ${CONTAINER}:${TAG} \
--build-arg TAG=${TAG} \
--no-cache
+# Run an npm install
install: docker
${DOCKERRUN} \
install
+# Remove node_modules/* & package-lock.json
clean:
rm -rf node_modules/
rm -f package-lock.json
+# Run the passed in npm command
npm: docker
${DOCKERRUN} \
$(filter-out $@,$(MAKECMDGOALS))
diff --git a/buildchain/vite.config.ts b/buildchain/vite.config.ts
index 14c56399..0fe94e14 100644
--- a/buildchain/vite.config.ts
+++ b/buildchain/vite.config.ts
@@ -53,12 +53,15 @@ export default defineConfig(({command}) => ({
cache: false,
}),
],
+ optimizeDeps: {
+ include: ['vue-confetti'],
+ },
publicDir: '../src/web/assets/public',
resolve: {
- alias: {
- '@': path.resolve(__dirname, './src'),
- 'vue': 'vue/dist/vue.esm.js',
- },
+ alias: [
+ {find: '@', replacement: path.resolve(__dirname, '../src/web/assets/src')},
+ {find: 'vue', replacement: 'vue/dist/vue.esm.js'},
+ ],
preserveSymlinks: true,
},
server: {
@@ -66,7 +69,7 @@ export default defineConfig(({command}) => ({
strict: false
},
host: '0.0.0.0',
- origin: 'http://localhost:3001/',
+ origin: 'http://localhost:3001',
port: 3001,
strictPort: true,
}
diff --git a/composer.json b/composer.json
index 134ef1fc..7d6f37fc 100644
--- a/composer.json
+++ b/composer.json
@@ -2,7 +2,7 @@
"name": "nystudio107/craft-imageoptimize",
"description": "Automatically create & optimize responsive image transforms, using either native Craft transforms or a service like imgix, with zero template changes.",
"type": "craft-plugin",
- "version": "4.0.2",
+ "version": "4.0.3",
"keywords": [
"craft",
"cms",
diff --git a/docs/docs/index.md b/docs/docs/index.md
index fb98692f..a9d14cb4 100644
--- a/docs/docs/index.md
+++ b/docs/docs/index.md
@@ -1,10 +1,10 @@
---
-title: ImageOptimize plugin for Craft CMS 3.x
+title: ImageOptimize plugin for Craft CMS
description: Documentation for the ImageOptimize plugin. The Transcoder plugin automatically creates & optimizes responsive image transforms, using either native Craft transforms or a service like imgix or Thumbor, with zero template changes
---
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/quality-score.png?b=v1)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/?branch=v1) [![Code Coverage](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/coverage.png?b=v1)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/?branch=v1) [![Build Status](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/build.png?b=v1)](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/build-status/v1) [![Code Intelligence Status](https://scrutinizer-ci.com/g/nystudio107/craft-imageoptimize/badges/code-intelligence.svg?b=v1)](https://scrutinizer-ci.com/code-intelligence)
-# ImageOptimize plugin for Craft CMS 3.x
+# ImageOptimize plugin for Craft CMS
Automatically create & optimize responsive image transforms, using either native Craft transforms or a service like imgix or Thumbor, with zero template changes.
diff --git a/src/ImageOptimize.php b/src/ImageOptimize.php
index ea4b5d30..66222c83 100644
--- a/src/ImageOptimize.php
+++ b/src/ImageOptimize.php
@@ -1,6 +1,6 @@
OptimizeService::class,
- 'optimizedImages' => OptimizedImagesService::class,
- 'placeholder' => PlaceholderService::class,
- // Register the manifest service
- 'vite' => [
- 'class' => VitePluginService::class,
- 'assetClass' => ImageOptimizeAsset::class,
- 'useDevServer' => true,
- 'devServerPublic' => 'http://localhost:3001',
- 'serverPublic' => 'http://localhost:8000',
- 'errorEntry' => 'src/js/ImageOptimize.js',
- 'devServerInternal' => 'http://craft-imageoptimize-buildchain:3001',
- 'checkDevServer' => true,
- ],
- ];
-
- parent::__construct($id, $parent, $config);
- }
-
// Public Methods
// =========================================================================
@@ -366,9 +337,12 @@ static function (ImageTransformerOperationEvent $event): void {
__METHOD__
);
// Return the path to the optimized image to _createTransformForAsset()
- $event->path = ImageOptimize::$plugin->optimize->handleGenerateTransformEvent(
+ $tempPath = ImageOptimize::$plugin->optimize->handleGenerateTransformEvent(
$event
);
+ if ($tempPath) {
+ $event->tempPath = $tempPath;
+ }
}
);
diff --git a/src/assetbundles/imageoptimize/ImageOptimizeAsset.php b/src/assetbundles/imageoptimize/ImageOptimizeAsset.php
index a6de9723..df800fa6 100644
--- a/src/assetbundles/imageoptimize/ImageOptimizeAsset.php
+++ b/src/assetbundles/imageoptimize/ImageOptimizeAsset.php
@@ -1,6 +1,6 @@
true,
- // Controls whether SVG placeholder silhouettes should be created for image variants
- // It takes a bit of time, so if you never plan to use them, you can turn it off
+ // Controls whether SVG placeholder silhouettes should be created for image variants
+ // It takes a bit of time, so if you never plan to use them, you can turn it off
'createPlaceholderSilhouettes' => false,
// Controls whether retina images are automatically created with reduced quality
@@ -104,47 +104,47 @@
],
// Default image variants
- 'defaultVariants' => [
+ 'defaultVariants' => [
[
- 'width' => 1200,
+ 'width' => 1200,
'useAspectRatio' => true,
- 'aspectRatioX' => 16.0,
- 'aspectRatioY' => 9.0,
- 'retinaSizes' => ['1'],
- 'quality' => 82,
- 'format' => 'jpg',
+ 'aspectRatioX' => 16.0,
+ 'aspectRatioY' => 9.0,
+ 'retinaSizes' => ['1'],
+ 'quality' => 82,
+ 'format' => 'jpg',
],
[
- 'width' => 992,
+ 'width' => 992,
'useAspectRatio' => true,
- 'aspectRatioX' => 16.0,
- 'aspectRatioY' => 9.0,
- 'retinaSizes' => ['1'],
- 'quality' => 82,
- 'format' => 'jpg',
+ 'aspectRatioX' => 16.0,
+ 'aspectRatioY' => 9.0,
+ 'retinaSizes' => ['1'],
+ 'quality' => 82,
+ 'format' => 'jpg',
],
[
- 'width' => 768,
+ 'width' => 768,
'useAspectRatio' => true,
- 'aspectRatioX' => 4.0,
- 'aspectRatioY' => 3.0,
- 'retinaSizes' => ['1'],
- 'quality' => 60,
- 'format' => 'jpg',
+ 'aspectRatioX' => 4.0,
+ 'aspectRatioY' => 3.0,
+ 'retinaSizes' => ['1'],
+ 'quality' => 60,
+ 'format' => 'jpg',
],
[
- 'width' => 576,
+ 'width' => 576,
'useAspectRatio' => true,
- 'aspectRatioX' => 4.0,
- 'aspectRatioY' => 3.0,
- 'retinaSizes' => ['1'],
- 'quality' => 60,
- 'format' => 'jpg',
+ 'aspectRatioX' => 4.0,
+ 'aspectRatioY' => 3.0,
+ 'retinaSizes' => ['1'],
+ 'quality' => 60,
+ 'format' => 'jpg',
],
],
// Active image processors
- 'activeImageProcessors' => [
+ 'activeImageProcessors' => [
'jpg' => [
'jpegoptim',
],
@@ -173,49 +173,49 @@
],
// Preset image processors
- 'imageProcessors' => [
+ 'imageProcessors' => [
// jpeg optimizers
'jpegoptim' => [
- 'commandPath' => '/usr/bin/jpegoptim',
- 'commandOptions' => '-s',
+ 'commandPath' => '/usr/bin/jpegoptim',
+ 'commandOptions' => '-s',
'commandOutputFileFlag' => '',
],
- 'mozjpeg' => [
- 'commandPath' => '/usr/bin/mozjpeg',
- 'commandOptions' => '-optimize -copy none',
+ 'mozjpeg' => [
+ 'commandPath' => '/usr/bin/mozjpeg',
+ 'commandOptions' => '-optimize -copy none',
'commandOutputFileFlag' => '-outfile',
],
- 'jpegtran' => [
- 'commandPath' => '/usr/bin/jpegtran',
- 'commandOptions' => '-optimize -copy none',
+ 'jpegtran' => [
+ 'commandPath' => '/usr/bin/jpegtran',
+ 'commandOptions' => '-optimize -copy none',
'commandOutputFileFlag' => '',
],
// png optimizers
- 'optipng' => [
- 'commandPath' => '/usr/bin/optipng',
- 'commandOptions' => '-o3 -strip all',
+ 'optipng' => [
+ 'commandPath' => '/usr/bin/optipng',
+ 'commandOptions' => '-o3 -strip all',
'commandOutputFileFlag' => '',
],
- 'pngcrush' => [
- 'commandPath' => '/usr/bin/pngcrush',
- 'commandOptions' => '-brute -ow',
+ 'pngcrush' => [
+ 'commandPath' => '/usr/bin/pngcrush',
+ 'commandOptions' => '-brute -ow',
'commandOutputFileFlag' => '',
],
- 'pngquant' => [
- 'commandPath' => '/usr/bin/pngquant',
- 'commandOptions' => '--strip--skip -if-larger',
+ 'pngquant' => [
+ 'commandPath' => '/usr/bin/pngquant',
+ 'commandOptions' => '--strip--skip -if-larger',
'commandOutputFileFlag' => '',
],
// svg optimizers
- 'svgo' => [
- 'commandPath' => '/usr/bin/svgo',
- 'commandOptions' => '',
+ 'svgo' => [
+ 'commandPath' => '/usr/bin/svgo',
+ 'commandOptions' => '',
'commandOutputFileFlag' => '',
],
// gif optimizers
- 'gifsicle' => [
- 'commandPath' => '/usr/bin/gifsicle',
- 'commandOptions' => '-O3 -k 256',
+ 'gifsicle' => [
+ 'commandPath' => '/usr/bin/gifsicle',
+ 'commandOptions' => '-O3 -k 256',
'commandOutputFileFlag' => '',
],
],
@@ -223,10 +223,10 @@
'imageVariantCreators' => [
// webp variant creator
'cwebp' => [
- 'commandPath' => '/usr/bin/cwebp',
- 'commandOptions' => '',
+ 'commandPath' => '/usr/bin/cwebp',
+ 'commandOptions' => '',
'commandOutputFileFlag' => '-o',
- 'commandQualityFlag' => '-q',
+ 'commandQualityFlag' => '-q',
'imageVariantExtension' => 'webp',
],
],
diff --git a/src/console/controllers/OptimizeController.php b/src/console/controllers/OptimizeController.php
index 3691dbc5..0ac36c30 100755
--- a/src/console/controllers/OptimizeController.php
+++ b/src/console/controllers/OptimizeController.php
@@ -1,6 +1,6 @@
$r, 'g' => $g, 'b' => $b];
}
diff --git a/src/helpers/PluginTemplate.php b/src/helpers/PluginTemplate.php
index 10e2bed0..527b0f0b 100644
--- a/src/helpers/PluginTemplate.php
+++ b/src/helpers/PluginTemplate.php
@@ -1,6 +1,6 @@
getExtension() : $variant['format'];
- $variant['format'] = $finalFormat;
+ $variantFormat = $finalFormat;
+ if (!ImageOptimize::$plugin->transformMethod instanceof CraftImageTransform) {
+ $variantFormat = empty($variant['format']) ? null : $variant['format'];
+ }
+ $variant['format'] = $variantFormat;
// Only try the transform if it's possible
if ($asset->height > 0
&& Image::canManipulateAsImage($finalFormat)
@@ -309,9 +314,7 @@ public function resaveAllVolumesAssets(?int $fieldId = null, bool $force = false
{
$volumes = Craft::$app->getVolumes()->getAllVolumes();
foreach ($volumes as $volume) {
- if (is_subclass_of($volume, Volume::class)) {
- $this->resaveVolumeAssets($volume, $fieldId, $force);
- }
+ $this->resaveVolumeAssets($volume, $fieldId, $force);
}
}
diff --git a/src/services/Placeholder.php b/src/services/Placeholder.php
index f8530c95..68fc7de6 100644
--- a/src/services/Placeholder.php
+++ b/src/services/Placeholder.php
@@ -1,6 +1,6 @@
[
+ 'optimize' => OptimizeService::class,
+ 'optimizedImages' => OptimizedImagesService::class,
+ 'placeholder' => PlaceholderService::class,
+ // Register the vite service
+ 'vite' => [
+ 'class' => VitePluginService::class,
+ 'assetClass' => ImageOptimizeAsset::class,
+ 'useDevServer' => true,
+ 'devServerPublic' => 'http://localhost:3001',
+ 'serverPublic' => 'http://localhost:8000',
+ 'errorEntry' => 'src/js/ImageOptimize.js',
+ 'devServerInternal' => 'http://craft-imageoptimize-buildchain:3001',
+ 'checkDevServer' => true,
+ ],
+ ]
+ ];
+ }
+
+ // Public Methods
+ // =========================================================================
+
+ /**
+ * Returns the optimize service
+ *
+ * @return OptimizeService The optimize service
+ * @throws InvalidConfigException
+ */
+ public function getOptimize(): OptimizeService
+ {
+ return $this->get('optimize');
+ }
+
+ /**
+ * Returns the optimizedImages service
+ *
+ * @return OptimizedImagesService The optimizedImages service
+ * @throws InvalidConfigException
+ */
+ public function getOptimizedImages(): OptimizedImagesService
+ {
+ return $this->get('optimizedImages');
+ }
+
+ /**
+ * Returns the placeholder service
+ *
+ * @return PlaceholderService The placeholder service
+ * @throws InvalidConfigException
+ */
+ public function getPlaceholder(): PlaceholderService
+ {
+ return $this->get('placeholder');
+ }
+
+ /**
+ * Returns the vite service
+ *
+ * @return VitePluginService The vite service
+ * @throws InvalidConfigException
+ */
+ public function getVite(): VitePluginService
+ {
+ return $this->get('vite');
+ }
+}
diff --git a/src/templates/_components/fields/OptimizedImages_error.twig b/src/templates/_components/fields/OptimizedImages_error.twig
index ded0e4c6..74a0ce65 100644
--- a/src/templates/_components/fields/OptimizedImages_error.twig
+++ b/src/templates/_components/fields/OptimizedImages_error.twig
@@ -1,7 +1,7 @@
{# @var craft \craft\web\twig\variables\CraftVariable #}
{#
/**
- * Image Optimize plugin for Craft CMS 3.x
+ * Image Optimize plugin for Craft CMS
*
* OptimizedImages Field Input
*
diff --git a/src/templates/_components/fields/OptimizedImages_input.twig b/src/templates/_components/fields/OptimizedImages_input.twig
index ee98ce01..7c8927bf 100644
--- a/src/templates/_components/fields/OptimizedImages_input.twig
+++ b/src/templates/_components/fields/OptimizedImages_input.twig
@@ -1,7 +1,7 @@
{# @var craft \craft\web\twig\variables\CraftVariable #}
{#
/**
- * Image Optimize plugin for Craft CMS 3.x
+ * Image Optimize plugin for Craft CMS
*
* OptimizedImages Field Input
*
diff --git a/src/templates/_includes/checkboxGroup.twig b/src/templates/_includes/checkboxGroup.twig
index 08ac0da9..791e2006 100644
--- a/src/templates/_includes/checkboxGroup.twig
+++ b/src/templates/_includes/checkboxGroup.twig
@@ -1,7 +1,7 @@
{# @var craft \craft\web\twig\variables\CraftVariable #}
{#
/**
- * Image Optimize plugin for Craft CMS 3.x
+ * Image Optimize plugin for Craft CMS
*
* Custom `checkboxGroup` input. Checkbox group doesn't allow access to checkbox, therefore we can't control the ID.
* For this reason we use create the a custom `checkboxGroup` that will use Craft native checkboxes.
@@ -25,7 +25,7 @@
{%- set name = (name is defined and name ? name~'[]' : null) %}
+ {%- if block('attr') is defined %} {{ block('attr') }}{% endif %}>
{%- for key, option in options %}
{%- if option is not iterable %}
{%- set option = {label: option, value: key} %}
diff --git a/src/templates/settings/_settings.twig b/src/templates/settings/_settings.twig
index 74b29845..b1589c7e 100644
--- a/src/templates/settings/_settings.twig
+++ b/src/templates/settings/_settings.twig
@@ -1,7 +1,7 @@
{# @var craft \craft\web\twig\variables\CraftVariable #}
{#
/**
- * Image Optimize plugin for Craft CMS 3.x
+ * Image Optimize plugin for Craft CMS
*
* Image Optimize Settings.twig
*
@@ -35,7 +35,8 @@
{% for type in allImageTransformTypes %}
{% set isCurrent = (type == className(imageTransform)) %}
-
+
{% namespace 'imageTransformTypeSettings['~type~']' %}
{% set _imageTransform = isCurrent ? imageTransform : craft.imageOptimize.createImageTransformType(type) %}
{{ _imageTransform.getSettingsHtml()|raw }}
@@ -47,7 +48,12 @@
OptimizedImages Field Settings
-
ImageOptimize also comes with an OptimizedImages Field that you can add to an Asset Volume's layout. The OptimizedImages Field makes creating responsive image sizes for {{ '' |escape }}
or {{ '
elements sublimely easy.
These responsive image transforms are created when an asset is saved, rather than at page load time, to ensure that frontend performance is optimal.
+
ImageOptimize also comes with an OptimizedImages Field that you can add to an Asset
+ Volume's layout. The OptimizedImages Field makes creating responsive image sizes for
+ {{ '' |escape }}
or {{ '
elements
+ sublimely easy.
+
These responsive image transforms are created when an asset is saved, rather than at page
+ load time, to ensure that frontend performance is optimal.
@@ -63,7 +69,8 @@
{% if not gdInstalled %}
-
You do not have the GD
PHP extension installed, so placeholder silhouettes cannot be generated. An SVG box will be used instead.
+
You do not have the GD
PHP extension installed, so placeholder silhouettes
+ cannot be generated. An SVG box will be used instead.
{% endif %}
{{ forms.lightswitchField({
@@ -134,15 +141,15 @@
{% js %}
-new Craft.AdminTable({
+ new Craft.AdminTable({
tableSelector: '#imageProcessors',
-});
-new Craft.AdminTable({
+ });
+ new Craft.AdminTable({
tableSelector: '#variantCreators',
-});
-$('.io-transform-method').change(function(ev) {
+ });
+ $('.io-transform-method').change(function(ev) {
$('.io-method-settings').hide();
var value = 'io-' + Craft.formatInputId($(ev.target).val()) + '-method';
$('.' + value).slideDown();
-});
+ });
{% endjs %}
diff --git a/src/templates/welcome.twig b/src/templates/welcome.twig
index d5c997f9..6a62def8 100644
--- a/src/templates/welcome.twig
+++ b/src/templates/welcome.twig
@@ -18,7 +18,7 @@
-
+
Thanks for using ImageOptimize!
ImageOptimize allows you to automatically create & optimize responsive image transforms from your Craft CMS
assets.
diff --git a/src/translations/en/image-optimize.php b/src/translations/en/image-optimize.php
index 7ffb212f..5fce0b94 100644
--- a/src/translations/en/image-optimize.php
+++ b/src/translations/en/image-optimize.php
@@ -1,6 +1,6 @@
=a&&s
0){const n=performance.getEntriesByName(e)[0];if(typeof n!="undefined"){const a=t.parentNode.parentNode.parentNode.nextElementSibling.querySelector(".io-file-size");a&&(a.innerHTML=u(n.decodedBodySize,!0))}}}(function(t,e,n){const a="ImageOptimizeOptimizedImages",o={};function s(i,r){this.element=i,this.options=t.extend({},o,r),this._defaults=o,this._name=a,this.init()}s.prototype={init:function(){t(function(){const i=n.querySelectorAll("img.io-preview-image");for(const r of i)r.complete?d(r):r.addEventListener("load",c=>{d(c.target)})})}},t.fn[a]=function(i){return this.each(function(){t.data(this,"plugin_"+a)||t.data(this,"plugin_"+a,new s(this,i))})}})($,window,document);Craft.OptimizedImagesInput=Garnish.Base.extend({id:null,inputNamePrefix:null,inputIdPrefix:null,$container:null,$blockContainer:null,$addBlockBtnContainer:null,$addBlockBtnGroup:null,$addBlockBtnGroupBtns:null,blockSort:null,blockSelect:null,init:function(t,e){this.id=t,this.inputNamePrefix=e,this.inputIdPrefix=Craft.formatInputId(this.inputNamePrefix),this.$container=$("#"+this.id),this.$blockContainer=this.$container.children(".variant-blocks"),this.$addBlockBtnContainer=this.$container.children(".buttons"),this.$addBlockBtnGroup=this.$addBlockBtnContainer.children(".btngroup"),this.$addBlockBtnGroupBtns=this.$addBlockBtnGroup.children(".btn"),this.$blockContainer.find("> > .actions > .settings").each((a,o)=>{const s=$(o);let i;s.data("menubtn")?i=s.data("menubtn"):i=new Garnish.MenuBtn(o),i.menu.settings.onOptionSelect=$.proxy(function(r){this.onMenuOptionSelect(r,i)},this)});const n=this.$blockContainer.children();this.blockSort=new Garnish.DragSort(n,{handle:"> .actions > .move",axis:"y",collapseDraggees:!0,magnetStrength:4,helperLagBase:1.5,helperOpacity:.9,onSortChange:$.proxy(function(){this.resetVariantBlockOrder()},this)}),this.addListener(this.$addBlockBtnGroupBtns,"click",function(){this.addVariantBlock(null)}),this.addAspectRatioHandlers(),this.reIndexVariants()},onMenuOptionSelect:function(t,e){const n=$(t),a=e.$btn.closest(".matrixblock");switch(n.data("action")){case"add":{this.addVariantBlock(a);break}case"delete":{n.hasClass("disabled")||this.deleteVariantBlock(a);break}}},getHiddenBlockCss:function(t){return{opacity:0,marginBottom:-t.outerHeight()}},reIndexVariants:function(){this.$blockContainer=this.$container.children(".variant-blocks");const t=this.$blockContainer.children();t.each(function(n,a){const o=n,i=$(a).find("div .field, label, input, select");$(i).each(function(r,c){let l=$(c).attr("id");l&&(l=l.replace(/-([0-9]+)-/g,"-"+o+"-"),$(c).attr("id",l)),l=$(c).attr("for"),l&&(l=l.replace(/-([0-9]+)-/g,"-"+o+"-"),$(c).attr("for",l)),l=$(c).attr("name"),l&&(l=l.replace(/\[([0-9]+)]/g,"["+o+"]"),$(c).attr("name",l))})});let e=!1;t.length==1&&(e=!0),t.find("> .actions > .settings").each(function(n,a){const o=$(a);let s;if(o.data("menubtn")){s=o.data("menubtn");let i=$(s.menu.$menuList[1]);typeof i!="undefined"&&(e?i.find("> li > a").addClass("disabled").disable():i.find("> li > a").removeClass("disabled").enable())}})},addAspectRatioHandlers:function(){this.addListener($(".lightswitch"),"click",function(t){$(t.target).closest(".matrixblock").find(".io-aspect-ratio-wrapper").slideToggle()}),this.addListener($(".io-select-ar-box"),"click",function(t){const e=$(t.target);let n=$(t.target).data("x"),a=$(t.target).data("y"),o=$(t.target).data("custom"),s,i;i=e.closest(".matrixblock"),i.find(".io-select-ar-box").each(function(r,c){$(c).removeClass("io-selected-ar-box")}),e.addClass("io-selected-ar-box"),o?i.find(".io-custom-ar-wrapper").slideDown():(i.find(".io-custom-ar-wrapper").slideUp(),s=i.find("input")[2],$(s).val(n),s=i.find("input")[3],$(s).val(a))})},addVariantBlock:function(t){let e=$(this.$blockContainer.children()[0]).clone();e.find(".io-select-ar-box").each((a,o)=>{a===0?$(o).addClass("io-selected-ar-box"):$(o).removeClass("io-selected-ar-box")}),e.find(".io-custom-ar-wrapper").hide();let n=e.find("input")[0];$(n).val(1200),n=e.find("input")[1],$(n).val(1),n=e.find("input")[2],$(n).val(16),n=e.find("input")[3],$(n).val(9),n=e.find("select")[0],$(n).val(82),n=e.find("select")[1],$(n).val("jpg"),e.css(this.getHiddenBlockCss(e)).velocity({opacity:1,"margin-bottom":10},"fast",$.proxy(function(){t?e.insertBefore(t):e.appendTo(this.$blockContainer),this.blockSort.addItems(e),this.addAspectRatioHandlers(),e.find(".settings").each((a,o)=>{let s=$(o),i,r;r=this.$container.find(".io-menu-clone > .menu").clone(),$(r).insertAfter(s),i=new Garnish.MenuBtn(o),i.menu.settings.onOptionSelect=$.proxy(function(c){this.onMenuOptionSelect(c,i)},this)}),this.reIndexVariants()},this))},deleteVariantBlock:function(t){t.velocity(this.getHiddenBlockCss(t),"fast",$.proxy(()=>{t.remove(),this.reIndexVariants()},this))},resetVariantBlockOrder:function(){this.reIndexVariants()}});$(document).ready(function(){const t=new CustomEvent("vite-script-loaded",{detail:{path:"../src/web/assets/src/js/OptimizedImagesField.js"}});document.dispatchEvent(t)});
-//# sourceMappingURL=field.303d8367.js.map
diff --git a/src/web/assets/dist/assets/field.303d8367.js.gz b/src/web/assets/dist/assets/field.303d8367.js.gz
deleted file mode 100644
index e6fe5f56..00000000
Binary files a/src/web/assets/dist/assets/field.303d8367.js.gz and /dev/null differ
diff --git a/src/web/assets/dist/assets/field.303d8367.js.map b/src/web/assets/dist/assets/field.303d8367.js.map
deleted file mode 100644
index 5e2bd723..00000000
--- a/src/web/assets/dist/assets/field.303d8367.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"field.303d8367.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/src/web/assets/dist/assets/field.4132e6e2.js b/src/web/assets/dist/assets/field.4132e6e2.js
new file mode 100644
index 00000000..4452ed72
--- /dev/null
+++ b/src/web/assets/dist/assets/field.4132e6e2.js
@@ -0,0 +1,2 @@
+function u(t,e=!1,n=1){const o=e?1e3:1024;if(Math.abs(t)=o&&s0){const n=performance.getEntriesByName(e)[0];if(typeof n!="undefined"){const o=t.parentNode.parentNode.parentNode.nextElementSibling.querySelector(".io-file-size");o&&(o.innerHTML=u(n.decodedBodySize,!0))}}}(function(t,e,n){const o="ImageOptimizeOptimizedImages",a={};function s(i,r){this.element=i,this.options=t.extend({},a,r),this._defaults=a,this._name=o,this.init()}s.prototype={init:function(){t(function(){const i=n.querySelectorAll("img.io-preview-image");for(const r of i)r.complete?d(r):r.addEventListener("load",c=>{d(c.target)})})}},t.fn[o]=function(i){return this.each(function(){t.data(this,"plugin_"+o)||t.data(this,"plugin_"+o,new s(this,i))})}})($,window,document);Craft.OptimizedImagesInput=Garnish.Base.extend({id:null,inputNamePrefix:null,inputIdPrefix:null,$container:null,$blockContainer:null,$addBlockBtnContainer:null,$addBlockBtnGroup:null,$addBlockBtnGroupBtns:null,blockSort:null,blockSelect:null,init:function(t,e){this.id=t,this.inputNamePrefix=e,this.inputIdPrefix=Craft.formatInputId(this.inputNamePrefix),this.$container=$("#"+this.id),this.$blockContainer=this.$container.children(".variant-blocks"),this.$addBlockBtnContainer=this.$container.children(".buttons"),this.$addBlockBtnGroup=this.$addBlockBtnContainer.children(".btngroup"),this.$addBlockBtnGroupBtns=this.$addBlockBtnGroup.children(".btn"),this.$blockContainer.find("> > .actions > .settings").each((o,a)=>{const s=$(a);let i;s.data("menubtn")?i=s.data("menubtn"):i=new Garnish.MenuBtn(a),i.menu.settings.onOptionSelect=$.proxy(function(r){this.onMenuOptionSelect(r,i)},this)});const n=this.$blockContainer.children();this.blockSort=new Garnish.DragSort(n,{handle:"> .actions > .move",axis:"y",collapseDraggees:!0,magnetStrength:4,helperLagBase:1.5,helperOpacity:.9,onSortChange:$.proxy(function(){this.resetVariantBlockOrder()},this)}),this.addListener(this.$addBlockBtnGroupBtns,"click",function(){this.addVariantBlock(null)}),this.addAspectRatioHandlers(),this.reIndexVariants()},onMenuOptionSelect:function(t,e){const n=$(t),o=e.$btn.closest(".matrixblock");switch(n.data("action")){case"add":{this.addVariantBlock(o);break}case"delete":{n.hasClass("disabled")||this.deleteVariantBlock(o);break}}},getHiddenBlockCss:function(t){return{opacity:0,marginBottom:-t.outerHeight()}},reIndexVariants:function(){this.$blockContainer=this.$container.children(".variant-blocks");const t=this.$blockContainer.children();t.each(function(n,o){const a=n,i=$(o).find("div .field, label, input, select");$(i).each(function(r,c){let l=$(c).attr("id");l&&(l=l.replace(/-([0-9]+)-/g,"-"+a+"-"),$(c).attr("id",l)),l=$(c).attr("for"),l&&(l=l.replace(/-([0-9]+)-/g,"-"+a+"-"),$(c).attr("for",l)),l=$(c).attr("name"),l&&(l=l.replace(/\[([0-9]+)]/g,"["+a+"]"),$(c).attr("name",l))})});let e=!1;t.length==1&&(e=!0),t.find("> .actions > .settings").each(function(n,o){const a=$(o);let s;if(a.data("menubtn")&&(s=a.data("menubtn"),typeof s.menu.$options!="undefined")){let i=$(s.menu.$options[1]);typeof i!="undefined"&&(e?i.addClass("disabled").disable():i.removeClass("disabled").enable())}})},addAspectRatioHandlers:function(){this.addListener($(".lightswitch"),"click",function(t){$(t.target).closest(".matrixblock").find(".io-aspect-ratio-wrapper").slideToggle()}),this.addListener($(".io-select-ar-box"),"click",function(t){const e=$(t.target);let n=$(t.target).data("x"),o=$(t.target).data("y"),a=$(t.target).data("custom"),s,i;i=e.closest(".matrixblock"),i.find(".io-select-ar-box").each(function(r,c){$(c).removeClass("io-selected-ar-box")}),e.addClass("io-selected-ar-box"),a?i.find(".io-custom-ar-wrapper").slideDown():(i.find(".io-custom-ar-wrapper").slideUp(),s=i.find("input")[2],$(s).val(n),s=i.find("input")[3],$(s).val(o))})},addVariantBlock:function(t){let e=$(this.$blockContainer.children()[0]).clone();e.find(".io-select-ar-box").each((o,a)=>{o===0?$(a).addClass("io-selected-ar-box"):$(a).removeClass("io-selected-ar-box")}),e.find(".io-custom-ar-wrapper").hide();let n=e.find("input")[0];$(n).val(1200),n=e.find("input")[1],$(n).val(1),n=e.find("input")[2],$(n).val(16),n=e.find("input")[3],$(n).val(9),n=e.find("select")[0],$(n).val(82),n=e.find("select")[1],$(n).val("jpg"),e.css(this.getHiddenBlockCss(e)).velocity({opacity:1,"margin-bottom":10},"fast",$.proxy(function(){t?e.insertBefore(t):e.appendTo(this.$blockContainer),this.blockSort.addItems(e),this.addAspectRatioHandlers(),e.find(".settings").each((o,a)=>{let s=$(a),i,r;r=this.$container.find(".io-menu-clone > .menu").clone(),$(r).insertAfter(s),i=new Garnish.MenuBtn(a),i.menu.settings.onOptionSelect=$.proxy(function(c){this.onMenuOptionSelect(c,i)},this)}),this.reIndexVariants()},this))},deleteVariantBlock:function(t){t.velocity(this.getHiddenBlockCss(t),"fast",$.proxy(()=>{t.remove(),this.reIndexVariants()},this))},resetVariantBlockOrder:function(){this.reIndexVariants()}});$(document).ready(function(){const t=new CustomEvent("vite-script-loaded",{detail:{path:"../src/web/assets/src/js/OptimizedImagesField.js"}});document.dispatchEvent(t)});
+//# sourceMappingURL=field.4132e6e2.js.map
diff --git a/src/web/assets/dist/assets/field.4132e6e2.js.gz b/src/web/assets/dist/assets/field.4132e6e2.js.gz
new file mode 100644
index 00000000..cc6e5f3f
Binary files /dev/null and b/src/web/assets/dist/assets/field.4132e6e2.js.gz differ
diff --git a/src/web/assets/dist/assets/field.4132e6e2.js.map b/src/web/assets/dist/assets/field.4132e6e2.js.map
new file mode 100644
index 00000000..96a31828
--- /dev/null
+++ b/src/web/assets/dist/assets/field.4132e6e2.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"field.4132e6e2.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
\ No newline at end of file
diff --git a/src/web/assets/dist/assets/welcome.0253fdd4.js.gz b/src/web/assets/dist/assets/welcome.0253fdd4.js.gz
deleted file mode 100644
index c65fa519..00000000
Binary files a/src/web/assets/dist/assets/welcome.0253fdd4.js.gz and /dev/null differ
diff --git a/src/web/assets/dist/assets/welcome.0253fdd4.js.map b/src/web/assets/dist/assets/welcome.0253fdd4.js.map
deleted file mode 100644
index 9943ad07..00000000
--- a/src/web/assets/dist/assets/welcome.0253fdd4.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"welcome.0253fdd4.js","sources":["../../../../../buildchain/node_modules/vue-confetti/dist/vue-confetti.js","../../../../../buildchain/src/vue/ConfettiParty.vue?vue&type=template&lang.js","../../../../../buildchain/src/vue/ConfettiParty.vue","../../src/js/Welcome.js"],"sourcesContent":["!function(t,i){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define([],i):\"object\"==typeof exports?exports[\"vue-confetti\"]=i():t[\"vue-confetti\"]=i()}(this,function(){return function(t){function i(n){if(e[n])return e[n].exports;var s=e[n]={i:n,l:!1,exports:{}};return t[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}var e={};return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},i.p=\"\",i(i.s=0)}([function(t,i,e){\"use strict\";Object.defineProperty(i,\"__esModule\",{value:!0});var n=e(1);e.d(i,\"Confetti\",function(){return n.a}),i.default={install:function(t,i){this.installed||(this.installed=!0,t.prototype.$confetti=new n.a(i))}}},function(t,i,e){\"use strict\";function n(t,i){if(!(t instanceof i))throw new TypeError(\"Cannot call a class as a function\")}var s=e(2),a=function(){function t(t,i){for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:{};this.particles=new s.a({ctx:this.ctx,W:this.W,H:this.H,wind:this.wind,windPosCoef:this.windPosCoef,windSpeedMax:this.windSpeedMax,count:0,shape:t.shape||\"circle\",colors:{opts:t.colors||[\"DodgerBlue\",\"OliveDrab\",\"Gold\",\"pink\",\"SlateBlue\",\"lightblue\",\"Violet\",\"PaleGreen\",\"SteelBlue\",\"SandyBrown\",\"Chocolate\",\"Crimson\"],idx:0,step:10,get color(){return this.opts[(this.idx++/this.step|0)%this.opts.length]}}})}},{key:\"createContext\",value:function(){this.canvas=document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.canvas.style.display=\"block\",this.canvas.style.position=\"fixed\",this.canvas.style.pointerEvents=\"none\",this.canvas.style.top=0,this.canvas.style.width=\"100vw\",this.canvas.style.height=\"100vh\",this.canvas.id=\"confetti-canvas\",document.querySelector(\"body\").appendChild(this.canvas)}},{key:\"start\",value:function(t){this.ctx||this.createContext(),this.animationId&&cancelAnimationFrame(this.animationId),this.createParticles(t),this.updateDimensions(),this.particlesPerFrame=this.maxParticlesPerFrame,this.animationId=requestAnimationFrame(this.mainLoop.bind(this)),window.addEventListener(\"resize\",this.onResizeCallback)}},{key:\"stop\",value:function(){this.particlesPerFrame=0,window.removeEventListener(\"resize\",this.onResizeCallback)}},{key:\"remove\",value:function(){this.stop(),this.animationId&&cancelAnimationFrame(this.animationId),this.canvas&&document.body.removeChild(this.canvas),this.initialize()}},{key:\"updateDimensions\",value:function(){this.W===window.innerWidth&&this.H===window.innerHeight||(this.W=this.particles.opts.W=this.canvas.width=window.innerWidth,this.H=this.particles.opts.H=this.canvas.height=window.innerHeight)}},{key:\"mainLoop\",value:function(t){for(this.updateDimensions(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.W,this.H),this.windSpeed=Math.sin(t/8e3)*this.windSpeedMax,this.wind=this.particles.opts.wind+=this.windChange;this.droppedCount0?this.items.push(this.pool.pop().setup(this.opts)):this.items.push((new s.a).setup(this.opts))}}]),t}();i.a=o},function(t,i,e){\"use strict\";function n(t,i){if(!(t instanceof i))throw new TypeError(\"Cannot call a class as a function\")}var s=function(){function t(t,i){for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:t+(t=0);return Math.random()*(i-t)+t|0}},{key:\"rand\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t+(t=0);return Math.random()*(i-t)+t}},{key:\"update\",value:function(){return this.tiltAngle+=this.tiltAngleIncremental*(.2*Math.cos(this.wind+(this.d+this.x+this.y)*this.windPosCoef)+1),this.y+=(Math.cos(this.angle+this.d)+3+this.r/2)/2,this.x+=Math.sin(this.angle),this.x+=Math.cos(this.wind+(this.d+this.x+this.y)*this.windPosCoef)*this.windSpeedMax,this.y+=Math.sin(this.wind+(this.d+this.x+this.y)*this.windPosCoef)*this.windSpeedMax,this.tilt=15*Math.sin(this.tiltAngle-this.count/3),this.y>this.H}},{key:\"drawCircle\",value:function(){this.ctx.arc(0,0,this.r/2,0,2*Math.PI,!1),this.ctx.fill()}},{key:\"drawRect\",value:function(){this.ctx.fillRect(0,0,this.r,this.r/2)}},{key:\"drawHeart\",value:function(){var t=this,i=function(i,e,n,s,a,o){t.ctx.bezierCurveTo(i/t.r*2,e/t.r*2,n/t.r*2,s/t.r*2,a/t.r*2,o/t.r*2)};this.ctx.moveTo(37.5/this.r,20/this.r),i(75,37,70,25,50,25),i(20,25,20,62.5,20,62.5),i(20,80,40,102,75,120),i(110,102,130,80,130,62.5),i(130,62.5,130,25,100,25),i(85,25,75,37,75,40),this.ctx.fill()}},{key:\"draw\",value:function(){this.ctx.fillStyle=this.color,this.ctx.beginPath(),this.ctx.setTransform(Math.cos(this.tiltAngle),Math.sin(this.tiltAngle),0,1,this.x,this.y),\"circle\"===this.shape?this.drawCircle():\"rect\"===this.shape?this.drawRect():\"heart\"===this.shape&&this.drawHeart()}}]),t}();i.a=a}])});","\n\n","\n \n\n\n\n","import Vue from 'vue';\nimport ConfettiParty from '@/vue/ConfettiParty.vue';\n\nnew Vue({\n el: \"#cp-nav-content\",\n components: {\n ConfettiParty,\n },\n data: {\n },\n methods: {\n },\n});\n"],"names":["this","Vue"],"mappings":"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"}
\ No newline at end of file
diff --git a/src/web/assets/dist/assets/welcome.0253fdd4.js.map.gz b/src/web/assets/dist/assets/welcome.0253fdd4.js.map.gz
deleted file mode 100644
index 04395d56..00000000
Binary files a/src/web/assets/dist/assets/welcome.0253fdd4.js.map.gz and /dev/null differ
diff --git a/src/web/assets/dist/assets/welcome.0253fdd4.js b/src/web/assets/dist/assets/welcome.8f27d9d5.js
similarity index 99%
rename from src/web/assets/dist/assets/welcome.0253fdd4.js
rename to src/web/assets/dist/assets/welcome.8f27d9d5.js
index 2b4275c4..84960a7a 100644
--- a/src/web/assets/dist/assets/welcome.0253fdd4.js
+++ b/src/web/assets/dist/assets/welcome.8f27d9d5.js
@@ -1,2 +1,2 @@
var x=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function _(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}var y={exports:{}};(function(c,f){(function(u,o){c.exports=o()})(x,function(){return function(u){function o(n){if(l[n])return l[n].exports;var r=l[n]={i:n,l:!1,exports:{}};return u[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}var l={};return o.m=u,o.c=l,o.d=function(n,r,d){o.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:d})},o.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(r,"a",r),r},o.o=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},o.p="",o(o.s=0)}([function(u,o,l){Object.defineProperty(o,"__esModule",{value:!0});var n=l(1);l.d(o,"Confetti",function(){return n.a}),o.default={install:function(r,d){this.installed||(this.installed=!0,r.prototype.$confetti=new n.a(d))}}},function(u,o,l){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=l(2),d=function(){function t(e,a){for(var i=0;i0&&arguments[0]!==void 0?arguments[0]:{};this.particles=new r.a({ctx:this.ctx,W:this.W,H:this.H,wind:this.wind,windPosCoef:this.windPosCoef,windSpeedMax:this.windSpeedMax,count:0,shape:e.shape||"circle",colors:{opts:e.colors||["DodgerBlue","OliveDrab","Gold","pink","SlateBlue","lightblue","Violet","PaleGreen","SteelBlue","SandyBrown","Chocolate","Crimson"],idx:0,step:10,get color(){return this.opts[(this.idx++/this.step|0)%this.opts.length]}}})}},{key:"createContext",value:function(){this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.canvas.style.display="block",this.canvas.style.position="fixed",this.canvas.style.pointerEvents="none",this.canvas.style.top=0,this.canvas.style.width="100vw",this.canvas.style.height="100vh",this.canvas.id="confetti-canvas",document.querySelector("body").appendChild(this.canvas)}},{key:"start",value:function(e){this.ctx||this.createContext(),this.animationId&&cancelAnimationFrame(this.animationId),this.createParticles(e),this.updateDimensions(),this.particlesPerFrame=this.maxParticlesPerFrame,this.animationId=requestAnimationFrame(this.mainLoop.bind(this)),window.addEventListener("resize",this.onResizeCallback)}},{key:"stop",value:function(){this.particlesPerFrame=0,window.removeEventListener("resize",this.onResizeCallback)}},{key:"remove",value:function(){this.stop(),this.animationId&&cancelAnimationFrame(this.animationId),this.canvas&&document.body.removeChild(this.canvas),this.initialize()}},{key:"updateDimensions",value:function(){this.W===window.innerWidth&&this.H===window.innerHeight||(this.W=this.particles.opts.W=this.canvas.width=window.innerWidth,this.H=this.particles.opts.H=this.canvas.height=window.innerHeight)}},{key:"mainLoop",value:function(e){for(this.updateDimensions(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.W,this.H),this.windSpeed=Math.sin(e/8e3)*this.windSpeedMax,this.wind=this.particles.opts.wind+=this.windChange;this.droppedCount0?this.items.push(this.pool.pop().setup(this.opts)):this.items.push(new r.a().setup(this.opts))}}]),t}();o.a=s},function(u,o,l){function n(s,t){if(!(s instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function s(t,e){for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:t+(t=0);return Math.random()*(e-t)+t|0}},{key:"rand",value:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t+(t=0);return Math.random()*(e-t)+t}},{key:"update",value:function(){return this.tiltAngle+=this.tiltAngleIncremental*(.2*Math.cos(this.wind+(this.d+this.x+this.y)*this.windPosCoef)+1),this.y+=(Math.cos(this.angle+this.d)+3+this.r/2)/2,this.x+=Math.sin(this.angle),this.x+=Math.cos(this.wind+(this.d+this.x+this.y)*this.windPosCoef)*this.windSpeedMax,this.y+=Math.sin(this.wind+(this.d+this.x+this.y)*this.windPosCoef)*this.windSpeedMax,this.tilt=15*Math.sin(this.tiltAngle-this.count/3),this.y>this.H}},{key:"drawCircle",value:function(){this.ctx.arc(0,0,this.r/2,0,2*Math.PI,!1),this.ctx.fill()}},{key:"drawRect",value:function(){this.ctx.fillRect(0,0,this.r,this.r/2)}},{key:"drawHeart",value:function(){var t=this,e=function(a,i,h,p,v,m){t.ctx.bezierCurveTo(a/t.r*2,i/t.r*2,h/t.r*2,p/t.r*2,v/t.r*2,m/t.r*2)};this.ctx.moveTo(37.5/this.r,20/this.r),e(75,37,70,25,50,25),e(20,25,20,62.5,20,62.5),e(20,80,40,102,75,120),e(110,102,130,80,130,62.5),e(130,62.5,130,25,100,25),e(85,25,75,37,75,40),this.ctx.fill()}},{key:"draw",value:function(){this.ctx.fillStyle=this.color,this.ctx.beginPath(),this.ctx.setTransform(Math.cos(this.tiltAngle),Math.sin(this.tiltAngle),0,1,this.x,this.y),this.shape==="circle"?this.drawCircle():this.shape==="rect"?this.drawRect():this.shape==="heart"&&this.drawHeart()}}]),s}();o.a=d}])})})(y);var P=_(y.exports),k=function(){var c=this,f=c.$createElement,u=c._self._c||f;return u("main")},M=[];function S(c,f,u,o,l,n,r,d){var s=typeof c=="function"?c.options:c;f&&(s.render=f,s.staticRenderFns=u,s._compiled=!0),o&&(s.functional=!0),n&&(s._scopeId="data-v-"+n);var t;if(r?(t=function(i){i=i||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!i&&typeof __VUE_SSR_CONTEXT__!="undefined"&&(i=__VUE_SSR_CONTEXT__),l&&l.call(this,i),i&&i._registeredComponents&&i._registeredComponents.add(r)},s._ssrRegister=t):l&&(t=d?function(){l.call(this,(s.functional?this.parent:this).$root.$options.shadowRoot)}:l),t)if(s.functional){s._injectStyles=t;var e=s.render;s.render=function(h,p){return t.call(p),e(h,p)}}else{var a=s.beforeCreate;s.beforeCreate=a?[].concat(a,t):[t]}return{exports:c,options:s}}const g=window.Vue;g.use(P);const F=g.extend({mounted:function(){this.$confetti.start({shape:"rect",colors:["DodgerBlue","OliveDrab","Gold","pink","SlateBlue","lightblue","Violet","PaleGreen","SteelBlue","SandyBrown","Chocolate","Crimson"]}),setTimeout(()=>{this.$confetti.stop()},5e3)},methods:{}}),w={};var H=S(F,k,M,!1,T,null,null,null);function T(c){for(let f in w)this[f]=w[f]}var I=function(){return H.exports}();const O=window.Vue;new O({el:"#cp-nav-content",components:{ConfettiParty:I},data:{},methods:{}});
-//# sourceMappingURL=welcome.0253fdd4.js.map
+//# sourceMappingURL=welcome.8f27d9d5.js.map
diff --git a/src/web/assets/dist/assets/welcome.8f27d9d5.js.gz b/src/web/assets/dist/assets/welcome.8f27d9d5.js.gz
new file mode 100644
index 00000000..6102bd66
Binary files /dev/null and b/src/web/assets/dist/assets/welcome.8f27d9d5.js.gz differ
diff --git a/src/web/assets/dist/assets/welcome.8f27d9d5.js.map b/src/web/assets/dist/assets/welcome.8f27d9d5.js.map
new file mode 100644
index 00000000..657430c3
--- /dev/null
+++ b/src/web/assets/dist/assets/welcome.8f27d9d5.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"welcome.8f27d9d5.js","sources":["../../../../../buildchain/node_modules/vue-confetti/dist/vue-confetti.js","../../src/vue/ConfettiParty.vue?vue&type=template&lang.js","../../src/vue/ConfettiParty.vue"],"sourcesContent":["!function(t,i){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define([],i):\"object\"==typeof exports?exports[\"vue-confetti\"]=i():t[\"vue-confetti\"]=i()}(this,function(){return function(t){function i(n){if(e[n])return e[n].exports;var s=e[n]={i:n,l:!1,exports:{}};return t[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}var e={};return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},i.p=\"\",i(i.s=0)}([function(t,i,e){\"use strict\";Object.defineProperty(i,\"__esModule\",{value:!0});var n=e(1);e.d(i,\"Confetti\",function(){return n.a}),i.default={install:function(t,i){this.installed||(this.installed=!0,t.prototype.$confetti=new n.a(i))}}},function(t,i,e){\"use strict\";function n(t,i){if(!(t instanceof i))throw new TypeError(\"Cannot call a class as a function\")}var s=e(2),a=function(){function t(t,i){for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:{};this.particles=new s.a({ctx:this.ctx,W:this.W,H:this.H,wind:this.wind,windPosCoef:this.windPosCoef,windSpeedMax:this.windSpeedMax,count:0,shape:t.shape||\"circle\",colors:{opts:t.colors||[\"DodgerBlue\",\"OliveDrab\",\"Gold\",\"pink\",\"SlateBlue\",\"lightblue\",\"Violet\",\"PaleGreen\",\"SteelBlue\",\"SandyBrown\",\"Chocolate\",\"Crimson\"],idx:0,step:10,get color(){return this.opts[(this.idx++/this.step|0)%this.opts.length]}}})}},{key:\"createContext\",value:function(){this.canvas=document.createElement(\"canvas\"),this.ctx=this.canvas.getContext(\"2d\"),this.canvas.style.display=\"block\",this.canvas.style.position=\"fixed\",this.canvas.style.pointerEvents=\"none\",this.canvas.style.top=0,this.canvas.style.width=\"100vw\",this.canvas.style.height=\"100vh\",this.canvas.id=\"confetti-canvas\",document.querySelector(\"body\").appendChild(this.canvas)}},{key:\"start\",value:function(t){this.ctx||this.createContext(),this.animationId&&cancelAnimationFrame(this.animationId),this.createParticles(t),this.updateDimensions(),this.particlesPerFrame=this.maxParticlesPerFrame,this.animationId=requestAnimationFrame(this.mainLoop.bind(this)),window.addEventListener(\"resize\",this.onResizeCallback)}},{key:\"stop\",value:function(){this.particlesPerFrame=0,window.removeEventListener(\"resize\",this.onResizeCallback)}},{key:\"remove\",value:function(){this.stop(),this.animationId&&cancelAnimationFrame(this.animationId),this.canvas&&document.body.removeChild(this.canvas),this.initialize()}},{key:\"updateDimensions\",value:function(){this.W===window.innerWidth&&this.H===window.innerHeight||(this.W=this.particles.opts.W=this.canvas.width=window.innerWidth,this.H=this.particles.opts.H=this.canvas.height=window.innerHeight)}},{key:\"mainLoop\",value:function(t){for(this.updateDimensions(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.W,this.H),this.windSpeed=Math.sin(t/8e3)*this.windSpeedMax,this.wind=this.particles.opts.wind+=this.windChange;this.droppedCount0?this.items.push(this.pool.pop().setup(this.opts)):this.items.push((new s.a).setup(this.opts))}}]),t}();i.a=o},function(t,i,e){\"use strict\";function n(t,i){if(!(t instanceof i))throw new TypeError(\"Cannot call a class as a function\")}var s=function(){function t(t,i){for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:t+(t=0);return Math.random()*(i-t)+t|0}},{key:\"rand\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t+(t=0);return Math.random()*(i-t)+t}},{key:\"update\",value:function(){return this.tiltAngle+=this.tiltAngleIncremental*(.2*Math.cos(this.wind+(this.d+this.x+this.y)*this.windPosCoef)+1),this.y+=(Math.cos(this.angle+this.d)+3+this.r/2)/2,this.x+=Math.sin(this.angle),this.x+=Math.cos(this.wind+(this.d+this.x+this.y)*this.windPosCoef)*this.windSpeedMax,this.y+=Math.sin(this.wind+(this.d+this.x+this.y)*this.windPosCoef)*this.windSpeedMax,this.tilt=15*Math.sin(this.tiltAngle-this.count/3),this.y>this.H}},{key:\"drawCircle\",value:function(){this.ctx.arc(0,0,this.r/2,0,2*Math.PI,!1),this.ctx.fill()}},{key:\"drawRect\",value:function(){this.ctx.fillRect(0,0,this.r,this.r/2)}},{key:\"drawHeart\",value:function(){var t=this,i=function(i,e,n,s,a,o){t.ctx.bezierCurveTo(i/t.r*2,e/t.r*2,n/t.r*2,s/t.r*2,a/t.r*2,o/t.r*2)};this.ctx.moveTo(37.5/this.r,20/this.r),i(75,37,70,25,50,25),i(20,25,20,62.5,20,62.5),i(20,80,40,102,75,120),i(110,102,130,80,130,62.5),i(130,62.5,130,25,100,25),i(85,25,75,37,75,40),this.ctx.fill()}},{key:\"draw\",value:function(){this.ctx.fillStyle=this.color,this.ctx.beginPath(),this.ctx.setTransform(Math.cos(this.tiltAngle),Math.sin(this.tiltAngle),0,1,this.x,this.y),\"circle\"===this.shape?this.drawCircle():\"rect\"===this.shape?this.drawRect():\"heart\"===this.shape&&this.drawHeart()}}]),t}();i.a=a}])});","\n\n","\n \n\n\n\n"],"names":["this","Vue"],"mappings":"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"}
\ No newline at end of file
diff --git a/src/web/assets/dist/assets/welcome.8f27d9d5.js.map.gz b/src/web/assets/dist/assets/welcome.8f27d9d5.js.map.gz
new file mode 100644
index 00000000..092358a0
Binary files /dev/null and b/src/web/assets/dist/assets/welcome.8f27d9d5.js.map.gz differ
diff --git a/src/web/assets/dist/manifest.json b/src/web/assets/dist/manifest.json
index f9ebf2e9..4b6c38b5 100644
--- a/src/web/assets/dist/manifest.json
+++ b/src/web/assets/dist/manifest.json
@@ -8,12 +8,12 @@
]
},
"../src/web/assets/src/js/OptimizedImagesField.js": {
- "file": "assets/field.303d8367.js",
+ "file": "assets/field.4132e6e2.js",
"src": "../src/web/assets/src/js/OptimizedImagesField.js",
"isEntry": true
},
"../src/web/assets/src/js/Welcome.js": {
- "file": "assets/welcome.0253fdd4.js",
+ "file": "assets/welcome.8f27d9d5.js",
"src": "../src/web/assets/src/js/Welcome.js",
"isEntry": true
}
diff --git a/src/web/assets/dist/stats.html b/src/web/assets/dist/stats.html
index 23e55cc0..cec805f7 100644
--- a/src/web/assets/dist/stats.html
+++ b/src/web/assets/dist/stats.html
@@ -2669,7 +2669,7 @@