Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordizzy <diosmosis@users.noreply.github.com>2021-12-01 20:19:20 +0300
committerGitHub <noreply@github.com>2021-12-01 20:19:20 +0300
commit43c21c99ef0451772a52a449729f832bfad8e82e (patch)
treeca4fe64af15b932887fad8ec7d5bb14194d81932
parenteede069c84a97729d62689dcf0447d60b2056665 (diff)
[Vue] migrate piwik-field and related directives (#18352)
* forgot to remove old files * built vue files * first pass at migrating notification directive, notification service and parts of UI.Notification to Vue * rewrite URL handling to use computed properties in a URL store + do the same for other dependent data in the comparison store to allow vues to subscribe to the properties for changes to global state * fix some tests * some more fixes * more fixes + disallow modifications to MatomoUrl state * get angularjs unit tests to pass + fix a couple more issues * another fix * fix bad merge * self review + fixes * remove old fix as it may not be needed anymore * empty string is not a valid date + do not report invalid date exception just rethrow * update screenshots and try to fix random failure * use jquery $destroy event instead of scope one since the scope one is broadcasted * rangeChange event must be triggered once on mount * initialize startDateText/endDateText correctly * use jquery $destroy event instead of angularjs one * built vue files * fix menudropdown.directive.js reference * load vue in installation/updater & correctly make focusanywherebuthere stateful * correctly implement stateful directives for ExpandOnClick/ExpandOnHover * less tweak (angularjs comment removal) * fix submenu check * quick type fix * load vue in installation workflow * add broadcast.js to Installation workflow + do not fail in pk_translate if no translations are loaded * update expected screenshots (spacing of arrow changed because of angularjs comment no longer being there) * start moving Notification class code to notifications store * fix prop type * fix html escaping * built vue files * get toast and other transitions to work + fix broken toast * move all of notification.js to NotificationStore * wait for angular to be initialized to post events to avoid loading race condition * get scroll to notification to work + get initialization of notification groups to work * correct unmount + remove notifications service file * fix some test failures * re add accidentally removed (?) file * remove no longer needed file * Add CoreHome UMD in CoreUpdater/Installation. * self review * fix type + add default value * remove file from JS list * fix test * fix UI tests * set correct type in users manager notification and allow scope values to be transformed in createAngularAdapter * start converting form field directives * start migrating siteselector * small addition * migrate rest of site selector code + make some breaking changes to function signatures in createAngularJsAdapter * disable webpack asset size hints/warnings + get siteselector code to build * fixing some bugs * fix some more issues (allow specifing require in createAngularJsAdapter and make AjaxHelper promises abortable) * get npm test to pass * a couple more fixes * remove existing files * convert quick-access directive and use shared code/state with site selector * remove site selector model * fix more issues and get UI tests to pass for quickaccess * remove debugging code / todo * fix initial value * add back a $timeout() * fixing tests, the post blur scope.$apply()s are apparently required for angularjs to function properly * migrate field-array * fixing more UI test failures * rebuild * start converting multipairfield * fix vue build * why were these deleted? * remove debug code * first pass migrate multipairfield.vue * move form-field code relevant to selects to FieldSelect.vue * fix css class issue + update expected screenshots * rebuild CoreHome * move more of form-field.directive.js to new vue classes * revert styling change * finish converting last of form-field.directive.js code (completely untested) * built vue files * get focus-if to work and remove debugging return; * rebuilt vue * should not need to specify type there * built CoreHome * built vue files * Fix for misaligned evolution trend icons (#18323) * Aligned evolution trend icons, text tweak * Update plugins/MultiSites/angularjs/dashboard/dashboard.directive.less Co-authored-by: Stefan Giehl <stefan@matomo.org> * apply review feedback * Hide feedback banner in zen mode (#18329) * [Vue] 4.6.0 fixes (#18334) * feedback plugin may not be loaded * fix copy paste * async/await not supported * built UMDs * get local files to build * built files * get auto clearing behavior to work in site selector * fix a couple more bugs * use jQuery click for expand on click * undo submodule change * rebuild vue * get vue files to run * missing element * more fixes * get more fields working properly * rebuild * fix even more issues * [Vue] use jQuery click for expand on click (#18341) * use jQuery click for expand on click * undo submodule change * migrate piwik-field directive and fix some issues * forgot to add migrated directive files and get demo.twig to work * use event target * make sure angularjs and vue do not share data * fix ng model mapping * fix a couple more issues * fix a couple more bugs * more fixes * mimic existing behavior where an empty value will result in an extra field appearing in a select option list, but only at first * another fix * built vue files * more fixes * do not use UMD if vue/src is not present * use non-minified angularjs if in development mode * deprecate custom template file property * remove angularjs properties in scope properties (ie, $$hashKey) otherwise vue will fail when it tries to process them * fixing some more issues from ui tests * more fixes * fix form field issue + patch jquery so .trigger() will also trigger events added via addEventHandler() * true bc fix * get the jquery patch to work * ignore polyfill map * fix ng-model issue in report limit in report export directive * full width property was not handled properly before in angularjs * do not try and parseInt null values * fix several more issues for tests * fix some tests * fix data binding * fix css class * fixing more ui test issues * do not decode model value of site name in site selector, so it is always the same as what is in the DB * 4.6.0-rc2 * more ng-model fixes * rebuild * html tweaks * add timeout to test * rebuild * fix another UI test * rebuild vue files * update some expected screenshots * fix more issues * Revert "[Vue] do not decode model value of site name in site selector, so it is always matches the DB value (#18356)" This reverts commit 8c7539f073e7a49311cbe6dc2474eb1bbfb8718d. * update screenshots * more fixes * another fix + screenshot update * more screenshot updates * more fixes * even more fixes * another ui test fix * more type fixes * rebuilt vue JS * couple more fixes * undo debugging * do not convert undefined to bool * update screenshot * another bool checking fix * rebuild vue files * more fixes * initial site value in field is assumed to be encoded * file headers and custom field component support * get custom component field code to work * rebuild vue * allow using angularjs templateFile for custom field (for BC) * get angularjs template embedding to work for rollupreporting at least * deal with some in source TODO items * fix a couple more issues * Use separate div in modals to display notifications otherwise Vue will erase modal content when initializing NotificationGroup component. * build again * refactor some code and fix an issue with checkbox array field handling in angularjs * more fixes * another fix * even more fixes * remove more todo * hopefully the last changes * update vue files * update submodule * revert debugging change + fix issue * built vue files * fix another select issue * rebuild vue files * fix broken refactor * update two screenshots * add some more timeouts and update screenshots * fix site selector model binding * rebuild vue * fix field array title * apply some pr feedback * apply more pr feedback * another fix * tweak * fix ng-change not executed before ng-model * fix another set of issues * fix another issue * rebuild vue * better ng-change/ng-model fix * initiate initial ng-change ONLY for site selectors where this behavior applies * update screenshots and try to fix random failure * undo submodule change * fix test Co-authored-by: sgiehl <stefan@matomo.org> Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com> Co-authored-by: Matthieu Aubry <mattab@users.noreply.github.com>
-rw-r--r--.gitignore2
-rw-r--r--CHANGELOG.md8
-rw-r--r--core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php14
-rw-r--r--core/Settings/FieldConfig.php12
-rw-r--r--plugins/CoreAdminHome/angularjs/branding/branding.controller.js2
-rw-r--r--plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js2
-rw-r--r--plugins/CoreHome/CoreHome.php22
-rw-r--r--plugins/CoreHome/angularjs/field-array/field-array.controller.js71
-rw-r--r--plugins/CoreHome/angularjs/field-array/field-array.directive.html23
-rw-r--r--plugins/CoreHome/angularjs/field-array/field-array.directive.js61
-rw-r--r--plugins/CoreHome/angularjs/multipairfield/multipairfield.controller.js129
-rw-r--r--plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.html61
-rw-r--r--plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.js64
-rw-r--r--plugins/CoreHome/angularjs/report-export/reportexport.directive.js7
-rw-r--r--plugins/CoreHome/angularjs/report-export/reportexport.popover.html19
-rw-r--r--plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js140
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.js703
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.min.js102
-rw-r--r--plugins/CoreHome/vue/src/Comparisons/Comparisons.store.ts2
-rw-r--r--plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue20
-rw-r--r--plugins/CoreHome/vue/src/FieldArray/FieldArray.adapter.ts51
-rw-r--r--plugins/CoreHome/vue/src/FieldArray/FieldArray.less (renamed from plugins/CoreHome/angularjs/field-array/field-array.directive.less)0
-rw-r--r--plugins/CoreHome/vue/src/FieldArray/FieldArray.vue87
-rw-r--r--plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts2
-rw-r--r--plugins/CoreHome/vue/src/MultiPairField/MultiPairField.adapter.ts60
-rw-r--r--plugins/CoreHome/vue/src/MultiPairField/MultiPairField.less (renamed from plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.less)0
-rw-r--r--plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue200
-rw-r--r--plugins/CoreHome/vue/src/Notification/Notification.adapter.ts4
-rw-r--r--plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts47
-rw-r--r--plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue31
-rw-r--r--plugins/CoreHome/vue/src/createAngularJsAdapter.ts84
-rw-r--r--plugins/CoreHome/vue/src/debounce.ts2
-rw-r--r--plugins/CoreHome/vue/src/index.ts11
-rw-r--r--plugins/CoreHome/vue/src/translate.ts2
-rw-r--r--plugins/CoreHome/vue/src/useExternalPluginComponent.ts23
-rw-r--r--plugins/CorePluginsAdmin/CorePluginsAdmin.php5
-rw-r--r--plugins/CorePluginsAdmin/SettingsMetadata.php9
-rw-r--r--plugins/CorePluginsAdmin/angularjs/field/field.directive.html3
-rw-r--r--plugins/CorePluginsAdmin/angularjs/field/field.directive.js172
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox-array.html18
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox.html13
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.html25
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-field-array.html8
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-file.html10
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-hidden.html6
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-multiselect.html7
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.html11
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-number.html11
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-radio.html21
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-select.html8
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-site.html17
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-text-array.html10
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-text.html11
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-textarea-array.html9
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/field-textarea.html7
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html28
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js438
-rw-r--r--plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js2442
-rw-r--r--plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js32
-rw-r--r--plugins/CorePluginsAdmin/vue/dist/umd.metadata.json5
-rw-r--r--plugins/CorePluginsAdmin/vue/src/Field/Field.adapter.ts226
-rw-r--r--plugins/CorePluginsAdmin/vue/src/Field/Field.vue112
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue96
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue45
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue77
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.less (renamed from plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.less)0
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue172
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue42
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue56
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue35
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.less (renamed from plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.less)0
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue45
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue56
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue60
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.less3
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue296
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue47
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue71
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue60
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue58
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue76
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FormField.adapter.ts106
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue328
-rw-r--r--plugins/CorePluginsAdmin/vue/src/FormField/utilities.ts32
-rw-r--r--plugins/CorePluginsAdmin/vue/src/index.ts11
-rw-r--r--plugins/CoreVue/polyfills/babel.config.js1
-rw-r--r--plugins/CoreVue/polyfills/dist/MatomoPolyfills.js70
-rw-r--r--plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js12
-rw-r--r--plugins/CoreVue/polyfills/src/index.ts3
-rw-r--r--plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts53
-rw-r--r--plugins/CoreVue/types/index.d.ts3
-rw-r--r--plugins/IntranetMeasurable/tests/UI/IntranetMeasurable_spec.js3
-rw-r--r--plugins/Marketplace/angularjs/marketplace/marketplace.controller.js2
-rw-r--r--plugins/Marketplace/tests/UI/Marketplace_spec.js2
-rw-r--r--plugins/Morpheus/templates/demo.twig2
-rw-r--r--plugins/Morpheus/tests/UI/expected-screenshots/Morpheus_load.png4
-rw-r--r--plugins/PrivacyManager/tests/UI/PrivacyManager_spec.js8
-rw-r--r--plugins/Referrers/tests/UI/CampaignBuilder_spec.js2
-rw-r--r--plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js2
-rw-r--r--plugins/Transitions/tests/UI/Transitions_spec.js3
-rw-r--r--plugins/UsersManager/angularjs/paged-users-list/paged-users-list.component.less7
-rw-r--r--plugins/UsersManager/tests/UI/UsersManager_spec.js1
-rw-r--r--tests/PHPUnit/Integration/ReleaseCheckListTest.php1
-rw-r--r--tests/UI/expected-screenshots/Theme_demo.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png4
-rw-r--r--tests/UI/specs/PieGraph_spec.js2
-rw-r--r--tests/UI/specs/ReportExporting_spec.js5
-rw-r--r--tests/UI/specs/SiteSelector_spec.js3
-rw-r--r--tests/UI/specs/UIIntegration_spec.js2
-rw-r--r--tests/lib/screenshot-testing/support/page-renderer.js16
111 files changed, 6205 insertions, 1518 deletions
diff --git a/.gitignore b/.gitignore
index 197e2a9c1a..99884d359a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -105,3 +105,5 @@ docker-compose.yml
/plugins/*/vue/dist/*.common.js
/plugins/*/vue/dist/*.map
/plugins/*/vue/dist/*.development.*
+/plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js.map
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4e3b755d28..2f9774b8c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,14 @@ This is the Developer Changelog for Matomo platform developers. All changes in o
The Product Changelog at **[matomo.org/changelog](https://matomo.org/changelog)** lets you see more details about any Matomo release, such as the list of new guides and FAQs, security fixes, and links to all closed issues.
+## Matomo 4.7.0
+
+### Deprecated APIs
+
+* The `piwik-field` and related directives have been converted to Vue and the `template-file` attribute is now considered deprecated and will be removed in Matomo 5. Instead,
+ the `component` property should be used to add a new form field, it should be an object with two properties that reference a Vue component, `plugin` and `name`, where `plugin`
+ is the plugin the Vue component is located in and `name` is the Vue name of the component's export.
+
## Matomo 4.6.0
### New Framework
diff --git a/core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php b/core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php
index b720aca33c..b72e557331 100644
--- a/core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php
+++ b/core/AssetManager/UIAssetFetcher/JScriptUIAssetFetcher.php
@@ -102,11 +102,15 @@ class JScriptUIAssetFetcher extends UIAssetFetcher
foreach ($plugins as $plugin) {
$devUmd = "plugins/$plugin/vue/dist/$plugin.development.umd.js";
$minifiedUmd = "plugins/$plugin/vue/dist/$plugin.umd.min.js";
-
- if (Development::isEnabled() && is_file(PIWIK_INCLUDE_PATH . '/' . $devUmd)) {
- $this->fileLocations[$plugin] = $devUmd;
- } else if (is_file(PIWIK_INCLUDE_PATH . '/' . $minifiedUmd)) {
- $this->fileLocations[$plugin] = $minifiedUmd;
+ $umdSrcFolder = "plugins/$plugin/vue/src";
+
+ // in case there are dist files but no src files, which can happen during development
+ if (is_dir($umdSrcFolder)) {
+ if (Development::isEnabled() && is_file(PIWIK_INCLUDE_PATH . '/' . $devUmd)) {
+ $this->fileLocations[$plugin] = $devUmd;
+ } else if (is_file(PIWIK_INCLUDE_PATH . '/' . $minifiedUmd)) {
+ $this->fileLocations[$plugin] = $minifiedUmd;
+ }
}
}
}
diff --git a/core/Settings/FieldConfig.php b/core/Settings/FieldConfig.php
index bf9f9f46dd..a6480216b6 100644
--- a/core/Settings/FieldConfig.php
+++ b/core/Settings/FieldConfig.php
@@ -123,10 +123,22 @@ class FieldConfig
* "formField.value" angular model. For an example see "plugins/CorePluginsAdmin/angularjs/form-field/field-text.html"
*
* @var string
+ * @deprecated set $customFieldComponent to ['plugin' => 'MyPlugin', 'component' => 'MyComponentAsItIsExported']
*/
public $customUiControlTemplateFile = '';
/**
+ * Defines a custom Vue component to use for the internal field UI control. This should be an array with two
+ * keys:
+ *
+ * - plugin: the name of the plugin that the UI control exists in.
+ * - name: the name of the export for the component in the plugin's Vue UMD module.
+ *
+ * @var string[]
+ */
+ public $customFieldComponent;
+
+ /**
* Name-value mapping of HTML attributes that will be added HTML form control, eg,
* `array('size' => 3)`. Attributes will be escaped before outputting.
*
diff --git a/plugins/CoreAdminHome/angularjs/branding/branding.controller.js b/plugins/CoreAdminHome/angularjs/branding/branding.controller.js
index d03065fcab..317f9fcf81 100644
--- a/plugins/CoreAdminHome/angularjs/branding/branding.controller.js
+++ b/plugins/CoreAdminHome/angularjs/branding/branding.controller.js
@@ -105,4 +105,4 @@
});
};
}
-})(); \ No newline at end of file
+})();
diff --git a/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js b/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js
index 679a903d76..5d272a51e5 100644
--- a/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js
+++ b/plugins/CoreAdminHome/angularjs/trackingcode/jstrackingcode.controller.js
@@ -191,4 +191,4 @@
this.changeSite(false);
}
}
-})(); \ No newline at end of file
+})();
diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php
index 818db16504..92970dc0b5 100644
--- a/plugins/CoreHome/CoreHome.php
+++ b/plugins/CoreHome/CoreHome.php
@@ -14,6 +14,7 @@ use Piwik\Columns\MetricsList;
use Piwik\Common;
use Piwik\Container\StaticContainer;
use Piwik\DbHelper;
+use Piwik\Development;
use Piwik\IP;
use Piwik\Piwik;
use Piwik\Plugin\ArchivedMetric;
@@ -146,10 +147,10 @@ class CoreHome extends \Piwik\Plugin
$stylesheets[] = "plugins/CoreHome/angularjs/progressbar/progressbar.directive.less";
$stylesheets[] = "plugins/CoreHome/vue/src/DateRangePicker/DateRangePicker.less";
$stylesheets[] = "plugins/CoreHome/angularjs/period-selector/period-selector.directive.less";
- $stylesheets[] = "plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.less";
+ $stylesheets[] = "plugins/CoreHome/vue/src/MultiPairField/MultiPairField.less";
$stylesheets[] = "plugins/CoreHome/vue/src/DropdownMenu/DropdownMenu.less";
$stylesheets[] = "plugins/CoreHome/angularjs/sparkline/sparkline.component.less";
- $stylesheets[] = "plugins/CoreHome/angularjs/field-array/field-array.directive.less";
+ $stylesheets[] = "plugins/CoreHome/vue/src/FieldArray/FieldArray.less";
$stylesheets[] = "plugins/CoreHome/vue/src/Comparisons/Comparisons.less";
$stylesheets[] = "plugins/CoreHome/stylesheets/vue-transitions.less";
}
@@ -164,7 +165,11 @@ class CoreHome extends \Piwik\Plugin
$jsFiles[] = "node_modules/jquery.scrollto/jquery.scrollTo.min.js";
$jsFiles[] = "node_modules/sprintf-js/dist/sprintf.min.js";
$jsFiles[] = "node_modules/mousetrap/mousetrap.min.js";
- $jsFiles[] = 'node_modules/angular/angular.min.js';
+
+ $devAngularJs = 'node_modules/angular/angular.js';
+ $jsFiles[] = Development::isEnabled() && is_file(PIWIK_INCLUDE_PATH . '/' . $devAngularJs)
+ ? $devAngularJs : 'node_modules/angular/angular.min.js';
+
$jsFiles[] = "node_modules/angular-sanitize/angular-sanitize.min.js";
$jsFiles[] = "node_modules/angular-animate/angular-animate.min.js";
$jsFiles[] = "node_modules/angular-cookies/angular-cookies.min.js";
@@ -256,16 +261,11 @@ class CoreHome extends \Piwik\Plugin
$jsFiles[] = "plugins/CoreHome/angularjs/content-table/content-table.directive.js";
-
$jsFiles[] = "plugins/CoreHome/angularjs/period-selector/period-selector.directive.js";
$jsFiles[] = "plugins/CoreHome/angularjs/period-selector/period-selector.controller.js";
- $jsFiles[] = "plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.js";
- $jsFiles[] = "plugins/CoreHome/angularjs/multipairfield/multipairfield.controller.js";
-
- $jsFiles[] = "plugins/CoreHome/angularjs/field-array/field-array.directive.js";
- $jsFiles[] = "plugins/CoreHome/angularjs/field-array/field-array.controller.js";
-
+ // TODO: [Vue] used by RollUpReporting, has to be kept for now.
+ $jsFiles[] = "plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js";
// we have to load these CoreAdminHome files here. If we loaded them in CoreAdminHome,
// there would be JS errors as CoreAdminHome is loaded first. Meaning it is loaded before
@@ -284,8 +284,6 @@ class CoreHome extends \Piwik\Plugin
$jsFiles[] = "plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.controller.js";
$jsFiles[] = "plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.directive.js";
$jsFiles[] = "plugins/CorePluginsAdmin/angularjs/form/form.directive.js";
- $jsFiles[] = "plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js";
- $jsFiles[] = "plugins/CorePluginsAdmin/angularjs/field/field.directive.js";
$jsFiles[] = "plugins/CorePluginsAdmin/angularjs/save-button/save-button.directive.js";
$jsFiles[] = "plugins/CorePluginsAdmin/angularjs/plugins/plugin-filter.directive.js";
$jsFiles[] = "plugins/CorePluginsAdmin/angularjs/plugins/plugin-management.directive.js";
diff --git a/plugins/CoreHome/angularjs/field-array/field-array.controller.js b/plugins/CoreHome/angularjs/field-array/field-array.controller.js
deleted file mode 100644
index 02aa7a2215..0000000000
--- a/plugins/CoreHome/angularjs/field-array/field-array.controller.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-(function () {
- angular.module('piwikApp').controller('FieldArrayController', FieldArrayController);
-
- FieldArrayController.$inject = ['$scope'];
-
- function FieldArrayController($scope){
-
- function getTemplate(field) {
- var control = field.uiControl;
- if (control === 'password' || control === 'url' || control === 'search' || control === 'email') {
- control = 'text'; // we use same template for text and password both
- }
-
- var file = 'field-' + control;
- var fieldsSupportingArrays = ['textarea', 'checkbox', 'text'];
- if (field.type === 'array' && fieldsSupportingArrays.indexOf(control) !== -1) {
- file += '-array';
- }
-
- return 'plugins/CorePluginsAdmin/angularjs/form-field/' + file + '.html?cb=' + piwik.cacheBuster;
- }
-
- if ($scope.field && !$scope.field.templateFile) {
- $scope.field.templateFile = getTemplate($scope.field);
- }
-
- var self = this;
- $scope.$watch('formValue', function () {
- if (!$scope.formValue || !$scope.formValue.length) {
- self.addEntry();
- } else {
- self.onEntryChange();
- }
- }, true);
-
- this.onEntryChange = function () {
- var hasAny = true;
- angular.forEach($scope.formValue, function (entry) {
- if (!entry) {
- hasAny = false;
- }
- });
- if (hasAny) {
- this.addEntry();
- }
- };
-
- this.addEntry = function () {
- if (angular.isArray($scope.formValue)) {
- $scope.formValue.push('');
- }
- };
-
- this.removeEntry = function (index) {
- if (index > -1) {
- $scope.formValue.splice(index, 1);
- }
- };
-
- if (!$scope.formValue || !$scope.formValue.length) {
- this.addEntry();
- }
- }
-
-})();
diff --git a/plugins/CoreHome/angularjs/field-array/field-array.directive.html b/plugins/CoreHome/angularjs/field-array/field-array.directive.html
deleted file mode 100644
index 1ce3fcaecc..0000000000
--- a/plugins/CoreHome/angularjs/field-array/field-array.directive.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<div class="fieldArray form-group">
- <div ng-repeat="item in formValue track by $index"
- class="fieldArrayTable fieldArrayTable{{ $index }} multiple valign-wrapper">
-
- <div piwik-field uicontrol="{{ field.uiControl }}"
- data-title="{{ field.title }}"
- name="{{ name + '-' + $index }}"
- full-width="true"
- ng-if="field.templateFile"
- template-file="{{ field.templateFile }}"
- class="fieldUiControl"
- ng-model="formValue[$index]"
- options="field.availableValues"
- ng-change="fieldArray.onEntryChange()"
- placeholder=" ">
- </div>
-
- <span ng-click="fieldArray.removeEntry($index)"
- title="{{ 'General_Remove'|translate }}"
- ng-hide="($index + 1) == (formValue|length)"
- class="icon-minus valign"></span>
- </div>
-</div> \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/field-array/field-array.directive.js b/plugins/CoreHome/angularjs/field-array/field-array.directive.js
deleted file mode 100644
index 000f16caa9..0000000000
--- a/plugins/CoreHome/angularjs/field-array/field-array.directive.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * Usage:
- * <div matomo-field-array field=".." ng-model="...">
- */
-(function () {
- angular.module('piwikApp').directive('matomoFieldArray', matomoFieldArray);
-
- matomoFieldArray.$inject = ['$document', 'piwik', '$filter'];
-
- function matomoFieldArray($document, piwik, $filter){
- return {
- restrict: 'A',
- scope: {
- name: '=',
- field: '='
- },
- require: "?ngModel",
- templateUrl: 'plugins/CoreHome/angularjs/field-array/field-array.directive.html?cb=' + piwik.cacheBuster,
- controller: 'FieldArrayController',
- controllerAs: 'fieldArray',
- compile: function (element, attrs) {
-
- return function (scope, element, attrs, ngModel) {
-
- if (ngModel) {
- ngModel.$setViewValue(scope.formValue);
- }
-
- scope.$watch('formValue', function (newValue, oldValue) {
- if (newValue != oldValue) {
- element.trigger('change', newValue);
- }
- }, true);
-
- if (ngModel) {
- ngModel.$render = function() {
- if (angular.isString(ngModel.$viewValue)) {
- scope.formValue = JSON.parse(ngModel.$viewValue);
- } else {
- scope.formValue = ngModel.$viewValue;
- }
- };
- }
-
- scope.$watch('formValue', function (newValue, oldValue) {
- if (ngModel) {
- ngModel.$setViewValue(newValue);
- }
- }, true);
- };
- }
- };
- }
-})(); \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/multipairfield/multipairfield.controller.js b/plugins/CoreHome/angularjs/multipairfield/multipairfield.controller.js
deleted file mode 100644
index 737bdbf94f..0000000000
--- a/plugins/CoreHome/angularjs/multipairfield/multipairfield.controller.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/*!
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-(function () {
- angular.module('piwikApp').controller('MultiPairFieldController', MultiPairFieldController);
-
- MultiPairFieldController.$inject = ['$scope'];
-
- function MultiPairFieldController($scope){
-
- function getTemplate(field) {
- var control = field.uiControl;
- if (control === 'password' || control === 'url' || control === 'search' || control === 'email') {
- control = 'text'; // we use same template for text and password both
- }
-
- var file = 'field-' + control;
- var fieldsSupportingArrays = ['textarea', 'checkbox', 'text'];
- if (field.type === 'array' && fieldsSupportingArrays.indexOf(control) !== -1) {
- file += '-array';
- }
-
- return 'plugins/CorePluginsAdmin/angularjs/form-field/' + file + '.html?cb=' + piwik.cacheBuster;
- }
-
- if ($scope.field1 && !$scope.field1.templateFile) {
- $scope.field1.templateFile = getTemplate($scope.field1);
- }
-
- if ($scope.field2 && !$scope.field2.templateFile) {
- $scope.field2.templateFile = getTemplate($scope.field2);
- }
-
- if ($scope.field3 && !$scope.field3.templateFile) {
- $scope.field3.templateFile = getTemplate($scope.field3);
- }
-
- if ($scope.field4 && !$scope.field4.templateFile) {
- $scope.field4.templateFile = getTemplate($scope.field4);
- }
-
- var self = this;
- $scope.$watch('formValue', function () {
- if (!$scope.formValue || !$scope.formValue.length) {
- self.addEntry();
- } else {
- self.onEntryChange();
- }
- }, true);
-
- this.onEntryChange = function () {
- var hasAny = true;
- angular.forEach($scope.formValue, function (table) {
- if (!table) {
- hasAny = false;
- return;
- }
-
- var fieldCount = 0;
- if ($scope.field1 && $scope.field2 && $scope.field3 && $scope.field4) {
- fieldCount = 4;
- } else if ($scope.field1 && $scope.field2 && $scope.field3) {
- fieldCount = 3;
- } else if ($scope.field1 && $scope.field2) {
- fieldCount = 2;
- } else if ($scope.field1) {
- fieldCount = 1;
- }
- table.fieldCount = fieldCount;
-
- if (fieldCount === 4) {
- if (!table[$scope.field1.key] && !table[$scope.field2.key] && !table[$scope.field3.key] && !table[$scope.field4.key]) {
- hasAny = false;
- }
- } else if (fieldCount === 3) {
- if (!table[$scope.field1.key] && !table[$scope.field2.key] && !table[$scope.field3.key]) {
- hasAny = false;
- }
- } else if (fieldCount === 2) {
- if (!table[$scope.field1.key] && !table[$scope.field2.key]) {
- hasAny = false;
- }
- } else if (fieldCount === 1) {
- if (!table[$scope.field1.key]) {
- hasAny = false;
- }
- }
-
-
- });
- if (hasAny) {
- this.addEntry();
- }
- };
-
- this.addEntry = function () {
- if (angular.isArray($scope.formValue)) {
- var obj = {};
- if ($scope.field1 && $scope.field1.key) {
- obj[$scope.field1.key] = '';
- }
- if ($scope.field2 && $scope.field2.key) {
- obj[$scope.field2.key] = '';
- }
- if ($scope.field3 && $scope.field3.key) {
- obj[$scope.field3.key] = '';
- }
- if ($scope.field4 && $scope.field4.key) {
- obj[$scope.field4.key] = '';
- }
- $scope.formValue.push(obj);
- }
- };
-
- this.removeEntry = function (index) {
- if (index > -1) {
- $scope.formValue.splice(index, 1);
- }
- };
-
- if (!$scope.formValue || !$scope.formValue.length) {
- this.addEntry();
- }
- }
-
-})();
diff --git a/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.html b/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.html
deleted file mode 100644
index a14cc99c36..0000000000
--- a/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<div class="multiPairField form-group">
- <div ng-repeat="(index, item) in formValue"
- class="multiPairFieldTable multiPairFieldTable{{ index }} has{{ item.fieldCount }}Fields multiple valign-wrapper">
-
- <div piwik-field uicontrol="{{ field1.uiControl }}"
- name="{{ name + '-p1-' + $index }}"
- data-title="{{ field1.title }}"
- full-width="true"
- ng-if="field1.templateFile"
- template-file="{{ field1.templateFile }}"
- class="fieldUiControl fieldUiControl1"
- ng-class="{'hasMultiFields': (field1.templateFile && field2.templateFile)}"
- ng-model="formValue[index][field1.key]"
- options="field1.availableValues"
- ng-change="multiPairField.onEntryChange()"
- placeholder=" ">
- </div>
-
- <div piwik-field uicontrol="{{ field2.uiControl }}"
- name="{{ name + '-p2-' + $index }}"
- data-title="{{ field2.title }}"
- full-width="true"
- ng-if="field2.templateFile"
- class="fieldUiControl fieldUiControl2"
- template-file="{{ field2.templateFile }}"
- options="field2.availableValues"
- ng-change="multiPairField.onEntryChange()"
- ng-model="formValue[index][field2.key]"
- placeholder=" ">
- </div>
-
- <div piwik-field uicontrol="{{ field3.uiControl }}"
- data-title="{{ field3.title }}"
- full-width="true"
- ng-if="field3.templateFile"
- class="fieldUiControl fieldUiControl3"
- template-file="{{ field3.templateFile }}"
- options="field3.availableValues"
- ng-change="multiPairField.onEntryChange()"
- ng-model="formValue[index][field3.key]"
- placeholder=" ">
- </div>
-
- <div piwik-field uicontrol="{{ field4.uiControl }}"
- data-title="{{ field4.title }}"
- full-width="true"
- ng-if="field4.templateFile"
- class="fieldUiControl fieldUiControl4"
- template-file="{{ field4.templateFile }}"
- options="field4.availableValues"
- ng-change="multiPairField.onEntryChange()"
- ng-model="formValue[index][field4.key]"
- placeholder=" ">
- </div>
-
- <span ng-click="multiPairField.removeEntry(index)"
- title="{{ 'General_Remove'|translate }}"
- ng-hide="(index + 1) == (formValue|length)"
- class="icon-minus valign"></span>
- </div>
-</div> \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.js b/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.js
deleted file mode 100644
index d877c05609..0000000000
--- a/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * Usage:
- * <div matomo-multi-pair-field field1=".." field2="" ng-model="...">
- */
-(function () {
- angular.module('piwikApp').directive('matomoMultiPairField', matomoMultiPairField);
-
- matomoMultiPairField.$inject = ['$document', 'piwik', '$filter'];
-
- function matomoMultiPairField($document, piwik, $filter){
- return {
- restrict: 'A',
- scope: {
- name: '=',
- field1: '=',
- field2: '=',
- field3: '=',
- field4: '='
- },
- require: "?ngModel",
- templateUrl: 'plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.html?cb=' + piwik.cacheBuster,
- controller: 'MultiPairFieldController',
- controllerAs: 'multiPairField',
- compile: function (element, attrs) {
-
- return function (scope, element, attrs, ngModel) {
-
- if (ngModel) {
- ngModel.$setViewValue(scope.formValue);
- }
-
- scope.$watch('formValue', function (newValue, oldValue) {
- if (newValue != oldValue) {
- element.trigger('change', newValue);
- }
- }, true);
-
- if (ngModel) {
- ngModel.$render = function() {
- if (angular.isString(ngModel.$viewValue)) {
- scope.formValue = JSON.parse(ngModel.$viewValue);
- } else {
- scope.formValue = ngModel.$viewValue;
- }
- };
- }
-
- scope.$watch('formValue', function (newValue, oldValue) {
- if (ngModel) {
- ngModel.$setViewValue(newValue);
- }
- }, true);
- };
- }
- };
- }
-})(); \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/report-export/reportexport.directive.js b/plugins/CoreHome/angularjs/report-export/reportexport.directive.js
index a0edb62b11..2967c90ab4 100644
--- a/plugins/CoreHome/angularjs/report-export/reportexport.directive.js
+++ b/plugins/CoreHome/angularjs/report-export/reportexport.directive.js
@@ -45,7 +45,7 @@
}
var method = scope.apiMethod;
- var limit = scope.reportLimitAll == 'yes' ? -1 : scope.reportLimit;
+ var limit = scope.reportLimitAll == 'yes' ? -1 : scope.limitContainer.reportLimit;
var type = scope.reportType;
var params = scope.requestParams;
@@ -222,6 +222,9 @@
reportLimit = Math.min(reportLimit, scope.maxFilterLimit);
}
scope.reportLimit = reportLimit > 0 ? reportLimit : 100;
+ // ng-model seems to have trouble setting $parent.reportLimit, so this was changed
+ // to use a property in a new object, limitContainer. it works. i'm not sure why.
+ scope.limitContainer = { reportLimit: reportLimit };
scope.reportLimitAll = reportLimit == -1 ? 'yes' : 'no';
scope.optionFlat = dataTable.param.flat === true || dataTable.param.flat === 1 || dataTable.param.flat === "1";
scope.optionExpanded = true;
@@ -253,7 +256,7 @@
if (scope.maxFilterLimit > 0) {
scope.$watch('reportLimit', function (newVal, oldVal) {
if (parseInt(newVal, 10) > parseInt(scope.maxFilterLimit, 10)) {
- scope.reportLimit = oldVal;
+ scope.limitContainer.reportLimit = oldVal;
}
}, true);
}
diff --git a/plugins/CoreHome/angularjs/report-export/reportexport.popover.html b/plugins/CoreHome/angularjs/report-export/reportexport.popover.html
index f206424602..24bbf7065f 100644
--- a/plugins/CoreHome/angularjs/report-export/reportexport.popover.html
+++ b/plugins/CoreHome/angularjs/report-export/reportexport.popover.html
@@ -38,24 +38,27 @@
data-title="{{ 'CoreHome_RowLimit'|translate }}"
ng-model="$parent.reportLimitAll"
ng-hide="maxFilterLimit > 0"
- full-width="false"
+ full-width="true"
options="limitAllOptions">
</div>
+
<div piwik-field uicontrol="number" name="filter_limit"
min="1"
- ng-model="$parent.reportLimit"
- full-width="false"
- ng-show="$parent.reportLimitAll == 'no' && maxFilterLimit <= 0">
+ ng-model="limitContainer.reportLimit"
+ value="{{ $parent.reportLimit }}"
+ full-width="true"
+ ng-if="$parent.reportLimitAll == 'no' && maxFilterLimit <= 0">
</div>
<div piwik-field uicontrol="number" name="filter_limit"
min="1"
- max="{{ scope.reportLimit }}"
- ng-model="$parent.reportLimit"
+ max="{{ scope.maxFilterLimit }}"
+ ng-model="limitContainer.reportLimit"
+ value="{{ $parent.reportLimit }}"
ng-keypress="scope.checkNumberForLimit"
- full-width="false"
+ full-width="true"
data-title="{{ 'CoreHome_RowLimit'|translate }} ({{ 'General_ComputedMetricMax'|translate:maxFilterLimit }})"
- ng-show="$parent.reportLimitAll == 'no' && maxFilterLimit > 0">
+ ng-if="$parent.reportLimitAll == 'no' && maxFilterLimit > 0">
</div>
</div>
</div>
diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js b/plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js
new file mode 100644
index 0000000000..eb10cd4235
--- /dev/null
+++ b/plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js
@@ -0,0 +1,140 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+(function () {
+ angular.module('piwikApp').factory('siteSelectorModel', siteSelectorModel);
+
+ siteSelectorModel.$inject = ['piwikApi', '$filter', 'piwik', '$q'];
+
+ /**
+ * @deprecated kept for angularjs code that uses it.
+ */
+ function siteSelectorModel(piwikApi, $filter, piwik, $q) {
+
+ var initialSites = null;
+ var limitPromise = null;
+
+ var model = {
+ sites : [],
+ hasMultipleWebsites : false,
+ isLoading : false,
+ firstSiteName : '',
+ onlySitesWithAdminAccess: false,
+ updateWebsitesList: updateWebsitesList,
+ searchSite: searchSite,
+ loadSite: loadSite,
+ loadInitialSites: loadInitialSites,
+ hasMultipleSites: hasMultipleSites
+ };
+
+ return model;
+
+ function updateWebsitesList(sites) {
+
+ if (!sites || !sites.length) {
+ model.sites = [];
+ return [];
+ }
+
+ angular.forEach(sites, function (site) {
+ if (site.group) site.name = '[' + site.group + '] ' + site.name;
+ });
+
+ model.sites = sortSites(sites);
+
+ if (!model.firstSiteName) {
+ model.firstSiteName = model.sites[0].name;
+ }
+
+ model.hasMultipleWebsites = model.hasMultipleWebsites || sites.length > 1;
+
+ return model.sites;
+ }
+
+ function searchSite(term) {
+
+ if (!term) {
+ loadInitialSites();
+ return;
+ }
+
+ if (model.isLoading) {
+ if (model.currentRequest) {
+ model.currentRequest.abort();
+ } else if (limitPromise) {
+ limitPromise.abort();
+ limitPromise = null;
+ }
+ }
+
+ model.isLoading = true;
+
+ if (!limitPromise) {
+ limitPromise = piwikApi.fetch({method: 'SitesManager.getNumWebsitesToDisplayPerPage'});
+ }
+
+ return limitPromise.then(function (response) {
+ var limit = response.value;
+
+ var methodToCall = 'SitesManager.getPatternMatchSites';
+ if (model.onlySitesWithAdminAccess) {
+ methodToCall = 'SitesManager.getSitesWithAdminAccess';
+ }
+
+ model.currentRequest = piwikApi.fetch({
+ method: methodToCall,
+ limit: limit,
+ pattern: term
+ });
+
+ return model.currentRequest;
+ }).then(function (response) {
+ if (angular.isDefined(response)) {
+ return updateWebsitesList(response);
+ }
+ }).finally(function () {
+ model.isLoading = false;
+ model.currentRequest = null;
+ });
+ }
+
+ function loadSite(idsite) {
+ if (idsite == 'all') {
+ document.location.href = piwikHelper.getCurrentQueryStringWithParametersModified(piwikHelper.getQueryStringFromParameters({
+ module: 'MultiSites',
+ action: 'index',
+ date: piwik.currentDateString,
+ period: piwik.period
+ }));
+ } else {
+ piwik.broadcast.propagateNewPage('segment=&idSite=' + idsite, false);
+ }
+ }
+
+ function sortSites(websites)
+ {
+ return $filter('orderBy')(websites, '+name');
+ }
+
+ function loadInitialSites() {
+ if (initialSites) {
+ model.sites = initialSites;
+ var deferred = $q.defer();
+ deferred.resolve();
+ return deferred.promise;
+ }
+
+ return searchSite('%').then(function () {
+ initialSites = model.sites;
+ model.isInitialized = true
+ });
+ }
+
+ function hasMultipleSites() {
+ return initialSites && initialSites.length > 1;
+ }
+ }
+})();
diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js b/plugins/CoreHome/vue/dist/CoreHome.umd.js
index 190b5027e1..6284561570 100644
--- a/plugins/CoreHome/vue/dist/CoreHome.umd.js
+++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js
@@ -130,6 +130,9 @@ __webpack_require__.r(__webpack_exports__);
// EXPORTS
__webpack_require__.d(__webpack_exports__, "debounce", function() { return /* reexport */ debounce; });
__webpack_require__.d(__webpack_exports__, "createAngularJsAdapter", function() { return /* reexport */ createAngularJsAdapter; });
+__webpack_require__.d(__webpack_exports__, "transformAngularJsBoolAttr", function() { return /* reexport */ transformAngularJsBoolAttr; });
+__webpack_require__.d(__webpack_exports__, "transformAngularJsIntAttr", function() { return /* reexport */ transformAngularJsIntAttr; });
+__webpack_require__.d(__webpack_exports__, "removeAngularJsSpecificProperties", function() { return /* reexport */ removeAngularJsSpecificProperties; });
__webpack_require__.d(__webpack_exports__, "activityIndicatorAdapter", function() { return /* reexport */ ActivityIndicator_adapter; });
__webpack_require__.d(__webpack_exports__, "ActivityIndicator", function() { return /* reexport */ ActivityIndicator; });
__webpack_require__.d(__webpack_exports__, "translate", function() { return /* reexport */ translate; });
@@ -168,6 +171,8 @@ __webpack_require__.d(__webpack_exports__, "NotificationGroup", function() { ret
__webpack_require__.d(__webpack_exports__, "NotificationsStore", function() { return /* reexport */ Notifications_store; });
__webpack_require__.d(__webpack_exports__, "SiteSelector", function() { return /* reexport */ SiteSelector; });
__webpack_require__.d(__webpack_exports__, "QuickAccess", function() { return /* reexport */ QuickAccess; });
+__webpack_require__.d(__webpack_exports__, "FieldArray", function() { return /* reexport */ FieldArray; });
+__webpack_require__.d(__webpack_exports__, "MultiPairField", function() { return /* reexport */ MultiPairField; });
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
// This file is imported into lib/wc client bundles.
@@ -396,7 +401,7 @@ function translate(translationStringId) {
var pkArgs = values; // handle variadic args AND single array of values (to match _pk_translate signature)
- if (values.length === 1 && values[0] && values[0] instanceof Array) {
+ if (values.length === 1 && values[0] && Array.isArray(values[0])) {
pkArgs = values[0];
}
@@ -2464,6 +2469,8 @@ function createAngularJsAdapter_iterableToArrayLimit(arr, i) { var _i = arr == n
function createAngularJsAdapter_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
/*!
* Matomo - free/libre analytics platform
*
@@ -2486,6 +2493,15 @@ function toAngularJsCamelCase(arg) {
});
}
+function removeAngularJsSpecificProperties(newValue) {
+ if (_typeof(newValue) === 'object' && newValue !== null && Object.getPrototypeOf(newValue) === Object.prototype) {
+ return Object.fromEntries(Object.entries(newValue).filter(function (pair) {
+ return !/^\$/.test(pair[0]);
+ }));
+ }
+
+ return newValue;
+}
function createAngularJsAdapter(options) {
var component = options.component,
require = options.require,
@@ -2500,7 +2516,8 @@ function createAngularJsAdapter(options) {
postCreate = options.postCreate,
noScope = options.noScope,
_options$restrict = options.restrict,
- restrict = _options$restrict === void 0 ? 'A' : _options$restrict;
+ restrict = _options$restrict === void 0 ? 'A' : _options$restrict,
+ priority = options.priority;
var currentTranscludeCounter = transcludeCounter;
if (transclude) {
@@ -2530,6 +2547,7 @@ function createAngularJsAdapter(options) {
var adapter = {
restrict: restrict,
require: require,
+ priority: priority,
scope: noScope ? undefined : angularJsScope,
compile: function angularJsAdapterCompile() {
return {
@@ -2541,7 +2559,7 @@ function createAngularJsAdapter(options) {
var _info = createAngularJsAdapter_slicedToArray(info, 1),
eventName = _info[0];
- rootVueTemplate += " @".concat(eventName, "=\"onEventHandler('").concat(eventName, "', $event)\"");
+ rootVueTemplate += " @".concat(toKebabCase(eventName), "=\"onEventHandler('").concat(eventName, "', $event)\"");
});
Object.entries(scope).forEach(function (_ref3) {
var _ref4 = createAngularJsAdapter_slicedToArray(_ref3, 2),
@@ -2556,7 +2574,7 @@ function createAngularJsAdapter(options) {
rootVueTemplate += " @".concat(eventName, "=\"onEventHandler('").concat(eventName, "', $event)\"");
}
} else {
- rootVueTemplate += " :".concat(info.vue, "=\"").concat(info.vue, "\"");
+ rootVueTemplate += " :".concat(toKebabCase(info.vue), "=\"").concat(info.vue, "\"");
}
});
rootVueTemplate += '>';
@@ -2570,20 +2588,22 @@ function createAngularJsAdapter(options) {
var app = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createApp"])({
template: rootVueTemplate,
data: function data() {
+ var _this = this;
+
var initialData = {};
Object.entries(scope).forEach(function (_ref5) {
var _ref6 = createAngularJsAdapter_slicedToArray(_ref5, 2),
scopeVarName = _ref6[0],
info = _ref6[1];
- var value = ngScope[scopeVarName];
+ var value = removeAngularJsSpecificProperties(ngScope[scopeVarName]);
if (typeof value === 'undefined' && typeof info.default !== 'undefined') {
value = info.default instanceof Function ? info.default.apply(info, [ngScope, ngElement, ngAttrs].concat(injectedServices)) : info.default;
}
if (info.transform) {
- value = info.transform(value);
+ value = info.transform.apply(info, [value, _this, ngScope, ngElement, ngAttrs, ngController].concat(injectedServices));
}
initialData[info.vue] = value;
@@ -2631,17 +2651,17 @@ function createAngularJsAdapter(options) {
}
ngScope.$watch(scopeVarName, function (newValue) {
- var newValueFinal = newValue;
+ var newValueFinal = removeAngularJsSpecificProperties(newValue);
if (typeof info.default !== 'undefined' && typeof newValue === 'undefined') {
newValueFinal = info.default instanceof Function ? info.default.apply(info, [ngScope, ngElement, ngAttrs].concat(injectedServices)) : info.default;
}
if (info.transform) {
- newValueFinal = info.transform(newValueFinal);
+ newValueFinal = info.transform.apply(info, [newValueFinal, vm, ngScope, ngElement, ngAttrs, ngController].concat(injectedServices));
}
- vm[scopeVarName] = newValueFinal;
+ vm[info.vue] = newValueFinal;
});
});
@@ -2673,6 +2693,28 @@ function createAngularJsAdapter(options) {
angular.module('piwikApp').directive(directiveName, angularJsAdapter);
return angularJsAdapter;
}
+function transformAngularJsBoolAttr(v) {
+ if (typeof v === 'undefined') {
+ return undefined;
+ }
+
+ if (v === 'true') {
+ return true;
+ }
+
+ return !!v && v > 0 && v !== '0';
+}
+function transformAngularJsIntAttr(v) {
+ if (typeof v === 'undefined') {
+ return undefined;
+ }
+
+ if (v === null) {
+ return null;
+ }
+
+ return parseInt(v, 10);
+}
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts
/*!
* Matomo - free/libre analytics platform
@@ -2720,7 +2762,7 @@ function createAngularJsAdapter(options) {
}, 0);
}
},
- close: function close($event, scope, element, attrs) {
+ close: function close($event, vm, scope, element, attrs) {
if (attrs.close) {
scope.$eval(attrs.close);
setTimeout(function () {
@@ -2751,9 +2793,9 @@ function createAngularJsAdapter(options) {
},
noScope: true
}));
-// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=40f81493
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=4d7ed3a3
-var EnrichedHeadlinevue_type_template_id_40f81493_hoisted_1 = {
+var EnrichedHeadlinevue_type_template_id_4d7ed3a3_hoisted_1 = {
key: 0,
class: "title",
tabindex: "6"
@@ -2784,7 +2826,7 @@ var _hoisted_11 = {
};
var _hoisted_12 = ["innerHTML"];
var _hoisted_13 = ["href"];
-function EnrichedHeadlinevue_type_template_id_40f81493_render(_ctx, _cache, $props, $setup, $data, $options) {
+function EnrichedHeadlinevue_type_template_id_4d7ed3a3_render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_RateFeature = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("RateFeature");
return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", {
@@ -2796,7 +2838,7 @@ function EnrichedHeadlinevue_type_template_id_40f81493_render(_ctx, _cache, $pro
return _ctx.showIcons = false;
}),
ref: "root"
- }, [!_ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", EnrichedHeadlinevue_type_template_id_40f81493_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
+ }, [!_ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", EnrichedHeadlinevue_type_template_id_4d7ed3a3_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.editUrl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", {
key: 1,
class: "title",
href: _ctx.editUrl,
@@ -2829,32 +2871,37 @@ function EnrichedHeadlinevue_type_template_id_40f81493_render(_ctx, _cache, $pro
href: _ctx.helpUrl
}, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_MoreDetails')), 9, _hoisted_13)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showInlineHelp]])], 544);
}
-// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=40f81493
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=template&id=4d7ed3a3
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/useExternalPluginComponent.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+function useExternalPluginComponent(plugin, component) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineAsyncComponent"])(function () {
+ return new Promise(function (resolve) {
+ window.$(document).ready(function () {
+ if (window[plugin]) {
+ resolve(window[plugin][component]);
+ } else {
+ resolve(null); // plugin not loaded
+ }
+ });
+ });
+ });
+}
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue?vue&type=script&lang=ts
+
// working around a cycle in dependencies (CoreHome depends on Feedback, Feedback depends on
// CoreHome)
-// TODO: may need a generic solution at some point, but it's bad practice to have
-// cyclic dependencies like this. it worked before because it was individual files
-// dependening on each other, not whole plugins.
-var RateFeature = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineAsyncComponent"])(function () {
- return new Promise(function (resolve) {
- window.$(document).ready(function () {
- var _window = window,
- Feedback = _window.Feedback; // eslint-disable-line
-
- if (Feedback) {
- resolve(Feedback.RateFeature);
- } else {
- // feedback plugin not loaded
- resolve(null);
- }
- });
- });
-});
+var RateFeature = useExternalPluginComponent('Feedback', 'RateFeature');
/**
* Usage:
*
@@ -2971,7 +3018,7 @@ var RateFeature = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineAs
-EnrichedHeadlinevue_type_script_lang_ts.render = EnrichedHeadlinevue_type_template_id_40f81493_render
+EnrichedHeadlinevue_type_script_lang_ts.render = EnrichedHeadlinevue_type_template_id_4d7ed3a3_render
/* harmony default export */ var EnrichedHeadline = (EnrichedHeadlinevue_type_script_lang_ts);
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.adapter.ts
@@ -3261,7 +3308,7 @@ function wrapArray(values) {
return [];
}
- return values instanceof Array ? values : [values];
+ return Array.isArray(values) ? values : [values];
}
var Comparisons_store_ComparisonsStore = /*#__PURE__*/function () {
@@ -4836,34 +4883,34 @@ PeriodDatePickervue_type_script_lang_ts.render = PeriodDatePickervue_type_templa
directiveName: 'piwikPeriodDatePicker',
restrict: 'E'
}));
-// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=13a2e0c0
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=f4155c00
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_1 = ["value", "name"];
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_2 = ["title"];
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_3 = ["textContent"];
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_4 = {
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_1 = ["value", "name"];
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_2 = ["title"];
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_3 = ["textContent"];
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_4 = {
key: 1,
class: "placeholder"
};
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_5 = {
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_5 = {
class: "dropdown"
};
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_6 = {
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_6 = {
class: "custom_select_search"
};
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_7 = ["placeholder"];
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_8 = {
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_7 = ["placeholder"];
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_8 = {
key: 0
};
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_9 = {
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_9 = {
class: "custom_select_container"
};
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_10 = ["onClick"];
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_11 = ["innerHTML", "href", "title"];
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_12 = {
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_10 = ["onClick"];
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_11 = ["innerHTML", "href", "title"];
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_12 = {
class: "ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all\n siteSelect"
};
-var SiteSelectorvue_type_template_id_13a2e0c0_hoisted_13 = {
+var SiteSelectorvue_type_template_id_f4155c00_hoisted_13 = {
class: "ui-menu-item"
};
var _hoisted_14 = {
@@ -4873,8 +4920,8 @@ var _hoisted_14 = {
var _hoisted_15 = {
key: 1
};
-function SiteSelectorvue_type_template_id_13a2e0c0_render(_ctx, _cache, $props, $setup, $data, $options) {
- var _ctx$selectedSite, _ctx$selectedSite2, _ctx$selectedSite3, _ctx$selectedSite4;
+function SiteSelectorvue_type_template_id_f4155c00_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _ctx$modelValue, _ctx$modelValue2, _ctx$modelValue3, _ctx$modelValue4;
var _component_AllSitesLink = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("AllSitesLink");
@@ -4890,9 +4937,9 @@ function SiteSelectorvue_type_template_id_13a2e0c0_render(_ctx, _cache, $props,
}, [_ctx.name ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("input", {
key: 0,
type: "hidden",
- value: (_ctx$selectedSite = _ctx.selectedSite) === null || _ctx$selectedSite === void 0 ? void 0 : _ctx$selectedSite.id,
+ value: (_ctx$modelValue = _ctx.modelValue) === null || _ctx$modelValue === void 0 ? void 0 : _ctx$modelValue.id,
name: _ctx.name
- }, null, 8, SiteSelectorvue_type_template_id_13a2e0c0_hoisted_1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ }, null, 8, SiteSelectorvue_type_template_id_f4155c00_hoisted_1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
ref: "selectorLink",
onClick: _cache[0] || (_cache[0] = function () {
return _ctx.onClickSelector && _ctx.onClickSelector.apply(_ctx, arguments);
@@ -4911,10 +4958,10 @@ function SiteSelectorvue_type_template_id_13a2e0c0_render(_ctx, _cache, $props,
'iconHidden': _ctx.isLoading,
'collapsed': !_ctx.showSitesList
}])
- }, null, 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [(_ctx$selectedSite2 = _ctx.selectedSite) !== null && _ctx$selectedSite2 !== void 0 && _ctx$selectedSite2.name || !_ctx.placeholder ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", {
+ }, null, 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [(_ctx$modelValue2 = _ctx.modelValue) !== null && _ctx$modelValue2 !== void 0 && _ctx$modelValue2.name || !_ctx.placeholder ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", {
key: 0,
- textContent: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(((_ctx$selectedSite3 = _ctx.selectedSite) === null || _ctx$selectedSite3 === void 0 ? void 0 : _ctx$selectedSite3.name) || _ctx.firstSiteName)
- }, null, 8, SiteSelectorvue_type_template_id_13a2e0c0_hoisted_3)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !((_ctx$selectedSite4 = _ctx.selectedSite) !== null && _ctx$selectedSite4 !== void 0 && _ctx$selectedSite4.name) && _ctx.placeholder ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", SiteSelectorvue_type_template_id_13a2e0c0_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.placeholder), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 42, SiteSelectorvue_type_template_id_13a2e0c0_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_13a2e0c0_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_13a2e0c0_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ textContent: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(((_ctx$modelValue3 = _ctx.modelValue) === null || _ctx$modelValue3 === void 0 ? void 0 : _ctx$modelValue3.name) || _ctx.firstSiteName)
+ }, null, 8, SiteSelectorvue_type_template_id_f4155c00_hoisted_3)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !((_ctx$modelValue4 = _ctx.modelValue) !== null && _ctx$modelValue4 !== void 0 && _ctx$modelValue4.name) && _ctx.placeholder ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", SiteSelectorvue_type_template_id_f4155c00_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.placeholder), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 42, SiteSelectorvue_type_template_id_f4155c00_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_f4155c00_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_f4155c00_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
type: "text",
onClick: _cache[2] || (_cache[2] = function ($event) {
_ctx.searchTerm = '';
@@ -4927,7 +4974,7 @@ function SiteSelectorvue_type_template_id_13a2e0c0_render(_ctx, _cache, $props,
tabindex: "4",
class: "websiteSearch inp browser-default",
placeholder: _ctx.translate('General_Search')
- }, null, 8, SiteSelectorvue_type_template_id_13a2e0c0_hoisted_7), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.searchTerm], [_directive_focus_if, {}, _ctx.shouldFocusOnSearch]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("img", {
+ }, null, 8, SiteSelectorvue_type_template_id_f4155c00_hoisted_7), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.searchTerm], [_directive_focus_if, {}, _ctx.shouldFocusOnSearch]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("img", {
title: "Clear",
onClick: _cache[4] || (_cache[4] = function ($event) {
_ctx.searchTerm = '';
@@ -4936,23 +4983,23 @@ function SiteSelectorvue_type_template_id_13a2e0c0_render(_ctx, _cache, $props,
}),
class: "reset",
src: "plugins/CoreHome/images/reset_search.png"
- }, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.searchTerm]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.autocompleteMinSites <= _ctx.sites.length || _ctx.searchTerm]]), _ctx.allSitesLocation === 'top' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", SiteSelectorvue_type_template_id_13a2e0c0_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, {
+ }, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.searchTerm]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.autocompleteMinSites <= _ctx.sites.length || _ctx.searchTerm]]), _ctx.allSitesLocation === 'top' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", SiteSelectorvue_type_template_id_f4155c00_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, {
href: _ctx.urlAllSites,
"all-sites-text": _ctx.allSitesText,
onClick: _cache[5] || (_cache[5] = function ($event) {
return _ctx.onAllSitesClick($event);
})
- }, null, 8, ["href", "all-sites-text"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_13a2e0c0_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", {
+ }, null, 8, ["href", "all-sites-text"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_f4155c00_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", {
class: "custom_select_ul_list",
onClick: _cache[7] || (_cache[7] = function ($event) {
return _ctx.showSitesList = false;
})
- }, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.sites, function (site) {
+ }, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.sites, function (site, index) {
return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", {
onClick: function onClick($event) {
return _ctx.switchSite(site, $event);
},
- key: site.idsite
+ key: index
}, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
onClick: _cache[6] || (_cache[6] = function ($event) {
return $event.preventDefault();
@@ -4961,8 +5008,8 @@ function SiteSelectorvue_type_template_id_13a2e0c0_render(_ctx, _cache, $props,
tabindex: "4",
href: _ctx.getUrlForSiteId(site.idsite),
title: site.name
- }, null, 8, SiteSelectorvue_type_template_id_13a2e0c0_hoisted_11)], 8, SiteSelectorvue_type_template_id_13a2e0c0_hoisted_10)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !(!_ctx.showSelectedSite && _ctx.activeSiteId === site.idsite)]]);
- }), 128))]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", SiteSelectorvue_type_template_id_13a2e0c0_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", SiteSelectorvue_type_template_id_13a2e0c0_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", _hoisted_14, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_NotFound') + ' ' + _ctx.searchTerm), 1)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.sites.length && _ctx.searchTerm]])]), _ctx.allSitesLocation === 'bottom' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_15, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, {
+ }, null, 8, SiteSelectorvue_type_template_id_f4155c00_hoisted_11)], 8, SiteSelectorvue_type_template_id_f4155c00_hoisted_10)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !(!_ctx.showSelectedSite && _ctx.activeSiteId === site.idsite)]]);
+ }), 128))]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", SiteSelectorvue_type_template_id_f4155c00_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", SiteSelectorvue_type_template_id_f4155c00_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", _hoisted_14, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_NotFound') + ' ' + _ctx.searchTerm), 1)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.sites.length && _ctx.searchTerm]])]), _ctx.allSitesLocation === 'bottom' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_15, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, {
href: _ctx.urlAllSites,
"all-sites-text": _ctx.allSitesText,
onClick: _cache[8] || (_cache[8] = function ($event) {
@@ -4972,7 +5019,7 @@ function SiteSelectorvue_type_template_id_13a2e0c0_render(_ctx, _cache, $props,
blur: _ctx.onBlur
}]]);
}
-// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=13a2e0c0
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=f4155c00
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/SiteSelector/AllSitesLink.vue?vue&type=template&id=45607d28
@@ -5253,12 +5300,6 @@ function SiteSelectorvue_type_script_lang_ts_defineProperty(obj, key, value) { i
watch: {
searchTerm: function searchTerm() {
this.onSearchTermChanged();
- },
- modelValue: {
- handler: function handler(newValue) {
- this.selectedSite = SiteSelectorvue_type_script_lang_ts_objectSpread({}, newValue);
- },
- deep: true
}
},
data: function data() {
@@ -5268,7 +5309,7 @@ function SiteSelectorvue_type_script_lang_ts_defineProperty(obj, key, value) { i
showSitesList: false,
isLoading: false,
sites: [],
- selectedSite: {
+ selectedSite: this.modelValue || {
id: Matomo_Matomo.idSite,
name: Matomo_Matomo.helper.htmlDecode(Matomo_Matomo.siteName)
},
@@ -5280,13 +5321,11 @@ function SiteSelectorvue_type_script_lang_ts_defineProperty(obj, key, value) { i
window.initTopControls();
this.loadInitialSites().then(function () {
- if ((!_this.selectedSite || !_this.selectedSite.id) && _this.sites[0]) {
- _this.selectedSite = {
+ if ((!_this.modelValue || !_this.modelValue.id) && _this.sites[0]) {
+ _this.$emit('update:modelValue', {
id: _this.sites[0].idsite,
name: _this.sites[0].name
- };
-
- _this.$emit('update:modelValue', SiteSelectorvue_type_script_lang_ts_objectSpread({}, _this.selectedSite));
+ });
}
});
var shortcutTitle = translate('CoreHome_ShortcutWebsiteSelector');
@@ -5311,9 +5350,9 @@ function SiteSelectorvue_type_script_lang_ts_defineProperty(obj, key, value) { i
return this.showSitesList && this.autocompleteMinSites <= this.sites.length || this.searchTerm;
},
selectorLinkTitle: function selectorLinkTitle() {
- var _this$selectedSite;
+ var _this$modelValue;
- return this.hasMultipleSites ? translate('CoreHome_ChangeCurrentWebsite', ((_this$selectedSite = this.selectedSite) === null || _this$selectedSite === void 0 ? void 0 : _this$selectedSite.name) || this.firstSiteName) : '';
+ return this.hasMultipleSites ? translate('CoreHome_ChangeCurrentWebsite', ((_this$modelValue = this.modelValue) === null || _this$modelValue === void 0 ? void 0 : _this$modelValue.name) || this.firstSiteName) : '';
},
hasMultipleSites: function hasMultipleSites() {
return SiteSelector_SitesStore.initialSites.value && SiteSelector_SitesStore.initialSites.value.length > 1;
@@ -5360,11 +5399,10 @@ function SiteSelectorvue_type_script_lang_ts_defineProperty(obj, key, value) { i
return;
}
- this.selectedSite = {
+ this.$emit('update:modelValue', {
id: site.idsite,
name: site.name
- };
- this.$emit('update:modelValue', SiteSelectorvue_type_script_lang_ts_objectSpread({}, this.selectedSite));
+ });
if (!this.switchSiteOnSelect || this.activeSiteId === site.idsite) {
return;
@@ -5451,7 +5489,7 @@ function SiteSelectorvue_type_script_lang_ts_defineProperty(obj, key, value) { i
-SiteSelectorvue_type_script_lang_ts.render = SiteSelectorvue_type_template_id_13a2e0c0_render
+SiteSelectorvue_type_script_lang_ts.render = SiteSelectorvue_type_template_id_f4155c00_render
/* harmony default export */ var SiteSelector = (SiteSelectorvue_type_script_lang_ts);
// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts
@@ -5470,6 +5508,7 @@ function SiteSelector_adapter_defineProperty(obj, key, value) { if (key in obj)
+
/* harmony default export */ var SiteSelector_adapter = (createAngularJsAdapter({
component: SiteSelector,
require: '?ngModel',
@@ -5503,14 +5542,22 @@ function SiteSelector_adapter_defineProperty(obj, key, value) { if (key in obj)
$inject: ['$timeout'],
directiveName: 'piwikSiteselector',
events: {
- 'update:modelValue': function updateModelValue(newValue, vm, scope, element, attrs, ngModel) {
+ 'update:modelValue': function updateModelValue(newValue, vm, scope, element, attrs, ngModel, $timeout) {
if (newValue && !vm.modelValue || !newValue && vm.modelValue || newValue.id !== vm.modelValue.id) {
- element.attr('siteid', newValue.id);
- element.trigger('change', newValue);
+ $timeout(function () {
+ scope.value = newValue;
+ element.attr('siteid', newValue.id);
+ element.trigger('change', newValue);
+
+ if (ngModel // the original site selector did not initiate an ngModel change when initializing its
+ // internal selectedSite state. mimicking that behavior here for BC.
+ && (scope.isNotFirstModelChange || vm.modelValue)) {
+ ngModel.$setViewValue(newValue);
+ ngModel.$render(); // not called automatically by the digest
+ }
- if (ngModel) {
- ngModel.$setViewValue(newValue);
- }
+ scope.isNotFirstModelChange = true;
+ });
}
},
blur: function blur(event, vm, scope) {
@@ -5520,17 +5567,26 @@ function SiteSelector_adapter_defineProperty(obj, key, value) { if (key in obj)
}
},
postCreate: function postCreate(vm, scope, element, attrs, controller, $timeout) {
- var ngModel = controller; // setup ng-model mapping
+ var ngModel = controller;
+ scope.$watch('value', function (newVal) {
+ if (newVal !== vm.modelValue) {
+ vm.modelValue = newVal;
+ }
+ }); // setup ng-model mapping
if (ngModel) {
- ngModel.$setViewValue(vm.modelValue);
+ if (vm.modelValue) {
+ ngModel.$setViewValue(vm.modelValue);
+ }
ngModel.$render = function () {
- if (angular.isString(ngModel.$viewValue)) {
- vm.modelValue = JSON.parse(ngModel.$viewValue);
- } else {
- vm.modelValue = ngModel.$viewValue;
- }
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["nextTick"])(function () {
+ if (angular.isString(ngModel.$viewValue)) {
+ vm.modelValue = JSON.parse(ngModel.$viewValue);
+ } else {
+ vm.modelValue = ngModel.$viewValue;
+ }
+ });
};
}
@@ -6056,6 +6112,455 @@ QuickAccessvue_type_script_lang_ts.render = QuickAccessvue_type_template_id_d1e0
}
}
}));
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/FieldArray/FieldArray.vue?vue&type=template&id=3f52d214
+function FieldArrayvue_type_template_id_3f52d214_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+
+var FieldArrayvue_type_template_id_3f52d214_hoisted_1 = {
+ class: "fieldArray form-group"
+};
+var FieldArrayvue_type_template_id_3f52d214_hoisted_2 = {
+ key: 0,
+ class: "fieldUiControl"
+};
+var FieldArrayvue_type_template_id_3f52d214_hoisted_3 = ["onClick", "title"];
+function FieldArrayvue_type_template_id_3f52d214_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldArrayvue_type_template_id_3f52d214_hoisted_1, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.modelValue, function (item, index) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["fieldArrayTable multiple valign-wrapper", FieldArrayvue_type_template_id_3f52d214_defineProperty({}, "fieldArrayTable".concat(index), true)]),
+ key: index
+ }, [_ctx.field.uiControl ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldArrayvue_type_template_id_3f52d214_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ "full-width": true,
+ "model-value": item,
+ options: _ctx.field.availableValues,
+ "onUpdate:modelValue": function onUpdateModelValue($event) {
+ return _ctx.onEntryChange($event, index);
+ },
+ placeholder: ' ',
+ uicontrol: _ctx.field.uiControl,
+ title: _ctx.field.title,
+ name: "".concat(_ctx.name, "-").concat(index)
+ }, null, 8, ["model-value", "options", "onUpdate:modelValue", "uicontrol", "title", "name"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ onClick: function onClick($event) {
+ return _ctx.removeEntry(index);
+ },
+ class: "icon-minus valign",
+ title: _ctx.translate('General_Remove')
+ }, null, 8, FieldArrayvue_type_template_id_3f52d214_hoisted_3), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], index + 1 !== _ctx.modelValue.length]])], 2);
+ }), 128))]);
+}
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/FieldArray/FieldArray.vue?vue&type=template&id=3f52d214
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/FieldArray/FieldArray.vue?vue&type=script&lang=ts
+function FieldArrayvue_type_script_lang_ts_toConsumableArray(arr) { return FieldArrayvue_type_script_lang_ts_arrayWithoutHoles(arr) || FieldArrayvue_type_script_lang_ts_iterableToArray(arr) || FieldArrayvue_type_script_lang_ts_unsupportedIterableToArray(arr) || FieldArrayvue_type_script_lang_ts_nonIterableSpread(); }
+
+function FieldArrayvue_type_script_lang_ts_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function FieldArrayvue_type_script_lang_ts_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FieldArrayvue_type_script_lang_ts_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FieldArrayvue_type_script_lang_ts_arrayLikeToArray(o, minLen); }
+
+function FieldArrayvue_type_script_lang_ts_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function FieldArrayvue_type_script_lang_ts_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return FieldArrayvue_type_script_lang_ts_arrayLikeToArray(arr); }
+
+function FieldArrayvue_type_script_lang_ts_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+
+ // async since this is a a recursive component
+
+var Field = useExternalPluginComponent('CorePluginsAdmin', 'Field');
+/* harmony default export */ var FieldArrayvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: Array,
+ name: String,
+ field: Object
+ },
+ components: {
+ Field: Field
+ },
+ emits: ['update:modelValue'],
+ watch: {
+ modelValue: function modelValue(newValue) {
+ this.checkEmptyModelValue(newValue);
+ }
+ },
+ mounted: function mounted() {
+ this.checkEmptyModelValue(this.modelValue);
+ },
+ methods: {
+ checkEmptyModelValue: function checkEmptyModelValue(newValue) {
+ // make sure there is always an empty new value
+ if (!newValue || !newValue.length || newValue.slice(-1)[0] !== '') {
+ this.$emit('update:modelValue', [].concat(FieldArrayvue_type_script_lang_ts_toConsumableArray(newValue || []), ['']));
+ }
+ },
+ onEntryChange: function onEntryChange(newValue, index) {
+ var newArrayValue = FieldArrayvue_type_script_lang_ts_toConsumableArray(this.modelValue);
+
+ newArrayValue[index] = newValue;
+ this.$emit('update:modelValue', newArrayValue);
+ },
+ removeEntry: function removeEntry(index) {
+ if (index > -1) {
+ var newValue = this.modelValue.filter(function (x, i) {
+ return i !== index;
+ });
+ this.$emit('update:modelValue', newValue);
+ }
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/FieldArray/FieldArray.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/FieldArray/FieldArray.vue
+
+
+
+FieldArrayvue_type_script_lang_ts.render = FieldArrayvue_type_template_id_3f52d214_render
+
+/* harmony default export */ var FieldArray = (FieldArrayvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/FieldArray/FieldArray.adapter.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+
+/* harmony default export */ var FieldArray_adapter = (createAngularJsAdapter({
+ component: FieldArray,
+ require: '?ngModel',
+ scope: {
+ name: {
+ angularJsBind: '='
+ },
+ field: {
+ angularJsBind: '='
+ }
+ },
+ directiveName: 'matomoFieldArray',
+ events: {
+ 'update:modelValue': function updateModelValue(newValue, vm, scope, element, attrs, ngModel) {
+ if (newValue !== vm.modelValue) {
+ element.trigger('change', newValue);
+
+ if (ngModel) {
+ ngModel.$setViewValue(newValue);
+ }
+ }
+ }
+ },
+ postCreate: function postCreate(vm, scope, element, attrs, controller) {
+ var ngModel = controller; // setup ng-model mapping
+
+ if (ngModel) {
+ ngModel.$setViewValue(vm.modelValue);
+
+ ngModel.$render = function () {
+ if (angular.isString(ngModel.$viewValue)) {
+ vm.modelValue = JSON.parse(ngModel.$viewValue);
+ } else {
+ vm.modelValue = ngModel.$viewValue;
+ }
+ };
+ }
+ }
+}));
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue?vue&type=template&id=2fb01c36
+function MultiPairFieldvue_type_template_id_2fb01c36_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+
+var MultiPairFieldvue_type_template_id_2fb01c36_hoisted_1 = {
+ class: "multiPairField form-group"
+};
+var MultiPairFieldvue_type_template_id_2fb01c36_hoisted_2 = {
+ key: 1,
+ class: "fieldUiControl fieldUiControl2"
+};
+var MultiPairFieldvue_type_template_id_2fb01c36_hoisted_3 = {
+ key: 2,
+ class: "fieldUiControl fieldUiControl3"
+};
+var MultiPairFieldvue_type_template_id_2fb01c36_hoisted_4 = {
+ key: 3,
+ class: "fieldUiControl fieldUiControl4"
+};
+var MultiPairFieldvue_type_template_id_2fb01c36_hoisted_5 = ["onClick", "title"];
+function MultiPairFieldvue_type_template_id_2fb01c36_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", MultiPairFieldvue_type_template_id_2fb01c36_hoisted_1, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.modelValue, function (item, index) {
+ var _ref;
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["multiPairFieldTable multiple valign-wrapper", (_ref = {}, MultiPairFieldvue_type_template_id_2fb01c36_defineProperty(_ref, "multiPairFieldTable".concat(index), true), MultiPairFieldvue_type_template_id_2fb01c36_defineProperty(_ref, "has".concat(_ctx.fieldCount, "Fields"), true), _ref)]),
+ key: index
+ }, [_ctx.field1 ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", {
+ key: 0,
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["fieldUiControl fieldUiControl1", {
+ hasMultiFields: _ctx.field1.type && _ctx.field2.type
+ }])
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ "full-width": true,
+ modelValue: item[_ctx.field1.key],
+ "onUpdate:modelValue": [function ($event) {
+ return item[_ctx.field1.key] = $event;
+ }, function ($event) {
+ return _ctx.onEntryChange(index, _ctx.field1.key, $event);
+ }],
+ options: _ctx.field1.availableValues,
+ placeholder: ' ',
+ uicontrol: _ctx.field1.uiControl,
+ name: "".concat(_ctx.name, "-p1-").concat(index),
+ title: _ctx.field1.title
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "options", "uicontrol", "name", "title"])], 2)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.field2 ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", MultiPairFieldvue_type_template_id_2fb01c36_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ "full-width": true,
+ options: _ctx.field2.availableValues,
+ "onUpdate:modelValue": [function ($event) {
+ return _ctx.onEntryChange(index, _ctx.field2.key, $event);
+ }, function ($event) {
+ return item[_ctx.field2.key] = $event;
+ }],
+ modelValue: item[_ctx.field2.key],
+ placeholder: ' ',
+ uicontrol: _ctx.field2.uiControl,
+ name: "".concat(_ctx.name, "-p2-").concat(index),
+ title: _ctx.field2.title
+ }, null, 8, ["options", "onUpdate:modelValue", "modelValue", "uicontrol", "name", "title"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.field3 ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", MultiPairFieldvue_type_template_id_2fb01c36_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ "full-width": true,
+ options: _ctx.field3.availableValues,
+ "onUpdate:modelValue": [function ($event) {
+ return _ctx.onEntryChange(index, _ctx.field3.key, $event);
+ }, function ($event) {
+ return item[_ctx.field3.key] = $event;
+ }],
+ modelValue: item[_ctx.field3.key],
+ placeholder: ' ',
+ uicontrol: _ctx.field3.uiControl,
+ title: _ctx.field3.title
+ }, null, 8, ["options", "onUpdate:modelValue", "modelValue", "uicontrol", "title"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.field4 ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", MultiPairFieldvue_type_template_id_2fb01c36_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ "full-width": true,
+ options: _ctx.field4.availableValues,
+ "onUpdate:modelValue": [function ($event) {
+ return _ctx.onEntryChange(index, _ctx.field4.key, $event);
+ }, function ($event) {
+ return item[_ctx.field4.key] = $event;
+ }],
+ modelValue: item[_ctx.field4.key],
+ placeholder: ' ',
+ uicontrol: _ctx.field4.uiControl,
+ title: _ctx.field4.title
+ }, null, 8, ["options", "onUpdate:modelValue", "modelValue", "uicontrol", "title"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ onClick: function onClick($event) {
+ return _ctx.removeEntry(index);
+ },
+ class: "icon-minus valign",
+ title: _ctx.translate('General_Remove')
+ }, null, 8, MultiPairFieldvue_type_template_id_2fb01c36_hoisted_5), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], index + 1 !== _ctx.modelValue.length]])], 2);
+ }), 128))]);
+}
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue?vue&type=template&id=2fb01c36
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue?vue&type=script&lang=ts
+function MultiPairFieldvue_type_script_lang_ts_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function MultiPairFieldvue_type_script_lang_ts_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { MultiPairFieldvue_type_script_lang_ts_ownKeys(Object(source), true).forEach(function (key) { MultiPairFieldvue_type_script_lang_ts_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { MultiPairFieldvue_type_script_lang_ts_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function MultiPairFieldvue_type_script_lang_ts_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function MultiPairFieldvue_type_script_lang_ts_toConsumableArray(arr) { return MultiPairFieldvue_type_script_lang_ts_arrayWithoutHoles(arr) || MultiPairFieldvue_type_script_lang_ts_iterableToArray(arr) || MultiPairFieldvue_type_script_lang_ts_unsupportedIterableToArray(arr) || MultiPairFieldvue_type_script_lang_ts_nonIterableSpread(); }
+
+function MultiPairFieldvue_type_script_lang_ts_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function MultiPairFieldvue_type_script_lang_ts_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MultiPairFieldvue_type_script_lang_ts_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MultiPairFieldvue_type_script_lang_ts_arrayLikeToArray(o, minLen); }
+
+function MultiPairFieldvue_type_script_lang_ts_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function MultiPairFieldvue_type_script_lang_ts_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MultiPairFieldvue_type_script_lang_ts_arrayLikeToArray(arr); }
+
+function MultiPairFieldvue_type_script_lang_ts_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+
+ // async since this is a a recursive component
+
+var MultiPairFieldvue_type_script_lang_ts_Field = useExternalPluginComponent('CorePluginsAdmin', 'Field');
+/* harmony default export */ var MultiPairFieldvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: Array,
+ name: String,
+ field1: Object,
+ field2: Object,
+ field3: Object,
+ field4: Object
+ },
+ components: {
+ Field: MultiPairFieldvue_type_script_lang_ts_Field
+ },
+ computed: {
+ fieldCount: function fieldCount() {
+ if (this.field1 && this.field2 && this.field3 && this.field4) {
+ return 4;
+ }
+
+ if (this.field1 && this.field2 && this.field3) {
+ return 3;
+ }
+
+ if (this.field1 && this.field2) {
+ return 2;
+ }
+
+ if (this.field1) {
+ return 1;
+ }
+
+ return 0;
+ }
+ },
+ emits: ['update:modelValue'],
+ watch: {
+ modelValue: function modelValue(newValue) {
+ this.checkEmptyModelValue(newValue);
+ }
+ },
+ mounted: function mounted() {
+ this.checkEmptyModelValue(this.modelValue);
+ },
+ methods: {
+ checkEmptyModelValue: function checkEmptyModelValue(newValue) {
+ // make sure there is always an empty new value
+ if (!newValue || !newValue.length || this.isEmptyValue(newValue.slice(-1)[0])) {
+ this.$emit('update:modelValue', [].concat(MultiPairFieldvue_type_script_lang_ts_toConsumableArray(newValue || []), [this.makeEmptyValue()]));
+ }
+ },
+ onEntryChange: function onEntryChange(index, key, newValue) {
+ var newWholeValue = MultiPairFieldvue_type_script_lang_ts_toConsumableArray(this.modelValue);
+
+ newWholeValue[index] = MultiPairFieldvue_type_script_lang_ts_objectSpread(MultiPairFieldvue_type_script_lang_ts_objectSpread({}, newWholeValue[index]), {}, MultiPairFieldvue_type_script_lang_ts_defineProperty({}, key, newValue));
+ this.$emit('update:modelValue', newWholeValue);
+ },
+ removeEntry: function removeEntry(index) {
+ if (index > -1) {
+ var newValue = this.modelValue.filter(function (x, i) {
+ return i !== index;
+ });
+ this.$emit('update:modelValue', newValue);
+ }
+ },
+ isEmptyValue: function isEmptyValue(value) {
+ var fieldCount = this.fieldCount;
+
+ if (fieldCount === 4) {
+ if (!value[this.field1.key] && !value[this.field2.key] && !value[this.field3.key] && !value[this.field4.key]) {
+ return false;
+ }
+ } else if (fieldCount === 3) {
+ if (!value[this.field1.key] && !value[this.field2.key] && !value[this.field3.key]) {
+ return false;
+ }
+ } else if (fieldCount === 2) {
+ if (!value[this.field1.key] && !value[this.field2.key]) {
+ return false;
+ }
+ } else if (fieldCount === 1) {
+ if (!value[this.field1.key]) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+ makeEmptyValue: function makeEmptyValue() {
+ var result = {};
+
+ if (this.field1 && this.field1.key) {
+ result[this.field1.key] = '';
+ }
+
+ if (this.field2 && this.field2.key) {
+ result[this.field2.key] = '';
+ }
+
+ if (this.field3 && this.field3.key) {
+ result[this.field3.key] = '';
+ }
+
+ if (this.field4 && this.field4.key) {
+ result[this.field4.key] = '';
+ }
+
+ return result;
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue
+
+
+
+MultiPairFieldvue_type_script_lang_ts.render = MultiPairFieldvue_type_template_id_2fb01c36_render
+
+/* harmony default export */ var MultiPairField = (MultiPairFieldvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/MultiPairField/MultiPairField.adapter.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+
+/* harmony default export */ var MultiPairField_adapter = (createAngularJsAdapter({
+ component: MultiPairField,
+ require: '?ngModel',
+ scope: {
+ name: {
+ angularJsBind: '='
+ },
+ field1: {
+ angularJsBind: '='
+ },
+ field2: {
+ angularJsBind: '='
+ },
+ field3: {
+ angularJsBind: '='
+ },
+ field4: {
+ angularJsBind: '='
+ }
+ },
+ directiveName: 'matomoMultiPairField',
+ events: {
+ 'update:modelValue': function updateModelValue(newValue, vm, scope, element, attrs, ngModel) {
+ if (newValue !== vm.modelValue) {
+ element.trigger('change', newValue);
+
+ if (ngModel) {
+ ngModel.$setViewValue(newValue);
+ }
+ }
+ }
+ },
+ postCreate: function postCreate(vm, scope, element, attrs, controller) {
+ var ngModel = controller; // setup ng-model mapping
+
+ if (ngModel) {
+ ngModel.$setViewValue(vm.modelValue);
+
+ ngModel.$render = function () {
+ if (angular.isString(ngModel.$viewValue)) {
+ vm.modelValue = JSON.parse(ngModel.$viewValue);
+ } else {
+ vm.modelValue = ngModel.$viewValue;
+ }
+ };
+ }
+ }
+}));
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=6af4d064
var ActivityIndicatorvue_type_template_id_6af4d064_hoisted_1 = {
@@ -6424,9 +6929,7 @@ Notificationvue_type_script_lang_ts.render = Notificationvue_type_template_id_e3
},
noclear: {
angularJsBind: '@?',
- transform: function transform(v) {
- return !!v;
- }
+ transform: transformAngularJsBoolAttr
},
toastLength: {
angularJsBind: '@?'
@@ -6830,6 +7333,10 @@ NotificationGroupvue_type_script_lang_ts.render = NotificationGroupvue_type_temp
+
+
+
+
// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js
diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
index 4850e32df6..da1a395c26 100644
--- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
+++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js
@@ -4,38 +4,38 @@
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */window.hasBlockedContent=!1},"8bbf":function(t,n){t.exports=e},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"debounce",(function(){return Ur})),n.d(t,"createAngularJsAdapter",(function(){return wt})),n.d(t,"activityIndicatorAdapter",(function(){return Si})),n.d(t,"ActivityIndicator",(function(){return Oi})),n.d(t,"translate",(function(){return D})),n.d(t,"alertAdapter",(function(){return Ei})),n.d(t,"AjaxHelper",(function(){return Ne})),n.d(t,"setCookie",(function(){return Pi})),n.d(t,"getCookie",(function(){return Ti})),n.d(t,"deleteCookie",(function(){return Ii})),n.d(t,"MatomoUrl",(function(){return Oe})),n.d(t,"Matomo",(function(){return j})),n.d(t,"Periods",(function(){return f})),n.d(t,"Day",(function(){return z})),n.d(t,"Week",(function(){return X})),n.d(t,"Month",(function(){return re})),n.d(t,"Year",(function(){return se})),n.d(t,"Range",(function(){return _})),n.d(t,"format",(function(){return C})),n.d(t,"getToday",(function(){return E})),n.d(t,"parseDate",(function(){return P})),n.d(t,"todayIsInRange",(function(){return T})),n.d(t,"Dropdown",(function(){return Me})),n.d(t,"FocusAnywhereButHere",(function(){return _e})),n.d(t,"FocusIf",(function(){return qe})),n.d(t,"MatomoDialog",(function(){return ut})),n.d(t,"ExpandOnClick",(function(){return Xe})),n.d(t,"ExpandOnHover",(function(){return at})),n.d(t,"EnrichedHeadline",(function(){return Vt})),n.d(t,"ContentBlock",(function(){return Gt})),n.d(t,"Comparisons",(function(){return Nn})),n.d(t,"MenuDropdown",(function(){return zn})),n.d(t,"DatePicker",(function(){return rr})),n.d(t,"DateRangePicker",(function(){return sr})),n.d(t,"PeriodDatePicker",(function(){return pr})),n.d(t,"Notification",(function(){return _i})),n.d(t,"NotificationGroup",(function(){return ta})),n.d(t,"NotificationsStore",(function(){return Yi})),n.d(t,"SiteSelector",(function(){return Qr})),n.d(t,"QuickAccess",(function(){return vi})),"undefined"!==typeof window){var r=window.document.currentScript,i=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}n("2342");var a=n("8bbf");function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function s(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),e}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */window.hasBlockedContent=!1},"8bbf":function(t,n){t.exports=e},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"debounce",(function(){return Qr})),n.d(t,"createAngularJsAdapter",(function(){return jt})),n.d(t,"transformAngularJsBoolAttr",(function(){return kt})),n.d(t,"transformAngularJsIntAttr",(function(){return St})),n.d(t,"removeAngularJsSpecificProperties",(function(){return Ot})),n.d(t,"activityIndicatorAdapter",(function(){return ao})),n.d(t,"ActivityIndicator",(function(){return oo})),n.d(t,"translate",(function(){return C})),n.d(t,"alertAdapter",(function(){return fo})),n.d(t,"AjaxHelper",(function(){return xe})),n.d(t,"setCookie",(function(){return mo})),n.d(t,"getCookie",(function(){return po})),n.d(t,"deleteCookie",(function(){return ho})),n.d(t,"MatomoUrl",(function(){return Oe})),n.d(t,"Matomo",(function(){return S})),n.d(t,"Periods",(function(){return f})),n.d(t,"Day",(function(){return G})),n.d(t,"Week",(function(){return X})),n.d(t,"Month",(function(){return re})),n.d(t,"Year",(function(){return le})),n.d(t,"Range",(function(){return _})),n.d(t,"format",(function(){return D})),n.d(t,"getToday",(function(){return E})),n.d(t,"parseDate",(function(){return P})),n.d(t,"todayIsInRange",(function(){return T})),n.d(t,"Dropdown",(function(){return Be})),n.d(t,"FocusAnywhereButHere",(function(){return _e})),n.d(t,"FocusIf",(function(){return qe})),n.d(t,"MatomoDialog",(function(){return ut})),n.d(t,"ExpandOnClick",(function(){return Xe})),n.d(t,"ExpandOnHover",(function(){return ot})),n.d(t,"EnrichedHeadline",(function(){return Ut})),n.d(t,"ContentBlock",(function(){return Kt})),n.d(t,"Comparisons",(function(){return $n})),n.d(t,"MenuDropdown",(function(){return Xn})),n.d(t,"DatePicker",(function(){return lr})),n.d(t,"DateRangePicker",(function(){return mr})),n.d(t,"PeriodDatePicker",(function(){return br})),n.d(t,"Notification",(function(){return Do})),n.d(t,"NotificationGroup",(function(){return Fo})),n.d(t,"NotificationsStore",(function(){return Ao})),n.d(t,"SiteSelector",(function(){return Zr})),n.d(t,"QuickAccess",(function(){return Oi})),n.d(t,"FieldArray",(function(){return Ai})),n.d(t,"MultiPairField",(function(){return eo})),"undefined"!==typeof window){var r=window.document.currentScript,i=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}n("2342");var o=n("8bbf");function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function l(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),e}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var u,d=function(){function e(){o(this,e),l(this,"periods",{}),l(this,"periodOrder",[])}return s(e,[{key:"addCustomPeriod",value:function(e,t){if(this.periods[e])throw new Error('The "'.concat(e,'" period already exists! It cannot be overridden.'));this.periods[e]=t,this.periodOrder.push(e)}},{key:"getAllLabels",value:function(){return Array().concat(this.periodOrder)}},{key:"get",value:function(e){var t=this.periods[e];if(!t)throw new Error("Invalid period label: ".concat(e));return t}},{key:"parse",value:function(e,t){return this.get(e).parse(t)}},{key:"isRecognizedPeriod",value:function(e){return!!this.periods[e]}}]),e}(),f=new d;function p(e){return g(e)||v(e)||h(e)||m()}function m(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function h(e,t){if(e){if("string"===typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}function v(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function g(e){if(Array.isArray(e))return b(e)}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}
+ */var u,d=function(){function e(){a(this,e),s(this,"periods",{}),s(this,"periodOrder",[])}return l(e,[{key:"addCustomPeriod",value:function(e,t){if(this.periods[e])throw new Error('The "'.concat(e,'" period already exists! It cannot be overridden.'));this.periods[e]=t,this.periodOrder.push(e)}},{key:"getAllLabels",value:function(){return Array().concat(this.periodOrder)}},{key:"get",value:function(e){var t=this.periods[e];if(!t)throw new Error("Invalid period label: ".concat(e));return t}},{key:"parse",value:function(e,t){return this.get(e).parse(t)}},{key:"isRecognizedPeriod",value:function(e){return!!this.periods[e]}}]),e}(),f=new d;function m(e){return g(e)||v(e)||h(e)||p()}function p(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function h(e,t){if(e){if("string"===typeof e)return b(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?b(e,t):void 0}}function v(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function g(e){if(Array.isArray(e))return b(e)}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var y=window,w=y.piwik,O=y.broadcast,S=y.piwikHelper;w.helper=S,w.broadcast=O,w.updateDateInTitle=function(e,t){if($(".top_controls #periodString").length&&(u=u||document.title,0===u.indexOf(w.siteName))){var n=" - ".concat(f.parse(t,e).getPrettyString()," ");document.title="".concat(w.siteName).concat(n).concat(u.substr(w.siteName.length))}},w.hasUserCapability=function(e){return window.angular.isArray(w.userCapabilities)&&-1!==w.userCapabilities.indexOf(e)},w.on=function(e,t){function n(e){t.apply(void 0,p(e.detail))}t.wrapper=n,window.addEventListener(e,n)},w.off=function(e,t){t.wrapper&&window.removeEventListener(e,t.wrapper)},w.postEventNoEmit=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=new CustomEvent(e,{detail:n});window.dispatchEvent(i)},w.postEvent=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];w.postEventNoEmit.apply(w,[e].concat(n)),window.angular.element((function(){var t=w.helper.getAngularDependency("$rootScope");t.$oldEmit.apply(t,[e].concat(n))}))};var k=w,j=k;
+ */var y=window,w=y.piwik,O=y.broadcast,j=y.piwikHelper;w.helper=j,w.broadcast=O,w.updateDateInTitle=function(e,t){if($(".top_controls #periodString").length&&(u=u||document.title,0===u.indexOf(w.siteName))){var n=" - ".concat(f.parse(t,e).getPrettyString()," ");document.title="".concat(w.siteName).concat(n).concat(u.substr(w.siteName.length))}},w.hasUserCapability=function(e){return window.angular.isArray(w.userCapabilities)&&-1!==w.userCapabilities.indexOf(e)},w.on=function(e,t){function n(e){t.apply(void 0,m(e.detail))}t.wrapper=n,window.addEventListener(e,n)},w.off=function(e,t){t.wrapper&&window.removeEventListener(e,t.wrapper)},w.postEventNoEmit=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=new CustomEvent(e,{detail:n});window.dispatchEvent(i)},w.postEvent=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];w.postEventNoEmit.apply(w,[e].concat(n)),window.angular.element((function(){var t=w.helper.getAngularDependency("$rootScope");t.$oldEmit.apply(t,[e].concat(n))}))};var k=w,S=k;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function D(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=n;return 1===n.length&&n[0]&&n[0]instanceof Array&&(i=n[0]),window._pk_translate(e,i)}
+function C(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=n;return 1===n.length&&n[0]&&Array.isArray(n[0])&&(i=n[0]),window._pk_translate(e,i)}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function C(e){return $.datepicker.formatDate("yy-mm-dd",e)}function E(){var e=new Date(Date.now());return e.setTime(e.getTime()+60*e.getTimezoneOffset()*1e3),e.setHours(e.getHours()+(window.piwik.timezoneOffset||0)/3600),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),e}function P(e){if(e instanceof Date)return e;var t=decodeURIComponent(e).trim();if(""===t)throw new Error("Invalid date, empty string.");if("today"===t||"now"===t)return E();if("yesterday"===t||"yesterdaySameTime"===t){var n=E();return n.setDate(n.getDate()-1),n}if(t.match(/last[ -]?week/i)){var r=E();return r.setDate(r.getDate()-7),r}if(t.match(/last[ -]?month/i)){var i=E();return i.setDate(1),i.setMonth(i.getMonth()-1),i}if(t.match(/last[ -]?year/i)){var a=E();return a.setFullYear(a.getFullYear()-1),a}return $.datepicker.parseDate("yy-mm-dd",t)}function T(e){return 2===e.length&&(E()>=e[0]&&E()<=e[1])}function I(e,t){return A(e)||M(e,t)||N(e,t)||x()}function x(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function N(e,t){if(e){if("string"===typeof e)return B(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?B(e,t):void 0}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function M(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a=[],o=!0,c=!1;try{for(n=n.call(e);!(o=(r=n.next()).done);o=!0)if(a.push(r.value),t&&a.length===t)break}catch(s){c=!0,i=s}finally{try{o||null==n["return"]||n["return"]()}finally{if(c)throw i}}return a}}function A(e){if(Array.isArray(e))return e}function V(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function H(e,t,n){return t&&L(e.prototype,t),n&&L(e,n),e}function F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */function D(e){return $.datepicker.formatDate("yy-mm-dd",e)}function E(){var e=new Date(Date.now());return e.setTime(e.getTime()+60*e.getTimezoneOffset()*1e3),e.setHours(e.getHours()+(window.piwik.timezoneOffset||0)/3600),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),e}function P(e){if(e instanceof Date)return e;var t=decodeURIComponent(e).trim();if(""===t)throw new Error("Invalid date, empty string.");if("today"===t||"now"===t)return E();if("yesterday"===t||"yesterdaySameTime"===t){var n=E();return n.setDate(n.getDate()-1),n}if(t.match(/last[ -]?week/i)){var r=E();return r.setDate(r.getDate()-7),r}if(t.match(/last[ -]?month/i)){var i=E();return i.setDate(1),i.setMonth(i.getMonth()-1),i}if(t.match(/last[ -]?year/i)){var o=E();return o.setFullYear(o.getFullYear()-1),o}return $.datepicker.parseDate("yy-mm-dd",t)}function T(e){return 2===e.length&&(E()>=e[0]&&E()<=e[1])}function I(e,t){return A(e)||B(e,t)||x(e,t)||V()}function V(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function x(e,t){if(e){if("string"===typeof e)return N(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?N(e,t):void 0}}function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function B(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o=[],a=!0,c=!1;try{for(n=n.call(e);!(a=(r=n.next()).done);a=!0)if(o.push(r.value),t&&o.length===t)break}catch(l){c=!0,i=l}finally{try{a||null==n["return"]||n["return"]()}finally{if(c)throw i}}return o}}function A(e){if(Array.isArray(e))return e}function M(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function H(e,t,n){return t&&L(e.prototype,t),n&&L(e,n),e}function F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var _=function(){function e(t,n,r){V(this,e),F(this,"startDate",void 0),F(this,"endDate",void 0),F(this,"childPeriodType",void 0),this.startDate=t,this.endDate=n,this.childPeriodType=r}return H(e,[{key:"getPrettyString",value:function(){var e=C(this.startDate),t=C(this.endDate);return D("General_DateRangeFromTo",[e,t])}},{key:"getDateRange",value:function(){return[this.startDate,this.endDate]}},{key:"containsToday",value:function(){return T(this.getDateRange())}},{key:"getDayCount",value:function(){return Math.ceil((this.endDate.getTime()-this.startDate.getTime())/864e5)+1}}],[{key:"getLastNRange",value:function(t,n,r){var i=Math.max(parseInt(n.toString(),10)-1,0);if(Number.isNaN(i))throw new Error("Invalid range strAmount");var a=r?P(r):E(),o=new Date(a.getTime());if("day"===t)o.setDate(o.getDate()-i);else if("week"===t)o.setDate(o.getDate()-7*i);else if("month"===t)o.setDate(1),o.setMonth(o.getMonth()-i);else{if("year"!==t)throw new Error("Unknown period type '".concat(t,"'."));o.setFullYear(o.getFullYear()-i)}if("day"!==t){var c=f.periods[t].parse(o),s=f.periods[t].parse(a),l=c.getDateRange(),u=I(l,1);o=u[0];var d=s.getDateRange(),p=I(d,2);a=p[1]}var m=new Date(1991,7,6);if(o.getTime()-m.getTime()<0)switch(t){case"year":o=new Date(1992,0,1);break;case"month":o=new Date(1991,8,1);break;case"week":o=new Date(1991,8,12);break;case"day":default:o=m;break}return new e(o,a,t)}},{key:"getLastNRangeChild",value:function(t,n,r){var i=n?P(n):E(),a=new Date(i.getTime()),o=new Date(i.getTime());if("day"===t)a.setDate(a.getDate()-r),o.setDate(o.getDate()-r);else if("week"===t)a.setDate(a.getDate()-7*r),o.setDate(o.getDate()-7*r);else if("month"===t)a.setDate(1),a.setMonth(a.getMonth()-r),o.setDate(1),o.setMonth(o.getMonth()-r);else{if("year"!==t)throw new Error("Unknown period type '".concat(t,"'."));a.setFullYear(a.getFullYear()-r),o.setFullYear(o.getFullYear()-r)}if("day"!==t){var c=f.periods[t].parse(a),s=f.periods[t].parse(o),l=c.getDateRange(),u=I(l,1);a=u[0];var d=s.getDateRange(),p=I(d,2);o=p[1]}var m=new Date(1991,7,6);if(a.getTime()-m.getTime()<0)switch(t){case"year":a=new Date(1992,0,1);break;case"month":a=new Date(1991,8,1);break;case"week":a=new Date(1991,8,12);break;case"day":default:a=m;break}return new e(a,o,t)}},{key:"parse",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"day";if(/^previous/.test(t)){var r=e.getLastNRange(n,"2").startDate;return e.getLastNRange(n,t.substring(8),r)}if(/^last/.test(t))return e.getLastNRange(n,t.substring(4));var i=decodeURIComponent(t).split(",");return new e(P(i[0]),P(i[1]),n)}},{key:"getDisplayText",value:function(){return D("General_DateRangeInPeriodList")}}]),e}();function R(){return{getAllLabels:f.getAllLabels.bind(f),isRecognizedPeriod:f.isRecognizedPeriod.bind(f),get:f.get.bind(f),parse:f.parse.bind(f),parseDate:P,format:C,RangePeriod:_,todayIsInRange:T}}function U(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function J(e,t,n){return t&&q(e.prototype,t),n&&q(e,n),e}function G(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */var _=function(){function e(t,n,r){M(this,e),F(this,"startDate",void 0),F(this,"endDate",void 0),F(this,"childPeriodType",void 0),this.startDate=t,this.endDate=n,this.childPeriodType=r}return H(e,[{key:"getPrettyString",value:function(){var e=D(this.startDate),t=D(this.endDate);return C("General_DateRangeFromTo",[e,t])}},{key:"getDateRange",value:function(){return[this.startDate,this.endDate]}},{key:"containsToday",value:function(){return T(this.getDateRange())}},{key:"getDayCount",value:function(){return Math.ceil((this.endDate.getTime()-this.startDate.getTime())/864e5)+1}}],[{key:"getLastNRange",value:function(t,n,r){var i=Math.max(parseInt(n.toString(),10)-1,0);if(Number.isNaN(i))throw new Error("Invalid range strAmount");var o=r?P(r):E(),a=new Date(o.getTime());if("day"===t)a.setDate(a.getDate()-i);else if("week"===t)a.setDate(a.getDate()-7*i);else if("month"===t)a.setDate(1),a.setMonth(a.getMonth()-i);else{if("year"!==t)throw new Error("Unknown period type '".concat(t,"'."));a.setFullYear(a.getFullYear()-i)}if("day"!==t){var c=f.periods[t].parse(a),l=f.periods[t].parse(o),s=c.getDateRange(),u=I(s,1);a=u[0];var d=l.getDateRange(),m=I(d,2);o=m[1]}var p=new Date(1991,7,6);if(a.getTime()-p.getTime()<0)switch(t){case"year":a=new Date(1992,0,1);break;case"month":a=new Date(1991,8,1);break;case"week":a=new Date(1991,8,12);break;case"day":default:a=p;break}return new e(a,o,t)}},{key:"getLastNRangeChild",value:function(t,n,r){var i=n?P(n):E(),o=new Date(i.getTime()),a=new Date(i.getTime());if("day"===t)o.setDate(o.getDate()-r),a.setDate(a.getDate()-r);else if("week"===t)o.setDate(o.getDate()-7*r),a.setDate(a.getDate()-7*r);else if("month"===t)o.setDate(1),o.setMonth(o.getMonth()-r),a.setDate(1),a.setMonth(a.getMonth()-r);else{if("year"!==t)throw new Error("Unknown period type '".concat(t,"'."));o.setFullYear(o.getFullYear()-r),a.setFullYear(a.getFullYear()-r)}if("day"!==t){var c=f.periods[t].parse(o),l=f.periods[t].parse(a),s=c.getDateRange(),u=I(s,1);o=u[0];var d=l.getDateRange(),m=I(d,2);a=m[1]}var p=new Date(1991,7,6);if(o.getTime()-p.getTime()<0)switch(t){case"year":o=new Date(1992,0,1);break;case"month":o=new Date(1991,8,1);break;case"week":o=new Date(1991,8,12);break;case"day":default:o=p;break}return new e(o,a,t)}},{key:"parse",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"day";if(/^previous/.test(t)){var r=e.getLastNRange(n,"2").startDate;return e.getLastNRange(n,t.substring(8),r)}if(/^last/.test(t))return e.getLastNRange(n,t.substring(4));var i=decodeURIComponent(t).split(",");return new e(P(i[0]),P(i[1]),n)}},{key:"getDisplayText",value:function(){return C("General_DateRangeInPeriodList")}}]),e}();function U(){return{getAllLabels:f.getAllLabels.bind(f),isRecognizedPeriod:f.isRecognizedPeriod.bind(f),get:f.get.bind(f),parse:f.parse.bind(f),parseDate:P,format:D,RangePeriod:_,todayIsInRange:T}}function R(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function J(e,t,n){return t&&q(e.prototype,t),n&&q(e,n),e}function z(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
@@ -48,91 +48,91 @@ function D(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-window.piwik.addCustomPeriod=f.addCustomPeriod.bind(f),window.angular.module("piwikApp.service").factory("piwikPeriods",R);var z=function(){function e(t){U(this,e),G(this,"dateInPeriod",void 0),this.dateInPeriod=t}return J(e,[{key:"getPrettyString",value:function(){return C(this.dateInPeriod)}},{key:"getDateRange",value:function(){return[new Date(this.dateInPeriod.getTime()),new Date(this.dateInPeriod.getTime())]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return D("Intl_PeriodDay")}}]),e}();function Q(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function W(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Y(e,t,n){return t&&W(e.prototype,t),n&&W(e,n),e}function K(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+window.piwik.addCustomPeriod=f.addCustomPeriod.bind(f),window.angular.module("piwikApp.service").factory("piwikPeriods",U);var G=function(){function e(t){R(this,e),z(this,"dateInPeriod",void 0),this.dateInPeriod=t}return J(e,[{key:"getPrettyString",value:function(){return D(this.dateInPeriod)}},{key:"getDateRange",value:function(){return[new Date(this.dateInPeriod.getTime()),new Date(this.dateInPeriod.getTime())]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return C("Intl_PeriodDay")}}]),e}();function Q(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function W(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Y(e,t,n){return t&&W(e.prototype,t),n&&W(e,n),e}function K(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */f.addCustomPeriod("day",z);var X=function(){function e(t){Q(this,e),K(this,"dateInPeriod",void 0),this.dateInPeriod=t}return Y(e,[{key:"getPrettyString",value:function(){var e=this.getDateRange(),t=C(e[0]),n=C(e[1]);return D("General_DateRangeFromTo",[t,n])}},{key:"getDateRange",value:function(){var e=(this.dateInPeriod.getDay()+6)%7,t=new Date(this.dateInPeriod.getTime());t.setDate(this.dateInPeriod.getDate()-e);var n=new Date(t.getTime());return n.setDate(t.getDate()+6),[t,n]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return D("Intl_PeriodWeek")}}]),e}();function Z(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ee(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function te(e,t,n){return t&&ee(e.prototype,t),n&&ee(e,n),e}function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */f.addCustomPeriod("day",G);var X=function(){function e(t){Q(this,e),K(this,"dateInPeriod",void 0),this.dateInPeriod=t}return Y(e,[{key:"getPrettyString",value:function(){var e=this.getDateRange(),t=D(e[0]),n=D(e[1]);return C("General_DateRangeFromTo",[t,n])}},{key:"getDateRange",value:function(){var e=(this.dateInPeriod.getDay()+6)%7,t=new Date(this.dateInPeriod.getTime());t.setDate(this.dateInPeriod.getDate()-e);var n=new Date(t.getTime());return n.setDate(t.getDate()+6),[t,n]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return C("Intl_PeriodWeek")}}]),e}();function Z(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ee(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function te(e,t,n){return t&&ee(e.prototype,t),n&&ee(e,n),e}function ne(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */f.addCustomPeriod("week",X);var re=function(){function e(t){Z(this,e),ne(this,"dateInPeriod",void 0),this.dateInPeriod=t}return te(e,[{key:"getPrettyString",value:function(){var e=D("Intl_Month_Long_StandAlone_".concat(this.dateInPeriod.getMonth()+1));return"".concat(e," ").concat(this.dateInPeriod.getFullYear())}},{key:"getDateRange",value:function(){var e=new Date(this.dateInPeriod.getTime());e.setDate(1);var t=new Date(this.dateInPeriod.getTime());return t.setDate(1),t.setMonth(t.getMonth()+1),t.setDate(0),[e,t]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return D("Intl_PeriodMonth")}}]),e}();function ie(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function oe(e,t,n){return t&&ae(e.prototype,t),n&&ae(e,n),e}function ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */f.addCustomPeriod("week",X);var re=function(){function e(t){Z(this,e),ne(this,"dateInPeriod",void 0),this.dateInPeriod=t}return te(e,[{key:"getPrettyString",value:function(){var e=C("Intl_Month_Long_StandAlone_".concat(this.dateInPeriod.getMonth()+1));return"".concat(e," ").concat(this.dateInPeriod.getFullYear())}},{key:"getDateRange",value:function(){var e=new Date(this.dateInPeriod.getTime());e.setDate(1);var t=new Date(this.dateInPeriod.getTime());return t.setDate(1),t.setMonth(t.getMonth()+1),t.setDate(0),[e,t]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return C("Intl_PeriodMonth")}}]),e}();function ie(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function oe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function ae(e,t,n){return t&&oe(e.prototype,t),n&&oe(e,n),e}function ce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */f.addCustomPeriod("month",re);var se=function(){function e(t){ie(this,e),ce(this,"dateInPeriod",void 0),this.dateInPeriod=t}return oe(e,[{key:"getPrettyString",value:function(){return this.dateInPeriod.getFullYear().toString()}},{key:"getDateRange",value:function(){var e=new Date(this.dateInPeriod.getTime());e.setMonth(0),e.setDate(1);var t=new Date(this.dateInPeriod.getTime());return t.setMonth(12),t.setDate(0),[e,t]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return D("Intl_PeriodYear")}}]),e}();
+ */f.addCustomPeriod("month",re);var le=function(){function e(t){ie(this,e),ce(this,"dateInPeriod",void 0),this.dateInPeriod=t}return ae(e,[{key:"getPrettyString",value:function(){return this.dateInPeriod.getFullYear().toString()}},{key:"getDateRange",value:function(){var e=new Date(this.dateInPeriod.getTime());e.setMonth(0),e.setDate(1);var t=new Date(this.dateInPeriod.getTime());return t.setMonth(12),t.setDate(0),[e,t]}},{key:"containsToday",value:function(){return T(this.getDateRange())}}],[{key:"parse",value:function(t){return new e(P(t))}},{key:"getDisplayText",value:function(){return C("Intl_PeriodYear")}}]),e}();
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function le(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?le(Object(n),!0).forEach((function(t){me(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):le(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function de(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function pe(e,t,n){return t&&fe(e.prototype,t),n&&fe(e,n),e}function me(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+function se(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ue(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?se(Object(n),!0).forEach((function(t){pe(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):se(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function de(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function me(e,t,n){return t&&fe(e.prototype,t),n&&fe(e,n),e}function pe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */f.addCustomPeriod("year",se);var he=window,ve=he.piwik,ge=he.broadcast;function be(e,t){try{return f.parse(e,t),!0}catch(n){return!1}}var ye=function(){function e(){var t=this;de(this,e),me(this,"urlQuery",Object(a["ref"])("")),me(this,"hashQuery",Object(a["ref"])("")),me(this,"urlParsed",Object(a["computed"])((function(){return Object(a["readonly"])(ge.getValuesFromUrl("?".concat(t.urlQuery.value),!0))}))),me(this,"hashParsed",Object(a["computed"])((function(){return Object(a["readonly"])(ge.getValuesFromUrl("?".concat(t.hashQuery.value),!0))}))),me(this,"parsed",Object(a["computed"])((function(){return Object(a["readonly"])(ue(ue({},t.urlParsed.value),t.hashParsed.value))}))),this.setUrlQuery(window.location.search),this.setHashQuery(window.location.hash),j.on("$locationChangeSuccess",(function(e){var n=new URL(e);t.setUrlQuery(n.search.replace(/^\?/,"")),t.setHashQuery(n.hash.replace(/^#/,""))})),this.updatePeriodParamsFromUrl()}return pe(e,[{key:"updateHash",value:function(e){var t="string"!==typeof e?this.stringify(e):e,n=j.helper.getAngularDependency("$location");n.search(t)}},{key:"updateUrl",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n="string"!==typeof e?this.stringify(e):e,r="string"!==typeof t?this.stringify(t):t,i="?".concat(n);r.length&&(i="".concat(i,"#?").concat(r)),window.broadcast.propagateNewPage("",void 0,void 0,void 0,i)}},{key:"getSearchParam",value:function(e){var t=window.location.href.split("#"),n=new RegExp("".concat(e,"(\\[]|=)"));if(t&&t[1]&&n.test(decodeURIComponent(t[1]))){var r=window.broadcast.getValueFromHash(e,window.location.href);if(r||"date"!==e&&"period"!==e&&"idSite"!==e)return r}return window.broadcast.getValueFromUrl(e,window.location.search)}},{key:"stringify",value:function(e){return $.param(e).replace(/%5B%5D/g,"[]")}},{key:"updatePeriodParamsFromUrl",value:function(){var e=this.getSearchParam("date"),t=this.getSearchParam("period");if(be(t,e)&&(ve.period!==t||ve.currentDateString!==e)){ve.period=t;var n=f.parse(t,e).getDateRange();ve.startDateString=C(n[0]),ve.endDateString=C(n[1]),ve.updateDateInTitle(e,t),"range"===ve.period&&(e="".concat(ve.startDateString,",").concat(ve.endDateString)),ve.currentDateString=e}}},{key:"setUrlQuery",value:function(e){this.urlQuery.value=e.replace(/^\?/,"")}},{key:"setHashQuery",value:function(e){this.hashQuery.value=e.replace(/^[#/?]+/,"")}}]),e}(),we=new ye,Oe=we;
+ */f.addCustomPeriod("year",le);var he=window,ve=he.piwik,ge=he.broadcast;function be(e,t){try{return f.parse(e,t),!0}catch(n){return!1}}var ye=function(){function e(){var t=this;de(this,e),pe(this,"urlQuery",Object(o["ref"])("")),pe(this,"hashQuery",Object(o["ref"])("")),pe(this,"urlParsed",Object(o["computed"])((function(){return Object(o["readonly"])(ge.getValuesFromUrl("?".concat(t.urlQuery.value),!0))}))),pe(this,"hashParsed",Object(o["computed"])((function(){return Object(o["readonly"])(ge.getValuesFromUrl("?".concat(t.hashQuery.value),!0))}))),pe(this,"parsed",Object(o["computed"])((function(){return Object(o["readonly"])(ue(ue({},t.urlParsed.value),t.hashParsed.value))}))),this.setUrlQuery(window.location.search),this.setHashQuery(window.location.hash),S.on("$locationChangeSuccess",(function(e){var n=new URL(e);t.setUrlQuery(n.search.replace(/^\?/,"")),t.setHashQuery(n.hash.replace(/^#/,""))})),this.updatePeriodParamsFromUrl()}return me(e,[{key:"updateHash",value:function(e){var t="string"!==typeof e?this.stringify(e):e,n=S.helper.getAngularDependency("$location");n.search(t)}},{key:"updateUrl",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n="string"!==typeof e?this.stringify(e):e,r="string"!==typeof t?this.stringify(t):t,i="?".concat(n);r.length&&(i="".concat(i,"#?").concat(r)),window.broadcast.propagateNewPage("",void 0,void 0,void 0,i)}},{key:"getSearchParam",value:function(e){var t=window.location.href.split("#"),n=new RegExp("".concat(e,"(\\[]|=)"));if(t&&t[1]&&n.test(decodeURIComponent(t[1]))){var r=window.broadcast.getValueFromHash(e,window.location.href);if(r||"date"!==e&&"period"!==e&&"idSite"!==e)return r}return window.broadcast.getValueFromUrl(e,window.location.search)}},{key:"stringify",value:function(e){return $.param(e).replace(/%5B%5D/g,"[]")}},{key:"updatePeriodParamsFromUrl",value:function(){var e=this.getSearchParam("date"),t=this.getSearchParam("period");if(be(t,e)&&(ve.period!==t||ve.currentDateString!==e)){ve.period=t;var n=f.parse(t,e).getDateRange();ve.startDateString=D(n[0]),ve.endDateString=D(n[1]),ve.updateDateInTitle(e,t),"range"===ve.period&&(e="".concat(ve.startDateString,",").concat(ve.endDateString)),ve.currentDateString=e}}},{key:"setUrlQuery",value:function(e){this.urlQuery.value=e.replace(/^\?/,"")}},{key:"setHashQuery",value:function(e){this.hashQuery.value=e.replace(/^[#/?]+/,"")}}]),e}(),we=new ye,Oe=we;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function Se(){var e={getSearchParam:Oe.getSearchParam.bind(Oe)};return e}
+function je(){var e={getSearchParam:Oe.getSearchParam.bind(Oe)};return e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function ke(){return j}function je(e,t){t.$oldEmit=t.$emit,t.$emit=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return j.postEvent.apply(j,[e].concat(n)),null},t.$oldBroadcast=t.$broadcast,t.$broadcast=function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return j.postEventNoEmit.apply(j,[e].concat(r)),t.$oldBroadcast.apply(t,[e].concat(r))},t.$on("$locationChangeSuccess",e.updatePeriodParamsFromUrl)}function De(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ce(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?De(Object(n),!0).forEach((function(t){Ie(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ee(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Te(e,t,n){return t&&Pe(e.prototype,t),n&&Pe(e,n),e}function Ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+function ke(){return S}function Se(e,t){t.$oldEmit=t.$emit,t.$emit=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return S.postEvent.apply(S,[e].concat(n)),null},t.$oldBroadcast=t.$broadcast,t.$broadcast=function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return S.postEventNoEmit.apply(S,[e].concat(r)),t.$oldBroadcast.apply(t,[e].concat(r))},t.$on("$locationChangeSuccess",e.updatePeriodParamsFromUrl)}function Ce(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function De(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ce(Object(n),!0).forEach((function(t){Ie(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ce(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ee(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Te(e,t,n){return t&&Pe(e.prototype,t),n&&Pe(e,n),e}function Ie(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function xe(e,t){if("abort"!==t)if("undefined"!==typeof Piwik_Popover){var n=$("#loadingError");Piwik_Popover.isOpen()&&e&&500===e.status?e&&500===e.status&&$(document.body).html(piwikHelper.escape(e.responseText)):n.show()}else console.log("Request failed: ".concat(e.responseText))}ve.updatePeriodParamsFromUrl=we.updatePeriodParamsFromUrl.bind(we),Se.$inject=[],angular.module("piwikApp.service").service("piwikUrl",Se),window.angular.module("piwikApp.service").service("piwik",ke),je.$inject=["piwik","$rootScope"],window.angular.module("piwikApp.service").run(je),window.globalAjaxQueue=[],window.globalAjaxQueue.active=0,window.globalAjaxQueue.clean=function(){for(var e=this.length;e>=0;e-=1)this[e]&&4!==this[e].readyState||this.splice(e,1)},window.globalAjaxQueue.push=function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.active+=n.length,this.clean(),(e=Array.prototype.push).call.apply(e,[this].concat(n))},window.globalAjaxQueue.abort=function(){this.forEach((function(e){return e&&e.abort&&e.abort()})),this.splice(0,this.length),this.active=0};var Ne=function(){function e(){Ee(this,e),Ie(this,"format","json"),Ie(this,"timeout",null),Ie(this,"callback",null),Ie(this,"useRegularCallbackInCaseOfError",!1),Ie(this,"errorCallback",void 0),Ie(this,"withToken",!1),Ie(this,"completeCallback",void 0),Ie(this,"getParams",{}),Ie(this,"getUrl","?"),Ie(this,"postParams",{}),Ie(this,"loadingElement",null),Ie(this,"errorElement","#ajaxError"),Ie(this,"requestHandle",null),Ie(this,"defaultParams",["idSite","period","date","segment"]),this.errorCallback=xe}return Te(e,[{key:"addParams",value:function(e,t){var n=this,r="string"===typeof e?window.broadcast.getValuesFromUrl(e):e,i=["compareSegments","comparePeriods","compareDates"];Object.keys(r).forEach((function(e){var a=r[e];(-1===i.indexOf(e)||a)&&("get"===t.toLowerCase()?n.getParams[e]=a:"post"===t.toLowerCase()&&(n.postParams[e]=a))}))}},{key:"withTokenInUrl",value:function(){this.withToken=!0}},{key:"setUrl",value:function(e){this.addParams(broadcast.getValuesFromUrl(e),"GET")}},{key:"setBulkRequests",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.map((function(e){return"string"===typeof e?e:$.param(e)}));this.addParams({module:"API",method:"API.getBulkRequest",urls:r,format:"json"},"post")}},{key:"setTimeout",value:function(e){this.timeout=e}},{key:"setCallback",value:function(e){this.callback=e}},{key:"useCallbackInCaseOfError",value:function(){this.useRegularCallbackInCaseOfError=!0}},{key:"redirectOnSuccess",value:function(e){this.setCallback((function(){piwikHelper.redirect(e)}))}},{key:"setErrorCallback",value:function(e){this.errorCallback=e}},{key:"setCompleteCallback",value:function(e){this.completeCallback=e}},{key:"setFormat",value:function(e){this.format=e}},{key:"setLoadingElement",value:function(e){this.loadingElement=e||"#ajaxLoadingDiv"}},{key:"setErrorElement",value:function(e){e&&(this.errorElement=e)}},{key:"useGETDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)if(this.defaultParams[t]===e)return!0;return!1}},{key:"removeDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)this.defaultParams[t]===e&&this.defaultParams.splice(t,1)}},{key:"send",value:function(){var e=this;$(this.errorElement).length&&$(this.errorElement).hide(),this.loadingElement&&$(this.loadingElement).fadeIn(),this.requestHandle=this.buildAjaxCall(),window.globalAjaxQueue.push(this.requestHandle);var t=new Promise((function(t,n){e.requestHandle.then(t).fail((function(t){"abort"!==t.statusText&&(console.log("Warning: the ".concat($.param(e.getParams)," request failed!")),n(t))}))}));return t.abort=function(){e.requestHandle&&e.requestHandle.abort()},t}},{key:"abort",value:function(){this.requestHandle&&"function"===typeof this.requestHandle.abort&&(this.requestHandle.abort(),this.requestHandle=null)}},{key:"buildAjaxCall",value:function(){var e=this,t=this,n=this.mixinDefaultGetParams(this.getParams),r=this.getUrl;"?"!==r[r.length-1]&&(r+="&"),n.segment&&(r="".concat(r,"segment=").concat(n.segment,"&"),delete n.segment),n.date&&(r="".concat(r,"date=").concat(decodeURIComponent(n.date.toString()),"&"),delete n.date),r+=$.param(n);var i={type:"POST",async:!0,url:r,dataType:this.format||"json",complete:this.completeCallback,error:function(){if(window.globalAjaxQueue.active-=1,t.errorCallback){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.errorCallback.apply(this,n)}},success:function(t,n,r){if(e.loadingElement&&$(e.loadingElement).hide(),t&&"error"===t.result&&!e.useRegularCallbackInCaseOfError){var i=null,a="toast";if($(e.errorElement).length&&t.message&&($(e.errorElement).show(),i=e.errorElement,a=null),t.message){var o=window["require"]("piwik/UI"),c=new o.Notification;c.show(t.message,{placeat:i,context:"error",type:a,id:"ajaxHelper"}),c.scrollToNotification()}}else e.callback&&e.callback(t,n,r);window.globalAjaxQueue.active-=1,j.ajaxRequestFinished&&j.ajaxRequestFinished()},data:this.mixinDefaultPostParams(this.postParams),timeout:null!==this.timeout?this.timeout:void 0};return $.ajax(i)}},{key:"isRequestToApiMethod",value:function(){return this.getParams&&"API"===this.getParams.module&&this.getParams.method||this.postParams&&"API"===this.postParams.module&&this.postParams.method}},{key:"isWidgetizedRequest",value:function(){return"Widgetize"===broadcast.getValueFromUrl("module")}},{key:"getDefaultPostParams",value:function(){return this.withToken||this.isRequestToApiMethod()||j.shouldPropagateTokenAuth?{token_auth:j.token_auth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1}:{}}},{key:"mixinDefaultPostParams",value:function(e){var t=this.getDefaultPostParams(),n=Ce(Ce({},t),e);return n}},{key:"mixinDefaultGetParams",value:function(e){var t=this,n=Oe.getSearchParam("segment"),r={idSite:j.idSite?j.idSite.toString():broadcast.getValueFromUrl("idSite"),period:j.period||broadcast.getValueFromUrl("period"),segment:n},i=e;return i.token_auth&&(i.token_auth=null,delete i.token_auth),Object.keys(r).forEach((function(e){t.useGETDefaultParameter(e)&&!i[e]&&!t.postParams[e]&&r[e]&&(i[e]=r[e])})),!this.useGETDefaultParameter("date")||i.date||this.postParams.date||(i.date=j.currentDateString),i}}],[{key:"fetch",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e;return n.withTokenInUrl&&r.withTokenInUrl(),r.setFormat("json"),r.addParams(Ce({module:"API",format:"json"},t),"get"),n.postParams&&r.addParams(n.postParams,"post"),r.send()}}]),e}();function Be(){return globalAjaxQueue}window.ajaxHelper=Ne,angular.module("piwikApp.service").service("globalAjaxQueue",Be);
+ */function Ve(e,t){if("abort"!==t)if("undefined"!==typeof Piwik_Popover){var n=$("#loadingError");Piwik_Popover.isOpen()&&e&&500===e.status?e&&500===e.status&&$(document.body).html(piwikHelper.escape(e.responseText)):n.show()}else console.log("Request failed: ".concat(e.responseText))}ve.updatePeriodParamsFromUrl=we.updatePeriodParamsFromUrl.bind(we),je.$inject=[],angular.module("piwikApp.service").service("piwikUrl",je),window.angular.module("piwikApp.service").service("piwik",ke),Se.$inject=["piwik","$rootScope"],window.angular.module("piwikApp.service").run(Se),window.globalAjaxQueue=[],window.globalAjaxQueue.active=0,window.globalAjaxQueue.clean=function(){for(var e=this.length;e>=0;e-=1)this[e]&&4!==this[e].readyState||this.splice(e,1)},window.globalAjaxQueue.push=function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this.active+=n.length,this.clean(),(e=Array.prototype.push).call.apply(e,[this].concat(n))},window.globalAjaxQueue.abort=function(){this.forEach((function(e){return e&&e.abort&&e.abort()})),this.splice(0,this.length),this.active=0};var xe=function(){function e(){Ee(this,e),Ie(this,"format","json"),Ie(this,"timeout",null),Ie(this,"callback",null),Ie(this,"useRegularCallbackInCaseOfError",!1),Ie(this,"errorCallback",void 0),Ie(this,"withToken",!1),Ie(this,"completeCallback",void 0),Ie(this,"getParams",{}),Ie(this,"getUrl","?"),Ie(this,"postParams",{}),Ie(this,"loadingElement",null),Ie(this,"errorElement","#ajaxError"),Ie(this,"requestHandle",null),Ie(this,"defaultParams",["idSite","period","date","segment"]),this.errorCallback=Ve}return Te(e,[{key:"addParams",value:function(e,t){var n=this,r="string"===typeof e?window.broadcast.getValuesFromUrl(e):e,i=["compareSegments","comparePeriods","compareDates"];Object.keys(r).forEach((function(e){var o=r[e];(-1===i.indexOf(e)||o)&&("get"===t.toLowerCase()?n.getParams[e]=o:"post"===t.toLowerCase()&&(n.postParams[e]=o))}))}},{key:"withTokenInUrl",value:function(){this.withToken=!0}},{key:"setUrl",value:function(e){this.addParams(broadcast.getValuesFromUrl(e),"GET")}},{key:"setBulkRequests",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t.map((function(e){return"string"===typeof e?e:$.param(e)}));this.addParams({module:"API",method:"API.getBulkRequest",urls:r,format:"json"},"post")}},{key:"setTimeout",value:function(e){this.timeout=e}},{key:"setCallback",value:function(e){this.callback=e}},{key:"useCallbackInCaseOfError",value:function(){this.useRegularCallbackInCaseOfError=!0}},{key:"redirectOnSuccess",value:function(e){this.setCallback((function(){piwikHelper.redirect(e)}))}},{key:"setErrorCallback",value:function(e){this.errorCallback=e}},{key:"setCompleteCallback",value:function(e){this.completeCallback=e}},{key:"setFormat",value:function(e){this.format=e}},{key:"setLoadingElement",value:function(e){this.loadingElement=e||"#ajaxLoadingDiv"}},{key:"setErrorElement",value:function(e){e&&(this.errorElement=e)}},{key:"useGETDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)if(this.defaultParams[t]===e)return!0;return!1}},{key:"removeDefaultParameter",value:function(e){if(e&&this.defaultParams)for(var t=0;t<this.defaultParams.length;t+=1)this.defaultParams[t]===e&&this.defaultParams.splice(t,1)}},{key:"send",value:function(){var e=this;$(this.errorElement).length&&$(this.errorElement).hide(),this.loadingElement&&$(this.loadingElement).fadeIn(),this.requestHandle=this.buildAjaxCall(),window.globalAjaxQueue.push(this.requestHandle);var t=new Promise((function(t,n){e.requestHandle.then(t).fail((function(t){"abort"!==t.statusText&&(console.log("Warning: the ".concat($.param(e.getParams)," request failed!")),n(t))}))}));return t.abort=function(){e.requestHandle&&e.requestHandle.abort()},t}},{key:"abort",value:function(){this.requestHandle&&"function"===typeof this.requestHandle.abort&&(this.requestHandle.abort(),this.requestHandle=null)}},{key:"buildAjaxCall",value:function(){var e=this,t=this,n=this.mixinDefaultGetParams(this.getParams),r=this.getUrl;"?"!==r[r.length-1]&&(r+="&"),n.segment&&(r="".concat(r,"segment=").concat(n.segment,"&"),delete n.segment),n.date&&(r="".concat(r,"date=").concat(decodeURIComponent(n.date.toString()),"&"),delete n.date),r+=$.param(n);var i={type:"POST",async:!0,url:r,dataType:this.format||"json",complete:this.completeCallback,error:function(){if(window.globalAjaxQueue.active-=1,t.errorCallback){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.errorCallback.apply(this,n)}},success:function(t,n,r){if(e.loadingElement&&$(e.loadingElement).hide(),t&&"error"===t.result&&!e.useRegularCallbackInCaseOfError){var i=null,o="toast";if($(e.errorElement).length&&t.message&&($(e.errorElement).show(),i=e.errorElement,o=null),t.message){var a=window["require"]("piwik/UI"),c=new a.Notification;c.show(t.message,{placeat:i,context:"error",type:o,id:"ajaxHelper"}),c.scrollToNotification()}}else e.callback&&e.callback(t,n,r);window.globalAjaxQueue.active-=1,S.ajaxRequestFinished&&S.ajaxRequestFinished()},data:this.mixinDefaultPostParams(this.postParams),timeout:null!==this.timeout?this.timeout:void 0};return $.ajax(i)}},{key:"isRequestToApiMethod",value:function(){return this.getParams&&"API"===this.getParams.module&&this.getParams.method||this.postParams&&"API"===this.postParams.module&&this.postParams.method}},{key:"isWidgetizedRequest",value:function(){return"Widgetize"===broadcast.getValueFromUrl("module")}},{key:"getDefaultPostParams",value:function(){return this.withToken||this.isRequestToApiMethod()||S.shouldPropagateTokenAuth?{token_auth:S.token_auth,force_api_session:broadcast.isWidgetizeRequestWithoutSession()?0:1}:{}}},{key:"mixinDefaultPostParams",value:function(e){var t=this.getDefaultPostParams(),n=De(De({},t),e);return n}},{key:"mixinDefaultGetParams",value:function(e){var t=this,n=Oe.getSearchParam("segment"),r={idSite:S.idSite?S.idSite.toString():broadcast.getValueFromUrl("idSite"),period:S.period||broadcast.getValueFromUrl("period"),segment:n},i=e;return i.token_auth&&(i.token_auth=null,delete i.token_auth),Object.keys(r).forEach((function(e){t.useGETDefaultParameter(e)&&!i[e]&&!t.postParams[e]&&r[e]&&(i[e]=r[e])})),!this.useGETDefaultParameter("date")||i.date||this.postParams.date||(i.date=S.currentDateString),i}}],[{key:"fetch",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e;return n.withTokenInUrl&&r.withTokenInUrl(),r.setFormat("json"),r.addParams(De({module:"API",format:"json"},t),"get"),n.postParams&&r.addParams(n.postParams,"post"),r.send()}}]),e}();function Ne(){return globalAjaxQueue}window.ajaxHelper=xe,angular.module("piwikApp.service").service("globalAjaxQueue",Ne);
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var Me={mounted:function(e,t){var n={};$(e).addClass("matomo-dropdown-menu");var r=!!$(e).parent().closest(".dropdown-content").length;r&&(n={hover:!0},$(e).addClass("submenu"),$(t.value.activates).addClass("submenu-dropdown-content"),$(e).parents(".dropdown-content").addClass("submenu-container")),$(e).dropdown(n)}};
+ */var Be={mounted:function(e,t){var n={};$(e).addClass("matomo-dropdown-menu");var r=!!$(e).parent().closest(".dropdown-content").length;r&&(n={hover:!0},$(e).addClass("submenu"),$(t.value.activates).addClass("submenu-dropdown-content"),$(e).parents(".dropdown-content").addClass("submenu-container")),$(e).dropdown(n)}};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function Ae(e){return{restrict:"A",link:function(t,n,r){var i={instance:null,value:{activates:$("#".concat(r.activates))[0]},oldValue:null,modifiers:{},dir:{}};e((function(){Me.mounted(n[0],i)}))}}}
+ */function Ae(e){return{restrict:"A",link:function(t,n,r){var i={instance:null,value:{activates:$("#".concat(r.activates))[0]},oldValue:null,modifiers:{},dir:{}};e((function(){Be.mounted(n[0],i)}))}}}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function $e(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||t.value&&t.value.blur()}function Ve(e,t){t.value.hasScrolled=!0}function Le(e,t){t.value.isMouseDown=!0,t.value.hasScrolled=!1}function He(e,t,n){27===n.which&&setTimeout((function(){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.blur&&t.value.blur()}),0)}Ae.$inject=["$timeout"],angular.module("piwikApp").directive("piwikDropdownMenu",Ae);var Fe=document.documentElement,_e={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onEscapeHandler=He.bind(null,e,t),t.value.onMouseDown=Le.bind(null,e,t),t.value.onClickOutsideElement=$e.bind(null,e,t),t.value.onScroll=Ve.bind(null,e,t),Fe.addEventListener("keyup",t.value.onEscapeHandler),Fe.addEventListener("mousedown",t.value.onMouseDown),Fe.addEventListener("mouseup",t.value.onClickOutsideElement),Fe.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){Fe.removeEventListener("keyup",t.value.onEscapeHandler),Fe.removeEventListener("mousedown",t.value.onMouseDown),Fe.removeEventListener("mouseup",t.value.onClickOutsideElement),Fe.removeEventListener("scroll",t.value.onScroll)}};
+function Me(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||t.value&&t.value.blur()}function $e(e,t){t.value.hasScrolled=!0}function Le(e,t){t.value.isMouseDown=!0,t.value.hasScrolled=!1}function He(e,t,n){27===n.which&&setTimeout((function(){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.blur&&t.value.blur()}),0)}Ae.$inject=["$timeout"],angular.module("piwikApp").directive("piwikDropdownMenu",Ae);var Fe=document.documentElement,_e={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onEscapeHandler=He.bind(null,e,t),t.value.onMouseDown=Le.bind(null,e,t),t.value.onClickOutsideElement=Me.bind(null,e,t),t.value.onScroll=$e.bind(null,e,t),Fe.addEventListener("keyup",t.value.onEscapeHandler),Fe.addEventListener("mousedown",t.value.onMouseDown),Fe.addEventListener("mouseup",t.value.onClickOutsideElement),Fe.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){Fe.removeEventListener("keyup",t.value.onEscapeHandler),Fe.removeEventListener("mousedown",t.value.onMouseDown),Fe.removeEventListener("mouseup",t.value.onClickOutsideElement),Fe.removeEventListener("scroll",t.value.onScroll)}};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function Re(){return{restrict:"A",link:function(e,t,n){var r={instance:null,value:{blur:function(){setTimeout((function(){e.$apply(n.piwikFocusAnywhereButHere)}),0)}},oldValue:null,modifiers:{},dir:{}};_e.mounted(t[0],r),t.on("$destroy",(function(){return _e.unmounted(t[0],r)}))}}}
+function Ue(){return{restrict:"A",link:function(e,t,n){var r={instance:null,value:{blur:function(){setTimeout((function(){e.$apply(n.piwikFocusAnywhereButHere)}),0)}},oldValue:null,modifiers:{},dir:{}};_e.mounted(t[0],r),t.on("$destroy",(function(){return _e.unmounted(t[0],r)}))}}}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function Ue(e,t){t.arg&&setTimeout((function(){e.focus(),t.value.afterFocus&&t.value.afterFocus()}),5)}Re.$inject=[],angular.module("piwikApp.directive").directive("piwikFocusAnywhereButHere",Re);var qe={mounted:function(e,t){Ue(e,t)},updated:function(e,t){Ue(e,t)}};
+function Re(e,t){t.arg&&setTimeout((function(){e.focus(),t.value.afterFocus&&t.value.afterFocus()}),5)}Ue.$inject=[],angular.module("piwikApp.directive").directive("piwikFocusAnywhereButHere",Ue);var qe={mounted:function(e,t){Re(e,t)},updated:function(e,t){Re(e,t)}};
/*!
* Matomo - free/libre analytics platform
*
@@ -145,7 +145,7 @@ function Ue(e,t){t.arg&&setTimeout((function(){e.focus(),t.value.afterFocus&&t.v
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function Ge(e){e.classList.toggle("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&j.helper.setMarginLeftToBeInViewport(t)}function ze(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||e.classList.remove("expanded")}function Qe(e){e.value.hasScrolled=!0}function We(e){e.value.isMouseDown=!0,e.value.hasScrolled=!1}function Ye(e,t,n){27===n.which&&(t.value.isMouseDown=!1,t.value.hasScrolled=!1,e.classList.remove("expanded"))}angular.module("piwikApp.directive").directive("piwikFocusIf",Je);var Ke=document.documentElement,Xe={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onExpand=Ge.bind(null,e),t.value.onEscapeHandler=Ye.bind(null,e,t),t.value.onMouseDown=We.bind(null,t),t.value.onClickOutsideElement=ze.bind(null,e,t),t.value.onScroll=Qe.bind(null,t),window.$(t.value.expander).click(t.value.onExpand),Ke.addEventListener("keyup",t.value.onEscapeHandler),Ke.addEventListener("mousedown",t.value.onMouseDown),Ke.addEventListener("mouseup",t.value.onClickOutsideElement),Ke.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){t.value.expander.removeEventListener("click",t.value.onExpand),Ke.removeEventListener("keyup",t.value.onEscapeHandler),Ke.removeEventListener("mousedown",t.value.onMouseDown),Ke.removeEventListener("mouseup",t.value.onClickOutsideElement),Ke.removeEventListener("scroll",t.value.onScroll)}};
+function ze(e){e.classList.toggle("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&S.helper.setMarginLeftToBeInViewport(t)}function Ge(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||e.classList.remove("expanded")}function Qe(e){e.value.hasScrolled=!0}function We(e){e.value.isMouseDown=!0,e.value.hasScrolled=!1}function Ye(e,t,n){27===n.which&&(t.value.isMouseDown=!1,t.value.hasScrolled=!1,e.classList.remove("expanded"))}angular.module("piwikApp.directive").directive("piwikFocusIf",Je);var Ke=document.documentElement,Xe={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onExpand=ze.bind(null,e),t.value.onEscapeHandler=Ye.bind(null,e,t),t.value.onMouseDown=We.bind(null,t),t.value.onClickOutsideElement=Ge.bind(null,e,t),t.value.onScroll=Qe.bind(null,t),window.$(t.value.expander).click(t.value.onExpand),Ke.addEventListener("keyup",t.value.onEscapeHandler),Ke.addEventListener("mousedown",t.value.onMouseDown),Ke.addEventListener("mouseup",t.value.onClickOutsideElement),Ke.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){t.value.expander.removeEventListener("click",t.value.onExpand),Ke.removeEventListener("keyup",t.value.onEscapeHandler),Ke.removeEventListener("mousedown",t.value.onMouseDown),Ke.removeEventListener("mouseup",t.value.onClickOutsideElement),Ke.removeEventListener("scroll",t.value.onScroll)}};
/*!
* Matomo - free/libre analytics platform
*
@@ -159,129 +159,147 @@ function Ze(){return{restrict:"A",link:function(e,t){var n={instance:null,value:
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function et(e){e.classList.add("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&j.helper.setMarginLeftToBeInViewport(t)}function tt(e){e.classList.remove("expanded")}function nt(e,t){e.contains(t.target)||e.classList.remove("expanded")}function rt(e,t){27===t.which&&e.classList.remove("expanded")}Ze.$inject=[],angular.module("piwikApp").directive("piwikExpandOnClick",Ze);var it=document.documentElement,at={mounted:function(e,t){t.value.onMouseEnter=et.bind(null,e),t.value.onMouseLeave=tt.bind(null,e),t.value.onClickOutsideElement=nt.bind(null,e),t.value.onEscapeHandler=rt.bind(null,e),t.value.expander.addEventListener("mouseenter",t.value.onMouseEnter),e.addEventListener("mouseleave",t.value.onMouseLeave),it.addEventListener("keyup",t.value.onEscapeHandler),it.addEventListener("mouseup",t.value.onClickOutsideElement)},unmounted:function(e,t){t.value.expander.removeEventListener("mouseenter",t.value.onMouseEnter),e.removeEventListener("mouseleave",t.value.onMouseLeave),document.removeEventListener("keyup",t.value.onEscapeHandler),document.removeEventListener("mouseup",t.value.onClickOutsideElement)}};
+function et(e){e.classList.add("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&S.helper.setMarginLeftToBeInViewport(t)}function tt(e){e.classList.remove("expanded")}function nt(e,t){e.contains(t.target)||e.classList.remove("expanded")}function rt(e,t){27===t.which&&e.classList.remove("expanded")}Ze.$inject=[],angular.module("piwikApp").directive("piwikExpandOnClick",Ze);var it=document.documentElement,ot={mounted:function(e,t){t.value.onMouseEnter=et.bind(null,e),t.value.onMouseLeave=tt.bind(null,e),t.value.onClickOutsideElement=nt.bind(null,e),t.value.onEscapeHandler=rt.bind(null,e),t.value.expander.addEventListener("mouseenter",t.value.onMouseEnter),e.addEventListener("mouseleave",t.value.onMouseLeave),it.addEventListener("keyup",t.value.onEscapeHandler),it.addEventListener("mouseup",t.value.onClickOutsideElement)},unmounted:function(e,t){t.value.expander.removeEventListener("mouseenter",t.value.onMouseEnter),e.removeEventListener("mouseleave",t.value.onMouseLeave),document.removeEventListener("keyup",t.value.onEscapeHandler),document.removeEventListener("mouseup",t.value.onClickOutsideElement)}};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function ot(){return{restrict:"A",link:function(e,t){var n={instance:null,value:{expander:t.find(".title").first()[0]},oldValue:null,modifiers:{},dir:{}};at.mounted(t[0],n),t.on("$destroy",(function(){return at.unmounted(t[0],n)}))}}}ot.$inject=[],angular.module("piwikApp").directive("piwikExpandOnHover",ot);var ct={ref:"root"};function st(e,t,n,r,i,o){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ct,[Object(a["renderSlot"])(e.$slots,"default")],512)),[[a["vShow"],e.modelValue]])}var lt=Object(a["defineComponent"])({props:{modelValue:{type:Boolean,required:!0},element:{type:HTMLElement,required:!1}},emits:["yes","no","closeEnd","close","validation","update:modelValue"],activated:function(){this.$emit("update:modelValue",!1)},watch:{modelValue:function(e,t){var n=this;if(e){var r=this.element||this.$refs.root.firstElementChild;j.helper.modalConfirm(r,{yes:function(){n.$emit("yes")},no:function(){n.$emit("no")},validation:function(){n.$emit("validation")}},{onCloseEnd:function(){n.element||n.$refs.root.appendChild(r),n.$emit("update:modelValue",!1),n.$emit("closeEnd")}})}else!1===e&&!0===t&&this.$emit("close")}}});lt.render=st;var ut=lt;function dt(e,t){return vt(e)||ht(e,t)||pt(e,t)||ft()}function ft(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function pt(e,t){if(e){if("string"===typeof e)return mt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?mt(e,t):void 0}}function mt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ht(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a=[],o=!0,c=!1;try{for(n=n.call(e);!(o=(r=n.next()).done);o=!0)if(a.push(r.value),t&&a.length===t)break}catch(s){c=!0,i=s}finally{try{o||null==n["return"]||n["return"]()}finally{if(c)throw i}}return a}}function vt(e){if(Array.isArray(e))return e}
+function at(){return{restrict:"A",link:function(e,t){var n={instance:null,value:{expander:t.find(".title").first()[0]},oldValue:null,modifiers:{},dir:{}};ot.mounted(t[0],n),t.on("$destroy",(function(){return ot.unmounted(t[0],n)}))}}}at.$inject=[],angular.module("piwikApp").directive("piwikExpandOnHover",at);var ct={ref:"root"};function lt(e,t,n,r,i,a){return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",ct,[Object(o["renderSlot"])(e.$slots,"default")],512)),[[o["vShow"],e.modelValue]])}var st=Object(o["defineComponent"])({props:{modelValue:{type:Boolean,required:!0},element:{type:HTMLElement,required:!1}},emits:["yes","no","closeEnd","close","validation","update:modelValue"],activated:function(){this.$emit("update:modelValue",!1)},watch:{modelValue:function(e,t){var n=this;if(e){var r=this.element||this.$refs.root.firstElementChild;S.helper.modalConfirm(r,{yes:function(){n.$emit("yes")},no:function(){n.$emit("no")},validation:function(){n.$emit("validation")}},{onCloseEnd:function(){n.element||n.$refs.root.appendChild(r),n.$emit("update:modelValue",!1),n.$emit("closeEnd")}})}else!1===e&&!0===t&&this.$emit("close")}}});st.render=lt;var ut=st;function dt(e,t){return vt(e)||ht(e,t)||mt(e,t)||ft()}function ft(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function mt(e,t){if(e){if("string"===typeof e)return pt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?pt(e,t):void 0}}function pt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ht(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,o=[],a=!0,c=!1;try{for(n=n.call(e);!(a=(r=n.next()).done);a=!0)if(o.push(r.value),t&&o.length===t)break}catch(l){c=!0,i=l}finally{try{a||null==n["return"]||n["return"]()}finally{if(c)throw i}}return o}}function vt(e){if(Array.isArray(e))return e}function gt(e){return gt="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},gt(e)}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var gt=0;function bt(e){return e.substring(0,1).toLowerCase()+e.substring(1).replace(/[A-Z]/g,(function(e){return"-".concat(e.toLowerCase())}))}function yt(e){return e.substring(0,1).toLowerCase()+e.substring(1).replace(/-([a-z])/g,(function(e,t){return t.toUpperCase()}))}function wt(e){var t=e.component,n=e.require,r=e.scope,i=void 0===r?{}:r,o=e.events,c=void 0===o?{}:o,s=e.$inject,l=e.directiveName,u=e.transclude,d=e.mountPointFactory,f=e.postCreate,p=e.noScope,m=e.restrict,h=void 0===m?"A":m,v=gt;u&&(gt+=1);var g={};function b(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];var s={restrict:h,require:n,scope:p?void 0:g,compile:function(){return{post:function(e,n,o,s){var l=u?n.find("[ng-transclude][counter=".concat(v,"]")):null,p="<root-component";Object.entries(c).forEach((function(e){var t=dt(e,1),n=t[0];p+=" @".concat(n,"=\"onEventHandler('").concat(n,"', $event)\"")})),Object.entries(i).forEach((function(e){var t=dt(e,2),n=t[0],r=t[1];if("&"===r.angularJsBind){var i=bt(n);c[i]||(p+=" @".concat(i,"=\"onEventHandler('").concat(i,"', $event)\""))}else p+=" :".concat(r.vue,'="').concat(r.vue,'"')})),p+=">",u&&(p+='<div ref="transcludeTarget"/>'),p+="</root-component>";var m=Object(a["createApp"])({template:p,data:function(){var t={};return Object.entries(i).forEach((function(i){var a=dt(i,2),c=a[0],s=a[1],l=e[c];"undefined"===typeof l&&"undefined"!==typeof s.default&&(l=s.default instanceof Function?s.default.apply(s,[e,n,o].concat(r)):s.default),s.transform&&(l=s.transform(l)),t[s.vue]=l})),t},setup:function(){if(u){var e=Object(a["ref"])(null);return{transcludeTarget:e}}},methods:{onEventHandler:function(t,i){var a=yt(t);e[a]&&e[a](i),c[t]&&c[t].apply(c,[i,this,e,n,o,s].concat(r))}}});m.config.globalProperties.$sanitize=window.vueSanitize,m.config.globalProperties.translate=D,m.component("root-component",t);var h=d?d.apply(void 0,[e,n,o].concat(r)):n[0],g=m.mount(h);Object.entries(i).forEach((function(t){var i=dt(t,2),a=i[0],c=i[1];c.angularJsBind&&"&"!==c.angularJsBind&&e.$watch(a,(function(t){var i=t;"undefined"!==typeof c.default&&"undefined"===typeof t&&(i=c.default instanceof Function?c.default.apply(c,[e,n,o].concat(r)):c.default),c.transform&&(i=c.transform(i)),g[a]=i}))})),u&&$(g.transcludeTarget).append(l),f&&f.apply(void 0,[g,e,n,o,s].concat(r)),n.on("$destroy",(function(){m.unmount()}))}}}};return u&&(s.transclude=!0,s.template='<div ng-transclude counter="'.concat(v,'"/>')),s}return Object.entries(i).forEach((function(e){var t=dt(e,2),n=t[0],r=t[1];r.vue||(r.vue=n),r.angularJsBind&&(g[n]=r.angularJsBind)})),b.$inject=s||[],angular.module("piwikApp").directive(l,b),b}
+ */var bt=0;function yt(e){return e.substring(0,1).toLowerCase()+e.substring(1).replace(/[A-Z]/g,(function(e){return"-".concat(e.toLowerCase())}))}function wt(e){return e.substring(0,1).toLowerCase()+e.substring(1).replace(/-([a-z])/g,(function(e,t){return t.toUpperCase()}))}function Ot(e){return"object"===gt(e)&&null!==e&&Object.getPrototypeOf(e)===Object.prototype?Object.fromEntries(Object.entries(e).filter((function(e){return!/^\$/.test(e[0])}))):e}function jt(e){var t=e.component,n=e.require,r=e.scope,i=void 0===r?{}:r,a=e.events,c=void 0===a?{}:a,l=e.$inject,s=e.directiveName,u=e.transclude,d=e.mountPointFactory,f=e.postCreate,m=e.noScope,p=e.restrict,h=void 0===p?"A":p,v=e.priority,g=bt;u&&(bt+=1);var b={};function y(){for(var e=arguments.length,r=new Array(e),a=0;a<e;a++)r[a]=arguments[a];var l={restrict:h,require:n,priority:v,scope:m?void 0:b,compile:function(){return{post:function(e,n,a,l){var s=u?n.find("[ng-transclude][counter=".concat(g,"]")):null,m="<root-component";Object.entries(c).forEach((function(e){var t=dt(e,1),n=t[0];m+=" @".concat(yt(n),"=\"onEventHandler('").concat(n,"', $event)\"")})),Object.entries(i).forEach((function(e){var t=dt(e,2),n=t[0],r=t[1];if("&"===r.angularJsBind){var i=yt(n);c[i]||(m+=" @".concat(i,"=\"onEventHandler('").concat(i,"', $event)\""))}else m+=" :".concat(yt(r.vue),'="').concat(r.vue,'"')})),m+=">",u&&(m+='<div ref="transcludeTarget"/>'),m+="</root-component>";var p=Object(o["createApp"])({template:m,data:function(){var t=this,o={};return Object.entries(i).forEach((function(i){var c=dt(i,2),s=c[0],u=c[1],d=Ot(e[s]);"undefined"===typeof d&&"undefined"!==typeof u.default&&(d=u.default instanceof Function?u.default.apply(u,[e,n,a].concat(r)):u.default),u.transform&&(d=u.transform.apply(u,[d,t,e,n,a,l].concat(r))),o[u.vue]=d})),o},setup:function(){if(u){var e=Object(o["ref"])(null);return{transcludeTarget:e}}},methods:{onEventHandler:function(t,i){var o=wt(t);e[o]&&e[o](i),c[t]&&c[t].apply(c,[i,this,e,n,a,l].concat(r))}}});p.config.globalProperties.$sanitize=window.vueSanitize,p.config.globalProperties.translate=C,p.component("root-component",t);var h=d?d.apply(void 0,[e,n,a].concat(r)):n[0],v=p.mount(h);Object.entries(i).forEach((function(t){var i=dt(t,2),o=i[0],c=i[1];c.angularJsBind&&"&"!==c.angularJsBind&&e.$watch(o,(function(t){var i=Ot(t);"undefined"!==typeof c.default&&"undefined"===typeof t&&(i=c.default instanceof Function?c.default.apply(c,[e,n,a].concat(r)):c.default),c.transform&&(i=c.transform.apply(c,[i,v,e,n,a,l].concat(r))),v[c.vue]=i}))})),u&&$(v.transcludeTarget).append(s),f&&f.apply(void 0,[v,e,n,a,l].concat(r)),n.on("$destroy",(function(){p.unmount()}))}}}};return u&&(l.transclude=!0,l.template='<div ng-transclude counter="'.concat(g,'"/>')),l}return Object.entries(i).forEach((function(e){var t=dt(e,2),n=t[0],r=t[1];r.vue||(r.vue=n),r.angularJsBind&&(b[n]=r.angularJsBind)})),y.$inject=l||[],angular.module("piwikApp").directive(s,y),y}function kt(e){if("undefined"!==typeof e)return"true"===e||!!e&&e>0&&"0"!==e}function St(e){if("undefined"!==typeof e)return null===e?null:parseInt(e,10)}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */wt({component:ut,scope:{show:{vue:"modelValue",default:!1},element:{default:function(e,t){return t[0]}}},events:{yes:function(e,t,n,r,i){i.yes&&(n.$eval(i.yes),setTimeout((function(){n.$apply()}),0))},no:function(e,t,n,r,i){i.no&&(n.$eval(i.no),setTimeout((function(){n.$apply()}),0))},validation:function(e,t,n,r,i){i.no&&(n.$eval(i.no),setTimeout((function(){n.$apply()}),0))},close:function(e,t,n,r){r.close&&(t.$eval(r.close),setTimeout((function(){t.$apply()}),0))},"update:modelValue":function(e,t,n,r,i,a,o){setTimeout((function(){n.$apply(o(i.piwikDialog).assign(n,e))}),0)}},$inject:["$parse"],directiveName:"piwikDialog",transclude:!0,mountPointFactory:function(e,t){var n=$('<div class="vue-placeholder"/>');return n.appendTo(t),n[0]},postCreate:function(e,t,n,r){t.$watch(r.piwikDialog,(function(t,n){n!==t&&(e.modelValue=t||!1)}))},noScope:!0});var Ot={key:0,class:"title",tabindex:"6"},St=["href","title"],kt={class:"iconsBar"},jt=["href","title"],Dt=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),Ct=[Dt],Et=["title"],Pt=Object(a["createElementVNode"])("span",{class:"icon-info"},null,-1),Tt=[Pt],It={class:"ratingIcons"},xt={class:"inlineHelp"},Nt=["innerHTML"],Bt=["href"];function Mt(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("RateFeature");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:"enrichedHeadline",onMouseenter:t[1]||(t[1]=function(t){return e.showIcons=!0}),onMouseleave:t[2]||(t[2]=function(t){return e.showIcons=!1}),ref:"root"},[e.editUrl?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ot,[Object(a["renderSlot"])(e.$slots,"default")])),e.editUrl?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:1,class:"title",href:e.editUrl,title:e.translate("CoreHome_ClickToEditX",e.$sanitize(e.actualFeatureName))},[Object(a["renderSlot"])(e.$slots,"default")],8,St)):Object(a["createCommentVNode"])("",!0),Object(a["withDirectives"])(Object(a["createElementVNode"])("span",kt,[e.helpUrl&&!e.actualInlineHelp?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"helpIcon",href:e.helpUrl,title:e.translate("CoreHome_ExternalHelp")},Ct,8,jt)):Object(a["createCommentVNode"])("",!0),e.actualInlineHelp?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:1,onClick:t[0]||(t[0]=function(t){return e.showInlineHelp=!e.showInlineHelp}),class:Object(a["normalizeClass"])(["helpIcon",{active:e.showInlineHelp}]),title:e.translate(e.reportGenerated?"General_HelpReport":"General_Help")},Tt,10,Et)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",It,[Object(a["createVNode"])(c,{title:e.actualFeatureName},null,8,["title"])])],512),[[a["vShow"],e.showIcons||e.showInlineHelp]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",xt,[Object(a["createElementVNode"])("div",{innerHTML:e.$sanitize(e.actualInlineHelp)},null,8,Nt),e.helpUrl?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"readMore",href:e.helpUrl},Object(a["toDisplayString"])(e.translate("General_MoreDetails")),9,Bt)):Object(a["createCommentVNode"])("",!0)],512),[[a["vShow"],e.showInlineHelp]])],544)}var At=Object(a["defineAsyncComponent"])((function(){return new Promise((function(e){window.$(document).ready((function(){var t=window,n=t.Feedback;e(n?n.RateFeature:null)}))}))})),$t=Object(a["defineComponent"])({props:{helpUrl:{type:String,default:""},editUrl:{type:String,default:""},reportGenerated:String,featureName:String,inlineHelp:String},components:{RateFeature:At},data:function(){return{showIcons:!1,showInlineHelp:!1,actualFeatureName:this.featureName,actualInlineHelp:this.inlineHelp}},watch:{inlineHelp:function(e){this.actualInlineHelp=e},featureName:function(e){this.actualFeatureName=e}},mounted:function(){var e=this,t=this.$refs.root;setTimeout((function(){if(!e.actualInlineHelp){var n=t.querySelector(".title .inlineHelp");if(!n&&t.parentElement.nextElementSibling&&(n=t.parentElement.nextElementSibling.querySelector(".reportDocumentation")),n){var r=n.getAttribute("data-content").trim();r.length&&(e.actualInlineHelp="<p>".concat(r,"</p>"),setTimeout((function(){return n.remove()}),0))}}e.actualFeatureName||(e.actualFeatureName=t.querySelector(".title").textContent),e.reportGenerated&&f.parse(j.period,j.currentDateString).containsToday()&&window.$(t.querySelector(".report-generated")).tooltip({track:!0,content:e.reportGenerated,items:"div",show:!1,hide:!1})}))}});$t.render=Mt;var Vt=$t,Lt=(wt({component:Vt,scope:{helpUrl:{angularJsBind:"@"},editUrl:{angularJsBind:"@"},reportGenerated:{angularJsBind:"@?"},featureName:{angularJsBind:"@"},inlineHelp:{angularJsBind:"@?"}},directiveName:"piwikEnrichedHeadline",transclude:!0}),{class:"card",ref:"root"}),Ht={class:"card-content"},Ft={key:0,class:"card-title"},_t={key:1,class:"card-title"},Rt={ref:"content"};
+ */jt({component:ut,scope:{show:{vue:"modelValue",default:!1},element:{default:function(e,t){return t[0]}}},events:{yes:function(e,t,n,r,i){i.yes&&(n.$eval(i.yes),setTimeout((function(){n.$apply()}),0))},no:function(e,t,n,r,i){i.no&&(n.$eval(i.no),setTimeout((function(){n.$apply()}),0))},validation:function(e,t,n,r,i){i.no&&(n.$eval(i.no),setTimeout((function(){n.$apply()}),0))},close:function(e,t,n,r,i){i.close&&(n.$eval(i.close),setTimeout((function(){n.$apply()}),0))},"update:modelValue":function(e,t,n,r,i,o,a){setTimeout((function(){n.$apply(a(i.piwikDialog).assign(n,e))}),0)}},$inject:["$parse"],directiveName:"piwikDialog",transclude:!0,mountPointFactory:function(e,t){var n=$('<div class="vue-placeholder"/>');return n.appendTo(t),n[0]},postCreate:function(e,t,n,r){t.$watch(r.piwikDialog,(function(t,n){n!==t&&(e.modelValue=t||!1)}))},noScope:!0});var Ct={key:0,class:"title",tabindex:"6"},Dt=["href","title"],Et={class:"iconsBar"},Pt=["href","title"],Tt=Object(o["createElementVNode"])("span",{class:"icon-help"},null,-1),It=[Tt],Vt=["title"],xt=Object(o["createElementVNode"])("span",{class:"icon-info"},null,-1),Nt=[xt],Bt={class:"ratingIcons"},At={class:"inlineHelp"},Mt=["innerHTML"],$t=["href"];function Lt(e,t,n,r,i,a){var c=Object(o["resolveComponent"])("RateFeature");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:"enrichedHeadline",onMouseenter:t[1]||(t[1]=function(t){return e.showIcons=!0}),onMouseleave:t[2]||(t[2]=function(t){return e.showIcons=!1}),ref:"root"},[e.editUrl?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Ct,[Object(o["renderSlot"])(e.$slots,"default")])),e.editUrl?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:1,class:"title",href:e.editUrl,title:e.translate("CoreHome_ClickToEditX",e.$sanitize(e.actualFeatureName))},[Object(o["renderSlot"])(e.$slots,"default")],8,Dt)):Object(o["createCommentVNode"])("",!0),Object(o["withDirectives"])(Object(o["createElementVNode"])("span",Et,[e.helpUrl&&!e.actualInlineHelp?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"helpIcon",href:e.helpUrl,title:e.translate("CoreHome_ExternalHelp")},It,8,Pt)):Object(o["createCommentVNode"])("",!0),e.actualInlineHelp?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:1,onClick:t[0]||(t[0]=function(t){return e.showInlineHelp=!e.showInlineHelp}),class:Object(o["normalizeClass"])(["helpIcon",{active:e.showInlineHelp}]),title:e.translate(e.reportGenerated?"General_HelpReport":"General_Help")},Nt,10,Vt)):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",Bt,[Object(o["createVNode"])(c,{title:e.actualFeatureName},null,8,["title"])])],512),[[o["vShow"],e.showIcons||e.showInlineHelp]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("div",At,[Object(o["createElementVNode"])("div",{innerHTML:e.$sanitize(e.actualInlineHelp)},null,8,Mt),e.helpUrl?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"readMore",href:e.helpUrl},Object(o["toDisplayString"])(e.translate("General_MoreDetails")),9,$t)):Object(o["createCommentVNode"])("",!0)],512),[[o["vShow"],e.showInlineHelp]])],544)}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function Ut(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("EnrichedHeadline");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Lt,[Object(a["createElementVNode"])("div",Ht,[!e.contentTitle||e.actualFeature||e.helpUrl||e.actualHelpText?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",Ft,Object(a["toDisplayString"])(e.contentTitle),1)),e.contentTitle&&(e.actualFeature||e.helpUrl||e.actualHelpText)?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",_t,[Object(a["createVNode"])(c,{"feature-name":e.actualFeature,"help-url":e.helpUrl,"inline-help":e.actualHelpText},{default:Object(a["withCtx"])((function(){return[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.contentTitle),1)]})),_:1},8,["feature-name","help-url","inline-help"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Rt,[Object(a["renderSlot"])(e.$slots,"default")],512)])],512)}var qt=null,Jt=Object(a["defineComponent"])({props:{contentTitle:String,feature:String,helpUrl:String,helpText:String,anchor:String},components:{EnrichedHeadline:Vt},data:function(){return{actualFeature:this.feature,actualHelpText:this.helpText}},watch:{feature:function(e){this.actualFeature=e},helpText:function(e){this.actualHelpText=e}},mounted:function(){var e,t=this,n=this.$refs,r=n.root,i=n.content;if(this.anchor){var a=document.createElement("a");a.id=this.anchor,r.parentElement.prepend(a)}if(setTimeout((function(){var e=i.querySelector(".contentHelp");e&&(t.actualHelpText=e.innerHTML,e.remove())}),0),!this.actualFeature||!0!==this.actualFeature&&"true"!==this.actualFeature||(this.actualFeature=this.contentTitle),null===qt&&(qt=document.querySelector("#content.admin")),qt&&(e=qt.offsetTop),e||0===e){var o=r.closest("[piwik-widget-loader]"),c=o?o.offsetTop:r.offsetTop;c-e<17&&(r.style.marginTop=0)}}});Jt.render=Ut;var Gt=Jt;
+ */function Ht(e,t){return Object(o["defineAsyncComponent"])((function(){return new Promise((function(n){window.$(document).ready((function(){window[e]?n(window[e][t]):n(null)}))}))}))}var Ft=Ht("Feedback","RateFeature"),_t=Object(o["defineComponent"])({props:{helpUrl:{type:String,default:""},editUrl:{type:String,default:""},reportGenerated:String,featureName:String,inlineHelp:String},components:{RateFeature:Ft},data:function(){return{showIcons:!1,showInlineHelp:!1,actualFeatureName:this.featureName,actualInlineHelp:this.inlineHelp}},watch:{inlineHelp:function(e){this.actualInlineHelp=e},featureName:function(e){this.actualFeatureName=e}},mounted:function(){var e=this,t=this.$refs.root;setTimeout((function(){if(!e.actualInlineHelp){var n=t.querySelector(".title .inlineHelp");if(!n&&t.parentElement.nextElementSibling&&(n=t.parentElement.nextElementSibling.querySelector(".reportDocumentation")),n){var r=n.getAttribute("data-content").trim();r.length&&(e.actualInlineHelp="<p>".concat(r,"</p>"),setTimeout((function(){return n.remove()}),0))}}e.actualFeatureName||(e.actualFeatureName=t.querySelector(".title").textContent),e.reportGenerated&&f.parse(S.period,S.currentDateString).containsToday()&&window.$(t.querySelector(".report-generated")).tooltip({track:!0,content:e.reportGenerated,items:"div",show:!1,hide:!1})}))}});_t.render=Lt;var Ut=_t,Rt=(jt({component:Ut,scope:{helpUrl:{angularJsBind:"@"},editUrl:{angularJsBind:"@"},reportGenerated:{angularJsBind:"@?"},featureName:{angularJsBind:"@"},inlineHelp:{angularJsBind:"@?"}},directiveName:"piwikEnrichedHeadline",transclude:!0}),{class:"card",ref:"root"}),qt={class:"card-content"},Jt={key:0,class:"card-title"},zt={key:1,class:"card-title"},Gt={ref:"content"};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */wt({component:Gt,scope:{contentTitle:{angularJsBind:"@"},feature:{angularJsBind:"@"},helpUrl:{angularJsBind:"@"},helpText:{angularJsBind:"@"},anchor:{angularJsBind:"@?"}},directiveName:"piwikContentBlock",transclude:!0});function zt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Qt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Wt(e,t,n){return t&&Qt(e.prototype,t),n&&Qt(e,n),e}function Yt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */function Qt(e,t,n,r,i,a){var c=Object(o["resolveComponent"])("EnrichedHeadline");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Rt,[Object(o["createElementVNode"])("div",qt,[!e.contentTitle||e.actualFeature||e.helpUrl||e.actualHelpText?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("h2",Jt,Object(o["toDisplayString"])(e.contentTitle),1)),e.contentTitle&&(e.actualFeature||e.helpUrl||e.actualHelpText)?(Object(o["openBlock"])(),Object(o["createElementBlock"])("h2",zt,[Object(o["createVNode"])(c,{"feature-name":e.actualFeature,"help-url":e.helpUrl,"inline-help":e.actualHelpText},{default:Object(o["withCtx"])((function(){return[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.contentTitle),1)]})),_:1},8,["feature-name","help-url","inline-help"])])):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",Gt,[Object(o["renderSlot"])(e.$slots,"default")],512)])],512)}var Wt=null,Yt=Object(o["defineComponent"])({props:{contentTitle:String,feature:String,helpUrl:String,helpText:String,anchor:String},components:{EnrichedHeadline:Ut},data:function(){return{actualFeature:this.feature,actualHelpText:this.helpText}},watch:{feature:function(e){this.actualFeature=e},helpText:function(e){this.actualHelpText=e}},mounted:function(){var e,t=this,n=this.$refs,r=n.root,i=n.content;if(this.anchor){var o=document.createElement("a");o.id=this.anchor,r.parentElement.prepend(o)}if(setTimeout((function(){var e=i.querySelector(".contentHelp");e&&(t.actualHelpText=e.innerHTML,e.remove())}),0),!this.actualFeature||!0!==this.actualFeature&&"true"!==this.actualFeature||(this.actualFeature=this.contentTitle),null===Wt&&(Wt=document.querySelector("#content.admin")),Wt&&(e=Wt.offsetTop),e||0===e){var a=r.closest("[piwik-widget-loader]"),c=a?a.offsetTop:r.offsetTop;c-e<17&&(r.style.marginTop=0)}}});Yt.render=Qt;var Kt=Yt;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var Kt=function(){function e(){var t=this;zt(this,e),Yt(this,"segmentState",Object(a["reactive"])({availableSegments:[]})),j.on("piwikSegmentationInited",(function(){return t.setSegmentState()}))}return Wt(e,[{key:"state",get:function(){return Object(a["readonly"])(this.segmentState)}},{key:"setSegmentState",value:function(){try{var e=$(".segmentEditorPanel").data("uiControlObject");this.segmentState.availableSegments=e.impl.availableSegments||[]}catch(t){}}}]),e}(),Xt=new Kt;function Zt(e){return rn(e)||nn(e)||tn(e)||en()}function en(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function tn(e,t){if(e){if("string"===typeof e)return an(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?an(e,t):void 0}}function nn(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function rn(e){if(Array.isArray(e))return an(e)}function an(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function on(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function cn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?on(Object(n),!0).forEach((function(t){dn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):on(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sn(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ln(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function un(e,t,n){return t&&ln(e.prototype,t),n&&ln(e,n),e}function dn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */jt({component:Kt,scope:{contentTitle:{angularJsBind:"@"},feature:{angularJsBind:"@"},helpUrl:{angularJsBind:"@"},helpText:{angularJsBind:"@"},anchor:{angularJsBind:"@?"}},directiveName:"piwikContentBlock",transclude:!0});function Xt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Zt(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function en(e,t,n){return t&&Zt(e.prototype,t),n&&Zt(e,n),e}function tn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var fn=8,pn=3;function mn(e){return e?e instanceof Array?e:[e]:[]}var hn=function(){function e(){var t=this;sn(this,e),dn(this,"privateState",Object(a["reactive"])({comparisonsDisabledFor:[]})),dn(this,"state",Object(a["readonly"])(this.privateState)),dn(this,"colors",{}),dn(this,"segmentComparisons",Object(a["computed"])((function(){return t.parseSegmentComparisons()}))),dn(this,"periodComparisons",Object(a["computed"])((function(){return t.parsePeriodComparisons()}))),dn(this,"isEnabled",Object(a["computed"])((function(){return t.checkEnabledForCurrentPage()}))),this.loadComparisonsDisabledFor(),$((function(){t.colors=t.getAllSeriesColors()})),Object(a["watch"])((function(){return t.getComparisons()}),(function(){return j.postEvent("piwikComparisonsChanged")}),{deep:!0})}return un(e,[{key:"getComparisons",value:function(){return this.getSegmentComparisons().concat(this.getPeriodComparisons())}},{key:"isComparing",value:function(){return this.isComparisonEnabled()&&(this.segmentComparisons.value.length>1||this.periodComparisons.value.length>1)}},{key:"isComparingPeriods",value:function(){return this.getPeriodComparisons().length>1}},{key:"getSegmentComparisons",value:function(){return this.isComparisonEnabled()?this.segmentComparisons.value:[]}},{key:"getPeriodComparisons",value:function(){return this.isComparisonEnabled()?this.periodComparisons.value:[]}},{key:"getSeriesColor",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=this.getComparisonSeriesIndex(t.index,e.index)%fn;if(0===n)return this.colors["series".concat(r)];var i=n%pn;return this.colors["series".concat(r,"-shade").concat(i)]}},{key:"getSeriesColorName",value:function(e,t){var n="series".concat(e%fn);return t>0&&(n+="-shade".concat(t%pn)),n}},{key:"isComparisonEnabled",value:function(){return this.isEnabled.value}},{key:"getIndividualComparisonRowIndices",value:function(e){var t=this.getSegmentComparisons().length,n=e%t,r=Math.floor(e/t);return{segmentIndex:n,periodIndex:r}}},{key:"getComparisonSeriesIndex",value:function(e,t){var n=this.getSegmentComparisons().length;return e*n+t}},{key:"getAllComparisonSeries",value:function(){var e=this,t=[],n=0;return this.getPeriodComparisons().forEach((function(r){e.getSegmentComparisons().forEach((function(i){t.push({index:n,params:cn(cn({},i.params),r.params),color:e.colors["series".concat(n)]}),n+=1}))})),t}},{key:"removeSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=Zt(this.segmentComparisons.value);t.splice(e,1);var n={};0===e&&(n.segment=t[0].params.segment),this.updateQueryParamsFromComparisons(t,this.periodComparisons.value,n)}},{key:"addSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=this.segmentComparisons.value.concat([{params:e,index:-1,title:""}]);this.updateQueryParamsFromComparisons(t,this.periodComparisons.value)}},{key:"updateQueryParamsFromComparisons",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={},i={},a=!1,o=!1;e.forEach((function(e){a?r[e.params.segment]=!0:a=!0})),t.forEach((function(e){o?i["".concat(e.params.period,"|").concat(e.params.date)]=!0:o=!0}));var c=[],s=[];Object.keys(i).forEach((function(e){var t=e.split("|");c.push(t[0]),s.push(t[1])}));var l={compareSegments:Object.keys(r),comparePeriods:c,compareDates:s};if(j.helper.isAngularRenderingThePage()){var u=Oe.hashParsed.value,d=cn(cn(cn({},u),l),n);return delete d["compareSegments[]"],delete d["comparePeriods[]"],delete d["compareDates[]"],void(JSON.stringify(d)!==JSON.stringify(u)&&Oe.updateHash(d))}var f=[];["compareSegments","comparePeriods","compareDates"].forEach((function(e){l[e].length||f.push(e)}));var p=Oe.stringify(n),m=Oe.stringify(l);window.broadcast.propagateNewPage(p,void 0,m,f)}},{key:"getAllSeriesColors",value:function(){var e=j.ColorManager;if(!e)return[];for(var t=[],n=0;n<fn;n+=1){t.push("series".concat(n));for(var r=0;r<pn;r+=1)t.push("series".concat(n,"-shade").concat(r))}return e.getColors("comparison-series-color",t)}},{key:"loadComparisonsDisabledFor",value:function(){var e=this,t=Oe.parsed.value.module;"CoreUpdater"!==t&&"Installation"!==t?Ne.fetch({module:"API",method:"API.getPagesComparisonsDisabledFor"}).then((function(t){e.privateState.comparisonsDisabledFor=t})):this.privateState.comparisonsDisabledFor=[]}},{key:"parseSegmentComparisons",value:function(){var e=Xt.state.availableSegments,t=Zt(mn(Oe.parsed.value.compareSegments));t.unshift(Oe.parsed.value.segment||"");var n=[];return t.forEach((function(t,r){var i;e.forEach((function(e){e.definition!==t&&e.definition!==decodeURIComponent(t)&&decodeURIComponent(e.definition)!==t||(i=e)}));var a=i?i.name:D("General_Unknown");""===t.trim()&&(a=D("SegmentEditor_DefaultAllVisits")),n.push({params:{segment:t},title:j.helper.htmlDecode(a),index:r})})),n}},{key:"parsePeriodComparisons",value:function(){var e=Zt(mn(Oe.parsed.value.comparePeriods)),t=Zt(mn(Oe.parsed.value.compareDates));e.unshift(Oe.parsed.value.period),t.unshift(Oe.parsed.value.date);for(var n=[],r=0;r<Math.min(t.length,e.length);r+=1){var i=void 0;try{i=f.parse(e[r],t[r]).getPrettyString()}catch(a){i=D("General_Error")}n.push({params:{date:t[r],period:e[r]},title:i,index:r})}return n}},{key:"checkEnabledForCurrentPage",value:function(){var e=Oe.parsed.value.category||Oe.parsed.value.module,t=Oe.parsed.value.subcategory||Oe.parsed.value.action,n="".concat(e,".").concat(t),r=-1===this.privateState.comparisonsDisabledFor.indexOf(n)&&-1===this.privateState.comparisonsDisabledFor.indexOf("".concat(e,".*"));return document.documentElement.classList.toggle("comparisonsDisabled",!r),r}}]),e}(),vn=new hn,gn={key:0,ref:"root",class:"matomo-comparisons"},bn={class:"comparison-type"},yn=["title"],wn=["href"],On=["title"],Sn={class:"comparison-period-label"},kn=["onClick"],jn=["title"],Dn={class:"loadingPiwik",style:{display:"none"}},Cn=["alt"];function En(e,t,n,r,i,o){return e.isComparing?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",gn,[Object(a["createElementVNode"])("h3",null,Object(a["toDisplayString"])(e.translate("General_Comparisons")),1),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.segmentComparisons,(function(t,n){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:"comparison card",key:t.index},[Object(a["createElementVNode"])("div",bn,Object(a["toDisplayString"])(e.translate("General_Segment")),1),Object(a["createElementVNode"])("div",{class:"title",title:t.title+"<br/>"+decodeURIComponent(t.params.segment)},[Object(a["createElementVNode"])("a",{target:"_blank",href:e.getUrlToSegment(t.params.segment)},Object(a["toDisplayString"])(t.title),9,wn)],8,yn),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.periodComparisons,(function(n){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:"comparison-period",key:n.index,title:e.getComparisonTooltip(t,n)},[Object(a["createElementVNode"])("span",{class:"comparison-dot",style:Object(a["normalizeStyle"])({"background-color":e.getSeriesColor(t,n)})},null,4),Object(a["createElementVNode"])("span",Sn,Object(a["toDisplayString"])(n.title)+" ("+Object(a["toDisplayString"])(e.getComparisonPeriodType(n))+") ",1)],8,On)})),128)),e.segmentComparisons.length>1?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:0,class:"remove-button",onClick:function(t){return e.removeSegmentComparison(n)}},[Object(a["createElementVNode"])("span",{class:"icon icon-close",title:e.translate("General_ClickToRemoveComp")},null,8,jn)],8,kn)):Object(a["createCommentVNode"])("",!0)])})),128)),Object(a["createElementVNode"])("div",Dn,[Object(a["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:e.translate("General_LoadingData")},null,8,Cn),Object(a["createTextVNode"])(" "+Object(a["toDisplayString"])(e.translate("General_LoadingData")),1)])],512)):Object(a["createCommentVNode"])("",!0)}function Pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Tn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pn(Object(n),!0).forEach((function(t){In(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function In(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xn=Object(a["defineComponent"])({props:{},data:function(){return{comparisonTooltips:null}},setup:function(){var e=Object(a["computed"])((function(){return vn.isComparing()})),t=Object(a["computed"])((function(){return vn.getSegmentComparisons()})),n=Object(a["computed"])((function(){return vn.getPeriodComparisons()})),r=vn.getSeriesColor.bind(vn);return{isComparing:e,segmentComparisons:t,periodComparisons:n,getSeriesColor:r}},methods:{comparisonHasSegment:function(e){return"undefined"!==typeof e.params.segment},removeSegmentComparison:function(e){window.$(this.$refs.root).tooltip("destroy"),vn.removeSegmentComparison(e)},getComparisonPeriodType:function(e){var t=e.params.period;if("range"===t)return D("CoreHome_PeriodRange");var n=D("Intl_Period".concat(t.substring(0,1).toUpperCase()).concat(t.substring(1)));return n.substring(0,1).toUpperCase()+n.substring(1)},getComparisonTooltip:function(e,t){if(this.comparisonTooltips&&Object.keys(this.comparisonTooltips).length)return(this.comparisonTooltips[t.index]||{})[e.index]},getUrlToSegment:function(e){var t=Tn({},Oe.hashParsed.value);return delete t.comparePeriods,delete t.compareDates,delete t.compareSegments,t.segment=e,"".concat(window.location.search,"#?").concat(Oe.stringify(t))},setUpTooltips:function(){var e=window,t=e.$;t(this.$refs.root).tooltip({track:!0,content:function(){var e=t(this).attr("title");return window.vueSanitize(e.replace(/\n/g,"<br />"))},show:{delay:200,duration:200},hide:!1})},onComparisonsChanged:function(){var e=this;if(this.comparisonTooltips=null,vn.isComparing()){var t=vn.getPeriodComparisons(),n=vn.getSegmentComparisons();Ne.fetch({method:"API.getProcessedReport",apiModule:"VisitsSummary",apiAction:"get",compare:"1",compareSegments:Oe.getSearchParam("compareSegments"),comparePeriods:Oe.getSearchParam("comparePeriods"),compareDates:Oe.getSearchParam("compareDates"),format_metrics:"1"}).then((function(r){e.comparisonTooltips={},t.forEach((function(t){e.comparisonTooltips[t.index]={},n.forEach((function(n){var i=e.generateComparisonTooltip(r,t,n);e.comparisonTooltips[t.index][n.index]=i}))}))}))}},generateComparisonTooltip:function(e,t,n){if(!e.reportData.comparisons)return"";var r=vn.getComparisonSeriesIndex(t.index,0),i=e.reportData.comparisons[r],a=vn.getComparisonSeriesIndex(t.index,n.index),o=e.reportData.comparisons[a],c=e.reportData.comparisons[n.index],s='<div class="comparison-card-tooltip">',l=(o.nb_visits/i.nb_visits*100).toFixed(2);return l="".concat(l,"%"),s+=D("General_ComparisonCardTooltip1",["'".concat(o.compareSegmentPretty,"'"),o.comparePeriodPretty,l,o.nb_visits.toString(),i.nb_visits.toString()]),t.index>0&&(s+="<br/><br/>",s+=D("General_ComparisonCardTooltip2",[o.nb_visits_change.toString(),c.compareSegmentPretty,c.comparePeriodPretty])),s+="</div>",s}},updated:function(){var e=this;setTimeout((function(){return e.setUpTooltips()}))},mounted:function(){var e=this;j.on("piwikComparisonsChanged",(function(){e.onComparisonsChanged()})),this.onComparisonsChanged(),setTimeout((function(){return e.setUpTooltips()}))},beforeUnmount:function(){try{window.$(this.refs.root).tooltip("destroy")}catch(e){}}});xn.render=En;var Nn=xn;
+ */var nn=function(){function e(){var t=this;Xt(this,e),tn(this,"segmentState",Object(o["reactive"])({availableSegments:[]})),S.on("piwikSegmentationInited",(function(){return t.setSegmentState()}))}return en(e,[{key:"state",get:function(){return Object(o["readonly"])(this.segmentState)}},{key:"setSegmentState",value:function(){try{var e=$(".segmentEditorPanel").data("uiControlObject");this.segmentState.availableSegments=e.impl.availableSegments||[]}catch(t){}}}]),e}(),rn=new nn;function on(e){return sn(e)||ln(e)||cn(e)||an()}function an(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function cn(e,t){if(e){if("string"===typeof e)return un(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?un(e,t):void 0}}function ln(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function sn(e){if(Array.isArray(e))return un(e)}function un(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function dn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?dn(Object(n),!0).forEach((function(t){vn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):dn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function mn(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function pn(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function hn(e,t,n){return t&&pn(e.prototype,t),n&&pn(e,n),e}function vn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function Bn(){return vn}Bn.$inject=[],angular.module("piwikApp.service").factory("piwikComparisonsService",Bn);wt({component:Nn,directiveName:"piwikComparisons",restrict:"E"});var Mn={ref:"root",class:"menuDropdown"},An=["title"],$n=["innerHTML"],Vn=Object(a["createElementVNode"])("span",{class:"icon-arrow-bottom"},null,-1),Ln={class:"items"},Hn={key:0,class:"search"},Fn=["placeholder"],_n=["title"],Rn=["title"];function Un(e,t,n,r,i,o){var c=Object(a["resolveDirective"])("focus-if"),s=Object(a["resolveDirective"])("focus-anywhere-but-here");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Mn,[Object(a["createElementVNode"])("span",{class:"title",onClick:t[0]||(t[0]=function(t){return e.showItems=!e.showItems}),title:e.tooltip},[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(this.actualMenuTitle)},null,8,$n),Vn],8,An),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",Ln,[e.showSearch&&e.showItems?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Hn,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.searchTerm=t}),onKeydown:t[2]||(t[2]=function(t){return e.onSearchTermKeydown(t)}),placeholder:e.translate("General_Search")},null,40,Fn),[[a["vModelText"],e.searchTerm],[c,{},e.showItems]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{class:"search_ico",src:"plugins/Morpheus/images/search_ico.png",title:e.translate("General_Search")},null,8,_n),[[a["vShow"],!e.searchTerm]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{onClick:t[3]||(t[3]=function(t){e.searchTerm="",e.searchItems("")}),class:"reset",src:"plugins/CoreHome/images/reset_search.png",title:e.translate("General_Clear")},null,8,Rn),[[a["vShow"],e.searchTerm]])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",{onClick:t[4]||(t[4]=function(t){return e.selectItem(t)})},[Object(a["renderSlot"])(e.$slots,"default")])],512),[[a["vShow"],e.showItems]])],512)),[[s,{blur:e.lostFocus}]])}var qn=window,Jn=qn.$,Gn=Object(a["defineComponent"])({props:{menuTitle:String,tooltip:String,showSearch:Boolean,menuTitleChangeOnClick:String},directives:{FocusAnywhereButHere:_e,FocusIf:qe},emits:["afterSelect"],watch:{menuTitle:function(){this.actualMenuTitle=this.menuTitle}},data:function(){return{showItems:!1,searchTerm:"",actualMenuTitle:this.menuTitle}},methods:{lostFocus:function(){this.showItems=!1},selectItem:function(e){var t=e.target.classList;!t.contains("item")||t.contains("disabled")||t.contains("separator")||(!1!==this.menuTitleChangeOnClick&&(this.actualMenuTitle=e.target.textContent.replace(/[\u0000-\u2666]/g,(function(e){return"&#".concat(e.charCodeAt(0),";")}))),this.showItems=!1,Jn(this.$slots.default()).find(".item").removeClass("active"),t.add("active"),this.$emit("afterSelect"))},onSearchTermKeydown:function(){var e=this;setTimeout((function(){e.searchItems(e.searchTerm)}))},searchItems:function(e){var t=e.toLowerCase();Jn(this.$refs.root).find(".item").each((function(e,n){var r=Jn(n);-1===r.text().toLowerCase().indexOf(t)?r.hide():r.show()}))}}});Gn.render=Un;var zn=Gn,Qn=(wt({component:zn,scope:{menuTitle:{angularJsBind:"@"},tooltip:{angularJsBind:"@"},showSearch:{angularJsBind:"="},menuTitleChangeOnClick:{angularJsBind:"="}},directiveName:"piwikMenudropdown",transclude:!0,events:{"after-select":function(e,t){setTimeout((function(){t.$apply()}),0)}}}),{ref:"root"});
+ */var gn=8,bn=3;function yn(e){return e?Array.isArray(e)?e:[e]:[]}var wn=function(){function e(){var t=this;mn(this,e),vn(this,"privateState",Object(o["reactive"])({comparisonsDisabledFor:[]})),vn(this,"state",Object(o["readonly"])(this.privateState)),vn(this,"colors",{}),vn(this,"segmentComparisons",Object(o["computed"])((function(){return t.parseSegmentComparisons()}))),vn(this,"periodComparisons",Object(o["computed"])((function(){return t.parsePeriodComparisons()}))),vn(this,"isEnabled",Object(o["computed"])((function(){return t.checkEnabledForCurrentPage()}))),this.loadComparisonsDisabledFor(),$((function(){t.colors=t.getAllSeriesColors()})),Object(o["watch"])((function(){return t.getComparisons()}),(function(){return S.postEvent("piwikComparisonsChanged")}),{deep:!0})}return hn(e,[{key:"getComparisons",value:function(){return this.getSegmentComparisons().concat(this.getPeriodComparisons())}},{key:"isComparing",value:function(){return this.isComparisonEnabled()&&(this.segmentComparisons.value.length>1||this.periodComparisons.value.length>1)}},{key:"isComparingPeriods",value:function(){return this.getPeriodComparisons().length>1}},{key:"getSegmentComparisons",value:function(){return this.isComparisonEnabled()?this.segmentComparisons.value:[]}},{key:"getPeriodComparisons",value:function(){return this.isComparisonEnabled()?this.periodComparisons.value:[]}},{key:"getSeriesColor",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=this.getComparisonSeriesIndex(t.index,e.index)%gn;if(0===n)return this.colors["series".concat(r)];var i=n%bn;return this.colors["series".concat(r,"-shade").concat(i)]}},{key:"getSeriesColorName",value:function(e,t){var n="series".concat(e%gn);return t>0&&(n+="-shade".concat(t%bn)),n}},{key:"isComparisonEnabled",value:function(){return this.isEnabled.value}},{key:"getIndividualComparisonRowIndices",value:function(e){var t=this.getSegmentComparisons().length,n=e%t,r=Math.floor(e/t);return{segmentIndex:n,periodIndex:r}}},{key:"getComparisonSeriesIndex",value:function(e,t){var n=this.getSegmentComparisons().length;return e*n+t}},{key:"getAllComparisonSeries",value:function(){var e=this,t=[],n=0;return this.getPeriodComparisons().forEach((function(r){e.getSegmentComparisons().forEach((function(i){t.push({index:n,params:fn(fn({},i.params),r.params),color:e.colors["series".concat(n)]}),n+=1}))})),t}},{key:"removeSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=on(this.segmentComparisons.value);t.splice(e,1);var n={};0===e&&(n.segment=t[0].params.segment),this.updateQueryParamsFromComparisons(t,this.periodComparisons.value,n)}},{key:"addSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=this.segmentComparisons.value.concat([{params:e,index:-1,title:""}]);this.updateQueryParamsFromComparisons(t,this.periodComparisons.value)}},{key:"updateQueryParamsFromComparisons",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={},i={},o=!1,a=!1;e.forEach((function(e){o?r[e.params.segment]=!0:o=!0})),t.forEach((function(e){a?i["".concat(e.params.period,"|").concat(e.params.date)]=!0:a=!0}));var c=[],l=[];Object.keys(i).forEach((function(e){var t=e.split("|");c.push(t[0]),l.push(t[1])}));var s={compareSegments:Object.keys(r),comparePeriods:c,compareDates:l};if(S.helper.isAngularRenderingThePage()){var u=Oe.hashParsed.value,d=fn(fn(fn({},u),s),n);return delete d["compareSegments[]"],delete d["comparePeriods[]"],delete d["compareDates[]"],void(JSON.stringify(d)!==JSON.stringify(u)&&Oe.updateHash(d))}var f=[];["compareSegments","comparePeriods","compareDates"].forEach((function(e){s[e].length||f.push(e)}));var m=Oe.stringify(n),p=Oe.stringify(s);window.broadcast.propagateNewPage(m,void 0,p,f)}},{key:"getAllSeriesColors",value:function(){var e=S.ColorManager;if(!e)return[];for(var t=[],n=0;n<gn;n+=1){t.push("series".concat(n));for(var r=0;r<bn;r+=1)t.push("series".concat(n,"-shade").concat(r))}return e.getColors("comparison-series-color",t)}},{key:"loadComparisonsDisabledFor",value:function(){var e=this,t=Oe.parsed.value.module;"CoreUpdater"!==t&&"Installation"!==t?xe.fetch({module:"API",method:"API.getPagesComparisonsDisabledFor"}).then((function(t){e.privateState.comparisonsDisabledFor=t})):this.privateState.comparisonsDisabledFor=[]}},{key:"parseSegmentComparisons",value:function(){var e=rn.state.availableSegments,t=on(yn(Oe.parsed.value.compareSegments));t.unshift(Oe.parsed.value.segment||"");var n=[];return t.forEach((function(t,r){var i;e.forEach((function(e){e.definition!==t&&e.definition!==decodeURIComponent(t)&&decodeURIComponent(e.definition)!==t||(i=e)}));var o=i?i.name:C("General_Unknown");""===t.trim()&&(o=C("SegmentEditor_DefaultAllVisits")),n.push({params:{segment:t},title:S.helper.htmlDecode(o),index:r})})),n}},{key:"parsePeriodComparisons",value:function(){var e=on(yn(Oe.parsed.value.comparePeriods)),t=on(yn(Oe.parsed.value.compareDates));e.unshift(Oe.parsed.value.period),t.unshift(Oe.parsed.value.date);for(var n=[],r=0;r<Math.min(t.length,e.length);r+=1){var i=void 0;try{i=f.parse(e[r],t[r]).getPrettyString()}catch(o){i=C("General_Error")}n.push({params:{date:t[r],period:e[r]},title:i,index:r})}return n}},{key:"checkEnabledForCurrentPage",value:function(){var e=Oe.parsed.value.category||Oe.parsed.value.module,t=Oe.parsed.value.subcategory||Oe.parsed.value.action,n="".concat(e,".").concat(t),r=-1===this.privateState.comparisonsDisabledFor.indexOf(n)&&-1===this.privateState.comparisonsDisabledFor.indexOf("".concat(e,".*"));return document.documentElement.classList.toggle("comparisonsDisabled",!r),r}}]),e}(),On=new wn,jn={key:0,ref:"root",class:"matomo-comparisons"},kn={class:"comparison-type"},Sn=["title"],Cn=["href"],Dn=["title"],En={class:"comparison-period-label"},Pn=["onClick"],Tn=["title"],In={class:"loadingPiwik",style:{display:"none"}},Vn=["alt"];function xn(e,t,n,r,i,a){return e.isComparing?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",jn,[Object(o["createElementVNode"])("h3",null,Object(o["toDisplayString"])(e.translate("General_Comparisons")),1),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.segmentComparisons,(function(t,n){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:"comparison card",key:t.index},[Object(o["createElementVNode"])("div",kn,Object(o["toDisplayString"])(e.translate("General_Segment")),1),Object(o["createElementVNode"])("div",{class:"title",title:t.title+"<br/>"+decodeURIComponent(t.params.segment)},[Object(o["createElementVNode"])("a",{target:"_blank",href:e.getUrlToSegment(t.params.segment)},Object(o["toDisplayString"])(t.title),9,Cn)],8,Sn),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.periodComparisons,(function(n){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:"comparison-period",key:n.index,title:e.getComparisonTooltip(t,n)},[Object(o["createElementVNode"])("span",{class:"comparison-dot",style:Object(o["normalizeStyle"])({"background-color":e.getSeriesColor(t,n)})},null,4),Object(o["createElementVNode"])("span",En,Object(o["toDisplayString"])(n.title)+" ("+Object(o["toDisplayString"])(e.getComparisonPeriodType(n))+") ",1)],8,Dn)})),128)),e.segmentComparisons.length>1?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:0,class:"remove-button",onClick:function(t){return e.removeSegmentComparison(n)}},[Object(o["createElementVNode"])("span",{class:"icon icon-close",title:e.translate("General_ClickToRemoveComp")},null,8,Tn)],8,Pn)):Object(o["createCommentVNode"])("",!0)])})),128)),Object(o["createElementVNode"])("div",In,[Object(o["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:e.translate("General_LoadingData")},null,8,Vn),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.translate("General_LoadingData")),1)])],512)):Object(o["createCommentVNode"])("",!0)}function Nn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Nn(Object(n),!0).forEach((function(t){An(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Nn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function An(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Mn=Object(o["defineComponent"])({props:{},data:function(){return{comparisonTooltips:null}},setup:function(){var e=Object(o["computed"])((function(){return On.isComparing()})),t=Object(o["computed"])((function(){return On.getSegmentComparisons()})),n=Object(o["computed"])((function(){return On.getPeriodComparisons()})),r=On.getSeriesColor.bind(On);return{isComparing:e,segmentComparisons:t,periodComparisons:n,getSeriesColor:r}},methods:{comparisonHasSegment:function(e){return"undefined"!==typeof e.params.segment},removeSegmentComparison:function(e){window.$(this.$refs.root).tooltip("destroy"),On.removeSegmentComparison(e)},getComparisonPeriodType:function(e){var t=e.params.period;if("range"===t)return C("CoreHome_PeriodRange");var n=C("Intl_Period".concat(t.substring(0,1).toUpperCase()).concat(t.substring(1)));return n.substring(0,1).toUpperCase()+n.substring(1)},getComparisonTooltip:function(e,t){if(this.comparisonTooltips&&Object.keys(this.comparisonTooltips).length)return(this.comparisonTooltips[t.index]||{})[e.index]},getUrlToSegment:function(e){var t=Bn({},Oe.hashParsed.value);return delete t.comparePeriods,delete t.compareDates,delete t.compareSegments,t.segment=e,"".concat(window.location.search,"#?").concat(Oe.stringify(t))},setUpTooltips:function(){var e=window,t=e.$;t(this.$refs.root).tooltip({track:!0,content:function(){var e=t(this).attr("title");return window.vueSanitize(e.replace(/\n/g,"<br />"))},show:{delay:200,duration:200},hide:!1})},onComparisonsChanged:function(){var e=this;if(this.comparisonTooltips=null,On.isComparing()){var t=On.getPeriodComparisons(),n=On.getSegmentComparisons();xe.fetch({method:"API.getProcessedReport",apiModule:"VisitsSummary",apiAction:"get",compare:"1",compareSegments:Oe.getSearchParam("compareSegments"),comparePeriods:Oe.getSearchParam("comparePeriods"),compareDates:Oe.getSearchParam("compareDates"),format_metrics:"1"}).then((function(r){e.comparisonTooltips={},t.forEach((function(t){e.comparisonTooltips[t.index]={},n.forEach((function(n){var i=e.generateComparisonTooltip(r,t,n);e.comparisonTooltips[t.index][n.index]=i}))}))}))}},generateComparisonTooltip:function(e,t,n){if(!e.reportData.comparisons)return"";var r=On.getComparisonSeriesIndex(t.index,0),i=e.reportData.comparisons[r],o=On.getComparisonSeriesIndex(t.index,n.index),a=e.reportData.comparisons[o],c=e.reportData.comparisons[n.index],l='<div class="comparison-card-tooltip">',s=(a.nb_visits/i.nb_visits*100).toFixed(2);return s="".concat(s,"%"),l+=C("General_ComparisonCardTooltip1",["'".concat(a.compareSegmentPretty,"'"),a.comparePeriodPretty,s,a.nb_visits.toString(),i.nb_visits.toString()]),t.index>0&&(l+="<br/><br/>",l+=C("General_ComparisonCardTooltip2",[a.nb_visits_change.toString(),c.compareSegmentPretty,c.comparePeriodPretty])),l+="</div>",l}},updated:function(){var e=this;setTimeout((function(){return e.setUpTooltips()}))},mounted:function(){var e=this;S.on("piwikComparisonsChanged",(function(){e.onComparisonsChanged()})),this.onComparisonsChanged(),setTimeout((function(){return e.setUpTooltips()}))},beforeUnmount:function(){try{window.$(this.refs.root).tooltip("destroy")}catch(e){}}});Mn.render=xn;var $n=Mn;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function Wn(e,t,n,r,i,o){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Qn,null,512)}function Yn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yn(Object(n),!0).forEach((function(t){Xn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Zn=1,er=window,tr=er.$,nr=Object(a["defineComponent"])({props:{selectedDateStart:Date,selectedDateEnd:Date,highlightedDateStart:Date,highlightedDateEnd:Date,viewDate:[String,Date],stepMonths:Number,disableMonthDropdown:Boolean,options:Object},emits:["cellHover","cellHoverLeave","dateSelect"],setup:function(e,t){var n=Object(a["ref"])(null);function r(t,n){var r=t.children("a");if(e.selectedDateStart&&e.selectedDateEnd&&n>=e.selectedDateStart&&n<=e.selectedDateEnd?t.addClass("ui-datepicker-current-period"):t.removeClass("ui-datepicker-current-period"),e.highlightedDateStart&&e.highlightedDateEnd&&n>=e.highlightedDateStart&&n<=e.highlightedDateEnd){var i=r.length?r:t;i.addClass("ui-state-hover")}else t.removeClass("ui-state-hover"),r.removeClass("ui-state-hover")}function i(e,t,n){if(e.hasClass("ui-datepicker-other-month"))return o(e,t,n);var r=parseInt(e.children("a,span").text(),10);return new Date(n,t,r)}function o(e,t,n){var r,a=e.parent(),o=a.children("td");if(a.is(":first-child")){var c=a.children("td:not(.ui-datepicker-other-month)").first();return r=i(c,t,n),r.setDate(o.index(e)-o.index(c)+1),r}var s=a.children("td:not(.ui-datepicker-other-month)").last();return r=i(s,t,n),r.setDate(r.getDate()+o.index(e)-o.index(s)),r}function c(){var e=tr(n.value),t=e.find("td[data-month]"),r=parseInt(t.attr("data-month"),10),i=parseInt(t.attr("data-year"),10);return[r,i]}function s(){var e=tr(n.value),t=e.find(".ui-datepicker-calendar"),a=c(),o=t.find("td"),s=o.first(),l=i(s,a[0],a[1]);o.each((function(){r(tr(this),l),l.setDate(l.getDate()+1)}))}function l(){var t=e.viewDate;if(!t)return!1;if(!(t instanceof Date))try{t=P(t)}catch(a){return!1}var r=tr(n.value),i=c();return(i[0]!==t.getMonth()||i[1]!==t.getFullYear())&&(r.datepicker("setDate",t),!0)}function u(){var e=tr(n.value);e.find("td[data-event]").off("click"),e.find(".ui-state-active").removeClass("ui-state-active"),e.find(".ui-datepicker-current-day").removeClass("ui-datepicker-current-day"),e.find(".ui-datepicker-prev,.ui-datepicker-next").attr("href","")}function d(){var t=tr(n.value),r=e.stepMonths||Zn;if(t.datepicker("option","stepMonths")===r)return!1;var i=tr(".ui-datepicker-month",t).val(),a=tr(".ui-datepicker-year",t).val();return t.datepicker("option","stepMonths",r).datepicker("setDate",new Date(a,i)),u(),!0}function f(){var t=tr(n.value);t.find(".ui-datepicker-month").attr("disabled",e.disableMonthDropdown)}function p(){if(tr(this).hasClass("ui-state-hover")){var e=tr(this).parent(),t=e.parent();e.is(":first-child")?t.find("a").first().click():t.find("a").last().click()}}function m(){f(),s()}return Object(a["watch"])((function(){return Kn({},e)}),(function(e,t){var n=!1;["selectedDateStart","selectedDateEnd","highlightedDateStart","highlightedDateEnd"].forEach((function(r){n||(!e[r]&&t[r]&&(n=!0),e[r]&&!t[r]&&(n=!0),e[r]&&t[r]&&e[r].getTime()!==t[r].getTime()&&(n=!0))})),e.viewDate!==t.viewDate&&l()&&(n=!0),e.stepMonths!==t.stepMonths&&d(),e.enableDisableMonthDropdown!==t.enableDisableMonthDropdown&&f(),n&&s()})),Object(a["onMounted"])((function(){var r=tr(n.value),a=e.options||{},o=Kn(Kn(Kn({},j.getBaseDatePickerOptions()),a),{},{onChangeMonthYear:function(){setTimeout((function(){u()}))}});r.datepicker(o),r.on("mouseover","tbody td a",(function(e){e.originalEvent&&s()})),r.on("mouseenter","tbody td",(function(){var e=c(),n=tr(this),r=i(n,e[0],e[1]);t.emit("cellHover",{date:r,$cell:n})})),r.on("mouseout","tbody td a",(function(){s()})),r.on("mouseleave","table",(function(){return t.emit("cellHoverLeave")})).on("mouseenter","thead",(function(){return t.emit("cellHoverLeave")})),r.on("click","tbody td.ui-datepicker-other-month",(function(){return p()})),r.on("click",(function(e){e.preventDefault();var t=tr(e.target).closest("a");(t.is(".ui-datepicker-next")||t.is(".ui-datepicker-prev"))&&m()})),r.on("click","td[data-month]",(function(e){var n=tr(e.target).closest("td"),r=parseInt(n.attr("data-month"),10),i=parseInt(n.attr("data-year"),10),a=parseInt(n.children("a,span").text(),10);t.emit("dateSelect",{date:new Date(i,r,a)})}));var h=d();l(),f(),h||u(),s()})),{root:n}}});nr.render=Wn;var rr=nr,ir=(wt({component:rr,scope:{selectedDateStart:{angularJsBind:"<"},selectedDateEnd:{angularJsBind:"<"},highlightedDateStart:{angularJsBind:"<"},highlightedDateEnd:{angularJsBind:"<"},viewDate:{angularJsBind:"<"},stepMonths:{angularJsBind:"<"},disableMonthDropdown:{angularJsBind:"<"},options:{angularJsBind:"<"},cellHover:{angularJsBind:"&"},cellHoverLeave:{angularJsBind:"&"},dateSelect:{angularJsBind:"&"}},directiveName:"piwikDatePicker",events:{"cell-hover":function(e,t,n,r,i){i()},"cell-hover-leave":function(e,t,n,r,i){i()},"date-select":function(e,t,n,r,i){i()}},$inject:["$timeout"]}),{id:"calendarRangeFrom"}),ar={id:"calendarRangeTo"};
+ */function Ln(){return On}Ln.$inject=[],angular.module("piwikApp.service").factory("piwikComparisonsService",Ln);jt({component:$n,directiveName:"piwikComparisons",restrict:"E"});var Hn={ref:"root",class:"menuDropdown"},Fn=["title"],_n=["innerHTML"],Un=Object(o["createElementVNode"])("span",{class:"icon-arrow-bottom"},null,-1),Rn={class:"items"},qn={key:0,class:"search"},Jn=["placeholder"],zn=["title"],Gn=["title"];function Qn(e,t,n,r,i,a){var c=Object(o["resolveDirective"])("focus-if"),l=Object(o["resolveDirective"])("focus-anywhere-but-here");return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Hn,[Object(o["createElementVNode"])("span",{class:"title",onClick:t[0]||(t[0]=function(t){return e.showItems=!e.showItems}),title:e.tooltip},[Object(o["createElementVNode"])("span",{innerHTML:e.$sanitize(this.actualMenuTitle)},null,8,_n),Un],8,Fn),Object(o["withDirectives"])(Object(o["createElementVNode"])("div",Rn,[e.showSearch&&e.showItems?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",qn,[Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.searchTerm=t}),onKeydown:t[2]||(t[2]=function(t){return e.onSearchTermKeydown(t)}),placeholder:e.translate("General_Search")},null,40,Jn),[[o["vModelText"],e.searchTerm],[c,{},e.showItems]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("img",{class:"search_ico",src:"plugins/Morpheus/images/search_ico.png",title:e.translate("General_Search")},null,8,zn),[[o["vShow"],!e.searchTerm]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("img",{onClick:t[3]||(t[3]=function(t){e.searchTerm="",e.searchItems("")}),class:"reset",src:"plugins/CoreHome/images/reset_search.png",title:e.translate("General_Clear")},null,8,Gn),[[o["vShow"],e.searchTerm]])])):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",{onClick:t[4]||(t[4]=function(t){return e.selectItem(t)})},[Object(o["renderSlot"])(e.$slots,"default")])],512),[[o["vShow"],e.showItems]])],512)),[[l,{blur:e.lostFocus}]])}var Wn=window,Yn=Wn.$,Kn=Object(o["defineComponent"])({props:{menuTitle:String,tooltip:String,showSearch:Boolean,menuTitleChangeOnClick:String},directives:{FocusAnywhereButHere:_e,FocusIf:qe},emits:["afterSelect"],watch:{menuTitle:function(){this.actualMenuTitle=this.menuTitle}},data:function(){return{showItems:!1,searchTerm:"",actualMenuTitle:this.menuTitle}},methods:{lostFocus:function(){this.showItems=!1},selectItem:function(e){var t=e.target.classList;!t.contains("item")||t.contains("disabled")||t.contains("separator")||(!1!==this.menuTitleChangeOnClick&&(this.actualMenuTitle=e.target.textContent.replace(/[\u0000-\u2666]/g,(function(e){return"&#".concat(e.charCodeAt(0),";")}))),this.showItems=!1,Yn(this.$slots.default()).find(".item").removeClass("active"),t.add("active"),this.$emit("afterSelect"))},onSearchTermKeydown:function(){var e=this;setTimeout((function(){e.searchItems(e.searchTerm)}))},searchItems:function(e){var t=e.toLowerCase();Yn(this.$refs.root).find(".item").each((function(e,n){var r=Yn(n);-1===r.text().toLowerCase().indexOf(t)?r.hide():r.show()}))}}});Kn.render=Qn;var Xn=Kn,Zn=(jt({component:Xn,scope:{menuTitle:{angularJsBind:"@"},tooltip:{angularJsBind:"@"},showSearch:{angularJsBind:"="},menuTitleChangeOnClick:{angularJsBind:"="}},directiveName:"piwikMenudropdown",transclude:!0,events:{"after-select":function(e,t){setTimeout((function(){t.$apply()}),0)}}}),{ref:"root"});
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function or(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("DatePicker");return Object(a["openBlock"])(),Object(a["createElementBlock"])(a["Fragment"],null,[Object(a["createElementVNode"])("div",ir,[Object(a["createElementVNode"])("h6",null,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_DateRangeFrom"))+" ",1),Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text",id:"inputCalendarFrom",name:"inputCalendarFrom",class:"browser-default","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.startDateText=t}),onChange:t[1]||(t[1]=function(t){return e.onRangeInputChanged("from",t)}),onKeyup:t[2]||(t[2]=function(t){return e.handleEnterPress(t)})},null,544),[[a["vModelText"],e.startDateText]])]),Object(a["createVNode"])(c,{id:"calendarFrom","view-date":e.startDate,"selected-date-start":e.fromPickerSelectedDates[0],"selected-date-end":e.fromPickerSelectedDates[1],"highlighted-date-start":e.fromPickerHighlightedDates[0],"highlighted-date-end":e.fromPickerHighlightedDates[1],onDateSelect:t[3]||(t[3]=function(t){return e.setStartRangeDate(t.date)}),onCellHover:t[4]||(t[4]=function(t){return e.fromPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[5]||(t[5]=function(t){return e.fromPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])]),Object(a["createElementVNode"])("div",ar,[Object(a["createElementVNode"])("h6",null,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_DateRangeTo"))+" ",1),Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text",id:"inputCalendarTo",name:"inputCalendarTo",class:"browser-default","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.endDateText=t}),onChange:t[7]||(t[7]=function(t){return e.onRangeInputChanged("to",t)}),onKeyup:t[8]||(t[8]=function(t){return e.handleEnterPress(t)})},null,544),[[a["vModelText"],e.endDateText]])]),Object(a["createVNode"])(c,{id:"calendarTo","view-date":e.endDate,"selected-date-start":e.toPickerSelectedDates[0],"selected-date-end":e.toPickerSelectedDates[1],"highlighted-date-start":e.toPickerHighlightedDates[0],"highlighted-date-end":e.toPickerHighlightedDates[1],onDateSelect:t[9]||(t[9]=function(t){return e.setEndRangeDate(t.date)}),onCellHover:t[10]||(t[10]=function(t){return e.toPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[11]||(t[11]=function(t){return e.toPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])])],64)}var cr=Object(a["defineComponent"])({props:{startDate:String,endDate:String},components:{DatePicker:rr},data:function(){var e=null;try{e=P(this.startDate)}catch(n){}var t=null;try{t=P(this.endDate)}catch(n){}return{fromPickerSelectedDates:[e,e],toPickerSelectedDates:[t,t],fromPickerHighlightedDates:[null,null],toPickerHighlightedDates:[null,null],startDateText:this.startDate,endDateText:this.endDate}},emits:["rangeChange","submit"],watch:{startDate:function(){this.startDateText=this.startDate,this.setStartRangeDateFromStr(this.startDate)},endDate:function(){this.endDateText=this.endDate,this.setEndRangeDateFromStr(this.endDate)}},mounted:function(){this.rangeChanged()},methods:{setStartRangeDate:function(e){this.fromPickerSelectedDates=[e,e],this.rangeChanged()},setEndRangeDate:function(e){this.toPickerSelectedDates=[e,e],this.rangeChanged()},onRangeInputChanged:function(e,t){"from"===e?this.setStartRangeDateFromStr(t.target.value):this.setEndRangeDateFromStr(t.target.value)},getNewHighlightedDates:function(e,t){return t.hasClass("ui-datepicker-unselectable")?null:[e,e]},handleEnterPress:function(e){13===e.keyCode&&this.$emit("submit",{start:this.startDate,end:this.endDate})},setStartRangeDateFromStr:function(e){var t;try{t=P(e)}catch(n){this.startDateText=this.startDate}t&&(this.fromPickerSelectedDates=[t,t]),this.rangeChanged()},setEndRangeDateFromStr:function(e){var t;try{t=P(e)}catch(n){this.endDateText=this.endDate}t&&(this.toPickerSelectedDates=[t,t]),this.rangeChanged()},rangeChanged:function(){this.$emit("rangeChange",{start:C(this.fromPickerSelectedDates[0]),end:C(this.toPickerSelectedDates[0])})}}});cr.render=or;var sr=cr;
+ */function er(e,t,n,r,i,a){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Zn,null,512)}function tr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tr(Object(n),!0).forEach((function(t){rr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function rr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ir=1,or=window,ar=or.$,cr=Object(o["defineComponent"])({props:{selectedDateStart:Date,selectedDateEnd:Date,highlightedDateStart:Date,highlightedDateEnd:Date,viewDate:[String,Date],stepMonths:Number,disableMonthDropdown:Boolean,options:Object},emits:["cellHover","cellHoverLeave","dateSelect"],setup:function(e,t){var n=Object(o["ref"])(null);function r(t,n){var r=t.children("a");if(e.selectedDateStart&&e.selectedDateEnd&&n>=e.selectedDateStart&&n<=e.selectedDateEnd?t.addClass("ui-datepicker-current-period"):t.removeClass("ui-datepicker-current-period"),e.highlightedDateStart&&e.highlightedDateEnd&&n>=e.highlightedDateStart&&n<=e.highlightedDateEnd){var i=r.length?r:t;i.addClass("ui-state-hover")}else t.removeClass("ui-state-hover"),r.removeClass("ui-state-hover")}function i(e,t,n){if(e.hasClass("ui-datepicker-other-month"))return a(e,t,n);var r=parseInt(e.children("a,span").text(),10);return new Date(n,t,r)}function a(e,t,n){var r,o=e.parent(),a=o.children("td");if(o.is(":first-child")){var c=o.children("td:not(.ui-datepicker-other-month)").first();return r=i(c,t,n),r.setDate(a.index(e)-a.index(c)+1),r}var l=o.children("td:not(.ui-datepicker-other-month)").last();return r=i(l,t,n),r.setDate(r.getDate()+a.index(e)-a.index(l)),r}function c(){var e=ar(n.value),t=e.find("td[data-month]"),r=parseInt(t.attr("data-month"),10),i=parseInt(t.attr("data-year"),10);return[r,i]}function l(){var e=ar(n.value),t=e.find(".ui-datepicker-calendar"),o=c(),a=t.find("td"),l=a.first(),s=i(l,o[0],o[1]);a.each((function(){r(ar(this),s),s.setDate(s.getDate()+1)}))}function s(){var t=e.viewDate;if(!t)return!1;if(!(t instanceof Date))try{t=P(t)}catch(o){return!1}var r=ar(n.value),i=c();return(i[0]!==t.getMonth()||i[1]!==t.getFullYear())&&(r.datepicker("setDate",t),!0)}function u(){var e=ar(n.value);e.find("td[data-event]").off("click"),e.find(".ui-state-active").removeClass("ui-state-active"),e.find(".ui-datepicker-current-day").removeClass("ui-datepicker-current-day"),e.find(".ui-datepicker-prev,.ui-datepicker-next").attr("href","")}function d(){var t=ar(n.value),r=e.stepMonths||ir;if(t.datepicker("option","stepMonths")===r)return!1;var i=ar(".ui-datepicker-month",t).val(),o=ar(".ui-datepicker-year",t).val();return t.datepicker("option","stepMonths",r).datepicker("setDate",new Date(o,i)),u(),!0}function f(){var t=ar(n.value);t.find(".ui-datepicker-month").attr("disabled",e.disableMonthDropdown)}function m(){if(ar(this).hasClass("ui-state-hover")){var e=ar(this).parent(),t=e.parent();e.is(":first-child")?t.find("a").first().click():t.find("a").last().click()}}function p(){f(),l()}return Object(o["watch"])((function(){return nr({},e)}),(function(e,t){var n=!1;["selectedDateStart","selectedDateEnd","highlightedDateStart","highlightedDateEnd"].forEach((function(r){n||(!e[r]&&t[r]&&(n=!0),e[r]&&!t[r]&&(n=!0),e[r]&&t[r]&&e[r].getTime()!==t[r].getTime()&&(n=!0))})),e.viewDate!==t.viewDate&&s()&&(n=!0),e.stepMonths!==t.stepMonths&&d(),e.enableDisableMonthDropdown!==t.enableDisableMonthDropdown&&f(),n&&l()})),Object(o["onMounted"])((function(){var r=ar(n.value),o=e.options||{},a=nr(nr(nr({},S.getBaseDatePickerOptions()),o),{},{onChangeMonthYear:function(){setTimeout((function(){u()}))}});r.datepicker(a),r.on("mouseover","tbody td a",(function(e){e.originalEvent&&l()})),r.on("mouseenter","tbody td",(function(){var e=c(),n=ar(this),r=i(n,e[0],e[1]);t.emit("cellHover",{date:r,$cell:n})})),r.on("mouseout","tbody td a",(function(){l()})),r.on("mouseleave","table",(function(){return t.emit("cellHoverLeave")})).on("mouseenter","thead",(function(){return t.emit("cellHoverLeave")})),r.on("click","tbody td.ui-datepicker-other-month",(function(){return m()})),r.on("click",(function(e){e.preventDefault();var t=ar(e.target).closest("a");(t.is(".ui-datepicker-next")||t.is(".ui-datepicker-prev"))&&p()})),r.on("click","td[data-month]",(function(e){var n=ar(e.target).closest("td"),r=parseInt(n.attr("data-month"),10),i=parseInt(n.attr("data-year"),10),o=parseInt(n.children("a,span").text(),10);t.emit("dateSelect",{date:new Date(i,r,o)})}));var h=d();s(),f(),h||u(),l()})),{root:n}}});cr.render=er;var lr=cr,sr=(jt({component:lr,scope:{selectedDateStart:{angularJsBind:"<"},selectedDateEnd:{angularJsBind:"<"},highlightedDateStart:{angularJsBind:"<"},highlightedDateEnd:{angularJsBind:"<"},viewDate:{angularJsBind:"<"},stepMonths:{angularJsBind:"<"},disableMonthDropdown:{angularJsBind:"<"},options:{angularJsBind:"<"},cellHover:{angularJsBind:"&"},cellHoverLeave:{angularJsBind:"&"},dateSelect:{angularJsBind:"&"}},directiveName:"piwikDatePicker",events:{"cell-hover":function(e,t,n,r,i){i()},"cell-hover-leave":function(e,t,n,r,i){i()},"date-select":function(e,t,n,r,i){i()}},$inject:["$timeout"]}),{id:"calendarRangeFrom"}),ur={id:"calendarRangeTo"};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */wt({component:sr,scope:{startDate:{angularJsBind:"<"},endDate:{angularJsBind:"<"},rangeChange:{angularJsBind:"&"},submit:{angularJsBind:"&"}},directiveName:"piwikDateRangePicker",restrict:"E"});function lr(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("DatePicker");return Object(a["openBlock"])(),Object(a["createBlock"])(c,{"selected-date-start":e.selectedDates[0],"selected-date-end":e.selectedDates[1],"highlighted-date-start":e.highlightedDates[0],"highlighted-date-end":e.highlightedDates[1],"view-date":e.viewDate,"step-months":"year"===e.period?12:1,"disable-month-dropdown":"year"===e.period,onCellHover:t[0]||(t[0]=function(t){return e.onHoverNormalCell(t.date,t.$cell)}),onCellHoverLeave:t[1]||(t[1]=function(t){return e.onHoverLeaveNormalCells()}),onDateSelect:t[2]||(t[2]=function(t){return e.onDateSelected(t.date)})},null,8,["selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end","view-date","step-months","disable-month-dropdown"])}var ur=new Date(j.minDateYear,j.minDateMonth-1,j.minDateDay),dr=new Date(j.maxDateYear,j.maxDateMonth-1,j.maxDateDay),fr=Object(a["defineComponent"])({props:{period:String,date:[String,Date]},components:{DatePicker:rr},emits:["select"],setup:function(e,t){var n=Object(a["ref"])(e.date),r=Object(a["ref"])([null,null]),i=Object(a["ref"])([null,null]);function o(t){var n=f.get(e.period).parse(t).getDateRange();return n[0]=ur<n[0]?n[0]:ur,n[1]=dr>n[1]?n[1]:dr,n}function c(t,n){var r=t<ur||t>dr,a=n.hasClass("ui-datepicker-other-month")&&("month"===e.period||"day"===e.period);i.value=r||a?[null,null]:o(t)}function s(){i.value=[null,null]}function l(e){t.emit("select",{date:e})}function u(){if(!e.period||!e.date)return r.value=[null,null],void(n.value=null);r.value=o(e.date),n.value=P(e.date)}return Object(a["watch"])(e,u),u(),{selectedDates:r,highlightedDates:i,viewDate:n,onHoverNormalCell:c,onHoverLeaveNormalCells:s,onDateSelected:l}}});fr.render=lr;var pr=fr,mr=(wt({component:pr,scope:{period:{angularJsBind:"<"},date:{angularJsBind:"<"},select:{angularJsBind:"&"}},directiveName:"piwikPeriodDatePicker",restrict:"E"}),["value","name"]),hr=["title"],vr=["textContent"],gr={key:1,class:"placeholder"},br={class:"dropdown"},yr={class:"custom_select_search"},wr=["placeholder"],Or={key:0},Sr={class:"custom_select_container"},kr=["onClick"],jr=["innerHTML","href","title"],Dr={class:"ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all\n siteSelect"},Cr={class:"ui-menu-item"},Er={class:"ui-corner-all",tabindex:"-1"},Pr={key:1};
+ */function dr(e,t,n,r,i,a){var c=Object(o["resolveComponent"])("DatePicker");return Object(o["openBlock"])(),Object(o["createElementBlock"])(o["Fragment"],null,[Object(o["createElementVNode"])("div",sr,[Object(o["createElementVNode"])("h6",null,[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.translate("General_DateRangeFrom"))+" ",1),Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text",id:"inputCalendarFrom",name:"inputCalendarFrom",class:"browser-default","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.startDateText=t}),onChange:t[1]||(t[1]=function(t){return e.onRangeInputChanged("from",t)}),onKeyup:t[2]||(t[2]=function(t){return e.handleEnterPress(t)})},null,544),[[o["vModelText"],e.startDateText]])]),Object(o["createVNode"])(c,{id:"calendarFrom","view-date":e.startDate,"selected-date-start":e.fromPickerSelectedDates[0],"selected-date-end":e.fromPickerSelectedDates[1],"highlighted-date-start":e.fromPickerHighlightedDates[0],"highlighted-date-end":e.fromPickerHighlightedDates[1],onDateSelect:t[3]||(t[3]=function(t){return e.setStartRangeDate(t.date)}),onCellHover:t[4]||(t[4]=function(t){return e.fromPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[5]||(t[5]=function(t){return e.fromPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])]),Object(o["createElementVNode"])("div",ur,[Object(o["createElementVNode"])("h6",null,[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.translate("General_DateRangeTo"))+" ",1),Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text",id:"inputCalendarTo",name:"inputCalendarTo",class:"browser-default","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.endDateText=t}),onChange:t[7]||(t[7]=function(t){return e.onRangeInputChanged("to",t)}),onKeyup:t[8]||(t[8]=function(t){return e.handleEnterPress(t)})},null,544),[[o["vModelText"],e.endDateText]])]),Object(o["createVNode"])(c,{id:"calendarTo","view-date":e.endDate,"selected-date-start":e.toPickerSelectedDates[0],"selected-date-end":e.toPickerSelectedDates[1],"highlighted-date-start":e.toPickerHighlightedDates[0],"highlighted-date-end":e.toPickerHighlightedDates[1],onDateSelect:t[9]||(t[9]=function(t){return e.setEndRangeDate(t.date)}),onCellHover:t[10]||(t[10]=function(t){return e.toPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[11]||(t[11]=function(t){return e.toPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])])],64)}var fr=Object(o["defineComponent"])({props:{startDate:String,endDate:String},components:{DatePicker:lr},data:function(){var e=null;try{e=P(this.startDate)}catch(n){}var t=null;try{t=P(this.endDate)}catch(n){}return{fromPickerSelectedDates:[e,e],toPickerSelectedDates:[t,t],fromPickerHighlightedDates:[null,null],toPickerHighlightedDates:[null,null],startDateText:this.startDate,endDateText:this.endDate}},emits:["rangeChange","submit"],watch:{startDate:function(){this.startDateText=this.startDate,this.setStartRangeDateFromStr(this.startDate)},endDate:function(){this.endDateText=this.endDate,this.setEndRangeDateFromStr(this.endDate)}},mounted:function(){this.rangeChanged()},methods:{setStartRangeDate:function(e){this.fromPickerSelectedDates=[e,e],this.rangeChanged()},setEndRangeDate:function(e){this.toPickerSelectedDates=[e,e],this.rangeChanged()},onRangeInputChanged:function(e,t){"from"===e?this.setStartRangeDateFromStr(t.target.value):this.setEndRangeDateFromStr(t.target.value)},getNewHighlightedDates:function(e,t){return t.hasClass("ui-datepicker-unselectable")?null:[e,e]},handleEnterPress:function(e){13===e.keyCode&&this.$emit("submit",{start:this.startDate,end:this.endDate})},setStartRangeDateFromStr:function(e){var t;try{t=P(e)}catch(n){this.startDateText=this.startDate}t&&(this.fromPickerSelectedDates=[t,t]),this.rangeChanged()},setEndRangeDateFromStr:function(e){var t;try{t=P(e)}catch(n){this.endDateText=this.endDate}t&&(this.toPickerSelectedDates=[t,t]),this.rangeChanged()},rangeChanged:function(){this.$emit("rangeChange",{start:D(this.fromPickerSelectedDates[0]),end:D(this.toPickerSelectedDates[0])})}}});fr.render=dr;var mr=fr;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function Tr(e,t,n,r,i,o){var c,s,l,u,d=Object(a["resolveComponent"])("AllSitesLink"),f=Object(a["resolveDirective"])("focus-if"),p=Object(a["resolveDirective"])("focus-anywhere-but-here");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["siteSelector piwikSelector borderedControl",{expanded:e.showSitesList,disabled:!e.hasMultipleSites}])},[e.name?(Object(a["openBlock"])(),Object(a["createElementBlock"])("input",{key:0,type:"hidden",value:null===(c=e.selectedSite)||void 0===c?void 0:c.id,name:e.name},null,8,mr)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("a",{ref:"selectorLink",onClick:t[0]||(t[0]=function(){return e.onClickSelector&&e.onClickSelector.apply(e,arguments)}),onKeydown:t[1]||(t[1]=function(t){return e.onPressEnter(t)}),href:"javascript:void(0)",class:Object(a["normalizeClass"])([{loading:e.isLoading},"title"]),tabindex:"4",title:e.selectorLinkTitle},[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])(["icon icon-arrow-bottom",{iconHidden:e.isLoading,collapsed:!e.showSitesList}])},null,2),Object(a["createElementVNode"])("span",null,[null!==(s=e.selectedSite)&&void 0!==s&&s.name||!e.placeholder?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",{key:0,textContent:Object(a["toDisplayString"])((null===(l=e.selectedSite)||void 0===l?void 0:l.name)||e.firstSiteName)},null,8,vr)):Object(a["createCommentVNode"])("",!0),null!==(u=e.selectedSite)&&void 0!==u&&u.name||!e.placeholder?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",gr,Object(a["toDisplayString"])(e.placeholder),1))])],42,hr),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",br,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",yr,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text",onClick:t[2]||(t[2]=function(t){e.searchTerm="",e.loadInitialSites()}),"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.searchTerm=t}),tabindex:"4",class:"websiteSearch inp browser-default",placeholder:e.translate("General_Search")},null,8,wr),[[a["vModelText"],e.searchTerm],[f,{},e.shouldFocusOnSearch]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{title:"Clear",onClick:t[4]||(t[4]=function(t){e.searchTerm="",e.loadInitialSites()}),class:"reset",src:"plugins/CoreHome/images/reset_search.png"},null,512),[[a["vShow"],e.searchTerm]])],512),[[a["vShow"],e.autocompleteMinSites<=e.sites.length||e.searchTerm]]),"top"===e.allSitesLocation&&e.showAllSitesItem?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Or,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[5]||(t[5]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Sr,[Object(a["createElementVNode"])("ul",{class:"custom_select_ul_list",onClick:t[7]||(t[7]=function(t){return e.showSitesList=!1})},[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.sites,(function(n){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{onClick:function(t){return e.switchSite(n,t)},key:n.idsite},[Object(a["createElementVNode"])("a",{onClick:t[6]||(t[6]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.getMatchedSiteName(n.name)),tabindex:"4",href:e.getUrlForSiteId(n.idsite),title:n.name},null,8,jr)],8,kr)),[[a["vShow"],!(!e.showSelectedSite&&e.activeSiteId===n.idsite)]])})),128))]),Object(a["withDirectives"])(Object(a["createElementVNode"])("ul",Dr,[Object(a["createElementVNode"])("li",Cr,[Object(a["createElementVNode"])("a",Er,Object(a["toDisplayString"])(e.translate("SitesManager_NotFound")+" "+e.searchTerm),1)])],512),[[a["vShow"],!e.sites.length&&e.searchTerm]])]),"bottom"===e.allSitesLocation&&e.showAllSitesItem?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Pr,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[8]||(t[8]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0)],512),[[a["vShow"],e.showSitesList]])],2)),[[p,{blur:e.onBlur}]])}var Ir=["innerHTML","href"];function xr(e,t,n,r,i,o){var c=this;return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{onClick:t[1]||(t[1]=function(e){return c.onClick(e)}),class:"custom_select_all"},[Object(a["createElementVNode"])("a",{onClick:t[0]||(t[0]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.allSitesText),tabindex:"4",href:e.href},null,8,Ir)])}var Nr=Object(a["defineComponent"])({props:{href:String,allSitesText:String},emits:["click"],methods:{onClick:function(e){this.$emit("click",e)}}});Nr.render=xr;var Br=Nr;function Mr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ar(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Mr(Object(n),!0).forEach((function(t){Hr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Mr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Vr(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Lr(e,t,n){return t&&Vr(e.prototype,t),n&&Vr(e,n),e}function Hr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */jt({component:mr,scope:{startDate:{angularJsBind:"<"},endDate:{angularJsBind:"<"},rangeChange:{angularJsBind:"&"},submit:{angularJsBind:"&"}},directiveName:"piwikDateRangePicker",restrict:"E"});function pr(e,t,n,r,i,a){var c=Object(o["resolveComponent"])("DatePicker");return Object(o["openBlock"])(),Object(o["createBlock"])(c,{"selected-date-start":e.selectedDates[0],"selected-date-end":e.selectedDates[1],"highlighted-date-start":e.highlightedDates[0],"highlighted-date-end":e.highlightedDates[1],"view-date":e.viewDate,"step-months":"year"===e.period?12:1,"disable-month-dropdown":"year"===e.period,onCellHover:t[0]||(t[0]=function(t){return e.onHoverNormalCell(t.date,t.$cell)}),onCellHoverLeave:t[1]||(t[1]=function(t){return e.onHoverLeaveNormalCells()}),onDateSelect:t[2]||(t[2]=function(t){return e.onDateSelected(t.date)})},null,8,["selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end","view-date","step-months","disable-month-dropdown"])}var hr=new Date(S.minDateYear,S.minDateMonth-1,S.minDateDay),vr=new Date(S.maxDateYear,S.maxDateMonth-1,S.maxDateDay),gr=Object(o["defineComponent"])({props:{period:String,date:[String,Date]},components:{DatePicker:lr},emits:["select"],setup:function(e,t){var n=Object(o["ref"])(e.date),r=Object(o["ref"])([null,null]),i=Object(o["ref"])([null,null]);function a(t){var n=f.get(e.period).parse(t).getDateRange();return n[0]=hr<n[0]?n[0]:hr,n[1]=vr>n[1]?n[1]:vr,n}function c(t,n){var r=t<hr||t>vr,o=n.hasClass("ui-datepicker-other-month")&&("month"===e.period||"day"===e.period);i.value=r||o?[null,null]:a(t)}function l(){i.value=[null,null]}function s(e){t.emit("select",{date:e})}function u(){if(!e.period||!e.date)return r.value=[null,null],void(n.value=null);r.value=a(e.date),n.value=P(e.date)}return Object(o["watch"])(e,u),u(),{selectedDates:r,highlightedDates:i,viewDate:n,onHoverNormalCell:c,onHoverLeaveNormalCells:l,onDateSelected:s}}});gr.render=pr;var br=gr,yr=(jt({component:br,scope:{period:{angularJsBind:"<"},date:{angularJsBind:"<"},select:{angularJsBind:"&"}},directiveName:"piwikPeriodDatePicker",restrict:"E"}),["value","name"]),wr=["title"],Or=["textContent"],jr={key:1,class:"placeholder"},kr={class:"dropdown"},Sr={class:"custom_select_search"},Cr=["placeholder"],Dr={key:0},Er={class:"custom_select_container"},Pr=["onClick"],Tr=["innerHTML","href","title"],Ir={class:"ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all\n siteSelect"},Vr={class:"ui-menu-item"},xr={class:"ui-corner-all",tabindex:"-1"},Nr={key:1};
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var Fr=function(){function e(){var t=this;$r(this,e),Hr(this,"state",Object(a["reactive"])({initialSites:[],isInitialized:!1})),Hr(this,"currentRequest",void 0),Hr(this,"limitRequest",void 0),Hr(this,"initialSites",Object(a["computed"])((function(){return Object(a["readonly"])(t.state.initialSites)})))}return Lr(e,[{key:"loadInitialSites",value:function(){var e=this;return this.state.isInitialized?Promise.resolve(Object(a["readonly"])(this.state.initialSites)):this.searchSite("%").then((function(t){return e.state.isInitialized=!0,e.state.initialSites=t,Object(a["readonly"])(t)}))}},{key:"loadSite",value:function(e){"all"===e?Oe.updateUrl(Ar(Ar({},Oe.urlParsed.value),{},{module:"MultiSites",action:"index",date:Oe.parsed.value.date,period:Oe.parsed.value.period})):Oe.updateUrl(Ar(Ar({},Oe.parsed.value),{},{segment:"",idSite:e}))}},{key:"searchSite",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e?(this.currentRequest&&this.currentRequest.abort(),this.limitRequest||(this.limitRequest=Ne.fetch({method:"SitesManager.getNumWebsitesToDisplayPerPage"})),this.limitRequest.then((function(r){var i=r.value,a="SitesManager.getPatternMatchSites";return n&&(a="SitesManager.getSitesWithAdminAccess"),t.currentRequest=Ne.fetch({method:a,limit:i,pattern:e}),t.currentRequest})).then((function(e){return e?t.processWebsitesList(e):null})).finally((function(){t.currentRequest=null}))):this.loadInitialSites()}},{key:"processWebsitesList",value:function(e){var t=e;return t&&t.length?(t=t.map((function(e){return Ar(Ar({},e),{},{name:e.group?"[".concat(e.group,"] ").concat(e.name):e.name})})),t.sort((function(e,t){return e.name.toLowerCase()<t.name.toLowerCase()?-1:e.name.toLowerCase()>t.name.toLowerCase()?1:0})),t):[]}}]),e}(),_r=new Fr,Rr=300;function Ur(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Rr;return function(){for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];t&&clearTimeout(t),t=setTimeout((function(){e.apply(void 0,i)}),n)}}function qr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Jr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qr(Object(n),!0).forEach((function(t){Gr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Gr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var zr=Object(a["defineComponent"])({props:{modelValue:{Object:Object,default:{id:j.idSite,name:j.helper.htmlDecode(j.siteName)}},showSelectedSite:{type:Boolean,default:!1},showAllSitesItem:{type:Boolean,default:!0},switchSiteOnSelect:{type:Boolean,default:!0},onlySitesWithAdminAccess:{type:Boolean,default:!1},name:{type:String,default:""},allSitesText:{type:String,default:D("General_MultiSitesSummary")},allSitesLocation:{type:String,default:"bottom"},placeholder:String},emits:["update:modelValue","blur"],components:{AllSitesLink:Br},directives:{FocusAnywhereButHere:_e,FocusIf:qe},watch:{searchTerm:function(){this.onSearchTermChanged()},modelValue:{handler:function(e){this.selectedSite=Jr({},e)},deep:!0}},data:function(){return{searchTerm:"",activeSiteId:j.idSite,showSitesList:!1,isLoading:!1,sites:[],selectedSite:{id:j.idSite,name:j.helper.htmlDecode(j.siteName)},autocompleteMinSites:parseInt(j.config.autocomplete_min_sites,10)}},mounted:function(){var e=this;window.initTopControls(),this.loadInitialSites().then((function(){e.selectedSite&&e.selectedSite.id||!e.sites[0]||(e.selectedSite={id:e.sites[0].idsite,name:e.sites[0].name},e.$emit("update:modelValue",Jr({},e.selectedSite)))}));var t=D("CoreHome_ShortcutWebsiteSelector");j.helper.registerShortcut("w",t,(function(t){t.altKey||(t.preventDefault?t.preventDefault():t.returnValue=!1,e.$refs.selectorLink.click(),e.$refs.selectorLink.focus())}))},computed:{shouldFocusOnSearch:function(){return this.showSitesList&&this.autocompleteMinSites<=this.sites.length||this.searchTerm},selectorLinkTitle:function(){var e;return this.hasMultipleSites?D("CoreHome_ChangeCurrentWebsite",(null===(e=this.selectedSite)||void 0===e?void 0:e.name)||this.firstSiteName):""},hasMultipleSites:function(){return _r.initialSites.value&&_r.initialSites.value.length>1},firstSiteName:function(){return this.sites&&this.sites.length>0?this.sites[0].name:""},urlAllSites:function(){var e=Oe.stringify(Jr(Jr({},Oe.urlParsed.value),{},{module:"MultiSites",action:"index",date:Oe.parsed.value.date,period:Oe.parsed.value.period}));return"?".concat(e)}},created:function(){this.searchSite=Ur(this.searchSite.bind(this))},methods:{onSearchTermChanged:function(){this.searchTerm?(this.isLoading=!0,this.searchSite(this.searchTerm)):(this.isLoading=!1,this.loadInitialSites())},onAllSitesClick:function(e){this.switchSite({idsite:"all",name:this.allSitesText},e),this.showSitesList=!1},switchSite:function(e,t){var n=-1!==navigator.userAgent.indexOf("Mac OS X")?t.metaKey:t.ctrlKey;t&&n&&t.target&&t.target.href?window.open(t.target.href,"_blank"):(this.selectedSite={id:e.idsite,name:e.name},this.$emit("update:modelValue",Jr({},this.selectedSite)),this.switchSiteOnSelect&&this.activeSiteId!==e.idsite&&_r.loadSite(e.idsite))},onBlur:function(){this.showSitesList=!1,this.$emit("blur")},onClickSelector:function(){this.hasMultipleSites&&(this.showSitesList=!this.showSitesList,this.isLoading||this.searchTerm||this.loadInitialSites())},onPressEnter:function(e){"Enter"===e.key&&(e.preventDefault(),this.showSitesList=!this.showSitesList,this.showSitesList&&!this.isLoading&&this.loadInitialSites())},getMatchedSiteName:function(e){var t=e.toUpperCase().indexOf(this.searchTerm.toUpperCase());if(-1===t||this.isLoading)return j.helper.htmlEntities(e);var n=j.helper.htmlEntities(e.substring(0,t)),r=j.helper.htmlEntities(e.substring(t+this.searchTerm.length));return"".concat(n,'<span class="autocompleteMatched">').concat(this.searchTerm,"</span>").concat(r)},loadInitialSites:function(){var e=this;return _r.loadInitialSites().then((function(t){e.sites=t||[]}))},searchSite:function(e){var t=this;this.isLoading=!0,_r.searchSite(e,this.onlySitesWithAdminAccess).then((function(n){e===t.searchTerm&&n&&(t.sites=n)})).finally((function(){t.isLoading=!1}))},getUrlForSiteId:function(e){var t=Oe.stringify(Jr(Jr({},Oe.urlParsed.value),{},{segment:"",idSite:e})),n=Oe.stringify(Jr(Jr({},Oe.hashParsed.value),{},{segment:"",idSite:e}));return"?".concat(t,"#?").concat(n)}}});zr.render=Tr;var Qr=zr;function Wr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Wr(Object(n),!0).forEach((function(t){Kr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Wr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Kr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */function Br(e,t,n,r,i,a){var c,l,s,u,d=Object(o["resolveComponent"])("AllSitesLink"),f=Object(o["resolveDirective"])("focus-if"),m=Object(o["resolveDirective"])("focus-anywhere-but-here");return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:Object(o["normalizeClass"])(["siteSelector piwikSelector borderedControl",{expanded:e.showSitesList,disabled:!e.hasMultipleSites}])},[e.name?(Object(o["openBlock"])(),Object(o["createElementBlock"])("input",{key:0,type:"hidden",value:null===(c=e.modelValue)||void 0===c?void 0:c.id,name:e.name},null,8,yr)):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("a",{ref:"selectorLink",onClick:t[0]||(t[0]=function(){return e.onClickSelector&&e.onClickSelector.apply(e,arguments)}),onKeydown:t[1]||(t[1]=function(t){return e.onPressEnter(t)}),href:"javascript:void(0)",class:Object(o["normalizeClass"])([{loading:e.isLoading},"title"]),tabindex:"4",title:e.selectorLinkTitle},[Object(o["createElementVNode"])("span",{class:Object(o["normalizeClass"])(["icon icon-arrow-bottom",{iconHidden:e.isLoading,collapsed:!e.showSitesList}])},null,2),Object(o["createElementVNode"])("span",null,[null!==(l=e.modelValue)&&void 0!==l&&l.name||!e.placeholder?(Object(o["openBlock"])(),Object(o["createElementBlock"])("span",{key:0,textContent:Object(o["toDisplayString"])((null===(s=e.modelValue)||void 0===s?void 0:s.name)||e.firstSiteName)},null,8,Or)):Object(o["createCommentVNode"])("",!0),null!==(u=e.modelValue)&&void 0!==u&&u.name||!e.placeholder?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("span",jr,Object(o["toDisplayString"])(e.placeholder),1))])],42,wr),Object(o["withDirectives"])(Object(o["createElementVNode"])("div",kr,[Object(o["withDirectives"])(Object(o["createElementVNode"])("div",Sr,[Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text",onClick:t[2]||(t[2]=function(t){e.searchTerm="",e.loadInitialSites()}),"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.searchTerm=t}),tabindex:"4",class:"websiteSearch inp browser-default",placeholder:e.translate("General_Search")},null,8,Cr),[[o["vModelText"],e.searchTerm],[f,{},e.shouldFocusOnSearch]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("img",{title:"Clear",onClick:t[4]||(t[4]=function(t){e.searchTerm="",e.loadInitialSites()}),class:"reset",src:"plugins/CoreHome/images/reset_search.png"},null,512),[[o["vShow"],e.searchTerm]])],512),[[o["vShow"],e.autocompleteMinSites<=e.sites.length||e.searchTerm]]),"top"===e.allSitesLocation&&e.showAllSitesItem?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Dr,[Object(o["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[5]||(t[5]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",Er,[Object(o["createElementVNode"])("ul",{class:"custom_select_ul_list",onClick:t[7]||(t[7]=function(t){return e.showSitesList=!1})},[(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.sites,(function(n,r){return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("li",{onClick:function(t){return e.switchSite(n,t)},key:r},[Object(o["createElementVNode"])("a",{onClick:t[6]||(t[6]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.getMatchedSiteName(n.name)),tabindex:"4",href:e.getUrlForSiteId(n.idsite),title:n.name},null,8,Tr)],8,Pr)),[[o["vShow"],!(!e.showSelectedSite&&e.activeSiteId===n.idsite)]])})),128))]),Object(o["withDirectives"])(Object(o["createElementVNode"])("ul",Ir,[Object(o["createElementVNode"])("li",Vr,[Object(o["createElementVNode"])("a",xr,Object(o["toDisplayString"])(e.translate("SitesManager_NotFound")+" "+e.searchTerm),1)])],512),[[o["vShow"],!e.sites.length&&e.searchTerm]])]),"bottom"===e.allSitesLocation&&e.showAllSitesItem?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Nr,[Object(o["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[8]||(t[8]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(o["createCommentVNode"])("",!0)],512),[[o["vShow"],e.showSitesList]])],2)),[[m,{blur:e.onBlur}]])}var Ar=["innerHTML","href"];function Mr(e,t,n,r,i,a){var c=this;return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{onClick:t[1]||(t[1]=function(e){return c.onClick(e)}),class:"custom_select_all"},[Object(o["createElementVNode"])("a",{onClick:t[0]||(t[0]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.allSitesText),tabindex:"4",href:e.href},null,8,Ar)])}var $r=Object(o["defineComponent"])({props:{href:String,allSitesText:String},emits:["click"],methods:{onClick:function(e){this.$emit("click",e)}}});$r.render=Mr;var Lr=$r;function Hr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Fr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Hr(Object(n),!0).forEach((function(t){qr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Hr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ur(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Rr(e,t,n){return t&&Ur(e.prototype,t),n&&Ur(e,n),e}function qr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */wt({component:Qr,require:"?ngModel",scope:{showSelectedSite:{angularJsBind:"="},showAllSitesItem:{angularJsBind:"="},switchSiteOnSelect:{angularJsBind:"="},onlySitesWithAdminAccess:{angularJsBind:"="},name:{angularJsBind:"@"},allSitesText:{angularJsBind:"@"},allSitesLocation:{angularJsBind:"@"},placeholder:{angularJsBind:"@"},modelValue:{}},$inject:["$timeout"],directiveName:"piwikSiteselector",events:{"update:modelValue":function(e,t,n,r,i,a){(e&&!t.modelValue||!e&&t.modelValue||e.id!==t.modelValue.id)&&(r.attr("siteid",e.id),r.trigger("change",e),a&&a.$setViewValue(e))},blur:function(e,t,n){setTimeout((function(){return n.$apply()}))}},postCreate:function(e,t,n,r,i,a){var o=i;o&&(o.$setViewValue(e.modelValue),o.$render=function(){angular.isString(o.$viewValue)?e.modelValue=JSON.parse(o.$viewValue):e.modelValue=o.$viewValue}),a((function(){r.siteid&&r.sitename&&(e.modelValue={id:r.siteid,name:j.helper.htmlDecode(r.sitename)},o.$setViewValue(Yr({},e.modelValue)))}))}});var Xr={ref:"root",class:"quickAccessInside"},Zr=["title"],ei={class:"dropdown"},ti={class:"no-result"},ni=["onClick"],ri=["onMouseenter","onClick"],ii={class:"quickAccessMatomoSearch"},ai=["onMouseenter","onClick"],oi=["textContent"],ci={class:"quick-access-category helpCategory"},si=["href"];function li(e,t,n,r,i,o){var c=Object(a["resolveDirective"])("focus-if"),s=Object(a["resolveDirective"])("focus-anywhere-but-here");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Xr,[Object(a["withDirectives"])(Object(a["createElementVNode"])("span",{class:"icon-search",onMouseenter:t[0]||(t[0]=function(t){return e.searchActive=!0})},null,544),[[a["vShow"],!(e.searchTerm||e.searchActive)]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{class:"s",onKeydown:t[1]||(t[1]=function(t){return e.onKeypress(t)}),onFocus:t[2]||(t[2]=function(t){return e.searchActive=!0}),"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.searchTerm=t}),type:"text",tabindex:"2",title:e.quickAccessTitle},null,40,Zr),[[a["vModelText"],e.searchTerm],[c,{},e.searchActive]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",ei,[Object(a["withDirectives"])(Object(a["createElementVNode"])("ul",null,[Object(a["createElementVNode"])("li",ti,Object(a["toDisplayString"])(e.translate("General_SearchNoResults")),1)],512),[[a["vShow"],!(e.numMenuItems>0||e.sites.length)]]),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.menuItems,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("ul",{key:t.title},[Object(a["createElementVNode"])("li",{class:"quick-access-category",onClick:function(n){e.searchTerm=t.title,e.searchMenu(e.searchTerm)}},Object(a["toDisplayString"])(t.title),9,ni),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(t.items,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{class:Object(a["normalizeClass"])(["result",{selected:t.menuIndex===e.searchIndex}]),onMouseenter:function(n){return e.searchIndex=t.menuIndex},onClick:function(n){return e.selectMenuItem(t.index)},key:t.index},[Object(a["createElementVNode"])("a",null,Object(a["toDisplayString"])(t.name.trim()),1)],42,ri)})),128))])})),128)),Object(a["createElementVNode"])("ul",ii,[Object(a["withDirectives"])(Object(a["createElementVNode"])("li",{class:"quick-access-category websiteCategory"},Object(a["toDisplayString"])(e.translate("SitesManager_Sites")),513),[[a["vShow"],e.hasSitesSelector&&e.sites.length||e.isLoading]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("li",{class:"no-result"},Object(a["toDisplayString"])(e.translate("MultiSites_LoadingWebsites")),513),[[a["vShow"],e.hasSitesSelector&&e.isLoading]]),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.sites,(function(t,n){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{class:Object(a["normalizeClass"])(["result",{selected:e.numMenuItems+n===e.searchIndex}]),onMouseenter:function(t){return e.searchIndex=e.numMenuItems+n},onClick:function(n){return e.selectSite(t.idsite)},key:t.idsite},[Object(a["createElementVNode"])("a",{textContent:Object(a["toDisplayString"])(t.name)},null,8,oi)],42,ai)),[[a["vShow"],e.hasSitesSelector&&!e.isLoading]])})),128))]),Object(a["createElementVNode"])("ul",null,[Object(a["createElementVNode"])("li",ci,Object(a["toDisplayString"])(e.translate("General_HelpResources")),1),Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{selected:"help"===e.searchIndex},"quick-access-help"]),onMouseenter:t[4]||(t[4]=function(t){return e.searchIndex="help"})},[Object(a["createElementVNode"])("a",{href:"https://matomo.org?s=".concat(encodeURIComponent(e.searchTerm)),target:"_blank"},Object(a["toDisplayString"])(e.translate("CoreHome_SearchOnMatomo",e.searchTerm)),9,si)],34)])],512),[[a["vShow"],e.searchTerm&&e.searchActive]])],512)),[[s,{blur:e.onBlur}]])}function ui(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function di(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ui(Object(n),!0).forEach((function(t){fi(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ui(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fi(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pi(e){var t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=window.$(window).height()&&t.right<=window.$(window).width()}function mi(e){e&&e.scrollIntoView&&e.scrollIntoView()}var hi=Object(a["defineComponent"])({props:{},directives:{FocusAnywhereButHere:_e,FocusIf:qe},watch:{searchActive:function(e){var t=this.$refs.root.parentElement.classList;t.toggle("active",e),t.toggle("expanded",e)}},mounted:function(){var e=this;this.$refs.root.parentElement.classList.add("quick-access","piwikSelector"),"undefined"!==typeof window.initTopControls&&window.initTopControls&&window.initTopControls(),j.helper.registerShortcut("f",D("CoreHome_ShortcutSearch"),(function(t){t.altKey||(t.preventDefault(),mi(e.$refs.root),e.activateSearch())}))},data:function(){var e=!!document.querySelector(".segmentEditorPanel");return{menuItems:[],numMenuItems:0,searchActive:!1,searchTerm:"",searchIndex:0,menuIndexCounter:-1,topMenuItems:null,leftMenuItems:null,segmentItems:null,hasSegmentSelector:e,sites:[],isLoading:!1}},created:function(){this.searchMenu=Ur(this.searchMenu.bind(this))},computed:{hasSitesSelector:function(){return!!document.querySelector(".top_controls [piwik-siteselector]")},quickAccessTitle:function(){var e="",t=[D("CoreHome_MenuEntries")];this.hasSegmentSelector&&t.push(D("CoreHome_Segments")),this.hasSitesSelector&&t.push(D("SitesManager_Sites"));while(t.length)e+=t.shift(),t.length>=2?e+=", ":1===t.length&&(e+=" ".concat(D("General_And")," "));return D("CoreHome_QuickAccessTitle",e)}},emits:["itemSelected","blur"],methods:{onKeypress:function(e){var t=this,n=this.searchTerm&&this.searchActive,r=9===e.which,i=27===e.which;38===e.which?(this.highlightPreviousItem(),e.preventDefault()):40===e.which?(this.highlightNextItem(),e.preventDefault()):13===e.which?this.clickQuickAccessMenuItem():r&&n||i&&n?this.deactivateSearch():setTimeout((function(){t.searchActive=!0,t.searchMenu(t.searchTerm)}))},highlightPreviousItem:function(){this.searchIndex-1<0?this.searchIndex=0:this.searchIndex-=1,this.makeSureSelectedItemIsInViewport()},highlightNextItem:function(){var e=this.$refs.root.querySelectorAll("li.result").length;e<=this.searchIndex+1?this.searchIndex=e-1:this.searchIndex+=1,this.makeSureSelectedItemIsInViewport()},clickQuickAccessMenuItem:function(){var e=this,t=this.getCurrentlySelectedElement();t&&setTimeout((function(){t.click(),e.$emit("itemSelected",t)}),20)},deactivateSearch:function(){this.searchTerm="",this.searchActive=!1,this.$refs.root.querySelector("input").blur()},makeSureSelectedItemIsInViewport:function(){var e=this.getCurrentlySelectedElement();e&&!pi(e)&&mi(e)},getCurrentlySelectedElement:function(){var e=this.$refs.root.querySelectorAll("li.result");return e&&e.length&&e.item(this.searchIndex)?e.item(this.searchIndex):null},searchMenu:function(e){var t=this,n=e.toLowerCase(),r=-1,i={},a=[],o=function(e){var t=di({},e);r+=1,t.menuIndex=r;var n=t.category;n in i||(a.push({title:n,items:[]}),i[n]=a.length-1);var o=i[n];a[o].items.push(t)};this.resetSearchIndex(),this.hasSitesSelector&&(this.isLoading=!0,_r.searchSite(n).then((function(e){t.sites=e})).finally((function(){t.isLoading=!1})));var c=function(e){return-1!==e.name.toLowerCase().indexOf(n)||-1!==e.category.toLowerCase().indexOf(n)};null===this.topMenuItems&&(this.topMenuItems=this.getTopMenuItems()),null===this.leftMenuItems&&(this.leftMenuItems=this.getLeftMenuItems()),null===this.segmentItems&&(this.segmentItems=this.getSegmentItems());var s=this.topMenuItems.filter(c),l=this.leftMenuItems.filter(c),u=this.segmentItems.filter(c);s.forEach(o),l.forEach(o),u.forEach(o),this.numMenuItems=s.length+l.length+u.length,this.menuItems=a},resetSearchIndex:function(){this.searchIndex=0,this.makeSureSelectedItemIsInViewport()},selectSite:function(e){_r.loadSite(e)},selectMenuItem:function(e){var t=document.querySelector("[quick_access='".concat(e,"']"));if(t){this.deactivateSearch();var n=t.getAttribute("href");if(n&&n.length>10&&t&&t.click)try{t.click()}catch(r){window.$(t).click()}else window.$(t).click()}},onBlur:function(){this.searchActive=!1,this.$emit("blur")},activateSearch:function(){this.searchActive=!0},getTopMenuItems:function(){var e=this,t=D("CoreHome_Menu"),n=[];return document.querySelectorAll("nav .sidenav li > a").forEach((function(r){var i=r.textContent.trim();i||(i=r.getAttribute("title").trim()),i&&(n.push({name:i,index:e.menuIndexCounter+=1,category:t}),r.setAttribute("quick_access","".concat(e.menuIndexCounter)))})),n},getLeftMenuItems:function(){var e=this,t=[];return document.querySelectorAll("#secondNavBar .menuTab").forEach((function(n){var r=window.$(n).find("> .item").text().trim();r&&-1!==r.lastIndexOf("\n")&&(r=r.substr(0,r.lastIndexOf("\n")).trim()),window.$(n).find("li .item").each((function(n,i){var a=i.textContent.trim();a&&(t.push({name:a,category:r,index:e.menuIndexCounter+=1}),i.setAttribute("quick_access","".concat(e.menuIndexCounter)))}))})),t},getSegmentItems:function(){var e=this;if(!this.hasSegmentSelector)return[];var t=D("CoreHome_Segments"),n=[];return document.querySelectorAll(".segmentList [data-idsegment]").forEach((function(r){var i=r.querySelector(".segname").textContent.trim();i&&(n.push({name:i,category:t,index:e.menuIndexCounter+=1}),r.setAttribute("quick_access","".concat(e.menuIndexCounter)))})),n}}});hi.render=li;var vi=hi,gi=(wt({component:vi,directiveName:"piwikQuickAccess",events:{itemSelected:function(e,t,n,r,i,a,o){o()},blur:function(e,t,n){setTimeout((function(){return n.$apply()}))}}}),{class:"loadingPiwik"}),bi=Object(a["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1);
+ */var Jr=function(){function e(){var t=this;_r(this,e),qr(this,"state",Object(o["reactive"])({initialSites:[],isInitialized:!1})),qr(this,"currentRequest",void 0),qr(this,"limitRequest",void 0),qr(this,"initialSites",Object(o["computed"])((function(){return Object(o["readonly"])(t.state.initialSites)})))}return Rr(e,[{key:"loadInitialSites",value:function(){var e=this;return this.state.isInitialized?Promise.resolve(Object(o["readonly"])(this.state.initialSites)):this.searchSite("%").then((function(t){return e.state.isInitialized=!0,e.state.initialSites=t,Object(o["readonly"])(t)}))}},{key:"loadSite",value:function(e){"all"===e?Oe.updateUrl(Fr(Fr({},Oe.urlParsed.value),{},{module:"MultiSites",action:"index",date:Oe.parsed.value.date,period:Oe.parsed.value.period})):Oe.updateUrl(Fr(Fr({},Oe.parsed.value),{},{segment:"",idSite:e}))}},{key:"searchSite",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e?(this.currentRequest&&this.currentRequest.abort(),this.limitRequest||(this.limitRequest=xe.fetch({method:"SitesManager.getNumWebsitesToDisplayPerPage"})),this.limitRequest.then((function(r){var i=r.value,o="SitesManager.getPatternMatchSites";return n&&(o="SitesManager.getSitesWithAdminAccess"),t.currentRequest=xe.fetch({method:o,limit:i,pattern:e}),t.currentRequest})).then((function(e){return e?t.processWebsitesList(e):null})).finally((function(){t.currentRequest=null}))):this.loadInitialSites()}},{key:"processWebsitesList",value:function(e){var t=e;return t&&t.length?(t=t.map((function(e){return Fr(Fr({},e),{},{name:e.group?"[".concat(e.group,"] ").concat(e.name):e.name})})),t.sort((function(e,t){return e.name.toLowerCase()<t.name.toLowerCase()?-1:e.name.toLowerCase()>t.name.toLowerCase()?1:0})),t):[]}}]),e}(),zr=new Jr,Gr=300;function Qr(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Gr;return function(){for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];t&&clearTimeout(t),t=setTimeout((function(){e.apply(void 0,i)}),n)}}function Wr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Wr(Object(n),!0).forEach((function(t){Kr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Wr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Kr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Xr=Object(o["defineComponent"])({props:{modelValue:{Object:Object,default:{id:S.idSite,name:S.helper.htmlDecode(S.siteName)}},showSelectedSite:{type:Boolean,default:!1},showAllSitesItem:{type:Boolean,default:!0},switchSiteOnSelect:{type:Boolean,default:!0},onlySitesWithAdminAccess:{type:Boolean,default:!1},name:{type:String,default:""},allSitesText:{type:String,default:C("General_MultiSitesSummary")},allSitesLocation:{type:String,default:"bottom"},placeholder:String},emits:["update:modelValue","blur"],components:{AllSitesLink:Lr},directives:{FocusAnywhereButHere:_e,FocusIf:qe},watch:{searchTerm:function(){this.onSearchTermChanged()}},data:function(){return{searchTerm:"",activeSiteId:S.idSite,showSitesList:!1,isLoading:!1,sites:[],selectedSite:this.modelValue||{id:S.idSite,name:S.helper.htmlDecode(S.siteName)},autocompleteMinSites:parseInt(S.config.autocomplete_min_sites,10)}},mounted:function(){var e=this;window.initTopControls(),this.loadInitialSites().then((function(){e.modelValue&&e.modelValue.id||!e.sites[0]||e.$emit("update:modelValue",{id:e.sites[0].idsite,name:e.sites[0].name})}));var t=C("CoreHome_ShortcutWebsiteSelector");S.helper.registerShortcut("w",t,(function(t){t.altKey||(t.preventDefault?t.preventDefault():t.returnValue=!1,e.$refs.selectorLink.click(),e.$refs.selectorLink.focus())}))},computed:{shouldFocusOnSearch:function(){return this.showSitesList&&this.autocompleteMinSites<=this.sites.length||this.searchTerm},selectorLinkTitle:function(){var e;return this.hasMultipleSites?C("CoreHome_ChangeCurrentWebsite",(null===(e=this.modelValue)||void 0===e?void 0:e.name)||this.firstSiteName):""},hasMultipleSites:function(){return zr.initialSites.value&&zr.initialSites.value.length>1},firstSiteName:function(){return this.sites&&this.sites.length>0?this.sites[0].name:""},urlAllSites:function(){var e=Oe.stringify(Yr(Yr({},Oe.urlParsed.value),{},{module:"MultiSites",action:"index",date:Oe.parsed.value.date,period:Oe.parsed.value.period}));return"?".concat(e)}},created:function(){this.searchSite=Qr(this.searchSite.bind(this))},methods:{onSearchTermChanged:function(){this.searchTerm?(this.isLoading=!0,this.searchSite(this.searchTerm)):(this.isLoading=!1,this.loadInitialSites())},onAllSitesClick:function(e){this.switchSite({idsite:"all",name:this.allSitesText},e),this.showSitesList=!1},switchSite:function(e,t){var n=-1!==navigator.userAgent.indexOf("Mac OS X")?t.metaKey:t.ctrlKey;t&&n&&t.target&&t.target.href?window.open(t.target.href,"_blank"):(this.$emit("update:modelValue",{id:e.idsite,name:e.name}),this.switchSiteOnSelect&&this.activeSiteId!==e.idsite&&zr.loadSite(e.idsite))},onBlur:function(){this.showSitesList=!1,this.$emit("blur")},onClickSelector:function(){this.hasMultipleSites&&(this.showSitesList=!this.showSitesList,this.isLoading||this.searchTerm||this.loadInitialSites())},onPressEnter:function(e){"Enter"===e.key&&(e.preventDefault(),this.showSitesList=!this.showSitesList,this.showSitesList&&!this.isLoading&&this.loadInitialSites())},getMatchedSiteName:function(e){var t=e.toUpperCase().indexOf(this.searchTerm.toUpperCase());if(-1===t||this.isLoading)return S.helper.htmlEntities(e);var n=S.helper.htmlEntities(e.substring(0,t)),r=S.helper.htmlEntities(e.substring(t+this.searchTerm.length));return"".concat(n,'<span class="autocompleteMatched">').concat(this.searchTerm,"</span>").concat(r)},loadInitialSites:function(){var e=this;return zr.loadInitialSites().then((function(t){e.sites=t||[]}))},searchSite:function(e){var t=this;this.isLoading=!0,zr.searchSite(e,this.onlySitesWithAdminAccess).then((function(n){e===t.searchTerm&&n&&(t.sites=n)})).finally((function(){t.isLoading=!1}))},getUrlForSiteId:function(e){var t=Oe.stringify(Yr(Yr({},Oe.urlParsed.value),{},{segment:"",idSite:e})),n=Oe.stringify(Yr(Yr({},Oe.hashParsed.value),{},{segment:"",idSite:e}));return"?".concat(t,"#?").concat(n)}}});Xr.render=Br;var Zr=Xr;function ei(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ti(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ei(Object(n),!0).forEach((function(t){ni(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ei(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ni(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function yi(e,t,n,r,i,o){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",gi,[bi,Object(a["createElementVNode"])("span",null,Object(a["toDisplayString"])(e.loadingMessage),1)],512)),[[a["vShow"],e.loading]])}var wi=Object(a["defineComponent"])({props:{loading:{type:Boolean,required:!0,default:!1},loadingMessage:{type:String,required:!1,default:D("General_LoadingData")}}});wi.render=yi;var Oi=wi,Si=wt({component:Oi,scope:{loading:{vue:"loading",angularJsBind:"<"},loadingMessage:{vue:"loadingMessage",angularJsBind:"<",default:function(){return D("General_LoadingData")}}},$inject:[],directiveName:"piwikActivityIndicator"});
+ */jt({component:Zr,require:"?ngModel",scope:{showSelectedSite:{angularJsBind:"="},showAllSitesItem:{angularJsBind:"="},switchSiteOnSelect:{angularJsBind:"="},onlySitesWithAdminAccess:{angularJsBind:"="},name:{angularJsBind:"@"},allSitesText:{angularJsBind:"@"},allSitesLocation:{angularJsBind:"@"},placeholder:{angularJsBind:"@"},modelValue:{}},$inject:["$timeout"],directiveName:"piwikSiteselector",events:{"update:modelValue":function(e,t,n,r,i,o,a){(e&&!t.modelValue||!e&&t.modelValue||e.id!==t.modelValue.id)&&a((function(){n.value=e,r.attr("siteid",e.id),r.trigger("change",e),o&&(n.isNotFirstModelChange||t.modelValue)&&(o.$setViewValue(e),o.$render()),n.isNotFirstModelChange=!0}))},blur:function(e,t,n){setTimeout((function(){return n.$apply()}))}},postCreate:function(e,t,n,r,i,a){var c=i;t.$watch("value",(function(t){t!==e.modelValue&&(e.modelValue=t)})),c&&(e.modelValue&&c.$setViewValue(e.modelValue),c.$render=function(){Object(o["nextTick"])((function(){angular.isString(c.$viewValue)?e.modelValue=JSON.parse(c.$viewValue):e.modelValue=c.$viewValue}))}),a((function(){r.siteid&&r.sitename&&(e.modelValue={id:r.siteid,name:S.helper.htmlDecode(r.sitename)},c.$setViewValue(ti({},e.modelValue)))}))}});var ri={ref:"root",class:"quickAccessInside"},ii=["title"],oi={class:"dropdown"},ai={class:"no-result"},ci=["onClick"],li=["onMouseenter","onClick"],si={class:"quickAccessMatomoSearch"},ui=["onMouseenter","onClick"],di=["textContent"],fi={class:"quick-access-category helpCategory"},mi=["href"];function pi(e,t,n,r,i,a){var c=Object(o["resolveDirective"])("focus-if"),l=Object(o["resolveDirective"])("focus-anywhere-but-here");return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",ri,[Object(o["withDirectives"])(Object(o["createElementVNode"])("span",{class:"icon-search",onMouseenter:t[0]||(t[0]=function(t){return e.searchActive=!0})},null,544),[[o["vShow"],!(e.searchTerm||e.searchActive)]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{class:"s",onKeydown:t[1]||(t[1]=function(t){return e.onKeypress(t)}),onFocus:t[2]||(t[2]=function(t){return e.searchActive=!0}),"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.searchTerm=t}),type:"text",tabindex:"2",title:e.quickAccessTitle},null,40,ii),[[o["vModelText"],e.searchTerm],[c,{},e.searchActive]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("div",oi,[Object(o["withDirectives"])(Object(o["createElementVNode"])("ul",null,[Object(o["createElementVNode"])("li",ai,Object(o["toDisplayString"])(e.translate("General_SearchNoResults")),1)],512),[[o["vShow"],!(e.numMenuItems>0||e.sites.length)]]),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.menuItems,(function(t){return Object(o["openBlock"])(),Object(o["createElementBlock"])("ul",{key:t.title},[Object(o["createElementVNode"])("li",{class:"quick-access-category",onClick:function(n){e.searchTerm=t.title,e.searchMenu(e.searchTerm)}},Object(o["toDisplayString"])(t.title),9,ci),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(t.items,(function(t){return Object(o["openBlock"])(),Object(o["createElementBlock"])("li",{class:Object(o["normalizeClass"])(["result",{selected:t.menuIndex===e.searchIndex}]),onMouseenter:function(n){return e.searchIndex=t.menuIndex},onClick:function(n){return e.selectMenuItem(t.index)},key:t.index},[Object(o["createElementVNode"])("a",null,Object(o["toDisplayString"])(t.name.trim()),1)],42,li)})),128))])})),128)),Object(o["createElementVNode"])("ul",si,[Object(o["withDirectives"])(Object(o["createElementVNode"])("li",{class:"quick-access-category websiteCategory"},Object(o["toDisplayString"])(e.translate("SitesManager_Sites")),513),[[o["vShow"],e.hasSitesSelector&&e.sites.length||e.isLoading]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("li",{class:"no-result"},Object(o["toDisplayString"])(e.translate("MultiSites_LoadingWebsites")),513),[[o["vShow"],e.hasSitesSelector&&e.isLoading]]),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.sites,(function(t,n){return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("li",{class:Object(o["normalizeClass"])(["result",{selected:e.numMenuItems+n===e.searchIndex}]),onMouseenter:function(t){return e.searchIndex=e.numMenuItems+n},onClick:function(n){return e.selectSite(t.idsite)},key:t.idsite},[Object(o["createElementVNode"])("a",{textContent:Object(o["toDisplayString"])(t.name)},null,8,di)],42,ui)),[[o["vShow"],e.hasSitesSelector&&!e.isLoading]])})),128))]),Object(o["createElementVNode"])("ul",null,[Object(o["createElementVNode"])("li",fi,Object(o["toDisplayString"])(e.translate("General_HelpResources")),1),Object(o["createElementVNode"])("li",{class:Object(o["normalizeClass"])([{selected:"help"===e.searchIndex},"quick-access-help"]),onMouseenter:t[4]||(t[4]=function(t){return e.searchIndex="help"})},[Object(o["createElementVNode"])("a",{href:"https://matomo.org?s=".concat(encodeURIComponent(e.searchTerm)),target:"_blank"},Object(o["toDisplayString"])(e.translate("CoreHome_SearchOnMatomo",e.searchTerm)),9,mi)],34)])],512),[[o["vShow"],e.searchTerm&&e.searchActive]])],512)),[[l,{blur:e.onBlur}]])}function hi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hi(Object(n),!0).forEach((function(t){gi(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function gi(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bi(e){var t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=window.$(window).height()&&t.right<=window.$(window).width()}function yi(e){e&&e.scrollIntoView&&e.scrollIntoView()}var wi=Object(o["defineComponent"])({props:{},directives:{FocusAnywhereButHere:_e,FocusIf:qe},watch:{searchActive:function(e){var t=this.$refs.root.parentElement.classList;t.toggle("active",e),t.toggle("expanded",e)}},mounted:function(){var e=this;this.$refs.root.parentElement.classList.add("quick-access","piwikSelector"),"undefined"!==typeof window.initTopControls&&window.initTopControls&&window.initTopControls(),S.helper.registerShortcut("f",C("CoreHome_ShortcutSearch"),(function(t){t.altKey||(t.preventDefault(),yi(e.$refs.root),e.activateSearch())}))},data:function(){var e=!!document.querySelector(".segmentEditorPanel");return{menuItems:[],numMenuItems:0,searchActive:!1,searchTerm:"",searchIndex:0,menuIndexCounter:-1,topMenuItems:null,leftMenuItems:null,segmentItems:null,hasSegmentSelector:e,sites:[],isLoading:!1}},created:function(){this.searchMenu=Qr(this.searchMenu.bind(this))},computed:{hasSitesSelector:function(){return!!document.querySelector(".top_controls [piwik-siteselector]")},quickAccessTitle:function(){var e="",t=[C("CoreHome_MenuEntries")];this.hasSegmentSelector&&t.push(C("CoreHome_Segments")),this.hasSitesSelector&&t.push(C("SitesManager_Sites"));while(t.length)e+=t.shift(),t.length>=2?e+=", ":1===t.length&&(e+=" ".concat(C("General_And")," "));return C("CoreHome_QuickAccessTitle",e)}},emits:["itemSelected","blur"],methods:{onKeypress:function(e){var t=this,n=this.searchTerm&&this.searchActive,r=9===e.which,i=27===e.which;38===e.which?(this.highlightPreviousItem(),e.preventDefault()):40===e.which?(this.highlightNextItem(),e.preventDefault()):13===e.which?this.clickQuickAccessMenuItem():r&&n||i&&n?this.deactivateSearch():setTimeout((function(){t.searchActive=!0,t.searchMenu(t.searchTerm)}))},highlightPreviousItem:function(){this.searchIndex-1<0?this.searchIndex=0:this.searchIndex-=1,this.makeSureSelectedItemIsInViewport()},highlightNextItem:function(){var e=this.$refs.root.querySelectorAll("li.result").length;e<=this.searchIndex+1?this.searchIndex=e-1:this.searchIndex+=1,this.makeSureSelectedItemIsInViewport()},clickQuickAccessMenuItem:function(){var e=this,t=this.getCurrentlySelectedElement();t&&setTimeout((function(){t.click(),e.$emit("itemSelected",t)}),20)},deactivateSearch:function(){this.searchTerm="",this.searchActive=!1,this.$refs.root.querySelector("input").blur()},makeSureSelectedItemIsInViewport:function(){var e=this.getCurrentlySelectedElement();e&&!bi(e)&&yi(e)},getCurrentlySelectedElement:function(){var e=this.$refs.root.querySelectorAll("li.result");return e&&e.length&&e.item(this.searchIndex)?e.item(this.searchIndex):null},searchMenu:function(e){var t=this,n=e.toLowerCase(),r=-1,i={},o=[],a=function(e){var t=vi({},e);r+=1,t.menuIndex=r;var n=t.category;n in i||(o.push({title:n,items:[]}),i[n]=o.length-1);var a=i[n];o[a].items.push(t)};this.resetSearchIndex(),this.hasSitesSelector&&(this.isLoading=!0,zr.searchSite(n).then((function(e){t.sites=e})).finally((function(){t.isLoading=!1})));var c=function(e){return-1!==e.name.toLowerCase().indexOf(n)||-1!==e.category.toLowerCase().indexOf(n)};null===this.topMenuItems&&(this.topMenuItems=this.getTopMenuItems()),null===this.leftMenuItems&&(this.leftMenuItems=this.getLeftMenuItems()),null===this.segmentItems&&(this.segmentItems=this.getSegmentItems());var l=this.topMenuItems.filter(c),s=this.leftMenuItems.filter(c),u=this.segmentItems.filter(c);l.forEach(a),s.forEach(a),u.forEach(a),this.numMenuItems=l.length+s.length+u.length,this.menuItems=o},resetSearchIndex:function(){this.searchIndex=0,this.makeSureSelectedItemIsInViewport()},selectSite:function(e){zr.loadSite(e)},selectMenuItem:function(e){var t=document.querySelector("[quick_access='".concat(e,"']"));if(t){this.deactivateSearch();var n=t.getAttribute("href");if(n&&n.length>10&&t&&t.click)try{t.click()}catch(r){window.$(t).click()}else window.$(t).click()}},onBlur:function(){this.searchActive=!1,this.$emit("blur")},activateSearch:function(){this.searchActive=!0},getTopMenuItems:function(){var e=this,t=C("CoreHome_Menu"),n=[];return document.querySelectorAll("nav .sidenav li > a").forEach((function(r){var i=r.textContent.trim();i||(i=r.getAttribute("title").trim()),i&&(n.push({name:i,index:e.menuIndexCounter+=1,category:t}),r.setAttribute("quick_access","".concat(e.menuIndexCounter)))})),n},getLeftMenuItems:function(){var e=this,t=[];return document.querySelectorAll("#secondNavBar .menuTab").forEach((function(n){var r=window.$(n).find("> .item").text().trim();r&&-1!==r.lastIndexOf("\n")&&(r=r.substr(0,r.lastIndexOf("\n")).trim()),window.$(n).find("li .item").each((function(n,i){var o=i.textContent.trim();o&&(t.push({name:o,category:r,index:e.menuIndexCounter+=1}),i.setAttribute("quick_access","".concat(e.menuIndexCounter)))}))})),t},getSegmentItems:function(){var e=this;if(!this.hasSegmentSelector)return[];var t=C("CoreHome_Segments"),n=[];return document.querySelectorAll(".segmentList [data-idsegment]").forEach((function(r){var i=r.querySelector(".segname").textContent.trim();i&&(n.push({name:i,category:t,index:e.menuIndexCounter+=1}),r.setAttribute("quick_access","".concat(e.menuIndexCounter)))})),n}}});wi.render=pi;var Oi=wi;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function ki(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ji(e,t,n,r,i,o){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["alert",ki({},"alert-".concat(e.severity),!0)])},[Object(a["renderSlot"])(e.$slots,"default")],2)}var Di=Object(a["defineComponent"])({props:{severity:{type:String,required:!0}}});Di.render=ji;var Ci=Di,Ei=wt({component:Ci,scope:{severity:{vue:"severity",angularJsBind:"@piwikAlert"}},directiveName:"piwikAlert",transclude:!0});
+ */jt({component:Oi,directiveName:"piwikQuickAccess",events:{itemSelected:function(e,t,n,r,i,o,a){a()},blur:function(e,t,n){setTimeout((function(){return n.$apply()}))}}});function ji(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ki={class:"fieldArray form-group"},Si={key:0,class:"fieldUiControl"},Ci=["onClick","title"];function Di(e,t,n,r,i,a){var c=Object(o["resolveComponent"])("Field");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",ki,[(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.modelValue,(function(t,n){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:Object(o["normalizeClass"])(["fieldArrayTable multiple valign-wrapper",ji({},"fieldArrayTable".concat(n),!0)]),key:n},[e.field.uiControl?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Si,[Object(o["createVNode"])(c,{"full-width":!0,"model-value":t,options:e.field.availableValues,"onUpdate:modelValue":function(t){return e.onEntryChange(t,n)},placeholder:" ",uicontrol:e.field.uiControl,title:e.field.title,name:"".concat(e.name,"-").concat(n)},null,8,["model-value","options","onUpdate:modelValue","uicontrol","title","name"])])):Object(o["createCommentVNode"])("",!0),Object(o["withDirectives"])(Object(o["createElementVNode"])("span",{onClick:function(t){return e.removeEntry(n)},class:"icon-minus valign",title:e.translate("General_Remove")},null,8,Ci),[[o["vShow"],n+1!==e.modelValue.length]])],2)})),128))])}function Ei(e){return Vi(e)||Ii(e)||Ti(e)||Pi()}function Pi(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Ti(e,t){if(e){if("string"===typeof e)return xi(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?xi(e,t):void 0}}function Ii(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function Vi(e){if(Array.isArray(e))return xi(e)}function xi(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Ni=Ht("CorePluginsAdmin","Field"),Bi=Object(o["defineComponent"])({props:{modelValue:Array,name:String,field:Object},components:{Field:Ni},emits:["update:modelValue"],watch:{modelValue:function(e){this.checkEmptyModelValue(e)}},mounted:function(){this.checkEmptyModelValue(this.modelValue)},methods:{checkEmptyModelValue:function(e){e&&e.length&&""===e.slice(-1)[0]||this.$emit("update:modelValue",[].concat(Ei(e||[]),[""]))},onEntryChange:function(e,t){var n=Ei(this.modelValue);n[t]=e,this.$emit("update:modelValue",n)},removeEntry:function(e){if(e>-1){var t=this.modelValue.filter((function(t,n){return n!==e}));this.$emit("update:modelValue",t)}}}});Bi.render=Di;var Ai=Bi;
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */function Pi(e,t,n){var r=new Date;n||(n=432e4),r.setTime(r.getTime()+n),document.cookie="".concat(e,"=").concat(t,"; expires=").concat(r.toUTCString(),"; path=/")}function Ti(e){var t="; ".concat(document.cookie),n=t.split("; ".concat(e,"="));if(2==n.length){var r=n.pop().split(";").shift();if("undefined"!==typeof r)return r}return null}function Ii(e){var t=new Date;t.setTime(t.getTime()+-864e5),document.cookie="".concat(e,"=; expires=").concat(t.toUTCString(),"; path=/")}var xi={key:0},Ni=["data-notification-instance-id"],Bi={key:1},Mi={class:"notification-body"},Ai=["innerHTML"],$i={key:1};function Vi(e,t,n,r,i,o){return Object(a["openBlock"])(),Object(a["createBlock"])(a["Transition"],{name:"toast"===e.type?"slow-fade-out":void 0,onAfterLeave:t[1]||(t[1]=function(t){return e.toastClosed()})},{default:Object(a["withCtx"])((function(){return[e.deleted?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",xi,[Object(a["createVNode"])(a["Transition"],{name:"toast"===e.type?"toast-slide-up":void 0,appear:""},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(a["Transition"],{name:e.animate?"fade-in":void 0,appear:""},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",{class:Object(a["normalizeClass"])(["notification system",e.cssClasses]),style:Object(a["normalizeStyle"])(e.style),ref:"root","data-notification-instance-id":e.notificationInstanceId},[e.canClose?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:0,type:"button",class:"close","data-dismiss":"alert",onClick:t[0]||(t[0]=function(t){return e.closeNotification(t)})}," × ")):Object(a["createCommentVNode"])("",!0),e.title?(Object(a["openBlock"])(),Object(a["createElementBlock"])("strong",Bi,Object(a["toDisplayString"])(e.title),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Mi,[e.message?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{key:0,innerHTML:e.$sanitize(e.message)},null,8,Ai)):Object(a["createCommentVNode"])("",!0),e.message?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",$i,[Object(a["renderSlot"])(e.$slots,"default")]))])],14,Ni)]})),_:3},8,["name"])])]})),_:3},8,["name"])]))]})),_:3},8,["name"])}var Li=window,Hi=Li.$,Fi=Object(a["defineComponent"])({props:{notificationId:String,notificationInstanceId:String,title:String,context:String,type:String,noclear:Boolean,toastLength:{type:Number,default:12e3},style:[String,Object],animate:Boolean,message:String,cssClass:String},computed:{cssClasses:function(){var e={};return this.context&&(e["notification-".concat(this.context)]=!0),this.cssClass&&(e[this.cssClass]=!0),e},canClose:function(){return"persistent"===this.type||!this.noclear}},emits:["closed"],data:function(){return{deleted:!1}},mounted:function(){var e=this,t=function(){setTimeout((function(){e.deleted=!0}),e.toastLength)};"toast"===this.type&&t(),this.style&&Hi(this.$refs.root).css(this.style)},methods:{toastClosed:function(){var e=this;Object(a["nextTick"])((function(){e.$emit("closed")}))},closeNotification:function(e){var t=this;this.canClose&&e&&e.target&&(this.deleted=!0,Object(a["nextTick"])((function(){t.$emit("closed")}))),this.markNotificationAsRead()},markNotificationAsRead:function(){this.notificationId&&Ne.fetch({module:"CoreHome",action:"markNotificationAsRead"},{postParams:{notificationId:this.notificationId}})}}});Fi.render=Vi;var _i=Fi;
+ */jt({component:Ai,require:"?ngModel",scope:{name:{angularJsBind:"="},field:{angularJsBind:"="}},directiveName:"matomoFieldArray",events:{"update:modelValue":function(e,t,n,r,i,o){e!==t.modelValue&&(r.trigger("change",e),o&&o.$setViewValue(e))}},postCreate:function(e,t,n,r,i){var o=i;o&&(o.$setViewValue(e.modelValue),o.$render=function(){angular.isString(o.$viewValue)?e.modelValue=JSON.parse(o.$viewValue):e.modelValue=o.$viewValue})}});function Mi(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var $i={class:"multiPairField form-group"},Li={key:1,class:"fieldUiControl fieldUiControl2"},Hi={key:2,class:"fieldUiControl fieldUiControl3"},Fi={key:3,class:"fieldUiControl fieldUiControl4"},_i=["onClick","title"];function Ui(e,t,n,r,i,a){var c=Object(o["resolveComponent"])("Field");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",$i,[(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.modelValue,(function(t,n){var r;return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:Object(o["normalizeClass"])(["multiPairFieldTable multiple valign-wrapper",(r={},Mi(r,"multiPairFieldTable".concat(n),!0),Mi(r,"has".concat(e.fieldCount,"Fields"),!0),r)]),key:n},[e.field1?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{key:0,class:Object(o["normalizeClass"])(["fieldUiControl fieldUiControl1",{hasMultiFields:e.field1.type&&e.field2.type}])},[Object(o["createVNode"])(c,{"full-width":!0,modelValue:t[e.field1.key],"onUpdate:modelValue":[function(n){return t[e.field1.key]=n},function(t){return e.onEntryChange(n,e.field1.key,t)}],options:e.field1.availableValues,placeholder:" ",uicontrol:e.field1.uiControl,name:"".concat(e.name,"-p1-").concat(n),title:e.field1.title},null,8,["modelValue","onUpdate:modelValue","options","uicontrol","name","title"])],2)):Object(o["createCommentVNode"])("",!0),e.field2?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Li,[Object(o["createVNode"])(c,{"full-width":!0,options:e.field2.availableValues,"onUpdate:modelValue":[function(t){return e.onEntryChange(n,e.field2.key,t)},function(n){return t[e.field2.key]=n}],modelValue:t[e.field2.key],placeholder:" ",uicontrol:e.field2.uiControl,name:"".concat(e.name,"-p2-").concat(n),title:e.field2.title},null,8,["options","onUpdate:modelValue","modelValue","uicontrol","name","title"])])):Object(o["createCommentVNode"])("",!0),e.field3?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Hi,[Object(o["createVNode"])(c,{"full-width":!0,options:e.field3.availableValues,"onUpdate:modelValue":[function(t){return e.onEntryChange(n,e.field3.key,t)},function(n){return t[e.field3.key]=n}],modelValue:t[e.field3.key],placeholder:" ",uicontrol:e.field3.uiControl,title:e.field3.title},null,8,["options","onUpdate:modelValue","modelValue","uicontrol","title"])])):Object(o["createCommentVNode"])("",!0),e.field4?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Fi,[Object(o["createVNode"])(c,{"full-width":!0,options:e.field4.availableValues,"onUpdate:modelValue":[function(t){return e.onEntryChange(n,e.field4.key,t)},function(n){return t[e.field4.key]=n}],modelValue:t[e.field4.key],placeholder:" ",uicontrol:e.field4.uiControl,title:e.field4.title},null,8,["options","onUpdate:modelValue","modelValue","uicontrol","title"])])):Object(o["createCommentVNode"])("",!0),Object(o["withDirectives"])(Object(o["createElementVNode"])("span",{onClick:function(t){return e.removeEntry(n)},class:"icon-minus valign",title:e.translate("General_Remove")},null,8,_i),[[o["vShow"],n+1!==e.modelValue.length]])],2)})),128))])}function Ri(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function qi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ri(Object(n),!0).forEach((function(t){Ji(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ri(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ji(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zi(e){return Yi(e)||Wi(e)||Qi(e)||Gi()}function Gi(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Qi(e,t){if(e){if("string"===typeof e)return Ki(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ki(e,t):void 0}}function Wi(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function Yi(e){if(Array.isArray(e))return Ki(e)}function Ki(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Xi=Ht("CorePluginsAdmin","Field"),Zi=Object(o["defineComponent"])({props:{modelValue:Array,name:String,field1:Object,field2:Object,field3:Object,field4:Object},components:{Field:Xi},computed:{fieldCount:function(){return this.field1&&this.field2&&this.field3&&this.field4?4:this.field1&&this.field2&&this.field3?3:this.field1&&this.field2?2:this.field1?1:0}},emits:["update:modelValue"],watch:{modelValue:function(e){this.checkEmptyModelValue(e)}},mounted:function(){this.checkEmptyModelValue(this.modelValue)},methods:{checkEmptyModelValue:function(e){e&&e.length&&!this.isEmptyValue(e.slice(-1)[0])||this.$emit("update:modelValue",[].concat(zi(e||[]),[this.makeEmptyValue()]))},onEntryChange:function(e,t,n){var r=zi(this.modelValue);r[e]=qi(qi({},r[e]),{},Ji({},t,n)),this.$emit("update:modelValue",r)},removeEntry:function(e){if(e>-1){var t=this.modelValue.filter((function(t,n){return n!==e}));this.$emit("update:modelValue",t)}},isEmptyValue:function(e){var t=this.fieldCount;if(4===t){if(!e[this.field1.key]&&!e[this.field2.key]&&!e[this.field3.key]&&!e[this.field4.key])return!1}else if(3===t){if(!e[this.field1.key]&&!e[this.field2.key]&&!e[this.field3.key])return!1}else if(2===t){if(!e[this.field1.key]&&!e[this.field2.key])return!1}else if(1===t&&!e[this.field1.key])return!1;return!0},makeEmptyValue:function(){var e={};return this.field1&&this.field1.key&&(e[this.field1.key]=""),this.field2&&this.field2.key&&(e[this.field2.key]=""),this.field3&&this.field3.key&&(e[this.field3.key]=""),this.field4&&this.field4.key&&(e[this.field4.key]=""),e}}});Zi.render=Ui;var eo=Zi,to=(jt({component:eo,require:"?ngModel",scope:{name:{angularJsBind:"="},field1:{angularJsBind:"="},field2:{angularJsBind:"="},field3:{angularJsBind:"="},field4:{angularJsBind:"="}},directiveName:"matomoMultiPairField",events:{"update:modelValue":function(e,t,n,r,i,o){e!==t.modelValue&&(r.trigger("change",e),o&&o.$setViewValue(e))}},postCreate:function(e,t,n,r,i){var o=i;o&&(o.$setViewValue(e.modelValue),o.$render=function(){angular.isString(o.$viewValue)?e.modelValue=JSON.parse(o.$viewValue):e.modelValue=o.$viewValue})}}),{class:"loadingPiwik"}),no=Object(o["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1);
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */wt({component:_i,scope:{notificationId:{angularJsBind:"@?"},title:{angularJsBind:"@?notificationTitle"},context:{angularJsBind:"@?"},type:{angularJsBind:"@?"},noclear:{angularJsBind:"@?",transform:function(e){return!!e}},toastLength:{angularJsBind:"@?"}},directiveName:"piwikNotification",transclude:!0});function Ri(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ui(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ri(Object(n),!0).forEach((function(t){zi(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ri(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function qi(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ji(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Gi(e,t,n){return t&&Ji(e.prototype,t),n&&Ji(e,n),e}function zi(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+ */function ro(e,t,n,r,i,a){return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",to,[no,Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(e.loadingMessage),1)],512)),[[o["vShow"],e.loading]])}var io=Object(o["defineComponent"])({props:{loading:{type:Boolean,required:!0,default:!1},loadingMessage:{type:String,required:!1,default:C("General_LoadingData")}}});io.render=ro;var oo=io,ao=jt({component:oo,scope:{loading:{vue:"loading",angularJsBind:"<"},loadingMessage:{vue:"loadingMessage",angularJsBind:"<",default:function(){return C("General_LoadingData")}}},$inject:[],directiveName:"piwikActivityIndicator"});
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */var Qi=function(){function e(){qi(this,e),zi(this,"privateState",Object(a["reactive"])({notifications:[]})),zi(this,"nextNotificationId",0)}return Gi(e,[{key:"state",get:function(){return this.privateState}},{key:"appendNotification",value:function(e){this.checkMessage(e.message),e.id&&this.remove(e.id),this.privateState.notifications.push(e)}},{key:"prependNotification",value:function(e){this.checkMessage(e.message),e.id&&this.remove(e.id),this.privateState.notifications.unshift(e)}},{key:"remove",value:function(e){this.privateState.notifications=this.privateState.notifications.filter((function(t){return t.id!==e}))}},{key:"parseNotificationDivs",value:function(){var e=this,t=$('[data-role="notification"]'),n=[];t.each((function(e,r){var i=$(r),a=i.data(),o=i.html();o&&n.push(Ui(Ui({},a),{},{message:o,animate:!1})),t.remove()})),n.forEach((function(t){return e.show(t)}))}},{key:"clearTransientNotifications",value:function(){this.privateState.notifications=this.privateState.notifications.filter((function(e){return"transient"!==e.type}))}},{key:"show",value:function(e){this.checkMessage(e.message);var t=this.appendNotification,n="#notificationContainer";if(e.placeat)n=e.placeat;else{var r=".modal.open .modal-content",i=document.querySelector(r);i&&(i.querySelector("#modalNotificationContainer")||window.$(i).prepend('<div id="modalNotificationContainer"/>'),n="".concat(r," #modalNotificationContainer"),t=this.prependNotification)}var a=e.group||(n?n.toString():"");this.initializeNotificationContainer(n,a);var o=(this.nextNotificationId+=1).toString();return t.call(this,Ui(Ui({},e),{},{noclear:!!e.noclear,group:a,notificationId:e.id,notificationInstanceId:o,type:e.type||"transient"})),o}},{key:"scrollToNotification",value:function(e){setTimeout((function(){var t=document.querySelector("[data-notification-instance-id='".concat(e,"']"));t&&j.helper.lazyScrollTo(t,250)}))}},{key:"toast",value:function(e){this.checkMessage(e.message);var t=$(e.placeat);if(!t.length)throw new Error("A valid selector is required for the placeat option when using Notification.toast().");var n=document.createElement("div");n.style.position="absolute",n.style.top="".concat(t.offset().top,"px"),n.style.left="".concat(t.offset().left,"px"),n.style.zIndex="1000",document.body.appendChild(n);var r=Object(a["createApp"])({render:function(){return Object(a["createVNode"])(_i,Ui(Ui({},e),{},{notificationId:e.id,type:"toast",onClosed:function(){r.unmount()}}))}});r.config.globalProperties.$sanitize=window.vueSanitize,r.config.globalProperties.translate=D,r.mount(n)}},{key:"initializeNotificationContainer",value:function(e,t){var n=window.$(e);if(!n.children(".notification-group").length){var r=window.CoreHome.NotificationGroup,i=Object(a["createApp"])({template:'<NotificationGroup :group="group"></NotificationGroup>',data:function(){return{group:t}}});i.config.globalProperties.$sanitize=window.vueSanitize,i.config.globalProperties.translate=D,i.component("NotificationGroup",r),i.mount(n[0])}}},{key:"checkMessage",value:function(e){if(!e)throw new Error("No message given, cannot display notification")}}]),e}(),Wi=new Qi,Yi=Wi;$((function(){return Wi.parseNotificationDivs()})),
+ */function co(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lo(e,t,n,r,i,a){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:Object(o["normalizeClass"])(["alert",co({},"alert-".concat(e.severity),!0)])},[Object(o["renderSlot"])(e.$slots,"default")],2)}var so=Object(o["defineComponent"])({props:{severity:{type:String,required:!0}}});so.render=lo;var uo=so,fo=jt({component:uo,scope:{severity:{vue:"severity",angularJsBind:"@piwikAlert"}},directiveName:"piwikAlert",transclude:!0});
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */function mo(e,t,n){var r=new Date;n||(n=432e4),r.setTime(r.getTime()+n),document.cookie="".concat(e,"=").concat(t,"; expires=").concat(r.toUTCString(),"; path=/")}function po(e){var t="; ".concat(document.cookie),n=t.split("; ".concat(e,"="));if(2==n.length){var r=n.pop().split(";").shift();if("undefined"!==typeof r)return r}return null}function ho(e){var t=new Date;t.setTime(t.getTime()+-864e5),document.cookie="".concat(e,"=; expires=").concat(t.toUTCString(),"; path=/")}var vo={key:0},go=["data-notification-instance-id"],bo={key:1},yo={class:"notification-body"},wo=["innerHTML"],Oo={key:1};function jo(e,t,n,r,i,a){return Object(o["openBlock"])(),Object(o["createBlock"])(o["Transition"],{name:"toast"===e.type?"slow-fade-out":void 0,onAfterLeave:t[1]||(t[1]=function(t){return e.toastClosed()})},{default:Object(o["withCtx"])((function(){return[e.deleted?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",vo,[Object(o["createVNode"])(o["Transition"],{name:"toast"===e.type?"toast-slide-up":void 0,appear:""},{default:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("div",null,[Object(o["createVNode"])(o["Transition"],{name:e.animate?"fade-in":void 0,appear:""},{default:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("div",{class:Object(o["normalizeClass"])(["notification system",e.cssClasses]),style:Object(o["normalizeStyle"])(e.style),ref:"root","data-notification-instance-id":e.notificationInstanceId},[e.canClose?(Object(o["openBlock"])(),Object(o["createElementBlock"])("button",{key:0,type:"button",class:"close","data-dismiss":"alert",onClick:t[0]||(t[0]=function(t){return e.closeNotification(t)})}," × ")):Object(o["createCommentVNode"])("",!0),e.title?(Object(o["openBlock"])(),Object(o["createElementBlock"])("strong",bo,Object(o["toDisplayString"])(e.title),1)):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",yo,[e.message?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{key:0,innerHTML:e.$sanitize(e.message)},null,8,wo)):Object(o["createCommentVNode"])("",!0),e.message?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Oo,[Object(o["renderSlot"])(e.$slots,"default")]))])],14,go)]})),_:3},8,["name"])])]})),_:3},8,["name"])]))]})),_:3},8,["name"])}var ko=window,So=ko.$,Co=Object(o["defineComponent"])({props:{notificationId:String,notificationInstanceId:String,title:String,context:String,type:String,noclear:Boolean,toastLength:{type:Number,default:12e3},style:[String,Object],animate:Boolean,message:String,cssClass:String},computed:{cssClasses:function(){var e={};return this.context&&(e["notification-".concat(this.context)]=!0),this.cssClass&&(e[this.cssClass]=!0),e},canClose:function(){return"persistent"===this.type||!this.noclear}},emits:["closed"],data:function(){return{deleted:!1}},mounted:function(){var e=this,t=function(){setTimeout((function(){e.deleted=!0}),e.toastLength)};"toast"===this.type&&t(),this.style&&So(this.$refs.root).css(this.style)},methods:{toastClosed:function(){var e=this;Object(o["nextTick"])((function(){e.$emit("closed")}))},closeNotification:function(e){var t=this;this.canClose&&e&&e.target&&(this.deleted=!0,Object(o["nextTick"])((function(){t.$emit("closed")}))),this.markNotificationAsRead()},markNotificationAsRead:function(){this.notificationId&&xe.fetch({module:"CoreHome",action:"markNotificationAsRead"},{postParams:{notificationId:this.notificationId}})}}});Co.render=jo;var Do=Co;
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */jt({component:Do,scope:{notificationId:{angularJsBind:"@?"},title:{angularJsBind:"@?notificationTitle"},context:{angularJsBind:"@?"},type:{angularJsBind:"@?"},noclear:{angularJsBind:"@?",transform:kt},toastLength:{angularJsBind:"@?"}},directiveName:"piwikNotification",transclude:!0});function Eo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Po(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Eo(Object(n),!0).forEach((function(t){xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Eo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function To(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Io(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Vo(e,t,n){return t&&Io(e.prototype,t),n&&Io(e,n),e}function xo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */var No=function(){function e(){To(this,e),xo(this,"privateState",Object(o["reactive"])({notifications:[]})),xo(this,"nextNotificationId",0)}return Vo(e,[{key:"state",get:function(){return this.privateState}},{key:"appendNotification",value:function(e){this.checkMessage(e.message),e.id&&this.remove(e.id),this.privateState.notifications.push(e)}},{key:"prependNotification",value:function(e){this.checkMessage(e.message),e.id&&this.remove(e.id),this.privateState.notifications.unshift(e)}},{key:"remove",value:function(e){this.privateState.notifications=this.privateState.notifications.filter((function(t){return t.id!==e}))}},{key:"parseNotificationDivs",value:function(){var e=this,t=$('[data-role="notification"]'),n=[];t.each((function(e,r){var i=$(r),o=i.data(),a=i.html();a&&n.push(Po(Po({},o),{},{message:a,animate:!1})),t.remove()})),n.forEach((function(t){return e.show(t)}))}},{key:"clearTransientNotifications",value:function(){this.privateState.notifications=this.privateState.notifications.filter((function(e){return"transient"!==e.type}))}},{key:"show",value:function(e){this.checkMessage(e.message);var t=this.appendNotification,n="#notificationContainer";if(e.placeat)n=e.placeat;else{var r=".modal.open .modal-content",i=document.querySelector(r);i&&(i.querySelector("#modalNotificationContainer")||window.$(i).prepend('<div id="modalNotificationContainer"/>'),n="".concat(r," #modalNotificationContainer"),t=this.prependNotification)}var o=e.group||(n?n.toString():"");this.initializeNotificationContainer(n,o);var a=(this.nextNotificationId+=1).toString();return t.call(this,Po(Po({},e),{},{noclear:!!e.noclear,group:o,notificationId:e.id,notificationInstanceId:a,type:e.type||"transient"})),a}},{key:"scrollToNotification",value:function(e){setTimeout((function(){var t=document.querySelector("[data-notification-instance-id='".concat(e,"']"));t&&S.helper.lazyScrollTo(t,250)}))}},{key:"toast",value:function(e){this.checkMessage(e.message);var t=$(e.placeat);if(!t.length)throw new Error("A valid selector is required for the placeat option when using Notification.toast().");var n=document.createElement("div");n.style.position="absolute",n.style.top="".concat(t.offset().top,"px"),n.style.left="".concat(t.offset().left,"px"),n.style.zIndex="1000",document.body.appendChild(n);var r=Object(o["createApp"])({render:function(){return Object(o["createVNode"])(Do,Po(Po({},e),{},{notificationId:e.id,type:"toast",onClosed:function(){r.unmount()}}))}});r.config.globalProperties.$sanitize=window.vueSanitize,r.config.globalProperties.translate=C,r.mount(n)}},{key:"initializeNotificationContainer",value:function(e,t){var n=window.$(e);if(!n.children(".notification-group").length){var r=window.CoreHome.NotificationGroup,i=Object(o["createApp"])({template:'<NotificationGroup :group="group"></NotificationGroup>',data:function(){return{group:t}}});i.config.globalProperties.$sanitize=window.vueSanitize,i.config.globalProperties.translate=C,i.component("NotificationGroup",r),i.mount(n[0])}}},{key:"checkMessage",value:function(e){if(!e)throw new Error("No message given, cannot display notification")}}]),e}(),Bo=new No,Ao=Bo;$((function(){return Bo.parseNotificationDivs()})),
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-angular.module("piwikApp").factory("notifications",(function(){return Yi}));var Ki={class:"notification-group"},Xi=["innerHTML"];function Zi(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("Notification");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ki,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.notifications,(function(t,n){return Object(a["openBlock"])(),Object(a["createBlock"])(c,{key:t.id||"no-id-".concat(n),"notification-id":t.id,title:t.title,context:t.context,type:t.type,noclear:t.noclear,"toast-length":t.toastLength,style:Object(a["normalizeStyle"])(t.style),animate:t.animate,message:t.message,"notification-instance-id":t.notificationInstanceId,"css-class":t.class,onClosed:function(n){return e.removeNotification(t.id)}},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",{innerHTML:e.$sanitize(t.message)},null,8,Xi)]})),_:2},1032,["notification-id","title","context","type","noclear","toast-length","style","animate","message","notification-instance-id","css-class","onClosed"])})),128))])}var ea=Object(a["defineComponent"])({props:{group:String},components:{Notification:_i},computed:{notifications:function(){var e=this;return Yi.state.notifications.filter((function(t){return e.group?e.group===t.group:!t.group}))}},methods:{removeNotification:function(e){Yi.remove(e)}}});ea.render=Zi;var ta=ea;
+angular.module("piwikApp").factory("notifications",(function(){return Ao}));var Mo={class:"notification-group"},$o=["innerHTML"];function Lo(e,t,n,r,i,a){var c=Object(o["resolveComponent"])("Notification");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Mo,[(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.notifications,(function(t,n){return Object(o["openBlock"])(),Object(o["createBlock"])(c,{key:t.id||"no-id-".concat(n),"notification-id":t.id,title:t.title,context:t.context,type:t.type,noclear:t.noclear,"toast-length":t.toastLength,style:Object(o["normalizeStyle"])(t.style),animate:t.animate,message:t.message,"notification-instance-id":t.notificationInstanceId,"css-class":t.class,onClosed:function(n){return e.removeNotification(t.id)}},{default:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("div",{innerHTML:e.$sanitize(t.message)},null,8,$o)]})),_:2},1032,["notification-id","title","context","type","noclear","toast-length","style","animate","message","notification-instance-id","css-class","onClosed"])})),128))])}var Ho=Object(o["defineComponent"])({props:{group:String},components:{Notification:Do},computed:{notifications:function(){var e=this;return Ao.state.notifications.filter((function(t){return e.group?e.group===t.group:!t.group}))}},methods:{removeNotification:function(e){Ao.remove(e)}}});Ho.render=Lo;var Fo=Ho;
/*!
* Matomo - free/libre analytics platform
*
diff --git a/plugins/CoreHome/vue/src/Comparisons/Comparisons.store.ts b/plugins/CoreHome/vue/src/Comparisons/Comparisons.store.ts
index 6d3b8462dd..e7cc8e7bd2 100644
--- a/plugins/CoreHome/vue/src/Comparisons/Comparisons.store.ts
+++ b/plugins/CoreHome/vue/src/Comparisons/Comparisons.store.ts
@@ -58,7 +58,7 @@ function wrapArray<T>(values: T | T[]): T[] {
if (!values) {
return [];
}
- return values instanceof Array ? values : [values];
+ return Array.isArray(values) ? values : [values];
}
export default class ComparisonsStore {
diff --git a/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue b/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue
index 7f8d2f5155..3c981a1c10 100644
--- a/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue
+++ b/plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.vue
@@ -68,28 +68,14 @@
</template>
<script lang="ts">
-import {
- defineComponent,
- defineAsyncComponent,
-} from 'vue';
+import { defineComponent } from 'vue';
import Matomo from '../Matomo/Matomo';
import Periods from '../Periods/Periods';
+import useExternalPluginComponent from '../useExternalPluginComponent';
// working around a cycle in dependencies (CoreHome depends on Feedback, Feedback depends on
// CoreHome)
-// TODO: may need a generic solution at some point, but it's bad practice to have
-// cyclic dependencies like this. it worked before because it was individual files
-// dependening on each other, not whole plugins.
-const RateFeature = defineAsyncComponent(() => new Promise((resolve) => {
- window.$(document).ready(() => {
- const { Feedback } = window as any; // eslint-disable-line
- if (Feedback) {
- resolve(Feedback.RateFeature);
- } else { // feedback plugin not loaded
- resolve(null);
- }
- });
-}));
+const RateFeature = useExternalPluginComponent('Feedback', 'RateFeature');
/**
* Usage:
diff --git a/plugins/CoreHome/vue/src/FieldArray/FieldArray.adapter.ts b/plugins/CoreHome/vue/src/FieldArray/FieldArray.adapter.ts
new file mode 100644
index 0000000000..2ab3d0a785
--- /dev/null
+++ b/plugins/CoreHome/vue/src/FieldArray/FieldArray.adapter.ts
@@ -0,0 +1,51 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { INgModelController } from 'angular';
+import createAngularJsAdapter from '../createAngularJsAdapter';
+import FieldArray from './FieldArray.vue';
+
+export default createAngularJsAdapter({
+ component: FieldArray,
+ require: '?ngModel',
+ scope: {
+ name: {
+ angularJsBind: '=',
+ },
+ field: {
+ angularJsBind: '=',
+ },
+ },
+ directiveName: 'matomoFieldArray',
+ events: {
+ 'update:modelValue': (newValue, vm, scope, element, attrs, ngModel) => {
+ if (newValue !== vm.modelValue) {
+ element.trigger('change', newValue);
+
+ if (ngModel) {
+ ngModel.$setViewValue(newValue);
+ }
+ }
+ },
+ },
+ postCreate(vm, scope, element, attrs, controller) {
+ const ngModel = controller as INgModelController;
+
+ // setup ng-model mapping
+ if (ngModel) {
+ ngModel.$setViewValue(vm.modelValue);
+
+ ngModel.$render = () => {
+ if (angular.isString(ngModel.$viewValue)) {
+ vm.modelValue = JSON.parse(ngModel.$viewValue);
+ } else {
+ vm.modelValue = ngModel.$viewValue;
+ }
+ };
+ }
+ },
+});
diff --git a/plugins/CoreHome/angularjs/field-array/field-array.directive.less b/plugins/CoreHome/vue/src/FieldArray/FieldArray.less
index 29f63392d7..29f63392d7 100644
--- a/plugins/CoreHome/angularjs/field-array/field-array.directive.less
+++ b/plugins/CoreHome/vue/src/FieldArray/FieldArray.less
diff --git a/plugins/CoreHome/vue/src/FieldArray/FieldArray.vue b/plugins/CoreHome/vue/src/FieldArray/FieldArray.vue
new file mode 100644
index 0000000000..469e250f91
--- /dev/null
+++ b/plugins/CoreHome/vue/src/FieldArray/FieldArray.vue
@@ -0,0 +1,87 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div class="fieldArray form-group">
+ <div
+ class="fieldArrayTable multiple valign-wrapper"
+ v-for="(item, index) in modelValue"
+ :class="{[`fieldArrayTable${index}`]: true}"
+ :key="index"
+ >
+ <div
+ v-if="field.uiControl"
+ class="fieldUiControl"
+ >
+ <Field
+ :full-width="true"
+ :model-value="item"
+ :options="field.availableValues"
+ @update:modelValue="onEntryChange($event, index)"
+ :placeholder="' '"
+ :uicontrol="field.uiControl"
+ :title="field.title"
+ :name="`${name}-${index}`"
+ >
+ </Field>
+ </div>
+ <span
+ @click="removeEntry(index)"
+ class="icon-minus valign"
+ v-show="index + 1 !== modelValue.length"
+ :title="translate('General_Remove')"
+ />
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import useExternalPluginComponent from '../useExternalPluginComponent';
+
+// async since this is a a recursive component
+const Field = useExternalPluginComponent('CorePluginsAdmin', 'Field');
+
+export default defineComponent({
+ props: {
+ modelValue: Array,
+ name: String,
+ field: Object,
+ },
+ components: {
+ Field,
+ },
+ emits: ['update:modelValue'],
+ watch: {
+ modelValue(newValue) {
+ this.checkEmptyModelValue(newValue);
+ },
+ },
+ mounted() {
+ this.checkEmptyModelValue(this.modelValue);
+ },
+ methods: {
+ checkEmptyModelValue(newValue) {
+ // make sure there is always an empty new value
+ if (!newValue || !newValue.length || newValue.slice(-1)[0] !== '') {
+ this.$emit('update:modelValue', [...(newValue || []), '']);
+ }
+ },
+ onEntryChange(newValue: unknown, index: number) {
+ const newArrayValue = [...this.modelValue];
+ newArrayValue[index] = newValue;
+
+ this.$emit('update:modelValue', newArrayValue);
+ },
+ removeEntry(index) {
+ if (index > -1) {
+ const newValue = this.modelValue.filter((x, i) => i !== index);
+ this.$emit('update:modelValue', newValue);
+ }
+ },
+ },
+});
+</script>
diff --git a/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts b/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts
index cd5965d1c6..598a4224f1 100644
--- a/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts
+++ b/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts
@@ -40,7 +40,7 @@ export default createAngularJsAdapter<[IParseService]>({
setTimeout(() => { scope.$apply(); }, 0);
}
},
- close: ($event, scope, element, attrs) => {
+ close: ($event, vm, scope, element, attrs) => {
if (attrs.close) {
scope.$eval(attrs.close);
setTimeout(() => { scope.$apply(); }, 0);
diff --git a/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.adapter.ts b/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.adapter.ts
new file mode 100644
index 0000000000..e7c379ef88
--- /dev/null
+++ b/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.adapter.ts
@@ -0,0 +1,60 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { INgModelController } from 'angular';
+import createAngularJsAdapter from '../createAngularJsAdapter';
+import MultiPairField from './MultiPairField.vue';
+
+export default createAngularJsAdapter({
+ component: MultiPairField,
+ require: '?ngModel',
+ scope: {
+ name: {
+ angularJsBind: '=',
+ },
+ field1: {
+ angularJsBind: '=',
+ },
+ field2: {
+ angularJsBind: '=',
+ },
+ field3: {
+ angularJsBind: '=',
+ },
+ field4: {
+ angularJsBind: '=',
+ },
+ },
+ directiveName: 'matomoMultiPairField',
+ events: {
+ 'update:modelValue': (newValue, vm, scope, element, attrs, ngModel) => {
+ if (newValue !== vm.modelValue) {
+ element.trigger('change', newValue);
+
+ if (ngModel) {
+ ngModel.$setViewValue(newValue);
+ }
+ }
+ },
+ },
+ postCreate(vm, scope, element, attrs, controller) {
+ const ngModel = controller as INgModelController;
+
+ // setup ng-model mapping
+ if (ngModel) {
+ ngModel.$setViewValue(vm.modelValue);
+
+ ngModel.$render = () => {
+ if (angular.isString(ngModel.$viewValue)) {
+ vm.modelValue = JSON.parse(ngModel.$viewValue);
+ } else {
+ vm.modelValue = ngModel.$viewValue;
+ }
+ };
+ }
+ },
+});
diff --git a/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.less b/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.less
index 3a2f34c736..3a2f34c736 100644
--- a/plugins/CoreHome/angularjs/multipairfield/multipairfield.directive.less
+++ b/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.less
diff --git a/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue b/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue
new file mode 100644
index 0000000000..7d0dca4b9a
--- /dev/null
+++ b/plugins/CoreHome/vue/src/MultiPairField/MultiPairField.vue
@@ -0,0 +1,200 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div class="multiPairField form-group">
+ <div
+ v-for="(item, index) in modelValue"
+ class="multiPairFieldTable multiple valign-wrapper"
+ :class="{ [`multiPairFieldTable${index}`]: true, [`has${fieldCount}Fields`]: true }"
+ :key="index"
+ >
+ <div
+ class="fieldUiControl fieldUiControl1"
+ v-if="field1"
+ :class="{ hasMultiFields: field1.type && field2.type }"
+ >
+ <Field
+ :full-width="true"
+ v-model="item[field1.key]"
+ :options="field1.availableValues"
+ @update:modelValue="onEntryChange(index, field1.key, $event)"
+ :placeholder="' '"
+ :uicontrol="field1.uiControl"
+ :name="`${name}-p1-${index}`"
+ :title="field1.title"
+ >
+ </Field>
+ </div>
+ <div
+ class="fieldUiControl fieldUiControl2"
+ v-if="field2"
+ >
+ <Field
+ :full-width="true"
+ :options="field2.availableValues"
+ @update:modelValue="onEntryChange(index, field2.key, $event)"
+ v-model="item[field2.key]"
+ :placeholder="' '"
+ :uicontrol="field2.uiControl"
+ :name="`${name}-p2-${index}`"
+ :title="field2.title"
+ >
+ </Field>
+ </div>
+ <div
+ class="fieldUiControl fieldUiControl3"
+ v-if="field3"
+ >
+ <Field
+ :full-width="true"
+ :options="field3.availableValues"
+ @update:modelValue="onEntryChange(index, field3.key, $event)"
+ v-model="item[field3.key]"
+ :placeholder="' '"
+ :uicontrol="field3.uiControl"
+ :title="field3.title"
+ >
+ </Field>
+ </div>
+ <div
+ class="fieldUiControl fieldUiControl4"
+ v-if="field4"
+ >
+ <Field
+ :full-width="true"
+ :options="field4.availableValues"
+ @update:modelValue="onEntryChange(index, field4.key, $event)"
+ v-model="item[field4.key]"
+ :placeholder="' '"
+ :uicontrol="field4.uiControl"
+ :title="field4.title"
+ >
+ </Field>
+ </div>
+ <span
+ @click="removeEntry(index)"
+ class="icon-minus valign"
+ v-show="index + 1 !== modelValue.length"
+ :title="translate('General_Remove')"
+ />
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import useExternalPluginComponent from '../useExternalPluginComponent';
+
+// async since this is a a recursive component
+const Field = useExternalPluginComponent('CorePluginsAdmin', 'Field');
+
+export default defineComponent({
+ props: {
+ modelValue: Array,
+ name: String,
+ field1: Object,
+ field2: Object,
+ field3: Object,
+ field4: Object,
+ },
+ components: {
+ Field,
+ },
+ computed: {
+ fieldCount() {
+ if (this.field1 && this.field2 && this.field3 && this.field4) {
+ return 4;
+ }
+
+ if (this.field1 && this.field2 && this.field3) {
+ return 3;
+ }
+
+ if (this.field1 && this.field2) {
+ return 2;
+ }
+
+ if (this.field1) {
+ return 1;
+ }
+
+ return 0;
+ },
+ },
+ emits: ['update:modelValue'],
+ watch: {
+ modelValue(newValue) {
+ this.checkEmptyModelValue(newValue);
+ },
+ },
+ mounted() {
+ this.checkEmptyModelValue(this.modelValue);
+ },
+ methods: {
+ checkEmptyModelValue(newValue) {
+ // make sure there is always an empty new value
+ if (!newValue || !newValue.length || this.isEmptyValue(newValue.slice(-1)[0])) {
+ this.$emit('update:modelValue', [...(newValue || []), this.makeEmptyValue()]);
+ }
+ },
+ onEntryChange(index: number, key: string, newValue: unknown) {
+ const newWholeValue = [...this.modelValue];
+ newWholeValue[index] = { ...newWholeValue[index], [key]: newValue };
+ this.$emit('update:modelValue', newWholeValue);
+ },
+ removeEntry(index: number) {
+ if (index > -1) {
+ const newValue = this.modelValue.filter((x, i) => i !== index);
+ this.$emit('update:modelValue', newValue);
+ }
+ },
+ isEmptyValue(value: Record<string, unknown>) {
+ const { fieldCount } = this;
+
+ if (fieldCount === 4) {
+ if (!value[this.field1.key]
+ && !value[this.field2.key]
+ && !value[this.field3.key]
+ && !value[this.field4.key]
+ ) {
+ return false;
+ }
+ } else if (fieldCount === 3) {
+ if (!value[this.field1.key] && !value[this.field2.key] && !value[this.field3.key]) {
+ return false;
+ }
+ } else if (fieldCount === 2) {
+ if (!value[this.field1.key] && !value[this.field2.key]) {
+ return false;
+ }
+ } else if (fieldCount === 1) {
+ if (!value[this.field1.key]) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+ makeEmptyValue(): Record<string, unknown> {
+ const result: Record<string, unknown> = {};
+ if (this.field1 && this.field1.key) {
+ result[this.field1.key] = '';
+ }
+ if (this.field2 && this.field2.key) {
+ result[this.field2.key] = '';
+ }
+ if (this.field3 && this.field3.key) {
+ result[this.field3.key] = '';
+ }
+ if (this.field4 && this.field4.key) {
+ result[this.field4.key] = '';
+ }
+ return result;
+ },
+ },
+});
+</script>
diff --git a/plugins/CoreHome/vue/src/Notification/Notification.adapter.ts b/plugins/CoreHome/vue/src/Notification/Notification.adapter.ts
index 5845718976..4ff27943e9 100644
--- a/plugins/CoreHome/vue/src/Notification/Notification.adapter.ts
+++ b/plugins/CoreHome/vue/src/Notification/Notification.adapter.ts
@@ -5,7 +5,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-import createAngularJsAdapter from '../createAngularJsAdapter';
+import createAngularJsAdapter, { transformAngularJsBoolAttr } from '../createAngularJsAdapter';
import Notification from './Notification.vue';
export default createAngularJsAdapter({
@@ -25,7 +25,7 @@ export default createAngularJsAdapter({
},
noclear: {
angularJsBind: '@?',
- transform: (v) => !!v,
+ transform: transformAngularJsBoolAttr,
},
toastLength: {
angularJsBind: '@?',
diff --git a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts
index b3438d2bb7..2e5fcffd80 100644
--- a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts
+++ b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts
@@ -6,6 +6,7 @@
*/
import { INgModelController, ITimeoutService } from 'angular';
+import { nextTick } from 'vue';
import createAngularJsAdapter from '../createAngularJsAdapter';
import SiteSelector from './SiteSelector.vue';
import Matomo from '../Matomo/Matomo';
@@ -43,17 +44,29 @@ export default createAngularJsAdapter<[ITimeoutService]>({
$inject: ['$timeout'],
directiveName: 'piwikSiteselector',
events: {
- 'update:modelValue': (newValue, vm, scope, element, attrs, ngModel) => {
+ 'update:modelValue': (newValue, vm, scope, element, attrs, ngModel, $timeout) => {
if ((newValue && !vm.modelValue)
|| (!newValue && vm.modelValue)
|| newValue.id !== vm.modelValue.id
) {
- element.attr('siteid', newValue.id);
- element.trigger('change', newValue);
+ $timeout(() => {
+ scope.value = newValue;
- if (ngModel) {
- ngModel.$setViewValue(newValue);
- }
+ element.attr('siteid', newValue.id);
+ element.trigger('change', newValue);
+
+ if (ngModel
+ // the original site selector did not initiate an ngModel change when initializing its
+ // internal selectedSite state. mimicking that behavior here for BC.
+ && (scope.isNotFirstModelChange
+ || vm.modelValue)
+ ) {
+ ngModel.$setViewValue(newValue);
+ ngModel.$render(); // not called automatically by the digest
+ }
+
+ scope.isNotFirstModelChange = true;
+ });
}
},
blur(event, vm, scope) {
@@ -63,16 +76,26 @@ export default createAngularJsAdapter<[ITimeoutService]>({
postCreate(vm, scope, element, attrs, controller, $timeout: ITimeoutService) {
const ngModel = controller as INgModelController;
+ scope.$watch('value', (newVal) => {
+ if (newVal !== vm.modelValue) {
+ vm.modelValue = newVal;
+ }
+ });
+
// setup ng-model mapping
if (ngModel) {
- ngModel.$setViewValue(vm.modelValue);
+ if (vm.modelValue) {
+ ngModel.$setViewValue(vm.modelValue);
+ }
ngModel.$render = () => {
- if (angular.isString(ngModel.$viewValue)) {
- vm.modelValue = JSON.parse(ngModel.$viewValue);
- } else {
- vm.modelValue = ngModel.$viewValue;
- }
+ nextTick(() => {
+ if (angular.isString(ngModel.$viewValue)) {
+ vm.modelValue = JSON.parse(ngModel.$viewValue);
+ } else {
+ vm.modelValue = ngModel.$viewValue;
+ }
+ });
};
}
diff --git a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue
index 32369de3bb..abb4237423 100644
--- a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue
+++ b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue
@@ -13,7 +13,7 @@
<input
v-if="name"
type="hidden"
- :value="selectedSite?.id"
+ :value="modelValue?.id"
:name="name"
/>
<a
@@ -32,11 +32,11 @@
/>
<span>
<span
- v-text="selectedSite?.name || firstSiteName"
- v-if="selectedSite?.name || !placeholder"
+ v-text="modelValue?.name || firstSiteName"
+ v-if="modelValue?.name || !placeholder"
/>
<span
- v-if="!selectedSite?.name && placeholder"
+ v-if="!modelValue?.name && placeholder"
class="placeholder"
>{{ placeholder }}</span>
</span>
@@ -81,8 +81,8 @@
<li
@click="switchSite(site, $event)"
v-show="!(!showSelectedSite && activeSiteId === site.idsite)"
- v-for="site in sites"
- :key="site.idsite"
+ v-for="(site, index) in sites"
+ :key="index"
>
<a
@click="$event.preventDefault()"
@@ -140,7 +140,6 @@ interface SiteSelectorState {
showSitesList: boolean;
isLoading: boolean;
sites: Site[];
- selectedSite: SiteRef;
autocompleteMinSites: null|number;
}
@@ -195,12 +194,6 @@ export default defineComponent({
searchTerm() {
this.onSearchTermChanged();
},
- modelValue: {
- handler(newValue) {
- this.selectedSite = { ...newValue };
- },
- deep: true,
- },
},
data(): SiteSelectorState {
return {
@@ -209,7 +202,7 @@ export default defineComponent({
showSitesList: false,
isLoading: false,
sites: [],
- selectedSite: {
+ selectedSite: this.modelValue || {
id: Matomo.idSite,
name: Matomo.helper.htmlDecode(Matomo.siteName),
},
@@ -220,9 +213,8 @@ export default defineComponent({
window.initTopControls();
this.loadInitialSites().then(() => {
- if ((!this.selectedSite || !this.selectedSite.id) && this.sites[0]) {
- this.selectedSite = { id: this.sites[0].idsite, name: this.sites[0].name };
- this.$emit('update:modelValue', { ...this.selectedSite });
+ if ((!this.modelValue || !this.modelValue.id) && this.sites[0]) {
+ this.$emit('update:modelValue', { id: this.sites[0].idsite, name: this.sites[0].name });
}
});
@@ -247,7 +239,7 @@ export default defineComponent({
},
selectorLinkTitle() {
return this.hasMultipleSites
- ? translate('CoreHome_ChangeCurrentWebsite', this.selectedSite?.name || this.firstSiteName)
+ ? translate('CoreHome_ChangeCurrentWebsite', this.modelValue?.name || this.firstSiteName)
: '';
},
hasMultipleSites() {
@@ -293,8 +285,7 @@ export default defineComponent({
return;
}
- this.selectedSite = { id: site.idsite, name: site.name };
- this.$emit('update:modelValue', { ...this.selectedSite });
+ this.$emit('update:modelValue', { id: site.idsite, name: site.name });
if (!this.switchSiteOnSelect || this.activeSiteId === site.idsite) {
return;
diff --git a/plugins/CoreHome/vue/src/createAngularJsAdapter.ts b/plugins/CoreHome/vue/src/createAngularJsAdapter.ts
index d1806e84b5..dca9ff4357 100644
--- a/plugins/CoreHome/vue/src/createAngularJsAdapter.ts
+++ b/plugins/CoreHome/vue/src/createAngularJsAdapter.ts
@@ -13,14 +13,22 @@ import {
} from 'vue';
import translate from './translate';
-interface SingleScopeVarInfo {
+interface SingleScopeVarInfo<InjectTypes> {
vue?: string;
default?: any; // eslint-disable-line
- transform?: (v: unknown) => unknown;
+ transform?: (
+ v: unknown,
+ vm: ComponentPublicInstance,
+ scope: ng.IScope,
+ element: ng.IAugmentedJQuery,
+ attrs: ng.IAttributes,
+ otherController: ng.IControllerService,
+ ...injected: InjectTypes,
+ ) => unknown;
angularJsBind?: string;
}
-type ScopeMapping = { [scopeVarName: string]: SingleScopeVarInfo };
+type ScopeMapping<InjectTypes> = { [scopeVarName: string]: SingleScopeVarInfo<InjectTypes> };
type AdapterFunction<InjectTypes, R = void> = (
scope: ng.IScope,
@@ -64,10 +72,21 @@ function toAngularJsCamelCase(arg: string): string {
.replace(/-([a-z])/g, (s, p) => p.toUpperCase());
}
+export function removeAngularJsSpecificProperties<T>(newValue: T): T {
+ if (typeof newValue === 'object'
+ && newValue !== null
+ && Object.getPrototypeOf(newValue) === Object.prototype
+ ) {
+ return Object.fromEntries(Object.entries(newValue).filter((pair) => !/^\$/.test(pair[0]))) as T;
+ }
+
+ return newValue;
+}
+
export default function createAngularJsAdapter<InjectTypes = []>(options: {
component: ComponentType,
require?: string,
- scope?: ScopeMapping,
+ scope?: ScopeMapping<InjectTypes>,
directiveName: string,
events?: EventMapping<InjectTypes>,
$inject?: string[],
@@ -76,6 +95,7 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
postCreate?: PostCreateFunction<InjectTypes>,
noScope?: boolean,
restrict?: string,
+ priority?: number,
}): ng.IDirectiveFactory {
const {
component,
@@ -89,6 +109,7 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
postCreate,
noScope,
restrict = 'A',
+ priority,
} = options;
const currentTranscludeCounter = transcludeCounter;
@@ -110,6 +131,7 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
const adapter: ng.IDirective = {
restrict,
require,
+ priority,
scope: noScope ? undefined : angularJsScope,
compile: function angularJsAdapterCompile() {
return {
@@ -125,7 +147,7 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
let rootVueTemplate = '<root-component';
Object.entries(events).forEach((info) => {
const [eventName] = info;
- rootVueTemplate += ` @${eventName}="onEventHandler('${eventName}', $event)"`;
+ rootVueTemplate += ` @${toKebabCase(eventName)}="onEventHandler('${eventName}', $event)"`;
});
Object.entries(scope).forEach(([key, info]) => {
if (info.angularJsBind === '&') {
@@ -134,7 +156,7 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
rootVueTemplate += ` @${eventName}="onEventHandler('${eventName}', $event)"`;
}
} else {
- rootVueTemplate += ` :${info.vue}="${info.vue}"`;
+ rootVueTemplate += ` :${toKebabCase(info.vue)}="${info.vue}"`;
}
});
rootVueTemplate += '>';
@@ -149,14 +171,22 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
data() {
const initialData = {};
Object.entries(scope).forEach(([scopeVarName, info]) => {
- let value = ngScope[scopeVarName];
+ let value = removeAngularJsSpecificProperties(ngScope[scopeVarName]);
if (typeof value === 'undefined' && typeof info.default !== 'undefined') {
value = info.default instanceof Function
? info.default(ngScope, ngElement, ngAttrs, ...injectedServices)
: info.default;
}
if (info.transform) {
- value = info.transform(value);
+ value = info.transform(
+ value,
+ this,
+ ngScope,
+ ngElement,
+ ngAttrs,
+ ngController,
+ ...injectedServices,
+ );
}
initialData[info.vue] = value;
});
@@ -210,16 +240,24 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
}
ngScope.$watch(scopeVarName, (newValue: any) => { // eslint-disable-line
- let newValueFinal = newValue;
+ let newValueFinal = removeAngularJsSpecificProperties(newValue);
if (typeof info.default !== 'undefined' && typeof newValue === 'undefined') {
newValueFinal = info.default instanceof Function
? info.default(ngScope, ngElement, ngAttrs, ...injectedServices)
: info.default;
}
if (info.transform) {
- newValueFinal = info.transform(newValueFinal);
+ newValueFinal = info.transform(
+ newValueFinal,
+ vm,
+ ngScope,
+ ngElement,
+ ngAttrs,
+ ngController,
+ ...injectedServices,
+ );
}
- vm[scopeVarName] = newValueFinal;
+ vm[info.vue] = newValueFinal;
});
});
@@ -253,3 +291,27 @@ export default function createAngularJsAdapter<InjectTypes = []>(options: {
return angularJsAdapter;
}
+
+export function transformAngularJsBoolAttr(v: unknown): boolean|undefined {
+ if (typeof v === 'undefined') {
+ return undefined;
+ }
+
+ if (v === 'true') {
+ return true;
+ }
+
+ return !!v && v > 0 && v !== '0';
+}
+
+export function transformAngularJsIntAttr(v: string): number {
+ if (typeof v === 'undefined') {
+ return undefined;
+ }
+
+ if (v === null) {
+ return null;
+ }
+
+ return parseInt(v, 10);
+}
diff --git a/plugins/CoreHome/vue/src/debounce.ts b/plugins/CoreHome/vue/src/debounce.ts
index b92fe93a62..8629e78589 100644
--- a/plugins/CoreHome/vue/src/debounce.ts
+++ b/plugins/CoreHome/vue/src/debounce.ts
@@ -1,5 +1,5 @@
interface Callable {
- (...args: unknown[]): void;
+ (...args: unknown[]): unknown;
}
const DEFAULT_DEBOUNCE_DELAY = 300;
diff --git a/plugins/CoreHome/vue/src/index.ts b/plugins/CoreHome/vue/src/index.ts
index aade352c11..dd3867949c 100644
--- a/plugins/CoreHome/vue/src/index.ts
+++ b/plugins/CoreHome/vue/src/index.ts
@@ -30,9 +30,16 @@ import './DateRangePicker/DateRangePicker.adapter';
import './PeriodDatePicker/PeriodDatePicker.adapter';
import './SiteSelector/SiteSelector.adapter';
import './QuickAccess/QuickAccess.adapter';
+import './FieldArray/FieldArray.adapter';
+import './MultiPairField/MultiPairField.adapter';
export { default as debounce } from './debounce';
-export { default as createAngularJsAdapter } from './createAngularJsAdapter';
+export {
+ default as createAngularJsAdapter,
+ transformAngularJsBoolAttr,
+ transformAngularJsIntAttr,
+ removeAngularJsSpecificProperties,
+} from './createAngularJsAdapter';
export { default as activityIndicatorAdapter } from './ActivityIndicator/ActivityIndicator.adapter';
export { default as ActivityIndicator } from './ActivityIndicator/ActivityIndicator.vue';
export { default as translate } from './translate';
@@ -58,3 +65,5 @@ export { default as PeriodDatePicker } from './PeriodDatePicker/PeriodDatePicker
export * from './Notification';
export { default as SiteSelector } from './SiteSelector/SiteSelector.vue';
export { default as QuickAccess } from './QuickAccess/QuickAccess.vue';
+export { default as FieldArray } from './FieldArray/FieldArray.vue';
+export { default as MultiPairField } from './MultiPairField/MultiPairField.vue';
diff --git a/plugins/CoreHome/vue/src/translate.ts b/plugins/CoreHome/vue/src/translate.ts
index 317b5a8751..f68d037d89 100644
--- a/plugins/CoreHome/vue/src/translate.ts
+++ b/plugins/CoreHome/vue/src/translate.ts
@@ -11,7 +11,7 @@ export default function translate(
): string {
let pkArgs = values as string[];
// handle variadic args AND single array of values (to match _pk_translate signature)
- if (values.length === 1 && values[0] && values[0] instanceof Array) {
+ if (values.length === 1 && values[0] && Array.isArray(values[0])) {
[pkArgs] = values as string[][];
}
return window._pk_translate(translationStringId, pkArgs); // eslint-disable-line
diff --git a/plugins/CoreHome/vue/src/useExternalPluginComponent.ts b/plugins/CoreHome/vue/src/useExternalPluginComponent.ts
new file mode 100644
index 0000000000..69b80b62be
--- /dev/null
+++ b/plugins/CoreHome/vue/src/useExternalPluginComponent.ts
@@ -0,0 +1,23 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { defineAsyncComponent } from 'vue';
+
+export default function useExternalPluginComponent(
+ plugin: string,
+ component: string,
+): typeof defineAsyncComponent {
+ return defineAsyncComponent(() => (new Promise((resolve) => {
+ window.$(document).ready(() => {
+ if (window[plugin]) {
+ resolve(window[plugin][component]);
+ } else {
+ resolve(null); // plugin not loaded
+ }
+ });
+ })));
+}
diff --git a/plugins/CorePluginsAdmin/CorePluginsAdmin.php b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
index aeef54b2db..099afd2292 100644
--- a/plugins/CorePluginsAdmin/CorePluginsAdmin.php
+++ b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
@@ -49,8 +49,9 @@ class CorePluginsAdmin extends Plugin
{
$stylesheets[] = "plugins/CorePluginsAdmin/stylesheets/plugins_admin.less";
$stylesheets[] = "plugins/CorePluginsAdmin/angularjs/plugin-settings/plugin-settings.directive.less";
- $stylesheets[] = "plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.less";
- $stylesheets[] = "plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.less";
+ $stylesheets[] = "plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.less";
+ $stylesheets[] = "plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.less";
+ $stylesheets[] = "plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.less";
}
public static function isPluginsAdminEnabled()
diff --git a/plugins/CorePluginsAdmin/SettingsMetadata.php b/plugins/CorePluginsAdmin/SettingsMetadata.php
index 0b1e6723fc..ce96472569 100644
--- a/plugins/CorePluginsAdmin/SettingsMetadata.php
+++ b/plugins/CorePluginsAdmin/SettingsMetadata.php
@@ -113,7 +113,7 @@ class SettingsMetadata
$availableValues = (object) $availableValues;
}
- return array(
+ $result = array(
'name' => $setting->getName(),
'title' => $config->title,
'value' => $setting->getValue(),
@@ -124,10 +124,17 @@ class SettingsMetadata
'availableValues' => $availableValues,
'description' => $config->description,
'inlineHelp' => $config->inlineHelp,
+ // deprecated but kept here for API output BC
'templateFile' => $config->customUiControlTemplateFile,
'introduction' => $config->introduction,
'condition' => $config->condition,
);
+
+ if ($config->customFieldComponent) {
+ $result['component'] = $config->customFieldComponent;
+ }
+
+ return $result;
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/field/field.directive.html b/plugins/CorePluginsAdmin/angularjs/field/field.directive.html
deleted file mode 100644
index 8e99065714..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/field/field.directive.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="field">
- {{ field.myProperty }}
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/field/field.directive.js b/plugins/CorePluginsAdmin/angularjs/field/field.directive.js
deleted file mode 100644
index 28b5e98835..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/field/field.directive.js
+++ /dev/null
@@ -1,172 +0,0 @@
-/*!
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * Usage:
- * <div piwik-field>
- *
- * eg <div piwik-field uicontrol="select"
- * title="{{ 'SitesManager_Timezone'|translate }}"
- * value="site.timezone"
- * options="timezones"
- * inline-help="test"
- * description=""
- * introduction=""
- * name=""
- * placeholder=""
- * rows="3"
- * autocomplete="off"
- * data-disabled="true"
- * full-width="true"
- * templateFile=""></div>
- *
- * templateFile allows to render a custom template
- * We do not use type= attribute here as it would match some CSS from input type=radio etc
- */
-(function () {
- angular.module('piwikApp').directive('piwikField', piwikField);
-
- piwikField.$inject = ['piwik', '$compile'];
-
- function piwikField(piwik, $compile){
-
- return {
- restrict: 'A',
- require: '?ngModel',
- scope: {
- uicontrol: '@',
- name: '@',
- value: '@',
- default: '@',
- options: '=',
- description: '@',
- introduction: '@',
- title: '@',
- inlineHelp: '@',
- disabled: '=',
- uiControlAttributes: '=',
- uiControlOptions: '=',
- autocomplete: '@',
- condition: '@',
- varType: '@',
- autofocus: '@',
- tabindex: '@',
- templateFile: '@',
- fullWidth: '@',
- maxlength: '@',
- required: '@',
- placeholder: '@',
- rows: '@',
- min: '@',
- max: '@'
- },
- template: '<div piwik-form-field="field"></div>',
- link: function(scope, elm, attrs, ctrl) {
- if (!ctrl) {
- return;
- }
-
- // load init value
- if (scope.field.value !== undefined && scope.field.value !== null) {
- ctrl.$setViewValue(scope.field.value);
- } else if (ctrl.$viewValue) {
- scope.field.value = ctrl.$viewValue;
- }
-
- // view -> model
- scope.$watch('field.value', function (val, oldVal) {
- if (val !== oldVal && val !== ctrl.$viewValue) {
- ctrl.$setViewValue(val);
- }
- });
-
- // model -> view
- ctrl.$render = function() {
- scope.field.value = ctrl.$viewValue;
- };
-
- },
- controller: function ($scope) {
- var field = {};
- field.uiControl = $scope.uicontrol;
- if ($scope.varType) {
- field.type = $scope.varType;
- } else if (field.uiControl === 'multiselect') {
- field.type = 'array';
- } else if (field.uiControl === 'checkbox') {
- field.type = 'boolean';
- } else if (field.uiControl === 'site') {
- field.type = 'object';
- } else if (field.uiControl === 'number') {
- field.type = 'integer';
- } else {
- field.type = 'string';
- }
-
- field.name = $scope.name;
- field.value = $scope.value;
- field.defaultValue = $scope.default;
- field.availableValues = $scope.options;
- field.description = $scope.description;
- field.introduction = $scope.introduction;
- field.inlineHelp = $scope.inlineHelp;
- field.templateFile = $scope.templateFile;
- field.title = $scope.title;
- field.uiControlAttributes = $scope.uiControlAttributes || {};
- field.fullWidth = !!$scope.fullWidth;
- field.uiControlOptions = $scope.uiControlOptions || {};
-
- if (field.type === 'array' && angular.isString(field.value) && field.value) {
- field.value = JSON.parse(field.value);
- }
-
- var i = 0, attribute;
- var attributes = ['disabled', 'autocomplete', 'tabindex', 'autofocus', 'rows', 'required', 'maxlength', 'placeholder', 'min', 'max'];
- for (i; i < attributes.length; i++) {
- attribute = attributes[i];
- if (!!$scope[attribute]) {
- field.uiControlAttributes[attribute] = $scope[attribute];
- }
- }
-
- $scope.field = field;
-
- $scope.$watch('options', function (val, oldVal) {
- if (val !== oldVal) {
- $scope.field.availableValues = val;
- }
- });
-
- $scope.$watch('title', function (val, oldVal) {
- if (val !== oldVal) {
- $scope.field.title = val;
- }
- });
-
- $scope.$watch('inlineHelp', function (val, oldVal) {
- if (val !== oldVal) {
- $scope.field.inlineHelp = val;
- }
- });
-
- if ('undefined' !== typeof $scope.placeholder && $scope.placeholder !== null) {
- $scope.$watch('placeholder', function (val, oldVal) {
- if (val !== oldVal) {
- $scope.field.uiControlAttributes.placeholder = val;
- }
- });
- }
-
- $scope.$watch('disabled', function (val, oldVal) {
- if (val !== oldVal) {
- $scope.field.uiControlAttributes.disabled = val;
- }
- });
- }
- };
- }
-})(); \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox-array.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox-array.html
deleted file mode 100644
index eff2f55bad..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox-array.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<div>
- <label class="fieldRadioTitle" ng-show="formField.title">{{ formField.title }}</label>
- <p ng-repeat="checkboxModel in formField.availableOptions"
- class="checkbox">
- <label>
- <input ng-model="formField.checkboxkeys[$index.toString()]"
- value="{{ checkboxModel.key }}"
- ng-change="formField.updateCheckboxArrayValue()"
- piwik-attributes="{{formField.uiControlAttributes}}"
- type="checkbox"
- id="{{ formField.name + checkboxModel.key }}"
- name="{{ checkboxModel.name }}">
- <span>{{ checkboxModel.value }}</span>
-
- <span class="form-description" ng-show="checkboxModel.description">{{ checkboxModel.description }}</span>
- </label>
- </p>
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox.html
deleted file mode 100644
index 9ea7d9904d..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-checkbox.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<div class="checkbox">
- <label>
- <input ng-model="formField.value"
- piwik-attributes="{{formField.uiControlAttributes}}"
- ng-value="1"
- ng-checked="!!formField.value"
- type="checkbox"
- id="{{ formField.name }}"
- name="{{ formField.name }}">
-
- <span ng-bind-html="formField.title"></span>
- </label>
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.html
deleted file mode 100644
index d9f07888a5..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div class="expandableSelector" piwik-focus-anywhere-but-here="formField.showSelect = false">
- <div ng-click="formField.showSelect = !formField.showSelect" class="select-wrapper">
- <svg class="caret" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M7 10l5 5 5-5z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg>
- <input type="text" class="select-dropdown"
- readonly="true" value="{{ formField.title }}">
- </div>
-
- <div ng-show="formField.showSelect" class="expandableList z-depth-2">
-
- <div class="searchContainer">
- <input type="text" placeholder="Search"
- ng-model="formField.searchTerm" class="expandableSearch browser-default"
- piwik-focus-if="formField.showSelect">
- </div>
- <ul class="collection firstLevel">
- <li ng-repeat="options in formField.availableOptions" class="collection-item" ng-show="options.values|filter:formField.searchTerm|length">
- <h4 class="expandableListCategory" ng-click="formField.showCategory == options.group ? formField.showCategory = '' : formField.showCategory = options.group">{{ options.group }} <span class="secondary-content" ng-class='{"icon-arrow-right": formField.showCategory != options.group, "icon-arrow-bottom": formField.showCategory == options.group}'></span></h4>
-
- <ul ng-show="formField.showCategory == options.group || formField.searchTerm" class="collection secondLevel">
- <li class="expandableListItem collection-item valign-wrapper" ng-repeat="children in options.values|filter:formField.searchTerm" ng-click="formField.value = children.key;formField.showSelect = false;"><span class="primary-content">{{ children.value }}</span> <span ng-show="children.tooltip" title="{{ children.tooltip }}" class="secondary-content icon-help"></span></li>
- </ul>
- </li>
- </ul>
- </div>
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-field-array.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-field-array.html
deleted file mode 100644
index 8c0f0cf99b..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-field-array.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div>
- <label for="{{ formField.name }}" ng-bind-html="formField.title"></label>
- <div matomo-field-array
- name="formField.name"
- ng-model="formField.value"
- field="formField.uiControlAttributes.field">
- </div>
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-file.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-file.html
deleted file mode 100644
index b784b4a91f..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-file.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<div>
- <div class="btn">
- <span for="{{ formField.name }}" ng-bind-html="formField.title"></span>
- <input name="{{ formField.name }}" type="file" id="{{ formField.name }}">
- </div>
-
- <div class="file-path-wrapper">
- <input class="file-path validate" ng-model="formField.value" type="text">
- </div>
-</div>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-hidden.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-hidden.html
deleted file mode 100644
index d7bb771124..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-hidden.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div>
- <input type="{{ formField.uiControl }}"
- name="{{ formField.name }}"
- ng-model="formField.value"
- >
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-multiselect.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-multiselect.html
deleted file mode 100644
index 4f3a173b73..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-multiselect.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<select multiple
- name="{{ formField.name }}"
- ng-model="formField.value"
- ng-options="t.key as t.value group by t.group for t in formField.availableOptions"
- piwik-attributes="{{formField.uiControlAttributes}}">
-</select>
-<label for="{{ formField.name }}" ng-bind-html="formField.title"></label> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.html
deleted file mode 100644
index 4c7670e43f..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div class="fieldMultiTuple">
- <label for="{{ formField.name }}" ng-bind-html="formField.title"></label>
- <div matomo-multi-pair-field
- name="formField.name"
- ng-model="formField.value"
- field1="formField.uiControlAttributes.field1"
- field2="formField.uiControlAttributes.field2"
- field3="formField.uiControlAttributes.field3"
- field4="formField.uiControlAttributes.field4">
- </div>
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-number.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-number.html
deleted file mode 100644
index 9866ab0341..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-number.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<input
- class="control_{{ formField.uiControl }}"
- type="{{ formField.uiControl }}"
- id="{{ formField.name }}"
- name="{{ formField.name }}"
- ng-model="formField.value"
- string-to-number
- ng-value="formField.value"
- piwik-attributes="{{formField.uiControlAttributes}}"
->
-<label for="{{ formField.name }}" ng-bind-html="formField.title"></label> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-radio.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-radio.html
deleted file mode 100644
index 13f93090a6..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-radio.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<div>
- <label class="fieldRadioTitle" ng-show="formField.title">{{ formField.title }}</label>
-
- <p ng-repeat="radioModel in formField.availableOptions"
- class="radio">
- <label>
- <input ng-model="formField.value"
- ng-value="radioModel.key"
- type="radio"
- id="{{ formField.name + radioModel.key }}"
- name="{{ formField.name }}"
- ng-disabled="radioModel.disabled || formField.disabled"
- piwik-attributes="{{formField.uiControlAttributes}}"
- >
-
- <span>{{ radioModel.value }}
- <span class="form-description" ng-show="radioModel.description">{{ radioModel.description }}</span>
- </span>
- </label>
- </p>
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-select.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-select.html
deleted file mode 100644
index 41a9a34cfb..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-select.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<select name="{{ formField.name }}"
- ng-model="formField.value"
- ng-options="t.key as t.value group by t.group disable when t.disabled for t in formField.availableOptions"
- piwik-attributes="{{formField.uiControlAttributes}}"
- ng-click="onShowSelect()"
->
-</select>
-<label for="{{ formField.name }}" ng-bind-html="formField.title"></label>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-site.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-site.html
deleted file mode 100644
index ceecde4836..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-site.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div>
- <label for="{{ formField.name }}" class="siteSelectorLabel" ng-bind-html="formField.title"></label>
-
- <div piwik-siteselector
- class="sites_autocomplete"
- ng-model="formField.value"
- siteid="{{ formField.value.id }}"
- sitename="{{ formField.value.name }}"
- id="{{ formField.name }}"
- show-all-sites-item="formField.uiControlAttributes.showAllSitesItem || false"
- switch-site-on-select="false"
- show-selected-site="true"
- only-sites-with-admin-access="formField.uiControlAttributes.onlySitesWithAdminAccess || false"
- placeholder="{{ formField.uiControlAttributes.placeholder }}"
- piwik-attributes="{{formField.uiControlAttributes}}"
- ></div>
-</div>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-text-array.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-text-array.html
deleted file mode 100644
index 2a127da5cf..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-text-array.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<div>
- <label for="{{ formField.name }}" ng-bind-html="formField.title"></label>
- <input class="control_{{ formField.uiControl }}"
- type="{{ formField.uiControl }}"
- name="{{ formField.name }}"
- ng-list
- ng-model="formField.value"
- piwik-attributes="{{formField.uiControlAttributes}}"
- >
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-text.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-text.html
deleted file mode 100644
index 34076620d7..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-text.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<input
- class="control_{{ formField.uiControl }}"
- type="{{ formField.uiControl }}"
- id="{{ formField.name }}"
- name="{{ formField.name }}"
- ng-model="formField.value"
- ng-value="formField.value"
- ng-trim="false"
- piwik-attributes="{{formField.uiControlAttributes}}"
->
-<label for="{{ formField.name }}" ng-bind-html="formField.title"></label>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-textarea-array.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-textarea-array.html
deleted file mode 100644
index f65c49cc26..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-textarea-array.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div>
- <label for="{{ formField.name }}" ng-bind-html="formField.title"></label>
- <textarea name="{{ formField.name }}"
- ng-list="&#10;" ng-trim="false"
- piwik-attributes="{{formField.uiControlAttributes}}"
- ng-model="formField.value"
- class="materialize-textarea"
- ></textarea>
-</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-textarea.html b/plugins/CorePluginsAdmin/angularjs/form-field/field-textarea.html
deleted file mode 100644
index 97d0b27482..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-textarea.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<textarea name="{{ formField.name }}"
- piwik-attributes="{{formField.uiControlAttributes}}"
- id="{{ formField.name }}"
- ng-model="formField.value"
- class="materialize-textarea"
-></textarea>
-<label for="{{ formField.name }}" ng-bind-html="formField.title"></label>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html
deleted file mode 100644
index 86acb985a1..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<div class="form-group row" ng-show="formField.showField">
-
- <h3 ng-if="formField.introduction" class="col s12">{{ formField.introduction }}</h3>
-
- <div class="col s12"
- ng-class="{'input-field': formField.uiControl != 'checkbox' && formField.uiControl != 'radio', 'file-field': formField.uiControl == 'file', 'm6': !formField.fullWidth}"
- ng-include="formField.templateFile" onload="templateLoaded()"
- >
-
- </div>
- <div class="col s12"
- ng-class="{'m6': !formField.fullWidth}">
- <div ng-if="formField.description || formField.inlineHelp || (formField.defaultValue && formField.uiControl != 'checkbox' && formField.uiControl != 'radio')"
- class="form-help">
-
- <div ng-show="formField.description"
- class='form-description'>{{ formField.description }}</div>
-
- <span class="inline-help" ng-bind-html="formField.inlineHelp"></span>
-
- <span ng-show="formField.defaultValuePretty && formField.uiControl != 'checkbox' && formField.uiControl != 'radio'">
- <br />
- {{ 'General_Default'|translate }}:
- <span>{{formField.defaultValuePretty|limitTo:50}}</span>
- </span>
- </div>
- </div>
-</div>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
deleted file mode 100644
index 81a7da1918..0000000000
--- a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
+++ /dev/null
@@ -1,438 +0,0 @@
-/*!
- * Matomo - free/libre analytics platform
- *
- * @link https://matomo.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * Usage:
- * <div piwik-form-field="{...}">
- */
-(function () {
- angular.module('piwikApp').directive('piwikFormField', piwikFormField);
-
- piwikFormField.$inject = ['piwik', '$timeout'];
-
- function piwikFormField(piwik, $timeout){
-
- function initMaterialSelect($select, placeholder, uiControlOptions) {
- uiControlOptions = uiControlOptions || {};
- $select.material_select(uiControlOptions);
-
- // add placeholder to input
- if (placeholder) {
- var $materialInput = $select.closest('.select-wrapper').find('input');
- $materialInput.attr('placeholder', placeholder);
- }
- }
-
- function syncMultiCheckboxKeysWithFieldValue(field)
- {
- angular.forEach(field.availableOptions, function (option, index) {
- if (option && field.value.indexOf(option.key) !== -1) {
- field.checkboxkeys[index] = true;
- } else {
- field.checkboxkeys[index] = false;
- }
- });
- }
-
- function hasUiControl(field, uiControlType)
- {
- return field.uiControl === uiControlType;
- }
-
- function isSelectControl(field)
- {
- return hasUiControl(field, 'select') || hasUiControl(field, 'multiselect');
- }
-
- function isArrayCheckboxControl(field)
- {
- return field.type === 'array' && hasUiControl(field, 'checkbox');
- }
-
- function hasGroupedValues(availableValues)
- {
- if (!angular.isObject(availableValues)
- || angular.isArray(availableValues)) {
- return false;
- }
-
- var key;
- for (key in availableValues) {
- if (Object.prototype.hasOwnProperty.call(availableValues, key)) {
- if (angular.isObject(availableValues[key])) {
- return true;
- } else {
- return false;
- }
- }
- }
-
- return false;
- }
-
- function whenRendered(scope, element, inlineHelpNode) {
- return function () {
- var field = scope.formField;
-
- if (inlineHelpNode) {
- angular.element(inlineHelpNode).appendTo(element.find('.inline-help'));
- }
-
- if (isSelectControl(field)) {
- var $select = element.find('select');
- initMaterialSelect($select, field.uiControlAttributes.placeholder, field.uiControlOptions);
-
- scope.$watch('formField.value', function (val, oldVal) {
- if (val !== oldVal) {
- $timeout(function () {
- initMaterialSelect($select, field.uiControlAttributes.placeholder, field.uiControlOptions);
- });
- }
- });
-
- scope.$watch('formField.uiControlAttributes.disabled', function (val, oldVal) {
- if (val !== oldVal) {
- $timeout(function () {
- initMaterialSelect($select, field.uiControlAttributes.placeholder, field.uiControlOptions);
- });
- }
- });
-
- } else if (hasUiControl(field, 'textarea')) {
- Materialize.textareaAutoResize(element.find('textarea'));
- scope.$watch('formField.value', function (val, oldVal) {
- if (val !== oldVal) {
- $timeout(function () {
- Materialize.textareaAutoResize(element.find('textarea'));
- });
- }
- });
-
- } else if (hasUiControl(field, 'file')) {
-
- // angular doesn't support file input type with ngModel. We implement our own "two way binding"
- var $file = element.find('[type=file]');
-
- $file.on('change', function () {
- scope.formField.value = $(this).val();
- });
-
- scope.$watch('formField.value', function (val, oldVal) {
- if (val !== oldVal && val === '') {
- $file.val('');
- }
- });
-
- } else if (isArrayCheckboxControl(field)) {
-
- Materialize.updateTextFields();
-
- scope.$watch('formField.value', function (val, oldVal) {
- if (val !== oldVal && val && !oldVal && angular.isArray(val)) {
- // we do this only on initial check
- syncMultiCheckboxKeysWithFieldValue(field);
- }
- });
-
-
- } else if (hasUiControl(field, 'text')
- || hasUiControl(field, 'textarea')
- || hasUiControl(field, 'password')
- || hasUiControl(field, 'email')
- || hasUiControl(field, 'number')
- || hasUiControl(field, 'url')
- || hasUiControl(field, 'search')) {
- Materialize.updateTextFields();
- scope.$watch('formField.value', function (val, oldVal) {
- if (val !== oldVal) {
- $timeout(function () {
- Materialize.updateTextFields();
- });
- }
- });
- }
- }
- }
-
- function getTemplate(field) {
- var control = field.uiControl;
- if (control === 'password' || control === 'url' || control === 'search' || control === 'email') {
- control = 'text'; // we use same template for text and password both
- }
-
- var file = 'field-' + control;
- var fieldsSupportingArrays = ['textarea', 'checkbox', 'text'];
- if (field.type === 'array' && fieldsSupportingArrays.indexOf(control) !== -1) {
- file += '-array';
- }
-
- return 'plugins/CorePluginsAdmin/angularjs/form-field/' + file + '.html?cb=' + piwik.cacheBuster;
- };
-
- return {
- restrict: 'A',
- scope: {
- piwikFormField: '=',
- allSettings: '='
- },
- templateUrl: 'plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html?cb=' + piwik.cacheBuster,
- compile: function (element, attrs) {
-
- function evaluateConditionalExpression(scope, field)
- {
- if (!field.condition) {
- return;
- }
-
- var values = {};
- angular.forEach(scope.allSettings, function (setting) {
- if (setting.value === '0') {
- values[setting.name] = 0;
- } else {
- values[setting.name] = setting.value;
- }
- });
-
- field.showField = scope.$eval(field.condition, values);
- }
-
- function formatAvailableValues(field)
- {
- if (!field.availableValues) {
- return;
- }
-
- var flatValues = [];
-
- if (hasUiControl(field, 'radio') || hasUiControl(field, 'checkbox')) {
- angular.forEach(field.availableValues, function (value, key) {
-
- if (angular.isObject(value) && typeof value.key !== 'undefined'){
- flatValues.push(value);
- return;
- }
-
- if (field.type === 'integer' && angular.isString(key)) {
- key = parseInt(key, 10);
- }
-
- flatValues.push({key: key, value: value});
- });
-
- return flatValues;
- }
-
- if (hasUiControl(field, 'expandable-select')) {
- var availableValues = field.availableValues;
- var flatValues = [];
-
- var groups = {};
- angular.forEach(availableValues, function (value) {
-
- if (!value.group) {
- value.group = '';
- }
-
- if (!(value.group in groups) || !groups[value.group]) {
- groups[value.group] = {values: [], group: value.group}
- }
-
- var formatted = {key: value.key, value: value.value};
-
- if ('tooltip' in value && value.tooltip) {
- formatted.tooltip = value.tooltip;
- }
-
- groups[value.group].values.push(formatted);
- });
-
- angular.forEach(groups, function (group) {
- if (group.values.length) {
- flatValues.push(group);
- }
- });
-
- return flatValues;
- }
-
- if (isSelectControl(field)) {
- var availableValues = field.availableValues;
-
- if (!hasGroupedValues(availableValues)) {
- availableValues = {'': availableValues};
- }
-
- var flatValues = [];
- angular.forEach(availableValues, function (values, group) {
- angular.forEach(values, function (value, key) {
-
- if (angular.isObject(value) && typeof value.key !== 'undefined'){
- flatValues.push(value);
- return;
- }
-
- if (field.type === 'integer' && angular.isString(key)) {
- key = parseInt(key, 10);
- }
-
- flatValues.push({group: group, key: key, value: value});
- });
- });
-
- return flatValues;
- }
-
- return field.availableValues;
- }
-
- function formatPrettyDefaultValue(defaultValue, availableOptions) {
- if (angular.isString(defaultValue) && defaultValue) {
- // eg default value for multi tuple
- var defaultParsed = null;
- try {
- defaultParsed = JSON.parse(defaultValue);
- } catch (e) {
- // invalid JSON
- }
-
- if (angular.isObject(defaultParsed)) {
- return null;
- }
- }
-
- if (!angular.isArray(availableOptions)) {
- if (angular.isArray(defaultValue)) {
- return null;
- }
-
- return defaultValue;
- }
-
- var prettyValues = [];
-
- if (!angular.isArray(defaultValue)) {
- defaultValue = [defaultValue];
- }
-
- angular.forEach(availableOptions, function (value, key) {
- if (defaultValue.indexOf(value.key) !== -1 && typeof value.value !== 'undefined') {
- prettyValues.push(value.value);
- }
- });
-
- return prettyValues.join(', ');
- }
-
- return function (scope, element, attrs) {
- var field = scope.piwikFormField;
- var defaultValue = field.defaultValue;
-
-
- if (angular.isArray(field.defaultValue)) {
- field.defaultValue = defaultValue.join(',');
- }
-
- // convert boolean values since angular 1.6 uses strict equals when determining if a model value
- // matches the ng-value of an input.
- if (field.type === 'boolean') {
- var valueIsTruthy = field.value && field.value > 0 && field.value !== '0';
-
- // for checkboxes, the value MUST be either true or faluse
- if (field.uiControl === 'checkbox') {
- field.value = valueIsTruthy;
- } else if (field.uiControl === 'radio') {
- field.value = valueIsTruthy ? '1' : '0';
- }
- }
-
- // we are setting availableOptions and not availableValues again. Otherwise when watching the scope
- // availableValues and in the watch change availableValues could trigger lots of more watch events
- field.availableOptions = formatAvailableValues(field);
-
- // for selects w/ a placeholder, add an option to unset the select
- if (field.uiControl === 'select'
- && field.uiControlAttributes.placeholder
- && !hasOption('')
- ) {
- field.availableOptions.splice(0, 0, { key: '', value: '' });
- }
-
- field.defaultValuePretty = formatPrettyDefaultValue(defaultValue, field.availableOptions);
-
- field.showField = true;
-
- var inlineHelpNode;
- if (field.inlineHelp && field.inlineHelp.indexOf('#') === 0) {
- inlineHelpNode = field.inlineHelp;
- field.inlineHelp = ' '; // we make sure inline help will be shown
- }
-
- if (isArrayCheckboxControl(field)) {
- field.updateCheckboxArrayValue = function () {
- var values = [];
- for (var x in field.checkboxkeys) {
- if (field.checkboxkeys[x]) {
- values.push(field.availableOptions[x].key);
- }
- }
- field.value = values;
- }
- field.checkboxkeys = new Array(field.availableOptions.length);
-
- if (field.value && angular.isArray(field.value)) {
- syncMultiCheckboxKeysWithFieldValue(field);
- }
- }
-
- if (field.condition && scope.allSettings) {
- evaluateConditionalExpression(scope, field);
-
- for (var key in scope.allSettings) {
- if(scope.allSettings.hasOwnProperty(key)) {
- scope.$watchCollection('allSettings[' + key + '].value', function (val, oldVal) {
- if (val !== oldVal) {
- evaluateConditionalExpression(scope, field);
- }
- });
- }
- }
- }
-
- if (!field.templateFile) {
- field.templateFile = getTemplate(field);
- }
-
- scope.formField = field;
-
- scope.$watch('formField.availableValues', function (val, oldVal) {
- if (val !== oldVal) {
- scope.formField.availableOptions = formatAvailableValues(scope.formField);
-
- if (isSelectControl(scope.formField)) {
- $timeout(function () {
- initMaterialSelect(element.find('select'), field.uiControlAttributes.placeholder, field.uiControlOptions);
- });
- }
- }
- });
- scope.templateLoaded = function () {
- $timeout(whenRendered(scope, element, inlineHelpNode));
- };
-
- function hasOption(key) {
- for (var i = 0; i !== field.availableOptions.length; ++i) {
- if (field.availableOptions[i].key === key) {
- return true;
- }
- }
- return false;
- }
- };
- }
- };
- }
-})();
diff --git a/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js
new file mode 100644
index 0000000000..5d7f65aa94
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js
@@ -0,0 +1,2442 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory(require("CoreHome"), require("vue"));
+ else if(typeof define === 'function' && define.amd)
+ define(["CoreHome", ], factory);
+ else if(typeof exports === 'object')
+ exports["CorePluginsAdmin"] = factory(require("CoreHome"), require("vue"));
+ else
+ root["CorePluginsAdmin"] = factory(root["CoreHome"], root["Vue"]);
+})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__19dc__, __WEBPACK_EXTERNAL_MODULE__8bbf__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "plugins/CorePluginsAdmin/vue/dist/";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "fae3");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "19dc":
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__19dc__;
+
+/***/ }),
+
+/***/ "8bbf":
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;
+
+/***/ }),
+
+/***/ "fae3":
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+// ESM COMPAT FLAG
+__webpack_require__.r(__webpack_exports__);
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, "FormField", function() { return /* reexport */ FormField; });
+__webpack_require__.d(__webpack_exports__, "Field", function() { return /* reexport */ Field; });
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
+// This file is imported into lib/wc client bundles.
+
+if (typeof window !== 'undefined') {
+ var currentScript = window.document.currentScript
+ if (false) { var getCurrentScript; }
+
+ var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)
+ if (src) {
+ __webpack_require__.p = src[1] // eslint-disable-line
+ }
+}
+
+// Indicate to webpack that this file can be concatenated
+/* harmony default export */ var setPublicPath = (null);
+
+// EXTERNAL MODULE: external "CoreHome"
+var external_CoreHome_ = __webpack_require__("19dc");
+
+// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
+var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf");
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue?vue&type=template&id=77ed4ac2
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+
+var _hoisted_1 = {
+ class: "form-group row"
+};
+var _hoisted_2 = {
+ key: 0,
+ class: "col s12"
+};
+var _hoisted_3 = {
+ key: 0,
+ class: "form-help"
+};
+var _hoisted_4 = {
+ key: 0,
+ class: "inline-help",
+ ref: "inlineHelp"
+};
+
+var _hoisted_5 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+function render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_1, [_ctx.formField.introduction ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h3", _hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.formField.introduction), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["col s12", {
+ 'input-field': _ctx.formField.uiControl !== 'checkbox' && _ctx.formField.uiControl !== 'radio',
+ 'file-field': _ctx.formField.uiControl === 'file',
+ 'm6': !_ctx.formField.fullWidth
+ }])
+ }, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDynamicComponent"])(_ctx.childComponent), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])(_objectSpread(_objectSpread({
+ formField: _ctx.formField
+ }, _ctx.formField), {}, {
+ modelValue: _ctx.processedModelValue,
+ availableOptions: _ctx.availableOptions
+ }, _ctx.extraChildComponentParams), {
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ })
+ }), null, 16))], 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["col s12", {
+ 'm6': !_ctx.formField.fullWidth
+ }])
+ }, [_ctx.showFormHelp ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+ class: "form-description"
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.formField.description), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.formField.description]]), _ctx.formField.inlineHelp ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", _hoisted_4, null, 512)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [_hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Default')) + ": ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.defaultValuePrettyTruncated), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showDefaultValue]])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 2)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showField]]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue?vue&type=template&id=77ed4ac2
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue?vue&type=template&id=16b4705b
+
+var FieldCheckboxvue_type_template_id_16b4705b_hoisted_1 = {
+ class: "checkbox"
+};
+var FieldCheckboxvue_type_template_id_16b4705b_hoisted_2 = ["checked", "id", "name"];
+var FieldCheckboxvue_type_template_id_16b4705b_hoisted_3 = ["innerHTML"];
+function FieldCheckboxvue_type_template_id_16b4705b_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldCheckboxvue_type_template_id_16b4705b_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ onChange: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ })
+ }, _ctx.uiControlAttributes, {
+ value: 1,
+ checked: !!_ctx.modelValue,
+ type: "checkbox",
+ id: _ctx.name,
+ name: _ctx.name
+ }), null, 16, FieldCheckboxvue_type_template_id_16b4705b_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldCheckboxvue_type_template_id_16b4705b_hoisted_3)])]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue?vue&type=template&id=16b4705b
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue?vue&type=script&lang=ts
+
+/* harmony default export */ var FieldCheckboxvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: Boolean,
+ uiControlAttributes: Object,
+ name: String,
+ title: String
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onChange: function onChange(event) {
+ if (this.modelValue !== event.target.checked) {
+ this.$emit('update:modelValue', event.target.checked);
+ }
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue
+
+
+
+FieldCheckboxvue_type_script_lang_ts.render = FieldCheckboxvue_type_template_id_16b4705b_render
+
+/* harmony default export */ var FieldCheckbox = (FieldCheckboxvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue?vue&type=template&id=5700b1f7
+
+var FieldCheckboxArrayvue_type_template_id_5700b1f7_hoisted_1 = ["value", "checked", "onChange", "id", "name"];
+function FieldCheckboxArrayvue_type_template_id_5700b1f7_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ class: "fieldRadioTitle"
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.title), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.title]]), (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.availableOptions, function (checkboxModel, $index) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
+ key: $index,
+ class: "checkbox"
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ value: checkboxModel.key,
+ checked: !!_ctx.checkboxStates[$index],
+ onChange: function onChange($event) {
+ return _ctx.onChange($index);
+ }
+ }, _ctx.uiControlAttributes, {
+ type: "checkbox",
+ id: "".concat(_ctx.name).concat(checkboxModel.key),
+ name: checkboxModel.name
+ }), null, 16, FieldCheckboxArrayvue_type_template_id_5700b1f7_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(checkboxModel.value), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "form-description"
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(checkboxModel.description), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], checkboxModel.description]])])]);
+ }), 128))]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue?vue&type=template&id=5700b1f7
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue?vue&type=script&lang=ts
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+
+
+function getCheckboxStates(availableOptions, modelValue) {
+ return (availableOptions || []).map(function (o) {
+ return modelValue && modelValue.indexOf(o.key) !== -1;
+ });
+}
+
+/* harmony default export */ var FieldCheckboxArrayvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: Object,
+ name: String,
+ title: String,
+ availableOptions: Array,
+ uiControlAttributes: Object,
+ type: String
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ checkboxStates: function checkboxStates() {
+ return getCheckboxStates(this.availableOptions, this.modelValue);
+ }
+ },
+ mounted: function mounted() {
+ window.Materialize.updateTextFields();
+ },
+ methods: {
+ onChange: function onChange(changedIndex) {
+ var checkboxStates = _toConsumableArray(this.checkboxStates);
+
+ checkboxStates[changedIndex] = !checkboxStates[changedIndex];
+ var newValue = [];
+ Object.values(this.availableOptions).forEach(function (option, index) {
+ if (checkboxStates[index]) {
+ newValue.push(option.key);
+ }
+ });
+ this.$emit('update:modelValue', newValue);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue
+
+
+
+FieldCheckboxArrayvue_type_script_lang_ts.render = FieldCheckboxArrayvue_type_template_id_5700b1f7_render
+
+/* harmony default export */ var FieldCheckboxArray = (FieldCheckboxArrayvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue?vue&type=template&id=08a6705c
+
+var FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_1 = {
+ class: "expandableSelector"
+};
+
+var FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("svg", {
+ class: "caret",
+ height: "24",
+ viewBox: "0 0 24 24",
+ width: "24",
+ xmlns: "http://www.w3.org/2000/svg"
+}, [/*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("path", {
+ d: "M7 10l5 5 5-5z"
+}), /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("path", {
+ d: "M0 0h24v24H0z",
+ fill: "none"
+})], -1);
+
+var FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_3 = ["value"];
+var FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_4 = {
+ class: "expandableList z-depth-2"
+};
+var FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_5 = {
+ class: "searchContainer"
+};
+var _hoisted_6 = {
+ class: "collection firstLevel"
+};
+var _hoisted_7 = ["onClick"];
+var _hoisted_8 = {
+ class: "collection secondLevel"
+};
+var _hoisted_9 = ["onClick"];
+var _hoisted_10 = {
+ class: "primary-content"
+};
+var _hoisted_11 = ["title"];
+function FieldExpandableSelectvue_type_template_id_08a6705c_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _directive_focus_if = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("focus-if");
+
+ var _directive_focus_anywhere_but_here = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("focus-anywhere-but-here");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+ onClick: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.showSelect = !_ctx.showSelect;
+ }),
+ class: "select-wrapper"
+ }, [FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ type: "text",
+ class: "select-dropdown",
+ readonly: "readonly",
+ value: _ctx.modelValueText
+ }, null, 8, FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_3)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FieldExpandableSelectvue_type_template_id_08a6705c_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ type: "text",
+ placeholder: "Search",
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.searchTerm = $event;
+ }),
+ class: "expandableSearch browser-default"
+ }, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.searchTerm], [_directive_focus_if, _ctx.showSelect]])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", _hoisted_6, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.availableOptions, function (options, index) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", {
+ class: "collection-item",
+ key: index
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h4", {
+ class: "expandableListCategory",
+ onClick: function onClick($event) {
+ return _ctx.onCategoryClicked(options);
+ }
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(options.group) + " ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["secondary-content", {
+ "icon-arrow-right": _ctx.showCategory !== options.group,
+ "icon-arrow-bottom": _ctx.showCategory === options.group
+ }])
+ }, null, 2)], 8, _hoisted_7), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", _hoisted_8, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(options.values.filter(function (x) {
+ return x.value.indexOf(_ctx.searchTerm) !== -1;
+ }), function (children) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", {
+ class: "expandableListItem collection-item valign-wrapper",
+ key: children.key,
+ onClick: function onClick($event) {
+ return _ctx.onValueClicked(children);
+ }
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_10, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(children.value), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ title: children.tooltip,
+ class: "secondary-content icon-help"
+ }, null, 8, _hoisted_11), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], children.tooltip]])], 8, _hoisted_9);
+ }), 128))], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showCategory === options.group || _ctx.searchTerm]])], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], options.values.filter(function (x) {
+ return x.value.indexOf(_ctx.searchTerm) !== -1;
+ }).length]]);
+ }), 128))])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showSelect]])], 512)), [[_directive_focus_anywhere_but_here, {
+ blur: _ctx.onBlur
+ }]]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue?vue&type=template&id=08a6705c
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue?vue&type=script&lang=ts
+
+
+function getAvailableOptions(availableValues) {
+ var flatValues = [];
+ var groups = {};
+ Object.values(availableValues).forEach(function (uncastedValue) {
+ var value = uncastedValue;
+ var group = value.group || '';
+
+ if (!(group in groups) || !groups[group]) {
+ groups[group] = {
+ values: [],
+ group: group
+ };
+ }
+
+ var formatted = {
+ key: value.key,
+ value: value.value
+ };
+
+ if ('tooltip' in value && value.tooltip) {
+ formatted.tooltip = value.tooltip;
+ }
+
+ groups[group].values.push(formatted);
+ });
+ Object.values(groups).forEach(function (group) {
+ if (group.values.length) {
+ flatValues.push(group);
+ }
+ });
+ return flatValues;
+}
+/* harmony default export */ var FieldExpandableSelectvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: [Number, String],
+ availableOptions: Array,
+ title: String
+ },
+ directives: {
+ FocusAnywhereButHere: external_CoreHome_["FocusAnywhereButHere"],
+ FocusIf: external_CoreHome_["FocusIf"]
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ data: function data() {
+ return {
+ showSelect: false,
+ searchTerm: '',
+ showCategory: ''
+ };
+ },
+ computed: {
+ modelValueText: function modelValueText() {
+ if (this.title) {
+ return this.title;
+ }
+
+ var key = this.modelValue;
+ var keyItem;
+ (this.availableOptions || []).some(function (option) {
+ keyItem = option.values.find(function (item) {
+ return item.key === key;
+ });
+ return keyItem; // stop iterating if found
+ });
+
+ if (keyItem) {
+ return keyItem.value.toString();
+ }
+
+ return key;
+ }
+ },
+ methods: {
+ onBlur: function onBlur() {
+ this.showSelect = false;
+ },
+ onCategoryClicked: function onCategoryClicked(options) {
+ if (this.showCategory === options.group) {
+ this.showCategory = '';
+ } else {
+ this.showCategory = options.group;
+ }
+ },
+ onValueClicked: function onValueClicked(selectedValue) {
+ this.$emit('update:modelValue', selectedValue.key);
+ this.showSelect = false;
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue
+
+
+
+FieldExpandableSelectvue_type_script_lang_ts.render = FieldExpandableSelectvue_type_template_id_08a6705c_render
+
+/* harmony default export */ var FieldExpandableSelect = (FieldExpandableSelectvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue?vue&type=template&id=19925759
+
+var FieldFieldArrayvue_type_template_id_19925759_hoisted_1 = ["for", "innerHTML"];
+function FieldFieldArrayvue_type_template_id_19925759_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_FieldArray = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("FieldArray");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldFieldArrayvue_type_template_id_19925759_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_FieldArray, {
+ name: _ctx.name,
+ "model-value": _ctx.modelValue,
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onValueUpdate($event);
+ }),
+ field: _ctx.uiControlAttributes.field
+ }, null, 8, ["name", "model-value", "field"])]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue?vue&type=template&id=19925759
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue?vue&type=script&lang=ts
+
+
+/* harmony default export */ var FieldFieldArrayvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ components: {
+ FieldArray: external_CoreHome_["FieldArray"]
+ },
+ props: {
+ name: String,
+ title: String,
+ modelValue: null,
+ uiControlAttributes: Object
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onValueUpdate: function onValueUpdate(newValue) {
+ this.$emit('update:modelValue', newValue);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue
+
+
+
+FieldFieldArrayvue_type_script_lang_ts.render = FieldFieldArrayvue_type_template_id_19925759_render
+
+/* harmony default export */ var FieldFieldArray = (FieldFieldArrayvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue?vue&type=template&id=244b301c
+
+var FieldFilevue_type_template_id_244b301c_hoisted_1 = {
+ class: "btn"
+};
+var FieldFilevue_type_template_id_244b301c_hoisted_2 = ["for", "innerHTML"];
+var FieldFilevue_type_template_id_244b301c_hoisted_3 = ["name", "id"];
+var FieldFilevue_type_template_id_244b301c_hoisted_4 = {
+ class: "file-path-wrapper"
+};
+var FieldFilevue_type_template_id_244b301c_hoisted_5 = ["value"];
+function FieldFilevue_type_template_id_244b301c_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FieldFilevue_type_template_id_244b301c_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldFilevue_type_template_id_244b301c_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ ref: "fileInput",
+ name: _ctx.name,
+ type: "file",
+ id: _ctx.name,
+ onChange: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ })
+ }, null, 40, FieldFilevue_type_template_id_244b301c_hoisted_3)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FieldFilevue_type_template_id_244b301c_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ class: "file-path validate",
+ value: _ctx.modelValue,
+ type: "text"
+ }, null, 8, FieldFilevue_type_template_id_244b301c_hoisted_5)])]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue?vue&type=template&id=244b301c
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue?vue&type=script&lang=ts
+
+/* harmony default export */ var FieldFilevue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ name: String,
+ title: String,
+ modelValue: String
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ setup: function setup(props) {
+ var fileInput = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(null);
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["watch"])(function () {
+ return props.modelValue;
+ }, function (v) {
+ if (v === '') {
+ var fileInputElement = fileInput.value;
+ fileInputElement.value = '';
+ }
+ });
+ return {
+ fileInput: fileInput
+ };
+ },
+ methods: {
+ onChange: function onChange(event) {
+ var file = event.target.files.item(0);
+ this.$emit('update:modelValue', file);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue
+
+
+
+FieldFilevue_type_script_lang_ts.render = FieldFilevue_type_template_id_244b301c_render
+
+/* harmony default export */ var FieldFile = (FieldFilevue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue?vue&type=template&id=20e3ce54
+
+var FieldHiddenvue_type_template_id_20e3ce54_hoisted_1 = ["type", "name", "value"];
+function FieldHiddenvue_type_template_id_20e3ce54_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ type: _ctx.uiControl,
+ name: _ctx.name,
+ value: _ctx.modelValue,
+ onChange: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ })
+ }, null, 40, FieldHiddenvue_type_template_id_20e3ce54_hoisted_1)]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue?vue&type=template&id=20e3ce54
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue?vue&type=script&lang=ts
+
+/* harmony default export */ var FieldHiddenvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: null,
+ uiControl: String,
+ name: String
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onChange: function onChange(event) {
+ this.$emit('update:modelValue', event.target.value);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue
+
+
+
+FieldHiddenvue_type_script_lang_ts.render = FieldHiddenvue_type_template_id_20e3ce54_render
+
+/* harmony default export */ var FieldHidden = (FieldHiddenvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue?vue&type=template&id=7469c188
+
+var FieldMultituplevue_type_template_id_7469c188_hoisted_1 = {
+ class: "fieldMultiTuple"
+};
+var FieldMultituplevue_type_template_id_7469c188_hoisted_2 = ["for", "innerHTML"];
+function FieldMultituplevue_type_template_id_7469c188_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_MultiPairField = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("MultiPairField");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldMultituplevue_type_template_id_7469c188_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldMultituplevue_type_template_id_7469c188_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_MultiPairField, {
+ name: _ctx.name,
+ "model-value": _ctx.modelValue,
+ "onUpdate:modelValue": _ctx.onUpdateValue,
+ field1: _ctx.uiControlAttributes.field1,
+ field2: _ctx.uiControlAttributes.field2,
+ field3: _ctx.uiControlAttributes.field3,
+ field4: _ctx.uiControlAttributes.field4
+ }, null, 8, ["name", "model-value", "onUpdate:modelValue", "field1", "field2", "field3", "field4"])]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue?vue&type=template&id=7469c188
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue?vue&type=script&lang=ts
+
+
+/* harmony default export */ var FieldMultituplevue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ name: String,
+ title: String,
+ modelValue: null,
+ uiControlAttributes: Object
+ },
+ inheritAttrs: false,
+ components: {
+ MultiPairField: external_CoreHome_["MultiPairField"]
+ },
+ emits: ['update:modelValue'],
+ methods: {
+ onUpdateValue: function onUpdateValue(newValue) {
+ this.$emit('update:modelValue', newValue);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue
+
+
+
+FieldMultituplevue_type_script_lang_ts.render = FieldMultituplevue_type_template_id_7469c188_render
+
+/* harmony default export */ var FieldMultituple = (FieldMultituplevue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue?vue&type=template&id=7aed93b6
+
+var FieldNumbervue_type_template_id_7aed93b6_hoisted_1 = ["type", "id", "name", "value"];
+var FieldNumbervue_type_template_id_7aed93b6_hoisted_2 = ["for", "innerHTML"];
+function FieldNumbervue_type_template_id_7aed93b6_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ class: "control_".concat(_ctx.uiControl),
+ type: _ctx.uiControl,
+ id: _ctx.name,
+ name: _ctx.name,
+ value: (_ctx.modelValue || '').toString(),
+ onKeydown: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ }),
+ onChange: _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.onChange($event);
+ })
+ }, _ctx.uiControlAttributes), null, 16, FieldNumbervue_type_template_id_7aed93b6_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldNumbervue_type_template_id_7aed93b6_hoisted_2)], 64);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue?vue&type=template&id=7aed93b6
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue?vue&type=script&lang=ts
+
+
+/* harmony default export */ var FieldNumbervue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ uiControl: String,
+ name: String,
+ title: String,
+ modelValue: [Number, String],
+ uiControlAttributes: Object
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ created: function created() {
+ this.onChange = Object(external_CoreHome_["debounce"])(this.onChange.bind(this), 50);
+ },
+ methods: {
+ onChange: function onChange(event) {
+ var value = parseFloat(event.target.value);
+ this.$emit('update:modelValue', value);
+ }
+ },
+ mounted: function mounted() {
+ window.Materialize.updateTextFields();
+ },
+ watch: {
+ modelValue: function modelValue() {
+ setTimeout(function () {
+ window.Materialize.updateTextFields();
+ });
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue
+
+
+
+FieldNumbervue_type_script_lang_ts.render = FieldNumbervue_type_template_id_7aed93b6_render
+
+/* harmony default export */ var FieldNumber = (FieldNumbervue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue?vue&type=template&id=e73c5bb0
+
+var FieldRadiovue_type_template_id_e73c5bb0_hoisted_1 = ["value", "id", "name", "disabled", "checked"];
+function FieldRadiovue_type_template_id_e73c5bb0_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ class: "fieldRadioTitle"
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.title), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.title]]), (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.availableOptions || [], function (radioModel) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("p", {
+ key: radioModel.key,
+ class: "radio"
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ value: radioModel.key,
+ onChange: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ }),
+ type: "radio",
+ id: "".concat(_ctx.name).concat(radioModel.key),
+ name: _ctx.name,
+ disabled: radioModel.disabled || _ctx.disabled
+ }, _ctx.uiControlAttributes, {
+ checked: _ctx.modelValue === radioModel.key || "".concat(_ctx.modelValue) === radioModel.key
+ }), null, 16, FieldRadiovue_type_template_id_e73c5bb0_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(radioModel.value) + " ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "form-description"
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(radioModel.description), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], radioModel.description]])])])]);
+ }), 128))]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue?vue&type=template&id=e73c5bb0
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue?vue&type=script&lang=ts
+
+/* harmony default export */ var FieldRadiovue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ title: String,
+ availableOptions: Array,
+ name: String,
+ disabled: Boolean,
+ uiControlAttributes: Object,
+ modelValue: [String, Number]
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onChange: function onChange(event) {
+ this.$emit('update:modelValue', event.target.value);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue
+
+
+
+FieldRadiovue_type_script_lang_ts.render = FieldRadiovue_type_template_id_e73c5bb0_render
+
+/* harmony default export */ var FieldRadio = (FieldRadiovue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue?vue&type=template&id=87c835bc
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || FieldSelectvue_type_template_id_87c835bc_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function FieldSelectvue_type_template_id_87c835bc_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FieldSelectvue_type_template_id_87c835bc_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FieldSelectvue_type_template_id_87c835bc_arrayLikeToArray(o, minLen); }
+
+function FieldSelectvue_type_template_id_87c835bc_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+
+var FieldSelectvue_type_template_id_87c835bc_hoisted_1 = {
+ key: 0,
+ class: "matomo-field-select"
+};
+var FieldSelectvue_type_template_id_87c835bc_hoisted_2 = ["multiple", "name"];
+var FieldSelectvue_type_template_id_87c835bc_hoisted_3 = ["label"];
+var FieldSelectvue_type_template_id_87c835bc_hoisted_4 = ["value", "selected"];
+var FieldSelectvue_type_template_id_87c835bc_hoisted_5 = ["for", "innerHTML"];
+var FieldSelectvue_type_template_id_87c835bc_hoisted_6 = {
+ key: 1,
+ class: "matomo-field-select"
+};
+var FieldSelectvue_type_template_id_87c835bc_hoisted_7 = ["multiple", "name"];
+var FieldSelectvue_type_template_id_87c835bc_hoisted_8 = ["value", "selected"];
+var FieldSelectvue_type_template_id_87c835bc_hoisted_9 = ["for", "innerHTML"];
+function FieldSelectvue_type_template_id_87c835bc_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, [_ctx.groupedOptions ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldSelectvue_type_template_id_87c835bc_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("select", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ ref: "select",
+ class: "grouped",
+ multiple: _ctx.multiple,
+ name: _ctx.name,
+ onChange: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ })
+ }, _ctx.uiControlAttributes), [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.groupedOptions, function (_ref) {
+ var _ref2 = _slicedToArray(_ref, 2),
+ group = _ref2[0],
+ options = _ref2[1];
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("optgroup", {
+ key: group,
+ label: group
+ }, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(options, function (option) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("option", {
+ key: option.key,
+ value: "string:".concat(option.key),
+ selected: _ctx.multiple ? _ctx.modelValue && _ctx.modelValue.indexOf(option.key) !== -1 : _ctx.modelValue === option.key
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(option.value), 9, FieldSelectvue_type_template_id_87c835bc_hoisted_4);
+ }), 128))], 8, FieldSelectvue_type_template_id_87c835bc_hoisted_3);
+ }), 128))], 16, FieldSelectvue_type_template_id_87c835bc_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.title
+ }, null, 8, FieldSelectvue_type_template_id_87c835bc_hoisted_5)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !_ctx.groupedOptions && _ctx.options ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldSelectvue_type_template_id_87c835bc_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("select", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ class: "ungrouped",
+ ref: "select",
+ multiple: _ctx.multiple,
+ name: _ctx.name,
+ onChange: _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.onChange($event);
+ })
+ }, _ctx.uiControlAttributes), [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.options, function (option) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("option", {
+ key: option.key,
+ value: "string:".concat(option.key),
+ selected: _ctx.multiple ? _ctx.modelValue && _ctx.modelValue.indexOf(option.key) !== -1 : _ctx.modelValue === option.key
+ }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(option.value), 9, FieldSelectvue_type_template_id_87c835bc_hoisted_8);
+ }), 128))], 16, FieldSelectvue_type_template_id_87c835bc_hoisted_7), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.title
+ }, null, 8, FieldSelectvue_type_template_id_87c835bc_hoisted_9)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 64);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue?vue&type=template&id=87c835bc
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue?vue&type=script&lang=ts
+function FieldSelectvue_type_script_lang_ts_toConsumableArray(arr) { return FieldSelectvue_type_script_lang_ts_arrayWithoutHoles(arr) || FieldSelectvue_type_script_lang_ts_iterableToArray(arr) || FieldSelectvue_type_script_lang_ts_unsupportedIterableToArray(arr) || FieldSelectvue_type_script_lang_ts_nonIterableSpread(); }
+
+function FieldSelectvue_type_script_lang_ts_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function FieldSelectvue_type_script_lang_ts_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+
+function FieldSelectvue_type_script_lang_ts_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return FieldSelectvue_type_script_lang_ts_arrayLikeToArray(arr); }
+
+function FieldSelectvue_type_script_lang_ts_slicedToArray(arr, i) { return FieldSelectvue_type_script_lang_ts_arrayWithHoles(arr) || FieldSelectvue_type_script_lang_ts_iterableToArrayLimit(arr, i) || FieldSelectvue_type_script_lang_ts_unsupportedIterableToArray(arr, i) || FieldSelectvue_type_script_lang_ts_nonIterableRest(); }
+
+function FieldSelectvue_type_script_lang_ts_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function FieldSelectvue_type_script_lang_ts_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FieldSelectvue_type_script_lang_ts_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FieldSelectvue_type_script_lang_ts_arrayLikeToArray(o, minLen); }
+
+function FieldSelectvue_type_script_lang_ts_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function FieldSelectvue_type_script_lang_ts_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function FieldSelectvue_type_script_lang_ts_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+
+
+function initMaterialSelect(select, modelValue, placeholder) {
+ var uiControlOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+ var multiple = arguments.length > 4 ? arguments[4] : undefined;
+
+ if (!select) {
+ return;
+ }
+
+ var $select = window.$(select); // reset selected since materialize removes them
+
+ Array.from(select.options).forEach(function (opt) {
+ if (multiple) {
+ opt.selected = modelValue && modelValue.indexOf(opt.value.replace(/^string:/, '')) !== -1;
+ } else {
+ opt.selected = "string:".concat(modelValue) === opt.value;
+ }
+ });
+ $select.formSelect(uiControlOptions); // add placeholder to input
+
+ if (placeholder) {
+ var $materialInput = $select.closest('.select-wrapper').find('input');
+ $materialInput.attr('placeholder', placeholder);
+ }
+}
+
+function hasGroupedValues(availableValues) {
+ if (Array.isArray(availableValues) || !(_typeof(availableValues) === 'object')) {
+ return false;
+ }
+
+ return Object.values(availableValues).some(function (v) {
+ return _typeof(v) === 'object';
+ });
+}
+
+function hasOption(flatValues, key) {
+ return flatValues.some(function (f) {
+ return f.key === key;
+ });
+}
+
+function FieldSelectvue_type_script_lang_ts_getAvailableOptions(givenAvailableValues, type, uiControlAttributes) {
+ if (!givenAvailableValues) {
+ return [];
+ }
+
+ var hasGroups = true;
+ var availableValues = givenAvailableValues;
+
+ if (!hasGroupedValues(availableValues)) {
+ availableValues = {
+ '': givenAvailableValues
+ };
+ hasGroups = false;
+ }
+
+ var flatValues = [];
+ Object.entries(availableValues).forEach(function (_ref) {
+ var _ref2 = FieldSelectvue_type_script_lang_ts_slicedToArray(_ref, 2),
+ group = _ref2[0],
+ values = _ref2[1];
+
+ Object.entries(values).forEach(function (_ref3) {
+ var _ref4 = FieldSelectvue_type_script_lang_ts_slicedToArray(_ref3, 2),
+ valueObjKey = _ref4[0],
+ value = _ref4[1];
+
+ if (_typeof(value) === 'object' && typeof value.key !== 'undefined') {
+ flatValues.push(value);
+ return;
+ }
+
+ var key = valueObjKey;
+
+ if (type === 'integer' && typeof valueObjKey === 'string') {
+ key = parseInt(valueObjKey, 10);
+ }
+
+ flatValues.push({
+ group: hasGroups ? group : undefined,
+ key: key,
+ value: value
+ });
+ });
+ }); // for selects w/ a placeholder, add an option to unset the select
+
+ if (uiControlAttributes.placeholder && !hasOption(flatValues, '')) {
+ return [{
+ key: '',
+ value: ''
+ }].concat(flatValues);
+ }
+
+ return flatValues;
+}
+
+function handleOldAngularJsValues(value) {
+ if (typeof value === 'string') {
+ return value.replace(/^string:/, '');
+ }
+
+ return value;
+}
+
+/* harmony default export */ var FieldSelectvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: null,
+ multiple: Boolean,
+ name: String,
+ title: String,
+ availableOptions: Array,
+ uiControlAttributes: Object,
+ uiControlOptions: Object
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ options: function options() {
+ // if modelValue is empty, but there is no empty value allowed in availableOptions,
+ // add one temporarily until something is set
+ if (this.availableOptions && !hasOption(this.availableOptions, '') && (typeof this.modelValue === 'undefined' || this.modelValue === null || this.modelValue === '')) {
+ return [{
+ key: '',
+ value: this.modelValue,
+ group: this.hasGroups ? '' : undefined
+ }].concat(FieldSelectvue_type_script_lang_ts_toConsumableArray(this.availableOptions));
+ }
+
+ return this.availableOptions;
+ },
+ hasGroups: function hasGroups() {
+ var availableOptions = this.availableOptions;
+ return availableOptions && availableOptions[0] && typeof availableOptions[0].group !== 'undefined';
+ },
+ groupedOptions: function groupedOptions() {
+ if (!this.hasGroups) {
+ return null;
+ }
+
+ var options = this.options;
+ var groups = {};
+ options.forEach(function (entry) {
+ groups[entry.group] = groups[entry.group] || [];
+ groups[entry.group].push(entry);
+ });
+ var result = Object.entries(groups);
+ result.sort(function (lhs, rhs) {
+ if (lhs[0] < rhs[0]) {
+ return -1;
+ }
+
+ if (lhs[0] > rhs[0]) {
+ return 1;
+ }
+
+ return 0;
+ });
+ return result;
+ }
+ },
+ methods: {
+ onChange: function onChange(event) {
+ var element = event.target;
+ var newValue;
+
+ if (this.multiple) {
+ newValue = Array.from(element.options).filter(function (e) {
+ return e.selected;
+ }).map(function (e) {
+ return e.value;
+ });
+ newValue = newValue.map(handleOldAngularJsValues);
+ } else {
+ newValue = element.value;
+ newValue = handleOldAngularJsValues(newValue);
+ }
+
+ this.$emit('update:modelValue', newValue);
+ }
+ },
+ watch: {
+ modelValue: function modelValue(newVal) {
+ var _this = this;
+
+ window.$(this.$refs.select).val(newVal);
+ setTimeout(function () {
+ initMaterialSelect(_this.$refs.select, newVal, _this.uiControlAttributes.placeholder, _this.uiControlOptions, _this.multiple);
+ });
+ },
+ 'uiControlAttributes.disabled': {
+ handler: function handler(newVal, oldVal) {
+ var _this2 = this;
+
+ setTimeout(function () {
+ if (newVal !== oldVal) {
+ initMaterialSelect(_this2.$refs.select, _this2.modelValue, _this2.uiControlAttributes.placeholder, _this2.uiControlOptions, _this2.multiple);
+ }
+ });
+ }
+ },
+ availableOptions: function availableOptions(newVal, oldVal) {
+ var _this3 = this;
+
+ if (newVal !== oldVal) {
+ setTimeout(function () {
+ initMaterialSelect(_this3.$refs.select, _this3.modelValue, _this3.uiControlAttributes.placeholder, _this3.uiControlOptions, _this3.multiple);
+ });
+ }
+ }
+ },
+ mounted: function mounted() {
+ var _this4 = this;
+
+ setTimeout(function () {
+ initMaterialSelect(_this4.$refs.select, _this4.modelValue, _this4.uiControlAttributes.placeholder, _this4.uiControlOptions, _this4.multiple);
+ });
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue
+
+
+
+FieldSelectvue_type_script_lang_ts.render = FieldSelectvue_type_template_id_87c835bc_render
+
+/* harmony default export */ var FieldSelect = (FieldSelectvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue?vue&type=template&id=72faf58c
+
+var FieldSitevue_type_template_id_72faf58c_hoisted_1 = ["for", "innerHTML"];
+var FieldSitevue_type_template_id_72faf58c_hoisted_2 = {
+ class: "sites_autocomplete"
+};
+function FieldSitevue_type_template_id_72faf58c_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_SiteSelector = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("SiteSelector");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ class: "siteSelectorLabel",
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldSitevue_type_template_id_72faf58c_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FieldSitevue_type_template_id_72faf58c_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SiteSelector, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ "model-value": _ctx.modelValue,
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ }),
+ id: _ctx.name,
+ "show-all-sites-item": _ctx.uiControlAttributes.showAllSitesItem || false,
+ "switch-site-on-select": false,
+ "show-selected-site": true,
+ "only-sites-with-admin-access": _ctx.uiControlAttributes.onlySitesWithAdminAccess || false
+ }, _ctx.uiControlAttributes), null, 16, ["model-value", "id", "show-all-sites-item", "only-sites-with-admin-access"])])]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue?vue&type=template&id=72faf58c
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue?vue&type=script&lang=ts
+
+
+/* harmony default export */ var FieldSitevue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ name: String,
+ title: String,
+ modelValue: Object,
+ uiControlAttributes: Object
+ },
+ inheritAttrs: false,
+ components: {
+ SiteSelector: external_CoreHome_["SiteSelector"]
+ },
+ emits: ['update:modelValue'],
+ methods: {
+ onChange: function onChange(newValue) {
+ this.$emit('update:modelValue', newValue);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue
+
+
+
+FieldSitevue_type_script_lang_ts.render = FieldSitevue_type_template_id_72faf58c_render
+
+/* harmony default export */ var FieldSite = (FieldSitevue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue?vue&type=template&id=9ea16160
+
+var FieldTextvue_type_template_id_9ea16160_hoisted_1 = ["type", "id", "name", "value"];
+var FieldTextvue_type_template_id_9ea16160_hoisted_2 = ["for", "innerHTML"];
+function FieldTextvue_type_template_id_9ea16160_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ class: "control_".concat(_ctx.uiControl),
+ type: _ctx.uiControl,
+ id: _ctx.name,
+ name: _ctx.name,
+ value: _ctx.modelValueText,
+ onKeydown: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onKeydown($event);
+ }),
+ onChange: _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.onKeydown($event);
+ })
+ }, _ctx.uiControlAttributes), null, 16, FieldTextvue_type_template_id_9ea16160_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldTextvue_type_template_id_9ea16160_hoisted_2)], 64);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue?vue&type=template&id=9ea16160
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue?vue&type=script&lang=ts
+
+
+/* harmony default export */ var FieldTextvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ title: String,
+ name: String,
+ uiControlAttributes: Object,
+ modelValue: [String, Number],
+ uiControl: String
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ modelValueText: function modelValueText() {
+ if (typeof this.modelValue === 'undefined' || this.modelValue === null) {
+ return '';
+ }
+
+ return this.modelValue.toString();
+ }
+ },
+ created: function created() {
+ // debounce because puppeteer types reeaally fast
+ this.onKeydown = Object(external_CoreHome_["debounce"])(this.onKeydown.bind(this), 50);
+ },
+ mounted: function mounted() {
+ setTimeout(function () {
+ window.Materialize.updateTextFields();
+ });
+ },
+ watch: {
+ modelValue: function modelValue() {
+ setTimeout(function () {
+ window.Materialize.updateTextFields();
+ });
+ }
+ },
+ methods: {
+ onKeydown: function onKeydown(event) {
+ this.$emit('update:modelValue', event.target.value);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue
+
+
+
+FieldTextvue_type_script_lang_ts.render = FieldTextvue_type_template_id_9ea16160_render
+
+/* harmony default export */ var FieldText = (FieldTextvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue?vue&type=template&id=4c574e6f
+
+var FieldTextArrayvue_type_template_id_4c574e6f_hoisted_1 = ["for", "innerHTML"];
+var FieldTextArrayvue_type_template_id_4c574e6f_hoisted_2 = ["type", "name", "value"];
+function FieldTextArrayvue_type_template_id_4c574e6f_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldTextArrayvue_type_template_id_4c574e6f_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ class: "control_".concat(_ctx.uiControl),
+ type: _ctx.uiControl,
+ name: _ctx.name,
+ onKeydown: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onKeydown($event);
+ }),
+ onChange: _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.onKeydown($event);
+ }),
+ value: _ctx.concattedValues
+ }, _ctx.uiControlAttributes), null, 16, FieldTextArrayvue_type_template_id_4c574e6f_hoisted_2)]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue?vue&type=template&id=4c574e6f
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue?vue&type=script&lang=ts
+
+
+/* harmony default export */ var FieldTextArrayvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ name: String,
+ title: String,
+ uiControl: String,
+ modelValue: Array,
+ uiControlAttributes: Object
+ },
+ inheritAttrs: false,
+ computed: {
+ concattedValues: function concattedValues() {
+ if (typeof this.modelValue === 'string') {
+ return this.modelValue;
+ }
+
+ return (this.modelValue || []).join(', ');
+ }
+ },
+ emits: ['update:modelValue'],
+ created: function created() {
+ // debounce because puppeteer types reeaally fast
+ this.onKeydown = Object(external_CoreHome_["debounce"])(this.onKeydown.bind(this), 50);
+ },
+ methods: {
+ onKeydown: function onKeydown(event) {
+ var values = event.target.value.split(',').map(function (v) {
+ return v.trim();
+ });
+ this.$emit('update:modelValue', values);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue
+
+
+
+FieldTextArrayvue_type_script_lang_ts.render = FieldTextArrayvue_type_template_id_4c574e6f_render
+
+/* harmony default export */ var FieldTextArray = (FieldTextArrayvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue?vue&type=template&id=09f09fdb
+
+var FieldTextareavue_type_template_id_09f09fdb_hoisted_1 = ["name", "id", "value"];
+var FieldTextareavue_type_template_id_09f09fdb_hoisted_2 = ["for", "innerHTML"];
+function FieldTextareavue_type_template_id_09f09fdb_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("textarea", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ name: _ctx.name
+ }, _ctx.uiControlAttributes, {
+ id: _ctx.name,
+ value: _ctx.modelValue,
+ onKeydown: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onKeydown($event);
+ }),
+ onChange: _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.onKeydown($event);
+ }),
+ class: "materialize-textarea",
+ ref: "textarea"
+ }), null, 16, FieldTextareavue_type_template_id_09f09fdb_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldTextareavue_type_template_id_09f09fdb_hoisted_2)], 64);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue?vue&type=template&id=09f09fdb
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue?vue&type=script&lang=ts
+
+
+/* harmony default export */ var FieldTextareavue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ name: String,
+ uiControlAttributes: Object,
+ modelValue: String,
+ title: String
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ created: function created() {
+ this.onKeydown = Object(external_CoreHome_["debounce"])(this.onKeydown.bind(this), 50);
+ },
+ methods: {
+ onKeydown: function onKeydown(event) {
+ this.$emit('update:modelValue', event.target.value);
+ }
+ },
+ watch: {
+ modelValue: function modelValue() {
+ var _this = this;
+
+ setTimeout(function () {
+ window.Materialize.textareaAutoResize(_this.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ }
+ },
+ mounted: function mounted() {
+ var _this2 = this;
+
+ setTimeout(function () {
+ window.Materialize.textareaAutoResize(_this2.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue
+
+
+
+FieldTextareavue_type_script_lang_ts.render = FieldTextareavue_type_template_id_09f09fdb_render
+
+/* harmony default export */ var FieldTextarea = (FieldTextareavue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue?vue&type=template&id=7f15c83b
+
+var FieldTextareaArrayvue_type_template_id_7f15c83b_hoisted_1 = ["for", "innerHTML"];
+var FieldTextareaArrayvue_type_template_id_7f15c83b_hoisted_2 = ["name", "value"];
+function FieldTextareaArrayvue_type_template_id_7f15c83b_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", {
+ for: _ctx.name,
+ innerHTML: _ctx.$sanitize(_ctx.title)
+ }, null, 8, FieldTextareaArrayvue_type_template_id_7f15c83b_hoisted_1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("textarea", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["mergeProps"])({
+ ref: "textarea",
+ name: _ctx.name
+ }, _ctx.uiControlAttributes, {
+ value: _ctx.concattedValue,
+ onKeydown: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onKeydown($event);
+ }),
+ onChange: _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.onKeydown($event);
+ }),
+ class: "materialize-textarea"
+ }), null, 16, FieldTextareaArrayvue_type_template_id_7f15c83b_hoisted_2)]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue?vue&type=template&id=7f15c83b
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue?vue&type=script&lang=ts
+
+
+var SEPARATOR = '\n';
+/* harmony default export */ var FieldTextareaArrayvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ name: String,
+ title: String,
+ uiControlAttributes: Object,
+ modelValue: [Array, String]
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ concattedValue: function concattedValue() {
+ if (typeof this.modelValue === 'string') {
+ return this.modelValue;
+ }
+
+ return (this.modelValue || []).join(SEPARATOR);
+ }
+ },
+ created: function created() {
+ this.onKeydown = Object(external_CoreHome_["debounce"])(this.onKeydown.bind(this), 50);
+ },
+ methods: {
+ onKeydown: function onKeydown(event) {
+ var value = event.target.value.split(SEPARATOR);
+ this.$emit('update:modelValue', value);
+ }
+ },
+ watch: {
+ modelValue: function modelValue(newVal, oldVal) {
+ var _this = this;
+
+ if (newVal !== oldVal) {
+ setTimeout(function () {
+ window.Materialize.textareaAutoResize(_this.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ }
+ }
+ },
+ mounted: function mounted() {
+ var _this2 = this;
+
+ setTimeout(function () {
+ window.Materialize.textareaAutoResize(_this2.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue
+
+
+
+FieldTextareaArrayvue_type_script_lang_ts.render = FieldTextareaArrayvue_type_template_id_7f15c83b_render
+
+/* harmony default export */ var FieldTextareaArray = (FieldTextareaArrayvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/utilities.ts
+function utilities_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { utilities_typeof = function _typeof(obj) { return typeof obj; }; } else { utilities_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return utilities_typeof(obj); }
+
+function utilities_slicedToArray(arr, i) { return utilities_arrayWithHoles(arr) || utilities_iterableToArrayLimit(arr, i) || utilities_unsupportedIterableToArray(arr, i) || utilities_nonIterableRest(); }
+
+function utilities_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+
+function utilities_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return utilities_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return utilities_arrayLikeToArray(o, minLen); }
+
+function utilities_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function utilities_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function utilities_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+function processCheckboxAndRadioAvailableValues(availableValues, type) {
+ if (!availableValues) {
+ return [];
+ }
+
+ var flatValues = [];
+ Object.entries(availableValues).forEach(function (_ref) {
+ var _ref2 = utilities_slicedToArray(_ref, 2),
+ valueObjKey = _ref2[0],
+ value = _ref2[1];
+
+ if (utilities_typeof(value) === 'object' && typeof value.key !== 'undefined') {
+ flatValues.push(value);
+ return;
+ }
+
+ var key = valueObjKey;
+
+ if (type === 'integer' && typeof valueObjKey === 'string') {
+ key = parseInt(key, 10);
+ }
+
+ flatValues.push({
+ key: key,
+ value: value
+ });
+ });
+ return flatValues;
+}
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue?vue&type=script&lang=ts
+function FormFieldvue_type_script_lang_ts_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FormFieldvue_type_script_lang_ts_typeof = function _typeof(obj) { return typeof obj; }; } else { FormFieldvue_type_script_lang_ts_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FormFieldvue_type_script_lang_ts_typeof(obj); }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+var TEXT_CONTROLS = ['password', 'url', 'search', 'email'];
+var CONTROLS_SUPPORTING_ARRAY = ['textarea', 'checkbox', 'text'];
+var CONTROL_TO_COMPONENT_MAP = {
+ checkbox: 'FieldCheckbox',
+ 'expandable-select': 'FieldExpandableSelect',
+ 'field-array': 'FieldFieldArray',
+ file: 'FieldFile',
+ hidden: 'FieldHidden',
+ multiselect: 'FieldSelect',
+ multituple: 'FieldMultituple',
+ number: 'FieldNumber',
+ radio: 'FieldRadio',
+ select: 'FieldSelect',
+ site: 'FieldSite',
+ text: 'FieldText',
+ textarea: 'FieldTextarea'
+};
+var CONTROL_TO_AVAILABLE_OPTION_PROCESSOR = {
+ FieldSelect: FieldSelectvue_type_script_lang_ts_getAvailableOptions,
+ FieldCheckboxArray: processCheckboxAndRadioAvailableValues,
+ FieldRadio: processCheckboxAndRadioAvailableValues,
+ FieldExpandableSelect: getAvailableOptions
+};
+/* harmony default export */ var FormFieldvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: null,
+ formField: {
+ type: Object,
+ required: true
+ },
+ allSettings: [Object, Array]
+ },
+ emits: ['update:modelValue'],
+ components: {
+ FieldCheckbox: FieldCheckbox,
+ FieldCheckboxArray: FieldCheckboxArray,
+ FieldExpandableSelect: FieldExpandableSelect,
+ FieldFieldArray: FieldFieldArray,
+ FieldFile: FieldFile,
+ FieldHidden: FieldHidden,
+ FieldMultituple: FieldMultituple,
+ FieldNumber: FieldNumber,
+ FieldRadio: FieldRadio,
+ FieldSelect: FieldSelect,
+ FieldSite: FieldSite,
+ FieldText: FieldText,
+ FieldTextArray: FieldTextArray,
+ FieldTextarea: FieldTextarea,
+ FieldTextareaArray: FieldTextareaArray
+ },
+ setup: function setup(props) {
+ var inlineHelpNode = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(null);
+
+ var setInlineHelp = function setInlineHelp(newVal) {
+ var toAppend;
+
+ if (!newVal) {
+ return;
+ }
+
+ if (typeof newVal === 'string' && newVal && newVal.indexOf('#') === 0) {
+ toAppend = window.$(newVal);
+ } else {
+ toAppend = window.vueSanitize(newVal);
+ }
+
+ window.$(inlineHelpNode.value).html('').append(toAppend);
+ };
+
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["watch"])(function () {
+ return props.formField.inlineHelp;
+ }, setInlineHelp);
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["onMounted"])(function () {
+ setInlineHelp(props.formField.inlineHelp);
+ });
+ return {
+ inlineHelp: inlineHelpNode
+ };
+ },
+ computed: {
+ childComponent: function childComponent() {
+ if (this.formField.component) {
+ return this.formField.component;
+ }
+
+ var uiControl = this.formField.uiControl;
+ var control = CONTROL_TO_COMPONENT_MAP[uiControl];
+
+ if (TEXT_CONTROLS.indexOf(uiControl) !== -1) {
+ control = 'FieldText'; // we use same template for text and password both
+ }
+
+ if (this.formField.type === 'array' && CONTROLS_SUPPORTING_ARRAY.indexOf(uiControl) !== -1) {
+ control = "".concat(control, "Array");
+ }
+
+ return control;
+ },
+ extraChildComponentParams: function extraChildComponentParams() {
+ if (this.formField.uiControl === 'multiselect') {
+ return {
+ multiple: true
+ };
+ }
+
+ return {};
+ },
+ showFormHelp: function showFormHelp() {
+ return this.formField.description || this.formField.inlineHelp || this.showDefaultValue;
+ },
+ showDefaultValue: function showDefaultValue() {
+ return this.defaultValuePretty && this.formField.uiControl !== 'checkbox' && this.formField.uiControl !== 'radio';
+ },
+ showField: function showField() {
+ if (!this.formField.condition || !this.allSettings || !Object.values(this.allSettings).length) {
+ return true;
+ }
+
+ var values = {};
+ Object.values(this.allSettings).forEach(function (setting) {
+ if (setting.value === '0') {
+ values[setting.name] = 0;
+ } else {
+ values[setting.name] = setting.value;
+ }
+ });
+ return this.formField.condition(values);
+ },
+ processedModelValue: function processedModelValue() {
+ var field = this.formField; // convert boolean values since angular 1.6 uses strict equals when determining if a model
+ // value matches the ng-value of an input.
+
+ if (field.type === 'boolean') {
+ var valueIsTruthy = this.modelValue && this.modelValue > 0 && this.modelValue !== '0'; // for checkboxes, the value MUST be either true or false
+
+ if (field.uiControl === 'checkbox') {
+ return valueIsTruthy;
+ }
+
+ if (field.uiControl === 'radio') {
+ return valueIsTruthy ? '1' : '0';
+ }
+ }
+
+ return this.modelValue;
+ },
+ defaultValue: function defaultValue() {
+ var defaultValue = this.formField.defaultValue;
+
+ if (Array.isArray(defaultValue)) {
+ defaultValue = defaultValue.join(',');
+ }
+
+ return defaultValue;
+ },
+ availableOptions: function availableOptions() {
+ var childComponent = this.childComponent,
+ formField = this.formField;
+
+ if (!formField.availableValues || !CONTROL_TO_AVAILABLE_OPTION_PROCESSOR[childComponent]) {
+ return null;
+ }
+
+ return CONTROL_TO_AVAILABLE_OPTION_PROCESSOR[childComponent](formField.availableValues, formField.type, formField.uiControlAttributes);
+ },
+ defaultValuePretty: function defaultValuePretty() {
+ var defaultValue = this.formField.defaultValue;
+ var availableOptions = this.availableOptions;
+
+ if (typeof defaultValue === 'string' && defaultValue) {
+ // eg default value for multi tuple
+ var defaultParsed = null;
+
+ try {
+ defaultParsed = JSON.parse(defaultValue);
+ } catch (e) {// invalid JSON
+ }
+
+ if (defaultParsed !== null && FormFieldvue_type_script_lang_ts_typeof(defaultParsed) === 'object') {
+ return '';
+ }
+ }
+
+ if (!Array.isArray(availableOptions)) {
+ if (Array.isArray(defaultValue)) {
+ return '';
+ }
+
+ return defaultValue ? defaultValue.toString() : '';
+ }
+
+ var prettyValues = [];
+
+ if (!Array.isArray(defaultValue)) {
+ defaultValue = [defaultValue];
+ }
+
+ (availableOptions || []).forEach(function (value) {
+ if (defaultValue.indexOf(value.key) !== -1 && typeof value.value !== 'undefined') {
+ prettyValues.push(value.value);
+ }
+ });
+ return prettyValues.join(', ');
+ },
+ defaultValuePrettyTruncated: function defaultValuePrettyTruncated() {
+ return this.defaultValuePretty.substring(0, 50);
+ }
+ },
+ methods: {
+ onChange: function onChange(newValue) {
+ this.$emit('update:modelValue', newValue);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue
+
+
+
+FormFieldvue_type_script_lang_ts.render = render
+
+/* harmony default export */ var FormField = (FormFieldvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue?vue&type=template&id=41f51ad7
+
+var FieldAngularJsTemplatevue_type_template_id_41f51ad7_hoisted_1 = {
+ ref: "root"
+};
+function FieldAngularJsTemplatevue_type_template_id_41f51ad7_render(_ctx, _cache, $props, $setup, $data, $options) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FieldAngularJsTemplatevue_type_template_id_41f51ad7_hoisted_1, null, 512);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue?vue&type=template&id=41f51ad7
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue?vue&type=script&lang=ts
+function FieldAngularJsTemplatevue_type_script_lang_ts_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function FieldAngularJsTemplatevue_type_script_lang_ts_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FieldAngularJsTemplatevue_type_script_lang_ts_ownKeys(Object(source), true).forEach(function (key) { FieldAngularJsTemplatevue_type_script_lang_ts_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FieldAngularJsTemplatevue_type_script_lang_ts_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function FieldAngularJsTemplatevue_type_script_lang_ts_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+
+
+
+function clone(obj) {
+ if (typeof obj === 'undefined') {
+ return undefined;
+ }
+
+ return JSON.parse(JSON.stringify(obj));
+}
+
+/* harmony default export */ var FieldAngularJsTemplatevue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: null,
+ formField: null,
+ templateFile: String
+ },
+ emits: ['update:modelValue'],
+ inheritAttrs: false,
+ setup: function setup(props, context) {
+ var root = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(null);
+ var $element = window.$("<div ng-include=\"'".concat(props.templateFile, "?cb=").concat(external_CoreHome_["Matomo"].cacheBuster, "'\"></div>"));
+ var $timeout = external_CoreHome_["Matomo"].helper.getAngularDependency('$timeout');
+ var $rootScope = external_CoreHome_["Matomo"].helper.getAngularDependency('$rootScope');
+ var scope = $rootScope.$new();
+ scope.formField = FieldAngularJsTemplatevue_type_script_lang_ts_objectSpread(FieldAngularJsTemplatevue_type_script_lang_ts_objectSpread({}, clone(props.formField)), {}, {
+ value: clone(props.modelValue)
+ });
+ scope.$watch('formField.value', function (newValue, oldValue) {
+ if (newValue !== oldValue && newValue !== props.modelValue) {
+ context.emit('update:modelValue', clone(newValue));
+ }
+ });
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["watch"])(function () {
+ return props.modelValue;
+ }, function (newValue) {
+ $timeout(function () {
+ scope.formField.value = clone(newValue);
+ });
+ });
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["watch"])(function () {
+ return props.formField;
+ }, function (newValue) {
+ $timeout(function () {
+ var currentValue = scope.formField.value;
+ scope.formField = FieldAngularJsTemplatevue_type_script_lang_ts_objectSpread(FieldAngularJsTemplatevue_type_script_lang_ts_objectSpread({}, clone(newValue)), {}, {
+ value: currentValue
+ });
+ });
+ }, {
+ deep: true
+ }); // append on mount
+
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["onMounted"])(function () {
+ window.$(root.value).append($element);
+ external_CoreHome_["Matomo"].helper.compileAngularComponents($element, {
+ scope: scope,
+ params: {
+ formField: FieldAngularJsTemplatevue_type_script_lang_ts_objectSpread(FieldAngularJsTemplatevue_type_script_lang_ts_objectSpread({}, clone(props.formField)), {}, {
+ value: props.modelValue
+ })
+ }
+ });
+ });
+ return {
+ root: root
+ };
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue
+
+
+
+FieldAngularJsTemplatevue_type_script_lang_ts.render = FieldAngularJsTemplatevue_type_template_id_41f51ad7_render
+
+/* harmony default export */ var FieldAngularJsTemplate = (FieldAngularJsTemplatevue_type_script_lang_ts);
+// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/useExternalPluginComponent.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+function useExternalPluginComponent(plugin, component) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineAsyncComponent"])(function () {
+ return new Promise(function (resolve) {
+ window.$(document).ready(function () {
+ if (window[plugin]) {
+ resolve(window[plugin][component]);
+ } else {
+ resolve(null); // plugin not loaded
+ }
+ });
+ });
+ });
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/FormField/FormField.adapter.ts
+function FormField_adapter_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function FormField_adapter_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FormField_adapter_ownKeys(Object(source), true).forEach(function (key) { FormField_adapter_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FormField_adapter_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function FormField_adapter_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+
+
+
+
+
+function transformVueComponentRef(value) {
+ if (!value) {
+ return undefined;
+ }
+
+ var plugin = value.plugin,
+ name = value.name;
+
+ if (!plugin || !name) {
+ throw new Error('Invalid component property given to piwik-field directive, must be ' + '{plugin: \'...\',name: \'...\'}');
+ }
+
+ return useExternalPluginComponent(plugin, name);
+}
+
+/* harmony default export */ var FormField_adapter = (Object(external_CoreHome_["createAngularJsAdapter"])({
+ component: FormField,
+ scope: {
+ modelValue: {
+ default: function _default(scope) {
+ var field = scope.piwikFormField; // vue components expect object data as input, so we parse JSON data
+ // for angularjs directives that use JSON.
+
+ if (typeof field.value === 'string' && field.value && (field.type === 'array' || field.uiControl === 'multituple' || field.uiControl === 'field-array' || field.uiControl === 'multiselect' || field.uiControl === 'site')) {
+ field.value = JSON.parse(field.value);
+ }
+
+ if (field.uiControl === 'checkbox') {
+ return Object(external_CoreHome_["transformAngularJsBoolAttr"])(field.value);
+ }
+
+ return field.value;
+ }
+ },
+ piwikFormField: {
+ vue: 'formField',
+ angularJsBind: '=',
+ transform: function transform(value, vm, scope) {
+ return FormField_adapter_objectSpread(FormField_adapter_objectSpread({}, value), {}, {
+ condition: value.condition ? function (values) {
+ return scope.$eval(value.condition, values);
+ } : value.condition,
+ disabled: Object(external_CoreHome_["transformAngularJsBoolAttr"])(value.disabled),
+ autocomplete: Object(external_CoreHome_["transformAngularJsBoolAttr"])(value.autocomplete),
+ autofocus: Object(external_CoreHome_["transformAngularJsBoolAttr"])(value.autofocus),
+ tabindex: Object(external_CoreHome_["transformAngularJsIntAttr"])(value.tabindex),
+ fullWidth: Object(external_CoreHome_["transformAngularJsBoolAttr"])(value.fullWidth),
+ maxlength: Object(external_CoreHome_["transformAngularJsIntAttr"])(value.maxlength),
+ required: Object(external_CoreHome_["transformAngularJsBoolAttr"])(value.required),
+ rows: Object(external_CoreHome_["transformAngularJsIntAttr"])(value.rows),
+ min: Object(external_CoreHome_["transformAngularJsIntAttr"])(value.min),
+ max: Object(external_CoreHome_["transformAngularJsIntAttr"])(value.max),
+ component: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["shallowRef"])(value.templateFile ? FieldAngularJsTemplate : transformVueComponentRef(value.component))
+ });
+ }
+ },
+ allSettings: {
+ angularJsBind: '='
+ }
+ },
+ directiveName: 'piwikFormField',
+ events: {
+ 'update:modelValue': function updateModelValue(newValue, vm, scope, element, attrs, controller, $timeout) {
+ if (newValue !== scope.piwikFormField.value) {
+ $timeout(function () {
+ scope.piwikFormField.value = newValue;
+ });
+ }
+ }
+ },
+ $inject: ['$timeout'],
+ postCreate: function postCreate(vm, scope) {
+ scope.$watch('piwikFormField.value', function (newVal, oldVal) {
+ if (newVal !== oldVal) {
+ vm.modelValue = newVal;
+ }
+ });
+ }
+}));
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/Field/Field.vue?vue&type=template&id=64bae462
+
+function Fieldvue_type_template_id_64bae462_render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _component_FormField = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("FormField");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_FormField, {
+ "form-field": _ctx.field,
+ "model-value": _ctx.modelValue,
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.onChange($event);
+ }),
+ component: _ctx.component
+ }, null, 8, ["form-field", "model-value", "component"]);
+}
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/Field/Field.vue?vue&type=template&id=64bae462
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/Field/Field.vue?vue&type=script&lang=ts
+function Fieldvue_type_script_lang_ts_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function Fieldvue_type_script_lang_ts_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Fieldvue_type_script_lang_ts_ownKeys(Object(source), true).forEach(function (key) { Fieldvue_type_script_lang_ts_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Fieldvue_type_script_lang_ts_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function Fieldvue_type_script_lang_ts_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+
+
+var UI_CONTROLS_TO_TYPE = {
+ multiselect: 'array',
+ checkbox: 'boolean',
+ site: 'object',
+ number: 'integer'
+};
+/* harmony default export */ var Fieldvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ props: {
+ modelValue: null,
+ uicontrol: String,
+ name: String,
+ defaultValue: null,
+ options: [Object, Array],
+ description: String,
+ introduction: String,
+ title: String,
+ inlineHelp: String,
+ disabled: Boolean,
+ uiControlAttributes: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ uiControlOptions: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ autocomplete: Boolean,
+ condition: Function,
+ varType: String,
+ autofocus: Boolean,
+ tabindex: Number,
+ fullWidth: Boolean,
+ maxlength: Number,
+ required: Boolean,
+ placeholder: String,
+ rows: Number,
+ min: Number,
+ max: Number,
+ component: null
+ },
+ emits: ['update:modelValue'],
+ components: {
+ FormField: FormField
+ },
+ computed: {
+ type: function type() {
+ if (this.varType) {
+ return this.varType;
+ }
+
+ if (UI_CONTROLS_TO_TYPE[this.uicontrol]) {
+ return UI_CONTROLS_TO_TYPE[this.uicontrol];
+ }
+
+ return 'string';
+ },
+ field: function field() {
+ return {
+ uiControl: this.uicontrol,
+ type: this.type,
+ name: this.name,
+ defaultValue: this.defaultValue,
+ availableValues: this.options,
+ description: this.description,
+ introduction: this.introduction,
+ inlineHelp: this.inlineHelp,
+ title: this.title,
+ uiControlAttributes: Fieldvue_type_script_lang_ts_objectSpread(Fieldvue_type_script_lang_ts_objectSpread({}, this.uiControlAttributes), {}, {
+ disabled: this.disabled,
+ autocomplete: this.autocomplete,
+ tabindex: this.tabindex,
+ autofocus: this.autofocus,
+ rows: this.rows,
+ required: this.required,
+ maxlength: this.maxlength,
+ placeholder: this.placeholder,
+ min: this.min,
+ max: this.max
+ }),
+ fullWidth: this.fullWidth,
+ uiControlOptions: this.uiControlOptions
+ };
+ }
+ },
+ methods: {
+ onChange: function onChange(newValue) {
+ this.$emit('update:modelValue', newValue);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/Field/Field.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/Field/Field.vue
+
+
+
+Fieldvue_type_script_lang_ts.render = Fieldvue_type_template_id_64bae462_render
+
+/* harmony default export */ var Field = (Fieldvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/Field/Field.adapter.ts
+function Field_adapter_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
+
+function Field_adapter_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Field_adapter_ownKeys(Object(source), true).forEach(function (key) { Field_adapter_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Field_adapter_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function Field_adapter_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+
+
+
+
+function handleJsonValue(value, varType, uiControl) {
+ if (typeof value === 'string' && value && (varType === 'array' || uiControl === 'multituple' || uiControl === 'field-array' || uiControl === 'multiselect' || uiControl === 'site')) {
+ var result = JSON.parse(value); // the angularjs site field supplied siteid/sitename properties which initializes the
+ // siteselector value. the sitename is assumed to be encoded, and is decoded once.
+ // so the value for 'site' Field's in angularjs is assumed to be encoded.
+
+ if (uiControl === 'site') {
+ result.name = external_CoreHome_["Matomo"].helper.htmlDecode(result.name);
+ }
+
+ return result;
+ }
+
+ if (uiControl === 'checkbox' && varType !== 'array') {
+ return Object(external_CoreHome_["transformAngularJsBoolAttr"])(value);
+ }
+
+ return value;
+}
+
+/* harmony default export */ var Field_adapter = (Object(external_CoreHome_["createAngularJsAdapter"])({
+ component: Field,
+ require: '?ngModel',
+ scope: {
+ uicontrol: {
+ angularJsBind: '@'
+ },
+ name: {
+ angularJsBind: '@'
+ },
+ value: {
+ vue: 'modelValue',
+ angularJsBind: '@',
+ transform: function transform(value, vm, scope) {
+ // vue components expect object data as input, so we parse JSON data
+ // for angularjs directives that use JSON.
+ return handleJsonValue(value, scope.varType, scope.uicontrol);
+ }
+ },
+ default: {
+ vue: 'defaultValue',
+ angularJsBind: '@'
+ },
+ options: {
+ angularJsBind: '='
+ },
+ description: {
+ angularJsBind: '@'
+ },
+ introduction: {
+ angularJsBind: '@'
+ },
+ title: {
+ angularJsBind: '@'
+ },
+ inlineHelp: {
+ angularJsBind: '@'
+ },
+ disabled: {
+ angularJsBind: '=',
+ transform: external_CoreHome_["transformAngularJsBoolAttr"]
+ },
+ uiControlAttributes: {
+ angularJsBind: '='
+ },
+ uiControlOptions: {
+ angularJsBind: '='
+ },
+ autocomplete: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsBoolAttr"]
+ },
+ condition: {
+ angularJsBind: '@',
+ transform: function transform(value, vm, scope) {
+ var transformed = value;
+
+ if (value) {
+ transformed = function transformed(values) {
+ return scope.$eval(value, values);
+ };
+ }
+
+ return transformed;
+ }
+ },
+ varType: {
+ angularJsBind: '@'
+ },
+ autofocus: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsBoolAttr"]
+ },
+ tabindex: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsIntAttr"]
+ },
+ fullWidth: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsBoolAttr"]
+ },
+ maxlength: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsIntAttr"]
+ },
+ required: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsBoolAttr"]
+ },
+ placeholder: {
+ angularJsBind: '@'
+ },
+ rows: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsIntAttr"]
+ },
+ min: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsIntAttr"]
+ },
+ max: {
+ angularJsBind: '@',
+ transform: external_CoreHome_["transformAngularJsIntAttr"]
+ },
+ component: {
+ angularJsBind: '<',
+ transform: function transform(value, vm, scope) {
+ if (!value) {
+ return value;
+ }
+
+ if (scope.templateFile) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["shallowRef"])(FieldAngularJsTemplate);
+ }
+
+ var plugin = value.plugin,
+ name = value.name;
+
+ if (!plugin || !name) {
+ throw new Error("Invalid component property given to piwik-field directive, must be {plugin: '...',name: '...'}");
+ }
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["shallowRef"])(Object(external_CoreHome_["useExternalPluginComponent"])(plugin, name));
+ }
+ }
+ },
+ directiveName: 'piwikField',
+ $inject: ['$timeout'],
+ events: {
+ 'update:modelValue': function updateModelValue(newValue, vm, scope, element, attrs, ngModel, $timeout) {
+ var currentValue = ngModel ? ngModel.$viewValue : scope.value;
+
+ if (newValue !== currentValue) {
+ $timeout(function () {
+ if (!ngModel) {
+ scope.value = newValue;
+ return;
+ } // ngModel being used
+
+
+ ngModel.$setViewValue(newValue);
+ ngModel.$render(); // not detected by the watch for some reason
+ });
+ }
+ }
+ },
+ postCreate: function postCreate(vm, scope, element, attrs, controller) {
+ var ngModel = controller;
+
+ if (!ngModel) {
+ scope.$watch('value', function (newVal) {
+ if (newVal !== vm.modelValue) {
+ var transformed = handleJsonValue(newVal, scope.varType, scope.uicontrol);
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["nextTick"])(function () {
+ vm.modelValue = transformed;
+ });
+ }
+ });
+ return;
+ } // ngModel being used
+
+
+ ngModel.$render = function () {
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["nextTick"])(function () {
+ vm.modelValue = Object(external_CoreHome_["removeAngularJsSpecificProperties"])(ngModel.$viewValue);
+ });
+ };
+
+ if (typeof scope.value !== 'undefined') {
+ var transformed = handleJsonValue(scope.value, scope.varType, scope.uicontrol);
+ ngModel.$setViewValue(transformed);
+ } else {
+ ngModel.$setViewValue(vm.modelValue);
+ } // to provide same behavior in angularjs/<4.6.0, we trigger a model update to the same
+ // value, but only for 'site' uicontrols. this only happened for site selectors, no others.
+
+
+ if (scope.uicontrol === 'site') {
+ setTimeout(function () {
+ ngModel.$setViewValue(Field_adapter_objectSpread({}, ngModel.$viewValue));
+ });
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/index.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/
+
+
+
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js
+
+
+
+
+/***/ })
+
+/******/ });
+});
+//# sourceMappingURL=CorePluginsAdmin.umd.js.map \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js
new file mode 100644
index 0000000000..a35fd654f6
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js
@@ -0,0 +1,32 @@
+(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue")):"function"===typeof define&&define.amd?define(["CoreHome"],t):"object"===typeof exports?exports["CorePluginsAdmin"]=t(require("CoreHome"),require("vue")):e["CorePluginsAdmin"]=t(e["CoreHome"],e["Vue"])})("undefined"!==typeof self?self:this,(function(e,t){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/CorePluginsAdmin/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"FormField",(function(){return Ut})),n.d(t,"Field",(function(){return dn})),"undefined"!==typeof window){var r=window.document.currentScript,o=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);o&&(n.p=o[1])}var l=n("19dc"),i=n("8bbf");function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var s={class:"form-group row"},d={key:0,class:"col s12"},m={key:0,class:"form-help"},f={key:0,class:"inline-help",ref:"inlineHelp"},p=Object(i["createElementVNode"])("br",null,null,-1);function b(e,t,n,r,o,l){return Object(i["withDirectives"])((Object(i["openBlock"])(),Object(i["createElementBlock"])("div",s,[e.formField.introduction?(Object(i["openBlock"])(),Object(i["createElementBlock"])("h3",d,Object(i["toDisplayString"])(e.formField.introduction),1)):Object(i["createCommentVNode"])("",!0),Object(i["createElementVNode"])("div",{class:Object(i["normalizeClass"])(["col s12",{"input-field":"checkbox"!==e.formField.uiControl&&"radio"!==e.formField.uiControl,"file-field":"file"===e.formField.uiControl,m6:!e.formField.fullWidth}])},[(Object(i["openBlock"])(),Object(i["createBlock"])(Object(i["resolveDynamicComponent"])(e.childComponent),Object(i["mergeProps"])(u(u({formField:e.formField},e.formField),{},{modelValue:e.processedModelValue,availableOptions:e.availableOptions},e.extraChildComponentParams),{"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.onChange(t)})}),null,16))],2),Object(i["createElementVNode"])("div",{class:Object(i["normalizeClass"])(["col s12",{m6:!e.formField.fullWidth}])},[e.showFormHelp?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",m,[Object(i["withDirectives"])(Object(i["createElementVNode"])("div",{class:"form-description"},Object(i["toDisplayString"])(e.formField.description),513),[[i["vShow"],e.formField.description]]),e.formField.inlineHelp?(Object(i["openBlock"])(),Object(i["createElementBlock"])("span",f,null,512)):Object(i["createCommentVNode"])("",!0),Object(i["withDirectives"])(Object(i["createElementVNode"])("span",null,[p,Object(i["createTextVNode"])(" "+Object(i["toDisplayString"])(e.translate("General_Default"))+": ",1),Object(i["createElementVNode"])("span",null,Object(i["toDisplayString"])(e.defaultValuePrettyTruncated),1)],512),[[i["vShow"],e.showDefaultValue]])])):Object(i["createCommentVNode"])("",!0)],2)],512)),[[i["vShow"],e.showField]])}var h={class:"checkbox"},O=["checked","id","name"],v=["innerHTML"];function y(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",h,[Object(i["createElementVNode"])("label",null,[Object(i["createElementVNode"])("input",Object(i["mergeProps"])({onChange:t[0]||(t[0]=function(t){return e.onChange(t)})},e.uiControlAttributes,{value:1,checked:!!e.modelValue,type:"checkbox",id:e.name,name:e.name}),null,16,O),Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.title)},null,8,v)])])}var j=Object(i["defineComponent"])({props:{modelValue:Boolean,uiControlAttributes:Object,name:String,title:String},inheritAttrs:!1,emits:["update:modelValue"],methods:{onChange:function(e){this.modelValue!==e.target.checked&&this.$emit("update:modelValue",e.target.checked)}}});j.render=y;var g=j,w=["value","checked","onChange","id","name"];function V(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["withDirectives"])(Object(i["createElementVNode"])("label",{class:"fieldRadioTitle"},Object(i["toDisplayString"])(e.title),513),[[i["vShow"],e.title]]),(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.availableOptions,(function(t,n){return Object(i["openBlock"])(),Object(i["createElementBlock"])("p",{key:n,class:"checkbox"},[Object(i["createElementVNode"])("label",null,[Object(i["createElementVNode"])("input",Object(i["mergeProps"])({value:t.key,checked:!!e.checkboxStates[n],onChange:function(t){return e.onChange(n)}},e.uiControlAttributes,{type:"checkbox",id:"".concat(e.name).concat(t.key),name:t.name}),null,16,w),Object(i["createElementVNode"])("span",null,Object(i["toDisplayString"])(t.value),1),Object(i["withDirectives"])(Object(i["createElementVNode"])("span",{class:"form-description"},Object(i["toDisplayString"])(t.description),513),[[i["vShow"],t.description]])])])})),128))])}function C(e){return F(e)||k(e)||S(e)||A()}function A(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function S(e,t){if(e){if("string"===typeof e)return B(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?B(e,t):void 0}}function k(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function F(e){if(Array.isArray(e))return B(e)}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function E(e,t){return(e||[]).map((function(e){return t&&-1!==t.indexOf(e.key)}))}var x=Object(i["defineComponent"])({props:{modelValue:Object,name:String,title:String,availableOptions:Array,uiControlAttributes:Object,type:String},inheritAttrs:!1,emits:["update:modelValue"],computed:{checkboxStates:function(){return E(this.availableOptions,this.modelValue)}},mounted:function(){window.Materialize.updateTextFields()},methods:{onChange:function(e){var t=C(this.checkboxStates);t[e]=!t[e];var n=[];Object.values(this.availableOptions).forEach((function(e,r){t[r]&&n.push(e.key)})),this.$emit("update:modelValue",n)}}});x.render=V;var T=x,N={class:"expandableSelector"},P=Object(i["createElementVNode"])("svg",{class:"caret",height:"24",viewBox:"0 0 24 24",width:"24",xmlns:"http://www.w3.org/2000/svg"},[Object(i["createElementVNode"])("path",{d:"M7 10l5 5 5-5z"}),Object(i["createElementVNode"])("path",{d:"M0 0h24v24H0z",fill:"none"})],-1),$=["value"],M={class:"expandableList z-depth-2"},D={class:"searchContainer"},J={class:"collection firstLevel"},H=["onClick"],L={class:"collection secondLevel"},z=["onClick"],I={class:"primary-content"},K=["title"];function U(e,t,n,r,o,l){var a=Object(i["resolveDirective"])("focus-if"),u=Object(i["resolveDirective"])("focus-anywhere-but-here");return Object(i["withDirectives"])((Object(i["openBlock"])(),Object(i["createElementBlock"])("div",N,[Object(i["createElementVNode"])("div",{onClick:t[0]||(t[0]=function(t){return e.showSelect=!e.showSelect}),class:"select-wrapper"},[P,Object(i["createElementVNode"])("input",{type:"text",class:"select-dropdown",readonly:"readonly",value:e.modelValueText},null,8,$)]),Object(i["withDirectives"])(Object(i["createElementVNode"])("div",M,[Object(i["createElementVNode"])("div",D,[Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{type:"text",placeholder:"Search","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.searchTerm=t}),class:"expandableSearch browser-default"},null,512),[[i["vModelText"],e.searchTerm],[a,e.showSelect]])]),Object(i["createElementVNode"])("ul",J,[(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.availableOptions,(function(t,n){return Object(i["withDirectives"])((Object(i["openBlock"])(),Object(i["createElementBlock"])("li",{class:"collection-item",key:n},[Object(i["createElementVNode"])("h4",{class:"expandableListCategory",onClick:function(n){return e.onCategoryClicked(t)}},[Object(i["createTextVNode"])(Object(i["toDisplayString"])(t.group)+" ",1),Object(i["createElementVNode"])("span",{class:Object(i["normalizeClass"])(["secondary-content",{"icon-arrow-right":e.showCategory!==t.group,"icon-arrow-bottom":e.showCategory===t.group}])},null,2)],8,H),Object(i["withDirectives"])(Object(i["createElementVNode"])("ul",L,[(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(t.values.filter((function(t){return-1!==t.value.indexOf(e.searchTerm)})),(function(t){return Object(i["openBlock"])(),Object(i["createElementBlock"])("li",{class:"expandableListItem collection-item valign-wrapper",key:t.key,onClick:function(n){return e.onValueClicked(t)}},[Object(i["createElementVNode"])("span",I,Object(i["toDisplayString"])(t.value),1),Object(i["withDirectives"])(Object(i["createElementVNode"])("span",{title:t.tooltip,class:"secondary-content icon-help"},null,8,K),[[i["vShow"],t.tooltip]])],8,z)})),128))],512),[[i["vShow"],e.showCategory===t.group||e.searchTerm]])],512)),[[i["vShow"],t.values.filter((function(t){return-1!==t.value.indexOf(e.searchTerm)})).length]])})),128))])],512),[[i["vShow"],e.showSelect]])],512)),[[u,{blur:e.onBlur}]])}function q(e){var t=[],n={};return Object.values(e).forEach((function(e){var t=e,r=t.group||"";r in n&&n[r]||(n[r]={values:[],group:r});var o={key:t.key,value:t.value};"tooltip"in t&&t.tooltip&&(o.tooltip=t.tooltip),n[r].values.push(o)})),Object.values(n).forEach((function(e){e.values.length&&t.push(e)})),t}var R=Object(i["defineComponent"])({props:{modelValue:[Number,String],availableOptions:Array,title:String},directives:{FocusAnywhereButHere:l["FocusAnywhereButHere"],FocusIf:l["FocusIf"]},inheritAttrs:!1,emits:["update:modelValue"],data:function(){return{showSelect:!1,searchTerm:"",showCategory:""}},computed:{modelValueText:function(){if(this.title)return this.title;var e,t=this.modelValue;return(this.availableOptions||[]).some((function(n){return e=n.values.find((function(e){return e.key===t})),e})),e?e.value.toString():t}},methods:{onBlur:function(){this.showSelect=!1},onCategoryClicked:function(e){this.showCategory===e.group?this.showCategory="":this.showCategory=e.group},onValueClicked:function(e){this.$emit("update:modelValue",e.key),this.showSelect=!1}}});R.render=U;var _=R,W=["for","innerHTML"];function G(e,t,n,r,o,l){var a=Object(i["resolveComponent"])("FieldArray");return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,W),Object(i["createVNode"])(a,{name:e.name,"model-value":e.modelValue,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.onValueUpdate(t)}),field:e.uiControlAttributes.field},null,8,["name","model-value","field"])])}var Q=Object(i["defineComponent"])({components:{FieldArray:l["FieldArray"]},props:{name:String,title:String,modelValue:null,uiControlAttributes:Object},inheritAttrs:!1,emits:["update:modelValue"],methods:{onValueUpdate:function(e){this.$emit("update:modelValue",e)}}});Q.render=G;var X=Q,Y={class:"btn"},Z=["for","innerHTML"],ee=["name","id"],te={class:"file-path-wrapper"},ne=["value"];function re(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["createElementVNode"])("div",Y,[Object(i["createElementVNode"])("span",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,Z),Object(i["createElementVNode"])("input",{ref:"fileInput",name:e.name,type:"file",id:e.name,onChange:t[0]||(t[0]=function(t){return e.onChange(t)})},null,40,ee)]),Object(i["createElementVNode"])("div",te,[Object(i["createElementVNode"])("input",{class:"file-path validate",value:e.modelValue,type:"text"},null,8,ne)])])}var oe=Object(i["defineComponent"])({props:{name:String,title:String,modelValue:String},inheritAttrs:!1,emits:["update:modelValue"],setup:function(e){var t=Object(i["ref"])(null);return Object(i["watch"])((function(){return e.modelValue}),(function(e){if(""===e){var n=t.value;n.value=""}})),{fileInput:t}},methods:{onChange:function(e){var t=e.target.files.item(0);this.$emit("update:modelValue",t)}}});oe.render=re;var le=oe,ie=["type","name","value"];function ae(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["createElementVNode"])("input",{type:e.uiControl,name:e.name,value:e.modelValue,onChange:t[0]||(t[0]=function(t){return e.onChange(t)})},null,40,ie)])}var ue=Object(i["defineComponent"])({props:{modelValue:null,uiControl:String,name:String},inheritAttrs:!1,emits:["update:modelValue"],methods:{onChange:function(e){this.$emit("update:modelValue",e.target.value)}}});ue.render=ae;var ce=ue,se={class:"fieldMultiTuple"},de=["for","innerHTML"];function me(e,t,n,r,o,l){var a=Object(i["resolveComponent"])("MultiPairField");return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",se,[Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,de),Object(i["createVNode"])(a,{name:e.name,"model-value":e.modelValue,"onUpdate:modelValue":e.onUpdateValue,field1:e.uiControlAttributes.field1,field2:e.uiControlAttributes.field2,field3:e.uiControlAttributes.field3,field4:e.uiControlAttributes.field4},null,8,["name","model-value","onUpdate:modelValue","field1","field2","field3","field4"])])}var fe=Object(i["defineComponent"])({props:{name:String,title:String,modelValue:null,uiControlAttributes:Object},inheritAttrs:!1,components:{MultiPairField:l["MultiPairField"]},emits:["update:modelValue"],methods:{onUpdateValue:function(e){this.$emit("update:modelValue",e)}}});fe.render=me;var pe=fe,be=["type","id","name","value"],he=["for","innerHTML"];function Oe(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])(i["Fragment"],null,[Object(i["createElementVNode"])("input",Object(i["mergeProps"])({class:"control_".concat(e.uiControl),type:e.uiControl,id:e.name,name:e.name,value:(e.modelValue||"").toString(),onKeydown:t[0]||(t[0]=function(t){return e.onChange(t)}),onChange:t[1]||(t[1]=function(t){return e.onChange(t)})},e.uiControlAttributes),null,16,be),Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,he)],64)}var ve=Object(i["defineComponent"])({props:{uiControl:String,name:String,title:String,modelValue:[Number,String],uiControlAttributes:Object},inheritAttrs:!1,emits:["update:modelValue"],created:function(){this.onChange=Object(l["debounce"])(this.onChange.bind(this),50)},methods:{onChange:function(e){var t=parseFloat(e.target.value);this.$emit("update:modelValue",t)}},mounted:function(){window.Materialize.updateTextFields()},watch:{modelValue:function(){setTimeout((function(){window.Materialize.updateTextFields()}))}}});ve.render=Oe;var ye=ve,je=["value","id","name","disabled","checked"];function ge(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["withDirectives"])(Object(i["createElementVNode"])("label",{class:"fieldRadioTitle"},Object(i["toDisplayString"])(e.title),513),[[i["vShow"],e.title]]),(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.availableOptions||[],(function(n){return Object(i["openBlock"])(),Object(i["createElementBlock"])("p",{key:n.key,class:"radio"},[Object(i["createElementVNode"])("label",null,[Object(i["createElementVNode"])("input",Object(i["mergeProps"])({value:n.key,onChange:t[0]||(t[0]=function(t){return e.onChange(t)}),type:"radio",id:"".concat(e.name).concat(n.key),name:e.name,disabled:n.disabled||e.disabled},e.uiControlAttributes,{checked:e.modelValue===n.key||"".concat(e.modelValue)===n.key}),null,16,je),Object(i["createElementVNode"])("span",null,[Object(i["createTextVNode"])(Object(i["toDisplayString"])(n.value)+" ",1),Object(i["withDirectives"])(Object(i["createElementVNode"])("span",{class:"form-description"},Object(i["toDisplayString"])(n.description),513),[[i["vShow"],n.description]])])])])})),128))])}var we=Object(i["defineComponent"])({props:{title:String,availableOptions:Array,name:String,disabled:Boolean,uiControlAttributes:Object,modelValue:[String,Number]},inheritAttrs:!1,emits:["update:modelValue"],methods:{onChange:function(e){this.$emit("update:modelValue",e.target.value)}}});we.render=ge;var Ve=we;function Ce(e,t){return Be(e)||Fe(e,t)||Se(e,t)||Ae()}function Ae(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Se(e,t){if(e){if("string"===typeof e)return ke(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ke(e,t):void 0}}function ke(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Fe(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,l=[],i=!0,a=!1;try{for(n=n.call(e);!(i=(r=n.next()).done);i=!0)if(l.push(r.value),t&&l.length===t)break}catch(u){a=!0,o=u}finally{try{i||null==n["return"]||n["return"]()}finally{if(a)throw o}}return l}}function Be(e){if(Array.isArray(e))return e}var Ee={key:0,class:"matomo-field-select"},xe=["multiple","name"],Te=["label"],Ne=["value","selected"],Pe=["for","innerHTML"],$e={key:1,class:"matomo-field-select"},Me=["multiple","name"],De=["value","selected"],Je=["for","innerHTML"];function He(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])(i["Fragment"],null,[e.groupedOptions?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",Ee,[Object(i["createElementVNode"])("select",Object(i["mergeProps"])({ref:"select",class:"grouped",multiple:e.multiple,name:e.name,onChange:t[0]||(t[0]=function(t){return e.onChange(t)})},e.uiControlAttributes),[(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.groupedOptions,(function(t){var n=Ce(t,2),r=n[0],o=n[1];return Object(i["openBlock"])(),Object(i["createElementBlock"])("optgroup",{key:r,label:r},[(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(o,(function(t){return Object(i["openBlock"])(),Object(i["createElementBlock"])("option",{key:t.key,value:"string:".concat(t.key),selected:e.multiple?e.modelValue&&-1!==e.modelValue.indexOf(t.key):e.modelValue===t.key},Object(i["toDisplayString"])(t.value),9,Ne)})),128))],8,Te)})),128))],16,xe),Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.title},null,8,Pe)])):Object(i["createCommentVNode"])("",!0),!e.groupedOptions&&e.options?(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",$e,[Object(i["createElementVNode"])("select",Object(i["mergeProps"])({class:"ungrouped",ref:"select",multiple:e.multiple,name:e.name,onChange:t[1]||(t[1]=function(t){return e.onChange(t)})},e.uiControlAttributes),[(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.options,(function(t){return Object(i["openBlock"])(),Object(i["createElementBlock"])("option",{key:t.key,value:"string:".concat(t.key),selected:e.multiple?e.modelValue&&-1!==e.modelValue.indexOf(t.key):e.modelValue===t.key},Object(i["toDisplayString"])(t.value),9,De)})),128))],16,Me),Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.title},null,8,Je)])):Object(i["createCommentVNode"])("",!0)],64)}function Le(e){return Ke(e)||Ie(e)||Re(e)||ze()}function ze(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Ie(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function Ke(e){if(Array.isArray(e))return _e(e)}function Ue(e,t){return Ge(e)||We(e,t)||Re(e,t)||qe()}function qe(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Re(e,t){if(e){if("string"===typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_e(e,t):void 0}}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function We(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,l=[],i=!0,a=!1;try{for(n=n.call(e);!(i=(r=n.next()).done);i=!0)if(l.push(r.value),t&&l.length===t)break}catch(u){a=!0,o=u}finally{try{i||null==n["return"]||n["return"]()}finally{if(a)throw o}}return l}}function Ge(e){if(Array.isArray(e))return e}function Qe(e){return Qe="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Qe(e)}function Xe(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4?arguments[4]:void 0;if(e){var l=window.$(e);if(Array.from(e.options).forEach((function(e){e.selected=o?t&&-1!==t.indexOf(e.value.replace(/^string:/,"")):"string:".concat(t)===e.value})),l.formSelect(r),n){var i=l.closest(".select-wrapper").find("input");i.attr("placeholder",n)}}}function Ye(e){return!Array.isArray(e)&&"object"===Qe(e)&&Object.values(e).some((function(e){return"object"===Qe(e)}))}function Ze(e,t){return e.some((function(e){return e.key===t}))}function et(e,t,n){if(!e)return[];var r=!0,o=e;Ye(o)||(o={"":e},r=!1);var l=[];return Object.entries(o).forEach((function(e){var n=Ue(e,2),o=n[0],i=n[1];Object.entries(i).forEach((function(e){var n=Ue(e,2),i=n[0],a=n[1];if("object"!==Qe(a)||"undefined"===typeof a.key){var u=i;"integer"===t&&"string"===typeof i&&(u=parseInt(i,10)),l.push({group:r?o:void 0,key:u,value:a})}else l.push(a)}))})),n.placeholder&&!Ze(l,"")?[{key:"",value:""}].concat(l):l}function tt(e){return"string"===typeof e?e.replace(/^string:/,""):e}var nt=Object(i["defineComponent"])({props:{modelValue:null,multiple:Boolean,name:String,title:String,availableOptions:Array,uiControlAttributes:Object,uiControlOptions:Object},inheritAttrs:!1,emits:["update:modelValue"],computed:{options:function(){return!this.availableOptions||Ze(this.availableOptions,"")||"undefined"!==typeof this.modelValue&&null!==this.modelValue&&""!==this.modelValue?this.availableOptions:[{key:"",value:this.modelValue,group:this.hasGroups?"":void 0}].concat(Le(this.availableOptions))},hasGroups:function(){var e=this.availableOptions;return e&&e[0]&&"undefined"!==typeof e[0].group},groupedOptions:function(){if(!this.hasGroups)return null;var e=this.options,t={};e.forEach((function(e){t[e.group]=t[e.group]||[],t[e.group].push(e)}));var n=Object.entries(t);return n.sort((function(e,t){return e[0]<t[0]?-1:e[0]>t[0]?1:0})),n}},methods:{onChange:function(e){var t,n=e.target;this.multiple?(t=Array.from(n.options).filter((function(e){return e.selected})).map((function(e){return e.value})),t=t.map(tt)):(t=n.value,t=tt(t)),this.$emit("update:modelValue",t)}},watch:{modelValue:function(e){var t=this;window.$(this.$refs.select).val(e),setTimeout((function(){Xe(t.$refs.select,e,t.uiControlAttributes.placeholder,t.uiControlOptions,t.multiple)}))},"uiControlAttributes.disabled":{handler:function(e,t){var n=this;setTimeout((function(){e!==t&&Xe(n.$refs.select,n.modelValue,n.uiControlAttributes.placeholder,n.uiControlOptions,n.multiple)}))}},availableOptions:function(e,t){var n=this;e!==t&&setTimeout((function(){Xe(n.$refs.select,n.modelValue,n.uiControlAttributes.placeholder,n.uiControlOptions,n.multiple)}))}},mounted:function(){var e=this;setTimeout((function(){Xe(e.$refs.select,e.modelValue,e.uiControlAttributes.placeholder,e.uiControlOptions,e.multiple)}))}});nt.render=He;var rt=nt,ot=["for","innerHTML"],lt={class:"sites_autocomplete"};function it(e,t,n,r,o,l){var a=Object(i["resolveComponent"])("SiteSelector");return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["createElementVNode"])("label",{for:e.name,class:"siteSelectorLabel",innerHTML:e.$sanitize(e.title)},null,8,ot),Object(i["createElementVNode"])("div",lt,[Object(i["createVNode"])(a,Object(i["mergeProps"])({"model-value":e.modelValue,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.onChange(t)}),id:e.name,"show-all-sites-item":e.uiControlAttributes.showAllSitesItem||!1,"switch-site-on-select":!1,"show-selected-site":!0,"only-sites-with-admin-access":e.uiControlAttributes.onlySitesWithAdminAccess||!1},e.uiControlAttributes),null,16,["model-value","id","show-all-sites-item","only-sites-with-admin-access"])])])}var at=Object(i["defineComponent"])({props:{name:String,title:String,modelValue:Object,uiControlAttributes:Object},inheritAttrs:!1,components:{SiteSelector:l["SiteSelector"]},emits:["update:modelValue"],methods:{onChange:function(e){this.$emit("update:modelValue",e)}}});at.render=it;var ut=at,ct=["type","id","name","value"],st=["for","innerHTML"];function dt(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])(i["Fragment"],null,[Object(i["createElementVNode"])("input",Object(i["mergeProps"])({class:"control_".concat(e.uiControl),type:e.uiControl,id:e.name,name:e.name,value:e.modelValueText,onKeydown:t[0]||(t[0]=function(t){return e.onKeydown(t)}),onChange:t[1]||(t[1]=function(t){return e.onKeydown(t)})},e.uiControlAttributes),null,16,ct),Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,st)],64)}var mt=Object(i["defineComponent"])({props:{title:String,name:String,uiControlAttributes:Object,modelValue:[String,Number],uiControl:String},inheritAttrs:!1,emits:["update:modelValue"],computed:{modelValueText:function(){return"undefined"===typeof this.modelValue||null===this.modelValue?"":this.modelValue.toString()}},created:function(){this.onKeydown=Object(l["debounce"])(this.onKeydown.bind(this),50)},mounted:function(){setTimeout((function(){window.Materialize.updateTextFields()}))},watch:{modelValue:function(){setTimeout((function(){window.Materialize.updateTextFields()}))}},methods:{onKeydown:function(e){this.$emit("update:modelValue",e.target.value)}}});mt.render=dt;var ft=mt,pt=["for","innerHTML"],bt=["type","name","value"];function ht(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,pt),Object(i["createElementVNode"])("input",Object(i["mergeProps"])({class:"control_".concat(e.uiControl),type:e.uiControl,name:e.name,onKeydown:t[0]||(t[0]=function(t){return e.onKeydown(t)}),onChange:t[1]||(t[1]=function(t){return e.onKeydown(t)}),value:e.concattedValues},e.uiControlAttributes),null,16,bt)])}var Ot=Object(i["defineComponent"])({props:{name:String,title:String,uiControl:String,modelValue:Array,uiControlAttributes:Object},inheritAttrs:!1,computed:{concattedValues:function(){return"string"===typeof this.modelValue?this.modelValue:(this.modelValue||[]).join(", ")}},emits:["update:modelValue"],created:function(){this.onKeydown=Object(l["debounce"])(this.onKeydown.bind(this),50)},methods:{onKeydown:function(e){var t=e.target.value.split(",").map((function(e){return e.trim()}));this.$emit("update:modelValue",t)}}});Ot.render=ht;var vt=Ot,yt=["name","id","value"],jt=["for","innerHTML"];function gt(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])(i["Fragment"],null,[Object(i["createElementVNode"])("textarea",Object(i["mergeProps"])({name:e.name},e.uiControlAttributes,{id:e.name,value:e.modelValue,onKeydown:t[0]||(t[0]=function(t){return e.onKeydown(t)}),onChange:t[1]||(t[1]=function(t){return e.onKeydown(t)}),class:"materialize-textarea",ref:"textarea"}),null,16,yt),Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,jt)],64)}var wt=Object(i["defineComponent"])({props:{name:String,uiControlAttributes:Object,modelValue:String,title:String},inheritAttrs:!1,emits:["update:modelValue"],created:function(){this.onKeydown=Object(l["debounce"])(this.onKeydown.bind(this),50)},methods:{onKeydown:function(e){this.$emit("update:modelValue",e.target.value)}},watch:{modelValue:function(){var e=this;setTimeout((function(){window.Materialize.textareaAutoResize(e.$refs.textarea),window.Materialize.updateTextFields()}))}},mounted:function(){var e=this;setTimeout((function(){window.Materialize.textareaAutoResize(e.$refs.textarea),window.Materialize.updateTextFields()}))}});wt.render=gt;var Vt=wt,Ct=["for","innerHTML"],At=["name","value"];function St(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["createElementVNode"])("label",{for:e.name,innerHTML:e.$sanitize(e.title)},null,8,Ct),Object(i["createElementVNode"])("textarea",Object(i["mergeProps"])({ref:"textarea",name:e.name},e.uiControlAttributes,{value:e.concattedValue,onKeydown:t[0]||(t[0]=function(t){return e.onKeydown(t)}),onChange:t[1]||(t[1]=function(t){return e.onKeydown(t)}),class:"materialize-textarea"}),null,16,At)])}var kt="\n",Ft=Object(i["defineComponent"])({props:{name:String,title:String,uiControlAttributes:Object,modelValue:[Array,String]},inheritAttrs:!1,emits:["update:modelValue"],computed:{concattedValue:function(){return"string"===typeof this.modelValue?this.modelValue:(this.modelValue||[]).join(kt)}},created:function(){this.onKeydown=Object(l["debounce"])(this.onKeydown.bind(this),50)},methods:{onKeydown:function(e){var t=e.target.value.split(kt);this.$emit("update:modelValue",t)}},watch:{modelValue:function(e,t){var n=this;e!==t&&setTimeout((function(){window.Materialize.textareaAutoResize(n.$refs.textarea),window.Materialize.updateTextFields()}))}},mounted:function(){var e=this;setTimeout((function(){window.Materialize.textareaAutoResize(e.$refs.textarea),window.Materialize.updateTextFields()}))}});Ft.render=St;var Bt=Ft;function Et(e){return Et="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Et(e)}function xt(e,t){return Mt(e)||$t(e,t)||Nt(e,t)||Tt()}function Tt(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Nt(e,t){if(e){if("string"===typeof e)return Pt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Pt(e,t):void 0}}function Pt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function $t(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,l=[],i=!0,a=!1;try{for(n=n.call(e);!(i=(r=n.next()).done);i=!0)if(l.push(r.value),t&&l.length===t)break}catch(u){a=!0,o=u}finally{try{i||null==n["return"]||n["return"]()}finally{if(a)throw o}}return l}}function Mt(e){if(Array.isArray(e))return e}
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */function Dt(e,t){if(!e)return[];var n=[];return Object.entries(e).forEach((function(e){var r=xt(e,2),o=r[0],l=r[1];if("object"!==Et(l)||"undefined"===typeof l.key){var i=o;"integer"===t&&"string"===typeof o&&(i=parseInt(i,10)),n.push({key:i,value:l})}else n.push(l)})),n}function Jt(e){return Jt="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jt(e)}var Ht=["password","url","search","email"],Lt=["textarea","checkbox","text"],zt={checkbox:"FieldCheckbox","expandable-select":"FieldExpandableSelect","field-array":"FieldFieldArray",file:"FieldFile",hidden:"FieldHidden",multiselect:"FieldSelect",multituple:"FieldMultituple",number:"FieldNumber",radio:"FieldRadio",select:"FieldSelect",site:"FieldSite",text:"FieldText",textarea:"FieldTextarea"},It={FieldSelect:et,FieldCheckboxArray:Dt,FieldRadio:Dt,FieldExpandableSelect:q},Kt=Object(i["defineComponent"])({props:{modelValue:null,formField:{type:Object,required:!0},allSettings:[Object,Array]},emits:["update:modelValue"],components:{FieldCheckbox:g,FieldCheckboxArray:T,FieldExpandableSelect:_,FieldFieldArray:X,FieldFile:le,FieldHidden:ce,FieldMultituple:pe,FieldNumber:ye,FieldRadio:Ve,FieldSelect:rt,FieldSite:ut,FieldText:ft,FieldTextArray:vt,FieldTextarea:Vt,FieldTextareaArray:Bt},setup:function(e){var t=Object(i["ref"])(null),n=function(e){var n;e&&(n="string"===typeof e&&e&&0===e.indexOf("#")?window.$(e):window.vueSanitize(e),window.$(t.value).html("").append(n))};return Object(i["watch"])((function(){return e.formField.inlineHelp}),n),Object(i["onMounted"])((function(){n(e.formField.inlineHelp)})),{inlineHelp:t}},computed:{childComponent:function(){if(this.formField.component)return this.formField.component;var e=this.formField.uiControl,t=zt[e];return-1!==Ht.indexOf(e)&&(t="FieldText"),"array"===this.formField.type&&-1!==Lt.indexOf(e)&&(t="".concat(t,"Array")),t},extraChildComponentParams:function(){return"multiselect"===this.formField.uiControl?{multiple:!0}:{}},showFormHelp:function(){return this.formField.description||this.formField.inlineHelp||this.showDefaultValue},showDefaultValue:function(){return this.defaultValuePretty&&"checkbox"!==this.formField.uiControl&&"radio"!==this.formField.uiControl},showField:function(){if(!this.formField.condition||!this.allSettings||!Object.values(this.allSettings).length)return!0;var e={};return Object.values(this.allSettings).forEach((function(t){"0"===t.value?e[t.name]=0:e[t.name]=t.value})),this.formField.condition(e)},processedModelValue:function(){var e=this.formField;if("boolean"===e.type){var t=this.modelValue&&this.modelValue>0&&"0"!==this.modelValue;if("checkbox"===e.uiControl)return t;if("radio"===e.uiControl)return t?"1":"0"}return this.modelValue},defaultValue:function(){var e=this.formField.defaultValue;return Array.isArray(e)&&(e=e.join(",")),e},availableOptions:function(){var e=this.childComponent,t=this.formField;return t.availableValues&&It[e]?It[e](t.availableValues,t.type,t.uiControlAttributes):null},defaultValuePretty:function(){var e=this.formField.defaultValue,t=this.availableOptions;if("string"===typeof e&&e){var n=null;try{n=JSON.parse(e)}catch(o){}if(null!==n&&"object"===Jt(n))return""}if(!Array.isArray(t))return Array.isArray(e)?"":e?e.toString():"";var r=[];return Array.isArray(e)||(e=[e]),(t||[]).forEach((function(t){-1!==e.indexOf(t.key)&&"undefined"!==typeof t.value&&r.push(t.value)})),r.join(", ")},defaultValuePrettyTruncated:function(){return this.defaultValuePretty.substring(0,50)}},methods:{onChange:function(e){this.$emit("update:modelValue",e)}}});Kt.render=b;var Ut=Kt,qt={ref:"root"};function Rt(e,t,n,r,o,l){return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",qt,null,512)}function _t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_t(Object(n),!0).forEach((function(t){Gt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_t(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Gt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Qt(e){if("undefined"!==typeof e)return JSON.parse(JSON.stringify(e))}var Xt=Object(i["defineComponent"])({props:{modelValue:null,formField:null,templateFile:String},emits:["update:modelValue"],inheritAttrs:!1,setup:function(e,t){var n=Object(i["ref"])(null),r=window.$("<div ng-include=\"'".concat(e.templateFile,"?cb=").concat(l["Matomo"].cacheBuster,"'\"></div>")),o=l["Matomo"].helper.getAngularDependency("$timeout"),a=l["Matomo"].helper.getAngularDependency("$rootScope"),u=a.$new();return u.formField=Wt(Wt({},Qt(e.formField)),{},{value:Qt(e.modelValue)}),u.$watch("formField.value",(function(n,r){n!==r&&n!==e.modelValue&&t.emit("update:modelValue",Qt(n))})),Object(i["watch"])((function(){return e.modelValue}),(function(e){o((function(){u.formField.value=Qt(e)}))})),Object(i["watch"])((function(){return e.formField}),(function(e){o((function(){var t=u.formField.value;u.formField=Wt(Wt({},Qt(e)),{},{value:t})}))}),{deep:!0}),Object(i["onMounted"])((function(){window.$(n.value).append(r),l["Matomo"].helper.compileAngularComponents(r,{scope:u,params:{formField:Wt(Wt({},Qt(e.formField)),{},{value:e.modelValue})}})})),{root:n}}});Xt.render=Rt;var Yt=Xt;
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */function Zt(e,t){return Object(i["defineAsyncComponent"])((function(){return new Promise((function(n){window.$(document).ready((function(){window[e]?n(window[e][t]):n(null)}))}))}))}function en(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?en(Object(n),!0).forEach((function(t){nn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):en(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */function rn(e){if(e){var t=e.plugin,n=e.name;if(!t||!n)throw new Error("Invalid component property given to piwik-field directive, must be {plugin: '...',name: '...'}");return Zt(t,n)}}Object(l["createAngularJsAdapter"])({component:Ut,scope:{modelValue:{default:function(e){var t=e.piwikFormField;return"string"!==typeof t.value||!t.value||"array"!==t.type&&"multituple"!==t.uiControl&&"field-array"!==t.uiControl&&"multiselect"!==t.uiControl&&"site"!==t.uiControl||(t.value=JSON.parse(t.value)),"checkbox"===t.uiControl?Object(l["transformAngularJsBoolAttr"])(t.value):t.value}},piwikFormField:{vue:"formField",angularJsBind:"=",transform:function(e,t,n){return tn(tn({},e),{},{condition:e.condition?function(t){return n.$eval(e.condition,t)}:e.condition,disabled:Object(l["transformAngularJsBoolAttr"])(e.disabled),autocomplete:Object(l["transformAngularJsBoolAttr"])(e.autocomplete),autofocus:Object(l["transformAngularJsBoolAttr"])(e.autofocus),tabindex:Object(l["transformAngularJsIntAttr"])(e.tabindex),fullWidth:Object(l["transformAngularJsBoolAttr"])(e.fullWidth),maxlength:Object(l["transformAngularJsIntAttr"])(e.maxlength),required:Object(l["transformAngularJsBoolAttr"])(e.required),rows:Object(l["transformAngularJsIntAttr"])(e.rows),min:Object(l["transformAngularJsIntAttr"])(e.min),max:Object(l["transformAngularJsIntAttr"])(e.max),component:Object(i["shallowRef"])(e.templateFile?Yt:rn(e.component))})}},allSettings:{angularJsBind:"="}},directiveName:"piwikFormField",events:{"update:modelValue":function(e,t,n,r,o,l,i){e!==n.piwikFormField.value&&i((function(){n.piwikFormField.value=e}))}},$inject:["$timeout"],postCreate:function(e,t){t.$watch("piwikFormField.value",(function(t,n){t!==n&&(e.modelValue=t)}))}});function on(e,t,n,r,o,l){var a=Object(i["resolveComponent"])("FormField");return Object(i["openBlock"])(),Object(i["createBlock"])(a,{"form-field":e.field,"model-value":e.modelValue,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.onChange(t)}),component:e.component},null,8,["form-field","model-value","component"])}function ln(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function an(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ln(Object(n),!0).forEach((function(t){un(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ln(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function un(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var cn={multiselect:"array",checkbox:"boolean",site:"object",number:"integer"},sn=Object(i["defineComponent"])({props:{modelValue:null,uicontrol:String,name:String,defaultValue:null,options:[Object,Array],description:String,introduction:String,title:String,inlineHelp:String,disabled:Boolean,uiControlAttributes:{type:Object,default:function(){return{}}},uiControlOptions:{type:Object,default:function(){return{}}},autocomplete:Boolean,condition:Function,varType:String,autofocus:Boolean,tabindex:Number,fullWidth:Boolean,maxlength:Number,required:Boolean,placeholder:String,rows:Number,min:Number,max:Number,component:null},emits:["update:modelValue"],components:{FormField:Ut},computed:{type:function(){return this.varType?this.varType:cn[this.uicontrol]?cn[this.uicontrol]:"string"},field:function(){return{uiControl:this.uicontrol,type:this.type,name:this.name,defaultValue:this.defaultValue,availableValues:this.options,description:this.description,introduction:this.introduction,inlineHelp:this.inlineHelp,title:this.title,uiControlAttributes:an(an({},this.uiControlAttributes),{},{disabled:this.disabled,autocomplete:this.autocomplete,tabindex:this.tabindex,autofocus:this.autofocus,rows:this.rows,required:this.required,maxlength:this.maxlength,placeholder:this.placeholder,min:this.min,max:this.max}),fullWidth:this.fullWidth,uiControlOptions:this.uiControlOptions}}},methods:{onChange:function(e){this.$emit("update:modelValue",e)}}});sn.render=on;var dn=sn;function mn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mn(Object(n),!0).forEach((function(t){pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function pn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */function bn(e,t,n){if("string"===typeof e&&e&&("array"===t||"multituple"===n||"field-array"===n||"multiselect"===n||"site"===n)){var r=JSON.parse(e);return"site"===n&&(r.name=l["Matomo"].helper.htmlDecode(r.name)),r}return"checkbox"===n&&"array"!==t?Object(l["transformAngularJsBoolAttr"])(e):e}Object(l["createAngularJsAdapter"])({component:dn,require:"?ngModel",scope:{uicontrol:{angularJsBind:"@"},name:{angularJsBind:"@"},value:{vue:"modelValue",angularJsBind:"@",transform:function(e,t,n){return bn(e,n.varType,n.uicontrol)}},default:{vue:"defaultValue",angularJsBind:"@"},options:{angularJsBind:"="},description:{angularJsBind:"@"},introduction:{angularJsBind:"@"},title:{angularJsBind:"@"},inlineHelp:{angularJsBind:"@"},disabled:{angularJsBind:"=",transform:l["transformAngularJsBoolAttr"]},uiControlAttributes:{angularJsBind:"="},uiControlOptions:{angularJsBind:"="},autocomplete:{angularJsBind:"@",transform:l["transformAngularJsBoolAttr"]},condition:{angularJsBind:"@",transform:function(e,t,n){var r=e;return e&&(r=function(t){return n.$eval(e,t)}),r}},varType:{angularJsBind:"@"},autofocus:{angularJsBind:"@",transform:l["transformAngularJsBoolAttr"]},tabindex:{angularJsBind:"@",transform:l["transformAngularJsIntAttr"]},fullWidth:{angularJsBind:"@",transform:l["transformAngularJsBoolAttr"]},maxlength:{angularJsBind:"@",transform:l["transformAngularJsIntAttr"]},required:{angularJsBind:"@",transform:l["transformAngularJsBoolAttr"]},placeholder:{angularJsBind:"@"},rows:{angularJsBind:"@",transform:l["transformAngularJsIntAttr"]},min:{angularJsBind:"@",transform:l["transformAngularJsIntAttr"]},max:{angularJsBind:"@",transform:l["transformAngularJsIntAttr"]},component:{angularJsBind:"<",transform:function(e,t,n){if(!e)return e;if(n.templateFile)return Object(i["shallowRef"])(Yt);var r=e.plugin,o=e.name;if(!r||!o)throw new Error("Invalid component property given to piwik-field directive, must be {plugin: '...',name: '...'}");return Object(i["shallowRef"])(Object(l["useExternalPluginComponent"])(r,o))}}},directiveName:"piwikField",$inject:["$timeout"],events:{"update:modelValue":function(e,t,n,r,o,l,i){var a=l?l.$viewValue:n.value;e!==a&&i((function(){l?(l.$setViewValue(e),l.$render()):n.value=e}))}},postCreate:function(e,t,n,r,o){var a=o;if(a){if(a.$render=function(){Object(i["nextTick"])((function(){e.modelValue=Object(l["removeAngularJsSpecificProperties"])(a.$viewValue)}))},"undefined"!==typeof t.value){var u=bn(t.value,t.varType,t.uicontrol);a.$setViewValue(u)}else a.$setViewValue(e.modelValue);"site"===t.uicontrol&&setTimeout((function(){a.$setViewValue(fn({},a.$viewValue))}))}else t.$watch("value",(function(n){if(n!==e.modelValue){var r=bn(n,t.varType,t.uicontrol);Object(i["nextTick"])((function(){e.modelValue=r}))}}))}});
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/}})}));
+//# sourceMappingURL=CorePluginsAdmin.umd.min.js.map \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/vue/dist/umd.metadata.json b/plugins/CorePluginsAdmin/vue/dist/umd.metadata.json
new file mode 100644
index 0000000000..9ecfcc0456
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/dist/umd.metadata.json
@@ -0,0 +1,5 @@
+{
+ "dependsOn": [
+ "CoreHome"
+ ]
+} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/vue/src/Field/Field.adapter.ts b/plugins/CorePluginsAdmin/vue/src/Field/Field.adapter.ts
new file mode 100644
index 0000000000..51dc7dff9e
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/Field/Field.adapter.ts
@@ -0,0 +1,226 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { INgModelController, ITimeoutService } from 'angular';
+import { nextTick, shallowRef } from 'vue';
+import {
+ createAngularJsAdapter,
+ transformAngularJsBoolAttr,
+ transformAngularJsIntAttr,
+ removeAngularJsSpecificProperties,
+ Matomo,
+ useExternalPluginComponent,
+} from 'CoreHome';
+import Field from './Field.vue';
+import FieldAngularJsTemplate from '../FormField/FieldAngularJsTemplate.vue';
+
+function handleJsonValue(value: unknown, varType: string, uiControl: string) {
+ if (typeof value === 'string'
+ && value
+ && (varType === 'array'
+ || uiControl === 'multituple'
+ || uiControl === 'field-array'
+ || uiControl === 'multiselect'
+ || uiControl === 'site')
+ ) {
+ const result = JSON.parse(value);
+
+ // the angularjs site field supplied siteid/sitename properties which initializes the
+ // siteselector value. the sitename is assumed to be encoded, and is decoded once.
+ // so the value for 'site' Field's in angularjs is assumed to be encoded.
+ if (uiControl === 'site') {
+ result.name = Matomo.helper.htmlDecode(result.name);
+ }
+
+ return result;
+ }
+
+ if (uiControl === 'checkbox' && varType !== 'array') {
+ return transformAngularJsBoolAttr(value);
+ }
+
+ return value;
+}
+
+export default createAngularJsAdapter<[ITimeoutService]>({
+ component: Field,
+ require: '?ngModel',
+ scope: {
+ uicontrol: {
+ angularJsBind: '@',
+ },
+ name: {
+ angularJsBind: '@',
+ },
+ value: {
+ vue: 'modelValue',
+ angularJsBind: '@',
+ transform(value, vm, scope) {
+ // vue components expect object data as input, so we parse JSON data
+ // for angularjs directives that use JSON.
+ return handleJsonValue(value, scope.varType, scope.uicontrol);
+ },
+ },
+ default: {
+ vue: 'defaultValue',
+ angularJsBind: '@',
+ },
+ options: {
+ angularJsBind: '=',
+ },
+ description: {
+ angularJsBind: '@',
+ },
+ introduction: {
+ angularJsBind: '@',
+ },
+ title: {
+ angularJsBind: '@',
+ },
+ inlineHelp: {
+ angularJsBind: '@',
+ },
+ disabled: {
+ angularJsBind: '=',
+ transform: transformAngularJsBoolAttr,
+ },
+ uiControlAttributes: {
+ angularJsBind: '=',
+ },
+ uiControlOptions: {
+ angularJsBind: '=',
+ },
+ autocomplete: {
+ angularJsBind: '@',
+ transform: transformAngularJsBoolAttr,
+ },
+ condition: {
+ angularJsBind: '@',
+ transform(value, vm, scope) {
+ let transformed = value;
+ if (value) {
+ transformed = (values: unknown[]) => scope.$eval(value, values);
+ }
+ return transformed;
+ },
+ },
+ varType: {
+ angularJsBind: '@',
+ },
+ autofocus: {
+ angularJsBind: '@',
+ transform: transformAngularJsBoolAttr,
+ },
+ tabindex: {
+ angularJsBind: '@',
+ transform: transformAngularJsIntAttr,
+ },
+ fullWidth: {
+ angularJsBind: '@',
+ transform: transformAngularJsBoolAttr,
+ },
+ maxlength: {
+ angularJsBind: '@',
+ transform: transformAngularJsIntAttr,
+ },
+ required: {
+ angularJsBind: '@',
+ transform: transformAngularJsBoolAttr,
+ },
+ placeholder: {
+ angularJsBind: '@',
+ },
+ rows: {
+ angularJsBind: '@',
+ transform: transformAngularJsIntAttr,
+ },
+ min: {
+ angularJsBind: '@',
+ transform: transformAngularJsIntAttr,
+ },
+ max: {
+ angularJsBind: '@',
+ transform: transformAngularJsIntAttr,
+ },
+ component: {
+ angularJsBind: '<',
+ transform(value, vm, scope) {
+ if (!value) {
+ return value;
+ }
+
+ if (scope.templateFile) {
+ return shallowRef(FieldAngularJsTemplate);
+ }
+
+ const { plugin, name } = value;
+ if (!plugin || !name) {
+ throw new Error("Invalid component property given to piwik-field directive, must be {plugin: '...',name: '...'}");
+ }
+
+ return shallowRef(useExternalPluginComponent(plugin, name));
+ },
+ },
+ },
+ directiveName: 'piwikField',
+ $inject: ['$timeout'],
+ events: {
+ 'update:modelValue': (newValue, vm, scope, element, attrs, ngModel, $timeout) => {
+ const currentValue = ngModel ? ngModel.$viewValue : scope.value;
+ if (newValue !== currentValue) {
+ $timeout(() => {
+ if (!ngModel) {
+ scope.value = newValue;
+ return;
+ }
+
+ // ngModel being used
+ (ngModel as INgModelController).$setViewValue(newValue);
+ (ngModel as INgModelController).$render(); // not detected by the watch for some reason
+ });
+ }
+ },
+ },
+ postCreate(vm, scope, element, attrs, controller) {
+ const ngModel = controller as INgModelController;
+
+ if (!ngModel) {
+ scope.$watch('value', (newVal) => {
+ if (newVal !== vm.modelValue) {
+ const transformed = handleJsonValue(newVal, scope.varType, scope.uicontrol);
+
+ nextTick(() => {
+ vm.modelValue = transformed;
+ });
+ }
+ });
+ return;
+ }
+
+ // ngModel being used
+ ngModel.$render = () => {
+ nextTick(() => {
+ vm.modelValue = removeAngularJsSpecificProperties(ngModel.$viewValue);
+ });
+ };
+
+ if (typeof scope.value !== 'undefined') {
+ const transformed = handleJsonValue(scope.value, scope.varType, scope.uicontrol);
+ (ngModel as INgModelController).$setViewValue(transformed);
+ } else {
+ ngModel.$setViewValue(vm.modelValue);
+ }
+
+ // to provide same behavior in angularjs/<4.6.0, we trigger a model update to the same
+ // value, but only for 'site' uicontrols. this only happened for site selectors, no others.
+ if (scope.uicontrol === 'site') {
+ setTimeout(() => {
+ ngModel.$setViewValue({ ...ngModel.$viewValue });
+ });
+ }
+ },
+});
diff --git a/plugins/CorePluginsAdmin/vue/src/Field/Field.vue b/plugins/CorePluginsAdmin/vue/src/Field/Field.vue
new file mode 100644
index 0000000000..02a327d18e
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/Field/Field.vue
@@ -0,0 +1,112 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <FormField
+ :form-field="field"
+ :model-value="modelValue"
+ @update:model-value="onChange($event)"
+ :component="component"
+ />
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import FormField from '../FormField/FormField.vue';
+
+const UI_CONTROLS_TO_TYPE = {
+ multiselect: 'array',
+ checkbox: 'boolean',
+ site: 'object',
+ number: 'integer',
+};
+
+export default defineComponent({
+ props: {
+ modelValue: null,
+ uicontrol: String,
+ name: String,
+ defaultValue: null,
+ options: [Object, Array],
+ description: String,
+ introduction: String,
+ title: String,
+ inlineHelp: String,
+ disabled: Boolean,
+ uiControlAttributes: {
+ type: Object,
+ default: () => ({}),
+ },
+ uiControlOptions: {
+ type: Object,
+ default: () => ({}),
+ },
+ autocomplete: Boolean,
+ condition: Function,
+ varType: String,
+ autofocus: Boolean,
+ tabindex: Number,
+ fullWidth: Boolean,
+ maxlength: Number,
+ required: Boolean,
+ placeholder: String,
+ rows: Number,
+ min: Number,
+ max: Number,
+ component: null,
+ },
+ emits: ['update:modelValue'],
+ components: {
+ FormField,
+ },
+ computed: {
+ type() {
+ if (this.varType) {
+ return this.varType;
+ }
+
+ if (UI_CONTROLS_TO_TYPE[this.uicontrol]) {
+ return UI_CONTROLS_TO_TYPE[this.uicontrol];
+ }
+
+ return 'string';
+ },
+ field() {
+ return {
+ uiControl: this.uicontrol,
+ type: this.type,
+ name: this.name,
+ defaultValue: this.defaultValue,
+ availableValues: this.options,
+ description: this.description,
+ introduction: this.introduction,
+ inlineHelp: this.inlineHelp,
+ title: this.title,
+ uiControlAttributes: {
+ ...this.uiControlAttributes,
+ disabled: this.disabled,
+ autocomplete: this.autocomplete,
+ tabindex: this.tabindex,
+ autofocus: this.autofocus,
+ rows: this.rows,
+ required: this.required,
+ maxlength: this.maxlength,
+ placeholder: this.placeholder,
+ min: this.min,
+ max: this.max,
+ },
+ fullWidth: this.fullWidth,
+ uiControlOptions: this.uiControlOptions,
+ };
+ },
+ },
+ methods: {
+ onChange(newValue) {
+ this.$emit('update:modelValue', newValue);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue
new file mode 100644
index 0000000000..c9763858ff
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldAngularJsTemplate.vue
@@ -0,0 +1,96 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div ref="root"/>
+</template>
+
+<script lang="ts">
+import {
+ defineComponent,
+ ref,
+ watch,
+ onMounted,
+} from 'vue';
+import { Matomo } from 'CoreHome';
+
+function clone(obj) {
+ if (typeof obj === 'undefined') {
+ return undefined;
+ }
+
+ return JSON.parse(JSON.stringify(obj));
+}
+
+export default defineComponent({
+ props: {
+ modelValue: null,
+ formField: null,
+ templateFile: String,
+ },
+ emits: ['update:modelValue'],
+ inheritAttrs: false,
+ setup(props, context) {
+ const root = ref(null);
+
+ const $element = window.$(
+ `<div ng-include="'${props.templateFile}?cb=${Matomo.cacheBuster}'"></div>`,
+ );
+
+ const $timeout = Matomo.helper.getAngularDependency('$timeout');
+ const $rootScope = Matomo.helper.getAngularDependency('$rootScope');
+
+ const scope = $rootScope.$new();
+ scope.formField = {
+ ...clone(props.formField),
+ value: clone(props.modelValue),
+ };
+
+ scope.$watch('formField.value', (newValue, oldValue) => {
+ if (newValue !== oldValue
+ && newValue !== props.modelValue
+ ) {
+ context.emit('update:modelValue', clone(newValue));
+ }
+ });
+
+ watch(() => props.modelValue, (newValue) => {
+ $timeout(() => {
+ scope.formField.value = clone(newValue);
+ });
+ });
+
+ watch(() => props.formField, (newValue) => {
+ $timeout(() => {
+ const currentValue = scope.formField.value;
+ scope.formField = {
+ ...clone(newValue),
+ value: currentValue,
+ };
+ });
+ }, { deep: true });
+
+ // append on mount
+ onMounted(() => {
+ window.$(root.value).append($element);
+
+ Matomo.helper.compileAngularComponents($element, {
+ scope,
+ params: {
+ formField: {
+ ...clone(props.formField),
+ value: props.modelValue,
+ },
+ },
+ });
+ });
+
+ return {
+ root,
+ };
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue
new file mode 100644
index 0000000000..3e172d63d7
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckbox.vue
@@ -0,0 +1,45 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div class="checkbox">
+ <label>
+ <input
+ @change="onChange($event)"
+ v-bind="uiControlAttributes"
+ :value="1"
+ :checked="!!modelValue"
+ type="checkbox"
+ :id="name"
+ :name="name"
+ />
+
+ <span v-html="$sanitize(title)"/>
+ </label>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+
+export default defineComponent({
+ props: {
+ modelValue: Boolean,
+ uiControlAttributes: Object,
+ name: String,
+ title: String,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onChange(event: Event) {
+ if (this.modelValue !== event.target.checked) {
+ this.$emit('update:modelValue', event.target.checked);
+ }
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue
new file mode 100644
index 0000000000..3eb91ea865
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldCheckboxArray.vue
@@ -0,0 +1,77 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div>
+ <label class="fieldRadioTitle" v-show="title">{{ title }}</label>
+ <p
+ v-for="(checkboxModel, $index) in availableOptions"
+ :key="$index"
+ class="checkbox"
+ >
+ <label>
+ <input
+ :value="checkboxModel.key"
+ :checked="!!checkboxStates[$index]"
+ @change="onChange($index)"
+ v-bind="uiControlAttributes"
+ type="checkbox"
+ :id="`${name}${checkboxModel.key}`"
+ :name="checkboxModel.name"
+ />
+ <span>{{ checkboxModel.value }}</span>
+
+ <span class="form-description" v-show="checkboxModel.description">
+ {{ checkboxModel.description }}
+ </span>
+ </label>
+ </p>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+
+function getCheckboxStates(availableOptions, modelValue) {
+ return (availableOptions || []).map((o) => modelValue && modelValue.indexOf(o.key) !== -1);
+}
+
+export default defineComponent({
+ props: {
+ modelValue: Object,
+ name: String,
+ title: String,
+ availableOptions: Array,
+ uiControlAttributes: Object,
+ type: String,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ checkboxStates() {
+ return getCheckboxStates(this.availableOptions, this.modelValue);
+ },
+ },
+ mounted() {
+ window.Materialize.updateTextFields();
+ },
+ methods: {
+ onChange(changedIndex: number) {
+ const checkboxStates = [...this.checkboxStates];
+ checkboxStates[changedIndex] = !checkboxStates[changedIndex];
+
+ const newValue = [];
+ Object.values(this.availableOptions).forEach((option, index) => {
+ if (checkboxStates[index]) {
+ newValue.push(option.key);
+ }
+ });
+
+ this.$emit('update:modelValue', newValue);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.less b/plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.less
index 75a8c2428c..75a8c2428c 100644
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-expandable-select.less
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.less
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue
new file mode 100644
index 0000000000..c775e120f8
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldExpandableSelect.vue
@@ -0,0 +1,172 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div class="expandableSelector" v-focus-anywhere-but-here="{ blur: onBlur }">
+ <div @click="showSelect = !showSelect" class="select-wrapper">
+ <svg class="caret" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
+ <path d="M7 10l5 5 5-5z"></path><path d="M0 0h24v24H0z" fill="none"></path>
+ </svg>
+ <input type="text" class="select-dropdown" readonly="readonly" :value="modelValueText"/>
+ </div>
+
+ <div v-show="showSelect" class="expandableList z-depth-2">
+
+ <div class="searchContainer">
+ <input
+ type="text"
+ placeholder="Search"
+ v-model="searchTerm"
+ class="expandableSearch browser-default"
+ v-focus-if="showSelect"
+ />
+ </div>
+ <ul class="collection firstLevel">
+ <li
+ v-for="(options, index) in availableOptions"
+ class="collection-item"
+ v-show="options.values.filter(x => x.value.indexOf(searchTerm) !== -1).length"
+ :key="index"
+ >
+ <h4
+ class="expandableListCategory"
+ @click="onCategoryClicked(options)"
+ >
+ {{ options.group }}
+ <span
+ class="secondary-content"
+ :class='{
+ "icon-arrow-right": showCategory !== options.group,
+ "icon-arrow-bottom": showCategory === options.group
+ }'
+ />
+ </h4>
+
+ <ul v-show="showCategory === options.group || searchTerm" class="collection secondLevel">
+ <li
+ class="expandableListItem collection-item valign-wrapper"
+ v-for="children in options.values.filter(x => x.value.indexOf(searchTerm) !== -1)"
+ :key="children.key"
+ @click="onValueClicked(children)"
+ >
+ <span class="primary-content">{{ children.value }}</span>
+ <span
+ v-show="children.tooltip"
+ :title="children.tooltip"
+ class="secondary-content icon-help"
+ ></span>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { FocusAnywhereButHere, FocusIf } from 'CoreHome';
+
+interface SelectValueInfo {
+ key: unknown;
+}
+
+interface AvailableOptions {
+ group: string;
+ key: unknown;
+ value: unknown;
+ tooltip?: string;
+}
+
+export function getAvailableOptions(
+ availableValues: Record<string, unknown>,
+): { key: string, value: unknown }[] {
+ const flatValues = [];
+
+ const groups = {};
+ Object.values(availableValues).forEach((uncastedValue) => {
+ const value = uncastedValue as AvailableOptions;
+ const group = value.group || '';
+
+ if (!(group in groups) || !groups[group]) {
+ groups[group] = { values: [], group };
+ }
+
+ const formatted: Record<string, unknown> = { key: value.key, value: value.value };
+
+ if ('tooltip' in value && value.tooltip) {
+ formatted.tooltip = value.tooltip;
+ }
+
+ groups[group].values.push(formatted);
+ });
+
+ Object.values(groups).forEach((group) => {
+ if (group.values.length) {
+ flatValues.push(group);
+ }
+ });
+
+ return flatValues;
+}
+
+export default defineComponent({
+ props: {
+ modelValue: [Number, String],
+ availableOptions: Array,
+ title: String,
+ },
+ directives: {
+ FocusAnywhereButHere,
+ FocusIf,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ data() {
+ return {
+ showSelect: false,
+ searchTerm: '',
+ showCategory: '',
+ };
+ },
+ computed: {
+ modelValueText() {
+ if (this.title) {
+ return this.title;
+ }
+
+ const key = this.modelValue;
+
+ let keyItem: { key: string|number, value: unknown };
+ (this.availableOptions || []).some((option) => {
+ keyItem = option.values.find((item) => item.key === key);
+ return keyItem; // stop iterating if found
+ });
+
+ if (keyItem) {
+ return keyItem.value.toString();
+ }
+ return key;
+ },
+ },
+ methods: {
+ onBlur() {
+ this.showSelect = false;
+ },
+ onCategoryClicked(options: AvailableOptions) {
+ if (this.showCategory === options.group) {
+ this.showCategory = '';
+ } else {
+ this.showCategory = options.group;
+ }
+ },
+ onValueClicked(selectedValue: SelectValueInfo) {
+ this.$emit('update:modelValue', selectedValue.key);
+ this.showSelect = false;
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue
new file mode 100644
index 0000000000..0ea559cd2d
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldFieldArray.vue
@@ -0,0 +1,42 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div>
+ <label :for="name" v-html="$sanitize(title)"></label>
+
+ <FieldArray
+ :name="name"
+ :model-value="modelValue"
+ @update:modelValue="onValueUpdate($event)"
+ :field="uiControlAttributes.field"
+ />
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { FieldArray } from 'CoreHome';
+
+export default defineComponent({
+ components: {
+ FieldArray,
+ },
+ props: {
+ name: String,
+ title: String,
+ modelValue: null,
+ uiControlAttributes: Object,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onValueUpdate(newValue: unknown) {
+ this.$emit('update:modelValue', newValue);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue
new file mode 100644
index 0000000000..12faca52de
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldFile.vue
@@ -0,0 +1,56 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div>
+ <div class="btn">
+ <span :for="name" v-html="$sanitize(title)"></span>
+ <input ref="fileInput" :name="name" type="file" :id="name" @change="onChange($event)" />
+ </div>
+
+ <div class="file-path-wrapper">
+ <input class="file-path validate" :value="modelValue" type="text"/>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import {
+ defineComponent,
+ watch,
+ ref,
+} from 'vue';
+
+export default defineComponent({
+ props: {
+ name: String,
+ title: String,
+ modelValue: String,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ setup(props) {
+ const fileInput = ref<HTMLInputElement>(null);
+
+ watch(() => props.modelValue, (v) => {
+ if (v === '') {
+ const fileInputElement = fileInput.value;
+ fileInputElement.value = '';
+ }
+ });
+
+ return {
+ fileInput,
+ };
+ },
+ methods: {
+ onChange(event: Event) {
+ const file = (event.target as HTMLInputElement).files.item(0);
+ this.$emit('update:modelValue', file);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue
new file mode 100644
index 0000000000..38c5ee248a
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldHidden.vue
@@ -0,0 +1,35 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div>
+ <input
+ :type="uiControl"
+ :name="name"
+ :value="modelValue"
+ @change="onChange($event)"
+ />
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+
+export default defineComponent({
+ props: {
+ modelValue: null,
+ uiControl: String,
+ name: String,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onChange(event: Event) {
+ this.$emit('update:modelValue', (event.target as HTMLInputElement).value);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.less b/plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.less
index d887465f94..d887465f94 100644
--- a/plugins/CorePluginsAdmin/angularjs/form-field/field-multituple.less
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.less
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue
new file mode 100644
index 0000000000..8a9213befd
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldMultituple.vue
@@ -0,0 +1,45 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div class="fieldMultiTuple">
+ <label :for="name" v-html="$sanitize(title)"></label>
+ <MultiPairField
+ :name="name"
+ :model-value="modelValue"
+ @update:modelValue="onUpdateValue"
+ :field1="uiControlAttributes.field1"
+ :field2="uiControlAttributes.field2"
+ :field3="uiControlAttributes.field3"
+ :field4="uiControlAttributes.field4"
+ >
+ </MultiPairField>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { MultiPairField } from 'CoreHome';
+
+export default defineComponent({
+ props: {
+ name: String,
+ title: String,
+ modelValue: null,
+ uiControlAttributes: Object,
+ },
+ inheritAttrs: false,
+ components: {
+ MultiPairField,
+ },
+ emits: ['update:modelValue'],
+ methods: {
+ onUpdateValue(newValue: unknown) {
+ this.$emit('update:modelValue', newValue);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue
new file mode 100644
index 0000000000..9b209d298d
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldNumber.vue
@@ -0,0 +1,56 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <!-- note: @change is used in case the change event is programmatically triggered -->
+ <input
+ :class="`control_${uiControl}`"
+ :type="uiControl"
+ :id="name"
+ :name="name"
+ :value="(modelValue || '').toString()"
+ @keydown="onChange($event)"
+ @change="onChange($event)"
+ v-bind="uiControlAttributes"
+ />
+ <label :for="name" v-html="$sanitize(title)"></label>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { debounce } from 'CoreHome';
+
+export default defineComponent({
+ props: {
+ uiControl: String,
+ name: String,
+ title: String,
+ modelValue: [Number, String],
+ uiControlAttributes: Object,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ created() {
+ this.onChange = debounce(this.onChange.bind(this), 50);
+ },
+ methods: {
+ onChange(event: Event) {
+ const value = parseFloat((event.target as HTMLInputElement).value);
+ this.$emit('update:modelValue', value);
+ },
+ },
+ mounted() {
+ window.Materialize.updateTextFields();
+ },
+ watch: {
+ modelValue() {
+ setTimeout(() => {
+ window.Materialize.updateTextFields();
+ });
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue
new file mode 100644
index 0000000000..d48b62a283
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldRadio.vue
@@ -0,0 +1,60 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div>
+ <label class="fieldRadioTitle" v-show="title">{{ title }}</label>
+
+ <p
+ v-for="radioModel in (availableOptions || [])"
+ :key="radioModel.key"
+ class="radio"
+ >
+ <label>
+ <input
+ :value="radioModel.key"
+ @change="onChange($event)"
+ type="radio"
+ :id="`${name}${radioModel.key}`"
+ :name="name"
+ :disabled="radioModel.disabled || disabled"
+ v-bind="uiControlAttributes"
+ :checked="modelValue === radioModel.key || `${modelValue}` === radioModel.key"
+ />
+
+ <span>
+ {{ radioModel.value }}
+
+ <span class="form-description" v-show="radioModel.description">
+ {{ radioModel.description }}
+ </span>
+ </span>
+ </label>
+ </p>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+
+export default defineComponent({
+ props: {
+ title: String,
+ availableOptions: Array,
+ name: String,
+ disabled: Boolean,
+ uiControlAttributes: Object,
+ modelValue: [String, Number],
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ methods: {
+ onChange(event: Event) {
+ this.$emit('update:modelValue', (event.target as HTMLInputElement).value);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.less b/plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.less
new file mode 100644
index 0000000000..f65b95a637
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.less
@@ -0,0 +1,3 @@
+.matomo-field-select label {
+ top: -14px; // compensate for extra div added in vue
+} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue
new file mode 100644
index 0000000000..67eb4638e0
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldSelect.vue
@@ -0,0 +1,296 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div v-if="groupedOptions" class="matomo-field-select">
+ <select
+ ref="select"
+ class="grouped"
+ :multiple="multiple"
+ :name="name"
+ @change="onChange($event)"
+ v-bind="uiControlAttributes"
+ >
+ <optgroup
+ v-for="[group, options] in groupedOptions"
+ :key="group"
+ :label="group"
+ >
+ <option
+ v-for="option in options"
+ :key="option.key"
+ :value="`string:${option.key}`"
+ :selected="multiple
+ ? modelValue && modelValue.indexOf(option.key) !== -1
+ : modelValue === option.key"
+ >
+ {{ option.value }}
+ </option>
+ </optgroup>
+ </select>
+ <label :for="name" v-html="title"></label>
+ </div>
+ <div v-if="!groupedOptions && options" class="matomo-field-select">
+ <select
+ class="ungrouped"
+ ref="select"
+ :multiple="multiple"
+ :name="name"
+ @change="onChange($event)"
+ v-bind="uiControlAttributes"
+ >
+ <option
+ v-for="option in options"
+ :key="option.key"
+ :value="`string:${option.key}`"
+ :selected="multiple
+ ? modelValue && modelValue.indexOf(option.key) !== -1
+ : modelValue === option.key"
+ >
+ {{ option.value }}
+ </option>
+ </select>
+ <label :for="name" v-html="title"></label>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+
+interface OptionGroup {
+ group?: string;
+ key: string;
+ value: unknown;
+}
+
+function initMaterialSelect(
+ select: HTMLSelectElement,
+ modelValue: unknown[],
+ placeholder: string,
+ uiControlOptions = {},
+ multiple: boolean,
+) {
+ if (!select) {
+ return;
+ }
+
+ const $select = window.$(select);
+
+ // reset selected since materialize removes them
+ Array.from(select.options).forEach((opt) => {
+ if (multiple) {
+ opt.selected = modelValue
+ && modelValue.indexOf(opt.value.replace(/^string:/, '')) !== -1;
+ } else {
+ opt.selected = `string:${modelValue}` === opt.value;
+ }
+ });
+
+ $select.formSelect(uiControlOptions);
+
+ // add placeholder to input
+ if (placeholder) {
+ const $materialInput = $select.closest('.select-wrapper').find('input');
+ $materialInput.attr('placeholder', placeholder);
+ }
+}
+
+function hasGroupedValues(availableValues) {
+ if (Array.isArray(availableValues)
+ || !(typeof availableValues === 'object')
+ ) {
+ return false;
+ }
+
+ return Object.values(availableValues).some((v) => typeof v === 'object');
+}
+
+function hasOption(flatValues: OptionGroup[], key: string) {
+ return flatValues.some((f) => f.key === key);
+}
+
+export function getAvailableOptions(
+ givenAvailableValues?: Record<string, unknown>|null,
+ type: string,
+ uiControlAttributes: Record<string, unknown>,
+): OptionGroup[] {
+ if (!givenAvailableValues) {
+ return [];
+ }
+
+ let hasGroups = true;
+
+ let availableValues = givenAvailableValues as Record<string, Record<string|number, unknown>>;
+ if (!hasGroupedValues(availableValues)) {
+ availableValues = { '': givenAvailableValues };
+ hasGroups = false;
+ }
+
+ const flatValues = [];
+ Object.entries(availableValues).forEach(([group, values]) => {
+ Object.entries(values).forEach(([valueObjKey, value]) => {
+ if (typeof value === 'object' && typeof value.key !== 'undefined') {
+ flatValues.push(value);
+ return;
+ }
+
+ let key: number = valueObjKey as number;
+ if (type === 'integer' && typeof valueObjKey === 'string') {
+ key = parseInt(valueObjKey, 10);
+ }
+
+ flatValues.push({ group: hasGroups ? group : undefined, key, value });
+ });
+ });
+
+ // for selects w/ a placeholder, add an option to unset the select
+ if (uiControlAttributes.placeholder
+ && !hasOption(flatValues, '')
+ ) {
+ return [{ key: '', value: '' }, ...flatValues];
+ }
+
+ return flatValues;
+}
+
+function handleOldAngularJsValues(value: unknown) {
+ if (typeof value === 'string') {
+ return value.replace(/^string:/, '');
+ }
+ return value;
+}
+
+export default defineComponent({
+ props: {
+ modelValue: null,
+ multiple: Boolean,
+ name: String,
+ title: String,
+ availableOptions: Array,
+ uiControlAttributes: Object,
+ uiControlOptions: Object,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ options() {
+ // if modelValue is empty, but there is no empty value allowed in availableOptions,
+ // add one temporarily until something is set
+ if (this.availableOptions
+ && !hasOption(this.availableOptions, '')
+ && (typeof this.modelValue === 'undefined'
+ || this.modelValue === null
+ || this.modelValue === '')
+ ) {
+ return [
+ { key: '', value: this.modelValue, group: this.hasGroups ? '' : undefined },
+ ...this.availableOptions,
+ ];
+ }
+ return this.availableOptions;
+ },
+ hasGroups() {
+ const { availableOptions } = this;
+ return availableOptions && availableOptions[0] && typeof availableOptions[0].group !== 'undefined';
+ },
+ groupedOptions() {
+ if (!this.hasGroups) {
+ return null;
+ }
+
+ const { options } = this;
+ const groups = {};
+ options.forEach((entry) => {
+ groups[entry.group] = groups[entry.group] || [];
+ groups[entry.group].push(entry);
+ });
+
+ const result = Object.entries(groups);
+ result.sort((lhs, rhs) => {
+ if (lhs[0] < rhs[0]) {
+ return -1;
+ }
+
+ if (lhs[0] > rhs[0]) {
+ return 1;
+ }
+
+ return 0;
+ });
+ return result;
+ },
+ },
+ methods: {
+ onChange(event: Event) {
+ const element = event.target as HTMLSelectElement;
+
+ let newValue: string|number|(string|number)[];
+ if (this.multiple) {
+ newValue = Array.from(element.options).filter((e) => e.selected).map((e) => e.value);
+ newValue = newValue.map(handleOldAngularJsValues);
+ } else {
+ newValue = element.value;
+ newValue = handleOldAngularJsValues(newValue);
+ }
+
+ this.$emit('update:modelValue', newValue);
+ },
+ },
+ watch: {
+ modelValue(newVal) {
+ window.$(this.$refs.select).val(newVal);
+ setTimeout(() => {
+ initMaterialSelect(
+ this.$refs.select,
+ newVal,
+ this.uiControlAttributes.placeholder,
+ this.uiControlOptions,
+ this.multiple,
+ );
+ });
+ },
+ 'uiControlAttributes.disabled': {
+ handler(newVal, oldVal) {
+ setTimeout(() => {
+ if (newVal !== oldVal) {
+ initMaterialSelect(
+ this.$refs.select,
+ this.modelValue,
+ this.uiControlAttributes.placeholder,
+ this.uiControlOptions,
+ this.multiple,
+ );
+ }
+ });
+ },
+ },
+ availableOptions(newVal, oldVal) {
+ if (newVal !== oldVal) {
+ setTimeout(() => {
+ initMaterialSelect(
+ this.$refs.select,
+ this.modelValue,
+ this.uiControlAttributes.placeholder,
+ this.uiControlOptions,
+ this.multiple,
+ );
+ });
+ }
+ },
+ },
+ mounted() {
+ setTimeout(() => {
+ initMaterialSelect(
+ this.$refs.select,
+ this.modelValue,
+ this.uiControlAttributes.placeholder,
+ this.uiControlOptions,
+ this.multiple,
+ );
+ });
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue
new file mode 100644
index 0000000000..54441fdcda
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldSite.vue
@@ -0,0 +1,47 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div>
+ <label :for="name" class="siteSelectorLabel" v-html="$sanitize(title)"></label>
+ <div class="sites_autocomplete">
+ <SiteSelector
+ :model-value="modelValue"
+ @update:modelValue="onChange($event)"
+ :id="name"
+ :show-all-sites-item="uiControlAttributes.showAllSitesItem || false"
+ :switch-site-on-select="false"
+ :show-selected-site="true"
+ :only-sites-with-admin-access="uiControlAttributes.onlySitesWithAdminAccess || false"
+ v-bind="uiControlAttributes"
+ />
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { SiteSelector, SiteReference } from 'CoreHome';
+
+export default defineComponent({
+ props: {
+ name: String,
+ title: String,
+ modelValue: Object,
+ uiControlAttributes: Object,
+ },
+ inheritAttrs: false,
+ components: {
+ SiteSelector,
+ },
+ emits: ['update:modelValue'],
+ methods: {
+ onChange(newValue: SiteReference) {
+ this.$emit('update:modelValue', newValue);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue
new file mode 100644
index 0000000000..8074fb8ad7
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldText.vue
@@ -0,0 +1,71 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <!-- note: @change is used in case the change event is programmatically triggered -->
+ <input
+ :class="`control_${uiControl}`"
+ :type="uiControl"
+ :id="name"
+ :name="name"
+ :value="modelValueText"
+ @keydown="onKeydown($event)"
+ @change="onKeydown($event)"
+ v-bind="uiControlAttributes"
+ />
+ <label
+ :for="name"
+ v-html="$sanitize(title)"
+ />
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { debounce } from 'CoreHome';
+
+export default defineComponent({
+ props: {
+ title: String,
+ name: String,
+ uiControlAttributes: Object,
+ modelValue: [String, Number],
+ uiControl: String,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ modelValueText() {
+ if (typeof this.modelValue === 'undefined' || this.modelValue === null) {
+ return '';
+ }
+
+ return this.modelValue.toString();
+ },
+ },
+ created() {
+ // debounce because puppeteer types reeaally fast
+ this.onKeydown = debounce(this.onKeydown.bind(this), 50);
+ },
+ mounted() {
+ setTimeout(() => {
+ window.Materialize.updateTextFields();
+ });
+ },
+ watch: {
+ modelValue() {
+ setTimeout(() => {
+ window.Materialize.updateTextFields();
+ });
+ },
+ },
+ methods: {
+ onKeydown(event: Event) {
+ this.$emit('update:modelValue', (event.target as HTMLInputElement).value);
+ },
+ },
+});
+
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue
new file mode 100644
index 0000000000..0d4762d490
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextArray.vue
@@ -0,0 +1,60 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <!-- note: @change is used in case the change event is programmatically triggered -->
+ <div>
+ <label
+ :for="name"
+ v-html="$sanitize(title)"
+ />
+ <input
+ :class="`control_${ uiControl }`"
+ :type="uiControl"
+ :name="name"
+ @keydown="onKeydown($event)"
+ @change="onKeydown($event)"
+ :value="concattedValues"
+ v-bind="uiControlAttributes"
+ />
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { debounce } from 'CoreHome';
+
+export default defineComponent({
+ props: {
+ name: String,
+ title: String,
+ uiControl: String,
+ modelValue: Array,
+ uiControlAttributes: Object,
+ },
+ inheritAttrs: false,
+ computed: {
+ concattedValues() {
+ if (typeof this.modelValue === 'string') {
+ return this.modelValue;
+ }
+
+ return (this.modelValue || []).join(', ');
+ },
+ },
+ emits: ['update:modelValue'],
+ created() {
+ // debounce because puppeteer types reeaally fast
+ this.onKeydown = debounce(this.onKeydown.bind(this), 50);
+ },
+ methods: {
+ onKeydown(event: Event) {
+ const values = (event.target as HTMLInputElement).value.split(',').map((v) => v.trim());
+ this.$emit('update:modelValue', values);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue
new file mode 100644
index 0000000000..2529663f92
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextarea.vue
@@ -0,0 +1,58 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <!-- note: @change is used in case the change event is programmatically triggered -->
+ <textarea
+ :name="name"
+ v-bind="uiControlAttributes"
+ :id="name"
+ :value="modelValue"
+ @keydown="onKeydown($event)"
+ @change="onKeydown($event)"
+ class="materialize-textarea"
+ ref="textarea"
+ ></textarea>
+ <label :for="name" v-html="$sanitize(title)"></label>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { debounce } from 'CoreHome';
+
+export default defineComponent({
+ props: {
+ name: String,
+ uiControlAttributes: Object,
+ modelValue: String,
+ title: String,
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ created() {
+ this.onKeydown = debounce(this.onKeydown.bind(this), 50);
+ },
+ methods: {
+ onKeydown(event: Event) {
+ this.$emit('update:modelValue', (event.target as HTMLTextAreaElement).value);
+ },
+ },
+ watch: {
+ modelValue() {
+ setTimeout(() => {
+ window.Materialize.textareaAutoResize(this.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ },
+ },
+ mounted() {
+ setTimeout(() => {
+ window.Materialize.textareaAutoResize(this.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue
new file mode 100644
index 0000000000..46530c5531
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FieldTextareaArray.vue
@@ -0,0 +1,76 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <!-- note: @change is used in case the change event is programmatically triggered -->
+ <div>
+ <label
+ :for="name"
+ v-html="$sanitize(title)"
+ ></label>
+ <textarea
+ ref="textarea"
+ :name="name"
+ v-bind="uiControlAttributes"
+ :value="concattedValue"
+ @keydown="onKeydown($event)"
+ @change="onKeydown($event)"
+ class="materialize-textarea"
+ ></textarea>
+ </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { debounce } from 'CoreHome';
+
+const SEPARATOR = '\n';
+
+export default defineComponent({
+ props: {
+ name: String,
+ title: String,
+ uiControlAttributes: Object,
+ modelValue: [Array, String],
+ },
+ inheritAttrs: false,
+ emits: ['update:modelValue'],
+ computed: {
+ concattedValue() {
+ if (typeof this.modelValue === 'string') {
+ return this.modelValue;
+ }
+
+ return (this.modelValue || []).join(SEPARATOR);
+ },
+ },
+ created() {
+ this.onKeydown = debounce(this.onKeydown.bind(this), 50);
+ },
+ methods: {
+ onKeydown(event) {
+ const value = (event.target as HTMLTextAreaElement).value.split(SEPARATOR);
+ this.$emit('update:modelValue', value);
+ },
+ },
+ watch: {
+ modelValue(newVal, oldVal) {
+ if (newVal !== oldVal) {
+ setTimeout(() => {
+ window.Materialize.textareaAutoResize(this.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ }
+ },
+ },
+ mounted() {
+ setTimeout(() => {
+ window.Materialize.textareaAutoResize(this.$refs.textarea);
+ window.Materialize.updateTextFields();
+ });
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FormField.adapter.ts b/plugins/CorePluginsAdmin/vue/src/FormField/FormField.adapter.ts
new file mode 100644
index 0000000000..6f7b6708f8
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FormField.adapter.ts
@@ -0,0 +1,106 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { ITimeoutService } from 'angular';
+import {
+ createAngularJsAdapter,
+ transformAngularJsBoolAttr,
+ transformAngularJsIntAttr,
+} from 'CoreHome';
+import { shallowRef } from 'vue';
+import FormField from './FormField.vue';
+import FieldAngularJsTemplate from './FieldAngularJsTemplate.vue';
+import useExternalPluginComponent from '../../../../CoreHome/vue/src/useExternalPluginComponent';
+
+function transformVueComponentRef(value?: Record<string, string>) {
+ if (!value) {
+ return undefined;
+ }
+
+ const { plugin, name } = value;
+ if (!plugin || !name) {
+ throw new Error('Invalid component property given to piwik-field directive, must be '
+ + '{plugin: \'...\',name: \'...\'}');
+ }
+
+ return useExternalPluginComponent(plugin, name);
+}
+
+export default createAngularJsAdapter<[ITimeoutService]>({
+ component: FormField,
+ scope: {
+ modelValue: {
+ default(scope) {
+ const field = scope.piwikFormField;
+
+ // vue components expect object data as input, so we parse JSON data
+ // for angularjs directives that use JSON.
+ if (typeof field.value === 'string'
+ && field.value
+ && (field.type === 'array'
+ || field.uiControl === 'multituple'
+ || field.uiControl === 'field-array'
+ || field.uiControl === 'multiselect'
+ || field.uiControl === 'site')
+ ) {
+ field.value = JSON.parse(field.value);
+ }
+
+ if (field.uiControl === 'checkbox') {
+ return transformAngularJsBoolAttr(field.value);
+ }
+ return field.value;
+ },
+ },
+ piwikFormField: {
+ vue: 'formField',
+ angularJsBind: '=',
+ transform(value, vm, scope) {
+ return {
+ ...value,
+ condition: value.condition
+ ? (values: unknown[]) => scope.$eval(value.condition, values)
+ : value.condition,
+ disabled: transformAngularJsBoolAttr(value.disabled),
+ autocomplete: transformAngularJsBoolAttr(value.autocomplete),
+ autofocus: transformAngularJsBoolAttr(value.autofocus),
+ tabindex: transformAngularJsIntAttr(value.tabindex),
+ fullWidth: transformAngularJsBoolAttr(value.fullWidth),
+ maxlength: transformAngularJsIntAttr(value.maxlength),
+ required: transformAngularJsBoolAttr(value.required),
+ rows: transformAngularJsIntAttr(value.rows),
+ min: transformAngularJsIntAttr(value.min),
+ max: transformAngularJsIntAttr(value.max),
+ component: shallowRef(
+ value.templateFile ? FieldAngularJsTemplate : transformVueComponentRef(value.component),
+ ),
+ };
+ },
+ },
+ allSettings: {
+ angularJsBind: '=',
+ },
+ },
+ directiveName: 'piwikFormField',
+ events: {
+ 'update:modelValue': (newValue, vm, scope, element, attrs, controller, $timeout) => {
+ if (newValue !== scope.piwikFormField.value) {
+ $timeout(() => {
+ scope.piwikFormField.value = newValue;
+ });
+ }
+ },
+ },
+ $inject: ['$timeout'],
+ postCreate(vm, scope) {
+ scope.$watch('piwikFormField.value', (newVal, oldVal) => {
+ if (newVal !== oldVal) {
+ vm.modelValue = newVal;
+ }
+ });
+ },
+});
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue b/plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue
new file mode 100644
index 0000000000..2f26c9c307
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/FormField.vue
@@ -0,0 +1,328 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div
+ class="form-group row"
+ v-show="showField"
+ >
+ <h3
+ v-if="formField.introduction"
+ class="col s12"
+ >
+ {{ formField.introduction }}
+ </h3>
+ <div
+ class="col s12"
+ :class="{
+ 'input-field': formField.uiControl !== 'checkbox' && formField.uiControl !== 'radio',
+ 'file-field': formField.uiControl === 'file',
+ 'm6': !formField.fullWidth,
+ }"
+ >
+ <component
+ :is="childComponent"
+ v-bind="{
+ formField,
+ ...formField,
+ modelValue: processedModelValue,
+ availableOptions,
+ ...extraChildComponentParams,
+ }"
+ @update:modelValue="onChange($event)"
+ >
+ </component>
+ </div>
+ <div
+ class="col s12"
+ :class="{ 'm6': !formField.fullWidth }"
+ >
+ <div
+ v-if="showFormHelp"
+ class="form-help"
+ >
+ <div
+ v-show="formField.description"
+ class="form-description"
+ >
+ {{ formField.description }}
+ </div>
+ <span
+ class="inline-help"
+ ref="inlineHelp"
+ v-if="formField.inlineHelp"
+ />
+ <span v-show="showDefaultValue">
+ <br />
+ {{ translate('General_Default') }}:
+ <span>{{ defaultValuePrettyTruncated }}</span>
+ </span>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script lang="ts">
+import {
+ defineComponent,
+ onMounted,
+ ref,
+ watch,
+} from 'vue';
+import FieldCheckbox from './FieldCheckbox.vue';
+import FieldCheckboxArray from './FieldCheckboxArray.vue';
+import FieldExpandableSelect, {
+ getAvailableOptions as getExpandableSelectAvailableOptions,
+} from './FieldExpandableSelect.vue';
+import FieldFieldArray from './FieldFieldArray.vue';
+import FieldFile from './FieldFile.vue';
+import FieldHidden from './FieldHidden.vue';
+import FieldMultituple from './FieldMultituple.vue';
+import FieldNumber from './FieldNumber.vue';
+import FieldRadio from './FieldRadio.vue';
+import FieldSelect, {
+ getAvailableOptions as getSelectAvailableOptions,
+} from './FieldSelect.vue';
+import FieldSite from './FieldSite.vue';
+import FieldText from './FieldText.vue';
+import FieldTextArray from './FieldTextArray.vue';
+import FieldTextarea from './FieldTextarea.vue';
+import FieldTextareaArray from './FieldTextareaArray.vue';
+import { processCheckboxAndRadioAvailableValues } from './utilities';
+
+const TEXT_CONTROLS = ['password', 'url', 'search', 'email'];
+const CONTROLS_SUPPORTING_ARRAY = ['textarea', 'checkbox', 'text'];
+const CONTROL_TO_COMPONENT_MAP = {
+ checkbox: 'FieldCheckbox',
+ 'expandable-select': 'FieldExpandableSelect',
+ 'field-array': 'FieldFieldArray',
+ file: 'FieldFile',
+ hidden: 'FieldHidden',
+ multiselect: 'FieldSelect',
+ multituple: 'FieldMultituple',
+ number: 'FieldNumber',
+ radio: 'FieldRadio',
+ select: 'FieldSelect',
+ site: 'FieldSite',
+ text: 'FieldText',
+ textarea: 'FieldTextarea',
+};
+
+const CONTROL_TO_AVAILABLE_OPTION_PROCESSOR = {
+ FieldSelect: getSelectAvailableOptions,
+ FieldCheckboxArray: processCheckboxAndRadioAvailableValues,
+ FieldRadio: processCheckboxAndRadioAvailableValues,
+ FieldExpandableSelect: getExpandableSelectAvailableOptions,
+};
+
+interface Setting {
+ name: string;
+ value: unknown;
+}
+
+export default defineComponent({
+ props: {
+ modelValue: null,
+ formField: {
+ type: Object,
+ required: true,
+ },
+ allSettings: [Object, Array],
+ },
+ emits: ['update:modelValue'],
+ components: {
+ FieldCheckbox,
+ FieldCheckboxArray,
+ FieldExpandableSelect,
+ FieldFieldArray,
+ FieldFile,
+ FieldHidden,
+ FieldMultituple,
+ FieldNumber,
+ FieldRadio,
+ FieldSelect,
+ FieldSite,
+ FieldText,
+ FieldTextArray,
+ FieldTextarea,
+ FieldTextareaArray,
+ },
+ setup(props) {
+ const inlineHelpNode = ref(null);
+
+ const setInlineHelp = (newVal) => {
+ let toAppend: HTMLElement|string;
+
+ if (!newVal) {
+ return;
+ }
+
+ if (typeof newVal === 'string' && newVal && newVal.indexOf('#') === 0) {
+ toAppend = window.$(newVal);
+ } else {
+ toAppend = window.vueSanitize(newVal);
+ }
+
+ window.$(inlineHelpNode.value).html('').append(toAppend);
+ };
+
+ watch(() => props.formField.inlineHelp, setInlineHelp);
+
+ onMounted(() => {
+ setInlineHelp(props.formField.inlineHelp);
+ });
+
+ return {
+ inlineHelp: inlineHelpNode,
+ };
+ },
+ computed: {
+ childComponent() {
+ if (this.formField.component) {
+ return this.formField.component;
+ }
+
+ const { uiControl } = this.formField;
+
+ let control = CONTROL_TO_COMPONENT_MAP[uiControl];
+ if (TEXT_CONTROLS.indexOf(uiControl) !== -1) {
+ control = 'FieldText'; // we use same template for text and password both
+ }
+
+ if (this.formField.type === 'array' && CONTROLS_SUPPORTING_ARRAY.indexOf(uiControl) !== -1) {
+ control = `${control}Array`;
+ }
+
+ return control;
+ },
+ extraChildComponentParams() {
+ if (this.formField.uiControl === 'multiselect') {
+ return { multiple: true };
+ }
+ return {};
+ },
+ showFormHelp() {
+ return this.formField.description
+ || this.formField.inlineHelp
+ || this.showDefaultValue;
+ },
+ showDefaultValue() {
+ return this.defaultValuePretty
+ && this.formField.uiControl !== 'checkbox'
+ && this.formField.uiControl !== 'radio';
+ },
+ showField() {
+ if (!this.formField.condition
+ || !this.allSettings
+ || !Object.values(this.allSettings).length
+ ) {
+ return true;
+ }
+
+ const values = {};
+ Object.values(this.allSettings as Record<string, Setting>).forEach((setting) => {
+ if (setting.value === '0') {
+ values[setting.name] = 0;
+ } else {
+ values[setting.name] = setting.value;
+ }
+ });
+
+ return this.formField.condition(values);
+ },
+ processedModelValue() {
+ const field = this.formField;
+
+ // convert boolean values since angular 1.6 uses strict equals when determining if a model
+ // value matches the ng-value of an input.
+ if (field.type === 'boolean') {
+ const valueIsTruthy = this.modelValue && this.modelValue > 0 && this.modelValue !== '0';
+
+ // for checkboxes, the value MUST be either true or false
+ if (field.uiControl === 'checkbox') {
+ return valueIsTruthy;
+ }
+
+ if (field.uiControl === 'radio') {
+ return valueIsTruthy ? '1' : '0';
+ }
+ }
+
+ return this.modelValue;
+ },
+ defaultValue() {
+ let { defaultValue } = this.formField;
+ if (Array.isArray(defaultValue)) {
+ defaultValue = defaultValue.join(',');
+ }
+ return defaultValue;
+ },
+ availableOptions() {
+ const { childComponent, formField } = this;
+
+ if (!formField.availableValues
+ || !CONTROL_TO_AVAILABLE_OPTION_PROCESSOR[childComponent]
+ ) {
+ return null;
+ }
+
+ return CONTROL_TO_AVAILABLE_OPTION_PROCESSOR[childComponent](
+ formField.availableValues,
+ formField.type,
+ formField.uiControlAttributes,
+ );
+ },
+ defaultValuePretty() {
+ let { defaultValue } = this.formField;
+ const { availableOptions } = this;
+
+ if (typeof defaultValue === 'string' && defaultValue) {
+ // eg default value for multi tuple
+ let defaultParsed = null;
+ try {
+ defaultParsed = JSON.parse(defaultValue);
+ } catch (e) {
+ // invalid JSON
+ }
+
+ if (defaultParsed !== null && typeof defaultParsed === 'object') {
+ return '';
+ }
+ }
+
+ if (!Array.isArray(availableOptions)) {
+ if (Array.isArray(defaultValue)) {
+ return '';
+ }
+
+ return defaultValue ? defaultValue.toString() : '';
+ }
+
+ const prettyValues = [];
+
+ if (!Array.isArray(defaultValue)) {
+ defaultValue = [defaultValue];
+ }
+
+ (availableOptions || []).forEach((value) => {
+ if (defaultValue.indexOf(value.key) !== -1 && typeof value.value !== 'undefined') {
+ prettyValues.push(value.value);
+ }
+ });
+
+ return prettyValues.join(', ');
+ },
+ defaultValuePrettyTruncated() {
+ return this.defaultValuePretty.substring(0, 50);
+ },
+ },
+ methods: {
+ onChange(newValue: unknown) {
+ this.$emit('update:modelValue', newValue);
+ },
+ },
+});
+</script>
diff --git a/plugins/CorePluginsAdmin/vue/src/FormField/utilities.ts b/plugins/CorePluginsAdmin/vue/src/FormField/utilities.ts
new file mode 100644
index 0000000000..eeb50f347e
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/FormField/utilities.ts
@@ -0,0 +1,32 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+export function processCheckboxAndRadioAvailableValues(
+ availableValues: Record<string, unknown>,
+ type: string,
+): { key: string, value: unknown }[] {
+ if (!availableValues) {
+ return [];
+ }
+
+ const flatValues = [];
+ Object.entries(availableValues).forEach(([valueObjKey, value]) => {
+ if (typeof value === 'object' && typeof value.key !== 'undefined') {
+ flatValues.push(value);
+ return;
+ }
+
+ let key: number|string = valueObjKey;
+ if (type === 'integer' && typeof valueObjKey === 'string') {
+ key = parseInt(key, 10);
+ }
+
+ flatValues.push({ key, value });
+ });
+
+ return flatValues;
+}
diff --git a/plugins/CorePluginsAdmin/vue/src/index.ts b/plugins/CorePluginsAdmin/vue/src/index.ts
new file mode 100644
index 0000000000..47621721d9
--- /dev/null
+++ b/plugins/CorePluginsAdmin/vue/src/index.ts
@@ -0,0 +1,11 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/
+import './FormField/FormField.adapter';
+import './Field/Field.adapter';
+
+export { default as FormField } from './FormField/FormField.vue';
+export { default as Field } from './Field/Field.vue';
diff --git a/plugins/CoreVue/polyfills/babel.config.js b/plugins/CoreVue/polyfills/babel.config.js
index d3e4967596..3b8e56f4b1 100644
--- a/plugins/CoreVue/polyfills/babel.config.js
+++ b/plugins/CoreVue/polyfills/babel.config.js
@@ -7,6 +7,7 @@ module.exports = {
'es.object.assign',
'es.promise.finally',
'es.object.entries',
+ 'es.string.trim',
// TODO: what else do we want included?
],
diff --git a/plugins/CoreVue/polyfills/dist/MatomoPolyfills.js b/plugins/CoreVue/polyfills/dist/MatomoPolyfills.js
index f057527a1f..3c2fb99476 100644
--- a/plugins/CoreVue/polyfills/dist/MatomoPolyfills.js
+++ b/plugins/CoreVue/polyfills/dist/MatomoPolyfills.js
@@ -984,6 +984,28 @@ eval("var anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_
/***/ }),
+/***/ "./node_modules/core-js/internals/string-trim-forced.js":
+/*!**************************************************************!*\
+ !*** ./node_modules/core-js/internals/string-trim-forced.js ***!
+ \**************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("var fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar whitespaces = __webpack_require__(/*! ../internals/whitespaces */ \"./node_modules/core-js/internals/whitespaces.js\");\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n\n\n//# sourceURL=webpack:///node_modules/core-js/internals/string-trim-forced.js");
+
+/***/ }),
+
+/***/ "./node_modules/core-js/internals/string-trim.js":
+/*!*******************************************************!*\
+ !*** ./node_modules/core-js/internals/string-trim.js ***!
+ \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\nvar toString = __webpack_require__(/*! ../internals/to-string */ \"./node_modules/core-js/internals/to-string.js\");\nvar whitespaces = __webpack_require__(/*! ../internals/whitespaces */ \"./node_modules/core-js/internals/whitespaces.js\");\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n\n\n//# sourceURL=webpack:///node_modules/core-js/internals/string-trim.js");
+
+/***/ }),
+
/***/ "./node_modules/core-js/internals/task.js":
/*!************************************************!*\
!*** ./node_modules/core-js/internals/task.js ***!
@@ -1083,6 +1105,17 @@ eval("var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symb
/***/ }),
+/***/ "./node_modules/core-js/internals/to-string.js":
+/*!*****************************************************!*\
+ !*** ./node_modules/core-js/internals/to-string.js ***!
+ \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+eval("var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \"./node_modules/core-js/internals/is-symbol.js\");\n\nmodule.exports = function (argument) {\n if (isSymbol(argument)) throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n\n\n//# sourceURL=webpack:///node_modules/core-js/internals/to-string.js");
+
+/***/ }),
+
/***/ "./node_modules/core-js/internals/uid.js":
/*!***********************************************!*\
!*** ./node_modules/core-js/internals/uid.js ***!
@@ -1116,6 +1149,17 @@ eval("var global = __webpack_require__(/*! ../internals/global */ \"./node_modul
/***/ }),
+/***/ "./node_modules/core-js/internals/whitespaces.js":
+/*!*******************************************************!*\
+ !*** ./node_modules/core-js/internals/whitespaces.js ***!
+ \*******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n//# sourceURL=webpack:///node_modules/core-js/internals/whitespaces.js");
+
+/***/ }),
+
/***/ "./node_modules/core-js/modules/es.array.iterator.js":
/*!***********************************************************!*\
!*** ./node_modules/core-js/modules/es.array.iterator.js ***!
@@ -1174,6 +1218,18 @@ eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/
/***/ }),
+/***/ "./node_modules/core-js/modules/es.string.trim.js":
+/*!********************************************************!*\
+ !*** ./node_modules/core-js/modules/es.string.trim.js ***!
+ \********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar $trim = __webpack_require__(/*! ../internals/string-trim */ \"./node_modules/core-js/internals/string-trim.js\").trim;\nvar forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ \"./node_modules/core-js/internals/string-trim-forced.js\");\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n\n\n//# sourceURL=webpack:///node_modules/core-js/modules/es.string.trim.js");
+
+/***/ }),
+
/***/ "./node_modules/dompurify/dist/purify.js":
/*!***********************************************!*\
!*** ./node_modules/dompurify/dist/purify.js ***!
@@ -1205,7 +1261,19 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) *
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.promise.js */ \"./node_modules/core-js/modules/es.promise.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.object.assign.js */ \"./node_modules/core-js/modules/es.object.assign.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.promise.finally.js */ \"./node_modules/core-js/modules/es.promise.finally.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.object.entries.js */ \"./node_modules/core-js/modules/es.object.entries.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! dompurify */ \"./node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n\n\n\n\n\n\n/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\n/* eslint-disable */\n// this is a dummy file used to compile core-js polyfills so we don't have to include them in any\n// other file.\n\n\nwindow['tslib'] = tslib__WEBPACK_IMPORTED_MODULE_6__;\nwindow.vueSanitize = dompurify__WEBPACK_IMPORTED_MODULE_5___default.a.sanitize.bind(dompurify__WEBPACK_IMPORTED_MODULE_5___default.a);\n\n//# sourceURL=webpack:///plugins/CoreVue/polyfills/src/index.ts");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.promise.js */ \"./node_modules/core-js/modules/es.promise.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.object.assign.js */ \"./node_modules/core-js/modules/es.object.assign.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.promise.finally.js */ \"./node_modules/core-js/modules/es.promise.finally.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.object.entries.js */ \"./node_modules/core-js/modules/es.object.entries.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./node_modules/core-js/modules/es.string.trim.js */ \"./node_modules/core-js/modules/es.string.trim.js\");\n/* harmony import */ var _home_dizzy_Projects_matomo_node_modules_core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_home_dizzy_Projects_matomo_node_modules_core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! dompurify */ \"./node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _jqueryNativeEventTrigger__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./jqueryNativeEventTrigger */ \"./plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts\");\n/* harmony import */ var _jqueryNativeEventTrigger__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_jqueryNativeEventTrigger__WEBPACK_IMPORTED_MODULE_8__);\n\n\n\n\n\n\n\n/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\n/* eslint-disable */\n// this is a dummy file used to compile core-js polyfills so we don't have to include them in any\n// other file.\n\n\nwindow.tslib = tslib__WEBPACK_IMPORTED_MODULE_7__;\nwindow.vueSanitize = dompurify__WEBPACK_IMPORTED_MODULE_6___default.a.sanitize.bind(dompurify__WEBPACK_IMPORTED_MODULE_6___default.a);\n\n\n//# sourceURL=webpack:///plugins/CoreVue/polyfills/src/index.ts");
+
+/***/ }),
+
+/***/ "./plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts":
+/*!*******************************************************************!*\
+ !*** ./plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts ***!
+ \*******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\n/*!\n * Matomo - free/libre analytics platform\n *\n * @link https://matomo.org\n * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later\n */\n\nvar oldTrigger = window.$.fn.trigger;\n\nfunction triggerWithNativeEventDispatch(jqEventOrType, data) {\n function nativeDispatch(element) {\n var type = jqEventOrType.type || jqEventOrType;\n var onEventAttributeName = \"on\".concat(type);\n\n if (element[onEventAttributeName] || element[type] instanceof Function) {\n // if a on... (eg, onchange) handler is specified, it will be triggered by jquery.\n // it will also be triggered by addEventListener, and we don't want that so just\n // assume there is no addEventListener event.\n return;\n } // eslint-disable-next-line\n\n\n if ((window.$._data(element, 'events') || {})[type] && window.$._data(element, 'handle')) {\n // there is an event handler in jquery private data, assume this was handled.\n return;\n }\n\n if (element.dispatchEvent) {\n var event = new Event(type, {\n // do not rely on browser bubbling so we can keep checking for the on... attribute\n bubbles: false,\n cancelable: true\n });\n element.dispatchEvent(event);\n }\n\n var parent = element.parentElement;\n\n if (parent) {\n nativeDispatch(parent);\n }\n }\n\n var result = oldTrigger.call(this, jqEventOrType, data);\n this.each(function onEach() {\n nativeDispatch(this);\n });\n return result;\n}\n\nwindow.$.fn.trigger = triggerWithNativeEventDispatch;\n\n//# sourceURL=webpack:///plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts");
/***/ })
diff --git a/plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js b/plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js
index b508fee647..77d72e379c 100644
--- a/plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js
+++ b/plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js
@@ -1,10 +1,16 @@
-(function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s="452c")})({"00ee":function(t,e,n){var r=n("b622"),o=r("toStringTag"),i={};i[o]="z",t.exports="[object z]"===String(i)},"0366":function(t,e,n){var r=n("1c0b");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},"06cf":function(t,e,n){var r=n("83ab"),o=n("d1e7"),i=n("5c6c"),a=n("fc6a"),c=n("a04b"),u=n("5135"),f=n("0cfb"),l=Object.getOwnPropertyDescriptor;e.f=r?l:function(t,e){if(t=a(t),e=c(e),f)try{return l(t,e)}catch(n){}if(u(t,e))return i(!o.f.call(t,e),t[e])}},"0cfb":function(t,e,n){var r=n("83ab"),o=n("d039"),i=n("cc12");t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"19aa":function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},"1be4":function(t,e,n){var r=n("d066");t.exports=r("document","documentElement")},"1c0b":function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(t,e,n){var r=n("b622"),o=r("iterator"),i=!1;try{var a=0,c={next:function(){return{done:!!a++}},return:function(){i=!0}};c[o]=function(){return this},Array.from(c,(function(){throw 2}))}catch(u){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var r={};r[o]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(u){}return n}},"1cdc":function(t,e,n){var r=n("342f");t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},"1d80":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},2266:function(t,e,n){var r=n("825a"),o=n("e95a"),i=n("50c4"),a=n("0366"),c=n("35a1"),u=n("2a62"),f=function(t,e){this.stopped=t,this.result=e};t.exports=function(t,e,n){var l,s,p,d,m,v,y,h=n&&n.that,b=!(!n||!n.AS_ENTRIES),g=!(!n||!n.IS_ITERATOR),w=!(!n||!n.INTERRUPTED),x=a(e,h,1+b+w),O=function(t){return l&&u(l),new f(!0,t)},_=function(t){return b?(r(t),w?x(t[0],t[1],O):x(t[0],t[1])):w?x(t,O):x(t)};if(g)l=t;else{if(s=c(t),"function"!=typeof s)throw TypeError("Target is not iterable");if(o(s)){for(p=0,d=i(t.length);d>p;p++)if(m=_(t[p]),m&&m instanceof f)return m;return new f(!1)}l=s.call(t)}v=l.next;while(!(y=v.call(l)).done){try{m=_(y.value)}catch(S){throw u(l),S}if("object"==typeof m&&m&&m instanceof f)return m}return new f(!1)}},"23cb":function(t,e,n){var r=n("a691"),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},"23e7":function(t,e,n){var r=n("da84"),o=n("06cf").f,i=n("9112"),a=n("6eeb"),c=n("ce4e"),u=n("e893"),f=n("94ca");t.exports=function(t,e){var n,l,s,p,d,m,v=t.target,y=t.global,h=t.stat;if(l=y?r:h?r[v]||c(v,{}):(r[v]||{}).prototype,l)for(s in e){if(d=e[s],t.noTargetGet?(m=o(l,s),p=m&&m.value):p=l[s],n=f(y?s:v+(h?".":"#")+s,t.forced),!n&&void 0!==p){if(typeof d===typeof p)continue;u(d,p)}(t.sham||p&&p.sham)&&i(d,"sham",!0),a(l,s,d,t)}}},"241c":function(t,e,n){var r=n("ca84"),o=n("7839"),i=o.concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},"24aa":function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},2626:function(t,e,n){"use strict";var r=n("d066"),o=n("9bf2"),i=n("b622"),a=n("83ab"),c=i("species");t.exports=function(t){var e=r(t),n=o.f;a&&e&&!e[c]&&n(e,c,{configurable:!0,get:function(){return this}})}},"2a62":function(t,e,n){var r=n("825a");t.exports=function(t){var e=t["return"];if(void 0!==e)return r(e.call(t)).value}},"2cf4":function(t,e,n){var r,o,i,a,c=n("da84"),u=n("d039"),f=n("0366"),l=n("1be4"),s=n("cc12"),p=n("1cdc"),d=n("605d"),m=c.setImmediate,v=c.clearImmediate,y=c.process,h=c.MessageChannel,b=c.Dispatch,g=0,w={},x="onreadystatechange";try{r=c.location}catch(A){}var O=function(t){if(w.hasOwnProperty(t)){var e=w[t];delete w[t],e()}},_=function(t){return function(){O(t)}},S=function(t){O(t.data)},T=function(t){c.postMessage(String(t),r.protocol+"//"+r.host)};m&&v||(m=function(t){var e=[],n=arguments.length,r=1;while(n>r)e.push(arguments[r++]);return w[++g]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},o(g),g},v=function(t){delete w[t]},d?o=function(t){y.nextTick(_(t))}:b&&b.now?o=function(t){b.now(_(t))}:h&&!p?(i=new h,a=i.port2,i.port1.onmessage=S,o=f(a.postMessage,a,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts&&r&&"file:"!==r.protocol&&!u(T)?(o=T,c.addEventListener("message",S,!1)):o=x in s("script")?function(t){l.appendChild(s("script"))[x]=function(){l.removeChild(this),O(t)}}:function(t){setTimeout(_(t),0)}),t.exports={set:m,clear:v}},"2d00":function(t,e,n){var r,o,i=n("da84"),a=n("342f"),c=i.process,u=i.Deno,f=c&&c.versions||u&&u.version,l=f&&f.v8;l?(r=l.split("."),o=r[0]<4?1:r[0]+r[1]):a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(o=r[1]))),t.exports=o&&+o},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},"35a1":function(t,e,n){var r=n("f5df"),o=n("3f8c"),i=n("b622"),a=i("iterator");t.exports=function(t){if(void 0!=t)return t[a]||t["@@iterator"]||o[r(t)]}},"37e8":function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("825a"),a=n("df75");t.exports=r?Object.defineProperties:function(t,e){i(t);var n,r=a(e),c=r.length,u=0;while(c>u)o.f(t,n=r[u++],e[n]);return t}},"3bbe":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},"3f8c":function(t,e){t.exports={}},"44ad":function(t,e,n){var r=n("d039"),o=n("c6b6"),i="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},"44d2":function(t,e,n){var r=n("b622"),o=n("7c73"),i=n("9bf2"),a=r("unscopables"),c=Array.prototype;void 0==c[a]&&i.f(c,a,{configurable:!0,value:o(null)}),t.exports=function(t){c[a][t]=!0}},"44de":function(t,e,n){var r=n("da84");t.exports=function(t,e){var n=r.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}},"452c":function(t,e,n){"use strict";n.r(e);var r={};n.r(r),n.d(r,"__extends",(function(){return c})),n.d(r,"__assign",(function(){return u})),n.d(r,"__rest",(function(){return f})),n.d(r,"__decorate",(function(){return l})),n.d(r,"__param",(function(){return s})),n.d(r,"__metadata",(function(){return p})),n.d(r,"__awaiter",(function(){return d})),n.d(r,"__generator",(function(){return m})),n.d(r,"__createBinding",(function(){return v})),n.d(r,"__exportStar",(function(){return y})),n.d(r,"__values",(function(){return h})),n.d(r,"__read",(function(){return b})),n.d(r,"__spread",(function(){return g})),n.d(r,"__spreadArrays",(function(){return w})),n.d(r,"__await",(function(){return x})),n.d(r,"__asyncGenerator",(function(){return O})),n.d(r,"__asyncDelegator",(function(){return _})),n.d(r,"__asyncValues",(function(){return S})),n.d(r,"__makeTemplateObject",(function(){return T})),n.d(r,"__importStar",(function(){return A})),n.d(r,"__importDefault",(function(){return j})),n.d(r,"__classPrivateFieldGet",(function(){return E})),n.d(r,"__classPrivateFieldSet",(function(){return k}));n("e260"),n("e6cf"),n("cca6"),n("a79d"),n("4fad");var o=n("c0c4"),i=n.n(o),a=function(t,e){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},a(t,e)};function c(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var u=function(){return u=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n],e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},u.apply(this,arguments)};function f(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}function l(t,e,n,r){var o,i=arguments.length,a=i<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)a=Reflect.decorate(t,e,n,r);else for(var c=t.length-1;c>=0;c--)(o=t[c])&&(a=(i<3?o(a):i>3?o(e,n,a):o(e,n))||a);return i>3&&a&&Object.defineProperty(e,n,a),a}function s(t,e){return function(n,r){e(n,r,t)}}function p(t,e){if("object"===typeof Reflect&&"function"===typeof Reflect.metadata)return Reflect.metadata(t,e)}function d(t,e,n,r){function o(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,i){function a(t){try{u(r.next(t))}catch(e){i(e)}}function c(t){try{u(r["throw"](t))}catch(e){i(e)}}function u(t){t.done?n(t.value):o(t.value).then(a,c)}u((r=r.apply(t,e||[])).next())}))}function m(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"===typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(t){return function(e){return u([t,e])}}function u(i){if(n)throw new TypeError("Generator is already executing.");while(a)try{if(n=1,r&&(o=2&i[0]?r["return"]:i[0]?r["throw"]||((o=r["return"])&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(o=a.trys,!(o=o.length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(c){i=[6,c],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}function v(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}function y(t,e){for(var n in t)"default"===n||e.hasOwnProperty(n)||(e[n]=t[n])}function h(t){var e="function"===typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"===typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function b(t,e){var n="function"===typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{while((void 0===e||e-- >0)&&!(r=i.next()).done)a.push(r.value)}catch(c){o={error:c}}finally{try{r&&!r.done&&(n=i["return"])&&n.call(i)}finally{if(o)throw o.error}}return a}function g(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(b(arguments[e]));return t}function w(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var r=Array(t),o=0;for(e=0;e<n;e++)for(var i=arguments[e],a=0,c=i.length;a<c;a++,o++)r[o]=i[a];return r}function x(t){return this instanceof x?(this.v=t,this):new x(t)}function O(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(t,e||[]),i=[];return r={},a("next"),a("throw"),a("return"),r[Symbol.asyncIterator]=function(){return this},r;function a(t){o[t]&&(r[t]=function(e){return new Promise((function(n,r){i.push([t,e,n,r])>1||c(t,e)}))})}function c(t,e){try{u(o[t](e))}catch(n){s(i[0][3],n)}}function u(t){t.value instanceof x?Promise.resolve(t.value.v).then(f,l):s(i[0][2],t)}function f(t){c("next",t)}function l(t){c("throw",t)}function s(t,e){t(e),i.shift(),i.length&&c(i[0][0],i[0][1])}}function _(t){var e,n;return e={},r("next"),r("throw",(function(t){throw t})),r("return"),e[Symbol.iterator]=function(){return this},e;function r(r,o){e[r]=t[r]?function(e){return(n=!n)?{value:x(t[r](e)),done:"return"===r}:o?o(e):e}:o}}function S(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t="function"===typeof h?h(t):t[Symbol.iterator](),e={},r("next"),r("throw"),r("return"),e[Symbol.asyncIterator]=function(){return this},e);function r(n){e[n]=t[n]&&function(e){return new Promise((function(r,i){e=t[n](e),o(r,i,e.done,e.value)}))}}function o(t,e,n,r){Promise.resolve(r).then((function(e){t({value:e,done:n})}),e)}}function T(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}function A(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function j(t){return t&&t.__esModule?t:{default:t}}function E(t,e){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return e.get(t)}function k(t,e,n){if(!e.has(t))throw new TypeError("attempted to set private field on non-instance");return e.set(t,n),n}
+(function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s="452c")})({"00ee":function(t,e,n){var r=n("b622"),o=r("toStringTag"),i={};i[o]="z",t.exports="[object z]"===String(i)},"0366":function(t,e,n){var r=n("1c0b");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},"06cf":function(t,e,n){var r=n("83ab"),o=n("d1e7"),i=n("5c6c"),a=n("fc6a"),c=n("a04b"),u=n("5135"),f=n("0cfb"),s=Object.getOwnPropertyDescriptor;e.f=r?s:function(t,e){if(t=a(t),e=c(e),f)try{return s(t,e)}catch(n){}if(u(t,e))return i(!o.f.call(t,e),t[e])}},"0cfb":function(t,e,n){var r=n("83ab"),o=n("d039"),i=n("cc12");t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"19aa":function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},"1be4":function(t,e,n){var r=n("d066");t.exports=r("document","documentElement")},"1c0b":function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(t,e,n){var r=n("b622"),o=r("iterator"),i=!1;try{var a=0,c={next:function(){return{done:!!a++}},return:function(){i=!0}};c[o]=function(){return this},Array.from(c,(function(){throw 2}))}catch(u){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var r={};r[o]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(u){}return n}},"1cdc":function(t,e,n){var r=n("342f");t.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},"1d80":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},2266:function(t,e,n){var r=n("825a"),o=n("e95a"),i=n("50c4"),a=n("0366"),c=n("35a1"),u=n("2a62"),f=function(t,e){this.stopped=t,this.result=e};t.exports=function(t,e,n){var s,l,p,d,m,v,h,y=n&&n.that,b=!(!n||!n.AS_ENTRIES),g=!(!n||!n.IS_ITERATOR),w=!(!n||!n.INTERRUPTED),x=a(e,y,1+b+w),O=function(t){return s&&u(s),new f(!0,t)},_=function(t){return b?(r(t),w?x(t[0],t[1],O):x(t[0],t[1])):w?x(t,O):x(t)};if(g)s=t;else{if(l=c(t),"function"!=typeof l)throw TypeError("Target is not iterable");if(o(l)){for(p=0,d=i(t.length);d>p;p++)if(m=_(t[p]),m&&m instanceof f)return m;return new f(!1)}s=l.call(t)}v=s.next;while(!(h=v.call(s)).done){try{m=_(h.value)}catch(S){throw u(s),S}if("object"==typeof m&&m&&m instanceof f)return m}return new f(!1)}},"23cb":function(t,e,n){var r=n("a691"),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},"23e7":function(t,e,n){var r=n("da84"),o=n("06cf").f,i=n("9112"),a=n("6eeb"),c=n("ce4e"),u=n("e893"),f=n("94ca");t.exports=function(t,e){var n,s,l,p,d,m,v=t.target,h=t.global,y=t.stat;if(s=h?r:y?r[v]||c(v,{}):(r[v]||{}).prototype,s)for(l in e){if(d=e[l],t.noTargetGet?(m=o(s,l),p=m&&m.value):p=s[l],n=f(h?l:v+(y?".":"#")+l,t.forced),!n&&void 0!==p){if(typeof d===typeof p)continue;u(d,p)}(t.sham||p&&p.sham)&&i(d,"sham",!0),a(s,l,d,t)}}},"241c":function(t,e,n){var r=n("ca84"),o=n("7839"),i=o.concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},"24aa":function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},2626:function(t,e,n){"use strict";var r=n("d066"),o=n("9bf2"),i=n("b622"),a=n("83ab"),c=i("species");t.exports=function(t){var e=r(t),n=o.f;a&&e&&!e[c]&&n(e,c,{configurable:!0,get:function(){return this}})}},"2a62":function(t,e,n){var r=n("825a");t.exports=function(t){var e=t["return"];if(void 0!==e)return r(e.call(t)).value}},"2cf4":function(t,e,n){var r,o,i,a,c=n("da84"),u=n("d039"),f=n("0366"),s=n("1be4"),l=n("cc12"),p=n("1cdc"),d=n("605d"),m=c.setImmediate,v=c.clearImmediate,h=c.process,y=c.MessageChannel,b=c.Dispatch,g=0,w={},x="onreadystatechange";try{r=c.location}catch(A){}var O=function(t){if(w.hasOwnProperty(t)){var e=w[t];delete w[t],e()}},_=function(t){return function(){O(t)}},S=function(t){O(t.data)},T=function(t){c.postMessage(String(t),r.protocol+"//"+r.host)};m&&v||(m=function(t){var e=[],n=arguments.length,r=1;while(n>r)e.push(arguments[r++]);return w[++g]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},o(g),g},v=function(t){delete w[t]},d?o=function(t){h.nextTick(_(t))}:b&&b.now?o=function(t){b.now(_(t))}:y&&!p?(i=new y,a=i.port2,i.port1.onmessage=S,o=f(a.postMessage,a,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts&&r&&"file:"!==r.protocol&&!u(T)?(o=T,c.addEventListener("message",S,!1)):o=x in l("script")?function(t){s.appendChild(l("script"))[x]=function(){s.removeChild(this),O(t)}}:function(t){setTimeout(_(t),0)}),t.exports={set:m,clear:v}},"2d00":function(t,e,n){var r,o,i=n("da84"),a=n("342f"),c=i.process,u=i.Deno,f=c&&c.versions||u&&u.version,s=f&&f.v8;s?(r=s.split("."),o=r[0]<4?1:r[0]+r[1]):a&&(r=a.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/),r&&(o=r[1]))),t.exports=o&&+o},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},"35a1":function(t,e,n){var r=n("f5df"),o=n("3f8c"),i=n("b622"),a=i("iterator");t.exports=function(t){if(void 0!=t)return t[a]||t["@@iterator"]||o[r(t)]}},"37e8":function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("825a"),a=n("df75");t.exports=r?Object.defineProperties:function(t,e){i(t);var n,r=a(e),c=r.length,u=0;while(c>u)o.f(t,n=r[u++],e[n]);return t}},"3bbe":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t}},"3f8c":function(t,e){t.exports={}},"44ad":function(t,e,n){var r=n("d039"),o=n("c6b6"),i="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},"44d2":function(t,e,n){var r=n("b622"),o=n("7c73"),i=n("9bf2"),a=r("unscopables"),c=Array.prototype;void 0==c[a]&&i.f(c,a,{configurable:!0,value:o(null)}),t.exports=function(t){c[a][t]=!0}},"44de":function(t,e,n){var r=n("da84");t.exports=function(t,e){var n=r.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}},"452c":function(t,e,n){"use strict";n.r(e);var r={};n.r(r),n.d(r,"__extends",(function(){return c})),n.d(r,"__assign",(function(){return u})),n.d(r,"__rest",(function(){return f})),n.d(r,"__decorate",(function(){return s})),n.d(r,"__param",(function(){return l})),n.d(r,"__metadata",(function(){return p})),n.d(r,"__awaiter",(function(){return d})),n.d(r,"__generator",(function(){return m})),n.d(r,"__createBinding",(function(){return v})),n.d(r,"__exportStar",(function(){return h})),n.d(r,"__values",(function(){return y})),n.d(r,"__read",(function(){return b})),n.d(r,"__spread",(function(){return g})),n.d(r,"__spreadArrays",(function(){return w})),n.d(r,"__await",(function(){return x})),n.d(r,"__asyncGenerator",(function(){return O})),n.d(r,"__asyncDelegator",(function(){return _})),n.d(r,"__asyncValues",(function(){return S})),n.d(r,"__makeTemplateObject",(function(){return T})),n.d(r,"__importStar",(function(){return A})),n.d(r,"__importDefault",(function(){return E})),n.d(r,"__classPrivateFieldGet",(function(){return j})),n.d(r,"__classPrivateFieldSet",(function(){return k}));n("e260"),n("e6cf"),n("cca6"),n("a79d"),n("4fad"),n("498a");var o=n("c0c4"),i=n.n(o),a=function(t,e){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])},a(t,e)};function c(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var u=function(){return u=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n],e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},u.apply(this,arguments)};function f(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}function s(t,e,n,r){var o,i=arguments.length,a=i<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"===typeof Reflect&&"function"===typeof Reflect.decorate)a=Reflect.decorate(t,e,n,r);else for(var c=t.length-1;c>=0;c--)(o=t[c])&&(a=(i<3?o(a):i>3?o(e,n,a):o(e,n))||a);return i>3&&a&&Object.defineProperty(e,n,a),a}function l(t,e){return function(n,r){e(n,r,t)}}function p(t,e){if("object"===typeof Reflect&&"function"===typeof Reflect.metadata)return Reflect.metadata(t,e)}function d(t,e,n,r){function o(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,i){function a(t){try{u(r.next(t))}catch(e){i(e)}}function c(t){try{u(r["throw"](t))}catch(e){i(e)}}function u(t){t.done?n(t.value):o(t.value).then(a,c)}u((r=r.apply(t,e||[])).next())}))}function m(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"===typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(t){return function(e){return u([t,e])}}function u(i){if(n)throw new TypeError("Generator is already executing.");while(a)try{if(n=1,r&&(o=2&i[0]?r["return"]:i[0]?r["throw"]||((o=r["return"])&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(o=a.trys,!(o=o.length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=e.call(t,a)}catch(c){i=[6,c],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}function v(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}function h(t,e){for(var n in t)"default"===n||e.hasOwnProperty(n)||(e[n]=t[n])}function y(t){var e="function"===typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"===typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function b(t,e){var n="function"===typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{while((void 0===e||e-- >0)&&!(r=i.next()).done)a.push(r.value)}catch(c){o={error:c}}finally{try{r&&!r.done&&(n=i["return"])&&n.call(i)}finally{if(o)throw o.error}}return a}function g(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(b(arguments[e]));return t}function w(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var r=Array(t),o=0;for(e=0;e<n;e++)for(var i=arguments[e],a=0,c=i.length;a<c;a++,o++)r[o]=i[a];return r}function x(t){return this instanceof x?(this.v=t,this):new x(t)}function O(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(t,e||[]),i=[];return r={},a("next"),a("throw"),a("return"),r[Symbol.asyncIterator]=function(){return this},r;function a(t){o[t]&&(r[t]=function(e){return new Promise((function(n,r){i.push([t,e,n,r])>1||c(t,e)}))})}function c(t,e){try{u(o[t](e))}catch(n){l(i[0][3],n)}}function u(t){t.value instanceof x?Promise.resolve(t.value.v).then(f,s):l(i[0][2],t)}function f(t){c("next",t)}function s(t){c("throw",t)}function l(t,e){t(e),i.shift(),i.length&&c(i[0][0],i[0][1])}}function _(t){var e,n;return e={},r("next"),r("throw",(function(t){throw t})),r("return"),e[Symbol.iterator]=function(){return this},e;function r(r,o){e[r]=t[r]?function(e){return(n=!n)?{value:x(t[r](e)),done:"return"===r}:o?o(e):e}:o}}function S(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t="function"===typeof y?y(t):t[Symbol.iterator](),e={},r("next"),r("throw"),r("return"),e[Symbol.asyncIterator]=function(){return this},e);function r(n){e[n]=t[n]&&function(e){return new Promise((function(r,i){e=t[n](e),o(r,i,e.done,e.value)}))}}function o(t,e,n,r){Promise.resolve(r).then((function(e){t({value:e,done:n})}),e)}}function T(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}function A(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function E(t){return t&&t.__esModule?t:{default:t}}function j(t,e){if(!e.has(t))throw new TypeError("attempted to get private field on non-instance");return e.get(t)}function k(t,e,n){if(!e.has(t))throw new TypeError("attempted to set private field on non-instance");return e.set(t,n),n}n("a572");
/*!
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */window["tslib"]=r,window.vueSanitize=i.a.sanitize.bind(i.a)},4840:function(t,e,n){var r=n("825a"),o=n("1c0b"),i=n("b622"),a=i("species");t.exports=function(t,e){var n,i=r(t).constructor;return void 0===i||void 0==(n=r(i)[a])?e:o(n)}},"485a":function(t,e,n){var r=n("861d");t.exports=function(t,e){var n,o;if("string"===e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if("string"!==e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},4930:function(t,e,n){var r=n("2d00"),o=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},"4d64":function(t,e,n){var r=n("fc6a"),o=n("50c4"),i=n("23cb"),a=function(t){return function(e,n,a){var c,u=r(e),f=o(u.length),l=i(a,f);if(t&&n!=n){while(f>l)if(c=u[l++],c!=c)return!0}else for(;f>l;l++)if((t||l in u)&&u[l]===n)return t||l||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},"4fad":function(t,e,n){var r=n("23e7"),o=n("6f53").entries;r({target:"Object",stat:!0},{entries:function(t){return o(t)}})},"50c4":function(t,e,n){var r=n("a691"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5135:function(t,e,n){var r=n("7b0b"),o={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,e){return o.call(r(t),e)}},5692:function(t,e,n){var r=n("c430"),o=n("c6cd");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.16.3",mode:r?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},"56ef":function(t,e,n){var r=n("d066"),o=n("241c"),i=n("7418"),a=n("825a");t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(a(t)),n=i.f;return n?e.concat(n(t)):e}},"5c6c":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"605d":function(t,e,n){var r=n("c6b6"),o=n("da84");t.exports="process"==r(o.process)},6069:function(t,e){t.exports="object"==typeof window},"60da":function(t,e,n){"use strict";var r=n("83ab"),o=n("d039"),i=n("df75"),a=n("7418"),c=n("d1e7"),u=n("7b0b"),f=n("44ad"),l=Object.assign,s=Object.defineProperty;t.exports=!l||o((function(){if(r&&1!==l({b:1},l(s({},"a",{enumerable:!0,get:function(){s(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),o="abcdefghijklmnopqrst";return t[n]=7,o.split("").forEach((function(t){e[t]=t})),7!=l({},t)[n]||i(l({},e)).join("")!=o}))?function(t,e){var n=u(t),o=arguments.length,l=1,s=a.f,p=c.f;while(o>l){var d,m=f(arguments[l++]),v=s?i(m).concat(s(m)):i(m),y=v.length,h=0;while(y>h)d=v[h++],r&&!p.call(m,d)||(n[d]=m[d])}return n}:l},"69f3":function(t,e,n){var r,o,i,a=n("7f9a"),c=n("da84"),u=n("861d"),f=n("9112"),l=n("5135"),s=n("c6cd"),p=n("f772"),d=n("d012"),m="Object already initialized",v=c.WeakMap,y=function(t){return i(t)?o(t):r(t,{})},h=function(t){return function(e){var n;if(!u(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}};if(a||s.state){var b=s.state||(s.state=new v),g=b.get,w=b.has,x=b.set;r=function(t,e){if(w.call(b,t))throw new TypeError(m);return e.facade=t,x.call(b,t,e),e},o=function(t){return g.call(b,t)||{}},i=function(t){return w.call(b,t)}}else{var O=p("state");d[O]=!0,r=function(t,e){if(l(t,O))throw new TypeError(m);return e.facade=t,f(t,O,e),e},o=function(t){return l(t,O)?t[O]:{}},i=function(t){return l(t,O)}}t.exports={set:r,get:o,has:i,enforce:y,getterFor:h}},"6eeb":function(t,e,n){var r=n("da84"),o=n("9112"),i=n("5135"),a=n("ce4e"),c=n("8925"),u=n("69f3"),f=u.get,l=u.enforce,s=String(String).split("String");(t.exports=function(t,e,n,c){var u,f=!!c&&!!c.unsafe,p=!!c&&!!c.enumerable,d=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),u=l(n),u.source||(u.source=s.join("string"==typeof e?e:""))),t!==r?(f?!d&&t[e]&&(p=!0):delete t[e],p?t[e]=n:o(t,e,n)):p?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&f(this).source||c(this)}))},"6f53":function(t,e,n){var r=n("83ab"),o=n("df75"),i=n("fc6a"),a=n("d1e7").f,c=function(t){return function(e){var n,c=i(e),u=o(c),f=u.length,l=0,s=[];while(f>l)n=u[l++],r&&!a.call(c,n)||s.push(t?[n,c[n]]:c[n]);return s}};t.exports={entries:c(!0),values:c(!1)}},7418:function(t,e){e.f=Object.getOwnPropertySymbols},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(t,e,n){var r=n("1d80");t.exports=function(t){return Object(r(t))}},"7c73":function(t,e,n){var r,o=n("825a"),i=n("37e8"),a=n("7839"),c=n("d012"),u=n("1be4"),f=n("cc12"),l=n("f772"),s=">",p="<",d="prototype",m="script",v=l("IE_PROTO"),y=function(){},h=function(t){return p+m+s+t+p+"/"+m+s},b=function(t){t.write(h("")),t.close();var e=t.parentWindow.Object;return t=null,e},g=function(){var t,e=f("iframe"),n="java"+m+":";return e.style.display="none",u.appendChild(e),e.src=String(n),t=e.contentWindow.document,t.open(),t.write(h("document.F=Object")),t.close(),t.F},w=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}w="undefined"!=typeof document?document.domain&&r?b(r):g():b(r);var t=a.length;while(t--)delete w[d][a[t]];return w()};c[v]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(y[d]=o(t),n=new y,y[d]=null,n[v]=t):n=w(),void 0===e?n:i(n,e)}},"7dd0":function(t,e,n){"use strict";var r=n("23e7"),o=n("9ed3"),i=n("e163"),a=n("d2bb"),c=n("d44e"),u=n("9112"),f=n("6eeb"),l=n("b622"),s=n("c430"),p=n("3f8c"),d=n("ae93"),m=d.IteratorPrototype,v=d.BUGGY_SAFARI_ITERATORS,y=l("iterator"),h="keys",b="values",g="entries",w=function(){return this};t.exports=function(t,e,n,l,d,x,O){o(n,e,l);var _,S,T,A=function(t){if(t===d&&R)return R;if(!v&&t in k)return k[t];switch(t){case h:return function(){return new n(this,t)};case b:return function(){return new n(this,t)};case g:return function(){return new n(this,t)}}return function(){return new n(this)}},j=e+" Iterator",E=!1,k=t.prototype,P=k[y]||k["@@iterator"]||d&&k[d],R=!v&&P||A(d),M="Array"==e&&k.entries||P;if(M&&(_=i(M.call(new t)),m!==Object.prototype&&_.next&&(s||i(_)===m||(a?a(_,m):"function"!=typeof _[y]&&u(_,y,w)),c(_,j,!0,!0),s&&(p[j]=w))),d==b&&P&&P.name!==b&&(E=!0,R=function(){return P.call(this)}),s&&!O||k[y]===R||u(k,y,R),p[e]=R,d)if(S={values:A(b),keys:x?R:A(h),entries:A(g)},O)for(T in S)(v||E||!(T in k))&&f(k,T,S[T]);else r({target:e,proto:!0,forced:v||E},S);return S}},"7f9a":function(t,e,n){var r=n("da84"),o=n("8925"),i=r.WeakMap;t.exports="function"===typeof i&&/native code/.test(o(i))},"825a":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},"861d":function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},8925:function(t,e,n){var r=n("c6cd"),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(t){return o.call(t)}),t.exports=r.inspectSource},"90e3":function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+r).toString(36)}},9112:function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("5c6c");t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},"94ca":function(t,e,n){var r=n("d039"),o=/#|\.prototype\./,i=function(t,e){var n=c[a(t)];return n==f||n!=u&&("function"==typeof e?r(e):!!e)},a=i.normalize=function(t){return String(t).replace(o,".").toLowerCase()},c=i.data={},u=i.NATIVE="N",f=i.POLYFILL="P";t.exports=i},"9bf2":function(t,e,n){var r=n("83ab"),o=n("0cfb"),i=n("825a"),a=n("a04b"),c=Object.defineProperty;e.f=r?c:function(t,e,n){if(i(t),e=a(e),i(n),o)try{return c(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},"9ed3":function(t,e,n){"use strict";var r=n("ae93").IteratorPrototype,o=n("7c73"),i=n("5c6c"),a=n("d44e"),c=n("3f8c"),u=function(){return this};t.exports=function(t,e,n){var f=e+" Iterator";return t.prototype=o(r,{next:i(1,n)}),a(t,f,!1,!0),c[f]=u,t}},a04b:function(t,e,n){var r=n("c04e"),o=n("d9b5");t.exports=function(t){var e=r(t,"string");return o(e)?e:String(e)}},a4b4:function(t,e,n){var r=n("342f");t.exports=/web0s(?!.*chrome)/i.test(r)},a691:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},a79d:function(t,e,n){"use strict";var r=n("23e7"),o=n("c430"),i=n("fea9"),a=n("d039"),c=n("d066"),u=n("4840"),f=n("cdf9"),l=n("6eeb"),s=!!i&&a((function(){i.prototype["finally"].call({then:function(){}},(function(){}))}));if(r({target:"Promise",proto:!0,real:!0,forced:s},{finally:function(t){var e=u(this,c("Promise")),n="function"==typeof t;return this.then(n?function(n){return f(e,t()).then((function(){return n}))}:t,n?function(n){return f(e,t()).then((function(){throw n}))}:t)}}),!o&&"function"==typeof i){var p=c("Promise").prototype["finally"];i.prototype["finally"]!==p&&l(i.prototype,"finally",p,{unsafe:!0})}},ae93:function(t,e,n){"use strict";var r,o,i,a=n("d039"),c=n("e163"),u=n("9112"),f=n("5135"),l=n("b622"),s=n("c430"),p=l("iterator"),d=!1,m=function(){return this};[].keys&&(i=[].keys(),"next"in i?(o=c(c(i)),o!==Object.prototype&&(r=o)):d=!0);var v=void 0==r||a((function(){var t={};return r[p].call(t)!==t}));v&&(r={}),s&&!v||f(r,p)||u(r,p,m),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},b575:function(t,e,n){var r,o,i,a,c,u,f,l,s=n("da84"),p=n("06cf").f,d=n("2cf4").set,m=n("1cdc"),v=n("d4c3"),y=n("a4b4"),h=n("605d"),b=s.MutationObserver||s.WebKitMutationObserver,g=s.document,w=s.process,x=s.Promise,O=p(s,"queueMicrotask"),_=O&&O.value;_||(r=function(){var t,e;h&&(t=w.domain)&&t.exit();while(o){e=o.fn,o=o.next;try{e()}catch(n){throw o?a():i=void 0,n}}i=void 0,t&&t.enter()},m||h||y||!b||!g?!v&&x&&x.resolve?(f=x.resolve(void 0),f.constructor=x,l=f.then,a=function(){l.call(f,r)}):a=h?function(){w.nextTick(r)}:function(){d.call(s,r)}:(c=!0,u=g.createTextNode(""),new b(r).observe(u,{characterData:!0}),a=function(){u.data=c=!c})),t.exports=_||function(t){var e={fn:t,next:void 0};i&&(i.next=e),o||(o=e,a()),i=e}},b622:function(t,e,n){var r=n("da84"),o=n("5692"),i=n("5135"),a=n("90e3"),c=n("4930"),u=n("fdbf"),f=o("wks"),l=r.Symbol,s=u?l:l&&l.withoutSetter||a;t.exports=function(t){return i(f,t)&&(c||"string"==typeof f[t])||(c&&i(l,t)?f[t]=l[t]:f[t]=s("Symbol."+t)),f[t]}},c04e:function(t,e,n){var r=n("861d"),o=n("d9b5"),i=n("485a"),a=n("b622"),c=a("toPrimitive");t.exports=function(t,e){if(!r(t)||o(t))return t;var n,a=t[c];if(void 0!==a){if(void 0===e&&(e="default"),n=a.call(t,e),!r(n)||o(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),i(t,e)}},c0c4:function(t,e,n){
+ */window.tslib=r,window.vueSanitize=i.a.sanitize.bind(i.a)},4840:function(t,e,n){var r=n("825a"),o=n("1c0b"),i=n("b622"),a=i("species");t.exports=function(t,e){var n,i=r(t).constructor;return void 0===i||void 0==(n=r(i)[a])?e:o(n)}},"485a":function(t,e,n){var r=n("861d");t.exports=function(t,e){var n,o;if("string"===e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if("string"!==e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},4930:function(t,e,n){var r=n("2d00"),o=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},"498a":function(t,e,n){"use strict";var r=n("23e7"),o=n("58a8").trim,i=n("c8d2");r({target:"String",proto:!0,forced:i("trim")},{trim:function(){return o(this)}})},"4d64":function(t,e,n){var r=n("fc6a"),o=n("50c4"),i=n("23cb"),a=function(t){return function(e,n,a){var c,u=r(e),f=o(u.length),s=i(a,f);if(t&&n!=n){while(f>s)if(c=u[s++],c!=c)return!0}else for(;f>s;s++)if((t||s in u)&&u[s]===n)return t||s||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},"4fad":function(t,e,n){var r=n("23e7"),o=n("6f53").entries;r({target:"Object",stat:!0},{entries:function(t){return o(t)}})},"50c4":function(t,e,n){var r=n("a691"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5135:function(t,e,n){var r=n("7b0b"),o={}.hasOwnProperty;t.exports=Object.hasOwn||function(t,e){return o.call(r(t),e)}},5692:function(t,e,n){var r=n("c430"),o=n("c6cd");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.16.3",mode:r?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},"56ef":function(t,e,n){var r=n("d066"),o=n("241c"),i=n("7418"),a=n("825a");t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(a(t)),n=i.f;return n?e.concat(n(t)):e}},"577e":function(t,e,n){var r=n("d9b5");t.exports=function(t){if(r(t))throw TypeError("Cannot convert a Symbol value to a string");return String(t)}},5899:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},"58a8":function(t,e,n){var r=n("1d80"),o=n("577e"),i=n("5899"),a="["+i+"]",c=RegExp("^"+a+a+"*"),u=RegExp(a+a+"*$"),f=function(t){return function(e){var n=o(r(e));return 1&t&&(n=n.replace(c,"")),2&t&&(n=n.replace(u,"")),n}};t.exports={start:f(1),end:f(2),trim:f(3)}},"5c6c":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"605d":function(t,e,n){var r=n("c6b6"),o=n("da84");t.exports="process"==r(o.process)},6069:function(t,e){t.exports="object"==typeof window},"60da":function(t,e,n){"use strict";var r=n("83ab"),o=n("d039"),i=n("df75"),a=n("7418"),c=n("d1e7"),u=n("7b0b"),f=n("44ad"),s=Object.assign,l=Object.defineProperty;t.exports=!s||o((function(){if(r&&1!==s({b:1},s(l({},"a",{enumerable:!0,get:function(){l(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},n=Symbol(),o="abcdefghijklmnopqrst";return t[n]=7,o.split("").forEach((function(t){e[t]=t})),7!=s({},t)[n]||i(s({},e)).join("")!=o}))?function(t,e){var n=u(t),o=arguments.length,s=1,l=a.f,p=c.f;while(o>s){var d,m=f(arguments[s++]),v=l?i(m).concat(l(m)):i(m),h=v.length,y=0;while(h>y)d=v[y++],r&&!p.call(m,d)||(n[d]=m[d])}return n}:s},"69f3":function(t,e,n){var r,o,i,a=n("7f9a"),c=n("da84"),u=n("861d"),f=n("9112"),s=n("5135"),l=n("c6cd"),p=n("f772"),d=n("d012"),m="Object already initialized",v=c.WeakMap,h=function(t){return i(t)?o(t):r(t,{})},y=function(t){return function(e){var n;if(!u(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}};if(a||l.state){var b=l.state||(l.state=new v),g=b.get,w=b.has,x=b.set;r=function(t,e){if(w.call(b,t))throw new TypeError(m);return e.facade=t,x.call(b,t,e),e},o=function(t){return g.call(b,t)||{}},i=function(t){return w.call(b,t)}}else{var O=p("state");d[O]=!0,r=function(t,e){if(s(t,O))throw new TypeError(m);return e.facade=t,f(t,O,e),e},o=function(t){return s(t,O)?t[O]:{}},i=function(t){return s(t,O)}}t.exports={set:r,get:o,has:i,enforce:h,getterFor:y}},"6eeb":function(t,e,n){var r=n("da84"),o=n("9112"),i=n("5135"),a=n("ce4e"),c=n("8925"),u=n("69f3"),f=u.get,s=u.enforce,l=String(String).split("String");(t.exports=function(t,e,n,c){var u,f=!!c&&!!c.unsafe,p=!!c&&!!c.enumerable,d=!!c&&!!c.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),u=s(n),u.source||(u.source=l.join("string"==typeof e?e:""))),t!==r?(f?!d&&t[e]&&(p=!0):delete t[e],p?t[e]=n:o(t,e,n)):p?t[e]=n:a(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&f(this).source||c(this)}))},"6f53":function(t,e,n){var r=n("83ab"),o=n("df75"),i=n("fc6a"),a=n("d1e7").f,c=function(t){return function(e){var n,c=i(e),u=o(c),f=u.length,s=0,l=[];while(f>s)n=u[s++],r&&!a.call(c,n)||l.push(t?[n,c[n]]:c[n]);return l}};t.exports={entries:c(!0),values:c(!1)}},7418:function(t,e){e.f=Object.getOwnPropertySymbols},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(t,e,n){var r=n("1d80");t.exports=function(t){return Object(r(t))}},"7c73":function(t,e,n){var r,o=n("825a"),i=n("37e8"),a=n("7839"),c=n("d012"),u=n("1be4"),f=n("cc12"),s=n("f772"),l=">",p="<",d="prototype",m="script",v=s("IE_PROTO"),h=function(){},y=function(t){return p+m+l+t+p+"/"+m+l},b=function(t){t.write(y("")),t.close();var e=t.parentWindow.Object;return t=null,e},g=function(){var t,e=f("iframe"),n="java"+m+":";return e.style.display="none",u.appendChild(e),e.src=String(n),t=e.contentWindow.document,t.open(),t.write(y("document.F=Object")),t.close(),t.F},w=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}w="undefined"!=typeof document?document.domain&&r?b(r):g():b(r);var t=a.length;while(t--)delete w[d][a[t]];return w()};c[v]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(h[d]=o(t),n=new h,h[d]=null,n[v]=t):n=w(),void 0===e?n:i(n,e)}},"7dd0":function(t,e,n){"use strict";var r=n("23e7"),o=n("9ed3"),i=n("e163"),a=n("d2bb"),c=n("d44e"),u=n("9112"),f=n("6eeb"),s=n("b622"),l=n("c430"),p=n("3f8c"),d=n("ae93"),m=d.IteratorPrototype,v=d.BUGGY_SAFARI_ITERATORS,h=s("iterator"),y="keys",b="values",g="entries",w=function(){return this};t.exports=function(t,e,n,s,d,x,O){o(n,e,s);var _,S,T,A=function(t){if(t===d&&P)return P;if(!v&&t in k)return k[t];switch(t){case y:return function(){return new n(this,t)};case b:return function(){return new n(this,t)};case g:return function(){return new n(this,t)}}return function(){return new n(this)}},E=e+" Iterator",j=!1,k=t.prototype,R=k[h]||k["@@iterator"]||d&&k[d],P=!v&&R||A(d),M="Array"==e&&k.entries||R;if(M&&(_=i(M.call(new t)),m!==Object.prototype&&_.next&&(l||i(_)===m||(a?a(_,m):"function"!=typeof _[h]&&u(_,h,w)),c(_,E,!0,!0),l&&(p[E]=w))),d==b&&R&&R.name!==b&&(j=!0,P=function(){return R.call(this)}),l&&!O||k[h]===P||u(k,h,P),p[e]=P,d)if(S={values:A(b),keys:x?P:A(y),entries:A(g)},O)for(T in S)(v||j||!(T in k))&&f(k,T,S[T]);else r({target:e,proto:!0,forced:v||j},S);return S}},"7f9a":function(t,e,n){var r=n("da84"),o=n("8925"),i=r.WeakMap;t.exports="function"===typeof i&&/native code/.test(o(i))},"825a":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},"861d":function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},8925:function(t,e,n){var r=n("c6cd"),o=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(t){return o.call(t)}),t.exports=r.inspectSource},"90e3":function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++n+r).toString(36)}},9112:function(t,e,n){var r=n("83ab"),o=n("9bf2"),i=n("5c6c");t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},"94ca":function(t,e,n){var r=n("d039"),o=/#|\.prototype\./,i=function(t,e){var n=c[a(t)];return n==f||n!=u&&("function"==typeof e?r(e):!!e)},a=i.normalize=function(t){return String(t).replace(o,".").toLowerCase()},c=i.data={},u=i.NATIVE="N",f=i.POLYFILL="P";t.exports=i},"9bf2":function(t,e,n){var r=n("83ab"),o=n("0cfb"),i=n("825a"),a=n("a04b"),c=Object.defineProperty;e.f=r?c:function(t,e,n){if(i(t),e=a(e),i(n),o)try{return c(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},"9ed3":function(t,e,n){"use strict";var r=n("ae93").IteratorPrototype,o=n("7c73"),i=n("5c6c"),a=n("d44e"),c=n("3f8c"),u=function(){return this};t.exports=function(t,e,n){var f=e+" Iterator";return t.prototype=o(r,{next:i(1,n)}),a(t,f,!1,!0),c[f]=u,t}},a04b:function(t,e,n){var r=n("c04e"),o=n("d9b5");t.exports=function(t){var e=r(t,"string");return o(e)?e:String(e)}},a4b4:function(t,e,n){var r=n("342f");t.exports=/web0s(?!.*chrome)/i.test(r)},a572:function(t,e,n){"use strict";
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */var r=window.$.fn.trigger;function o(t,e){function n(e){var r=t.type||t,o="on".concat(r);if(!(e[o]||e[r]instanceof Function)&&(!(window.$._data(e,"events")||{})[r]||!window.$._data(e,"handle"))){if(e.dispatchEvent){var i=new Event(r,{bubbles:!1,cancelable:!0});e.dispatchEvent(i)}var a=e.parentElement;a&&n(a)}}var o=r.call(this,t,e);return this.each((function(){n(this)})),o}window.$.fn.trigger=o},a691:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},a79d:function(t,e,n){"use strict";var r=n("23e7"),o=n("c430"),i=n("fea9"),a=n("d039"),c=n("d066"),u=n("4840"),f=n("cdf9"),s=n("6eeb"),l=!!i&&a((function(){i.prototype["finally"].call({then:function(){}},(function(){}))}));if(r({target:"Promise",proto:!0,real:!0,forced:l},{finally:function(t){var e=u(this,c("Promise")),n="function"==typeof t;return this.then(n?function(n){return f(e,t()).then((function(){return n}))}:t,n?function(n){return f(e,t()).then((function(){throw n}))}:t)}}),!o&&"function"==typeof i){var p=c("Promise").prototype["finally"];i.prototype["finally"]!==p&&s(i.prototype,"finally",p,{unsafe:!0})}},ae93:function(t,e,n){"use strict";var r,o,i,a=n("d039"),c=n("e163"),u=n("9112"),f=n("5135"),s=n("b622"),l=n("c430"),p=s("iterator"),d=!1,m=function(){return this};[].keys&&(i=[].keys(),"next"in i?(o=c(c(i)),o!==Object.prototype&&(r=o)):d=!0);var v=void 0==r||a((function(){var t={};return r[p].call(t)!==t}));v&&(r={}),l&&!v||f(r,p)||u(r,p,m),t.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:d}},b575:function(t,e,n){var r,o,i,a,c,u,f,s,l=n("da84"),p=n("06cf").f,d=n("2cf4").set,m=n("1cdc"),v=n("d4c3"),h=n("a4b4"),y=n("605d"),b=l.MutationObserver||l.WebKitMutationObserver,g=l.document,w=l.process,x=l.Promise,O=p(l,"queueMicrotask"),_=O&&O.value;_||(r=function(){var t,e;y&&(t=w.domain)&&t.exit();while(o){e=o.fn,o=o.next;try{e()}catch(n){throw o?a():i=void 0,n}}i=void 0,t&&t.enter()},m||y||h||!b||!g?!v&&x&&x.resolve?(f=x.resolve(void 0),f.constructor=x,s=f.then,a=function(){s.call(f,r)}):a=y?function(){w.nextTick(r)}:function(){d.call(l,r)}:(c=!0,u=g.createTextNode(""),new b(r).observe(u,{characterData:!0}),a=function(){u.data=c=!c})),t.exports=_||function(t){var e={fn:t,next:void 0};i&&(i.next=e),o||(o=e,a()),i=e}},b622:function(t,e,n){var r=n("da84"),o=n("5692"),i=n("5135"),a=n("90e3"),c=n("4930"),u=n("fdbf"),f=o("wks"),s=r.Symbol,l=u?s:s&&s.withoutSetter||a;t.exports=function(t){return i(f,t)&&(c||"string"==typeof f[t])||(c&&i(s,t)?f[t]=s[t]:f[t]=l("Symbol."+t)),f[t]}},c04e:function(t,e,n){var r=n("861d"),o=n("d9b5"),i=n("485a"),a=n("b622"),c=a("toPrimitive");t.exports=function(t,e){if(!r(t)||o(t))return t;var n,a=t[c];if(void 0!==a){if(void 0===e&&(e="default"),n=a.call(t,e),!r(n)||o(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),i(t,e)}},c0c4:function(t,e,n){
/*! @license DOMPurify 2.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.3/LICENSE */
-(function(e,n){t.exports=n()})(0,(function(){"use strict";function t(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}var e=Object.hasOwnProperty,n=Object.setPrototypeOf,r=Object.isFrozen,o=Object.getPrototypeOf,i=Object.getOwnPropertyDescriptor,a=Object.freeze,c=Object.seal,u=Object.create,f="undefined"!==typeof Reflect&&Reflect,l=f.apply,s=f.construct;l||(l=function(t,e,n){return t.apply(e,n)}),a||(a=function(t){return t}),c||(c=function(t){return t}),s||(s=function(e,n){return new(Function.prototype.bind.apply(e,[null].concat(t(n))))});var p=O(Array.prototype.forEach),d=O(Array.prototype.pop),m=O(Array.prototype.push),v=O(String.prototype.toLowerCase),y=O(String.prototype.match),h=O(String.prototype.replace),b=O(String.prototype.indexOf),g=O(String.prototype.trim),w=O(RegExp.prototype.test),x=_(TypeError);function O(t){return function(e){for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return l(t,e,r)}}function _(t){return function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return s(t,n)}}function S(t,e){n&&n(t,null);var o=e.length;while(o--){var i=e[o];if("string"===typeof i){var a=v(i);a!==i&&(r(e)||(e[o]=a),i=a)}t[i]=!0}return t}function T(t){var n=u(null),r=void 0;for(r in t)l(e,t,[r])&&(n[r]=t[r]);return n}function A(t,e){while(null!==t){var n=i(t,e);if(n){if(n.get)return O(n.get);if("function"===typeof n.value)return O(n.value)}t=o(t)}function r(t){return console.warn("fallback value for",t),null}return r}var j=a(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),E=a(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),k=a(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),P=a(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),R=a(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),M=a(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),D=a(["#text"]),N=a(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),I=a(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),L=a(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),F=a(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),C=c(/\{\{[\s\S]*|[\s\S]*\}\}/gm),z=c(/<%[\s\S]*|[\s\S]*%>/gm),U=c(/^data-[\-\w.\u00B7-\uFFFF]/),H=c(/^aria-[\-\w]+$/),B=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),G=c(/^(?:\w+script|data):/i),W=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function Y(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}var K=function(){return"undefined"===typeof window?null:window},V=function(t,e){if("object"!==("undefined"===typeof t?"undefined":q(t))||"function"!==typeof t.createPolicy)return null;var n=null,r="data-tt-policy-suffix";e.currentScript&&e.currentScript.hasAttribute(r)&&(n=e.currentScript.getAttribute(r));var o="dompurify"+(n?"#"+n:"");try{return t.createPolicy(o,{createHTML:function(t){return t}})}catch(i){return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function X(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:K(),e=function(t){return X(t)};if(e.version="2.3.3",e.removed=[],!t||!t.document||9!==t.document.nodeType)return e.isSupported=!1,e;var n=t.document,r=t.document,o=t.DocumentFragment,i=t.HTMLTemplateElement,c=t.Node,u=t.Element,f=t.NodeFilter,l=t.NamedNodeMap,s=void 0===l?t.NamedNodeMap||t.MozNamedAttrMap:l,O=t.Text,_=t.Comment,$=t.DOMParser,Z=t.trustedTypes,J=u.prototype,Q=A(J,"cloneNode"),tt=A(J,"nextSibling"),et=A(J,"childNodes"),nt=A(J,"parentNode");if("function"===typeof i){var rt=r.createElement("template");rt.content&&rt.content.ownerDocument&&(r=rt.content.ownerDocument)}var ot=V(Z,n),it=ot&&Ft?ot.createHTML(""):"",at=r,ct=at.implementation,ut=at.createNodeIterator,ft=at.createDocumentFragment,lt=at.getElementsByTagName,st=n.importNode,pt={};try{pt=T(r).documentMode?r.documentMode:{}}catch(Oe){}var dt={};e.isSupported="function"===typeof nt&&ct&&"undefined"!==typeof ct.createHTMLDocument&&9!==pt;var mt=C,vt=z,yt=U,ht=H,bt=G,gt=W,wt=B,xt=null,Ot=S({},[].concat(Y(j),Y(E),Y(k),Y(R),Y(D))),_t=null,St=S({},[].concat(Y(N),Y(I),Y(L),Y(F))),Tt=null,At=null,jt=!0,Et=!0,kt=!1,Pt=!1,Rt=!1,Mt=!1,Dt=!1,Nt=!1,It=!1,Lt=!0,Ft=!1,Ct=!0,zt=!0,Ut=!1,Ht={},Bt=null,Gt=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Wt=null,qt=S({},["audio","video","img","source","image","track"]),Yt=null,Kt=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Vt="http://www.w3.org/1998/Math/MathML",Xt="http://www.w3.org/2000/svg",$t="http://www.w3.org/1999/xhtml",Zt=$t,Jt=!1,Qt=void 0,te=["application/xhtml+xml","text/html"],ee="text/html",ne=void 0,re=null,oe=r.createElement("form"),ie=function(t){re&&re===t||(t&&"object"===("undefined"===typeof t?"undefined":q(t))||(t={}),t=T(t),xt="ALLOWED_TAGS"in t?S({},t.ALLOWED_TAGS):Ot,_t="ALLOWED_ATTR"in t?S({},t.ALLOWED_ATTR):St,Yt="ADD_URI_SAFE_ATTR"in t?S(T(Kt),t.ADD_URI_SAFE_ATTR):Kt,Wt="ADD_DATA_URI_TAGS"in t?S(T(qt),t.ADD_DATA_URI_TAGS):qt,Bt="FORBID_CONTENTS"in t?S({},t.FORBID_CONTENTS):Gt,Tt="FORBID_TAGS"in t?S({},t.FORBID_TAGS):{},At="FORBID_ATTR"in t?S({},t.FORBID_ATTR):{},Ht="USE_PROFILES"in t&&t.USE_PROFILES,jt=!1!==t.ALLOW_ARIA_ATTR,Et=!1!==t.ALLOW_DATA_ATTR,kt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Pt=t.SAFE_FOR_TEMPLATES||!1,Rt=t.WHOLE_DOCUMENT||!1,Nt=t.RETURN_DOM||!1,It=t.RETURN_DOM_FRAGMENT||!1,Lt=!1!==t.RETURN_DOM_IMPORT,Ft=t.RETURN_TRUSTED_TYPE||!1,Dt=t.FORCE_BODY||!1,Ct=!1!==t.SANITIZE_DOM,zt=!1!==t.KEEP_CONTENT,Ut=t.IN_PLACE||!1,wt=t.ALLOWED_URI_REGEXP||wt,Zt=t.NAMESPACE||$t,Qt=Qt=-1===te.indexOf(t.PARSER_MEDIA_TYPE)?ee:t.PARSER_MEDIA_TYPE,ne="application/xhtml+xml"===Qt?function(t){return t}:v,Pt&&(Et=!1),It&&(Nt=!0),Ht&&(xt=S({},[].concat(Y(D))),_t=[],!0===Ht.html&&(S(xt,j),S(_t,N)),!0===Ht.svg&&(S(xt,E),S(_t,I),S(_t,F)),!0===Ht.svgFilters&&(S(xt,k),S(_t,I),S(_t,F)),!0===Ht.mathMl&&(S(xt,R),S(_t,L),S(_t,F))),t.ADD_TAGS&&(xt===Ot&&(xt=T(xt)),S(xt,t.ADD_TAGS)),t.ADD_ATTR&&(_t===St&&(_t=T(_t)),S(_t,t.ADD_ATTR)),t.ADD_URI_SAFE_ATTR&&S(Yt,t.ADD_URI_SAFE_ATTR),t.FORBID_CONTENTS&&(Bt===Gt&&(Bt=T(Bt)),S(Bt,t.FORBID_CONTENTS)),zt&&(xt["#text"]=!0),Rt&&S(xt,["html","head","body"]),xt.table&&(S(xt,["tbody"]),delete Tt.tbody),a&&a(t),re=t)},ae=S({},["mi","mo","mn","ms","mtext"]),ce=S({},["foreignobject","desc","title","annotation-xml"]),ue=S({},E);S(ue,k),S(ue,P);var fe=S({},R);S(fe,M);var le=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:$t,tagName:"template"});var n=v(t.tagName),r=v(e.tagName);if(t.namespaceURI===Xt)return e.namespaceURI===$t?"svg"===n:e.namespaceURI===Vt?"svg"===n&&("annotation-xml"===r||ae[r]):Boolean(ue[n]);if(t.namespaceURI===Vt)return e.namespaceURI===$t?"math"===n:e.namespaceURI===Xt?"math"===n&&ce[r]:Boolean(fe[n]);if(t.namespaceURI===$t){if(e.namespaceURI===Xt&&!ce[r])return!1;if(e.namespaceURI===Vt&&!ae[r])return!1;var o=S({},["title","style","font","a","script"]);return!fe[n]&&(o[n]||!ue[n])}return!1},se=function(t){m(e.removed,{element:t});try{t.parentNode.removeChild(t)}catch(Oe){try{t.outerHTML=it}catch(Oe){t.remove()}}},pe=function(t,n){try{m(e.removed,{attribute:n.getAttributeNode(t),from:n})}catch(Oe){m(e.removed,{attribute:null,from:n})}if(n.removeAttribute(t),"is"===t&&!_t[t])if(Nt||It)try{se(n)}catch(Oe){}else try{n.setAttribute(t,"")}catch(Oe){}},de=function(t){var e=void 0,n=void 0;if(Dt)t="<remove></remove>"+t;else{var o=y(t,/^[\r\n\t ]+/);n=o&&o[0]}"application/xhtml+xml"===Qt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var i=ot?ot.createHTML(t):t;if(Zt===$t)try{e=(new $).parseFromString(i,Qt)}catch(Oe){}if(!e||!e.documentElement){e=ct.createDocument(Zt,"template",null);try{e.documentElement.innerHTML=Jt?"":i}catch(Oe){}}var a=e.body||e.documentElement;return t&&n&&a.insertBefore(r.createTextNode(n),a.childNodes[0]||null),Zt===$t?lt.call(e,Rt?"html":"body")[0]:Rt?e.documentElement:a},me=function(t){return ut.call(t.ownerDocument||t,t,f.SHOW_ELEMENT|f.SHOW_COMMENT|f.SHOW_TEXT,null,!1)},ve=function(t){return!(t instanceof O||t instanceof _)&&!("string"===typeof t.nodeName&&"string"===typeof t.textContent&&"function"===typeof t.removeChild&&t.attributes instanceof s&&"function"===typeof t.removeAttribute&&"function"===typeof t.setAttribute&&"string"===typeof t.namespaceURI&&"function"===typeof t.insertBefore)},ye=function(t){return"object"===("undefined"===typeof c?"undefined":q(c))?t instanceof c:t&&"object"===("undefined"===typeof t?"undefined":q(t))&&"number"===typeof t.nodeType&&"string"===typeof t.nodeName},he=function(t,n,r){dt[t]&&p(dt[t],(function(t){t.call(e,n,r,re)}))},be=function(t){var n=void 0;if(he("beforeSanitizeElements",t,null),ve(t))return se(t),!0;if(y(t.nodeName,/[\u0080-\uFFFF]/))return se(t),!0;var r=ne(t.nodeName);if(he("uponSanitizeElement",t,{tagName:r,allowedTags:xt}),!ye(t.firstElementChild)&&(!ye(t.content)||!ye(t.content.firstElementChild))&&w(/<[/\w]/g,t.innerHTML)&&w(/<[/\w]/g,t.textContent))return se(t),!0;if("select"===r&&w(/<template/i,t.innerHTML))return se(t),!0;if(!xt[r]||Tt[r]){if(zt&&!Bt[r]){var o=nt(t)||t.parentNode,i=et(t)||t.childNodes;if(i&&o)for(var a=i.length,c=a-1;c>=0;--c)o.insertBefore(Q(i[c],!0),tt(t))}return se(t),!0}return t instanceof u&&!le(t)?(se(t),!0):"noscript"!==r&&"noembed"!==r||!w(/<\/no(script|embed)/i,t.innerHTML)?(Pt&&3===t.nodeType&&(n=t.textContent,n=h(n,mt," "),n=h(n,vt," "),t.textContent!==n&&(m(e.removed,{element:t.cloneNode()}),t.textContent=n)),he("afterSanitizeElements",t,null),!1):(se(t),!0)},ge=function(t,e,n){if(Ct&&("id"===e||"name"===e)&&(n in r||n in oe))return!1;if(Et&&!At[e]&&w(yt,e));else if(jt&&w(ht,e));else{if(!_t[e]||At[e])return!1;if(Yt[e]);else if(w(wt,h(n,gt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==b(n,"data:")||!Wt[t]){if(kt&&!w(bt,h(n,gt,"")));else if(n)return!1}else;}return!0},we=function(t){var n=void 0,r=void 0,o=void 0,i=void 0;he("beforeSanitizeAttributes",t,null);var a=t.attributes;if(a){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:_t};i=a.length;while(i--){n=a[i];var u=n,f=u.name,l=u.namespaceURI;if(r=g(n.value),o=ne(f),c.attrName=o,c.attrValue=r,c.keepAttr=!0,c.forceKeepAttr=void 0,he("uponSanitizeAttribute",t,c),r=c.attrValue,!c.forceKeepAttr&&(pe(f,t),c.keepAttr))if(w(/\/>/i,r))pe(f,t);else{Pt&&(r=h(r,mt," "),r=h(r,vt," "));var s=ne(t.nodeName);if(ge(s,o,r))try{l?t.setAttributeNS(l,f,r):t.setAttribute(f,r),d(e.removed)}catch(Oe){}}}he("afterSanitizeAttributes",t,null)}},xe=function t(e){var n=void 0,r=me(e);he("beforeSanitizeShadowDOM",e,null);while(n=r.nextNode())he("uponSanitizeShadowNode",n,null),be(n)||(n.content instanceof o&&t(n.content),we(n));he("afterSanitizeShadowDOM",e,null)};return e.sanitize=function(r,i){var a=void 0,u=void 0,f=void 0,l=void 0,s=void 0;if(Jt=!r,Jt&&(r="\x3c!--\x3e"),"string"!==typeof r&&!ye(r)){if("function"!==typeof r.toString)throw x("toString is not a function");if(r=r.toString(),"string"!==typeof r)throw x("dirty is not a string, aborting")}if(!e.isSupported){if("object"===q(t.toStaticHTML)||"function"===typeof t.toStaticHTML){if("string"===typeof r)return t.toStaticHTML(r);if(ye(r))return t.toStaticHTML(r.outerHTML)}return r}if(Mt||ie(i),e.removed=[],"string"===typeof r&&(Ut=!1),Ut);else if(r instanceof c)a=de("\x3c!----\x3e"),u=a.ownerDocument.importNode(r,!0),1===u.nodeType&&"BODY"===u.nodeName||"HTML"===u.nodeName?a=u:a.appendChild(u);else{if(!Nt&&!Pt&&!Rt&&-1===r.indexOf("<"))return ot&&Ft?ot.createHTML(r):r;if(a=de(r),!a)return Nt?null:it}a&&Dt&&se(a.firstChild);var p=me(Ut?r:a);while(f=p.nextNode())3===f.nodeType&&f===l||be(f)||(f.content instanceof o&&xe(f.content),we(f),l=f);if(l=null,Ut)return r;if(Nt){if(It){s=ft.call(a.ownerDocument);while(a.firstChild)s.appendChild(a.firstChild)}else s=a;return Lt&&(s=st.call(n,s,!0)),s}var d=Rt?a.outerHTML:a.innerHTML;return Pt&&(d=h(d,mt," "),d=h(d,vt," ")),ot&&Ft?ot.createHTML(d):d},e.setConfig=function(t){ie(t),Mt=!0},e.clearConfig=function(){re=null,Mt=!1},e.isValidAttribute=function(t,e,n){re||ie({});var r=ne(t),o=ne(e);return ge(r,o,n)},e.addHook=function(t,e){"function"===typeof e&&(dt[t]=dt[t]||[],m(dt[t],e))},e.removeHook=function(t){dt[t]&&d(dt[t])},e.removeHooks=function(t){dt[t]&&(dt[t]=[])},e.removeAllHooks=function(){dt={}},e}var $=X();return $}))},c430:function(t,e){t.exports=!1},c6b6:function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},c6cd:function(t,e,n){var r=n("da84"),o=n("ce4e"),i="__core-js_shared__",a=r[i]||o(i,{});t.exports=a},ca84:function(t,e,n){var r=n("5135"),o=n("fc6a"),i=n("4d64").indexOf,a=n("d012");t.exports=function(t,e){var n,c=o(t),u=0,f=[];for(n in c)!r(a,n)&&r(c,n)&&f.push(n);while(e.length>u)r(c,n=e[u++])&&(~i(f,n)||f.push(n));return f}},cc12:function(t,e,n){var r=n("da84"),o=n("861d"),i=r.document,a=o(i)&&o(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},cca6:function(t,e,n){var r=n("23e7"),o=n("60da");r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},cdf9:function(t,e,n){var r=n("825a"),o=n("861d"),i=n("f069");t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t),a=n.resolve;return a(e),n.promise}},ce4e:function(t,e,n){var r=n("da84");t.exports=function(t,e){try{Object.defineProperty(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},d012:function(t,e){t.exports={}},d039:function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},d066:function(t,e,n){var r=n("da84"),o=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t]):r[t]&&r[t][e]}},d1e7:function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},d2bb:function(t,e,n){var r=n("825a"),o=n("3bbe");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,t.call(n,[]),e=n instanceof Array}catch(i){}return function(n,i){return r(n),o(i),e?t.call(n,i):n.__proto__=i,n}}():void 0)},d44e:function(t,e,n){var r=n("9bf2").f,o=n("5135"),i=n("b622"),a=i("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,a)&&r(t,a,{configurable:!0,value:e})}},d4c3:function(t,e,n){var r=n("342f"),o=n("da84");t.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==o.Pebble},d9b5:function(t,e,n){var r=n("d066"),o=n("fdbf");t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return"function"==typeof e&&Object(t)instanceof e}},da84:function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n("24aa"))},df75:function(t,e,n){var r=n("ca84"),o=n("7839");t.exports=Object.keys||function(t){return r(t,o)}},e163:function(t,e,n){var r=n("5135"),o=n("7b0b"),i=n("f772"),a=n("e177"),c=i("IE_PROTO"),u=Object.prototype;t.exports=a?Object.getPrototypeOf:function(t){return t=o(t),r(t,c)?t[c]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},e177:function(t,e,n){var r=n("d039");t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},e260:function(t,e,n){"use strict";var r=n("fc6a"),o=n("44d2"),i=n("3f8c"),a=n("69f3"),c=n("7dd0"),u="Array Iterator",f=a.set,l=a.getterFor(u);t.exports=c(Array,"Array",(function(t,e){f(this,{type:u,target:r(t),index:0,kind:e})}),(function(){var t=l(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},e2cc:function(t,e,n){var r=n("6eeb");t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},e667:function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(e){return{error:!0,value:e}}}},e6cf:function(t,e,n){"use strict";var r,o,i,a,c=n("23e7"),u=n("c430"),f=n("da84"),l=n("d066"),s=n("fea9"),p=n("6eeb"),d=n("e2cc"),m=n("d2bb"),v=n("d44e"),y=n("2626"),h=n("861d"),b=n("1c0b"),g=n("19aa"),w=n("8925"),x=n("2266"),O=n("1c7e"),_=n("4840"),S=n("2cf4").set,T=n("b575"),A=n("cdf9"),j=n("44de"),E=n("f069"),k=n("e667"),P=n("69f3"),R=n("94ca"),M=n("b622"),D=n("6069"),N=n("605d"),I=n("2d00"),L=M("species"),F="Promise",C=P.get,z=P.set,U=P.getterFor(F),H=s&&s.prototype,B=s,G=H,W=f.TypeError,q=f.document,Y=f.process,K=E.f,V=K,X=!!(q&&q.createEvent&&f.dispatchEvent),$="function"==typeof PromiseRejectionEvent,Z="unhandledrejection",J="rejectionhandled",Q=0,tt=1,et=2,nt=1,rt=2,ot=!1,it=R(F,(function(){var t=w(B),e=t!==String(B);if(!e&&66===I)return!0;if(u&&!G["finally"])return!0;if(I>=51&&/native code/.test(t))return!1;var n=new B((function(t){t(1)})),r=function(t){t((function(){}),(function(){}))},o=n.constructor={};return o[L]=r,ot=n.then((function(){}))instanceof r,!ot||!e&&D&&!$})),at=it||!O((function(t){B.all(t)["catch"]((function(){}))})),ct=function(t){var e;return!(!h(t)||"function"!=typeof(e=t.then))&&e},ut=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;T((function(){var r=t.value,o=t.state==tt,i=0;while(n.length>i){var a,c,u,f=n[i++],l=o?f.ok:f.fail,s=f.resolve,p=f.reject,d=f.domain;try{l?(o||(t.rejection===rt&&pt(t),t.rejection=nt),!0===l?a=r:(d&&d.enter(),a=l(r),d&&(d.exit(),u=!0)),a===f.promise?p(W("Promise-chain cycle")):(c=ct(a))?c.call(a,s,p):s(a)):p(r)}catch(m){d&&!u&&d.exit(),p(m)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&lt(t)}))}},ft=function(t,e,n){var r,o;X?(r=q.createEvent("Event"),r.promise=e,r.reason=n,r.initEvent(t,!1,!0),f.dispatchEvent(r)):r={promise:e,reason:n},!$&&(o=f["on"+t])?o(r):t===Z&&j("Unhandled promise rejection",n)},lt=function(t){S.call(f,(function(){var e,n=t.facade,r=t.value,o=st(t);if(o&&(e=k((function(){N?Y.emit("unhandledRejection",r,n):ft(Z,n,r)})),t.rejection=N||st(t)?rt:nt,e.error))throw e.value}))},st=function(t){return t.rejection!==nt&&!t.parent},pt=function(t){S.call(f,(function(){var e=t.facade;N?Y.emit("rejectionHandled",e):ft(J,e,t.value)}))},dt=function(t,e,n){return function(r){t(e,r,n)}},mt=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=et,ut(t,!0))},vt=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw W("Promise can't be resolved itself");var r=ct(e);r?T((function(){var n={done:!1};try{r.call(e,dt(vt,n,t),dt(mt,n,t))}catch(o){mt(n,o,t)}})):(t.value=e,t.state=tt,ut(t,!1))}catch(o){mt({done:!1},o,t)}}};if(it&&(B=function(t){g(this,B,F),b(t),r.call(this);var e=C(this);try{t(dt(vt,e),dt(mt,e))}catch(n){mt(e,n)}},G=B.prototype,r=function(t){z(this,{type:F,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:Q,value:void 0})},r.prototype=d(G,{then:function(t,e){var n=U(this),r=K(_(this,B));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=N?Y.domain:void 0,n.parent=!0,n.reactions.push(r),n.state!=Q&&ut(n,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r,e=C(t);this.promise=t,this.resolve=dt(vt,e),this.reject=dt(mt,e)},E.f=K=function(t){return t===B||t===i?new o(t):V(t)},!u&&"function"==typeof s&&H!==Object.prototype)){a=H.then,ot||(p(H,"then",(function(t,e){var n=this;return new B((function(t,e){a.call(n,t,e)})).then(t,e)}),{unsafe:!0}),p(H,"catch",G["catch"],{unsafe:!0}));try{delete H.constructor}catch(yt){}m&&m(H,G)}c({global:!0,wrap:!0,forced:it},{Promise:B}),v(B,F,!1,!0),y(F),i=l(F),c({target:F,stat:!0,forced:it},{reject:function(t){var e=K(this);return e.reject.call(void 0,t),e.promise}}),c({target:F,stat:!0,forced:u||it},{resolve:function(t){return A(u&&this===i?B:this,t)}}),c({target:F,stat:!0,forced:at},{all:function(t){var e=this,n=K(e),r=n.resolve,o=n.reject,i=k((function(){var n=b(e.resolve),i=[],a=0,c=1;x(t,(function(t){var u=a++,f=!1;i.push(void 0),c++,n.call(e,t).then((function(t){f||(f=!0,i[u]=t,--c||r(i))}),o)})),--c||r(i)}));return i.error&&o(i.value),n.promise},race:function(t){var e=this,n=K(e),r=n.reject,o=k((function(){var o=b(e.resolve);x(t,(function(t){o.call(e,t).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},e893:function(t,e,n){var r=n("5135"),o=n("56ef"),i=n("06cf"),a=n("9bf2");t.exports=function(t,e){for(var n=o(e),c=a.f,u=i.f,f=0;f<n.length;f++){var l=n[f];r(t,l)||c(t,l,u(e,l))}}},e95a:function(t,e,n){var r=n("b622"),o=n("3f8c"),i=r("iterator"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||a[i]===t)}},f069:function(t,e,n){"use strict";var r=n("1c0b"),o=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new o(t)}},f5df:function(t,e,n){var r=n("00ee"),o=n("c6b6"),i=n("b622"),a=i("toStringTag"),c="Arguments"==o(function(){return arguments}()),u=function(t,e){try{return t[e]}catch(n){}};t.exports=r?o:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=u(e=Object(t),a))?n:c?o(e):"Object"==(r=o(e))&&"function"==typeof e.callee?"Arguments":r}},f772:function(t,e,n){var r=n("5692"),o=n("90e3"),i=r("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},fc6a:function(t,e,n){var r=n("44ad"),o=n("1d80");t.exports=function(t){return r(o(t))}},fdbf:function(t,e,n){var r=n("4930");t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},fea9:function(t,e,n){var r=n("da84");t.exports=r.Promise}});
+(function(e,n){t.exports=n()})(0,(function(){"use strict";function t(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}var e=Object.hasOwnProperty,n=Object.setPrototypeOf,r=Object.isFrozen,o=Object.getPrototypeOf,i=Object.getOwnPropertyDescriptor,a=Object.freeze,c=Object.seal,u=Object.create,f="undefined"!==typeof Reflect&&Reflect,s=f.apply,l=f.construct;s||(s=function(t,e,n){return t.apply(e,n)}),a||(a=function(t){return t}),c||(c=function(t){return t}),l||(l=function(e,n){return new(Function.prototype.bind.apply(e,[null].concat(t(n))))});var p=O(Array.prototype.forEach),d=O(Array.prototype.pop),m=O(Array.prototype.push),v=O(String.prototype.toLowerCase),h=O(String.prototype.match),y=O(String.prototype.replace),b=O(String.prototype.indexOf),g=O(String.prototype.trim),w=O(RegExp.prototype.test),x=_(TypeError);function O(t){return function(e){for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return s(t,e,r)}}function _(t){return function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];return l(t,n)}}function S(t,e){n&&n(t,null);var o=e.length;while(o--){var i=e[o];if("string"===typeof i){var a=v(i);a!==i&&(r(e)||(e[o]=a),i=a)}t[i]=!0}return t}function T(t){var n=u(null),r=void 0;for(r in t)s(e,t,[r])&&(n[r]=t[r]);return n}function A(t,e){while(null!==t){var n=i(t,e);if(n){if(n.get)return O(n.get);if("function"===typeof n.value)return O(n.value)}t=o(t)}function r(t){return console.warn("fallback value for",t),null}return r}var E=a(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),j=a(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),k=a(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),R=a(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),P=a(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),M=a(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),D=a(["#text"]),N=a(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),I=a(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),L=a(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),F=a(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),C=c(/\{\{[\s\S]*|[\s\S]*\}\}/gm),z=c(/<%[\s\S]*|[\s\S]*%>/gm),U=c(/^data-[\-\w.\u00B7-\uFFFF]/),H=c(/^aria-[\-\w]+$/),B=c(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),G=c(/^(?:\w+script|data):/i),W=c(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function Y(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}var $=function(){return"undefined"===typeof window?null:window},K=function(t,e){if("object"!==("undefined"===typeof t?"undefined":q(t))||"function"!==typeof t.createPolicy)return null;var n=null,r="data-tt-policy-suffix";e.currentScript&&e.currentScript.hasAttribute(r)&&(n=e.currentScript.getAttribute(r));var o="dompurify"+(n?"#"+n:"");try{return t.createPolicy(o,{createHTML:function(t){return t}})}catch(i){return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function V(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:$(),e=function(t){return V(t)};if(e.version="2.3.3",e.removed=[],!t||!t.document||9!==t.document.nodeType)return e.isSupported=!1,e;var n=t.document,r=t.document,o=t.DocumentFragment,i=t.HTMLTemplateElement,c=t.Node,u=t.Element,f=t.NodeFilter,s=t.NamedNodeMap,l=void 0===s?t.NamedNodeMap||t.MozNamedAttrMap:s,O=t.Text,_=t.Comment,X=t.DOMParser,Z=t.trustedTypes,J=u.prototype,Q=A(J,"cloneNode"),tt=A(J,"nextSibling"),et=A(J,"childNodes"),nt=A(J,"parentNode");if("function"===typeof i){var rt=r.createElement("template");rt.content&&rt.content.ownerDocument&&(r=rt.content.ownerDocument)}var ot=K(Z,n),it=ot&&Ft?ot.createHTML(""):"",at=r,ct=at.implementation,ut=at.createNodeIterator,ft=at.createDocumentFragment,st=at.getElementsByTagName,lt=n.importNode,pt={};try{pt=T(r).documentMode?r.documentMode:{}}catch(Oe){}var dt={};e.isSupported="function"===typeof nt&&ct&&"undefined"!==typeof ct.createHTMLDocument&&9!==pt;var mt=C,vt=z,ht=U,yt=H,bt=G,gt=W,wt=B,xt=null,Ot=S({},[].concat(Y(E),Y(j),Y(k),Y(P),Y(D))),_t=null,St=S({},[].concat(Y(N),Y(I),Y(L),Y(F))),Tt=null,At=null,Et=!0,jt=!0,kt=!1,Rt=!1,Pt=!1,Mt=!1,Dt=!1,Nt=!1,It=!1,Lt=!0,Ft=!1,Ct=!0,zt=!0,Ut=!1,Ht={},Bt=null,Gt=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Wt=null,qt=S({},["audio","video","img","source","image","track"]),Yt=null,$t=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Kt="http://www.w3.org/1998/Math/MathML",Vt="http://www.w3.org/2000/svg",Xt="http://www.w3.org/1999/xhtml",Zt=Xt,Jt=!1,Qt=void 0,te=["application/xhtml+xml","text/html"],ee="text/html",ne=void 0,re=null,oe=r.createElement("form"),ie=function(t){re&&re===t||(t&&"object"===("undefined"===typeof t?"undefined":q(t))||(t={}),t=T(t),xt="ALLOWED_TAGS"in t?S({},t.ALLOWED_TAGS):Ot,_t="ALLOWED_ATTR"in t?S({},t.ALLOWED_ATTR):St,Yt="ADD_URI_SAFE_ATTR"in t?S(T($t),t.ADD_URI_SAFE_ATTR):$t,Wt="ADD_DATA_URI_TAGS"in t?S(T(qt),t.ADD_DATA_URI_TAGS):qt,Bt="FORBID_CONTENTS"in t?S({},t.FORBID_CONTENTS):Gt,Tt="FORBID_TAGS"in t?S({},t.FORBID_TAGS):{},At="FORBID_ATTR"in t?S({},t.FORBID_ATTR):{},Ht="USE_PROFILES"in t&&t.USE_PROFILES,Et=!1!==t.ALLOW_ARIA_ATTR,jt=!1!==t.ALLOW_DATA_ATTR,kt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Rt=t.SAFE_FOR_TEMPLATES||!1,Pt=t.WHOLE_DOCUMENT||!1,Nt=t.RETURN_DOM||!1,It=t.RETURN_DOM_FRAGMENT||!1,Lt=!1!==t.RETURN_DOM_IMPORT,Ft=t.RETURN_TRUSTED_TYPE||!1,Dt=t.FORCE_BODY||!1,Ct=!1!==t.SANITIZE_DOM,zt=!1!==t.KEEP_CONTENT,Ut=t.IN_PLACE||!1,wt=t.ALLOWED_URI_REGEXP||wt,Zt=t.NAMESPACE||Xt,Qt=Qt=-1===te.indexOf(t.PARSER_MEDIA_TYPE)?ee:t.PARSER_MEDIA_TYPE,ne="application/xhtml+xml"===Qt?function(t){return t}:v,Rt&&(jt=!1),It&&(Nt=!0),Ht&&(xt=S({},[].concat(Y(D))),_t=[],!0===Ht.html&&(S(xt,E),S(_t,N)),!0===Ht.svg&&(S(xt,j),S(_t,I),S(_t,F)),!0===Ht.svgFilters&&(S(xt,k),S(_t,I),S(_t,F)),!0===Ht.mathMl&&(S(xt,P),S(_t,L),S(_t,F))),t.ADD_TAGS&&(xt===Ot&&(xt=T(xt)),S(xt,t.ADD_TAGS)),t.ADD_ATTR&&(_t===St&&(_t=T(_t)),S(_t,t.ADD_ATTR)),t.ADD_URI_SAFE_ATTR&&S(Yt,t.ADD_URI_SAFE_ATTR),t.FORBID_CONTENTS&&(Bt===Gt&&(Bt=T(Bt)),S(Bt,t.FORBID_CONTENTS)),zt&&(xt["#text"]=!0),Pt&&S(xt,["html","head","body"]),xt.table&&(S(xt,["tbody"]),delete Tt.tbody),a&&a(t),re=t)},ae=S({},["mi","mo","mn","ms","mtext"]),ce=S({},["foreignobject","desc","title","annotation-xml"]),ue=S({},j);S(ue,k),S(ue,R);var fe=S({},P);S(fe,M);var se=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:Xt,tagName:"template"});var n=v(t.tagName),r=v(e.tagName);if(t.namespaceURI===Vt)return e.namespaceURI===Xt?"svg"===n:e.namespaceURI===Kt?"svg"===n&&("annotation-xml"===r||ae[r]):Boolean(ue[n]);if(t.namespaceURI===Kt)return e.namespaceURI===Xt?"math"===n:e.namespaceURI===Vt?"math"===n&&ce[r]:Boolean(fe[n]);if(t.namespaceURI===Xt){if(e.namespaceURI===Vt&&!ce[r])return!1;if(e.namespaceURI===Kt&&!ae[r])return!1;var o=S({},["title","style","font","a","script"]);return!fe[n]&&(o[n]||!ue[n])}return!1},le=function(t){m(e.removed,{element:t});try{t.parentNode.removeChild(t)}catch(Oe){try{t.outerHTML=it}catch(Oe){t.remove()}}},pe=function(t,n){try{m(e.removed,{attribute:n.getAttributeNode(t),from:n})}catch(Oe){m(e.removed,{attribute:null,from:n})}if(n.removeAttribute(t),"is"===t&&!_t[t])if(Nt||It)try{le(n)}catch(Oe){}else try{n.setAttribute(t,"")}catch(Oe){}},de=function(t){var e=void 0,n=void 0;if(Dt)t="<remove></remove>"+t;else{var o=h(t,/^[\r\n\t ]+/);n=o&&o[0]}"application/xhtml+xml"===Qt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");var i=ot?ot.createHTML(t):t;if(Zt===Xt)try{e=(new X).parseFromString(i,Qt)}catch(Oe){}if(!e||!e.documentElement){e=ct.createDocument(Zt,"template",null);try{e.documentElement.innerHTML=Jt?"":i}catch(Oe){}}var a=e.body||e.documentElement;return t&&n&&a.insertBefore(r.createTextNode(n),a.childNodes[0]||null),Zt===Xt?st.call(e,Pt?"html":"body")[0]:Pt?e.documentElement:a},me=function(t){return ut.call(t.ownerDocument||t,t,f.SHOW_ELEMENT|f.SHOW_COMMENT|f.SHOW_TEXT,null,!1)},ve=function(t){return!(t instanceof O||t instanceof _)&&!("string"===typeof t.nodeName&&"string"===typeof t.textContent&&"function"===typeof t.removeChild&&t.attributes instanceof l&&"function"===typeof t.removeAttribute&&"function"===typeof t.setAttribute&&"string"===typeof t.namespaceURI&&"function"===typeof t.insertBefore)},he=function(t){return"object"===("undefined"===typeof c?"undefined":q(c))?t instanceof c:t&&"object"===("undefined"===typeof t?"undefined":q(t))&&"number"===typeof t.nodeType&&"string"===typeof t.nodeName},ye=function(t,n,r){dt[t]&&p(dt[t],(function(t){t.call(e,n,r,re)}))},be=function(t){var n=void 0;if(ye("beforeSanitizeElements",t,null),ve(t))return le(t),!0;if(h(t.nodeName,/[\u0080-\uFFFF]/))return le(t),!0;var r=ne(t.nodeName);if(ye("uponSanitizeElement",t,{tagName:r,allowedTags:xt}),!he(t.firstElementChild)&&(!he(t.content)||!he(t.content.firstElementChild))&&w(/<[/\w]/g,t.innerHTML)&&w(/<[/\w]/g,t.textContent))return le(t),!0;if("select"===r&&w(/<template/i,t.innerHTML))return le(t),!0;if(!xt[r]||Tt[r]){if(zt&&!Bt[r]){var o=nt(t)||t.parentNode,i=et(t)||t.childNodes;if(i&&o)for(var a=i.length,c=a-1;c>=0;--c)o.insertBefore(Q(i[c],!0),tt(t))}return le(t),!0}return t instanceof u&&!se(t)?(le(t),!0):"noscript"!==r&&"noembed"!==r||!w(/<\/no(script|embed)/i,t.innerHTML)?(Rt&&3===t.nodeType&&(n=t.textContent,n=y(n,mt," "),n=y(n,vt," "),t.textContent!==n&&(m(e.removed,{element:t.cloneNode()}),t.textContent=n)),ye("afterSanitizeElements",t,null),!1):(le(t),!0)},ge=function(t,e,n){if(Ct&&("id"===e||"name"===e)&&(n in r||n in oe))return!1;if(jt&&!At[e]&&w(ht,e));else if(Et&&w(yt,e));else{if(!_t[e]||At[e])return!1;if(Yt[e]);else if(w(wt,y(n,gt,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==b(n,"data:")||!Wt[t]){if(kt&&!w(bt,y(n,gt,"")));else if(n)return!1}else;}return!0},we=function(t){var n=void 0,r=void 0,o=void 0,i=void 0;ye("beforeSanitizeAttributes",t,null);var a=t.attributes;if(a){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:_t};i=a.length;while(i--){n=a[i];var u=n,f=u.name,s=u.namespaceURI;if(r=g(n.value),o=ne(f),c.attrName=o,c.attrValue=r,c.keepAttr=!0,c.forceKeepAttr=void 0,ye("uponSanitizeAttribute",t,c),r=c.attrValue,!c.forceKeepAttr&&(pe(f,t),c.keepAttr))if(w(/\/>/i,r))pe(f,t);else{Rt&&(r=y(r,mt," "),r=y(r,vt," "));var l=ne(t.nodeName);if(ge(l,o,r))try{s?t.setAttributeNS(s,f,r):t.setAttribute(f,r),d(e.removed)}catch(Oe){}}}ye("afterSanitizeAttributes",t,null)}},xe=function t(e){var n=void 0,r=me(e);ye("beforeSanitizeShadowDOM",e,null);while(n=r.nextNode())ye("uponSanitizeShadowNode",n,null),be(n)||(n.content instanceof o&&t(n.content),we(n));ye("afterSanitizeShadowDOM",e,null)};return e.sanitize=function(r,i){var a=void 0,u=void 0,f=void 0,s=void 0,l=void 0;if(Jt=!r,Jt&&(r="\x3c!--\x3e"),"string"!==typeof r&&!he(r)){if("function"!==typeof r.toString)throw x("toString is not a function");if(r=r.toString(),"string"!==typeof r)throw x("dirty is not a string, aborting")}if(!e.isSupported){if("object"===q(t.toStaticHTML)||"function"===typeof t.toStaticHTML){if("string"===typeof r)return t.toStaticHTML(r);if(he(r))return t.toStaticHTML(r.outerHTML)}return r}if(Mt||ie(i),e.removed=[],"string"===typeof r&&(Ut=!1),Ut);else if(r instanceof c)a=de("\x3c!----\x3e"),u=a.ownerDocument.importNode(r,!0),1===u.nodeType&&"BODY"===u.nodeName||"HTML"===u.nodeName?a=u:a.appendChild(u);else{if(!Nt&&!Rt&&!Pt&&-1===r.indexOf("<"))return ot&&Ft?ot.createHTML(r):r;if(a=de(r),!a)return Nt?null:it}a&&Dt&&le(a.firstChild);var p=me(Ut?r:a);while(f=p.nextNode())3===f.nodeType&&f===s||be(f)||(f.content instanceof o&&xe(f.content),we(f),s=f);if(s=null,Ut)return r;if(Nt){if(It){l=ft.call(a.ownerDocument);while(a.firstChild)l.appendChild(a.firstChild)}else l=a;return Lt&&(l=lt.call(n,l,!0)),l}var d=Pt?a.outerHTML:a.innerHTML;return Rt&&(d=y(d,mt," "),d=y(d,vt," ")),ot&&Ft?ot.createHTML(d):d},e.setConfig=function(t){ie(t),Mt=!0},e.clearConfig=function(){re=null,Mt=!1},e.isValidAttribute=function(t,e,n){re||ie({});var r=ne(t),o=ne(e);return ge(r,o,n)},e.addHook=function(t,e){"function"===typeof e&&(dt[t]=dt[t]||[],m(dt[t],e))},e.removeHook=function(t){dt[t]&&d(dt[t])},e.removeHooks=function(t){dt[t]&&(dt[t]=[])},e.removeAllHooks=function(){dt={}},e}var X=V();return X}))},c430:function(t,e){t.exports=!1},c6b6:function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},c6cd:function(t,e,n){var r=n("da84"),o=n("ce4e"),i="__core-js_shared__",a=r[i]||o(i,{});t.exports=a},c8d2:function(t,e,n){var r=n("d039"),o=n("5899"),i="​…᠎";t.exports=function(t){return r((function(){return!!o[t]()||i[t]()!=i||o[t].name!==t}))}},ca84:function(t,e,n){var r=n("5135"),o=n("fc6a"),i=n("4d64").indexOf,a=n("d012");t.exports=function(t,e){var n,c=o(t),u=0,f=[];for(n in c)!r(a,n)&&r(c,n)&&f.push(n);while(e.length>u)r(c,n=e[u++])&&(~i(f,n)||f.push(n));return f}},cc12:function(t,e,n){var r=n("da84"),o=n("861d"),i=r.document,a=o(i)&&o(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},cca6:function(t,e,n){var r=n("23e7"),o=n("60da");r({target:"Object",stat:!0,forced:Object.assign!==o},{assign:o})},cdf9:function(t,e,n){var r=n("825a"),o=n("861d"),i=n("f069");t.exports=function(t,e){if(r(t),o(e)&&e.constructor===t)return e;var n=i.f(t),a=n.resolve;return a(e),n.promise}},ce4e:function(t,e,n){var r=n("da84");t.exports=function(t,e){try{Object.defineProperty(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},d012:function(t,e){t.exports={}},d039:function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},d066:function(t,e,n){var r=n("da84"),o=function(t){return"function"==typeof t?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t]):r[t]&&r[t][e]}},d1e7:function(t,e,n){"use strict";var r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!r.call({1:2},1);e.f=i?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},d2bb:function(t,e,n){var r=n("825a"),o=n("3bbe");t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set,t.call(n,[]),e=n instanceof Array}catch(i){}return function(n,i){return r(n),o(i),e?t.call(n,i):n.__proto__=i,n}}():void 0)},d44e:function(t,e,n){var r=n("9bf2").f,o=n("5135"),i=n("b622"),a=i("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,a)&&r(t,a,{configurable:!0,value:e})}},d4c3:function(t,e,n){var r=n("342f"),o=n("da84");t.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==o.Pebble},d9b5:function(t,e,n){var r=n("d066"),o=n("fdbf");t.exports=o?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return"function"==typeof e&&Object(t)instanceof e}},da84:function(t,e,n){(function(e){var n=function(t){return t&&t.Math==Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,n("24aa"))},df75:function(t,e,n){var r=n("ca84"),o=n("7839");t.exports=Object.keys||function(t){return r(t,o)}},e163:function(t,e,n){var r=n("5135"),o=n("7b0b"),i=n("f772"),a=n("e177"),c=i("IE_PROTO"),u=Object.prototype;t.exports=a?Object.getPrototypeOf:function(t){return t=o(t),r(t,c)?t[c]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},e177:function(t,e,n){var r=n("d039");t.exports=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},e260:function(t,e,n){"use strict";var r=n("fc6a"),o=n("44d2"),i=n("3f8c"),a=n("69f3"),c=n("7dd0"),u="Array Iterator",f=a.set,s=a.getterFor(u);t.exports=c(Array,"Array",(function(t,e){f(this,{type:u,target:r(t),index:0,kind:e})}),(function(){var t=s(this),e=t.target,n=t.kind,r=t.index++;return!e||r>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:e[r],done:!1}:{value:[r,e[r]],done:!1}}),"values"),i.Arguments=i.Array,o("keys"),o("values"),o("entries")},e2cc:function(t,e,n){var r=n("6eeb");t.exports=function(t,e,n){for(var o in e)r(t,o,e[o],n);return t}},e667:function(t,e){t.exports=function(t){try{return{error:!1,value:t()}}catch(e){return{error:!0,value:e}}}},e6cf:function(t,e,n){"use strict";var r,o,i,a,c=n("23e7"),u=n("c430"),f=n("da84"),s=n("d066"),l=n("fea9"),p=n("6eeb"),d=n("e2cc"),m=n("d2bb"),v=n("d44e"),h=n("2626"),y=n("861d"),b=n("1c0b"),g=n("19aa"),w=n("8925"),x=n("2266"),O=n("1c7e"),_=n("4840"),S=n("2cf4").set,T=n("b575"),A=n("cdf9"),E=n("44de"),j=n("f069"),k=n("e667"),R=n("69f3"),P=n("94ca"),M=n("b622"),D=n("6069"),N=n("605d"),I=n("2d00"),L=M("species"),F="Promise",C=R.get,z=R.set,U=R.getterFor(F),H=l&&l.prototype,B=l,G=H,W=f.TypeError,q=f.document,Y=f.process,$=j.f,K=$,V=!!(q&&q.createEvent&&f.dispatchEvent),X="function"==typeof PromiseRejectionEvent,Z="unhandledrejection",J="rejectionhandled",Q=0,tt=1,et=2,nt=1,rt=2,ot=!1,it=P(F,(function(){var t=w(B),e=t!==String(B);if(!e&&66===I)return!0;if(u&&!G["finally"])return!0;if(I>=51&&/native code/.test(t))return!1;var n=new B((function(t){t(1)})),r=function(t){t((function(){}),(function(){}))},o=n.constructor={};return o[L]=r,ot=n.then((function(){}))instanceof r,!ot||!e&&D&&!X})),at=it||!O((function(t){B.all(t)["catch"]((function(){}))})),ct=function(t){var e;return!(!y(t)||"function"!=typeof(e=t.then))&&e},ut=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;T((function(){var r=t.value,o=t.state==tt,i=0;while(n.length>i){var a,c,u,f=n[i++],s=o?f.ok:f.fail,l=f.resolve,p=f.reject,d=f.domain;try{s?(o||(t.rejection===rt&&pt(t),t.rejection=nt),!0===s?a=r:(d&&d.enter(),a=s(r),d&&(d.exit(),u=!0)),a===f.promise?p(W("Promise-chain cycle")):(c=ct(a))?c.call(a,l,p):l(a)):p(r)}catch(m){d&&!u&&d.exit(),p(m)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&st(t)}))}},ft=function(t,e,n){var r,o;V?(r=q.createEvent("Event"),r.promise=e,r.reason=n,r.initEvent(t,!1,!0),f.dispatchEvent(r)):r={promise:e,reason:n},!X&&(o=f["on"+t])?o(r):t===Z&&E("Unhandled promise rejection",n)},st=function(t){S.call(f,(function(){var e,n=t.facade,r=t.value,o=lt(t);if(o&&(e=k((function(){N?Y.emit("unhandledRejection",r,n):ft(Z,n,r)})),t.rejection=N||lt(t)?rt:nt,e.error))throw e.value}))},lt=function(t){return t.rejection!==nt&&!t.parent},pt=function(t){S.call(f,(function(){var e=t.facade;N?Y.emit("rejectionHandled",e):ft(J,e,t.value)}))},dt=function(t,e,n){return function(r){t(e,r,n)}},mt=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=et,ut(t,!0))},vt=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw W("Promise can't be resolved itself");var r=ct(e);r?T((function(){var n={done:!1};try{r.call(e,dt(vt,n,t),dt(mt,n,t))}catch(o){mt(n,o,t)}})):(t.value=e,t.state=tt,ut(t,!1))}catch(o){mt({done:!1},o,t)}}};if(it&&(B=function(t){g(this,B,F),b(t),r.call(this);var e=C(this);try{t(dt(vt,e),dt(mt,e))}catch(n){mt(e,n)}},G=B.prototype,r=function(t){z(this,{type:F,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:Q,value:void 0})},r.prototype=d(G,{then:function(t,e){var n=U(this),r=$(_(this,B));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=N?Y.domain:void 0,n.parent=!0,n.reactions.push(r),n.state!=Q&&ut(n,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r,e=C(t);this.promise=t,this.resolve=dt(vt,e),this.reject=dt(mt,e)},j.f=$=function(t){return t===B||t===i?new o(t):K(t)},!u&&"function"==typeof l&&H!==Object.prototype)){a=H.then,ot||(p(H,"then",(function(t,e){var n=this;return new B((function(t,e){a.call(n,t,e)})).then(t,e)}),{unsafe:!0}),p(H,"catch",G["catch"],{unsafe:!0}));try{delete H.constructor}catch(ht){}m&&m(H,G)}c({global:!0,wrap:!0,forced:it},{Promise:B}),v(B,F,!1,!0),h(F),i=s(F),c({target:F,stat:!0,forced:it},{reject:function(t){var e=$(this);return e.reject.call(void 0,t),e.promise}}),c({target:F,stat:!0,forced:u||it},{resolve:function(t){return A(u&&this===i?B:this,t)}}),c({target:F,stat:!0,forced:at},{all:function(t){var e=this,n=$(e),r=n.resolve,o=n.reject,i=k((function(){var n=b(e.resolve),i=[],a=0,c=1;x(t,(function(t){var u=a++,f=!1;i.push(void 0),c++,n.call(e,t).then((function(t){f||(f=!0,i[u]=t,--c||r(i))}),o)})),--c||r(i)}));return i.error&&o(i.value),n.promise},race:function(t){var e=this,n=$(e),r=n.reject,o=k((function(){var o=b(e.resolve);x(t,(function(t){o.call(e,t).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}})},e893:function(t,e,n){var r=n("5135"),o=n("56ef"),i=n("06cf"),a=n("9bf2");t.exports=function(t,e){for(var n=o(e),c=a.f,u=i.f,f=0;f<n.length;f++){var s=n[f];r(t,s)||c(t,s,u(e,s))}}},e95a:function(t,e,n){var r=n("b622"),o=n("3f8c"),i=r("iterator"),a=Array.prototype;t.exports=function(t){return void 0!==t&&(o.Array===t||a[i]===t)}},f069:function(t,e,n){"use strict";var r=n("1c0b"),o=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=r(e),this.reject=r(n)};t.exports.f=function(t){return new o(t)}},f5df:function(t,e,n){var r=n("00ee"),o=n("c6b6"),i=n("b622"),a=i("toStringTag"),c="Arguments"==o(function(){return arguments}()),u=function(t,e){try{return t[e]}catch(n){}};t.exports=r?o:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=u(e=Object(t),a))?n:c?o(e):"Object"==(r=o(e))&&"function"==typeof e.callee?"Arguments":r}},f772:function(t,e,n){var r=n("5692"),o=n("90e3"),i=r("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},fc6a:function(t,e,n){var r=n("44ad"),o=n("1d80");t.exports=function(t){return r(o(t))}},fdbf:function(t,e,n){var r=n("4930");t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},fea9:function(t,e,n){var r=n("da84");t.exports=r.Promise}});
//# sourceMappingURL=MatomoPolyfills.min.js.map \ No newline at end of file
diff --git a/plugins/CoreVue/polyfills/src/index.ts b/plugins/CoreVue/polyfills/src/index.ts
index 4260f6030d..3d14990f66 100644
--- a/plugins/CoreVue/polyfills/src/index.ts
+++ b/plugins/CoreVue/polyfills/src/index.ts
@@ -12,7 +12,8 @@
import DOMPurify from 'dompurify';
import * as tslib from 'tslib';
-window['tslib'] = tslib;
+window.tslib = tslib;
window.vueSanitize = DOMPurify.sanitize.bind(DOMPurify);
+import './jqueryNativeEventTrigger';
diff --git a/plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts b/plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts
new file mode 100644
index 0000000000..09057159d7
--- /dev/null
+++ b/plugins/CoreVue/polyfills/src/jqueryNativeEventTrigger.ts
@@ -0,0 +1,53 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+const oldTrigger = window.$.fn.trigger;
+
+function triggerWithNativeEventDispatch(jqEventOrType, data) {
+ function nativeDispatch(element: HTMLElement) {
+ const type = jqEventOrType.type || jqEventOrType;
+ const onEventAttributeName = `on${type}`;
+
+ if (element[onEventAttributeName]
+ || element[type] instanceof Function
+ ) {
+ // if a on... (eg, onchange) handler is specified, it will be triggered by jquery.
+ // it will also be triggered by addEventListener, and we don't want that so just
+ // assume there is no addEventListener event.
+ return;
+ }
+
+ // eslint-disable-next-line
+ if (((window.$._data(element, 'events') || {}) as any)[type] && window.$._data(element, 'handle')) {
+ // there is an event handler in jquery private data, assume this was handled.
+ return;
+ }
+
+ if (element.dispatchEvent) {
+ const event = new Event(type, {
+ // do not rely on browser bubbling so we can keep checking for the on... attribute
+ bubbles: false,
+ cancelable: true,
+ });
+ element.dispatchEvent(event);
+ }
+
+ const parent = element.parentElement;
+ if (parent) {
+ nativeDispatch(parent);
+ }
+ }
+
+ const result = oldTrigger.call(this, jqEventOrType, data);
+ this.each(function onEach() {
+ nativeDispatch(this);
+ });
+
+ return result;
+}
+
+window.$.fn.trigger = triggerWithNativeEventDispatch;
diff --git a/plugins/CoreVue/types/index.d.ts b/plugins/CoreVue/types/index.d.ts
index cb9ac2d5df..a8a3dda00c 100644
--- a/plugins/CoreVue/types/index.d.ts
+++ b/plugins/CoreVue/types/index.d.ts
@@ -70,7 +70,7 @@ declare global {
escape(text: string): string;
redirect(params: any);
htmlDecode(encoded: string): string;
- modalConfirm(element: JQuery|JQLite|HTMLElement|string, callbacks: ModalConfirmCallbacks, options: ModalConfirmOptions);
+ modalConfirm(element: JQuery|JQLite|HTMLElement|string, callbacks?: ModalConfirmCallbacks, options?: ModalConfirmOptions);
getAngularDependency(eventName: string): any;
isAngularRenderingThePage(): boolean;
setMarginLeftToBeInViewport(elementToPosition: JQuery|JQLite|HTMLElement|string);
@@ -142,6 +142,7 @@ declare global {
broadcast: BroadcastGlobal;
hasBlockedContent: boolean;
piwik_translations: {[key: string]: string};
+ Materialize: M;
_pk_translate(translationStringId: string, values: string[]): string;
require(p: string): any;
diff --git a/plugins/IntranetMeasurable/tests/UI/IntranetMeasurable_spec.js b/plugins/IntranetMeasurable/tests/UI/IntranetMeasurable_spec.js
index 46063f9108..ab0d7bf3ce 100644
--- a/plugins/IntranetMeasurable/tests/UI/IntranetMeasurable_spec.js
+++ b/plugins/IntranetMeasurable/tests/UI/IntranetMeasurable_spec.js
@@ -48,6 +48,7 @@ describe("IntranetMeasurable", function () {
it("should load intranet specific fields", async function () {
await page.type('.editingSite [placeholder="Name"]', 'My intranet');
await page.type('.editingSite [name="urls"]', 'https://www.example.com');
+ await page.waitForTimeout(250);
await page.click('.editingSiteFooter input.btn');
await page.waitForNetworkIdle();
@@ -55,4 +56,4 @@ describe("IntranetMeasurable", function () {
expect(await pageWrap.screenshot()).to.matchImage('intranet_created');
});
-}); \ No newline at end of file
+});
diff --git a/plugins/Marketplace/angularjs/marketplace/marketplace.controller.js b/plugins/Marketplace/angularjs/marketplace/marketplace.controller.js
index b678f1fcf4..adc146beb4 100644
--- a/plugins/Marketplace/angularjs/marketplace/marketplace.controller.js
+++ b/plugins/Marketplace/angularjs/marketplace/marketplace.controller.js
@@ -20,4 +20,4 @@
piwik.broadcast.propagateNewPage('query=&show=' + this.pluginType);
};
}
-})(); \ No newline at end of file
+})();
diff --git a/plugins/Marketplace/tests/UI/Marketplace_spec.js b/plugins/Marketplace/tests/UI/Marketplace_spec.js
index a0abe6df0f..de38c7f32d 100644
--- a/plugins/Marketplace/tests/UI/Marketplace_spec.js
+++ b/plugins/Marketplace/tests/UI/Marketplace_spec.js
@@ -202,6 +202,7 @@ describe("Marketplace", function () {
await page.goto(pluginsUrl);
await page.type('#license_key', 'invalid');
+ await page.waitForTimeout(200);
await page.click('.marketplace-paid-intro'); // click outside so change event is triggered
await page.click('#submit_license_key input');
await page.waitForNetworkIdle();
@@ -233,6 +234,7 @@ describe("Marketplace", function () {
await page.goto(pluginsUrl);
await page.type('#license_key', 'valid');
+ await page.waitForTimeout(200);
setEnvironment(mode, validLicense);
await page.click('#submit_license_key input');
diff --git a/plugins/Morpheus/templates/demo.twig b/plugins/Morpheus/templates/demo.twig
index 085f030a7c..e5f6d4957f 100644
--- a/plugins/Morpheus/templates/demo.twig
+++ b/plugins/Morpheus/templates/demo.twig
@@ -435,7 +435,7 @@
data-title="Select field array"
value='["one", "two"]'
inline-help="Multiple selects"
- ui-control-attributes='{"field":{"title":"Index","uiControl":"select","availableValues":{"one":"text onw", "two":"text two", "three":"text three"}}}'>
+ ui-control-attributes='{"field":{"title":"Index","uiControl":"select","availableValues":{"one":"text one", "two":"text two", "three":"text three"}}}'>
</div>
<div piwik-field uicontrol="checkbox" name="enableFeature"
diff --git a/plugins/Morpheus/tests/UI/expected-screenshots/Morpheus_load.png b/plugins/Morpheus/tests/UI/expected-screenshots/Morpheus_load.png
index 3ae46276db..faf3bd63a1 100644
--- a/plugins/Morpheus/tests/UI/expected-screenshots/Morpheus_load.png
+++ b/plugins/Morpheus/tests/UI/expected-screenshots/Morpheus_load.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9781aab6bafa5926298983370a330b632e911ee564cecf9d0be0cb9e00789ced
-size 1672310
+oid sha256:0f458b527e21cf7df95d57675977be9dc849628962d70d63c86d6246e26e43de
+size 1672113
diff --git a/plugins/PrivacyManager/tests/UI/PrivacyManager_spec.js b/plugins/PrivacyManager/tests/UI/PrivacyManager_spec.js
index 6e4410867a..75a7fb496a 100644
--- a/plugins/PrivacyManager/tests/UI/PrivacyManager_spec.js
+++ b/plugins/PrivacyManager/tests/UI/PrivacyManager_spec.js
@@ -29,7 +29,7 @@ describe("PrivacyManager", function () {
$('input.anonymizeEndDate').val('2018-03-02').change();
});
}
-
+
async function loadActionPage(action)
{
await page.goto(urlBase + action);
@@ -73,6 +73,7 @@ describe("PrivacyManager", function () {
$(this).val(theVal).change();
});
}, value);
+ await page.waitForTimeout(100);
}
async function selectVisitColumn(title)
@@ -92,9 +93,11 @@ describe("PrivacyManager", function () {
await page.evaluate(function () {
$('.selectedActionColumns:last input.select-dropdown').click();
});
+ await page.waitForTimeout(100);
await page.evaluate(theTitle => {
$('.selectedActionColumns:last .dropdown-content li:contains(' + theTitle + ')').click();
}, title);
+ await page.waitForTimeout(100);
}
async function capturePage(screenshotName) {
@@ -207,6 +210,7 @@ describe("PrivacyManager", function () {
$('input.anonymizeStartDate').val('2017-01-01').change();
$('input.anonymizeEndDate').val('2017-02-14').change();
});
+ await page.waitForTimeout(100);
await captureAnonymizeLogData('anonymizelogdata_one_site_and_custom_date_prefilled');
});
@@ -294,4 +298,4 @@ describe("PrivacyManager", function () {
await capturePage('gdpr_tools_delete_visit_confirmed');
});
-}); \ No newline at end of file
+});
diff --git a/plugins/Referrers/tests/UI/CampaignBuilder_spec.js b/plugins/Referrers/tests/UI/CampaignBuilder_spec.js
index 2220ec39ba..57c2a46d31 100644
--- a/plugins/Referrers/tests/UI/CampaignBuilder_spec.js
+++ b/plugins/Referrers/tests/UI/CampaignBuilder_spec.js
@@ -64,4 +64,4 @@ describe("CampaignBuilder", function () {
await generateUrl();
});
});
-}); \ No newline at end of file
+});
diff --git a/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js b/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js
index 4dd1ee6114..4d584960a2 100644
--- a/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js
+++ b/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js
@@ -262,4 +262,4 @@
this.showListOfReports(false);
}
-})(); \ No newline at end of file
+})();
diff --git a/plugins/Transitions/tests/UI/Transitions_spec.js b/plugins/Transitions/tests/UI/Transitions_spec.js
index 4e0d716d09..a3cb8208cd 100644
--- a/plugins/Transitions/tests/UI/Transitions_spec.js
+++ b/plugins/Transitions/tests/UI/Transitions_spec.js
@@ -13,7 +13,6 @@ describe("Transitions", function () {
var generalParams = 'idSite=1&period=year&date=2012-08-09',
urlBase = 'module=CoreHome&action=index&' + generalParams;
-
async function selectValue(field, title)
{
await page.webpage.evaluate((field) => {
@@ -96,6 +95,4 @@ describe("Transitions", function () {
testEnvironment.overrideConfig('Transitions_1', 'max_period_allowed', 'all');
testEnvironment.save();
});
-
-
});
diff --git a/plugins/UsersManager/angularjs/paged-users-list/paged-users-list.component.less b/plugins/UsersManager/angularjs/paged-users-list/paged-users-list.component.less
index c36d8da4cd..c8e263d2d6 100644
--- a/plugins/UsersManager/angularjs/paged-users-list/paged-users-list.component.less
+++ b/plugins/UsersManager/angularjs/paged-users-list/paged-users-list.component.less
@@ -2,9 +2,8 @@ piwik-paged-users-list {
display: block;
position: relative;
- [piwik-siteselector] {
+ .siteSelector {
display: inline-block;
- margin-left: .3rem;
}
.dropdown-content li > span {
@@ -116,10 +115,10 @@ piwik-paged-users-list {
padding: 0;
}
- .form-group, [piwik-form-field] .input-field {
+ .form-group, .form-group .input-field {
margin: 0;
}
- [piwik-form-field] input {
+ .form-group input {
margin-bottom: 0;
}
diff --git a/plugins/UsersManager/tests/UI/UsersManager_spec.js b/plugins/UsersManager/tests/UI/UsersManager_spec.js
index f8d41e6f46..e53e654cd3 100644
--- a/plugins/UsersManager/tests/UI/UsersManager_spec.js
+++ b/plugins/UsersManager/tests/UI/UsersManager_spec.js
@@ -556,6 +556,7 @@ describe("UsersManager", function () {
it('should allow editing user permissions for admin users', async function () {
await page.click('.userEditForm .menuPermissions');
+ await page.mouse.move(-10, -10);
expect(await page.screenshotSelector('.usersManager')).to.matchImage('admin_edit_permissions');
});
diff --git a/tests/PHPUnit/Integration/ReleaseCheckListTest.php b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
index 5a99f19a5b..47ecd95958 100644
--- a/tests/PHPUnit/Integration/ReleaseCheckListTest.php
+++ b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
@@ -1075,6 +1075,7 @@ class ReleaseCheckListTest extends \PHPUnit\Framework\TestCase
|| strpos($file, 'node_modules/') !== false
|| strpos($file, 'vendor/mayflower/mo4-coding-standard/') !== false
|| strpos($file, 'vendor/symfony/polyfill-iconv/') !== false
+ || strpos($file, 'plugins/CoreVue/polyfills/dist/MatomoPolyfills.min.js') !== false
|| strpos($file, 'plugins/VisitorGenerator/vendor/fzaninotto/faker/src/Faker/Provider/') !== false) {
continue;
}
diff --git a/tests/UI/expected-screenshots/Theme_demo.png b/tests/UI/expected-screenshots/Theme_demo.png
index 04d0a716e8..34169ba256 100644
--- a/tests/UI/expected-screenshots/Theme_demo.png
+++ b/tests/UI/expected-screenshots/Theme_demo.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:27a560f7cc0d0ae8b486cd2174173aeba9c9831b0ff9b2fa92eecf519b98ac0f
-size 1672370
+oid sha256:43685c811b492c8566056d1fd532853c383e33eba41b810620c19aac86d837ac
+size 1672106
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png
index 3c4a8688d6..a47ee9174b 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0f90c81de61a11dc755c1ec572feece95cf5cec7f4dc67b7bf2e17c2a4a81802
-size 120238
+oid sha256:a210ad533741772461a36c3b1b1379d6e27e4e18c7399f2131bc953fc839281b
+size 120233
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png
index 64b57438f6..91034e2299 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_email_reports_editor.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cd32eb0a526a62a4fd85c637f0a35f159f42b638cdf9997206d217f30c8c5cfb
-size 477041
+oid sha256:c914006f7cd524b75795688ce7dd4a29f20251e40fa199eeb82f6a2bed142d2c
+size 481387
diff --git a/tests/UI/specs/PieGraph_spec.js b/tests/UI/specs/PieGraph_spec.js
index 070d79d587..7e9e65edac 100644
--- a/tests/UI/specs/PieGraph_spec.js
+++ b/tests/UI/specs/PieGraph_spec.js
@@ -38,4 +38,4 @@ describe("PieGraph", function () {
expect(await page.screenshot({ fullPage: true })).to.matchImage('other_metric');
});
-}); \ No newline at end of file
+});
diff --git a/tests/UI/specs/ReportExporting_spec.js b/tests/UI/specs/ReportExporting_spec.js
index 7d03a1eb40..d0971dcd37 100644
--- a/tests/UI/specs/ReportExporting_spec.js
+++ b/tests/UI/specs/ReportExporting_spec.js
@@ -26,6 +26,7 @@ describe("ReportExporting", function () {
await page.evaluate(function () {
$('[name=filter_limit] input').val(100).trigger('change');
});
+ await page.waitForTimeout(250);
var url = await page.evaluate(function () {
return $('#reportExport a.btn').attr('href');
@@ -50,6 +51,7 @@ describe("ReportExporting", function () {
await page.evaluate(function(){
$('[name=filter_limit] input').val(100).trigger('change');
});
+ await page.waitForTimeout(250);
var url = await page.evaluate(function() {
return $('#reportExport a.btn').attr('href');
@@ -84,6 +86,7 @@ describe("ReportExporting", function () {
await page.evaluate(function(){
$('[name=filter_limit] input').val(100).trigger('change');
});
+ await page.waitForTimeout(250);
var url = await page.evaluate(function() {
return $('#reportExport a.btn').attr('href');
@@ -98,4 +101,4 @@ describe("ReportExporting", function () {
formats.forEach(normalReportTest);
formats.forEach(evolutionReportTest);
formats.forEach(rowEvolutionReportTest);
-}); \ No newline at end of file
+});
diff --git a/tests/UI/specs/SiteSelector_spec.js b/tests/UI/specs/SiteSelector_spec.js
index 68bc8e25d8..2aff9454d5 100644
--- a/tests/UI/specs/SiteSelector_spec.js
+++ b/tests/UI/specs/SiteSelector_spec.js
@@ -60,7 +60,8 @@ describe("SiteSelector", function () {
elem = await page.jQuery(".custom_select_ul_list>li:visible");
elem.click();
await page.waitForNetworkIdle();
+ await page.waitForTimeout(200);
expect(await page.screenshotSelector(selectorToCapture)).to.matchImage('site_selected');
});
-}); \ No newline at end of file
+});
diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js
index 9cbf89757c..a2286ac74f 100644
--- a/tests/UI/specs/UIIntegration_spec.js
+++ b/tests/UI/specs/UIIntegration_spec.js
@@ -815,7 +815,7 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
it('should switch the SMS provider correctly', async function () {
await page.evaluate(function () {
- $('[name=smsProviders] ul li:nth-child(3)').click();
+ $('[name=smsProviders] ul li:nth-child(2)').click();
});
pageWrap = await page.$('.pageWrap');
diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js
index 1c4abe09a0..1564fe225e 100644
--- a/tests/lib/screenshot-testing/support/page-renderer.js
+++ b/tests/lib/screenshot-testing/support/page-renderer.js
@@ -55,7 +55,6 @@ const PAGE_METHODS_TO_PROXY = [
'tap',
'target',
'title',
- 'type',
'url',
'viewport',
'waitForFunction',
@@ -121,14 +120,19 @@ PageRenderer.prototype._reset = function () {
PageRenderer.prototype.waitFor = function (selectorOrTimeoutOrFunction) {
console.log('Using page.waitFor is deprecated, please use one of this instead: waitForSelector, waitForFunction, waitForTimeout');
if (typeof selectorOrTimeoutOrFunction === 'function') {
- this.webpage.waitForFunction(selectorOrTimeoutOrFunction)
+ return this.webpage.waitForFunction(selectorOrTimeoutOrFunction)
} else if (typeof selectorOrTimeoutOrFunction === 'number') {
- this.webpage.waitForTimeout(selectorOrTimeoutOrFunction)
+ return this.webpage.waitForTimeout(selectorOrTimeoutOrFunction)
} else if (typeof selectorOrTimeoutOrFunction === 'string') {
- this.webpage.waitForSelector(selectorOrTimeoutOrFunction)
+ return this.webpage.waitForSelector(selectorOrTimeoutOrFunction)
}
}
+PageRenderer.prototype.type = async function (...args) {
+ await this.webpage.type(...args);
+ await this.waitForTimeout(50); // puppeteer types faster than vue can update the model state
+};
+
PageRenderer.prototype.isVisible = function (selector) {
return this.webpage.evaluate(() => {
return jQuery(selector).is(':visible');
@@ -490,7 +494,9 @@ PageRenderer.prototype._setupWebpageEvents = function () {
return arg.stack || arg.message;
}
return arg;
- }, arg)));
+ }, arg))).catch((e) => {
+ console.log(`Could not print message: ${e.message}`);
+ });
const message = args.join(' ');
this._logMessage(`Log: ${message}`);
});