From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/pybind/mgr/dashboard/frontend/.browserslistrc | 11 + src/pybind/mgr/dashboard/frontend/.editorconfig | 13 + src/pybind/mgr/dashboard/frontend/.gherkin-lintrc | 33 + src/pybind/mgr/dashboard/frontend/.gitignore | 49 + src/pybind/mgr/dashboard/frontend/.htmllintrc | 70 + src/pybind/mgr/dashboard/frontend/.npmrc | 2 + src/pybind/mgr/dashboard/frontend/.prettierignore | 1 + src/pybind/mgr/dashboard/frontend/.prettierrc | 6 + src/pybind/mgr/dashboard/frontend/.stylelintrc | 43 + src/pybind/mgr/dashboard/frontend/angular.json | 227 + .../mgr/dashboard/frontend/applitools.config.js | 21 + src/pybind/mgr/dashboard/frontend/babel.config.js | 11 + src/pybind/mgr/dashboard/frontend/cd.js | 166 + src/pybind/mgr/dashboard/frontend/cypress.json | 22 + .../cypress/fixtures/block-rbd-status.json | 1 + .../cypress/fixtures/nfs-ganesha-status.json | 4 + .../cypress/fixtures/orchestrator/inventory.json | 390 + .../cypress/fixtures/orchestrator/services.json | 523 + .../frontend/cypress/fixtures/rgw-status.json | 1 + .../cypress/integration/block/images.e2e-spec.ts | 95 + .../cypress/integration/block/images.po.ts | 110 + .../cypress/integration/block/iscsi.e2e-spec.ts | 25 + .../frontend/cypress/integration/block/iscsi.po.ts | 7 + .../integration/block/mirroring.e2e-spec.ts | 54 + .../cypress/integration/block/mirroring.po.ts | 35 + .../integration/cluster/configuration.e2e-spec.ts | 78 + .../integration/cluster/configuration.po.ts | 75 + .../integration/cluster/create-cluster.po.ts | 56 + .../integration/cluster/crush-map.e2e-spec.ts | 37 + .../cypress/integration/cluster/crush-map.po.ts | 13 + .../cypress/integration/cluster/hosts.e2e-spec.ts | 35 + .../cypress/integration/cluster/hosts.po.ts | 184 + .../cypress/integration/cluster/inventory.po.ts | 22 + .../cypress/integration/cluster/logs.e2e-spec.ts | 58 + .../cypress/integration/cluster/logs.po.ts | 70 + .../integration/cluster/mgr-modules.e2e-spec.ts | 78 + .../cypress/integration/cluster/mgr-modules.po.ts | 57 + .../integration/cluster/monitors.e2e-spec.ts | 62 + .../cypress/integration/cluster/monitors.po.ts | 7 + .../cypress/integration/cluster/osds.e2e-spec.ts | 57 + .../cypress/integration/cluster/osds.po.ts | 84 + .../cypress/integration/cluster/services.po.ts | 204 + .../integration/common/01-global.feature.po.ts | 188 + .../create-cluster/create-cluster.feature.po.ts | 12 + .../integration/common/grafana.feature.po.ts | 86 + .../frontend/cypress/integration/common/urls.po.ts | 44 + .../filesystems/filesystems.e2e-spec.ts | 17 + .../integration/filesystems/filesystems.po.ts | 5 + .../integration/orchestrator/01-hosts.e2e-spec.ts | 86 + .../orchestrator/03-inventory.e2e-spec.ts | 26 + .../integration/orchestrator/04-osds.e2e-spec.ts | 50 + .../orchestrator/05-services.e2e-spec.ts | 36 + .../orchestrator/grafana/grafana.feature | 63 + .../workflow/01-create-cluster-welcome.feature | 26 + .../workflow/02-create-cluster-add-host.feature | 74 + .../03-create-cluster-create-services.e2e-spec.ts | 47 + .../04-create-cluster-create-osds.e2e-spec.ts | 41 + .../workflow/05-create-cluster-review.e2e-spec.ts | 67 + .../workflow/06-cluster-check.e2e-spec.ts | 99 + .../orchestrator/workflow/07-osds.e2e-spec.ts | 24 + .../orchestrator/workflow/08-hosts.e2e-spec.ts | 49 + .../orchestrator/workflow/09-services.e2e-spec.ts | 114 + .../workflow/10-nfs-exports.e2e-spec.ts | 83 + .../orchestrator/workflow/nfs/nfs-export.po.ts | 52 + .../frontend/cypress/integration/page-helper.po.ts | 309 + .../cypress/integration/pools/pools.e2e-spec.ts | 54 + .../frontend/cypress/integration/pools/pools.po.ts | 70 + .../cypress/integration/rgw/buckets.e2e-spec.ts | 62 + .../frontend/cypress/integration/rgw/buckets.po.ts | 193 + .../cypress/integration/rgw/daemons.e2e-spec.ts | 35 + .../frontend/cypress/integration/rgw/daemons.po.ts | 34 + .../cypress/integration/rgw/users.e2e-spec.ts | 46 + .../frontend/cypress/integration/rgw/users.po.ts | 139 + .../cypress/integration/ui/api-docs.e2e-spec.ts | 15 + .../frontend/cypress/integration/ui/api-docs.po.ts | 5 + .../cypress/integration/ui/dashboard.e2e-spec.ts | 124 + .../cypress/integration/ui/dashboard.po.ts | 31 + .../cypress/integration/ui/language.e2e-spec.ts | 20 + .../frontend/cypress/integration/ui/language.po.ts | 15 + .../cypress/integration/ui/login.e2e-spec.ts | 17 + .../frontend/cypress/integration/ui/login.po.ts | 22 + .../cypress/integration/ui/navigation.e2e-spec.ts | 24 + .../cypress/integration/ui/navigation.po.ts | 69 + .../integration/ui/notification.e2e-spec.ts | 59 + .../cypress/integration/ui/notification.po.ts | 45 + .../cypress/integration/ui/role-mgmt.e2e-spec.ts | 37 + .../cypress/integration/ui/role-mgmt.po.ts | 40 + .../cypress/integration/ui/user-mgmt.e2e-spec.ts | 37 + .../cypress/integration/ui/user-mgmt.po.ts | 39 + .../integration/visualTests/dashboard.vrt-spec.ts | 22 + .../integration/visualTests/login.vrt-spec.ts | 19 + .../dashboard/frontend/cypress/plugins/index.js | 26 + .../dashboard/frontend/cypress/support/commands.ts | 59 + .../frontend/cypress/support/eyes-index.d.ts | 1 + .../dashboard/frontend/cypress/support/index.ts | 11 + .../mgr/dashboard/frontend/cypress/tsconfig.json | 16 + .../dist/en-US/117.9781bbf8cc6a4aaa7e8e.js | 1 + .../dist/en-US/281.0d0cd268ddc6a6760dd4.js | 1 + .../frontend/dist/en-US/3rdpartylicenses.txt | 3508 +++ .../dist/en-US/483.f42c1d67e206231ecdac.js | 1 + .../dist/en-US/Ceph_Logo.487a0001b327fa7f5232.svg | 71 + .../assets/Ceph_Ceph_Logo_with_text_red_white.svg | 69 + .../assets/Ceph_Ceph_Logo_with_text_white.svg | 69 + .../frontend/dist/en-US/assets/Ceph_Logo.svg | 71 + .../frontend/dist/en-US/assets/ceph_background.gif | Bin 0 -> 98115 bytes .../frontend/dist/en-US/assets/loading.gif | Bin 0 -> 35386 bytes .../frontend/dist/en-US/assets/logo-mini.png | Bin 0 -> 1811 bytes .../frontend/dist/en-US/assets/prometheus_logo.svg | 50 + .../en-US/ceph_background.e82dd79127290ddbe8cb.gif | Bin 0 -> 98115 bytes .../mgr/dashboard/frontend/dist/en-US/favicon.ico | Bin 0 -> 1150 bytes .../forkawesome-webfont.2dfb5f36fc148e26e398.woff | Bin 0 -> 115148 bytes .../forkawesome-webfont.7c20758e3e7c7dff7c8d.woff2 | Bin 0 -> 91624 bytes .../forkawesome-webfont.86541105409e56d17291.svg | 2849 ++ .../forkawesome-webfont.e182ad6df04f9177b326.eot | Bin 0 -> 188946 bytes .../forkawesome-webfont.ee4d8bfd0af89fc714a2.ttf | Bin 0 -> 188756 bytes .../mgr/dashboard/frontend/dist/en-US/index.html | 23 + .../dist/en-US/main.c3b711a3156fe72f66f4.js | 3 + .../dist/en-US/polyfills.2068f3f22a496426465b.js | 1 + .../en-US/prometheus_logo.8b3183e5a2db0e87bb2b.svg | 50 + .../dist/en-US/runtime.dfeb6a20b4d203b567dc.js | 1 + .../dist/en-US/scripts.6bda3fa7e09a87cd4228.js | 7 + .../dist/en-US/styles.f05c06a6a64f4730faae.css | 20 + .../mgr/dashboard/frontend/html-linter.config.json | 12 + src/pybind/mgr/dashboard/frontend/i18n.config.json | 12 + src/pybind/mgr/dashboard/frontend/ngcc.config.js | 10 + .../mgr/dashboard/frontend/package-lock.json | 28313 +++++++++++++++++++ src/pybind/mgr/dashboard/frontend/package.json | 157 + .../mgr/dashboard/frontend/proxy.conf.json.sample | 12 + .../frontend/src/app/app-routing.module.ts | 392 + .../dashboard/frontend/src/app/app.component.html | 1 + .../dashboard/frontend/src/app/app.component.scss | 0 .../frontend/src/app/app.component.spec.ts | 25 + .../dashboard/frontend/src/app/app.component.ts | 18 + .../mgr/dashboard/frontend/src/app/app.module.ts | 51 + .../frontend/src/app/ceph/block/block.module.ts | 205 + .../iscsi-setting/iscsi-setting.component.html | 57 + .../iscsi-setting/iscsi-setting.component.scss | 0 .../iscsi-setting/iscsi-setting.component.spec.ts | 37 + .../block/iscsi-setting/iscsi-setting.component.ts | 31 + .../block/iscsi-tabs/iscsi-tabs.component.html | 14 + .../block/iscsi-tabs/iscsi-tabs.component.scss | 0 .../block/iscsi-tabs/iscsi-tabs.component.spec.ts | 28 + .../ceph/block/iscsi-tabs/iscsi-tabs.component.ts | 11 + .../iscsi-target-details.component.html | 41 + .../iscsi-target-details.component.scss | 0 .../iscsi-target-details.component.spec.ts | 207 + .../iscsi-target-details.component.ts | 346 + .../iscsi-target-discovery-modal.component.html | 132 + .../iscsi-target-discovery-modal.component.scss | 0 .../iscsi-target-discovery-modal.component.spec.ts | 133 + .../iscsi-target-discovery-modal.component.ts | 123 + .../iscsi-target-form.component.html | 692 + .../iscsi-target-form.component.scss | 3 + .../iscsi-target-form.component.spec.ts | 593 + .../iscsi-target-form.component.ts | 822 + ...scsi-target-image-settings-modal.component.html | 92 + ...scsi-target-image-settings-modal.component.scss | 0 ...i-target-image-settings-modal.component.spec.ts | 98 + .../iscsi-target-image-settings-modal.component.ts | 87 + .../iscsi-target-iqn-settings-modal.component.html | 32 + .../iscsi-target-iqn-settings-modal.component.scss | 0 ...csi-target-iqn-settings-modal.component.spec.ts | 71 + .../iscsi-target-iqn-settings-modal.component.ts | 60 + .../iscsi-target-list.component.html | 53 + .../iscsi-target-list.component.scss | 0 .../iscsi-target-list.component.spec.ts | 309 + .../iscsi-target-list.component.ts | 242 + .../src/app/ceph/block/iscsi/iscsi.component.html | 49 + .../src/app/ceph/block/iscsi/iscsi.component.scss | 0 .../app/ceph/block/iscsi/iscsi.component.spec.ts | 83 + .../src/app/ceph/block/iscsi/iscsi.component.ts | 117 + .../bootstrap-create-modal.component.html | 87 + .../bootstrap-create-modal.component.scss | 3 + .../bootstrap-create-modal.component.spec.ts | 113 + .../bootstrap-create-modal.component.ts | 153 + .../bootstrap-import-modal.component.html | 96 + .../bootstrap-import-modal.component.scss | 0 .../bootstrap-import-modal.component.spec.ts | 131 + .../bootstrap-import-modal.component.ts | 187 + .../daemon-list/daemon-list.component.html | 13 + .../daemon-list/daemon-list.component.scss | 0 .../daemon-list/daemon-list.component.spec.ts | 28 + .../mirroring/daemon-list/daemon-list.component.ts | 62 + .../mirroring/image-list/image-list.component.html | 63 + .../mirroring/image-list/image-list.component.scss | 0 .../image-list/image-list.component.spec.ts | 36 + .../mirroring/image-list/image-list.component.ts | 99 + .../mirroring/mirror-health-color.pipe.spec.ts | 25 + .../block/mirroring/mirror-health-color.pipe.ts | 17 + .../app/ceph/block/mirroring/mirroring.module.ts | 42 + .../mirroring/overview/overview.component.html | 66 + .../mirroring/overview/overview.component.scss | 0 .../mirroring/overview/overview.component.spec.ts | 79 + .../block/mirroring/overview/overview.component.ts | 122 + .../pool-edit-mode-modal.component.html | 44 + .../pool-edit-mode-modal.component.scss | 0 .../pool-edit-mode-modal.component.spec.ts | 86 + .../pool-edit-mode-modal.component.ts | 111 + .../pool-edit-mode-response.model.ts | 3 + .../pool-edit-peer-modal.component.html | 100 + .../pool-edit-peer-modal.component.scss | 0 .../pool-edit-peer-modal.component.spec.ts | 148 + .../pool-edit-peer-modal.component.ts | 141 + .../pool-edit-peer-response.model.ts | 7 + .../mirroring/pool-list/pool-list.component.html | 23 + .../mirroring/pool-list/pool-list.component.scss | 0 .../pool-list/pool-list.component.spec.ts | 37 + .../mirroring/pool-list/pool-list.component.ts | 174 + .../rbd-configuration-form.component.html | 74 + .../rbd-configuration-form.component.scss | 4 + .../rbd-configuration-form.component.spec.ts | 294 + .../rbd-configuration-form.component.ts | 166 + .../rbd-configuration-list.component.html | 29 + .../rbd-configuration-list.component.scss | 0 .../rbd-configuration-list.component.spec.ts | 99 + .../rbd-configuration-list.component.ts | 65 + .../block/rbd-details/rbd-details.component.html | 180 + .../block/rbd-details/rbd-details.component.scss | 0 .../rbd-details/rbd-details.component.spec.ts | 30 + .../block/rbd-details/rbd-details.component.ts | 31 + .../ceph/block/rbd-form/rbd-feature.interface.ts | 9 + .../block/rbd-form/rbd-form-clone-request.model.ts | 13 + .../block/rbd-form/rbd-form-copy-request.model.ts | 14 + .../rbd-form/rbd-form-create-request.model.ts | 5 + .../block/rbd-form/rbd-form-edit-request.model.ts | 14 + .../app/ceph/block/rbd-form/rbd-form-mode.enum.ts | 5 + .../ceph/block/rbd-form/rbd-form-response.model.ts | 7 + .../ceph/block/rbd-form/rbd-form.component.html | 395 + .../ceph/block/rbd-form/rbd-form.component.scss | 0 .../ceph/block/rbd-form/rbd-form.component.spec.ts | 480 + .../app/ceph/block/rbd-form/rbd-form.component.ts | 815 + .../src/app/ceph/block/rbd-form/rbd-form.model.ts | 26 + .../app/ceph/block/rbd-form/rbd-parent.model.ts | 6 + .../ceph/block/rbd-list/rbd-list.component.html | 128 + .../ceph/block/rbd-list/rbd-list.component.scss | 5 + .../ceph/block/rbd-list/rbd-list.component.spec.ts | 438 + .../app/ceph/block/rbd-list/rbd-list.component.ts | 629 + .../src/app/ceph/block/rbd-list/rbd-model.ts | 15 + .../rbd-namespace-form-modal.component.html | 79 + .../rbd-namespace-form-modal.component.scss | 0 .../rbd-namespace-form-modal.component.spec.ts | 39 + .../rbd-namespace-form-modal.component.ts | 144 + .../rbd-namespace-list.component.html | 18 + .../rbd-namespace-list.component.scss | 0 .../rbd-namespace-list.component.spec.ts | 41 + .../rbd-namespace-list.component.ts | 157 + .../rbd-performance/rbd-performance.component.html | 6 + .../rbd-performance/rbd-performance.component.scss | 0 .../rbd-performance.component.spec.ts | 30 + .../rbd-performance/rbd-performance.component.ts | 8 + .../rbd-snapshot-form-modal.component.html | 41 + .../rbd-snapshot-form-modal.component.scss | 0 .../rbd-snapshot-form-modal.component.spec.ts | 62 + .../rbd-snapshot-form-modal.component.ts | 137 + .../rbd-snapshot-actions.model.ts | 131 + .../rbd-snapshot-list.component.html | 17 + .../rbd-snapshot-list.component.scss | 0 .../rbd-snapshot-list.component.spec.ts | 305 + .../rbd-snapshot-list.component.ts | 336 + .../block/rbd-snapshot-list/rbd-snapshot.model.ts | 9 + .../ceph/block/rbd-tabs/rbd-tabs.component.html | 23 + .../ceph/block/rbd-tabs/rbd-tabs.component.scss | 0 .../ceph/block/rbd-tabs/rbd-tabs.component.spec.ts | 27 + .../app/ceph/block/rbd-tabs/rbd-tabs.component.ts | 19 + .../rbd-trash-list/rbd-trash-list.component.html | 52 + .../rbd-trash-list/rbd-trash-list.component.scss | 0 .../rbd-trash-list.component.spec.ts | 172 + .../rbd-trash-list/rbd-trash-list.component.ts | 225 + .../rbd-trash-move-modal.component.html | 57 + .../rbd-trash-move-modal.component.scss | 0 .../rbd-trash-move-modal.component.spec.ts | 94 + .../rbd-trash-move-modal.component.ts | 94 + .../rbd-trash-purge-modal.component.html | 46 + .../rbd-trash-purge-modal.component.scss | 0 .../rbd-trash-purge-modal.component.spec.ts | 105 + .../rbd-trash-purge-modal.component.ts | 74 + .../rbd-trash-restore-modal.component.html | 41 + .../rbd-trash-restore-modal.component.scss | 0 .../rbd-trash-restore-modal.component.spec.ts | 81 + .../rbd-trash-restore-modal.component.ts | 65 + .../dashboard/frontend/src/app/ceph/ceph.module.ts | 23 + .../cephfs-chart/cephfs-chart.component.html | 12 + .../cephfs-chart/cephfs-chart.component.scss | 8 + .../cephfs-chart/cephfs-chart.component.spec.ts | 81 + .../cephfs/cephfs-chart/cephfs-chart.component.ts | 196 + .../cephfs-clients/cephfs-clients.component.html | 13 + .../cephfs-clients/cephfs-clients.component.scss | 0 .../cephfs-clients.component.spec.ts | 83 + .../cephfs-clients/cephfs-clients.component.ts | 102 + .../cephfs-detail/cephfs-detail.component.html | 42 + .../cephfs-detail/cephfs-detail.component.scss | 3 + .../cephfs-detail/cephfs-detail.component.spec.ts | 55 + .../cephfs-detail/cephfs-detail.component.ts | 91 + .../cephfs-directories.component.html | 75 + .../cephfs-directories.component.scss | 17 + .../cephfs-directories.component.spec.ts | 1111 + .../cephfs-directories.component.ts | 733 + .../cephfs/cephfs-list/cephfs-list.component.html | 14 + .../cephfs/cephfs-list/cephfs-list.component.scss | 0 .../cephfs-list/cephfs-list.component.spec.ts | 35 + .../cephfs/cephfs-list/cephfs-list.component.ts | 61 + .../cephfs/cephfs-tabs/cephfs-tabs.component.html | 47 + .../cephfs/cephfs-tabs/cephfs-tabs.component.scss | 0 .../cephfs-tabs/cephfs-tabs.component.spec.ts | 215 + .../cephfs/cephfs-tabs/cephfs-tabs.component.ts | 130 + .../frontend/src/app/ceph/cephfs/cephfs.module.ts | 28 + .../src/app/ceph/cluster/cluster.module.ts | 123 + .../configuration-details.component.html | 105 + .../configuration-details.component.scss | 0 .../configuration-details.component.spec.ts | 26 + .../configuration-details.component.ts | 29 + .../configuration-form-create-request.model.ts | 4 + .../configuration-form.component.html | 160 + .../configuration-form.component.scss | 12 + .../configuration-form.component.spec.ts | 106 + .../configuration-form.component.ts | 172 + .../configuration/configuration.component.html | 26 + .../configuration/configuration.component.scss | 16 + .../configuration/configuration.component.spec.ts | 46 + .../configuration/configuration.component.ts | 149 + .../create-cluster-review.component.html | 54 + .../create-cluster-review.component.scss | 5 + .../create-cluster-review.component.spec.ts | 29 + .../create-cluster-review.component.ts | 72 + .../create-cluster/create-cluster.component.html | 98 + .../create-cluster/create-cluster.component.scss | 22 + .../create-cluster.component.spec.ts | 154 + .../create-cluster/create-cluster.component.ts | 231 + .../ceph/cluster/crushmap/crushmap.component.html | 39 + .../ceph/cluster/crushmap/crushmap.component.scss | 3 + .../cluster/crushmap/crushmap.component.spec.ts | 137 + .../ceph/cluster/crushmap/crushmap.component.ts | 122 + .../cluster/hosts/fixtures/host_list_response.json | 32 + .../hosts/host-details/host-details.component.html | 59 + .../hosts/host-details/host-details.component.scss | 0 .../host-details/host-details.component.spec.ts | 68 + .../hosts/host-details/host-details.component.ts | 20 + .../hosts/host-form/host-form.component.html | 107 + .../hosts/host-form/host-form.component.scss | 0 .../hosts/host-form/host-form.component.spec.ts | 168 + .../cluster/hosts/host-form/host-form.component.ts | 171 + .../app/ceph/cluster/hosts/hosts.component.html | 77 + .../app/ceph/cluster/hosts/hosts.component.scss | 0 .../app/ceph/cluster/hosts/hosts.component.spec.ts | 419 + .../src/app/ceph/cluster/hosts/hosts.component.ts | 535 + .../fixtures/inventory_list_response.json | 324 + .../inventory-devices/inventory-device.model.ts | 20 + .../inventory-devices.component.html | 16 + .../inventory-devices.component.scss | 12 + .../inventory-devices.component.spec.ts | 194 + .../inventory-devices.component.ts | 254 + .../ceph/cluster/inventory/inventory-host.model.ts | 6 + .../cluster/inventory/inventory.component.html | 14 + .../cluster/inventory/inventory.component.scss | 0 .../cluster/inventory/inventory.component.spec.ts | 67 + .../ceph/cluster/inventory/inventory.component.ts | 90 + .../src/app/ceph/cluster/logs/logs.component.html | 159 + .../src/app/ceph/cluster/logs/logs.component.scss | 54 + .../app/ceph/cluster/logs/logs.component.spec.ts | 169 + .../src/app/ceph/cluster/logs/logs.component.ts | 157 + .../mgr-module-details.component.html | 4 + .../mgr-module-details.component.scss | 0 .../mgr-module-details.component.spec.ts | 27 + .../mgr-module-details.component.ts | 25 + .../mgr-module-form/mgr-module-form.component.html | 110 + .../mgr-module-form/mgr-module-form.component.scss | 0 .../mgr-module-form.component.spec.ts | 80 + .../mgr-module-form/mgr-module-form.component.ts | 135 + .../mgr-module-list/mgr-module-list.component.html | 20 + .../mgr-module-list/mgr-module-list.component.scss | 0 .../mgr-module-list.component.spec.ts | 155 + .../mgr-module-list/mgr-module-list.component.ts | 198 + .../ceph/cluster/mgr-modules/mgr-modules.module.ts | 17 + .../ceph/cluster/monitor/monitor.component.html | 61 + .../ceph/cluster/monitor/monitor.component.scss | 0 .../ceph/cluster/monitor/monitor.component.spec.ts | 105 + .../app/ceph/cluster/monitor/monitor.component.ts | 74 + .../osd-creation-preview-modal.component.html | 20 + .../osd-creation-preview-modal.component.scss | 0 .../osd-creation-preview-modal.component.spec.ts | 38 + .../osd-creation-preview-modal.component.ts | 62 + .../osd/osd-details/osd-details.component.html | 67 + .../osd/osd-details/osd-details.component.scss | 0 .../osd/osd-details/osd-details.component.spec.ts | 31 + .../osd/osd-details/osd-details.component.ts | 44 + .../devices-selection-change-event.interface.ts | 5 + .../devices-selection-clear-event.interface.ts | 6 + .../osd-devices-selection-groups.component.html | 51 + .../osd-devices-selection-groups.component.scss | 3 + .../osd-devices-selection-groups.component.spec.ts | 125 + .../osd-devices-selection-groups.component.ts | 135 + .../osd-devices-selection-modal.component.html | 42 + .../osd-devices-selection-modal.component.scss | 0 .../osd-devices-selection-modal.component.spec.ts | 109 + .../osd-devices-selection-modal.component.ts | 92 + .../osd-flags-indiv-modal.component.html | 48 + .../osd-flags-indiv-modal.component.scss | 0 .../osd-flags-indiv-modal.component.spec.ts | 353 + .../osd-flags-indiv-modal.component.ts | 134 + .../osd-flags-modal/osd-flags-modal.component.html | 41 + .../osd-flags-modal/osd-flags-modal.component.scss | 0 .../osd-flags-modal.component.spec.ts | 99 + .../osd-flags-modal/osd-flags-modal.component.ts | 156 + .../ceph/cluster/osd/osd-form/drive-group.model.ts | 97 + .../cluster/osd/osd-form/osd-feature.interface.ts | 4 + .../cluster/osd/osd-form/osd-form.component.html | 213 + .../cluster/osd/osd-form/osd-form.component.scss | 0 .../osd/osd-form/osd-form.component.spec.ts | 309 + .../cluster/osd/osd-form/osd-form.component.ts | 285 + .../osd/osd-list/fixtures/osd_list_response.json | 605 + .../cluster/osd/osd-list/osd-list.component.html | 150 + .../cluster/osd/osd-list/osd-list.component.scss | 0 .../osd/osd-list/osd-list.component.spec.ts | 641 + .../cluster/osd/osd-list/osd-list.component.ts | 624 + .../osd-pg-scrub-modal.component.html | 45 + .../osd-pg-scrub-modal.component.scss | 0 .../osd-pg-scrub-modal.component.spec.ts | 64 + .../osd-pg-scrub-modal.component.ts | 68 + .../osd-pg-scrub-modal.options.ts | 36 + .../osd-recv-speed-modal.component.html | 92 + .../osd-recv-speed-modal.component.scss | 0 .../osd-recv-speed-modal.component.spec.ts | 317 + .../osd-recv-speed-modal.component.ts | 238 + .../osd-reweight-modal.component.html | 38 + .../osd-reweight-modal.component.scss | 0 .../osd-reweight-modal.component.spec.ts | 56 + .../osd-reweight-modal.component.ts | 43 + .../osd-scrub-modal/osd-scrub-modal.component.html | 22 + .../osd-scrub-modal/osd-scrub-modal.component.scss | 0 .../osd-scrub-modal.component.spec.ts | 50 + .../osd-scrub-modal/osd-scrub-modal.component.ts | 52 + .../active-alert-list.component.html | 41 + .../active-alert-list.component.scss | 0 .../active-alert-list.component.spec.ts | 103 + .../active-alert-list.component.ts | 101 + .../cluster/prometheus/prometheus-list-helper.ts | 24 + .../prometheus-tabs/prometheus-tabs.component.html | 18 + .../prometheus-tabs/prometheus-tabs.component.scss | 0 .../prometheus-tabs.component.spec.ts | 27 + .../prometheus-tabs/prometheus-tabs.component.ts | 11 + .../rules-list/rules-list.component.html | 22 + .../rules-list/rules-list.component.scss | 0 .../rules-list/rules-list.component.spec.ts | 40 + .../prometheus/rules-list/rules-list.component.ts | 44 + .../silence-form/silence-form.component.html | 224 + .../silence-form/silence-form.component.scss | 3 + .../silence-form/silence-form.component.spec.ts | 598 + .../silence-form/silence-form.component.ts | 340 + .../silence-list/silence-list.component.html | 34 + .../silence-list/silence-list.component.scss | 0 .../silence-list/silence-list.component.spec.ts | 140 + .../silence-list/silence-list.component.ts | 191 + .../silence-matcher-modal.component.html | 85 + .../silence-matcher-modal.component.scss | 0 .../silence-matcher-modal.component.spec.ts | 209 + .../silence-matcher-modal.component.ts | 107 + .../ceph/cluster/services/placement.pipe.spec.ts | 78 + .../app/ceph/cluster/services/placement.pipe.ts | 41 + .../service-daemon-list.component.html | 102 + .../service-daemon-list.component.scss | 14 + .../service-daemon-list.component.spec.ts | 253 + .../service-daemon-list.component.ts | 347 + .../service-details/service-details.component.html | 4 + .../service-details/service-details.component.scss | 0 .../service-details.component.spec.ts | 43 + .../service-details/service-details.component.ts | 17 + .../service-form/service-form.component.html | 696 + .../service-form/service-form.component.scss | 0 .../service-form/service-form.component.spec.ts | 550 + .../service-form/service-form.component.ts | 678 + .../ceph/cluster/services/services.component.html | 25 + .../ceph/cluster/services/services.component.scss | 0 .../cluster/services/services.component.spec.ts | 97 + .../ceph/cluster/services/services.component.ts | 259 + .../cluster/telemetry/telemetry.component.html | 322 + .../cluster/telemetry/telemetry.component.scss | 0 .../cluster/telemetry/telemetry.component.spec.ts | 188 + .../ceph/cluster/telemetry/telemetry.component.ts | 244 + .../src/app/ceph/dashboard/dashboard.module.ts | 43 + .../dashboard/dashboard/dashboard.component.html | 28 + .../dashboard/dashboard/dashboard.component.scss | 3 + .../dashboard/dashboard.component.spec.ts | 28 + .../dashboard/dashboard/dashboard.component.ts | 10 + .../dashboard/health-pie/health-pie.component.html | 16 + .../dashboard/health-pie/health-pie.component.scss | 22 + .../health-pie/health-pie.component.spec.ts | 75 + .../dashboard/health-pie/health-pie.component.ts | 198 + .../ceph/dashboard/health/health.component.html | 237 + .../ceph/dashboard/health/health.component.scss | 41 + .../ceph/dashboard/health/health.component.spec.ts | 348 + .../app/ceph/dashboard/health/health.component.ts | 278 + .../dashboard/info-card/info-card-popover.scss | 42 + .../dashboard/info-card/info-card.component.html | 18 + .../dashboard/info-card/info-card.component.scss | 40 + .../info-card/info-card.component.spec.ts | 65 + .../dashboard/info-card/info-card.component.ts | 17 + .../dashboard/info-group/info-group.component.html | 26 + .../dashboard/info-group/info-group.component.scss | 8 + .../info-group/info-group.component.spec.ts | 35 + .../dashboard/info-group/info-group.component.ts | 14 + .../app/ceph/dashboard/mds-summary.pipe.spec.ts | 72 + .../src/app/ceph/dashboard/mds-summary.pipe.ts | 78 + .../app/ceph/dashboard/mgr-summary.pipe.spec.ts | 52 + .../src/app/ceph/dashboard/mgr-summary.pipe.ts | 48 + .../app/ceph/dashboard/mon-summary.pipe.spec.ts | 40 + .../src/app/ceph/dashboard/mon-summary.pipe.ts | 17 + .../app/ceph/dashboard/osd-summary.pipe.spec.ts | 193 + .../src/app/ceph/dashboard/osd-summary.pipe.ts | 91 + .../frontend/src/app/ceph/nfs/models/nfs.fsal.ts | 5 + .../nfs/nfs-details/nfs-details.component.html | 32 + .../nfs/nfs-details/nfs-details.component.scss | 0 .../nfs/nfs-details/nfs-details.component.spec.ts | 102 + .../ceph/nfs/nfs-details/nfs-details.component.ts | 68 + .../nfs-form-client/nfs-form-client.component.html | 109 + .../nfs-form-client/nfs-form-client.component.scss | 0 .../nfs-form-client.component.spec.ts | 71 + .../nfs-form-client/nfs-form-client.component.ts | 95 + .../app/ceph/nfs/nfs-form/nfs-form.component.html | 400 + .../app/ceph/nfs/nfs-form/nfs-form.component.scss | 11 + .../ceph/nfs/nfs-form/nfs-form.component.spec.ts | 238 + .../app/ceph/nfs/nfs-form/nfs-form.component.ts | 535 + .../app/ceph/nfs/nfs-list/nfs-list.component.html | 30 + .../app/ceph/nfs/nfs-list/nfs-list.component.scss | 0 .../ceph/nfs/nfs-list/nfs-list.component.spec.ts | 195 + .../app/ceph/nfs/nfs-list/nfs-list.component.ts | 199 + .../frontend/src/app/ceph/nfs/nfs.module.ts | 26 + .../performance-counter.module.ts | 14 + .../performance-counter.component.html | 4 + .../performance-counter.component.scss | 0 .../performance-counter.component.spec.ts | 29 + .../performance-counter.component.ts | 25 + .../table-performance-counter.component.html | 15 + .../table-performance-counter.component.scss | 0 .../table-performance-counter.component.spec.ts | 62 + .../table-performance-counter.component.ts | 72 + .../crush-rule-form-modal.component.html | 123 + .../crush-rule-form-modal.component.scss | 0 .../crush-rule-form-modal.component.spec.ts | 210 + .../crush-rule-form-modal.component.ts | 108 + .../erasure-code-profile-form-modal.component.html | 420 + .../erasure-code-profile-form-modal.component.scss | 0 ...asure-code-profile-form-modal.component.spec.ts | 688 + .../erasure-code-profile-form-modal.component.ts | 459 + .../pool/pool-details/pool-details.component.html | 51 + .../pool/pool-details/pool-details.component.scss | 0 .../pool-details/pool-details.component.spec.ts | 171 + .../pool/pool-details/pool-details.component.ts | 80 + .../src/app/ceph/pool/pool-form/pool-form-data.ts | 37 + .../ceph/pool/pool-form/pool-form.component.html | 609 + .../ceph/pool/pool-form/pool-form.component.scss | 0 .../pool/pool-form/pool-form.component.spec.ts | 1466 + .../app/ceph/pool/pool-form/pool-form.component.ts | 919 + .../ceph/pool/pool-list/pool-list.component.html | 57 + .../ceph/pool/pool-list/pool-list.component.scss | 19 + .../pool/pool-list/pool-list.component.spec.ts | 518 + .../app/ceph/pool/pool-list/pool-list.component.ts | 332 + .../frontend/src/app/ceph/pool/pool-stat.ts | 16 + .../frontend/src/app/ceph/pool/pool.module.ts | 57 + .../dashboard/frontend/src/app/ceph/pool/pool.ts | 73 + .../app/ceph/rgw/models/rgw-bucket-mfa-delete.ts | 4 + .../app/ceph/rgw/models/rgw-bucket-versioning.ts | 4 + .../frontend/src/app/ceph/rgw/models/rgw-daemon.ts | 10 + .../app/ceph/rgw/models/rgw-user-capabilities.ts | 15 + .../src/app/ceph/rgw/models/rgw-user-capability.ts | 4 + .../src/app/ceph/rgw/models/rgw-user-s3-key.ts | 6 + .../src/app/ceph/rgw/models/rgw-user-subuser.ts | 6 + .../src/app/ceph/rgw/models/rgw-user-swift-key.ts | 4 + .../rgw-bucket-details.component.html | 127 + .../rgw-bucket-details.component.scss | 7 + .../rgw-bucket-details.component.spec.ts | 42 + .../rgw-bucket-details.component.ts | 24 + .../rgw-bucket-form/rgw-bucket-form.component.html | 291 + .../rgw-bucket-form/rgw-bucket-form.component.scss | 0 .../rgw-bucket-form.component.spec.ts | 300 + .../rgw-bucket-form/rgw-bucket-form.component.ts | 264 + .../rgw-bucket-list/rgw-bucket-list.component.html | 44 + .../rgw-bucket-list/rgw-bucket-list.component.scss | 0 .../rgw-bucket-list.component.spec.ts | 178 + .../rgw-bucket-list/rgw-bucket-list.component.ts | 188 + .../rgw-daemon-details.component.html | 38 + .../rgw-daemon-details.component.scss | 0 .../rgw-daemon-details.component.spec.ts | 42 + .../rgw-daemon-details.component.ts | 46 + .../rgw-daemon-list/rgw-daemon-list.component.html | 46 + .../rgw-daemon-list/rgw-daemon-list.component.scss | 0 .../rgw-daemon-list.component.spec.ts | 106 + .../rgw-daemon-list/rgw-daemon-list.component.ts | 82 + .../rgw-user-capability-modal.component.html | 70 + .../rgw-user-capability-modal.component.scss | 0 .../rgw-user-capability-modal.component.spec.ts | 30 + .../rgw-user-capability-modal.component.ts | 92 + .../rgw-user-details.component.html | 178 + .../rgw-user-details.component.scss | 0 .../rgw-user-details.component.spec.ts | 94 + .../rgw-user-details/rgw-user-details.component.ts | 120 + .../rgw/rgw-user-form/rgw-user-form.component.html | 668 + .../rgw/rgw-user-form/rgw-user-form.component.scss | 0 .../rgw-user-form/rgw-user-form.component.spec.ts | 339 + .../rgw/rgw-user-form/rgw-user-form.component.ts | 756 + .../rgw/rgw-user-list/rgw-user-list.component.html | 44 + .../rgw/rgw-user-list/rgw-user-list.component.scss | 0 .../rgw-user-list/rgw-user-list.component.spec.ts | 166 + .../rgw/rgw-user-list/rgw-user-list.component.ts | 180 + .../rgw-user-s3-key-modal.component.html | 125 + .../rgw-user-s3-key-modal.component.scss | 0 .../rgw-user-s3-key-modal.component.spec.ts | 30 + .../rgw-user-s3-key-modal.component.ts | 84 + .../rgw-user-subuser-modal.component.html | 128 + .../rgw-user-subuser-modal.component.scss | 0 .../rgw-user-subuser-modal.component.spec.ts | 71 + .../rgw-user-subuser-modal.component.ts | 130 + .../rgw-user-swift-key-modal.component.html | 54 + .../rgw-user-swift-key-modal.component.scss | 0 .../rgw-user-swift-key-modal.component.spec.ts | 31 + .../rgw-user-swift-key-modal.component.ts | 30 + .../frontend/src/app/ceph/rgw/rgw.module.ts | 108 + .../src/app/ceph/shared/ceph-shared.module.ts | 17 + .../shared/device-list/device-list.component.html | 26 + .../shared/device-list/device-list.component.scss | 0 .../device-list/device-list.component.spec.ts | 26 + .../shared/device-list/device-list.component.ts | 84 + .../src/app/ceph/shared/pg-category.model.ts | 71 + .../app/ceph/shared/pg-category.service.spec.ts | 56 + .../src/app/ceph/shared/pg-category.service.ts | 63 + .../smart_data_version_1_0_ata_response.json | 570 + .../smart_data_version_1_0_nvme_response.json | 134 + .../smart_data_version_1_0_scsi_response.json | 208 + .../shared/smart-list/smart-list.component.html | 110 + .../shared/smart-list/smart-list.component.scss | 0 .../shared/smart-list/smart-list.component.spec.ts | 264 + .../ceph/shared/smart-list/smart-list.component.ts | 212 + .../frontend/src/app/core/auth/auth.module.ts | 87 + .../login-password-form.component.html | 95 + .../login-password-form.component.scss | 68 + .../login-password-form.component.spec.ts | 77 + .../login-password-form.component.ts | 51 + .../src/app/core/auth/login/login.component.html | 64 + .../src/app/core/auth/login/login.component.scss | 54 + .../app/core/auth/login/login.component.spec.ts | 58 + .../src/app/core/auth/login/login.component.ts | 76 + .../auth/role-details/role-details.component.html | 11 + .../auth/role-details/role-details.component.scss | 9 + .../role-details/role-details.component.spec.ts | 67 + .../auth/role-details/role-details.component.ts | 79 + .../app/core/auth/role-form/role-form-mode.enum.ts | 3 + .../core/auth/role-form/role-form.component.html | 121 + .../core/auth/role-form/role-form.component.scss | 4 + .../auth/role-form/role-form.component.spec.ts | 222 + .../app/core/auth/role-form/role-form.component.ts | 315 + .../src/app/core/auth/role-form/role-form.model.ts | 5 + .../core/auth/role-list/role-list.component.html | 21 + .../core/auth/role-list/role-list.component.scss | 0 .../auth/role-list/role-list.component.spec.ts | 83 + .../app/core/auth/role-list/role-list.component.ts | 169 + .../app/core/auth/user-form/user-form-mode.enum.ts | 3 + .../core/auth/user-form/user-form-role.model.ts | 14 + .../core/auth/user-form/user-form.component.html | 263 + .../core/auth/user-form/user-form.component.scss | 0 .../auth/user-form/user-form.component.spec.ts | 258 + .../app/core/auth/user-form/user-form.component.ts | 305 + .../src/app/core/auth/user-form/user-form.model.ts | 10 + .../core/auth/user-list/user-list.component.html | 22 + .../core/auth/user-list/user-list.component.scss | 0 .../auth/user-list/user-list.component.spec.ts | 82 + .../app/core/auth/user-list/user-list.component.ts | 164 + .../user-password-form.component.html | 121 + .../user-password-form.component.scss | 0 .../user-password-form.component.spec.ts | 83 + .../user-password-form.component.ts | 119 + .../core/auth/user-tabs/user-tabs.component.html | 14 + .../core/auth/user-tabs/user-tabs.component.scss | 0 .../auth/user-tabs/user-tabs.component.spec.ts | 29 + .../app/core/auth/user-tabs/user-tabs.component.ts | 13 + .../src/app/core/context/context.component.html | 27 + .../src/app/core/context/context.component.scss | 5 + .../src/app/core/context/context.component.spec.ts | 100 + .../src/app/core/context/context.component.ts | 70 + .../dashboard/frontend/src/app/core/core.module.ts | 34 + .../src/app/core/error/error.component.html | 63 + .../src/app/core/error/error.component.scss | 18 + .../src/app/core/error/error.component.spec.ts | 49 + .../frontend/src/app/core/error/error.component.ts | 96 + .../dashboard/frontend/src/app/core/error/error.ts | 27 + .../blank-layout/blank-layout.component.html | 1 + .../blank-layout/blank-layout.component.scss | 0 .../blank-layout/blank-layout.component.spec.ts | 25 + .../layouts/blank-layout/blank-layout.component.ts | 8 + .../login-layout/login-layout.component.html | 34 + .../login-layout/login-layout.component.scss | 61 + .../login-layout/login-layout.component.spec.ts | 28 + .../layouts/login-layout/login-layout.component.ts | 14 + .../workbench-layout.component.html | 10 + .../workbench-layout.component.scss | 12 + .../workbench-layout.component.spec.ts | 35 + .../workbench-layout/workbench-layout.component.ts | 39 + .../app/core/navigation/about/about.component.html | 47 + .../app/core/navigation/about/about.component.scss | 43 + .../core/navigation/about/about.component.spec.ts | 60 + .../app/core/navigation/about/about.component.ts | 70 + .../administration/administration.component.html | 22 + .../administration/administration.component.scss | 0 .../administration.component.spec.ts | 25 + .../administration/administration.component.ts | 22 + .../navigation/api-docs/api-docs.component.html | 3 + .../navigation/api-docs/api-docs.component.scss | 7 + .../core/navigation/api-docs/api-docs.component.ts | 18 + .../breadcrumbs/breadcrumbs.component.html | 11 + .../breadcrumbs/breadcrumbs.component.scss | 12 + .../breadcrumbs/breadcrumbs.component.spec.ts | 131 + .../breadcrumbs/breadcrumbs.component.ts | 141 + .../dashboard-help/dashboard-help.component.html | 25 + .../dashboard-help/dashboard-help.component.scss | 0 .../dashboard-help.component.spec.ts | 27 + .../dashboard-help/dashboard-help.component.ts | 31 + .../navigation/identity/identity.component.html | 27 + .../navigation/identity/identity.component.scss | 0 .../navigation/identity/identity.component.spec.ts | 27 + .../core/navigation/identity/identity.component.ts | 27 + .../src/app/core/navigation/navigation.module.ts | 43 + .../navigation/navigation.component.html | 272 + .../navigation/navigation.component.scss | 263 + .../navigation/navigation.component.spec.ts | 237 + .../navigation/navigation/navigation.component.ts | 123 + .../notifications/notifications.component.html | 11 + .../notifications/notifications.component.scss | 27 + .../notifications/notifications.component.spec.ts | 58 + .../notifications/notifications.component.ts | 47 + .../frontend/src/app/shared/api/api-client.spec.ts | 11 + .../frontend/src/app/shared/api/api-client.ts | 5 + .../src/app/shared/api/auth.service.spec.ts | 57 + .../frontend/src/app/shared/api/auth.service.ts | 53 + .../src/app/shared/api/ceph-service.service.ts | 63 + .../src/app/shared/api/cephfs.service.spec.ts | 98 + .../frontend/src/app/shared/api/cephfs.service.ts | 76 + .../src/app/shared/api/cluster.service.spec.ts | 42 + .../frontend/src/app/shared/api/cluster.service.ts | 27 + .../app/shared/api/configuration.service.spec.ts | 99 + .../src/app/shared/api/configuration.service.ts | 59 + .../src/app/shared/api/crush-rule.service.spec.ts | 47 + .../src/app/shared/api/crush-rule.service.ts | 32 + .../shared/api/custom-login-banner.service.spec.ts | 35 + .../app/shared/api/custom-login-banner.service.ts | 15 + .../src/app/shared/api/daemon.service.spec.ts | 39 + .../frontend/src/app/shared/api/daemon.service.ts | 28 + .../api/erasure-code-profile.service.spec.ts | 55 + .../app/shared/api/erasure-code-profile.service.ts | 110 + .../src/app/shared/api/health.service.spec.ts | 40 + .../frontend/src/app/shared/api/health.service.ts | 17 + .../src/app/shared/api/host.service.spec.ts | 91 + .../frontend/src/app/shared/api/host.service.ts | 154 + .../src/app/shared/api/iscsi.service.spec.ts | 97 + .../frontend/src/app/shared/api/iscsi.service.ts | 60 + .../src/app/shared/api/logging.service.spec.ts | 39 + .../frontend/src/app/shared/api/logging.service.ts | 18 + .../src/app/shared/api/logs.service.spec.ts | 34 + .../frontend/src/app/shared/api/logs.service.ts | 17 + .../src/app/shared/api/mgr-module.service.spec.ts | 66 + .../src/app/shared/api/mgr-module.service.ts | 65 + .../src/app/shared/api/monitor.service.spec.ts | 34 + .../frontend/src/app/shared/api/monitor.service.ts | 13 + .../src/app/shared/api/motd.service.spec.ts | 34 + .../frontend/src/app/shared/api/motd.service.ts | 25 + .../src/app/shared/api/nfs.service.spec.ts | 74 + .../frontend/src/app/shared/api/nfs.service.ts | 108 + .../app/shared/api/orchestrator.service.spec.ts | 35 + .../src/app/shared/api/orchestrator.service.ts | 46 + .../src/app/shared/api/osd.service.spec.ts | 183 + .../frontend/src/app/shared/api/osd.service.ts | 190 + .../shared/api/performance-counter.service.spec.ts | 45 + .../app/shared/api/performance-counter.service.ts | 29 + .../src/app/shared/api/pool.service.spec.ts | 123 + .../frontend/src/app/shared/api/pool.service.ts | 74 + .../src/app/shared/api/prometheus.service.spec.ts | 247 + .../src/app/shared/api/prometheus.service.ts | 82 + .../app/shared/api/rbd-mirroring.service.spec.ts | 164 + .../src/app/shared/api/rbd-mirroring.service.ts | 114 + .../frontend/src/app/shared/api/rbd.model.ts | 30 + .../src/app/shared/api/rbd.service.spec.ts | 181 + .../frontend/src/app/shared/api/rbd.service.ts | 198 + .../src/app/shared/api/rgw-bucket.service.spec.ts | 102 + .../src/app/shared/api/rgw-bucket.service.ts | 128 + .../src/app/shared/api/rgw-daemon.service.spec.ts | 90 + .../src/app/shared/api/rgw-daemon.service.ts | 82 + .../src/app/shared/api/rgw-site.service.spec.ts | 43 + .../src/app/shared/api/rgw-site.service.ts | 38 + .../src/app/shared/api/rgw-user.service.spec.ts | 170 + .../src/app/shared/api/rgw-user.service.ts | 179 + .../src/app/shared/api/role.service.spec.ts | 75 + .../frontend/src/app/shared/api/role.service.ts | 49 + .../src/app/shared/api/scope.service.spec.ts | 34 + .../frontend/src/app/shared/api/scope.service.ts | 13 + .../src/app/shared/api/settings.service.spec.ts | 154 + .../src/app/shared/api/settings.service.ts | 77 + .../src/app/shared/api/telemetry.service.spec.ts | 58 + .../src/app/shared/api/telemetry.service.ts | 23 + .../src/app/shared/api/user.service.spec.ts | 104 + .../frontend/src/app/shared/api/user.service.ts | 62 + .../src/app/shared/classes/cd-helper.class.spec.ts | 66 + .../src/app/shared/classes/cd-helper.class.ts | 28 + .../classes/crush.node.selection.class.spec.ts | 220 + .../shared/classes/crush.node.selection.class.ts | 221 + .../frontend/src/app/shared/classes/css-helper.ts | 5 + .../app/shared/classes/list-with-details.class.ts | 29 + .../shared/classes/table-status-view-cache.spec.ts | 40 + .../app/shared/classes/table-status-view-cache.ts | 37 + .../src/app/shared/classes/table-status.spec.ts | 15 + .../src/app/shared/classes/table-status.ts | 3 + .../alert-panel/alert-panel.component.html | 42 + .../alert-panel/alert-panel.component.scss | 12 + .../alert-panel/alert-panel.component.spec.ts | 26 + .../alert-panel/alert-panel.component.ts | 70 + .../back-button/back-button.component.html | 5 + .../back-button/back-button.component.scss | 0 .../back-button/back-button.component.spec.ts | 25 + .../back-button/back-button.component.ts | 24 + .../src/app/shared/components/components.module.ts | 132 + .../config-option/config-option.component.html | 77 + .../config-option/config-option.component.scss | 10 + .../config-option/config-option.component.spec.ts | 295 + .../config-option/config-option.component.ts | 120 + .../config-option/config-option.model.ts | 12 + .../config-option/config-option.types.spec.ts | 272 + .../config-option/config-option.types.ts | 147 + .../confirmation-modal.component.html | 27 + .../confirmation-modal.component.scss | 0 .../confirmation-modal.component.spec.ts | 185 + .../confirmation-modal.component.ts | 65 + .../copy2clipboard-button.component.html | 7 + .../copy2clipboard-button.component.scss | 0 .../copy2clipboard-button.component.spec.ts | 65 + .../copy2clipboard-button.component.ts | 55 + .../critical-confirmation-modal.component.html | 55 + .../critical-confirmation-modal.component.scss | 11 + .../critical-confirmation-modal.component.spec.ts | 235 + .../critical-confirmation-modal.component.ts | 63 + .../custom-login-banner.component.html | 2 + .../custom-login-banner.component.scss | 5 + .../custom-login-banner.component.spec.ts | 25 + .../custom-login-banner.component.ts | 20 + .../date-time-picker.component.html | 13 + .../date-time-picker.component.scss | 0 .../date-time-picker.component.spec.ts | 58 + .../date-time-picker/date-time-picker.component.ts | 67 + .../app/shared/components/doc/doc.component.html | 2 + .../app/shared/components/doc/doc.component.scss | 0 .../shared/components/doc/doc.component.spec.ts | 27 + .../src/app/shared/components/doc/doc.component.ts | 28 + .../download-button/download-button.component.html | 23 + .../download-button/download-button.component.scss | 0 .../download-button.component.spec.ts | 39 + .../download-button/download-button.component.ts | 31 + .../form-button-panel.component.html | 11 + .../form-button-panel.component.scss | 0 .../form-button-panel.component.spec.ts | 25 + .../form-button-panel.component.ts | 59 + .../form-modal/form-modal.component.html | 69 + .../form-modal/form-modal.component.scss | 0 .../form-modal/form-modal.component.spec.ts | 149 + .../components/form-modal/form-modal.component.ts | 110 + .../components/grafana/grafana.component.html | 78 + .../components/grafana/grafana.component.scss | 33 + .../components/grafana/grafana.component.spec.ts | 81 + .../shared/components/grafana/grafana.component.ts | 201 + .../shared/components/helper/helper.component.html | 11 + .../shared/components/helper/helper.component.scss | 7 + .../components/helper/helper.component.spec.ts | 26 + .../shared/components/helper/helper.component.ts | 18 + .../language-selector.component.html | 17 + .../language-selector.component.scss | 0 .../language-selector.component.spec.ts | 85 + .../language-selector.component.ts | 40 + .../language-selector/supported-languages.enum.ts | 17 + .../loading-panel/loading-panel.component.html | 9 + .../loading-panel/loading-panel.component.scss | 0 .../loading-panel/loading-panel.component.spec.ts | 26 + .../loading-panel/loading-panel.component.ts | 12 + .../shared/components/modal/modal.component.html | 19 + .../shared/components/modal/modal.component.scss | 23 + .../components/modal/modal.component.spec.ts | 54 + .../app/shared/components/modal/modal.component.ts | 31 + .../app/shared/components/motd/motd.component.html | 8 + .../app/shared/components/motd/motd.component.scss | 0 .../shared/components/motd/motd.component.spec.ts | 26 + .../app/shared/components/motd/motd.component.ts | 33 + .../notifications-sidebar.component.html | 131 + .../notifications-sidebar.component.scss | 68 + .../notifications-sidebar.component.spec.ts | 194 + .../notifications-sidebar.component.ts | 167 + .../orchestrator-doc-panel.component.html | 10 + .../orchestrator-doc-panel.component.scss | 0 .../orchestrator-doc-panel.component.spec.ts | 29 + .../orchestrator-doc-panel.component.ts | 13 + .../pwd-expiration-notification.component.html | 16 + .../pwd-expiration-notification.component.scss | 3 + .../pwd-expiration-notification.component.spec.ts | 107 + .../pwd-expiration-notification.component.ts | 55 + .../refresh-selector.component.html | 19 + .../refresh-selector.component.scss | 0 .../refresh-selector.component.spec.ts | 27 + .../refresh-selector/refresh-selector.component.ts | 32 + .../select-badges/select-badges.component.html | 22 + .../select-badges/select-badges.component.scss | 9 + .../select-badges/select-badges.component.spec.ts | 57 + .../select-badges/select-badges.component.ts | 35 + .../components/select/select-messages.model.ts | 23 + .../components/select/select-option.model.ts | 13 + .../shared/components/select/select.component.html | 79 + .../shared/components/select/select.component.scss | 26 + .../components/select/select.component.spec.ts | 276 + .../shared/components/select/select.component.ts | 149 + .../components/sparkline/sparkline.component.html | 15 + .../components/sparkline/sparkline.component.scss | 5 + .../sparkline/sparkline.component.spec.ts | 52 + .../components/sparkline/sparkline.component.ts | 130 + .../submit-button/submit-button.component.html | 11 + .../submit-button/submit-button.component.scss | 0 .../submit-button/submit-button.component.spec.ts | 27 + .../submit-button/submit-button.component.ts | 99 + .../telemetry-notification.component.html | 12 + .../telemetry-notification.component.scss | 17 + .../telemetry-notification.component.spec.ts | 107 + .../telemetry-notification.component.ts | 62 + .../components/usage-bar/usage-bar.component.html | 27 + .../components/usage-bar/usage-bar.component.scss | 35 + .../usage-bar/usage-bar.component.spec.ts | 27 + .../components/usage-bar/usage-bar.component.ts | 43 + .../shared/components/wizard/wizard.component.html | 19 + .../shared/components/wizard/wizard.component.scss | 34 + .../components/wizard/wizard.component.spec.ts | 25 + .../shared/components/wizard/wizard.component.ts | 39 + .../src/app/shared/constants/app.constants.ts | 305 + .../src/app/shared/datatable/datatable.module.ts | 31 + .../table-actions/table-actions.component.html | 43 + .../table-actions/table-actions.component.scss | 8 + .../table-actions/table-actions.component.spec.ts | 213 + .../table-actions/table-actions.component.ts | 161 + .../table-key-value/table-key-value.component.html | 12 + .../table-key-value/table-key-value.component.scss | 0 .../table-key-value.component.spec.ts | 351 + .../table-key-value/table-key-value.component.ts | 224 + .../shared/datatable/table/table.component.html | 327 + .../shared/datatable/table/table.component.scss | 295 + .../shared/datatable/table/table.component.spec.ts | 799 + .../app/shared/datatable/table/table.component.ts | 927 + .../src/app/shared/decorators/cd-encode.spec.ts | 41 + .../src/app/shared/decorators/cd-encode.ts | 80 + .../shared/directives/autofocus.directive.spec.ts | 90 + .../app/shared/directives/autofocus.directive.ts | 28 + .../dimless-binary-per-second.directive.spec.ts | 12 + .../dimless-binary-per-second.directive.ts | 132 + .../directives/dimless-binary.directive.spec.ts | 12 + .../shared/directives/dimless-binary.directive.ts | 122 + .../src/app/shared/directives/directives.module.ts | 53 + .../form-input-disable.directive.spec.ts | 75 + .../directives/form-input-disable.directive.ts | 27 + .../directives/form-loading.directive.spec.ts | 89 + .../shared/directives/form-loading.directive.ts | 51 + .../shared/directives/form-scope.directive.spec.ts | 8 + .../app/shared/directives/form-scope.directive.ts | 8 + .../app/shared/directives/iops.directive.spec.ts | 8 + .../src/app/shared/directives/iops.directive.ts | 31 + .../directives/milliseconds.directive.spec.ts | 8 + .../shared/directives/milliseconds.directive.ts | 31 + .../cd-form-control.directive.spec.ts | 37 + .../cd-form-control.directive.ts | 82 + .../cd-form-group.directive.spec.ts | 37 + .../cd-form-group.directive.ts | 76 + .../cd-form-validation.directive.spec.ts | 35 + .../cd-form-validation.directive.ts | 62 + .../directives/password-button.directive.spec.ts | 8 + .../shared/directives/password-button.directive.ts | 45 + .../directives/stateful-tab.directive.spec.ts | 28 + .../shared/directives/stateful-tab.directive.ts | 31 + .../app/shared/directives/trim.directive.spec.ts | 50 + .../src/app/shared/directives/trim.directive.ts | 21 + .../src/app/shared/enum/cell-template.enum.ts | 54 + .../src/app/shared/enum/components.enum.ts | 9 + .../src/app/shared/enum/health-color.enum.ts | 5 + .../frontend/src/app/shared/enum/icons.enum.ts | 84 + .../src/app/shared/enum/notification-type.enum.ts | 5 + .../src/app/shared/enum/unix_errno.enum.ts | 4 + .../src/app/shared/enum/view-cache-status.enum.ts | 6 + .../src/app/shared/forms/cd-form-builder.spec.ts | 33 + .../src/app/shared/forms/cd-form-builder.ts | 20 + .../src/app/shared/forms/cd-form-group.spec.ts | 184 + .../frontend/src/app/shared/forms/cd-form-group.ts | 75 + .../frontend/src/app/shared/forms/cd-form.spec.ts | 32 + .../frontend/src/app/shared/forms/cd-form.ts | 26 + .../src/app/shared/forms/cd-validators.spec.ts | 906 + .../frontend/src/app/shared/forms/cd-validators.ts | 612 + .../src/app/shared/models/alertmanager-silence.ts | 23 + .../frontend/src/app/shared/models/breadcrumbs.ts | 59 + .../shared/models/cd-form-modal-field-config.ts | 32 + .../src/app/shared/models/cd-notification.spec.ts | 95 + .../src/app/shared/models/cd-notification.ts | 48 + .../shared/models/cd-pwd-expiration-settings.ts | 11 + .../app/shared/models/cd-pwd-policy-settings.ts | 23 + .../src/app/shared/models/cd-table-action.ts | 44 + .../app/shared/models/cd-table-column-filter.ts | 7 + .../models/cd-table-column-filters-change.ts | 22 + .../src/app/shared/models/cd-table-column.ts | 38 + .../shared/models/cd-table-fetch-data-context.ts | 44 + .../src/app/shared/models/cd-table-paging.ts | 20 + .../src/app/shared/models/cd-table-selection.ts | 45 + .../src/app/shared/models/cd-user-config.ts | 11 + .../app/shared/models/cephfs-directory-models.ts | 21 + .../src/app/shared/models/chart-tooltip.ts | 115 + .../src/app/shared/models/configuration.ts | 43 + .../frontend/src/app/shared/models/credentials.ts | 4 + .../frontend/src/app/shared/models/crush-node.ts | 17 + .../frontend/src/app/shared/models/crush-rule.ts | 18 + .../frontend/src/app/shared/models/crush-step.ts | 7 + .../src/app/shared/models/daemon.interface.ts | 12 + .../frontend/src/app/shared/models/devices.ts | 25 + .../src/app/shared/models/erasure-code-profile.ts | 17 + .../src/app/shared/models/executing-task.ts | 6 + .../src/app/shared/models/finished-task.ts | 15 + .../frontend/src/app/shared/models/flag.ts | 8 + .../frontend/src/app/shared/models/image-spec.ts | 25 + .../shared/models/inventory-device-type.model.ts | 9 + .../src/app/shared/models/login-response.ts | 7 + .../src/app/shared/models/mirroring-summary.ts | 5 + .../src/app/shared/models/orchestrator.enum.ts | 25 + .../app/shared/models/orchestrator.interface.ts | 9 + .../app/shared/models/osd-deployment-options.ts | 24 + .../frontend/src/app/shared/models/osd-settings.ts | 4 + .../src/app/shared/models/permission.spec.ts | 62 + .../frontend/src/app/shared/models/permissions.ts | 50 + .../src/app/shared/models/pool-form-info.ts | 20 + .../src/app/shared/models/prometheus-alerts.ts | 84 + .../src/app/shared/models/service.interface.ts | 45 + .../frontend/src/app/shared/models/smart.ts | 253 + .../src/app/shared/models/summary.model.ts | 15 + .../src/app/shared/models/task-exception.ts | 9 + .../frontend/src/app/shared/models/task.ts | 10 + .../frontend/src/app/shared/models/wizard-steps.ts | 4 + .../src/app/shared/pipes/array.pipe.spec.ts | 21 + .../frontend/src/app/shared/pipes/array.pipe.ts | 26 + .../src/app/shared/pipes/boolean-text.pipe.spec.ts | 37 + .../src/app/shared/pipes/boolean-text.pipe.ts | 14 + .../src/app/shared/pipes/boolean.pipe.spec.ts | 57 + .../frontend/src/app/shared/pipes/boolean.pipe.ts | 26 + .../src/app/shared/pipes/cd-date.pipe.spec.ts | 24 + .../frontend/src/app/shared/pipes/cd-date.pipe.ts | 20 + .../shared/pipes/ceph-release-name.pipe.spec.ts | 28 + .../src/app/shared/pipes/ceph-release-name.pipe.ts | 24 + .../shared/pipes/ceph-short-version.pipe.spec.ts | 21 + .../app/shared/pipes/ceph-short-version.pipe.ts | 18 + .../shared/pipes/dimless-binary-per-second.pipe.ts | 24 + .../app/shared/pipes/dimless-binary.pipe.spec.ts | 56 + .../src/app/shared/pipes/dimless-binary.pipe.ts | 24 + .../src/app/shared/pipes/dimless.pipe.spec.ts | 56 + .../frontend/src/app/shared/pipes/dimless.pipe.ts | 14 + .../src/app/shared/pipes/duration.pipe.spec.ts | 17 + .../frontend/src/app/shared/pipes/duration.pipe.ts | 37 + .../src/app/shared/pipes/empty.pipe.spec.ts | 18 + .../frontend/src/app/shared/pipes/empty.pipe.ts | 12 + .../src/app/shared/pipes/encode-uri.pipe.spec.ts | 13 + .../src/app/shared/pipes/encode-uri.pipe.ts | 10 + .../src/app/shared/pipes/filter.pipe.spec.ts | 54 + .../frontend/src/app/shared/pipes/filter.pipe.ts | 25 + .../src/app/shared/pipes/health-color.pipe.spec.ts | 47 + .../src/app/shared/pipes/health-color.pipe.ts | 17 + .../src/app/shared/pipes/iops.pipe.spec.ts | 8 + .../frontend/src/app/shared/pipes/iops.pipe.ts | 10 + .../app/shared/pipes/iscsi-backstore.pipe.spec.ts | 17 + .../src/app/shared/pipes/iscsi-backstore.pipe.ts | 15 + .../src/app/shared/pipes/join.pipe.spec.ts | 13 + .../frontend/src/app/shared/pipes/join.pipe.ts | 10 + .../src/app/shared/pipes/log-priority.pipe.spec.ts | 32 + .../src/app/shared/pipes/log-priority.pipe.ts | 20 + .../frontend/src/app/shared/pipes/map.pipe.spec.ts | 25 + .../frontend/src/app/shared/pipes/map.pipe.ts | 15 + .../src/app/shared/pipes/milliseconds.pipe.spec.ts | 8 + .../src/app/shared/pipes/milliseconds.pipe.ts | 10 + .../app/shared/pipes/not-available.pipe.spec.ts | 30 + .../src/app/shared/pipes/not-available.pipe.ts | 15 + .../src/app/shared/pipes/ordinal.pipe.spec.ts | 8 + .../frontend/src/app/shared/pipes/ordinal.pipe.ts | 25 + .../frontend/src/app/shared/pipes/pipes.module.ts | 125 + .../pipes/rbd-configuration-source.pipe.spec.ts | 22 + .../shared/pipes/rbd-configuration-source.pipe.ts | 15 + .../app/shared/pipes/relative-date.pipe.spec.ts | 44 + .../src/app/shared/pipes/relative-date.pipe.ts | 57 + .../src/app/shared/pipes/round.pipe.spec.ts | 13 + .../frontend/src/app/shared/pipes/round.pipe.ts | 12 + .../app/shared/pipes/sanitize-html.pipe.spec.ts | 26 + .../src/app/shared/pipes/sanitize-html.pipe.ts | 13 + .../app/shared/pipes/search-highlight.pipe.spec.ts | 41 + .../src/app/shared/pipes/search-highlight.pipe.ts | 26 + .../src/app/shared/pipes/truncate.pipe.spec.ts | 21 + .../frontend/src/app/shared/pipes/truncate.pipe.ts | 16 + .../src/app/shared/pipes/upper-first.pipe.spec.ts | 17 + .../src/app/shared/pipes/upper-first.pipe.ts | 12 + .../rxjs/operators/page-visibilty.operator.ts | 20 + .../services/api-interceptor.service.spec.ts | 227 + .../app/shared/services/api-interceptor.service.ts | 133 + .../app/shared/services/auth-guard.service.spec.ts | 54 + .../src/app/shared/services/auth-guard.service.ts | 29 + .../shared/services/auth-storage.service.spec.ts | 47 + .../app/shared/services/auth-storage.service.ts | 59 + .../services/cd-table-server-side.service.spec.ts | 16 + .../services/cd-table-server-side.service.ts | 14 + .../services/change-password-guard.service.spec.ts | 68 + .../services/change-password-guard.service.ts | 42 + .../src/app/shared/services/device.service.spec.ts | 92 + .../src/app/shared/services/device.service.ts | 57 + .../src/app/shared/services/doc.service.spec.ts | 75 + .../src/app/shared/services/doc.service.ts | 65 + .../app/shared/services/favicon.service.spec.ts | 23 + .../src/app/shared/services/favicon.service.ts | 79 + .../services/feature-toggles-guard.service.spec.ts | 72 + .../services/feature-toggles-guard.service.ts | 30 + .../services/feature-toggles.service.spec.ts | 54 + .../app/shared/services/feature-toggles.service.ts | 37 + .../app/shared/services/formatter.service.spec.ts | 90 + .../src/app/shared/services/formatter.service.ts | 77 + .../shared/services/js-error-handler.service.ts | 33 + .../app/shared/services/language.service.spec.ts | 34 + .../src/app/shared/services/language.service.ts | 23 + .../src/app/shared/services/modal.service.spec.ts | 59 + .../src/app/shared/services/modal.service.ts | 28 + .../services/module-status-guard.service.spec.ts | 102 + .../shared/services/module-status-guard.service.ts | 101 + .../services/motd-notification.service.spec.ts | 117 + .../shared/services/motd-notification.service.ts | 84 + .../shared/services/ngzone-scheduler.service.ts | 48 + .../shared/services/no-sso-guard.service.spec.ts | 49 + .../app/shared/services/no-sso-guard.service.ts | 28 + .../shared/services/notification.service.spec.ts | 285 + .../app/shared/services/notification.service.ts | 237 + .../services/password-policy.service.spec.ts | 208 + .../app/shared/services/password-policy.service.ts | 65 + .../services/prometheus-alert-formatter.spec.ts | 95 + .../shared/services/prometheus-alert-formatter.ts | 74 + .../services/prometheus-alert.service.spec.ts | 214 + .../shared/services/prometheus-alert.service.ts | 100 + .../prometheus-notification.service.spec.ts | 227 + .../services/prometheus-notification.service.ts | 51 + .../prometheus-silence-matcher.service.spec.ts | 133 + .../services/prometheus-silence-matcher.service.ts | 78 + .../services/rbd-configuration.service.spec.ts | 45 + .../shared/services/rbd-configuration.service.ts | 144 + .../services/refresh-interval.service.spec.ts | 52 + .../shared/services/refresh-interval.service.ts | 46 + .../app/shared/services/summary.service.spec.ts | 179 + .../src/app/shared/services/summary.service.ts | 89 + .../app/shared/services/task-list.service.spec.ts | 133 + .../src/app/shared/services/task-list.service.ts | 111 + .../shared/services/task-manager.service.spec.ts | 72 + .../app/shared/services/task-manager.service.ts | 59 + .../shared/services/task-message.service.spec.ts | 312 + .../app/shared/services/task-message.service.ts | 424 + .../shared/services/task-wrapper.service.spec.ts | 98 + .../app/shared/services/task-wrapper.service.ts | 68 + .../telemetry-notification.service.spec.ts | 33 + .../services/telemetry-notification.service.ts | 16 + .../services/text-to-download.service.spec.ts | 20 + .../shared/services/text-to-download.service.ts | 12 + .../app/shared/services/time-diff.service.spec.ts | 71 + .../src/app/shared/services/time-diff.service.ts | 55 + .../src/app/shared/services/timer.service.spec.ts | 68 + .../src/app/shared/services/timer.service.ts | 29 + .../shared/services/url-builder.service.spec.ts | 37 + .../src/app/shared/services/url-builder.service.ts | 50 + .../shared/services/wizard-steps.service.spec.ts | 16 + .../app/shared/services/wizard-steps.service.ts | 58 + .../frontend/src/app/shared/shared.module.ts | 19 + .../mgr/dashboard/frontend/src/assets/.gitkeep | 0 .../assets/Ceph_Ceph_Logo_with_text_red_white.svg | 69 + .../src/assets/Ceph_Ceph_Logo_with_text_white.svg | 69 + .../dashboard/frontend/src/assets/Ceph_Logo.svg | 71 + .../frontend/src/assets/ceph_background.gif | Bin 0 -> 98115 bytes .../mgr/dashboard/frontend/src/assets/loading.gif | Bin 0 -> 35386 bytes .../dashboard/frontend/src/assets/logo-mini.png | Bin 0 -> 1811 bytes .../frontend/src/assets/prometheus_logo.svg | 50 + .../frontend/src/environments/environment.tpl.ts | 10 + src/pybind/mgr/dashboard/frontend/src/favicon.ico | Bin 0 -> 1150 bytes src/pybind/mgr/dashboard/frontend/src/index.html | 24 + .../mgr/dashboard/frontend/src/jestGlobalMocks.ts | 7 + .../dashboard/frontend/src/locale/messages.cs.xlf | 14162 ++++++++++ .../frontend/src/locale/messages.de-DE.xlf | 14885 ++++++++++ .../frontend/src/locale/messages.es-ES.xlf | 14886 ++++++++++ .../frontend/src/locale/messages.fr-FR.xlf | 14885 ++++++++++ .../frontend/src/locale/messages.id-ID.xlf | 14069 +++++++++ .../frontend/src/locale/messages.it-IT.xlf | 14885 ++++++++++ .../frontend/src/locale/messages.ja-JP.xlf | 14882 ++++++++++ .../frontend/src/locale/messages.ko-KR.xlf | 14562 ++++++++++ .../frontend/src/locale/messages.pl-PL.xlf | 14066 +++++++++ .../frontend/src/locale/messages.pt-BR.xlf | 14885 ++++++++++ .../frontend/src/locale/messages.zh-CN.xlf | 14881 ++++++++++ .../frontend/src/locale/messages.zh-TW.xlf | 14884 ++++++++++ src/pybind/mgr/dashboard/frontend/src/main.ts | 23 + src/pybind/mgr/dashboard/frontend/src/polyfills.ts | 54 + src/pybind/mgr/dashboard/frontend/src/setupJest.ts | 11 + src/pybind/mgr/dashboard/frontend/src/styles.scss | 138 + .../frontend/src/styles/_chart-tooltip.scss | 59 + .../frontend/src/styles/bootstrap-extends.scss | 129 + .../frontend/src/styles/ceph-custom/_basics.scss | 131 + .../frontend/src/styles/ceph-custom/_buttons.scss | 80 + .../frontend/src/styles/ceph-custom/_dropdown.scss | 35 + .../frontend/src/styles/ceph-custom/_forms.scss | 86 + .../frontend/src/styles/ceph-custom/_grid.scss | 6 + .../frontend/src/styles/ceph-custom/_icons.scss | 16 + .../frontend/src/styles/ceph-custom/_index.scss | 5 + .../frontend/src/styles/ceph-custom/_navs.scss | 5 + .../frontend/src/styles/ceph-custom/_toast.scss | 30 + .../src/styles/defaults/_bootstrap-defaults.scss | 111 + .../frontend/src/styles/defaults/_functions.scss | 5 + .../frontend/src/styles/defaults/_index.scss | 4 + .../frontend/src/styles/defaults/_mixins.scss | 34 + .../frontend/src/styles/vendor/_index.scss | 22 + .../src/styles/vendor/_style-overrides.scss | 4 + .../frontend/src/styles/vendor/_variables.scss | 17 + .../frontend/src/testing/activated-route-stub.ts | 26 + .../frontend/src/testing/unit-test-helper.ts | 692 + src/pybind/mgr/dashboard/frontend/src/typings.d.ts | 5 + .../mgr/dashboard/frontend/tsconfig.app.json | 14 + src/pybind/mgr/dashboard/frontend/tsconfig.json | 42 + .../mgr/dashboard/frontend/tsconfig.spec.json | 21 + src/pybind/mgr/dashboard/frontend/tslint.json | 118 + 1221 files changed, 307382 insertions(+) create mode 100644 src/pybind/mgr/dashboard/frontend/.browserslistrc create mode 100644 src/pybind/mgr/dashboard/frontend/.editorconfig create mode 100644 src/pybind/mgr/dashboard/frontend/.gherkin-lintrc create mode 100644 src/pybind/mgr/dashboard/frontend/.gitignore create mode 100644 src/pybind/mgr/dashboard/frontend/.htmllintrc create mode 100644 src/pybind/mgr/dashboard/frontend/.npmrc create mode 100644 src/pybind/mgr/dashboard/frontend/.prettierignore create mode 100644 src/pybind/mgr/dashboard/frontend/.prettierrc create mode 100644 src/pybind/mgr/dashboard/frontend/.stylelintrc create mode 100644 src/pybind/mgr/dashboard/frontend/angular.json create mode 100644 src/pybind/mgr/dashboard/frontend/applitools.config.js create mode 100644 src/pybind/mgr/dashboard/frontend/babel.config.js create mode 100755 src/pybind/mgr/dashboard/frontend/cd.js create mode 100644 src/pybind/mgr/dashboard/frontend/cypress.json create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/fixtures/block-rbd-status.json create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/fixtures/nfs-ganesha-status.json create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/inventory.json create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/services.json create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/fixtures/rgw-status.json create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/create-cluster.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/inventory.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/services.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/common/01-global.feature.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/common/create-cluster/create-cluster.feature.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/common/grafana.feature.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/common/urls.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/01-hosts.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/03-inventory.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/04-osds.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/05-services.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/grafana/grafana.feature create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/01-create-cluster-welcome.feature create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/02-create-cluster-add-host.feature create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/03-create-cluster-create-services.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/04-create-cluster-create-osds.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/05-create-cluster-review.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/06-cluster-check.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-osds.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/08-hosts.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/10-nfs-exports.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/nfs/nfs-export.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/page-helper.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.e2e-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.po.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/dashboard.vrt-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/login.vrt-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/plugins/index.js create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/support/commands.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/support/eyes-index.d.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/support/index.ts create mode 100644 src/pybind/mgr/dashboard/frontend/cypress/tsconfig.json create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/117.9781bbf8cc6a4aaa7e8e.js create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/281.0d0cd268ddc6a6760dd4.js create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/3rdpartylicenses.txt create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/483.f42c1d67e206231ecdac.js create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/Ceph_Logo.487a0001b327fa7f5232.svg create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_red_white.svg create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_white.svg create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Logo.svg create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/assets/ceph_background.gif create mode 100755 src/pybind/mgr/dashboard/frontend/dist/en-US/assets/loading.gif create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/assets/logo-mini.png create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/assets/prometheus_logo.svg create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/ceph_background.e82dd79127290ddbe8cb.gif create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/favicon.ico create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.2dfb5f36fc148e26e398.woff create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.7c20758e3e7c7dff7c8d.woff2 create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.86541105409e56d17291.svg create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.e182ad6df04f9177b326.eot create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.ee4d8bfd0af89fc714a2.ttf create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/index.html create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/main.c3b711a3156fe72f66f4.js create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.2068f3f22a496426465b.js create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/prometheus_logo.8b3183e5a2db0e87bb2b.svg create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.dfeb6a20b4d203b567dc.js create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.6bda3fa7e09a87cd4228.js create mode 100644 src/pybind/mgr/dashboard/frontend/dist/en-US/styles.f05c06a6a64f4730faae.css create mode 100644 src/pybind/mgr/dashboard/frontend/html-linter.config.json create mode 100644 src/pybind/mgr/dashboard/frontend/i18n.config.json create mode 100644 src/pybind/mgr/dashboard/frontend/ngcc.config.js create mode 100644 src/pybind/mgr/dashboard/frontend/package-lock.json create mode 100644 src/pybind/mgr/dashboard/frontend/package.json create mode 100644 src/pybind/mgr/dashboard/frontend/proxy.conf.json.sample create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/app-routing.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/app.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/app.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/app.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/app.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/app.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/block.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-setting/iscsi-setting.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-setting/iscsi-setting.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-setting/iscsi-setting.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-setting/iscsi-setting.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-tabs/iscsi-tabs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-tabs/iscsi-tabs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-tabs/iscsi-tabs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-tabs/iscsi-tabs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-details/iscsi-target-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-details/iscsi-target-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-details/iscsi-target-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-details/iscsi-target-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-discovery-modal/iscsi-target-discovery-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-discovery-modal/iscsi-target-discovery-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-discovery-modal/iscsi-target-discovery-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-discovery-modal/iscsi-target-discovery-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-image-settings-modal/iscsi-target-image-settings-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-image-settings-modal/iscsi-target-image-settings-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-image-settings-modal/iscsi-target-image-settings-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-image-settings-modal/iscsi-target-image-settings-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-iqn-settings-modal/iscsi-target-iqn-settings-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-iqn-settings-modal/iscsi-target-iqn-settings-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-iqn-settings-modal/iscsi-target-iqn-settings-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-iqn-settings-modal/iscsi-target-iqn-settings-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-list/iscsi-target-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-list/iscsi-target-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-list/iscsi-target-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-list/iscsi-target-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi/iscsi.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi/iscsi.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi/iscsi.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi/iscsi.component.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-create-modal/bootstrap-create-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-create-modal/bootstrap-create-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-create-modal/bootstrap-create-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-create-modal/bootstrap-create-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-import-modal/bootstrap-import-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-import-modal/bootstrap-import-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-import-modal/bootstrap-import-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-import-modal/bootstrap-import-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/daemon-list/daemon-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/daemon-list/daemon-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/daemon-list/daemon-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/daemon-list/daemon-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/image-list/image-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/image-list/image-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/image-list/image-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/image-list/image-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/mirror-health-color.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/mirror-health-color.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/mirroring.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/overview/overview.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/overview/overview.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/overview/overview.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/overview/overview.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-mode-modal/pool-edit-mode-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-mode-modal/pool-edit-mode-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-mode-modal/pool-edit-mode-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-mode-modal/pool-edit-mode-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-mode-modal/pool-edit-mode-response.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-response.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-list/pool-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-list/pool-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-list/pool-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-list/pool-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-form/rbd-configuration-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-form/rbd-configuration-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-form/rbd-configuration-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-form/rbd-configuration-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-list/rbd-configuration-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-list/rbd-configuration-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-list/rbd-configuration-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-list/rbd-configuration-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-feature.interface.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-clone-request.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-copy-request.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-create-request.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-edit-request.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-mode.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-response.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-parent.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-form/rbd-namespace-form-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-form/rbd-namespace-form-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-form/rbd-namespace-form-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-form/rbd-namespace-form-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-list/rbd-namespace-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-list/rbd-namespace-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-list/rbd-namespace-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-list/rbd-namespace-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-performance/rbd-performance.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-performance/rbd-performance.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-performance/rbd-performance.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-performance/rbd-performance.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-form/rbd-snapshot-form-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-form/rbd-snapshot-form-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-form/rbd-snapshot-form-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-form/rbd-snapshot-form-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-actions.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-tabs/rbd-tabs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-tabs/rbd-tabs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-tabs/rbd-tabs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-tabs/rbd-tabs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-list/rbd-trash-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-list/rbd-trash-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-list/rbd-trash-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-list/rbd-trash-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-move-modal/rbd-trash-move-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-move-modal/rbd-trash-move-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-move-modal/rbd-trash-move-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-move-modal/rbd-trash-move-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-purge-modal/rbd-trash-purge-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-purge-modal/rbd-trash-purge-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-purge-modal/rbd-trash-purge-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-purge-modal/rbd-trash-purge-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-restore-modal/rbd-trash-restore-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-restore-modal/rbd-trash-restore-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-restore-modal/rbd-trash-restore-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-trash-restore-modal/rbd-trash-restore-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/ceph.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-chart/cephfs-chart.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-chart/cephfs-chart.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-chart/cephfs-chart.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-chart/cephfs-chart.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-clients/cephfs-clients.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-clients/cephfs-clients.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-clients/cephfs-clients.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-clients/cephfs-clients.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-detail/cephfs-detail.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-detail/cephfs-detail.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-detail/cephfs-detail.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-detail/cephfs-detail.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-directories/cephfs-directories.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-directories/cephfs-directories.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-directories/cephfs-directories.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-directories/cephfs-directories.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-list/cephfs-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-list/cephfs-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-list/cephfs-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-list/cephfs-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-tabs/cephfs-tabs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-tabs/cephfs-tabs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-tabs/cephfs-tabs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-tabs/cephfs-tabs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/cluster.module.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-details/configuration-details.component.html create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-details/configuration-details.component.scss create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-details/configuration-details.component.spec.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-details/configuration-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-form/configuration-form-create-request.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-form/configuration-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-form/configuration-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-form/configuration-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-form/configuration-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster-review.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster-review.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster-review.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster-review.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/crushmap/crushmap.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/crushmap/crushmap.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/crushmap/crushmap.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/crushmap/crushmap.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/fixtures/host_list_response.json create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-details/host-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-details/host-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-details/host-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-details/host-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-form/host-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-form/host-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-form/host-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-form/host-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory-devices/fixtures/inventory_list_response.json create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory-devices/inventory-device.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory-devices/inventory-devices.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory-devices/inventory-devices.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory-devices/inventory-devices.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory-devices/inventory-devices.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory-host.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/inventory/inventory.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-details/mgr-module-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-details/mgr-module-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-details/mgr-module-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-details/mgr-module-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-form/mgr-module-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-form/mgr-module-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-form/mgr-module-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-form/mgr-module-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-list/mgr-module-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-list/mgr-module-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-list/mgr-module-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-module-list/mgr-module-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/mgr-modules/mgr-modules.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/monitor/monitor.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/monitor/monitor.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/monitor/monitor.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/monitor/monitor.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-creation-preview-modal/osd-creation-preview-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-creation-preview-modal/osd-creation-preview-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-creation-preview-modal/osd-creation-preview-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-creation-preview-modal/osd-creation-preview-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-details/osd-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-details/osd-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-details/osd-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-details/osd-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-groups/devices-selection-change-event.interface.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-groups/devices-selection-clear-event.interface.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-groups/osd-devices-selection-groups.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-groups/osd-devices-selection-groups.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-groups/osd-devices-selection-groups.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-groups/osd-devices-selection-groups.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-modal/osd-devices-selection-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-modal/osd-devices-selection-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-modal/osd-devices-selection-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-devices-selection-modal/osd-devices-selection-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-indiv-modal/osd-flags-indiv-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-indiv-modal/osd-flags-indiv-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-indiv-modal/osd-flags-indiv-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-indiv-modal/osd-flags-indiv-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-modal/osd-flags-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-modal/osd-flags-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-modal/osd-flags-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-modal/osd-flags-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-form/drive-group.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-form/osd-feature.interface.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-form/osd-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-form/osd-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-form/osd-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-form/osd-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/fixtures/osd_list_response.json create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/osd-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/osd-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/osd-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/osd-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-pg-scrub-modal/osd-pg-scrub-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-pg-scrub-modal/osd-pg-scrub-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-pg-scrub-modal/osd-pg-scrub-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-pg-scrub-modal/osd-pg-scrub-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-pg-scrub-modal/osd-pg-scrub-modal.options.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-recv-speed-modal/osd-recv-speed-modal.component.html create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-recv-speed-modal/osd-recv-speed-modal.component.scss create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-recv-speed-modal/osd-recv-speed-modal.component.spec.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-recv-speed-modal/osd-recv-speed-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-reweight-modal/osd-reweight-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-reweight-modal/osd-reweight-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-reweight-modal/osd-reweight-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-reweight-modal/osd-reweight-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-scrub-modal/osd-scrub-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-scrub-modal/osd-scrub-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-scrub-modal/osd-scrub-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-scrub-modal/osd-scrub-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/active-alert-list/active-alert-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/active-alert-list/active-alert-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/active-alert-list/active-alert-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/active-alert-list/active-alert-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/prometheus-list-helper.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/prometheus-tabs/prometheus-tabs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/prometheus-tabs/prometheus-tabs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/prometheus-tabs/prometheus-tabs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/prometheus-tabs/prometheus-tabs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/rules-list/rules-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/rules-list/rules-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/rules-list/rules-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/rules-list/rules-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-list/silence-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-list/silence-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-list/silence-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-list/silence-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-matcher-modal/silence-matcher-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-matcher-modal/silence-matcher-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-matcher-modal/silence-matcher-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-matcher-modal/silence-matcher-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/placement.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/placement.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-daemon-list/service-daemon-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-daemon-list/service-daemon-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-daemon-list/service-daemon-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-daemon-list/service-daemon-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-details/service-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-details/service-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-details/service-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-details/service-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-form/service-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-form/service-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-form/service-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-form/service-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/services.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/services.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/services.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/services.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/telemetry/telemetry.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/telemetry/telemetry.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/telemetry/telemetry.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/telemetry/telemetry.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/dashboard.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/dashboard/dashboard.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/dashboard/dashboard.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/dashboard/dashboard.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/dashboard/dashboard.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-card/info-card-popover.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-card/info-card.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-card/info-card.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-card/info-card.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-card/info-card.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-group/info-group.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-group/info-group.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-group/info-group.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/info-group/info-group.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/mds-summary.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/mds-summary.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/mgr-summary.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/mgr-summary.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/mon-summary.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/mon-summary.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/osd-summary.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/osd-summary.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/models/nfs.fsal.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-details/nfs-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-details/nfs-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-details/nfs-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-details/nfs-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form-client/nfs-form-client.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form-client/nfs-form-client.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form-client/nfs-form-client.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form-client/nfs-form-client.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form/nfs-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form/nfs-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form/nfs-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form/nfs-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-list/nfs-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-list/nfs-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-list/nfs-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-list/nfs-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/performance-counter.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/performance-counter/performance-counter.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/performance-counter/performance-counter.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/performance-counter/performance-counter.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/performance-counter/performance-counter.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/table-performance-counter/table-performance-counter.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/table-performance-counter/table-performance-counter.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/table-performance-counter/table-performance-counter.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/performance-counter/table-performance-counter/table-performance-counter.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/crush-rule-form-modal/crush-rule-form-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/crush-rule-form-modal/crush-rule-form-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/crush-rule-form-modal/crush-rule-form-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/crush-rule-form-modal/crush-rule-form-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/erasure-code-profile-form/erasure-code-profile-form-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/erasure-code-profile-form/erasure-code-profile-form-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/erasure-code-profile-form/erasure-code-profile-form-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/erasure-code-profile-form/erasure-code-profile-form-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-details/pool-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-details/pool-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-details/pool-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-details/pool-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form-data.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-list/pool-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-list/pool-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-list/pool-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-list/pool-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-stat.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-bucket-mfa-delete.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-bucket-versioning.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-daemon.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-user-capabilities.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-user-capability.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-user-s3-key.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-user-subuser.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-user-swift-key.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-form/rgw-bucket-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-form/rgw-bucket-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-form/rgw-bucket-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-form/rgw-bucket-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-list/rgw-bucket-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-list/rgw-bucket-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-list/rgw-bucket-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-list/rgw-bucket-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-details/rgw-daemon-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-details/rgw-daemon-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-details/rgw-daemon-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-details/rgw-daemon-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-list/rgw-daemon-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-list/rgw-daemon-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-list/rgw-daemon-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-daemon-list/rgw-daemon-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-capability-modal/rgw-user-capability-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-capability-modal/rgw-user-capability-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-capability-modal/rgw-user-capability-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-capability-modal/rgw-user-capability-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-details/rgw-user-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-details/rgw-user-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-details/rgw-user-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-details/rgw-user-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-form/rgw-user-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-form/rgw-user-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-form/rgw-user-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-form/rgw-user-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-list/rgw-user-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-list/rgw-user-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-list/rgw-user-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-list/rgw-user-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-s3-key-modal/rgw-user-s3-key-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-s3-key-modal/rgw-user-s3-key-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-s3-key-modal/rgw-user-s3-key-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-s3-key-modal/rgw-user-s3-key-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-subuser-modal/rgw-user-subuser-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-subuser-modal/rgw-user-subuser-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-subuser-modal/rgw-user-subuser-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-subuser-modal/rgw-user-subuser-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-swift-key-modal/rgw-user-swift-key-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-swift-key-modal/rgw-user-swift-key-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-swift-key-modal/rgw-user-swift-key-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-swift-key-modal/rgw-user-swift-key-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/ceph-shared.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/device-list/device-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/device-list/device-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/device-list/device-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/device-list/device-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/pg-category.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/pg-category.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/pg-category.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/fixtures/smart_data_version_1_0_ata_response.json create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/fixtures/smart_data_version_1_0_nvme_response.json create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/fixtures/smart_data_version_1_0_scsi_response.json create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/smart-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/smart-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/smart-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/smart-list/smart-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/auth.module.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login-password-form/login-password-form.component.html create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login-password-form/login-password-form.component.scss create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login-password-form/login-password-form.component.spec.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login-password-form/login-password-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login/login.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login/login.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login/login.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/login/login.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-details/role-details.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-details/role-details.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-details/role-details.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-details/role-details.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form-mode.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-list/role-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-list/role-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-list/role-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-list/role-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form-mode.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form-role.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-list/user-list.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-list/user-list.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-list/user-list.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-list/user-list.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-password-form/user-password-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-password-form/user-password-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-password-form/user-password-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-password-form/user-password-form.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-tabs/user-tabs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-tabs/user-tabs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-tabs/user-tabs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-tabs/user-tabs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/context/context.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/context/context.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/context/context.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/context/context.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/core.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/error/error.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/error/error.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/error/error.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/error/error.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/error/error.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/blank-layout/blank-layout.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/blank-layout/blank-layout.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/blank-layout/blank-layout.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/blank-layout/blank-layout.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/login-layout/login-layout.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/login-layout/login-layout.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/login-layout/login-layout.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/login-layout/login-layout.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/workbench-layout/workbench-layout.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/workbench-layout/workbench-layout.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/workbench-layout/workbench-layout.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/layouts/workbench-layout/workbench-layout.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/about/about.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/about/about.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/about/about.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/about/about.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/administration/administration.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/administration/administration.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/administration/administration.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/administration/administration.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/api-docs/api-docs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/api-docs/api-docs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/api-docs/api-docs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/breadcrumbs/breadcrumbs.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/breadcrumbs/breadcrumbs.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/breadcrumbs/breadcrumbs.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/breadcrumbs/breadcrumbs.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/dashboard-help/dashboard-help.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/dashboard-help/dashboard-help.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/dashboard-help/dashboard-help.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/dashboard-help/dashboard-help.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/identity/identity.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/identity/identity.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/identity/identity.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/identity/identity.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation/navigation.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation/navigation.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation/navigation.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation/navigation.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/core/navigation/notifications/notifications.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/api-client.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/api-client.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/auth.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/auth.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/ceph-service.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/cluster.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/cluster.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/configuration.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/configuration.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/crush-rule.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/crush-rule.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/custom-login-banner.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/custom-login-banner.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/daemon.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/daemon.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/erasure-code-profile.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/erasure-code-profile.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/health.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/health.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/host.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/host.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/iscsi.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/iscsi.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/logging.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/logging.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/logs.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/logs.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/mgr-module.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/mgr-module.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/monitor.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/monitor.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/motd.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/motd.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/nfs.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/nfs.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/orchestrator.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/orchestrator.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/osd.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/osd.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/performance-counter.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/performance-counter.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/pool.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/pool.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rbd-mirroring.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rbd-mirroring.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rbd.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rbd.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rbd.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-bucket.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-bucket.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-daemon.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-daemon.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-site.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-site.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-user.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-user.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/role.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/role.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/scope.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/scope.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/settings.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/settings.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/telemetry.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/telemetry.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/user.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/api/user.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/cd-helper.class.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/cd-helper.class.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/crush.node.selection.class.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/crush.node.selection.class.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/css-helper.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/list-with-details.class.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/table-status-view-cache.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/table-status-view-cache.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/table-status.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/classes/table-status.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/alert-panel/alert-panel.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/alert-panel/alert-panel.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/alert-panel/alert-panel.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/alert-panel/alert-panel.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/back-button/back-button.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/back-button/back-button.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/back-button/back-button.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/back-button/back-button.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/components.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.types.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.types.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/copy2clipboard-button/copy2clipboard-button.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/copy2clipboard-button/copy2clipboard-button.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/copy2clipboard-button/copy2clipboard-button.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/copy2clipboard-button/copy2clipboard-button.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/custom-login-banner/custom-login-banner.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/custom-login-banner/custom-login-banner.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/custom-login-banner/custom-login-banner.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/custom-login-banner/custom-login-banner.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/date-time-picker/date-time-picker.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/date-time-picker/date-time-picker.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/date-time-picker/date-time-picker.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/date-time-picker/date-time-picker.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/doc/doc.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/doc/doc.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/doc/doc.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/doc/doc.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/download-button/download-button.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/download-button/download-button.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/download-button/download-button.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/download-button/download-button.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-button-panel/form-button-panel.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-button-panel/form-button-panel.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-button-panel/form-button-panel.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-button-panel/form-button-panel.component.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-modal/form-modal.component.html create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-modal/form-modal.component.scss create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-modal/form-modal.component.spec.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-modal/form-modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/grafana/grafana.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/grafana/grafana.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/grafana/grafana.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/grafana/grafana.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/helper/helper.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/helper/helper.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/helper/helper.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/helper/helper.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/language-selector.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/language-selector/supported-languages.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/loading-panel/loading-panel.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/loading-panel/loading-panel.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/loading-panel/loading-panel.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/loading-panel/loading-panel.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/modal/modal.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/modal/modal.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/modal/modal.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/modal/modal.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/motd/motd.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/motd/motd.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/motd/motd.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/motd/motd.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/notifications-sidebar/notifications-sidebar.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/notifications-sidebar/notifications-sidebar.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/notifications-sidebar/notifications-sidebar.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/notifications-sidebar/notifications-sidebar.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/orchestrator-doc-panel/orchestrator-doc-panel.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/orchestrator-doc-panel/orchestrator-doc-panel.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/orchestrator-doc-panel/orchestrator-doc-panel.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/orchestrator-doc-panel/orchestrator-doc-panel.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/pwd-expiration-notification/pwd-expiration-notification.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/pwd-expiration-notification/pwd-expiration-notification.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/pwd-expiration-notification/pwd-expiration-notification.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/pwd-expiration-notification/pwd-expiration-notification.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/refresh-selector/refresh-selector.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/refresh-selector/refresh-selector.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/refresh-selector/refresh-selector.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/refresh-selector/refresh-selector.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select-badges/select-badges.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select-badges/select-badges.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select-badges/select-badges.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select-badges/select-badges.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select/select-messages.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select/select-option.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select/select.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select/select.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select/select.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/select/select.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/sparkline/sparkline.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/sparkline/sparkline.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/sparkline/sparkline.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/sparkline/sparkline.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/submit-button/submit-button.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/submit-button/submit-button.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/submit-button/submit-button.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/submit-button/submit-button.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/telemetry-notification/telemetry-notification.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/telemetry-notification/telemetry-notification.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/telemetry-notification/telemetry-notification.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/telemetry-notification/telemetry-notification.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/usage-bar/usage-bar.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/usage-bar/usage-bar.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/usage-bar/usage-bar.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/usage-bar/usage-bar.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/wizard/wizard.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/wizard/wizard.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/wizard/wizard.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/components/wizard/wizard.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/constants/app.constants.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/datatable.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-key-value/table-key-value.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-key-value/table-key-value.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-key-value/table-key-value.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-key-value/table-key-value.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/decorators/cd-encode.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/decorators/cd-encode.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/autofocus.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/autofocus.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/dimless-binary-per-second.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/dimless-binary-per-second.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/dimless-binary.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/dimless-binary.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/directives.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-input-disable.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-loading.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-loading.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/form-scope.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/iops.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/iops.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/milliseconds.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/milliseconds.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-control.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-control.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-group.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-group.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/password-button.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/password-button.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/stateful-tab.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/stateful-tab.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/trim.directive.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/directives/trim.directive.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/enum/cell-template.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/enum/components.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/enum/health-color.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/enum/icons.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/enum/notification-type.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/enum/unix_errno.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/enum/view-cache-status.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-group.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-group.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-validators.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-validators.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/alertmanager-silence.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/breadcrumbs.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-form-modal-field-config.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-notification.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-notification.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-pwd-expiration-settings.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-pwd-policy-settings.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-action.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-column-filter.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-column-filters-change.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-column.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-fetch-data-context.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-paging.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-table-selection.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cd-user-config.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-directory-models.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/chart-tooltip.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/configuration.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/credentials.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/crush-node.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/crush-rule.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/crush-step.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/daemon.interface.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/devices.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/erasure-code-profile.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/executing-task.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/finished-task.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/flag.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/image-spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/inventory-device-type.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/login-response.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/mirroring-summary.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/orchestrator.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/orchestrator.interface.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/osd-deployment-options.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/osd-settings.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/permission.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/permissions.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/pool-form-info.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/prometheus-alerts.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/service.interface.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/smart.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/summary.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/task-exception.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/task.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/models/wizard-steps.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/array.pipe.spec.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/array.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/boolean-text.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/boolean-text.pipe.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/boolean.pipe.spec.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/boolean.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/cd-date.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/cd-date.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/ceph-release-name.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/ceph-release-name.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/ceph-short-version.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/ceph-short-version.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless-binary-per-second.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless-binary.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless-binary.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/duration.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/duration.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/empty.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/empty.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/encode-uri.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/encode-uri.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/filter.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/filter.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/health-color.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/health-color.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/iops.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/iops.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/iscsi-backstore.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/iscsi-backstore.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/join.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/join.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/log-priority.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/log-priority.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/map.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/map.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/milliseconds.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/milliseconds.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/not-available.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/not-available.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/ordinal.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/ordinal.pipe.ts create mode 100755 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/pipes.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/rbd-configuration-source.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/rbd-configuration-source.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/relative-date.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/relative-date.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/round.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/round.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/sanitize-html.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/sanitize-html.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/search-highlight.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/search-highlight.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/truncate.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/truncate.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/upper-first.pipe.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/upper-first.pipe.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/rxjs/operators/page-visibilty.operator.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/api-interceptor.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/api-interceptor.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/auth-guard.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/auth-guard.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/auth-storage.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/auth-storage.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/cd-table-server-side.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/cd-table-server-side.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/change-password-guard.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/change-password-guard.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/device.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/device.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/doc.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/doc.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/favicon.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/favicon.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/feature-toggles-guard.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/feature-toggles-guard.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/feature-toggles.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/feature-toggles.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/formatter.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/formatter.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/js-error-handler.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/language.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/modal.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/modal.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/module-status-guard.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/module-status-guard.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/motd-notification.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/motd-notification.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/ngzone-scheduler.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/no-sso-guard.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/no-sso-guard.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/notification.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/notification.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/password-policy.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/password-policy.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-alert-formatter.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-alert-formatter.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-alert.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-alert.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-notification.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-notification.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-silence-matcher.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-silence-matcher.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/rbd-configuration.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/rbd-configuration.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/refresh-interval.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/refresh-interval.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-list.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-list.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-manager.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-manager.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-message.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-message.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-wrapper.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-wrapper.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/telemetry-notification.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/telemetry-notification.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/text-to-download.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/text-to-download.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/time-diff.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/time-diff.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/timer.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/timer.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/url-builder.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/url-builder.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/wizard-steps.service.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/services/wizard-steps.service.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/shared/shared.module.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/assets/.gitkeep create mode 100644 src/pybind/mgr/dashboard/frontend/src/assets/Ceph_Ceph_Logo_with_text_red_white.svg create mode 100644 src/pybind/mgr/dashboard/frontend/src/assets/Ceph_Ceph_Logo_with_text_white.svg create mode 100644 src/pybind/mgr/dashboard/frontend/src/assets/Ceph_Logo.svg create mode 100644 src/pybind/mgr/dashboard/frontend/src/assets/ceph_background.gif create mode 100755 src/pybind/mgr/dashboard/frontend/src/assets/loading.gif create mode 100644 src/pybind/mgr/dashboard/frontend/src/assets/logo-mini.png create mode 100644 src/pybind/mgr/dashboard/frontend/src/assets/prometheus_logo.svg create mode 100644 src/pybind/mgr/dashboard/frontend/src/environments/environment.tpl.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/favicon.ico create mode 100644 src/pybind/mgr/dashboard/frontend/src/index.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/jestGlobalMocks.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.cs.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.de-DE.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.es-ES.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.fr-FR.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.id-ID.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.it-IT.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.ja-JP.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.ko-KR.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.pl-PL.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.pt-BR.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.zh-CN.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/locale/messages.zh-TW.xlf create mode 100644 src/pybind/mgr/dashboard/frontend/src/main.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/polyfills.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/setupJest.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/_chart-tooltip.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/bootstrap-extends.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_basics.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_buttons.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_dropdown.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_forms.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_grid.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_icons.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_index.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_navs.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_toast.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/defaults/_bootstrap-defaults.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/defaults/_functions.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/defaults/_index.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/defaults/_mixins.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/vendor/_index.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/vendor/_style-overrides.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/styles/vendor/_variables.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/testing/activated-route-stub.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/testing/unit-test-helper.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/typings.d.ts create mode 100644 src/pybind/mgr/dashboard/frontend/tsconfig.app.json create mode 100644 src/pybind/mgr/dashboard/frontend/tsconfig.json create mode 100644 src/pybind/mgr/dashboard/frontend/tsconfig.spec.json create mode 100644 src/pybind/mgr/dashboard/frontend/tslint.json (limited to 'src/pybind/mgr/dashboard/frontend') diff --git a/src/pybind/mgr/dashboard/frontend/.browserslistrc b/src/pybind/mgr/dashboard/frontend/.browserslistrc new file mode 100644 index 000000000..5f47eea2c --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.browserslistrc @@ -0,0 +1,11 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 2 Chrome versions +last 2 Firefox versions +Firefox ESR +not dead diff --git a/src/pybind/mgr/dashboard/frontend/.editorconfig b/src/pybind/mgr/dashboard/frontend/.editorconfig new file mode 100644 index 000000000..6e87a003d --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/src/pybind/mgr/dashboard/frontend/.gherkin-lintrc b/src/pybind/mgr/dashboard/frontend/.gherkin-lintrc new file mode 100644 index 000000000..706b93bea --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.gherkin-lintrc @@ -0,0 +1,33 @@ +{ + "no-files-without-scenarios" : "on", + "no-unnamed-features": "on", + "no-unnamed-scenarios": "on", + "no-dupe-scenario-names": ["on", "in-feature"], + "no-dupe-feature-names": "on", + "no-partially-commented-tag-lines": "on", + "indentation": ["on", { + "Feature": 0, + "Background": 4, + "Scenario": 4, + "Step": 8, + "Examples": 8, + "example": 12 + }], + "no-trailing-spaces": "on", + "new-line-at-eof": ["on", "yes"], + "no-multiple-empty-lines": "on", + "no-empty-file": "on", + "no-scenario-outlines-without-examples": "on", + "name-length": "off", + "no-restricted-tags": ["on", {"tags": ["@watch", "@wip"]}], + "use-and": "off", + "no-duplicate-tags": "on", + "no-superfluous-tags": "on", + "no-homogenous-tags": "on", + "one-space-between-tags": "on", + "no-unused-variables": "on", + "no-background-only-scenario": "off", + "no-empty-background": "on", + "no-examples-in-scenarios": "on", + "scenario-size": ["on", { "steps-length": {"Background": 3, "Scenario": 15}}] +} diff --git a/src/pybind/mgr/dashboard/frontend/.gitignore b/src/pybind/mgr/dashboard/frontend/.gitignore new file mode 100644 index 000000000..4aaf66910 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.gitignore @@ -0,0 +1,49 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc + +# dependencies +/node_modules + +# IDEs and editors +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +testem.log +/typings + +# e2e +/cypress/screenshots +/cypress/videos +/cypress/reports + +# System Files +.DS_Store +Thumbs.db + +# Package lock files +yarn.lock + +# Ceph +!core +!*.core diff --git a/src/pybind/mgr/dashboard/frontend/.htmllintrc b/src/pybind/mgr/dashboard/frontend/.htmllintrc new file mode 100644 index 000000000..b06d7e7b6 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.htmllintrc @@ -0,0 +1,70 @@ +{ + "plugins": [], // npm modules to load + + "maxerr": false, + "raw-ignore-regex": false, + "attr-bans": [ + "align", + "background", + "bgcolor", + "border", + "longdesc", + "marginwidth", + "marginheight", + "style", + "width" + ], + "indent-delta": false, + "indent-style": "spaces", + "indent-width": 2, + "indent-width-cont": true, + "spec-char-escape": false, + "text-ignore-regex": false, + "tag-bans": [ + "style" + ], + "tag-close": true, + "tag-name-lowercase": true, + "tag-name-match": true, + "tag-self-close": false, + "doctype-first": false, + "doctype-html5": false, + "attr-name-style": false, + "attr-name-ignore-regex": false, + "attr-no-dup": true, + "attr-no-unsafe-char": true, + "attr-order": false, + "attr-quote-style": "double", + "attr-req-value": false, + "attr-new-line": 1, + "attr-validate": true, + "id-no-dup": false, + "id-class-no-ad": true, + "id-class-style": false, + "class-no-dup": true, + "class-style": "none", + "id-class-ignore-regex": "{{.*?}}", + "img-req-alt": false, + "img-req-src": true, + "html-valid-content-model": true, + "head-valid-content-model": true, + "href-style": false, + "link-req-noopener": false, + "label-req-for": false, + "line-end-style": "lf", + "line-no-trailing-whitespace": true, + "line-max-len": false, + "line-max-len-ignore-regex": false, + "head-req-title": true, + "title-no-dup": true, + "title-max-len": 60, + "html-req-lang": false, + "lang-style": "case", + "fig-req-figcaption": false, + "focusable-tabindex-style": false, + "input-radio-req-name": false, + "input-req-label": false, + "table-req-caption": false, + "table-req-header": false, + "tag-req-attr": false +} diff --git a/src/pybind/mgr/dashboard/frontend/.npmrc b/src/pybind/mgr/dashboard/frontend/.npmrc new file mode 100644 index 000000000..ce9882e34 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.npmrc @@ -0,0 +1,2 @@ +audit=false +save-exact=true diff --git a/src/pybind/mgr/dashboard/frontend/.prettierignore b/src/pybind/mgr/dashboard/frontend/.prettierignore new file mode 100644 index 000000000..2d19fc766 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.prettierignore @@ -0,0 +1 @@ +*.html diff --git a/src/pybind/mgr/dashboard/frontend/.prettierrc b/src/pybind/mgr/dashboard/frontend/.prettierrc new file mode 100644 index 000000000..e2c84e58f --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.prettierrc @@ -0,0 +1,6 @@ +{ + "arrowParens": "always", + "printWidth": 100, + "singleQuote": true, + "trailingComma": "none" +} diff --git a/src/pybind/mgr/dashboard/frontend/.stylelintrc b/src/pybind/mgr/dashboard/frontend/.stylelintrc new file mode 100644 index 000000000..c48d66dca --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/.stylelintrc @@ -0,0 +1,43 @@ +{ + "extends": "stylelint-config-sass-guidelines", + "plugins": [ + "stylelint-declaration-use-variable" + ], + "rules": { + "function-parentheses-space-inside": null, + "indentation": null, + "selector-no-qualifying-type": null, + "selector-class-pattern": null, + "selector-pseudo-element-no-unknown": null, + "selector-max-id": null, + "selector-max-compound-selectors": null, + "scss/at-extend-no-missing-placeholder": null, + "max-nesting-depth": null, + "scss/at-import-partial-extension-blacklist": null, + "value-no-vendor-prefix": null, + "scss/dollar-variable-pattern": [ + "^([a-z][a-z0-9]*)(-[a-z0-9]+)*$", + "message": "Variable name should be written in lower kebab-case (scss/dollar-variable-pattern)" + ], + "sh-waqar/declaration-use-variable": [ + [ + "/color/", + { + "ignoreValues": [ + "inherit", + "initial", + "transparent", + "/darken/", + "/\\w+\\.\\$.+/" + ] + } + ] + ], + "property-no-unknown": [ + true, + { + "ignoreSelectors": [":export"] + } + ] + } +} diff --git a/src/pybind/mgr/dashboard/frontend/angular.json b/src/pybind/mgr/dashboard/frontend/angular.json new file mode 100644 index 000000000..b49c00b8c --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/angular.json @@ -0,0 +1,227 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "ceph-dashboard": { + "i18n": { + "sourceLocale": { "code": "en-US", "baseHref": "" }, + "locales": { + "cs": { "translation": "src/locale/messages.cs.xlf", "baseHref": "" }, + "de": { "translation": "src/locale/messages.de-DE.xlf", "baseHref": "" }, + "es": { "translation": "src/locale/messages.es-ES.xlf", "baseHref": "" }, + "fr": { "translation": "src/locale/messages.fr-FR.xlf", "baseHref": "" }, + "id": { "translation": "src/locale/messages.id-ID.xlf", "baseHref": "" }, + "it": { "translation": "src/locale/messages.it-IT.xlf", "baseHref": "" }, + "ja": { "translation": "src/locale/messages.ja-JP.xlf", "baseHref": "" }, + "ko": { "translation": "src/locale/messages.ko-KR.xlf", "baseHref": "" }, + "pl": { "translation": "src/locale/messages.pl-PL.xlf", "baseHref": "" }, + "pt": { "translation": "src/locale/messages.pt-BR.xlf", "baseHref": "" }, + "zh-Hans": { "translation": "src/locale/messages.zh-CN.xlf", "baseHref": "" }, + "zh-Hant": { "translation": "src/locale/messages.zh-TW.xlf", "baseHref": "" } + } + }, + "root": "", + "sourceRoot": "src", + "projectType": "application", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "allowedCommonJsDependencies": [ + "brace-expansion", + "chart.js", + "core-js", + "file-saver", + "lodash" + ], + "i18nMissingTranslation": "ignore", + "outputPath": "dist", + "index": "src/index.html", + "main": "src/main.ts", + "tsConfig": "tsconfig.app.json", + "polyfills": "src/polyfills.ts", + "assets": [ + "src/assets", + "src/favicon.ico", + { + "glob": "**/swagger-ui.css", + "input": "node_modules/swagger-ui-dist", + "output": "." + }, + { + "glob": "**/swagger-ui-bundle.js", + "input": "node_modules/swagger-ui-dist", + "output": "." + } + ], + "styles": [ + "node_modules/swagger-ui/dist/swagger-ui.css", + "node_modules/ngx-toastr/toastr.css", + "src/styles.scss" + ], + "scripts": ["node_modules/chart.js/dist/Chart.bundle.js"], + "stylePreprocessorOptions": { + "includePaths": [ + "src" + ] + }, + "vendorChunk": true, + "extractLicenses": false, + "buildOptimizer": false, + "sourceMap": true, + "optimization": false, + "namedChunks": true + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "anyComponentStyle", + "maximumWarning": "6kb" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ] + }, + "cs": { + "localize": ["cs"] + }, + "de": { + "localize": ["de"] + }, + "en-US": { + "localize": ["en-US"] + }, + "es": { + "localize": ["es"] + }, + "fr": { + "localize": ["fr"] + }, + "id": { + "localize": ["id"] + }, + "it": { + "localize": ["it"] + }, + "ja": { + "localize": ["ja"] + }, + "ko": { + "localize": ["ko"] + }, + "pl": { + "localize": ["pl"] + }, + "pt": { + "localize": ["pt"] + }, + "zh-Hans": { + "localize": ["zh-Hans"] + }, + "zh-Hant": { + "localize": ["zh-Hant"] + } + }, + "defaultConfiguration": "" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "ceph-dashboard:build", + "proxyConfig": "proxy.conf.json" + }, + "configurations": { + "production": { + "browserTarget": "ceph-dashboard:build:production" + }, + "cs": { + "browserTarget": "ceph-dashboard:build:cs" + }, + "de": { + "browserTarget": "ceph-dashboard:build:de" + }, + "en-US": { + "browserTarget": "ceph-dashboard:build:en-US" + }, + "es": { + "browserTarget": "ceph-dashboard:build:es" + }, + "fr": { + "browserTarget": "ceph-dashboard:build:fr" + }, + "id": { + "browserTarget": "ceph-dashboard:build:id" + }, + "it": { + "browserTarget": "ceph-dashboard:build:it" + }, + "ja": { + "browserTarget": "ceph-dashboard:build:ja" + }, + "ko": { + "browserTarget": "ceph-dashboard:build:ko" + }, + "pl": { + "browserTarget": "ceph-dashboard:build:pl" + }, + "pt": { + "browserTarget": "ceph-dashboard:build:pt" + }, + "zh-Hans": { + "browserTarget": "ceph-dashboard:build:zh-Hans" + }, + "zh-Hant": { + "browserTarget": "ceph-dashboard:build:zh-Hant" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "ceph-dashboard:build" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "tsconfig.app.json", + "tsconfig.spec.json", + "cypress/tsconfig.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + }, + "cli": {} + } + }, + "defaultProject": "ceph-dashboard", + "schematics": { + "@schematics/angular:component": { + "prefix": "cd", + "style": "scss" + }, + "@schematics/angular:directive": { + "prefix": "cd" + } + }, + "cli": { + "analytics": false + } +} diff --git a/src/pybind/mgr/dashboard/frontend/applitools.config.js b/src/pybind/mgr/dashboard/frontend/applitools.config.js new file mode 100644 index 000000000..2bf52651e --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/applitools.config.js @@ -0,0 +1,21 @@ +const fs = require('fs'); + +// Read the contents of the ceph_release file to retrieve +// the branch +const cephRelease = fs.readFileSync('../../../../ceph_release', 'utf8').split('\n'); +const branch = cephRelease[2] === 'dev' ? 'master' : cephRelease[1]; +module.exports = { + appName: 'Ceph Dashboard', + apiKey: process.env.APPLITOOLS_API_KEY, + browser: [ + { width: 1920, height: 1080, name: 'chrome' }, + { width: 1920, height: 1080, name: 'firefox' }, + { width: 800, height: 600, name: 'chrome' }, + { width: 800, height: 600, name: 'firefox' } + ], + showLogs: false, + saveDebugData: true, + failCypressOnDiff: true, + concurrency: 4, + baselineBranchName: branch +}; diff --git a/src/pybind/mgr/dashboard/frontend/babel.config.js b/src/pybind/mgr/dashboard/frontend/babel.config.js new file mode 100644 index 000000000..4512a854a --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/babel.config.js @@ -0,0 +1,11 @@ +module.exports = function(api) { + api.cache(true); + + const presets = ['@babel/preset-env']; + const plugins = []; + + return { + presets, + plugins + }; +}; diff --git a/src/pybind/mgr/dashboard/frontend/cd.js b/src/pybind/mgr/dashboard/frontend/cd.js new file mode 100755 index 000000000..34d0ce29f --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cd.js @@ -0,0 +1,166 @@ +/** + * Ceph Dashboard node script + * This file should be used to aggregate all external scripts we need. + * Multiple flags can be used in the same call. + * + * Available flags: + * --env: Generates angular environment files. + * + * --pre: Modifies 'angular.json' to enable the build of custom locales using + * angular --localize. + * Languages can be defined using the environment variable DASHBOARD_FRONTEND_LANGS, + * if no value is provided all languages will be build. + * Default language is always build, even if not provided. + * p.e.: 'DASHBOARD_FRONTEND_LANGS="pt" node cd --pre', will build EN and PT. + * For backward compatibility we accept both long and short version of + * languages, p.e.: 'pt' and 'pt-BR' + * + * --res: Restores 'angular.json' to its original and removes the backup file. + */ + +const fs = require('fs'); + +const filename = './angular.json'; +const backup = './angular.backup.json'; + +if (process.argv.includes('--env')) { + envBuild(); +} + +if (process.argv.includes('--pre')) { + prepareLocales(); +} + +if (process.argv.includes('--res')) { + restoreLocales(); +} + +function prepareLocales() { + try { + fs.accessSync(backup, fs.constants.F_OK); + logger(`'${backup}' already exists, restoring it into '${filename}'}`); + fs.copyFileSync(backup, filename); + } catch (err) { + fs.copyFileSync(filename, backup); + logger(`'${filename}' was copied to '${backup}'`); + } + + let langs = process.env.DASHBOARD_FRONTEND_LANGS || ''; + if (langs == 'ALL') { + logger(`Preparing build of all languages.`); + return; + } else if (langs.length == 0) { + langs = []; + logger(`Preparing build of EN.`); + } else { + langs = langs.split(/[ ,]/); + logger(`Preparing build of EN and ${langs}.`); + } + + let angular = require(filename); + + let allLocales = angular['projects']['ceph-dashboard']['i18n']['locales']; + let locales = {}; + + langs.forEach((lang) => { + const short = lang.substring(0, 2); + locale = allLocales[short]; + if (locale) { + locales[short] = locale; + } else { + switch (lang) { + case 'zh-Hans': + case 'zh-CN': + locales['zh-Hans'] = allLocales['zh-Hans']; + break; + + case 'zh-TW': + case 'zh-Hant': + locales['zh-Hant'] = allLocales['zh-Hant']; + break; + } + } + }); + + angular['projects']['ceph-dashboard']['i18n']['locales'] = locales; + const newAngular = JSON.stringify(angular, null, 2); + + fs.writeFile(filename, newAngular, (err) => { + if (err) throw err; + logger(`Writing to ${filename}`); + }); +} + +function restoreLocales() { + fs.access(backup, fs.constants.F_OK, (err) => { + logger(`'${backup}' ${err ? 'does not exist' : 'exists'}`); + + if (!err) { + fs.copyFile(backup, filename, (err) => { + if (err) throw err; + logger(`'${backup}' was copied to '${filename}'`); + + fs.unlink(backup, (err) => { + if (err) throw err; + logger(`successfully deleted '${backup}'`); + }); + }); + } + }); +} + +function envBuild() { + origFile = 'src/environments/environment.tpl.ts'; + devFile = 'src/environments/environment.ts'; + prodFile = 'src/environments/environment.prod.ts'; + + const replacements = [ + { from: '{DEFAULT_LANG}', to: process.env.npm_package_config_locale }, + { from: '{COPYRIGHT_YEAR}', to: new Date().getFullYear() } + ]; + let dev = replacements.concat([{ from: `'{PRODUCTION}'`, to: false }]); + let prod = replacements.concat([{ from: `'{PRODUCTION}'`, to: true }]); + + fs.copyFile(origFile, devFile, (err) => { + if (err) throw err; + logger(`'${origFile}' was copied to '${devFile}'`); + + replace(devFile, dev); + }); + + fs.copyFile(origFile, prodFile, (err) => { + if (err) throw err; + logger(`'${origFile}' was copied to '${prodFile}'`); + + replace(prodFile, prod); + }); +} + +/** + * Replace strings in a file. + * + * @param {*} filename Relative path to the file + * @param {*} replacements List of replacements, each should have from' and 'to' + * proprieties. + */ +function replace(filename, replacements) { + fs.readFile(filename, 'utf8', (err, data) => { + if (err) throw err; + + replacements.forEach((rep) => { + data = data.replace(rep.from, rep.to); + }); + + fs.writeFile(filename, data, 'utf8', (err) => { + if (err) throw err; + logger(`Placeholders were replace in '${filename}'`); + }); + }); +} + +/** + * Writes logs to the console using the [cd.js] prefix + */ +function logger(message) { + console.log(`[cd.js] ${message}`); +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress.json b/src/pybind/mgr/dashboard/frontend/cypress.json new file mode 100644 index 000000000..fae585389 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress.json @@ -0,0 +1,22 @@ +{ + "baseUrl": "http://localhost:4200/", + "ignoreTestFiles": [ + "*.po.ts", + "**/orchestrator/**" + ], + "supportFile": "cypress/support/index.ts", + "video": false, + "defaultCommandTimeout": 120000, + "responseTimeout": 45000, + "viewportHeight": 1080, + "viewportWidth": 1920, + "projectId": "k7ab29", + "reporter": "cypress-multi-reporters", + "reporterOptions": { + "reporterEnabled": "spec, mocha-junit-reporter", + "mochaJunitReporterReporterOptions": { + "mochaFile": "cypress/reports/results-[hash].xml" + } + }, + "retries": 1 +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/fixtures/block-rbd-status.json b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/block-rbd-status.json new file mode 100644 index 000000000..1d6f30b9a --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/block-rbd-status.json @@ -0,0 +1 @@ +{ "available": false, "message": "No RBD pools in the cluster. Please create a pool with the \"rbd\" application label." } \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/frontend/cypress/fixtures/nfs-ganesha-status.json b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/nfs-ganesha-status.json new file mode 100644 index 000000000..4dbbaaccc --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/nfs-ganesha-status.json @@ -0,0 +1,4 @@ +{ + "available": false, + "message": "Ganesha config location is not configured. Please set the GANESHA_RADOS_POOL_NAMESPACE setting." +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/inventory.json b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/inventory.json new file mode 100644 index 000000000..21386f2d5 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/inventory.json @@ -0,0 +1,390 @@ +[ + { + "addr": "node1", + "devices": [ + { + "available": false, + "device_id": "", + "human_readable_type": "hdd", + "lvs": [], + "path": "/dev/vda", + "rejected_reasons": ["locked"], + "sys_api": { + "human_readable_size": "42.00 GB", + "locked": 1, + "model": "", + "nr_requests": "256", + "partitions": { + "vda1": { + "holders": [], + "human_readable_size": "2.00 MB", + "sectors": "4096", + "sectorsize": 512, + "size": 2097152.0, + "start": "2048" + }, + "vda2": { + "holders": [], + "human_readable_size": "20.00 MB", + "sectors": "40960", + "sectorsize": 512, + "size": 20971520.0, + "start": "6144" + }, + "vda3": { + "holders": [], + "human_readable_size": "41.98 GB", + "sectors": "88033247", + "sectorsize": 512, + "size": 45073022464.0, + "start": "47104" + } + }, + "path": "/dev/vda", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 45097156608.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": false, + "device_id": "641526", + "human_readable_type": "hdd", + "lvs": [ + { + "block_uuid": "355c2I-e5kg-WWeT-bOsI-0Ez5-sfb7-7TZyE4", + "cluster_fsid": "68a32428-e2ab-11ea-9d25-525400ef4c6e", + "cluster_name": "ceph", + "name": "osd-data-3de18e23-8849-494c-83b0-458d97d32d72", + "osd_fsid": "a438ac13-f1bd-412c-9626-e2f063dbbf94", + "osd_id": "0", + "osdspec_affinity": "dashboard-admin-1597903910143", + "type": "block" + } + ], + "path": "/dev/vdb", + "rejected_reasons": ["locked", "LVM detected", "Insufficient space (<5GB) on vgs"], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 1, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vdb", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": false, + "device_id": "467047", + "human_readable_type": "hdd", + "lvs": [ + { + "block_uuid": "iGC2VU-MSTt-ZP05-kKCP-5EtO-F1Y3-DYAAeb", + "cluster_fsid": "68a32428-e2ab-11ea-9d25-525400ef4c6e", + "cluster_name": "ceph", + "name": "osd-data-2031893c-c83b-4ff0-bfa1-de548044f707", + "osd_fsid": "6f544fc4-a3ea-40f9-9c48-69b5ee866709", + "osd_id": "1", + "osdspec_affinity": "dashboard-admin-1597903910143", + "type": "block" + } + ], + "path": "/dev/vdc", + "rejected_reasons": ["locked", "LVM detected", "Insufficient space (<5GB) on vgs"], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 1, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vdc", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": false, + "device_id": "900807", + "human_readable_type": "hdd", + "lvs": [ + { + "block_uuid": "nO2VSn-IbXr-pxnx-ieXx-kIxk-B4hB-BM6ADc", + "cluster_fsid": "68a32428-e2ab-11ea-9d25-525400ef4c6e", + "cluster_name": "ceph", + "name": "osd-data-537f7b60-5887-440e-80c7-759c028db12d", + "osd_fsid": "adeddd37-5cc9-406a-88e5-2add3f81d089", + "osd_id": "2", + "osdspec_affinity": "dashboard-admin-1597903910143", + "type": "block" + } + ], + "path": "/dev/vdd", + "rejected_reasons": ["locked", "LVM detected", "Insufficient space (<5GB) on vgs"], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 1, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vdd", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": false, + "device_id": "757404", + "human_readable_type": "hdd", + "lvs": [ + { + "block_uuid": "3YSAlw-VMeK-XfUK-rbOB-IKD1-Z9ZI-hUzlDe", + "cluster_fsid": "68a32428-e2ab-11ea-9d25-525400ef4c6e", + "cluster_name": "ceph", + "name": "osd-data-15b39d59-f259-4e93-adc6-bdac7d490d88", + "osd_fsid": "840a7138-88e2-4ecb-b88d-6fa2d04d88e7", + "osd_id": "3", + "osdspec_affinity": "dashboard-admin-1597903910143", + "type": "block" + } + ], + "path": "/dev/vde", + "rejected_reasons": ["locked", "LVM detected", "Insufficient space (<5GB) on vgs"], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 1, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vde", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + } + ], + "labels": [], + "name": "node1" + }, + { + "addr": "node2", + "devices": [ + { + "available": true, + "device_id": "115432", + "human_readable_type": "hdd", + "lvs": [], + "path": "/dev/vdb", + "rejected_reasons": [], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 0, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vdb", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": true, + "device_id": "937699", + "human_readable_type": "hdd", + "lvs": [], + "path": "/dev/vdc", + "rejected_reasons": [], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 0, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vdc", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": true, + "device_id": "854127", + "human_readable_type": "hdd", + "lvs": [], + "path": "/dev/vdd", + "rejected_reasons": [], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 0, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vdd", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": true, + "device_id": "122615", + "human_readable_type": "hdd", + "lvs": [], + "path": "/dev/vde", + "rejected_reasons": [], + "sys_api": { + "human_readable_size": "8.00 GB", + "locked": 0, + "model": "", + "nr_requests": "256", + "partitions": {}, + "path": "/dev/vde", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 8589934592.0, + "support_discard": "512", + "vendor": "0x1af4" + } + }, + { + "available": false, + "device_id": "", + "human_readable_type": "hdd", + "lvs": [], + "path": "/dev/vda", + "rejected_reasons": ["locked"], + "sys_api": { + "human_readable_size": "42.00 GB", + "locked": 1, + "model": "", + "nr_requests": "256", + "partitions": { + "vda1": { + "holders": [], + "human_readable_size": "2.00 MB", + "sectors": "4096", + "sectorsize": 512, + "size": 2097152.0, + "start": "2048" + }, + "vda2": { + "holders": [], + "human_readable_size": "20.00 MB", + "sectors": "40960", + "sectorsize": 512, + "size": 20971520.0, + "start": "6144" + }, + "vda3": { + "holders": [], + "human_readable_size": "41.98 GB", + "sectors": "88033247", + "sectorsize": 512, + "size": 45073022464.0, + "start": "47104" + } + }, + "path": "/dev/vda", + "removable": "0", + "rev": "", + "ro": "0", + "rotational": "1", + "sas_address": "", + "sas_device_handle": "", + "scheduler_mode": "mq-deadline", + "sectors": 0, + "sectorsize": "512", + "size": 45097156608.0, + "support_discard": "512", + "vendor": "0x1af4" + } + } + ], + "labels": [], + "name": "node2" + } +] diff --git a/src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/services.json b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/services.json new file mode 100644 index 000000000..433da1fb3 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/orchestrator/services.json @@ -0,0 +1,523 @@ +[ + { + "container_id": "9fa324d32bc8", + "container_image_digests": [ + "docker.io/prom/alertmanager@sha256:7e4e9f7a0954b45736d149c40e9620a6664036bb05f0dce447bef5042b139f5d", + "docker.io/prom/alertmanager@sha256:b9323917a2eda265bec69e59a457f001c529facbbc8166df277f4850cdac61a0" + ], + "container_image_id": "0881eb8f169f5556a292b4e2c01d683172b12830a62a9225a98a8e206bb734f0", + "container_image_name": "docker.io/prom/alertmanager:v0.20.0", + "created": "2021-04-04T14:20:55.872521Z", + "daemon_id": "ceph-node-00", + "daemon_type": "alertmanager", + "events": [ + "2021-04-04T14:20:55.970128Z daemon:alertmanager.ceph-node-00 [INFO] \"Deployed alertmanager.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"", + "2021-04-04T14:25:37.637716Z daemon:alertmanager.ceph-node-00 [INFO] \"Reconfigured alertmanager.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": true, + "last_refresh": "2021-04-04T14:27:38.610198Z", + "memory_usage": 10471079, + "ports": [ + 9093, + 9094 + ], + "started": "2021-04-04T14:25:36.837872Z", + "status": 1, + "status_desc": "running", + "version": "0.20.0" + }, + { + "container_id": "44add59a53bc", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:21:00.330646Z", + "daemon_id": "ceph-node-00", + "daemon_type": "crash", + "events": [ + "2021-04-04T14:21:00.456022Z daemon:crash.ceph-node-00 [INFO] \"Deployed crash.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"", + "2021-04-04T14:25:41.234986Z daemon:crash.ceph-node-00 [INFO] \"Reconfigured crash.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:38.610356Z", + "memory_usage": 7190085, + "ports": [], + "started": "2021-04-04T14:20:59.550334Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "4a2180e2e4ae", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:24:23.552501Z", + "daemon_id": "ceph-node-01", + "daemon_type": "crash", + "events": [ + "2021-04-04T14:24:23.591035Z daemon:crash.ceph-node-01 [INFO] \"Deployed crash.ceph-node-01 on host 'ceph-node-01.cephlab.com'\"", + "2021-04-04T14:25:42.677262Z daemon:crash.ceph-node-01 [INFO] \"Reconfigured crash.ceph-node-01 on host 'ceph-node-01.cephlab.com'\"" + ], + "hostname": "ceph-node-01.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:26:25.839645Z", + "memory_usage": 7147094, + "ports": [], + "started": "2021-04-04T14:24:23.188059Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "2eb2f0a13f46", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:24:21.012014Z", + "daemon_id": "ceph-node-02", + "daemon_type": "crash", + "events": [ + "2021-04-04T14:24:21.047797Z daemon:crash.ceph-node-02 [INFO] \"Deployed crash.ceph-node-02 on host 'ceph-node-02.cephlab.com'\"", + "2021-04-04T14:25:43.974052Z daemon:crash.ceph-node-02 [INFO] \"Reconfigured crash.ceph-node-02 on host 'ceph-node-02.cephlab.com'\"" + ], + "hostname": "ceph-node-02.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:37.470841Z", + "memory_usage": 8018460, + "ports": [], + "started": "2021-04-04T14:24:20.664558Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "10359b995638", + "container_image_digests": [ + "docker.io/ceph/ceph-grafana@sha256:44f6f2bfa52724d4db9a2ce343b299ff70a18dc21f1420548d5643df4ee18a6b" + ], + "container_image_id": "80728b29ad3f603cb306daeb6b0fb6c4c388e29e7eaac82cd3d3582ffd96b931", + "container_image_name": "docker.io/ceph/ceph-grafana:6.7.4", + "created": "2021-04-04T14:21:41.602878Z", + "daemon_id": "ceph-node-00", + "daemon_type": "grafana", + "events": [ + "2021-04-04T14:21:41.651390Z daemon:grafana.ceph-node-00 [INFO] \"Deployed grafana.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"", + "2021-04-04T14:25:26.705257Z daemon:grafana.ceph-node-00 [INFO] \"Reconfigured grafana.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": true, + "last_refresh": "2021-04-04T14:27:38.609816Z", + "memory_usage": 27797749, + "ports": [ + 3000 + ], + "started": "2021-04-04T14:25:26.020123Z", + "status": 1, + "status_desc": "running", + "version": "6.7.4" + }, + { + "container_id": "04e86dfde3ae", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph:master", + "created": "2021-04-04T14:17:17.458301Z", + "daemon_id": "ceph-node-00.cephlab.com.qqwcpr", + "daemon_type": "mgr", + "events": [ + "2021-04-04T14:25:24.076974Z daemon:mgr.ceph-node-00.cephlab.com.qqwcpr [ERROR] \"\"", + "2021-04-04T14:25:39.425312Z daemon:mgr.ceph-node-00.cephlab.com.qqwcpr [INFO] \"Reconfigured mgr.ceph-node-00.cephlab.com.qqwcpr on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "", + "is_active": true, + "last_refresh": "2021-04-04T14:20:21.353502Z", + "memory_usage": 411670937, + "ports": [ + 9283 + ], + "started": "2021-04-04T14:17:16.779682Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "04e86dfde3ae", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph:master", + "created": "2021-04-04T14:17:17.458301Z", + "daemon_id": "ceph-node-00.cephlab.com.qqwcpr", + "daemon_type": "mgr", + "events": [ + "2021-04-04T14:25:24.076974Z daemon:mgr.ceph-node-00.cephlab.com.qqwcpr [ERROR] \"\"", + "2021-04-04T14:25:39.425312Z daemon:mgr.ceph-node-00.cephlab.com.qqwcpr [INFO] \"Reconfigured mgr.ceph-node-00.cephlab.com.qqwcpr on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": true, + "last_refresh": "2021-04-04T14:27:38.610265Z", + "memory_usage": 468608614, + "ports": [ + 9283 + ], + "started": "2021-04-04T14:17:16.779682Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "7bfba45507ab", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:24:25.445135Z", + "daemon_id": "ceph-node-02.mywsmi", + "daemon_type": "mgr", + "events": [ + "2021-04-04T14:24:25.484361Z daemon:mgr.ceph-node-02.mywsmi [INFO] \"Deployed mgr.ceph-node-02.mywsmi on host 'ceph-node-02.cephlab.com'\"", + "2021-04-04T14:25:46.457476Z daemon:mgr.ceph-node-02.mywsmi [INFO] \"Reconfigured mgr.ceph-node-02.mywsmi on host 'ceph-node-02.cephlab.com'\"" + ], + "hostname": "ceph-node-02.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:37.471837Z", + "memory_usage": 384617676, + "ports": [ + 8443, + 9283 + ], + "started": "2021-04-04T14:24:25.142998Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "6045be766e88", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph:master", + "created": "2021-04-04T14:17:07.904023Z", + "daemon_id": "ceph-node-00.cephlab.com", + "daemon_type": "mon", + "events": [ + "2021-04-04T14:25:24.076865Z daemon:mon.ceph-node-00.cephlab.com [ERROR] \"\"", + "2021-04-04T14:25:28.250425Z daemon:mon.ceph-node-00.cephlab.com [INFO] \"Reconfigured mon.ceph-node-00.cephlab.com on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "", + "is_active": false, + "last_refresh": "2021-04-04T14:20:21.353077Z", + "memory_usage": 35871784, + "ports": [], + "started": "2021-04-04T14:17:13.608122Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "6045be766e88", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph:master", + "created": "2021-04-04T14:17:07.904023Z", + "daemon_id": "ceph-node-00.cephlab.com", + "daemon_type": "mon", + "events": [ + "2021-04-04T14:25:24.076865Z daemon:mon.ceph-node-00.cephlab.com [ERROR] \"\"", + "2021-04-04T14:25:28.250425Z daemon:mon.ceph-node-00.cephlab.com [INFO] \"Reconfigured mon.ceph-node-00.cephlab.com on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:38.609967Z", + "memory_usage": 74826383, + "ports": [], + "started": "2021-04-04T14:17:13.608122Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "d2d261f4eb17", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:24:28.269212Z", + "daemon_id": "ceph-node-02", + "daemon_type": "mon", + "events": [ + "2021-04-04T14:24:28.314782Z daemon:mon.ceph-node-02 [INFO] \"Deployed mon.ceph-node-02 on host 'ceph-node-02.cephlab.com'\"", + "2021-04-04T14:25:45.448194Z daemon:mon.ceph-node-02 [INFO] \"Reconfigured mon.ceph-node-02 on host 'ceph-node-02.cephlab.com'\"" + ], + "hostname": "ceph-node-02.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:37.471665Z", + "memory_usage": 65515028, + "ports": [], + "started": "2021-04-04T14:24:28.147109Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "51c04231de4c", + "container_image_digests": [ + "docker.io/prom/node-exporter@sha256:a2f29256e53cc3e0b64d7a472512600b2e9410347d53cdc85b49f659c17e02ee", + "docker.io/prom/node-exporter@sha256:b630fb29d99b3483c73a2a7db5fc01a967392a3d7ad754c8eccf9f4a67e7ee31" + ], + "container_image_id": "e5a616e4b9cf68dfcad7782b78e118be4310022e874d52da85c55923fb615f87", + "container_image_name": "docker.io/prom/node-exporter:v0.18.1", + "created": "2021-04-04T14:21:52.336199Z", + "daemon_id": "ceph-node-00", + "daemon_type": "node-exporter", + "events": [ + "2021-04-04T14:21:52.372374Z daemon:node-exporter.ceph-node-00 [INFO] \"Deployed node-exporter.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:38.610044Z", + "memory_usage": 8001683, + "ports": [ + 9100 + ], + "started": "2021-04-04T14:21:52.044759Z", + "status": 1, + "status_desc": "running", + "version": "0.18.1" + }, + { + "container_id": "ac9e1d055972", + "container_image_digests": [ + "docker.io/prom/node-exporter@sha256:a2f29256e53cc3e0b64d7a472512600b2e9410347d53cdc85b49f659c17e02ee", + "docker.io/prom/node-exporter@sha256:b630fb29d99b3483c73a2a7db5fc01a967392a3d7ad754c8eccf9f4a67e7ee31" + ], + "container_image_id": "e5a616e4b9cf68dfcad7782b78e118be4310022e874d52da85c55923fb615f87", + "container_image_name": "docker.io/prom/node-exporter:v0.18.1", + "created": "2021-04-04T14:24:39.469923Z", + "daemon_id": "ceph-node-01", + "daemon_type": "node-exporter", + "events": [ + "2021-04-04T14:24:39.508244Z daemon:node-exporter.ceph-node-01 [INFO] \"Deployed node-exporter.ceph-node-01 on host 'ceph-node-01.cephlab.com'\"" + ], + "hostname": "ceph-node-01.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:26:25.839072Z", + "memory_usage": 7052722, + "ports": [ + 9100 + ], + "started": "2021-04-04T14:24:39.156587Z", + "status": 1, + "status_desc": "running", + "version": "0.18.1" + }, + { + "container_id": "b133dbf9cff8", + "container_image_digests": [ + "docker.io/prom/node-exporter@sha256:a2f29256e53cc3e0b64d7a472512600b2e9410347d53cdc85b49f659c17e02ee", + "docker.io/prom/node-exporter@sha256:b630fb29d99b3483c73a2a7db5fc01a967392a3d7ad754c8eccf9f4a67e7ee31" + ], + "container_image_id": "e5a616e4b9cf68dfcad7782b78e118be4310022e874d52da85c55923fb615f87", + "container_image_name": "docker.io/prom/node-exporter:v0.18.1", + "created": "2021-04-04T14:24:49.840797Z", + "daemon_id": "ceph-node-02", + "daemon_type": "node-exporter", + "events": [ + "2021-04-04T14:24:49.901437Z daemon:node-exporter.ceph-node-02 [INFO] \"Deployed node-exporter.ceph-node-02 on host 'ceph-node-02.cephlab.com'\"" + ], + "hostname": "ceph-node-02.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:37.471349Z", + "memory_usage": 7696547, + "ports": [ + 9100 + ], + "started": "2021-04-04T14:24:49.524299Z", + "status": 1, + "status_desc": "running", + "version": "0.18.1" + }, + { + "container_id": "51d864a583df", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:25:03.086634Z", + "daemon_id": "0", + "daemon_type": "osd", + "events": [ + "2021-04-04T14:25:03.152770Z daemon:osd.0 [INFO] \"Deployed osd.0 on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:38.610426Z", + "memory_usage": 63826821, + "osdspec_affinity": "all-available-devices", + "ports": [], + "started": "2021-04-04T14:25:02.948826Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "7a141557611e", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:25:02.803534Z", + "daemon_id": "1", + "daemon_type": "osd", + "events": [ + "2021-04-04T14:25:02.905863Z daemon:osd.1 [INFO] \"Deployed osd.1 on host 'ceph-node-01.cephlab.com'\"" + ], + "hostname": "ceph-node-01.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:26:25.839343Z", + "memory_usage": 44155535, + "osdspec_affinity": "all-available-devices", + "ports": [], + "started": "2021-04-04T14:25:02.650699Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "bbf4cc5b870a", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:25:03.771174Z", + "daemon_id": "2", + "daemon_type": "osd", + "events": [ + "2021-04-04T14:25:03.827365Z daemon:osd.2 [INFO] \"Deployed osd.2 on host 'ceph-node-02.cephlab.com'\"" + ], + "hostname": "ceph-node-02.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:37.471996Z", + "memory_usage": 62495129, + "osdspec_affinity": "all-available-devices", + "ports": [], + "started": "2021-04-04T14:25:08.134780Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "e36d84e5608b", + "container_image_digests": [ + "docker.io/prom/prometheus@sha256:5880ec936055fad18ccee798d2a63f64ed85bd28e8e0af17c6923a090b686c3d", + "docker.io/prom/prometheus@sha256:b4e6cd0275a26750505e539f8528e891053434ebd3972be02645bed5f02f0795" + ], + "container_image_id": "de242295e2257c37c8cadfd962369228f8f10b2d48a44259b65fef44ad4f6490", + "container_image_name": "docker.io/prom/prometheus:v2.18.1", + "created": "2021-04-04T14:22:11.310763Z", + "daemon_id": "ceph-node-00", + "daemon_type": "prometheus", + "events": [ + "2021-04-04T14:22:11.356043Z daemon:prometheus.ceph-node-00 [INFO] \"Deployed prometheus.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"", + "2021-04-04T14:25:33.086106Z daemon:prometheus.ceph-node-00 [INFO] \"Reconfigured prometheus.ceph-node-00 on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": true, + "last_refresh": "2021-04-04T14:27:38.610128Z", + "memory_usage": 27724349, + "ports": [ + 9095 + ], + "started": "2021-04-04T14:25:32.344156Z", + "status": 1, + "status_desc": "running", + "version": "2.18.1" + }, + { + "container_id": "5cdeb705c7f6", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:27:26.775628Z", + "daemon_id": "foo.ceph-node-00.qknfoh", + "daemon_type": "rgw", + "events": [ + "2021-04-04T14:27:26.824821Z daemon:rgw.foo.ceph-node-00.qknfoh [INFO] \"Deployed rgw.foo.ceph-node-00.qknfoh on host 'ceph-node-00.cephlab.com'\"" + ], + "hostname": "ceph-node-00.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:38.610617Z", + "memory_usage": 53309603, + "ports": [ + 80 + ], + "started": "2021-04-04T14:27:26.350981Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_id": "18a2179a35c0", + "container_image_digests": [ + "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4" + ], + "container_image_id": "f72dfde44435bedf5e4c8be05c8194cc57f5f654b9bb146b73e81f1c5358b4c5", + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:27:24.200977Z", + "daemon_id": "foo.ceph-node-02.fgzmmm", + "daemon_type": "rgw", + "events": [ + "2021-04-04T14:27:24.300473Z daemon:rgw.foo.ceph-node-02.fgzmmm [INFO] \"Deployed rgw.foo.ceph-node-02.fgzmmm on host 'ceph-node-02.cephlab.com'\"" + ], + "hostname": "ceph-node-02.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:37.471149Z", + "memory_usage": 53487861, + "ports": [ + 80 + ], + "started": "2021-04-04T14:27:23.793957Z", + "status": 1, + "status_desc": "running", + "version": "17.0.0-2786-g7fb0569e" + }, + { + "container_image_name": "quay.ceph.io/ceph-ci/ceph@sha256:cfd9dc4a437e11894a9a0d930ed1221ccc4e939b943981f6dfbdc611816904d4", + "created": "2021-04-04T14:27:30.048136Z", + "daemon_id": "foo.ceph-node-02.hqjyla", + "daemon_type": "rgw", + "events": [ + "2021-04-04T14:27:30.115692Z daemon:rgw.foo.ceph-node-02.hqjyla [INFO] \"Deployed rgw.foo.ceph-node-02.hqjyla on host 'ceph-node-02.cephlab.com'\"" + ], + "hostname": "ceph-node-02.cephlab.com", + "is_active": false, + "last_refresh": "2021-04-04T14:27:37.471564Z", + "ports": [ + 80 + ], + "status": -1, + "status_desc": "unknown" + } +] \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/frontend/cypress/fixtures/rgw-status.json b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/rgw-status.json new file mode 100644 index 000000000..faa8c0418 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/fixtures/rgw-status.json @@ -0,0 +1 @@ +{ "available": true, "message": null } diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.e2e-spec.ts new file mode 100644 index 000000000..5c89359db --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.e2e-spec.ts @@ -0,0 +1,95 @@ +import { PoolPageHelper } from '../pools/pools.po'; +import { ImagesPageHelper } from './images.po'; + +describe('Images page', () => { + const pools = new PoolPageHelper(); + const images = new ImagesPageHelper(); + + const poolName = 'e2e_images_pool'; + + before(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + // Need pool for image testing + pools.navigateTo('create'); + pools.create(poolName, 8, 'rbd'); + pools.existTableCell(poolName); + }); + + after(() => { + // Deletes images test pool + pools.navigateTo(); + pools.delete(poolName); + pools.navigateTo(); + pools.existTableCell(poolName, false); + }); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + images.navigateTo(); + }); + + it('should open and show breadcrumb', () => { + images.expectBreadcrumbText('Images'); + }); + + it('should show four tabs', () => { + images.getTabsCount().should('eq', 4); + }); + + it('should show text for all tabs', () => { + images.getTabText(0).should('eq', 'Images'); + images.getTabText(1).should('eq', 'Namespaces'); + images.getTabText(2).should('eq', 'Trash'); + images.getTabText(3).should('eq', 'Overall Performance'); + }); + + describe('create, edit & delete image test', () => { + const imageName = 'e2e_images#image'; + const newImageName = 'e2e_images#image_new'; + + it('should create image', () => { + images.createImage(imageName, poolName, '1'); + images.getFirstTableCell(imageName).should('exist'); + }); + + it('should edit image', () => { + images.editImage(imageName, poolName, newImageName, '2'); + images.getFirstTableCell(newImageName).should('exist'); + }); + + it('should delete image', () => { + images.delete(newImageName); + }); + }); + + describe('move to trash, restore and purge image tests', () => { + const imageName = 'e2e_trash#image'; + const newImageName = 'e2e_newtrash#image'; + + before(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + // Need image for trash testing + images.createImage(imageName, poolName, '1'); + images.getFirstTableCell(imageName).should('exist'); + }); + + it('should move the image to the trash', () => { + images.moveToTrash(imageName); + images.getFirstTableCell(imageName).should('exist'); + }); + + it('should restore image to images table', () => { + images.restoreImage(imageName, newImageName); + images.getFirstTableCell(newImageName).should('exist'); + }); + + it('should purge trash in images trash tab', () => { + images.getFirstTableCell(newImageName).should('exist'); + images.moveToTrash(newImageName); + images.purgeTrash(newImageName, poolName); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.po.ts new file mode 100644 index 000000000..bf6cbc052 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/images.po.ts @@ -0,0 +1,110 @@ +import { PageHelper } from '../page-helper.po'; + +export class ImagesPageHelper extends PageHelper { + pages = { + index: { url: '#/block/rbd', id: 'cd-rbd-list' }, + create: { url: '#/block/rbd/create', id: 'cd-rbd-form' } + }; + + // Creates a block image and fills in the name, pool, and size fields. + // Then checks if the image is present in the Images table. + createImage(name: string, pool: string, size: string) { + this.navigateTo('create'); + + cy.get('#name').type(name); // Enter in image name + + // Select image pool + cy.contains('Loading...').should('not.exist'); + this.selectOption('pool', pool); + cy.get('#pool').should('have.class', 'ng-valid'); // check if selected + + // Enter in the size of the image + cy.get('#size').type(size); + + // Click the create button and wait for image to be made + cy.get('[data-cy=submitBtn]').click(); + this.getFirstTableCell(name).should('exist'); + } + + editImage(name: string, pool: string, newName: string, newSize: string) { + this.navigateEdit(name); + + // Wait until data is loaded + cy.get('#pool').should('contain.value', pool); + + cy.get('#name').clear().type(newName); + cy.get('#size').clear().type(newSize); // click the size box and send new size + + cy.get('[data-cy=submitBtn]').click(); + + this.getExpandCollapseElement(newName).click(); + cy.get('.table.table-striped.table-bordered').contains('td', newSize); + } + + // Selects RBD image and moves it to the trash, + // checks that it is present in the trash table + moveToTrash(name: string) { + // wait for image to be created + cy.get('.datatable-body').first().should('not.contain.text', '(Creating...)'); + + this.getFirstTableCell(name).click(); + + // click on the drop down and selects the move to trash option + cy.get('.table-actions button.dropdown-toggle').first().click(); + cy.get('button.move-to-trash').click(); + + cy.get('[data-cy=submitBtn]').should('be.visible').click(); + + // Clicks trash tab + cy.contains('.nav-link', 'Trash').click(); + this.getFirstTableCell(name).should('exist'); + } + + // Checks trash tab table for image and then restores it to the RBD Images table + // (could change name if new name is given) + restoreImage(name: string, newName?: string) { + // clicks on trash tab + cy.contains('.nav-link', 'Trash').click(); + + // wait for table to load + this.getFirstTableCell(name).click(); + cy.contains('button', 'Restore').click(); + + // wait for pop-up to be visible (checks for title of pop-up) + cy.get('cd-modal #name').should('be.visible'); + + // If a new name for the image is passed, it changes the name of the image + if (newName !== undefined) { + // click name box and send new name + cy.get('cd-modal #name').clear().type(newName); + } + + cy.get('[data-cy=submitBtn]').click(); + + // clicks images tab + cy.contains('.nav-link', 'Images').click(); + + this.getFirstTableCell(newName).should('exist'); + } + + // Enters trash tab and purges trash, thus emptying the trash table. + // Checks if Image is still in the table. + purgeTrash(name: string, pool?: string) { + // clicks trash tab + cy.contains('.nav-link', 'Trash').click(); + cy.contains('button', 'Purge Trash').click(); + + // Check for visibility of modal container + cy.get('.modal-header').should('be.visible'); + + // If purgeing a specific pool, selects that pool if given + if (pool !== undefined) { + this.selectOption('poolName', pool); + cy.get('#poolName').should('have.class', 'ng-valid'); // check if pool is selected + } + cy.get('[data-cy=submitBtn]').click(); + // Wait for image to delete and check it is not present + + this.getFirstTableCell(name).should('not.exist'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.e2e-spec.ts new file mode 100644 index 000000000..cef4874be --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.e2e-spec.ts @@ -0,0 +1,25 @@ +import { IscsiPageHelper } from './iscsi.po'; + +describe('Iscsi Page', () => { + const iscsi = new IscsiPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + iscsi.navigateTo(); + }); + + it('should open and show breadcrumb', () => { + iscsi.expectBreadcrumbText('Overview'); + }); + + it('should check that tables are displayed and legends are correct', () => { + // Check tables are displayed + iscsi.getDataTables().its(0).should('be.visible'); + iscsi.getDataTables().its(1).should('be.visible'); + + // Check that legends are correct + iscsi.getLegends().its(0).should('contain.text', 'Gateways'); + iscsi.getLegends().its(1).should('contain.text', 'Images'); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.po.ts new file mode 100644 index 000000000..08efa6408 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/iscsi.po.ts @@ -0,0 +1,7 @@ +import { PageHelper } from '../page-helper.po'; + +export class IscsiPageHelper extends PageHelper { + pages = { + index: { url: '#/block/iscsi/overview', id: 'cd-iscsi' } + }; +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.e2e-spec.ts new file mode 100644 index 000000000..dfba73b27 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.e2e-spec.ts @@ -0,0 +1,54 @@ +import { PoolPageHelper } from '../pools/pools.po'; +import { MirroringPageHelper } from './mirroring.po'; + +describe('Mirroring page', () => { + const pools = new PoolPageHelper(); + const mirroring = new MirroringPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + mirroring.navigateTo(); + }); + + it('should open and show breadcrumb', () => { + mirroring.expectBreadcrumbText('Mirroring'); + }); + + it('should show three tabs', () => { + mirroring.getTabsCount().should('eq', 3); + }); + + it('should show text for all tabs', () => { + mirroring.getTabText(0).should('eq', 'Issues (0)'); + mirroring.getTabText(1).should('eq', 'Syncing (0)'); + mirroring.getTabText(2).should('eq', 'Ready (0)'); + }); + + describe('checks that edit mode functionality shows in the pools table', () => { + const poolName = 'mirroring_test'; + + beforeEach(() => { + pools.navigateTo('create'); // Need pool for mirroring testing + pools.create(poolName, 8, 'rbd'); + pools.navigateTo(); + pools.existTableCell(poolName, true); + }); + + it('tests editing mode for pools', () => { + mirroring.navigateTo(); + + mirroring.editMirror(poolName, 'Pool'); + mirroring.getFirstTableCell('pool').should('be.visible'); + mirroring.editMirror(poolName, 'Image'); + mirroring.getFirstTableCell('image').should('be.visible'); + mirroring.editMirror(poolName, 'Disabled'); + mirroring.getFirstTableCell('disabled').should('be.visible'); + }); + + afterEach(() => { + pools.navigateTo(); + pools.delete(poolName); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.po.ts new file mode 100644 index 000000000..e24a3ebc0 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/block/mirroring.po.ts @@ -0,0 +1,35 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/block/mirroring', id: 'cd-mirroring' } +}; + +export class MirroringPageHelper extends PageHelper { + pages = pages; + + /** + * Goes to the mirroring page and edits a pool in the Pool table. Clicks on the + * pool and chooses an option (either pool, image, or disabled) + */ + @PageHelper.restrictTo(pages.index.url) + editMirror(name: string, option: string) { + // Select the pool in the table + this.getFirstTableCell(name).click(); + + // Clicks the Edit Mode button + cy.contains('button', 'Edit Mode').click(); + + // Clicks the drop down in the edit pop-up, then clicks the Update button + cy.get('.modal-content').should('be.visible'); + this.selectOption('mirrorMode', option); + + // Clicks update button and checks if the mode has been changed + cy.contains('button', 'Update').click(); + cy.contains('.modal-dialog', 'Edit pool mirror mode').should('not.exist'); + const val = option.toLowerCase(); // used since entries in table are lower case + this.getFirstTableCell(val).should('be.visible'); + + // unselect the pool in the table + this.getFirstTableCell(name).click(); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.e2e-spec.ts new file mode 100644 index 000000000..d022d59cf --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.e2e-spec.ts @@ -0,0 +1,78 @@ +import { ConfigurationPageHelper } from './configuration.po'; + +describe('Configuration page', () => { + const configuration = new ConfigurationPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + configuration.navigateTo(); + }); + + describe('breadcrumb test', () => { + it('should open and show breadcrumb', () => { + configuration.expectBreadcrumbText('Configuration'); + }); + }); + + describe('fields check', () => { + beforeEach(() => { + configuration.getExpandCollapseElement().click(); + }); + + it('should check that details table opens (w/o tab header)', () => { + configuration.getStatusTables().should('be.visible'); + configuration.getTabs().should('not.exist'); + }); + }); + + describe('edit configuration test', () => { + const configName = 'client_cache_size'; + + beforeEach(() => { + configuration.clearTableSearchInput(); + configuration.getTableCount('found').as('configFound'); + }); + + after(() => { + configuration.configClear(configName); + }); + + it('should click and edit a configuration and results should appear in the table', () => { + configuration.edit( + configName, + ['global', '1'], + ['mon', '2'], + ['mgr', '3'], + ['osd', '4'], + ['mds', '5'], + ['client', '6'] + ); + }); + + it('should verify modified filter is applied properly', () => { + configuration.filterTable('Modified', 'no'); + configuration.getTableCount('found').as('unmodifiedConfigs'); + + // Modified filter value to yes + configuration.filterTable('Modified', 'yes'); + configuration.getTableCount('found').as('modifiedConfigs'); + + cy.get('@configFound').then((configFound) => { + cy.get('@unmodifiedConfigs').then((unmodifiedConfigs) => { + const modifiedConfigs = Number(configFound) - Number(unmodifiedConfigs); + configuration.getTableCount('found').should('eq', modifiedConfigs); + }); + }); + + // Modified filter value to no + configuration.filterTable('Modified', 'no'); + cy.get('@configFound').then((configFound) => { + cy.get('@modifiedConfigs').then((modifiedConfigs) => { + const unmodifiedConfigs = Number(configFound) - Number(modifiedConfigs); + configuration.getTableCount('found').should('eq', unmodifiedConfigs); + }); + }); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.po.ts new file mode 100644 index 000000000..0133dc31f --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/configuration.po.ts @@ -0,0 +1,75 @@ +import { PageHelper } from '../page-helper.po'; + +export class ConfigurationPageHelper extends PageHelper { + pages = { + index: { url: '#/configuration', id: 'cd-configuration' } + }; + + /** + * Clears out all the values in a config to reset before and after testing + * Does not work for configs with checkbox only, possible future PR + */ + configClear(name: string) { + const valList = ['global', 'mon', 'mgr', 'osd', 'mds', 'client']; // Editable values + + this.navigateEdit(name); + // Waits for the data to load + cy.contains('.card-header', `Edit ${name}`); + + for (const i of valList) { + cy.get(`#${i}`).clear(); + } + // Clicks save button and checks that values are not present for the selected config + cy.get('[data-cy=submitBtn]').click(); + + // Enter config setting name into filter box + this.searchTable(name); + + // Expand row + this.getExpandCollapseElement(name).click(); + + // Checks for visibility of details tab + this.getStatusTables().should('be.visible'); + + for (const i of valList) { + // Waits until values are not present in the details table + this.getStatusTables().should('not.contain.text', i + ':'); + } + } + + /** + * Clicks the designated config, then inputs the values passed into the edit function. + * Then checks if the edit is reflected in the config table. + * Takes in name of config and a list of tuples of values the user wants edited, + * each tuple having the desired value along with the number tehey want for that value. + * Ex: [global, '2'] is the global value with an input of 2 + */ + edit(name: string, ...values: [string, string][]) { + this.navigateEdit(name); + + // Waits for data to load + cy.contains('.card-header', `Edit ${name}`); + + values.forEach((valtuple) => { + // Finds desired value based off given list + cy.get(`#${valtuple[0]}`).type(valtuple[1]); // of values and inserts the given number for the value + }); + + // Clicks save button then waits until the desired config is visible, clicks it, + // then checks that each desired value appears with the desired number + cy.get('[data-cy=submitBtn]').click(); + + // Enter config setting name into filter box + this.searchTable(name); + + // Checks for visibility of config in table + this.getExpandCollapseElement(name).should('be.visible').click(); + + // Clicks config + values.forEach((value) => { + // iterates through list of values and + // checks if the value appears in details with the correct number attatched + cy.contains('.table.table-striped.table-bordered', `${value[0]}\: ${value[1]}`); + }); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/create-cluster.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/create-cluster.po.ts new file mode 100644 index 000000000..300eddbcc --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/create-cluster.po.ts @@ -0,0 +1,56 @@ +import { PageHelper } from '../page-helper.po'; +import { NotificationSidebarPageHelper } from '../ui/notification.po'; +import { HostsPageHelper } from './hosts.po'; +import { ServicesPageHelper } from './services.po'; + +const pages = { + index: { url: '#/expand-cluster', id: 'cd-create-cluster' } +}; +export class CreateClusterWizardHelper extends PageHelper { + pages = pages; + + createCluster() { + cy.get('cd-create-cluster').should('contain.text', 'Please expand your cluster first'); + cy.get('[name=expand-cluster]').click(); + cy.get('cd-wizard').should('exist'); + } + + doSkip() { + cy.get('[name=skip-cluster-creation]').click(); + cy.contains('cd-modal button', 'Continue').click(); + + cy.get('cd-dashboard').should('exist'); + const notification = new NotificationSidebarPageHelper(); + notification.open(); + notification.getNotifications().should('contain', 'Cluster expansion skipped by user'); + } +} + +export class CreateClusterHostPageHelper extends HostsPageHelper { + pages = { + index: { url: '#/expand-cluster', id: 'cd-wizard' }, + add: { url: '', id: 'cd-host-form' } + }; + + columnIndex = { + hostname: 1, + labels: 2, + status: 3, + services: 0 + }; +} + +export class CreateClusterServicePageHelper extends ServicesPageHelper { + pages = { + index: { url: '#/expand-cluster', id: 'cd-wizard' }, + create: { url: '', id: 'cd-service-form' } + }; + + columnIndex = { + service_name: 1, + placement: 2, + running: 0, + size: 0, + last_refresh: 0 + }; +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.e2e-spec.ts new file mode 100644 index 000000000..0a454739f --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.e2e-spec.ts @@ -0,0 +1,37 @@ +import { CrushMapPageHelper } from './crush-map.po'; + +describe('CRUSH map page', () => { + const crushmap = new CrushMapPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + crushmap.navigateTo(); + }); + + describe('breadcrumb test', () => { + it('should open and show breadcrumb', () => { + crushmap.expectBreadcrumbText('CRUSH map'); + }); + }); + + describe('fields check', () => { + it('should check that title & table appears', () => { + // Check that title (CRUSH map viewer) appears + crushmap.getPageTitle().should('equal', 'CRUSH map viewer'); + + // Check that title appears once OSD is clicked + crushmap.getCrushNode(0).click(); + + crushmap + .getLegends() + .invoke('text') + .then((legend) => { + crushmap.getCrushNode(0).should('have.text', legend); + }); + + // Check that table appears once OSD is clicked + crushmap.getDataTables().should('be.visible'); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.po.ts new file mode 100644 index 000000000..a5d2d591c --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/crush-map.po.ts @@ -0,0 +1,13 @@ +import { PageHelper } from '../page-helper.po'; + +export class CrushMapPageHelper extends PageHelper { + pages = { index: { url: '#/crush-map', id: 'cd-crushmap' } }; + + getPageTitle() { + return cy.get('cd-crushmap .card-header').text(); + } + + getCrushNode(idx: number) { + return cy.get('.node-name.type-osd').eq(idx); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.e2e-spec.ts new file mode 100644 index 000000000..e4f9936c3 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.e2e-spec.ts @@ -0,0 +1,35 @@ +import { HostsPageHelper } from './hosts.po'; + +describe('Hosts page', () => { + const hosts = new HostsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + hosts.navigateTo(); + }); + + describe('breadcrumb and tab tests', () => { + it('should open and show breadcrumb', () => { + hosts.expectBreadcrumbText('Hosts'); + }); + + it('should show two tabs', () => { + hosts.getTabsCount().should('eq', 2); + }); + + it('should show hosts list tab at first', () => { + hosts.getTabText(0).should('eq', 'Hosts List'); + }); + + it('should show overall performance as a second tab', () => { + hosts.getTabText(1).should('eq', 'Overall Performance'); + }); + }); + + describe('services link test', () => { + it('should check at least one host is present', () => { + hosts.check_for_host(); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.po.ts new file mode 100644 index 000000000..33fe756ff --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/hosts.po.ts @@ -0,0 +1,184 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/hosts', id: 'cd-hosts' }, + add: { url: '#/hosts/(modal:add)', id: 'cd-host-form' } +}; + +export class HostsPageHelper extends PageHelper { + pages = pages; + + columnIndex = { + hostname: 2, + services: 3, + labels: 4, + status: 5 + }; + + check_for_host() { + this.getTableCount('total').should('not.be.eq', 0); + } + + add(hostname: string, exist?: boolean, maintenance?: boolean, labels: string[] = []) { + cy.get(`${this.pages.add.id}`).within(() => { + cy.get('#hostname').type(hostname); + if (maintenance) { + cy.get('label[for=maintenance]').click(); + } + if (exist) { + cy.get('#hostname').should('have.class', 'ng-invalid'); + } + }); + + if (labels.length) { + this.selectPredefinedLabels(labels); + } + + cy.get('cd-submit-button').click(); + // back to host list + cy.get(`${this.pages.index.id}`); + } + + selectPredefinedLabels(labels: string[]) { + cy.get('a[data-testid=select-menu-edit]').click(); + for (const label of labels) { + cy.get('.popover-body div.select-menu-item-content').contains(label).click(); + } + } + + checkExist(hostname: string, exist: boolean) { + this.getTableCell(this.columnIndex.hostname, hostname).should(($elements) => { + const hosts = $elements.map((_, el) => el.textContent).get(); + if (exist) { + expect(hosts).to.include(hostname); + } else { + expect(hosts).to.not.include(hostname); + } + }); + } + + remove(hostname: string) { + super.delete(hostname, this.columnIndex.hostname, 'hosts'); + } + + // Add or remove labels on a host, then verify labels in the table + editLabels(hostname: string, labels: string[], add: boolean) { + this.getTableCell(this.columnIndex.hostname, hostname).click(); + this.clickActionButton('edit'); + + // add or remove label badges + if (add) { + cy.get('cd-modal').find('.select-menu-edit').click(); + for (const label of labels) { + cy.contains('cd-modal .badge', new RegExp(`^${label}$`)).should('not.exist'); + cy.get('.popover-body input').type(`${label}{enter}`); + } + } else { + for (const label of labels) { + cy.contains('cd-modal .badge', new RegExp(`^${label}$`)) + .find('.badge-remove') + .click(); + } + } + cy.get('cd-modal cd-submit-button').click(); + this.checkLabelExists(hostname, labels, add); + } + + checkLabelExists(hostname: string, labels: string[], add: boolean) { + // Verify labels are added or removed from Labels column + // First find row with hostname, then find labels in the row + this.getTableCell(this.columnIndex.hostname, hostname) + .click() + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.labels}) .badge`) + .should(($ele) => { + const newLabels = $ele.toArray().map((v) => v.innerText); + for (const label of labels) { + if (add) { + expect(newLabels).to.include(label); + } else { + expect(newLabels).to.not.include(label); + } + } + }); + } + + @PageHelper.restrictTo(pages.index.url) + maintenance(hostname: string, exit = false, force = false) { + this.clearTableSearchInput(); + this.getTableCell(this.columnIndex.hostname, hostname).click(); + if (force) { + this.clickActionButton('enter-maintenance'); + + cy.get('cd-modal').within(() => { + cy.contains('button', 'Continue').click(); + }); + + this.getTableCell(this.columnIndex.hostname, hostname) + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.status}) .badge`) + .should(($ele) => { + const status = $ele.toArray().map((v) => v.innerText); + expect(status).to.include('maintenance'); + }); + } + if (exit) { + this.getTableCell(this.columnIndex.hostname, hostname) + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.status})`) + .then(($ele) => { + const status = $ele.toArray().map((v) => v.innerText); + if (status[0].includes('maintenance')) { + this.clickActionButton('exit-maintenance'); + } + }); + + this.getTableCell(this.columnIndex.hostname, hostname) + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.status})`) + .should(($ele) => { + const status = $ele.toArray().map((v) => v.innerText); + expect(status).to.not.include('maintenance'); + }); + } else { + this.clickActionButton('enter-maintenance'); + + this.getTableCell(this.columnIndex.hostname, hostname) + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.status}) .badge`) + .should(($ele) => { + const status = $ele.toArray().map((v) => v.innerText); + expect(status).to.include('maintenance'); + }); + } + } + + @PageHelper.restrictTo(pages.index.url) + drain(hostname: string) { + this.getTableCell(this.columnIndex.hostname, hostname).click(); + this.clickActionButton('start-drain'); + this.checkLabelExists(hostname, ['_no_schedule'], true); + + // unselect it to avoid colliding with any other selection + // in different steps + this.getTableCell(this.columnIndex.hostname, hostname).click(); + + this.clickTab('cd-host-details', hostname, 'Daemons'); + cy.get('cd-host-details').within(() => { + cy.wait(20000); + this.expectTableCount('total', 0); + }); + } + + checkServiceInstancesExist(hostname: string, instances: string[]) { + this.getTableCell(this.columnIndex.hostname, hostname) + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.services}) .badge`) + .should(($ele) => { + const serviceInstances = $ele.toArray().map((v) => v.innerText); + for (const instance of instances) { + expect(serviceInstances).to.include(instance); + } + }); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/inventory.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/inventory.po.ts new file mode 100644 index 000000000..5a9abdc03 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/inventory.po.ts @@ -0,0 +1,22 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/inventory', id: 'cd-inventory' } +}; + +export class InventoryPageHelper extends PageHelper { + pages = pages; + + identify() { + // Nothing we can do, just verify the form is there + this.getFirstTableCell().click(); + cy.contains('cd-table-actions button', 'Identify').click(); + cy.get('cd-modal').within(() => { + cy.get('#duration').select('15 minutes'); + cy.get('#duration').select('10 minutes'); + cy.get('cd-back-button').click(); + }); + cy.get('cd-modal').should('not.exist'); + cy.get(`${this.pages.index.id}`); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.e2e-spec.ts new file mode 100644 index 000000000..9868b89ae --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.e2e-spec.ts @@ -0,0 +1,58 @@ +import { PoolPageHelper } from '../pools/pools.po'; +import { LogsPageHelper } from './logs.po'; + +describe('Logs page', () => { + const logs = new LogsPageHelper(); + const pools = new PoolPageHelper(); + + const poolname = 'e2e_logs_test_pool'; + const today = new Date(); + let hour = today.getHours(); + if (hour > 12) { + hour = hour - 12; + } + const minute = today.getMinutes(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + }); + + describe('breadcrumb and tab tests', () => { + beforeEach(() => { + logs.navigateTo(); + }); + + it('should open and show breadcrumb', () => { + logs.expectBreadcrumbText('Logs'); + }); + + it('should show two tabs', () => { + logs.getTabsCount().should('eq', 2); + }); + + it('should show cluster logs tab at first', () => { + logs.getTabText(0).should('eq', 'Cluster Logs'); + }); + + it('should show audit logs as a second tab', () => { + logs.getTabText(1).should('eq', 'Audit Logs'); + }); + }); + + describe('audit logs respond to pool creation and deletion test', () => { + it('should create pool and check audit logs reacted', () => { + pools.navigateTo('create'); + pools.create(poolname, 8); + pools.navigateTo(); + pools.existTableCell(poolname, true); + logs.checkAuditForPoolFunction(poolname, 'create', hour, minute); + }); + + it('should delete pool and check audit logs reacted', () => { + pools.navigateTo(); + pools.delete(poolname); + logs.checkAuditForPoolFunction(poolname, 'delete', hour, minute); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.po.ts new file mode 100644 index 000000000..7efd8a652 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/logs.po.ts @@ -0,0 +1,70 @@ +import { PageHelper } from '../page-helper.po'; + +export class LogsPageHelper extends PageHelper { + pages = { + index: { url: '#/logs', id: 'cd-logs' } + }; + + checkAuditForPoolFunction(poolname: string, poolfunction: string, hour: number, minute: number) { + this.navigateTo(); + + // sometimes the modal from deleting pool is still present at this point. + // This wait makes sure it isn't + cy.contains('.modal-dialog', 'Delete Pool').should('not.exist'); + + // go to audit logs tab + cy.contains('.nav-link', 'Audit Logs').click(); + + // Enter an earliest time so that no old messages with the same pool name show up + cy.get('.ngb-tp-input').its(0).clear(); + + if (hour < 10) { + cy.get('.ngb-tp-input').its(0).type('0'); + } + cy.get('.ngb-tp-input').its(0).type(`${hour}`); + + cy.get('.ngb-tp-input').its(1).clear(); + if (minute < 10) { + cy.get('.ngb-tp-input').its(1).type('0'); + } + cy.get('.ngb-tp-input').its(1).type(`${minute}`); + + // Enter the pool name into the filter box + cy.get('input.form-control.ng-valid').first().clear().type(poolname); + + cy.get('.tab-pane.active') + .get('.card-body') + .get('.message') + .should('contain.text', poolname) + .and('contain.text', `pool ${poolfunction}`); + } + + checkAuditForConfigChange(configname: string, setting: string, hour: number, minute: number) { + this.navigateTo(); + + // go to audit logs tab + cy.contains('.nav-link', 'Audit Logs').click(); + + // Enter an earliest time so that no old messages with the same config name show up + cy.get('.ngb-tp-input').its(0).clear(); + if (hour < 10) { + cy.get('.ngb-tp-input').its(0).type('0'); + } + cy.get('.ngb-tp-input').its(0).type(`${hour}`); + + cy.get('.ngb-tp-input').its(1).clear(); + if (minute < 10) { + cy.get('.ngb-tp-input').its(1).type('0'); + } + cy.get('.ngb-tp-input').its(1).type(`${minute}`); + + // Enter the config name into the filter box + cy.get('input.form-control.ng-valid').first().clear().type(configname); + + cy.get('.tab-pane.active') + .get('.card-body') + .get('.message') + .should('contain.text', configname) + .and('contain.text', setting); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.e2e-spec.ts new file mode 100644 index 000000000..50656fece --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.e2e-spec.ts @@ -0,0 +1,78 @@ +import { Input, ManagerModulesPageHelper } from './mgr-modules.po'; + +describe('Manager modules page', () => { + const mgrmodules = new ManagerModulesPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + mgrmodules.navigateTo(); + }); + + describe('breadcrumb test', () => { + it('should open and show breadcrumb', () => { + mgrmodules.expectBreadcrumbText('Manager Modules'); + }); + }); + + describe('verifies editing functionality for manager modules', () => { + it('should test editing on balancer module', () => { + const balancerArr: Input[] = [ + { + id: 'crush_compat_max_iterations', + newValue: '123', + oldValue: '25' + } + ]; + mgrmodules.editMgrModule('balancer', balancerArr); + }); + + it('should test editing on dashboard module', () => { + const dashboardArr: Input[] = [ + { + id: 'GRAFANA_API_PASSWORD', + newValue: 'rafa', + oldValue: '' + } + ]; + mgrmodules.editMgrModule('dashboard', dashboardArr); + }); + + it('should test editing on devicehealth module', () => { + const devHealthArray: Input[] = [ + { + id: 'mark_out_threshold', + newValue: '1987', + oldValue: '2419200' + }, + { + id: 'pool_name', + newValue: 'sox', + oldValue: 'device_health_metrics' + }, + { + id: 'retention_period', + newValue: '1999', + oldValue: '15552000' + }, + { + id: 'scrape_frequency', + newValue: '2020', + oldValue: '86400' + }, + { + id: 'sleep_interval', + newValue: '456', + oldValue: '600' + }, + { + id: 'warn_threshold', + newValue: '567', + oldValue: '7257600' + } + ]; + + mgrmodules.editMgrModule('devicehealth', devHealthArray); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.po.ts new file mode 100644 index 000000000..04d2eee46 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/mgr-modules.po.ts @@ -0,0 +1,57 @@ +import { PageHelper } from '../page-helper.po'; + +export class Input { + id: string; + oldValue: string; + newValue: string; +} + +export class ManagerModulesPageHelper extends PageHelper { + pages = { index: { url: '#/mgr-modules', id: 'cd-mgr-module-list' } }; + + /** + * Selects the Manager Module and then fills in the desired fields. + */ + editMgrModule(name: string, inputs: Input[]) { + this.navigateEdit(name); + + for (const input of inputs) { + // Clears fields and adds edits + cy.get(`#${input.id}`).clear().type(input.newValue); + } + + cy.contains('button', 'Update').click(); + // Checks if edits appear + this.getExpandCollapseElement(name).should('be.visible').click(); + + for (const input of inputs) { + cy.get('.datatable-body').last().contains(input.newValue); + } + + // Clear mgr module of all edits made to it + this.navigateEdit(name); + + // Clears the editable fields + for (const input of inputs) { + if (input.oldValue) { + const id = `#${input.id}`; + cy.get(id).clear(); + if (input.oldValue) { + cy.get(id).type(input.oldValue); + } + } + } + + // Checks that clearing represents in details tab of module + cy.contains('button', 'Update').click(); + this.getExpandCollapseElement(name).should('be.visible').click(); + for (const input of inputs) { + if (input.oldValue) { + cy.get('.datatable-body') + .eq(1) + .should('contain', input.id) + .and('not.contain', input.newValue); + } + } + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.e2e-spec.ts new file mode 100644 index 000000000..a23d071e6 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.e2e-spec.ts @@ -0,0 +1,62 @@ +import { MonitorsPageHelper } from './monitors.po'; + +describe('Monitors page', () => { + const monitors = new MonitorsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + monitors.navigateTo(); + }); + + describe('breadcrumb test', () => { + it('should open and show breadcrumb', () => { + monitors.expectBreadcrumbText('Monitors'); + }); + }); + + describe('fields check', () => { + it('should check status table is present', () => { + // check for table header 'Status' + monitors.getLegends().its(0).should('have.text', 'Status'); + + // check for fields in table + monitors + .getStatusTables() + .should('contain.text', 'Cluster ID') + .and('contain.text', 'monmap modified') + .and('contain.text', 'monmap epoch') + .and('contain.text', 'quorum con') + .and('contain.text', 'quorum mon') + .and('contain.text', 'required con') + .and('contain.text', 'required mon'); + }); + + it('should check In Quorum and Not In Quorum tables are present', () => { + // check for there to be two tables + monitors.getDataTables().should('have.length', 2); + + // check for table header 'In Quorum' + monitors.getLegends().its(1).should('have.text', 'In Quorum'); + + // check for table header 'Not In Quorum' + monitors.getLegends().its(2).should('have.text', 'Not In Quorum'); + + // verify correct columns on In Quorum table + monitors.getDataTableHeaders(0).contains('Name'); + + monitors.getDataTableHeaders(0).contains('Rank'); + + monitors.getDataTableHeaders(0).contains('Public Address'); + + monitors.getDataTableHeaders(0).contains('Open Sessions'); + + // verify correct columns on Not In Quorum table + monitors.getDataTableHeaders(1).contains('Name'); + + monitors.getDataTableHeaders(1).contains('Rank'); + + monitors.getDataTableHeaders(1).contains('Public Address'); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.po.ts new file mode 100644 index 000000000..4113b9928 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/monitors.po.ts @@ -0,0 +1,7 @@ +import { PageHelper } from '../page-helper.po'; + +export class MonitorsPageHelper extends PageHelper { + pages = { + index: { url: '#/monitor', id: 'cd-monitor' } + }; +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.e2e-spec.ts new file mode 100644 index 000000000..e68d03bd5 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.e2e-spec.ts @@ -0,0 +1,57 @@ +import { OSDsPageHelper } from './osds.po'; + +describe('OSDs page', () => { + const osds = new OSDsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + osds.navigateTo(); + }); + + describe('breadcrumb and tab tests', () => { + it('should open and show breadcrumb', () => { + osds.expectBreadcrumbText('OSDs'); + }); + + it('should show two tabs', () => { + osds.getTabsCount().should('eq', 2); + osds.getTabText(0).should('eq', 'OSDs List'); + osds.getTabText(1).should('eq', 'Overall Performance'); + }); + }); + + describe('check existence of fields on OSD page', () => { + it('should check that number of rows and count in footer match', () => { + osds.getTableCount('total').then((text) => { + osds.getTableRows().its('length').should('equal', text); + }); + }); + + it('should verify that buttons exist', () => { + cy.contains('button', 'Create'); + cy.contains('button', 'Cluster-wide configuration'); + }); + + describe('by selecting one row in OSDs List', () => { + beforeEach(() => { + osds.getExpandCollapseElement().click(); + }); + + it('should show the correct text for the tab labels', () => { + cy.get('#tabset-osd-details > li > a').then(($tabs) => { + const tabHeadings = $tabs.map((_i, e) => e.textContent).get(); + + expect(tabHeadings).to.eql([ + 'Devices', + 'Attributes (OSD map)', + 'Metadata', + 'Device health', + 'Performance counter', + 'Performance Details' + ]); + }); + }); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.po.ts new file mode 100644 index 000000000..cd812f474 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/osds.po.ts @@ -0,0 +1,84 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/osd', id: 'cd-osd-list' }, + create: { url: '#/osd/create', id: 'cd-osd-form' } +}; + +export class OSDsPageHelper extends PageHelper { + pages = pages; + + columnIndex = { + id: 3, + status: 5 + }; + + create(deviceType: 'hdd' | 'ssd', hostname?: string, expandCluster = false) { + cy.get('[aria-label="toggle advanced mode"]').click(); + // Click Primary devices Add button + cy.get('cd-osd-devices-selection-groups[name="Primary"]').as('primaryGroups'); + cy.get('@primaryGroups').find('button').click(); + + // Select all devices with `deviceType` + cy.get('cd-osd-devices-selection-modal').within(() => { + cy.get('.modal-footer .tc_submitButton').as('addButton').should('be.disabled'); + this.filterTable('Type', deviceType); + if (hostname) { + this.filterTable('Hostname', hostname); + } + + if (expandCluster) { + this.getTableCount('total').should('be.gte', 1); + } + cy.get('@addButton').click(); + }); + + if (!expandCluster) { + cy.get('@primaryGroups').within(() => { + this.getTableCount('total').as('newOSDCount'); + }); + + cy.get(`${pages.create.id} .card-footer .tc_submitButton`).click(); + cy.get(`cd-osd-creation-preview-modal .modal-footer .tc_submitButton`).click(); + } + } + + @PageHelper.restrictTo(pages.index.url) + checkStatus(id: number, status: string[]) { + this.searchTable(`id:${id}`); + this.expectTableCount('found', 1); + cy.get(`datatable-body-cell:nth-child(${this.columnIndex.status}) .badge`).should(($ele) => { + const allStatus = $ele.toArray().map((v) => v.innerText); + for (const s of status) { + expect(allStatus).to.include(s); + } + }); + } + + @PageHelper.restrictTo(pages.index.url) + ensureNoOsd(id: number) { + this.searchTable(`id:${id}`); + this.expectTableCount('found', 0); + this.clearTableSearchInput(); + } + + @PageHelper.restrictTo(pages.index.url) + deleteByIDs(osdIds: number[], replace?: boolean) { + this.getTableRows().each(($el) => { + const rowOSD = Number( + $el.find('datatable-body-cell .datatable-body-cell-label').get(this.columnIndex.id - 1) + .textContent + ); + if (osdIds.includes(rowOSD)) { + cy.wrap($el).click(); + } + }); + this.clickActionButton('delete'); + if (replace) { + cy.get('cd-modal label[for="preserve"]').click(); + } + cy.get('cd-modal label[for="confirmation"]').click(); + cy.contains('cd-modal button', 'Delete').click(); + cy.get('cd-modal').should('not.exist'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/services.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/services.po.ts new file mode 100644 index 000000000..481d6bc9b --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/cluster/services.po.ts @@ -0,0 +1,204 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/services', id: 'cd-services' }, + create: { url: '#/services/(modal:create)', id: 'cd-service-form' } +}; + +export class ServicesPageHelper extends PageHelper { + pages = pages; + + columnIndex = { + service_name: 2, + placement: 3, + running: 4, + size: 5, + last_refresh: 6 + }; + + serviceDetailColumnIndex = { + daemonName: 2, + status: 4 + }; + + check_for_service() { + this.getTableCount('total').should('not.be.eq', 0); + } + + private selectServiceType(serviceType: string) { + return this.selectOption('service_type', serviceType); + } + + clickServiceTab(serviceName: string, tabName: string) { + this.getExpandCollapseElement(serviceName).click(); + cy.get('cd-service-details').within(() => { + this.getTab(tabName).click(); + }); + } + + addService( + serviceType: string, + exist?: boolean, + count = '1', + snmpVersion?: string, + snmpPrivProtocol?: boolean, + unmanaged = false + ) { + cy.get(`${this.pages.create.id}`).within(() => { + this.selectServiceType(serviceType); + switch (serviceType) { + case 'rgw': + cy.get('#service_id').type('foo'); + unmanaged ? cy.get('label[for=unmanaged]').click() : cy.get('#count').type(count); + break; + + case 'ingress': + if (unmanaged) { + cy.get('label[for=unmanaged]').click(); + } + this.selectOption('backend_service', 'rgw.foo'); + cy.get('#service_id').should('have.value', 'rgw.foo'); + cy.get('#virtual_ip').type('192.168.100.1/24'); + cy.get('#frontend_port').type('8081'); + cy.get('#monitor_port').type('8082'); + break; + + case 'nfs': + cy.get('#service_id').type('testnfs'); + unmanaged ? cy.get('label[for=unmanaged]').click() : cy.get('#count').type(count); + break; + + case 'snmp-gateway': + this.selectOption('snmp_version', snmpVersion); + cy.get('#snmp_destination').type('192.168.0.1:8443'); + if (snmpVersion === 'V2c') { + cy.get('#snmp_community').type('public'); + } else { + cy.get('#engine_id').type('800C53F00000'); + this.selectOption('auth_protocol', 'SHA'); + if (snmpPrivProtocol) { + this.selectOption('privacy_protocol', 'DES'); + cy.get('#snmp_v3_priv_password').type('testencrypt'); + } + + // Credentials + cy.get('#snmp_v3_auth_username').type('test'); + cy.get('#snmp_v3_auth_password').type('testpass'); + } + break; + + default: + cy.get('#service_id').type('test'); + unmanaged ? cy.get('label[for=unmanaged]').click() : cy.get('#count').type(count); + break; + } + if (serviceType === 'snmp-gateway') { + cy.get('cd-submit-button').dblclick(); + } else { + cy.get('cd-submit-button').click(); + } + }); + if (exist) { + cy.get('#service_id').should('have.class', 'ng-invalid'); + } else { + // back to service list + cy.get(`${this.pages.index.id}`); + } + } + + editService(name: string, daemonCount: string) { + this.navigateEdit(name, true, false); + cy.get(`${this.pages.create.id}`).within(() => { + cy.get('#service_type').should('be.disabled'); + cy.get('#service_id').should('be.disabled'); + cy.get('#count').clear().type(daemonCount); + cy.get('cd-submit-button').click(); + }); + } + + checkServiceStatus(daemon: string, expectedStatus = 'running') { + let daemonNameIndex = this.serviceDetailColumnIndex.daemonName; + let statusIndex = this.serviceDetailColumnIndex.status; + + // since hostname row is hidden from the hosts details table, + // we'll need to manually override the indexes when this check is being + // done for the daemons in host details page. So we'll get the url and + // verify if the current page is not the services index page + cy.url().then((url) => { + if (!url.includes(pages.index.url)) { + daemonNameIndex = 1; + statusIndex = 3; + } + + cy.get('cd-service-daemon-list').within(() => { + this.getTableCell(daemonNameIndex, daemon, true) + .parent() + .find(`datatable-body-cell:nth-child(${statusIndex}) .badge`) + .should(($ele) => { + const status = $ele.toArray().map((v) => v.innerText); + expect(status).to.include(expectedStatus); + }); + }); + }); + } + + expectPlacementCount(serviceName: string, expectedCount: string) { + this.getTableCell(this.columnIndex.service_name, serviceName) + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.placement})`) + .should(($ele) => { + const running = $ele.text().split(';'); + expect(running).to.include(`count:${expectedCount}`); + }); + } + + checkExist(serviceName: string, exist: boolean) { + this.getTableCell(this.columnIndex.service_name, serviceName).should(($elements) => { + const services = $elements.map((_, el) => el.textContent).get(); + if (exist) { + expect(services).to.include(serviceName); + } else { + expect(services).to.not.include(serviceName); + } + }); + } + + isUnmanaged(serviceName: string, unmanaged: boolean) { + this.getTableCell(this.columnIndex.service_name, serviceName) + .parent() + .find(`datatable-body-cell:nth-child(${this.columnIndex.placement})`) + .should(($ele) => { + const placement = $ele.text().split(';'); + unmanaged + ? expect(placement).to.include('unmanaged') + : expect(placement).to.not.include('unmanaged'); + }); + } + + deleteService(serviceName: string) { + const getRow = this.getTableCell.bind(this, this.columnIndex.service_name); + getRow(serviceName).click(); + + // Clicks on table Delete button + this.clickActionButton('delete'); + + // Confirms deletion + cy.get('cd-modal .custom-control-label').click(); + cy.contains('cd-modal button', 'Delete').click(); + + // Wait for modal to close + cy.get('cd-modal').should('not.exist'); + this.checkExist(serviceName, false); + } + + daemonAction(daemon: string, action: string) { + cy.get('cd-service-daemon-list').within(() => { + this.getTableRow(daemon).click(); + this.clickActionButton(action); + + // unselect it to avoid colliding with any other selection + // in different steps + this.getTableRow(daemon).click(); + }); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/common/01-global.feature.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/01-global.feature.po.ts new file mode 100644 index 000000000..575d4013b --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/01-global.feature.po.ts @@ -0,0 +1,188 @@ +import { And, Given, Then, When } from 'cypress-cucumber-preprocessor/steps'; + +import { UrlsCollection } from './urls.po'; + +const urlsCollection = new UrlsCollection(); + +Given('I am logged in', () => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); +}); + +Given('I am on the {string} page', (page: string) => { + cy.visit(urlsCollection.pages[page].url); + cy.get(urlsCollection.pages[page].id).should('exist'); +}); + +Then('I should be on the {string} page', (page: string) => { + cy.get(urlsCollection.pages[page].id).should('exist'); +}); + +And('I should see a button to {string}', (button: string) => { + cy.get(`[aria-label="${button}"]`).should('be.visible'); +}); + +When('I click on {string} button', (button: string) => { + cy.get(`[aria-label="${button}"]`).first().click(); +}); + +// When you are clicking on an action in the table actions dropdown button +When('I click on {string} button from the table actions', (button: string) => { + cy.get('.table-actions button.dropdown-toggle').first().click(); + cy.get(`[aria-label="${button}"]`).first().click(); +}); + +And('select options {string}', (labels: string) => { + if (labels) { + cy.get('a[data-testid=select-menu-edit]').click(); + for (const label of labels.split(', ')) { + cy.get('.popover-body div.select-menu-item-content').contains(label).click(); + } + } +}); + +And('{string} option {string}', (action: string, labels: string) => { + if (labels) { + if (action === 'add') { + cy.get('cd-modal').find('.select-menu-edit').click(); + for (const label of labels.split(', ')) { + cy.get('.popover-body input').type(`${label}{enter}`); + } + } else { + for (const label of labels.split(', ')) { + cy.contains('cd-modal .badge', new RegExp(`^${label}$`)) + .find('.badge-remove') + .click(); + } + } + } +}); + +/** + * Fills in the given field using the value provided + * @param field ID of the field that needs to be filled out. + * @param value Value that should be filled in the field. + */ +And('enter {string} {string}', (field: string, value: string) => { + cy.get('cd-modal').within(() => { + cy.get(`input[id=${field}]`).type(value); + }); +}); + +And('I click on submit button', () => { + cy.get('[data-cy=submitBtn]').click(); +}); + +/** + * Selects any row on the datatable if it matches the given name + */ +When('I select a row {string}', (row: string) => { + cy.get('cd-table .search input').first().clear().type(row); + cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).click(); +}); + +Then('I should see the modal', () => { + cy.get('cd-modal').should('exist'); +}); + +Then('I should not see the modal', () => { + cy.get('cd-modal').should('not.exist'); +}); + +/** + * Some modals have an additional confirmation to be provided + * by ticking the 'Are you sure?' box. + */ +Then('I check the tick box in modal', () => { + cy.get('cd-modal .custom-control-label').click(); +}); + +And('I confirm to {string}', (action: string) => { + cy.contains('cd-modal button', action).click(); + cy.get('cd-modal').should('not.exist'); +}); + +Then('I should see an error in {string} field', (field: string) => { + cy.get('cd-modal').within(() => { + cy.get(`input[id=${field}]`).should('have.class', 'ng-invalid'); + }); +}); + +Then('I should see a row with {string}', (row: string) => { + cy.get('cd-table .search input').first().clear().type(row); + cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should( + 'exist' + ); +}); + +Then('I should not see a row with {string}', (row: string) => { + cy.get('cd-table .search input').first().clear().type(row); + cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should( + 'not.exist' + ); +}); + +Then('I should see rows with following entries', (entries) => { + entries.hashes().forEach((entry: any) => { + cy.get('cd-table .search input').first().clear().type(entry.hostname); + cy.contains( + `datatable-body-row datatable-body-cell .datatable-body-cell-label`, + entry.hostname + ).should('exist'); + }); +}); + +And('I should see row {string} have {string}', (row: string, options: string) => { + if (options) { + cy.get('cd-table .search input').first().clear().type(row); + for (const option of options.split(',')) { + cy.contains( + `datatable-body-row datatable-body-cell .datatable-body-cell-label .badge`, + option + ).should('exist'); + } + } +}); + +And('I should see row {string} does not have {string}', (row: string, options: string) => { + if (options) { + cy.get('cd-table .search input').first().clear().type(row); + for (const option of options.split(',')) { + cy.contains( + `datatable-body-row datatable-body-cell .datatable-body-cell-label .badge`, + option + ).should('not.exist'); + } + } +}); + +And('I go to the {string} tab', (names: string) => { + for (const name of names.split(', ')) { + cy.contains('.nav.nav-tabs li', name).click(); + } +}); + +And('select {string} {string}', (selectionName: string, option: string) => { + cy.get(`select[name=${selectionName}]`).select(option); + cy.get(`select[name=${selectionName}] option:checked`).contains(option); +}); + +When('I expand the row {string}', (row: string) => { + cy.contains('.datatable-body-row', row).first().find('.tc_expand-collapse').click(); +}); + +And('I should see row {string} have {string} on this tab', (row: string, options: string) => { + if (options) { + cy.get('cd-table').should('exist'); + cy.get('datatable-scroller, .empty-row'); + cy.get('.datatable-row-detail').within(() => { + cy.get('cd-table .search input').first().clear().type(row); + for (const option of options.split(',')) { + cy.contains( + `datatable-body-row datatable-body-cell .datatable-body-cell-label span`, + option + ).should('exist'); + } + }); + } +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/common/create-cluster/create-cluster.feature.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/create-cluster/create-cluster.feature.po.ts new file mode 100644 index 000000000..d18c34855 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/create-cluster/create-cluster.feature.po.ts @@ -0,0 +1,12 @@ +import { Given, Then } from 'cypress-cucumber-preprocessor/steps'; + +Given('I am on the {string} section', (page: string) => { + cy.get('cd-wizard').within(() => { + cy.get('.nav-link').should('contain.text', page).first().click(); + cy.get('.nav-link.active').should('contain.text', page); + }); +}); + +Then('I should see a message {string}', () => { + cy.get('cd-create-cluster').should('contain.text', 'Please expand your cluster first'); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/common/grafana.feature.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/grafana.feature.po.ts new file mode 100644 index 000000000..7366f8bab --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/grafana.feature.po.ts @@ -0,0 +1,86 @@ +import { e2e } from '@grafana/e2e'; +import { Then, When } from 'cypress-cucumber-preprocessor/steps'; +import 'cypress-iframe'; + +function getIframe() { + cy.frameLoaded('#iframe'); + return cy.iframe(); +} + +Then('I should see the grafana panel {string}', (panels: string) => { + getIframe().within(() => { + for (const panel of panels.split(', ')) { + cy.get('.grafana-app') + .wait(100) + .within(() => { + e2e.components.Panels.Panel.title(panel).should('be.visible'); + }); + } + }); +}); + +When('I view the grafana panel {string}', (panels: string) => { + getIframe().within(() => { + for (const panel of panels.split(', ')) { + cy.get('.grafana-app') + .wait(100) + .within(() => { + e2e.components.Panels.Panel.title(panel).should('be.visible').click(); + e2e.components.Panels.Panel.headerItems('View').should('be.visible').click(); + }); + } + }); +}); + +Then('I should not see {string} in the panel {string}', (value: string, panels: string) => { + getIframe().within(() => { + for (const panel of panels.split(', ')) { + cy.get('.grafana-app') + .wait(100) + .within(() => { + cy.get(`[aria-label="${panel} panel"]`) + .should('be.visible') + .within(() => { + cy.get('span').first().should('not.have.text', value); + }); + }); + } + }); +}); + +Then( + 'I should see the legends {string} in the graph {string}', + (legends: string, panels: string) => { + getIframe().within(() => { + for (const panel of panels.split(', ')) { + cy.get('.grafana-app') + .wait(100) + .within(() => { + cy.get(`[aria-label="${panel} panel"]`) + .should('be.visible') + .within(() => { + for (const legend of legends.split(', ')) { + cy.get('a').contains(legend); + } + }); + }); + } + }); + } +); + +Then('I should not see No Data in the graph {string}', (panels: string) => { + getIframe().within(() => { + for (const panel of panels.split(', ')) { + cy.get('.grafana-app') + .wait(100) + .within(() => { + cy.get(`[aria-label="${panel} panel"]`) + .should('be.visible') + .within(() => { + cy.get('div.datapoints-warning').should('not.exist'); + }); + }); + } + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/common/urls.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/urls.po.ts new file mode 100644 index 000000000..286355085 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/common/urls.po.ts @@ -0,0 +1,44 @@ +import { PageHelper } from '../page-helper.po'; + +export class UrlsCollection extends PageHelper { + pages = { + // Cluster expansion + welcome: { url: '#/expand-cluster', id: 'cd-create-cluster' }, + + // Landing page + dashboard: { url: '#/dashboard', id: 'cd-dashboard' }, + + // Hosts + hosts: { url: '#/hosts', id: 'cd-hosts' }, + 'add hosts': { url: '#/hosts/(modal:add)', id: 'cd-host-form' }, + + // Services + services: { url: '#/services', id: 'cd-services' }, + 'create services': { url: '#/services/(modal:create)', id: 'cd-service-form' }, + + // Physical Disks + 'physical disks': { url: '#/inventory', id: 'cd-inventory' }, + + // Monitors + monitors: { url: '#/monitor', id: 'cd-monitor' }, + + // OSDs + osds: { url: '#/osd', id: 'cd-osd-list' }, + 'create osds': { url: '#/osd/create', id: 'cd-osd-form' }, + + // Configuration + configuration: { url: '#/configuration', id: 'cd-configuration' }, + + // Crush Map + 'crush map': { url: '#/crush-map', id: 'cd-crushmap' }, + + // Mgr modules + 'mgr-modules': { url: '#/mgr-modules', id: 'cd-mgr-module-list' }, + + // Logs + logs: { url: '#/logs', id: 'cd-logs' }, + + // RGW Daemons + 'rgw daemons': { url: '#/rgw/daemon', id: 'cd-rgw-daemon-list' } + }; +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.e2e-spec.ts new file mode 100644 index 000000000..e623475fd --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.e2e-spec.ts @@ -0,0 +1,17 @@ +import { FilesystemsPageHelper } from './filesystems.po'; + +describe('File Systems page', () => { + const filesystems = new FilesystemsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + filesystems.navigateTo(); + }); + + describe('breadcrumb test', () => { + it('should open and show breadcrumb', () => { + filesystems.expectBreadcrumbText('File Systems'); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.po.ts new file mode 100644 index 000000000..bd6e5b8b7 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/filesystems/filesystems.po.ts @@ -0,0 +1,5 @@ +import { PageHelper } from '../page-helper.po'; + +export class FilesystemsPageHelper extends PageHelper { + pages = { index: { url: '#/cephfs', id: 'cd-cephfs-list' } }; +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/01-hosts.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/01-hosts.e2e-spec.ts new file mode 100644 index 000000000..aca36ade1 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/01-hosts.e2e-spec.ts @@ -0,0 +1,86 @@ +import { HostsPageHelper } from '../cluster/hosts.po'; + +describe('Hosts page', () => { + const hosts = new HostsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + hosts.navigateTo(); + }); + + describe('when Orchestrator is available', () => { + beforeEach(function () { + cy.fixture('orchestrator/inventory.json').as('hosts'); + cy.fixture('orchestrator/services.json').as('services'); + }); + + it('should not add an exsiting host', function () { + const hostname = Cypress._.sample(this.hosts).name; + hosts.navigateTo('add'); + hosts.add(hostname, true); + }); + + it('should drain and remove a host and then add it back', function () { + const hostname = Cypress._.last(this.hosts)['name']; + + // should drain the host first before deleting + hosts.drain(hostname); + hosts.remove(hostname); + + // add it back + hosts.navigateTo('add'); + hosts.add(hostname); + hosts.checkExist(hostname, true); + }); + + it('should display inventory', function () { + for (const host of this.hosts) { + hosts.clickTab('cd-host-details', host.name, 'Physical Disks'); + cy.get('cd-host-details').within(() => { + hosts.expectTableCount('total', host.devices.length); + }); + } + }); + + it('should display daemons', function () { + for (const host of this.hosts) { + hosts.clickTab('cd-host-details', host.name, 'Daemons'); + cy.get('cd-host-details').within(() => { + hosts.getTableCount('total').should('be.gte', 0); + }); + } + }); + + it('should edit host labels', function () { + const hostname = Cypress._.sample(this.hosts).name; + const labels = ['foo', 'bar']; + hosts.editLabels(hostname, labels, true); + hosts.editLabels(hostname, labels, false); + }); + + it('should enter host into maintenance', function () { + const hostname = Cypress._.sample(this.hosts).name; + const serviceList = new Array(); + this.services.forEach((service: any) => { + if (hostname === service.hostname) { + serviceList.push(service.daemon_type); + } + }); + let enterMaintenance = true; + serviceList.forEach((service: string) => { + if (service === 'mgr' || service === 'alertmanager') { + enterMaintenance = false; + } + }); + if (enterMaintenance) { + hosts.maintenance(hostname); + } + }); + + it('should exit host from maintenance', function () { + const hostname = Cypress._.sample(this.hosts).name; + hosts.maintenance(hostname, true); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/03-inventory.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/03-inventory.e2e-spec.ts new file mode 100644 index 000000000..a64e3bc8c --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/03-inventory.e2e-spec.ts @@ -0,0 +1,26 @@ +import { InventoryPageHelper } from '../cluster/inventory.po'; + +describe('Physical Disks page', () => { + const inventory = new InventoryPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + inventory.navigateTo(); + }); + + it('should have correct devices', () => { + cy.fixture('orchestrator/inventory.json').then((hosts) => { + const totalDiskCount = Cypress._.sumBy(hosts, 'devices.length'); + inventory.expectTableCount('total', totalDiskCount); + for (const host of hosts) { + inventory.filterTable('Hostname', host['name']); + inventory.getTableCount('found').should('be.eq', host.devices.length); + } + }); + }); + + it('should identify device', () => { + inventory.identify(); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/04-osds.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/04-osds.e2e-spec.ts new file mode 100644 index 000000000..41f0933b7 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/04-osds.e2e-spec.ts @@ -0,0 +1,50 @@ +import { OSDsPageHelper } from '../cluster/osds.po'; +import { DashboardPageHelper } from '../ui/dashboard.po'; + +describe('OSDs page', () => { + const osds = new OSDsPageHelper(); + const dashboard = new DashboardPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + osds.navigateTo(); + }); + + describe('when Orchestrator is available', () => { + it('should create and delete OSDs', () => { + osds.getTableCount('total').as('initOSDCount'); + osds.navigateTo('create'); + osds.create('hdd'); + + cy.get('@newOSDCount').then((newCount) => { + cy.get('@initOSDCount').then((oldCount) => { + const expectedCount = Number(oldCount) + Number(newCount); + + // check total rows + osds.expectTableCount('total', expectedCount); + + // landing page is easier to check OSD status + dashboard.navigateTo(); + dashboard.infoCardBody('OSDs').should('contain.text', `${expectedCount} total`); + dashboard.infoCardBody('OSDs').should('contain.text', `${expectedCount} up`); + dashboard.infoCardBody('OSDs').should('contain.text', `${expectedCount} in`); + + cy.wait(30000); + expect(Number(newCount)).to.be.gte(2); + // Delete the first OSD we created + osds.navigateTo(); + const deleteOsdId = Number(oldCount); + osds.deleteByIDs([deleteOsdId], false); + osds.ensureNoOsd(deleteOsdId); + + cy.wait(30000); + // Replace the second OSD we created + const replaceID = Number(oldCount) + 1; + osds.deleteByIDs([replaceID], true); + osds.checkStatus(replaceID, ['destroyed']); + }); + }); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/05-services.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/05-services.e2e-spec.ts new file mode 100644 index 000000000..fb5e6ac89 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/05-services.e2e-spec.ts @@ -0,0 +1,36 @@ +import { ServicesPageHelper } from '../cluster/services.po'; + +describe('Services page', () => { + const services = new ServicesPageHelper(); + const serviceName = 'rgw.foo'; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + services.navigateTo(); + }); + + describe('when Orchestrator is available', () => { + it('should create an rgw service', () => { + services.navigateTo('create'); + services.addService('rgw'); + + services.checkExist(serviceName, true); + }); + + it('should edit a service', () => { + const count = '2'; + services.editService(serviceName, count); + services.expectPlacementCount(serviceName, count); + }); + + it('should create and delete an ingress service', () => { + services.navigateTo('create'); + services.addService('ingress'); + + services.checkExist('ingress.rgw.foo', true); + + services.deleteService('ingress.rgw.foo'); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/grafana/grafana.feature b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/grafana/grafana.feature new file mode 100644 index 000000000..62476ad25 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/grafana/grafana.feature @@ -0,0 +1,63 @@ +Feature: Grafana panels + + Go to some of the grafana performance section and check if + panels are populated without any issues + + Background: Log in + Given I am logged in + + Scenario Outline: Hosts Overall Performance + Given I am on the "hosts" page + When I go to the "Overall Performance" tab + Then I should see the grafana panel "" + When I view the grafana panel "" + Then I should not see "No Data" in the panel "" + + Examples: + | panel | + | OSD Hosts | + | AVG CPU Busy | + | AVG RAM Utilization | + | Physical IOPS | + | AVG Disk Utilization | + | Network Load | + | CPU Busy - Top 10 Hosts | + | Network Load - Top 10 Hosts | + + Scenario Outline: RGW Daemon Overall Performance + Given I am on the "rgw daemons" page + When I go to the "Overall Performance" tab + Then I should see the grafana panel "" + When I view the grafana panel "" + Then I should not see No Data in the graph "" + And I should see the legends "" in the graph "" + + Examples: + | panel | legends | + | Total Requests/sec by RGW Instance | foo.ceph-node-00, foo.ceph-node-01, foo.ceph-node-02 | + | GET Latencies by RGW Instance | foo.ceph-node-00, foo.ceph-node-01, foo.ceph-node-02 | + | Bandwidth by RGW Instance | foo.ceph-node-00, foo.ceph-node-01, foo.ceph-node-02 | + | PUT Latencies by RGW Instance | foo.ceph-node-00, foo.ceph-node-01, foo.ceph-node-02 | + | Average GET/PUT Latencies | GET AVG, PUT AVG | + | Bandwidth Consumed by Type | GETs, PUTs | + + Scenario Outline: RGW per Daemon Performance + Given I am on the "rgw daemons" page + When I expand the row "" + And I go to the "Performance Details" tab + Then I should see the grafana panel "" + When I view the grafana panel "" + Then I should not see No Data in the graph "" + And I should see the legends "" in the graph "" + + Examples: + | name | panel | + | foo.ceph-node-00 | Bandwidth by HTTP Operation | + | foo.ceph-node-00 | HTTP Request Breakdown | + | foo.ceph-node-00 | Workload Breakdown | + | foo.ceph-node-01 | Bandwidth by HTTP Operation | + | foo.ceph-node-01 | HTTP Request Breakdown | + | foo.ceph-node-01 | Workload Breakdown | + | foo.ceph-node-02 | Bandwidth by HTTP Operation | + | foo.ceph-node-02 | HTTP Request Breakdown | + | foo.ceph-node-02 | Workload Breakdown | diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/01-create-cluster-welcome.feature b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/01-create-cluster-welcome.feature new file mode 100644 index 000000000..6ba2fc4fc --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/01-create-cluster-welcome.feature @@ -0,0 +1,26 @@ +Feature: Cluster expansion welcome screen + + Go to the welcome screen and decide whether + to proceed to wizard or skips to landing page + + Background: Login + Given I am logged in + + Scenario: Cluster expansion welcome screen + Given I am on the "welcome" page + And I should see a button to "Expand Cluster" + And I should see a button to "Skip" + And I should see a message "Please expand your cluster first" + + Scenario: Go to the Cluster expansion wizard + Given I am on the "welcome" page + And I should see a button to "Expand Cluster" + When I click on "Expand Cluster" button + Then I am on the "Add Hosts" section + + Scenario: Skips the process and go to the landing page + Given I am on the "welcome" page + And I should see a button to "Skip" + When I click on "Skip" button + And I confirm to "Continue" + Then I should be on the "dashboard" page diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/02-create-cluster-add-host.feature b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/02-create-cluster-add-host.feature new file mode 100644 index 000000000..93c10833d --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/02-create-cluster-add-host.feature @@ -0,0 +1,74 @@ +Feature: Cluster expansion host addition + + Add some hosts and perform some host related actions like editing the labels + and removing the hosts from the cluster and verify all of the actions are performed + as expected + + Background: Cluster expansion wizard + Given I am logged in + And I am on the "welcome" page + And I click on "Expand Cluster" button + + Scenario Outline: Add hosts + Given I am on the "Add Hosts" section + When I click on "Add" button + And enter "hostname" "" + And select options "" + And I click on submit button + Then I should see a row with "" + And I should see row "" have "" + + Examples: + | hostname | labels | + | ceph-node-01 | mon, mgr | + | ceph-node-02 || + + Scenario Outline: Remove hosts + Given I am on the "Add Hosts" section + And I should see a row with "" + When I select a row "" + And I click on "Remove" button from the table actions + Then I should see the modal + And I check the tick box in modal + And I click on "Remove Host" button + Then I should not see the modal + And I should not see a row with "" + + Examples: + | hostname | + | ceph-node-01 | + | ceph-node-02 | + + Scenario: Add hosts using pattern 'ceph-node-[01-02]' + Given I am on the "Add Hosts" section + When I click on "Add" button + And enter "hostname" "ceph-node-[01-02]" + And I click on submit button + Then I should see rows with following entries + | hostname | + | ceph-node-01 | + | ceph-node-02 | + + Scenario: Add exisiting host and verify it failed + Given I am on the "Add Hosts" section + And I should see a row with "ceph-node-00" + When I click on "Add" button + And enter "hostname" "ceph-node-00" + Then I should see an error in "hostname" field + + Scenario Outline: Add and remove labels on host + Given I am on the "Add Hosts" section + When I select a row "" + And I click on "Edit" button from the table actions + And "add" option "" + And I click on submit button + Then I should see row "" have "" + When I select a row "" + And I click on "Edit" button from the table actions + And "remove" option "" + And I click on submit button + Then I should see row "" does not have "" + + Examples: + | hostname | labels | + | ceph-node-01 | foo | diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/03-create-cluster-create-services.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/03-create-cluster-create-services.e2e-spec.ts new file mode 100644 index 000000000..7668cafcf --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/03-create-cluster-create-services.e2e-spec.ts @@ -0,0 +1,47 @@ +/* tslint:disable*/ +import { + CreateClusterServicePageHelper, + CreateClusterWizardHelper +} from '../../cluster/create-cluster.po'; +/* tslint:enable*/ + +describe('Create cluster create services page', () => { + const createCluster = new CreateClusterWizardHelper(); + const createClusterServicePage = new CreateClusterServicePageHelper(); + + const createService = (serviceType: string, serviceName: string, count = '1') => { + cy.get('[aria-label=Create]').first().click(); + createClusterServicePage.addService(serviceType, false, count); + createClusterServicePage.checkExist(serviceName, true); + }; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + createCluster.navigateTo(); + createCluster.createCluster(); + cy.get('.nav-link').contains('Create Services').click(); + }); + + it('should check if title contains Create Services', () => { + cy.get('.title').should('contain.text', 'Create Services'); + }); + + describe('when Orchestrator is available', () => { + const serviceName = 'mds.test'; + + it('should create an mds service', () => { + createService('mds', serviceName, '1'); + }); + + it('should edit a service', () => { + const daemonCount = '2'; + createClusterServicePage.editService(serviceName, daemonCount); + createClusterServicePage.expectPlacementCount(serviceName, daemonCount); + }); + + it('should delete mds service', () => { + createClusterServicePage.deleteService('mds.test'); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/04-create-cluster-create-osds.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/04-create-cluster-create-osds.e2e-spec.ts new file mode 100644 index 000000000..a82be9855 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/04-create-cluster-create-osds.e2e-spec.ts @@ -0,0 +1,41 @@ +/* tslint:disable*/ +import { CreateClusterWizardHelper } from '../../cluster/create-cluster.po'; +import { OSDsPageHelper } from '../../cluster/osds.po'; +/* tslint:enable*/ + +const osds = new OSDsPageHelper(); + +describe('Create cluster create osds page', () => { + const createCluster = new CreateClusterWizardHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + createCluster.navigateTo(); + createCluster.createCluster(); + cy.get('.nav-link').contains('Create OSDs').click(); + }); + + it('should check if title contains Create OSDs', () => { + cy.get('.title').should('contain.text', 'Create OSDs'); + }); + + describe('when Orchestrator is available', () => { + it('should create OSDs', () => { + const hostnames = ['ceph-node-00', 'ceph-node-01', 'ceph-node-02']; + for (const hostname of hostnames) { + osds.create('hdd', hostname, true); + + // Go to the Review section and Expand the cluster + // because the drive group spec is only stored + // in frontend and will be lost when refreshed + cy.get('.nav-link').contains('Review').click(); + cy.get('button[aria-label="Next"]').click(); + cy.get('cd-dashboard').should('exist'); + createCluster.navigateTo(); + createCluster.createCluster(); + cy.get('.nav-link').contains('Create OSDs').click(); + } + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/05-create-cluster-review.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/05-create-cluster-review.e2e-spec.ts new file mode 100644 index 000000000..f93ad7a97 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/05-create-cluster-review.e2e-spec.ts @@ -0,0 +1,67 @@ +/* tslint:disable*/ +import { + CreateClusterHostPageHelper, + CreateClusterWizardHelper +} from '../../cluster/create-cluster.po'; +/* tslint:enable*/ + +describe('Create Cluster Review page', () => { + const createCluster = new CreateClusterWizardHelper(); + const createClusterHostPage = new CreateClusterHostPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + createCluster.navigateTo(); + createCluster.createCluster(); + + cy.get('.nav-link').contains('Review').click(); + }); + + describe('navigation link test', () => { + it('should check if active nav-link is of Review section', () => { + cy.get('.nav-link.active').should('contain.text', 'Review'); + }); + }); + + describe('fields check', () => { + it('should check cluster resources table is present', () => { + // check for table header 'Cluster Resources' + createCluster.getLegends().its(0).should('have.text', 'Cluster Resources'); + + // check for fields in table + createCluster.getStatusTables().should('contain.text', 'Hosts'); + createCluster.getStatusTables().should('contain.text', 'Storage Capacity'); + createCluster.getStatusTables().should('contain.text', 'CPUs'); + createCluster.getStatusTables().should('contain.text', 'Memory'); + }); + + it('should check Host Details table is present', () => { + // check for there to be two tables + createCluster.getDataTables().should('have.length', 1); + + // verify correct columns on Host Details table + createCluster.getDataTableHeaders(0).contains('Hostname'); + + createCluster.getDataTableHeaders(0).contains('Labels'); + + createCluster.getDataTableHeaders(0).contains('CPUs'); + + createCluster.getDataTableHeaders(0).contains('Cores'); + + createCluster.getDataTableHeaders(0).contains('Total Memory'); + + createCluster.getDataTableHeaders(0).contains('Raw Capacity'); + + createCluster.getDataTableHeaders(0).contains('HDDs'); + + createCluster.getDataTableHeaders(0).contains('Flash'); + + createCluster.getDataTableHeaders(0).contains('NICs'); + }); + + it('should check default host name is present', () => { + createClusterHostPage.check_for_host(); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/06-cluster-check.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/06-cluster-check.e2e-spec.ts new file mode 100644 index 000000000..589cbaa90 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/06-cluster-check.e2e-spec.ts @@ -0,0 +1,99 @@ +/* tslint:disable*/ +import { Input, ManagerModulesPageHelper } from '../../cluster/mgr-modules.po'; +import { CreateClusterWizardHelper } from '../../cluster/create-cluster.po'; +import { HostsPageHelper } from '../../cluster/hosts.po'; +import { ServicesPageHelper } from '../../cluster/services.po'; +/* tslint:enable*/ + +describe('when cluster creation is completed', () => { + const createCluster = new CreateClusterWizardHelper(); + const services = new ServicesPageHelper(); + const hosts = new HostsPageHelper(); + const mgrmodules = new ManagerModulesPageHelper(); + + const hostnames = ['ceph-node-00', 'ceph-node-01', 'ceph-node-02', 'ceph-node-03']; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + }); + + it('should redirect to dashboard landing page after cluster creation', () => { + createCluster.navigateTo(); + createCluster.createCluster(); + + cy.get('.nav-link').contains('Review').click(); + cy.get('button[aria-label="Next"]').click(); + cy.get('cd-dashboard').should('exist'); + }); + + describe('Hosts page', () => { + beforeEach(() => { + hosts.navigateTo(); + }); + + it('should check if monitoring stacks are running on the root host', () => { + const monitoringStack = ['alertmanager', 'grafana', 'node-exporter', 'prometheus']; + hosts.clickTab('cd-host-details', 'ceph-node-00', 'Daemons'); + for (const daemon of monitoringStack) { + cy.get('cd-host-details').within(() => { + services.checkServiceStatus(daemon); + }); + } + }); + + // avoid creating node-exporter on the newly added host + // to favour the host draining process + it('should reduce the count for node-exporter', () => { + services.editService('node-exporter', '3'); + }); + + // grafana ip address is set to the fqdn by default. + // kcli is not working with that, so setting the IP manually. + it('should change ip address of grafana', { retries: 2 }, () => { + const dashboardArr: Input[] = [ + { + id: 'GRAFANA_API_URL', + newValue: 'https://192.168.100.100:3000', + oldValue: '' + } + ]; + mgrmodules.editMgrModule('dashboard', dashboardArr); + }); + + it('should add one more host', () => { + hosts.navigateTo('add'); + hosts.add(hostnames[3]); + hosts.checkExist(hostnames[3], true); + }); + + it('should have removed "_no_schedule" label', () => { + for (const hostname of hostnames) { + hosts.checkLabelExists(hostname, ['_no_schedule'], false); + } + }); + + it('should display inventory', () => { + hosts.clickTab('cd-host-details', hostnames[1], 'Physical Disks'); + cy.get('cd-host-details').within(() => { + hosts.getTableCount('total').should('be.gte', 0); + }); + }); + + it('should display daemons', () => { + hosts.clickTab('cd-host-details', hostnames[1], 'Daemons'); + cy.get('cd-host-details').within(() => { + hosts.getTableCount('total').should('be.gte', 0); + }); + }); + + it('should check if mon daemon is running on all hosts', () => { + for (const hostname of hostnames) { + hosts.clickTab('cd-host-details', hostname, 'Daemons'); + cy.get('cd-host-details').within(() => { + services.checkServiceStatus('mon'); + }); + } + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-osds.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-osds.e2e-spec.ts new file mode 100644 index 000000000..a0a1dd032 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/07-osds.e2e-spec.ts @@ -0,0 +1,24 @@ +/* tslint:disable*/ +import { OSDsPageHelper } from '../../cluster/osds.po'; +/* tslint:enable*/ + +describe('OSDs page', () => { + const osds = new OSDsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + osds.navigateTo(); + }); + + it('should check if atleast 3 osds are created', { retries: 3 }, () => { + // we have created a total of more than 3 osds throughout + // the whole tests so ensuring that atleast + // 3 osds are listed in the table. Since the OSD + // creation can take more time going with + // retry of 3 + for (let id = 0; id < 3; id++) { + osds.checkStatus(id, ['in', 'up']); + } + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/08-hosts.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/08-hosts.e2e-spec.ts new file mode 100644 index 000000000..374ecdb0c --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/08-hosts.e2e-spec.ts @@ -0,0 +1,49 @@ +/* tslint:disable*/ +import { HostsPageHelper } from '../../cluster/hosts.po'; +import { ServicesPageHelper } from '../../cluster/services.po'; +/* tslint:enable*/ + +describe('Host Page', () => { + const hosts = new HostsPageHelper(); + const services = new ServicesPageHelper(); + + const hostnames = ['ceph-node-00', 'ceph-node-01', 'ceph-node-02', 'ceph-node-03']; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + hosts.navigateTo(); + }); + + // rgw is needed for testing the force maintenance + it('should create rgw services', () => { + services.navigateTo('create'); + services.addService('rgw', false, '4'); + services.checkExist('rgw.foo', true); + }); + + it('should check if rgw daemon is running on all hosts', () => { + for (const hostname of hostnames) { + hosts.clickTab('cd-host-details', hostname, 'Daemons'); + cy.get('cd-host-details').within(() => { + services.checkServiceStatus('rgw'); + }); + } + }); + + it('should force maintenance and exit', () => { + hosts.maintenance(hostnames[3], true, true); + }); + + it('should drain, remove and add the host back', () => { + hosts.drain(hostnames[3]); + hosts.remove(hostnames[3]); + hosts.navigateTo('add'); + hosts.add(hostnames[3]); + hosts.checkExist(hostnames[3], true); + }); + + it('should show the exact count of daemons', () => { + hosts.checkServiceInstancesExist(hostnames[0], ['mgr: 1', 'prometheus: 1']); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts new file mode 100644 index 000000000..ed9ffb989 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/09-services.e2e-spec.ts @@ -0,0 +1,114 @@ +/* tslint:disable*/ +import { ServicesPageHelper } from '../../cluster/services.po'; +/* tslint:enable*/ + +describe('Services page', () => { + const services = new ServicesPageHelper(); + const mdsDaemonName = 'mds.test'; + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + services.navigateTo(); + }); + + it('should check if rgw service is created', () => { + services.checkExist('rgw.foo', true); + }); + + it('should create an mds service', () => { + services.navigateTo('create'); + services.addService('mds', false); + services.checkExist(mdsDaemonName, true); + + services.clickServiceTab(mdsDaemonName, 'Details'); + cy.get('cd-service-details').within(() => { + services.checkServiceStatus(mdsDaemonName); + }); + }); + + it('should stop a daemon', () => { + services.clickServiceTab(mdsDaemonName, 'Details'); + services.checkServiceStatus(mdsDaemonName); + + services.daemonAction('mds', 'stop'); + services.checkServiceStatus(mdsDaemonName, 'stopped'); + }); + + it('should restart a daemon', () => { + services.checkExist(mdsDaemonName, true); + services.clickServiceTab(mdsDaemonName, 'Details'); + services.daemonAction('mds', 'restart'); + services.checkServiceStatus(mdsDaemonName, 'running'); + }); + + it('should redeploy a daemon', () => { + services.checkExist(mdsDaemonName, true); + services.clickServiceTab(mdsDaemonName, 'Details'); + + services.daemonAction('mds', 'stop'); + services.checkServiceStatus(mdsDaemonName, 'stopped'); + services.daemonAction('mds', 'redeploy'); + services.checkServiceStatus(mdsDaemonName, 'running'); + }); + + it('should start a daemon', () => { + services.checkExist(mdsDaemonName, true); + services.clickServiceTab(mdsDaemonName, 'Details'); + + services.daemonAction('mds', 'stop'); + services.checkServiceStatus(mdsDaemonName, 'stopped'); + services.daemonAction('mds', 'start'); + services.checkServiceStatus(mdsDaemonName, 'running'); + }); + + it('should delete an mds service', () => { + services.deleteService(mdsDaemonName); + }); + + it('should create and delete snmp-gateway service with version V2c', () => { + services.navigateTo('create'); + services.addService('snmp-gateway', false, '1', 'V2c'); + services.checkExist('snmp-gateway', true); + + services.clickServiceTab('snmp-gateway', 'Details'); + cy.get('cd-service-details').within(() => { + services.checkServiceStatus('snmp-gateway'); + }); + + services.deleteService('snmp-gateway'); + }); + + it('should create and delete snmp-gateway service with version V3', () => { + services.navigateTo('create'); + services.addService('snmp-gateway', false, '1', 'V3', true); + services.checkExist('snmp-gateway', true); + + services.clickServiceTab('snmp-gateway', 'Details'); + cy.get('cd-service-details').within(() => { + services.checkServiceStatus('snmp-gateway'); + }); + + services.deleteService('snmp-gateway'); + }); + + it('should create and delete snmp-gateway service with version V3 and w/o privacy protocol', () => { + services.navigateTo('create'); + services.addService('snmp-gateway', false, '1', 'V3', false); + services.checkExist('snmp-gateway', true); + + services.clickServiceTab('snmp-gateway', 'Details'); + cy.get('cd-service-details').within(() => { + services.checkServiceStatus('snmp-gateway'); + }); + + services.deleteService('snmp-gateway'); + }); + + it('should create ingress as unmanaged', () => { + services.navigateTo('create'); + services.addService('ingress', false, undefined, undefined, undefined, true); + services.checkExist('ingress.rgw.foo', true); + services.isUnmanaged('ingress.rgw.foo', true); + services.deleteService('ingress.rgw.foo'); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/10-nfs-exports.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/10-nfs-exports.e2e-spec.ts new file mode 100644 index 000000000..f4b5499f0 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/10-nfs-exports.e2e-spec.ts @@ -0,0 +1,83 @@ +/* tslint:disable*/ +import { ServicesPageHelper } from '../../cluster/services.po'; +import { NFSPageHelper } from '../../orchestrator/workflow/nfs/nfs-export.po'; +import { BucketsPageHelper } from '../../rgw/buckets.po'; +/* tslint:enable*/ + +describe('nfsExport page', () => { + const nfsExport = new NFSPageHelper(); + const services = new ServicesPageHelper(); + const buckets = new BucketsPageHelper(); + const bucketName = 'e2e.nfs.bucket'; + // @TODO: uncomment this when a CephFS volume can be created through Dashboard. + // const fsPseudo = '/fsPseudo'; + const rgwPseudo = '/rgwPseudo'; + const editPseudo = '/editPseudo'; + const backends = ['CephFS', 'Object Gateway']; + const squash = 'no_root_squash'; + const client: object = { addresses: '192.168.0.10' }; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + nfsExport.navigateTo(); + }); + + describe('breadcrumb test', () => { + it('should open and show breadcrumb', () => { + nfsExport.expectBreadcrumbText('NFS'); + }); + }); + + describe('Create, edit and delete', () => { + it('should create an NFS cluster', () => { + services.navigateTo('create'); + + services.addService('nfs'); + + services.checkExist('nfs.testnfs', true); + services.getExpandCollapseElement().click(); + services.checkServiceStatus('nfs'); + }); + + it('should create a nfs-export with RGW backend', () => { + buckets.navigateTo('create'); + buckets.create(bucketName, 'dashboard', 'default-placement'); + + nfsExport.navigateTo(); + nfsExport.existTableCell(rgwPseudo, false); + nfsExport.navigateTo('create'); + nfsExport.create(backends[1], squash, client, rgwPseudo, bucketName); + nfsExport.existTableCell(rgwPseudo); + }); + + // @TODO: uncomment this when a CephFS volume can be created through Dashboard. + // it('should create a nfs-export with CephFS backend', () => { + // nfsExport.navigateTo(); + // nfsExport.existTableCell(fsPseudo, false); + // nfsExport.navigateTo('create'); + // nfsExport.create(backends[0], squash, client, fsPseudo); + // nfsExport.existTableCell(fsPseudo); + // }); + + it('should show Clients', () => { + nfsExport.clickTab('cd-nfs-details', rgwPseudo, 'Clients (1)'); + cy.get('cd-nfs-details').within(() => { + nfsExport.getTableCount('total').should('be.gte', 0); + }); + }); + + it('should edit an export', () => { + nfsExport.editExport(rgwPseudo, editPseudo); + + nfsExport.existTableCell(editPseudo); + }); + + it('should delete exports and bucket', () => { + nfsExport.delete(editPseudo); + + buckets.navigateTo(); + buckets.delete(bucketName); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/nfs/nfs-export.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/nfs/nfs-export.po.ts new file mode 100644 index 000000000..c700ef058 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/orchestrator/workflow/nfs/nfs-export.po.ts @@ -0,0 +1,52 @@ +/* tslint:disable*/ +import { PageHelper } from '../../../page-helper.po'; +/* tslint:enable*/ + +const pages = { + index: { url: '#/nfs', id: 'cd-nfs-list' }, + create: { url: '#/nfs/create', id: 'cd-nfs-form' } +}; + +export class NFSPageHelper extends PageHelper { + pages = pages; + + @PageHelper.restrictTo(pages.create.url) + create(backend: string, squash: string, client: object, pseudo: string, rgwPath?: string) { + this.selectOption('cluster_id', 'testnfs'); + // select a storage backend + this.selectOption('name', backend); + if (backend === 'CephFS') { + this.selectOption('fs_name', 'myfs'); + + cy.get('#security_label').click({ force: true }); + } else { + cy.get('input[data-testid=rgw_path]').type(rgwPath); + } + + cy.get('input[name=pseudo]').type(pseudo); + this.selectOption('squash', squash); + + // Add clients + cy.get('button[name=add_client]').click({ force: true }); + cy.get('input[name=addresses]').type(client['addresses']); + + // Check if we can remove clients and add it again + cy.get('span[name=remove_client]').click({ force: true }); + cy.get('button[name=add_client]').click({ force: true }); + cy.get('input[name=addresses]').type(client['addresses']); + + cy.get('cd-submit-button').click(); + } + + editExport(pseudo: string, editPseudo: string) { + this.navigateEdit(pseudo); + + cy.get('input[name=pseudo]').clear().type(editPseudo); + + cy.get('cd-submit-button').click(); + + // Click the export and check its details table for updated content + this.getExpandCollapseElement(editPseudo).click(); + cy.get('.active.tab-pane').should('contain.text', editPseudo); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/page-helper.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/page-helper.po.ts new file mode 100644 index 000000000..4531a70bb --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/page-helper.po.ts @@ -0,0 +1,309 @@ +interface Page { + url: string; + id: string; +} + +export abstract class PageHelper { + pages: Record; + + /** + * Decorator to be used on Helper methods to restrict access to one particular URL. This shall + * help developers to prevent and highlight mistakes. It also reduces boilerplate code and by + * thus, increases readability. + */ + static restrictTo(page: string): Function { + return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => { + const fn: Function = descriptor.value; + descriptor.value = function (...args: any) { + cy.location('hash').should((url) => { + expect(url).to.eq( + page, + `Method ${target.constructor.name}::${propertyKey} is supposed to be ` + + `run on path "${page}", but was run on URL "${url}"` + ); + }); + fn.apply(this, args); + }; + }; + } + + /** + * Navigates to the given page or to index. + * Waits until the page component is loaded + */ + navigateTo(name: string = null) { + name = name || 'index'; + const page = this.pages[name]; + + cy.visit(page.url); + cy.get(page.id); + } + + /** + * Navigates back and waits for the hash to change + */ + navigateBack() { + cy.location('hash').then((hash) => { + cy.go('back'); + cy.location('hash').should('not.be', hash); + }); + } + + /** + * Navigates to the edit page + */ + navigateEdit(name: string, select = true, breadcrumb = true) { + if (select) { + this.navigateTo(); + this.getFirstTableCell(name).click(); + } + cy.contains('Creating...').should('not.exist'); + cy.contains('button', 'Edit').click(); + if (breadcrumb) { + this.expectBreadcrumbText('Edit'); + } + } + + /** + * Checks the active breadcrumb value. + */ + expectBreadcrumbText(text: string) { + cy.get('.breadcrumb-item.active').should('have.text', text); + } + + getTabs() { + return cy.get('.nav.nav-tabs li'); + } + + getTab(tabName: string) { + return cy.contains('.nav.nav-tabs li', tabName); + } + + getTabText(index: number) { + return this.getTabs().its(index).text(); + } + + getTabsCount(): any { + return this.getTabs().its('length'); + } + + /** + * Helper method to navigate/click a tab inside the expanded table row. + * @param selector The selector of the expanded table row. + * @param name The name of the row which should expand. + * @param tabName Name of the tab to be navigated/clicked. + */ + clickTab(selector: string, name: string, tabName: string) { + this.getExpandCollapseElement(name).click(); + cy.get(selector).within(() => { + this.getTab(tabName).click(); + }); + } + + /** + * Helper method to select an option inside a select element. + * This method will also expect that the option was set. + * @param option The option text (not value) to be selected. + */ + selectOption(selectionName: string, option: string) { + cy.get(`select[name=${selectionName}]`).select(option); + return this.expectSelectOption(selectionName, option); + } + + /** + * Helper method to expect a set option inside a select element. + * @param option The selected option text (not value) that is to + * be expected. + */ + expectSelectOption(selectionName: string, option: string) { + return cy.get(`select[name=${selectionName}] option:checked`).contains(option); + } + + getLegends() { + return cy.get('legend'); + } + + getToast() { + return cy.get('.ngx-toastr'); + } + + /** + * Waits for the table to load its data + * Should be used in all methods that access the datatable + */ + private waitDataTableToLoad() { + cy.get('cd-table').should('exist'); + cy.get('datatable-scroller, .empty-row'); + } + + getDataTables() { + this.waitDataTableToLoad(); + + return cy.get('cd-table .dataTables_wrapper'); + } + + private getTableCountSpan(spanType: 'selected' | 'found' | 'total') { + return cy.contains('.datatable-footer-inner .page-count span', spanType); + } + + // Get 'selected', 'found', or 'total' row count of a table. + getTableCount(spanType: 'selected' | 'found' | 'total') { + this.waitDataTableToLoad(); + return this.getTableCountSpan(spanType).then(($elem) => { + const text = $elem + .filter((_i, e) => e.innerText.includes(spanType)) + .first() + .text(); + + return Number(text.match(/(\d+)\s+\w*/)[1]); + }); + } + + // Wait until selected', 'found', or 'total' row count of a table equal to a number. + expectTableCount(spanType: 'selected' | 'found' | 'total', count: number) { + this.waitDataTableToLoad(); + this.getTableCountSpan(spanType).should(($elem) => { + const text = $elem.first().text(); + expect(Number(text.match(/(\d+)\s+\w*/)[1])).to.equal(count); + }); + } + + getTableRow(content: string) { + this.waitDataTableToLoad(); + + this.searchTable(content); + return cy.contains('.datatable-body-row', content); + } + + getTableRows() { + this.waitDataTableToLoad(); + + return cy.get('datatable-row-wrapper'); + } + + /** + * Returns the first table cell. + * Optionally, you can specify the content of the cell. + */ + getFirstTableCell(content?: string) { + this.waitDataTableToLoad(); + + if (content) { + this.searchTable(content); + return cy.contains('.datatable-body-cell-label', content); + } else { + return cy.get('.datatable-body-cell-label').first(); + } + } + + getTableCell(columnIndex: number, exactContent: string, partialMatch = false) { + this.waitDataTableToLoad(); + this.clearTableSearchInput(); + this.searchTable(exactContent); + if (partialMatch) { + return cy.contains( + `datatable-body-row datatable-body-cell:nth-child(${columnIndex})`, + exactContent + ); + } + return cy.contains( + `datatable-body-row datatable-body-cell:nth-child(${columnIndex})`, + new RegExp(`^${exactContent}$`) + ); + } + + existTableCell(name: string, oughtToBePresent = true) { + const waitRule = oughtToBePresent ? 'be.visible' : 'not.exist'; + this.getFirstTableCell(name).should(waitRule); + } + + getExpandCollapseElement(content?: string) { + this.waitDataTableToLoad(); + + if (content) { + return cy.contains('.datatable-body-row', content).find('.tc_expand-collapse'); + } else { + return cy.get('.tc_expand-collapse').first(); + } + } + + /** + * Gets column headers of table + */ + getDataTableHeaders(index = 0) { + this.waitDataTableToLoad(); + + return cy.get('.datatable-header').its(index).find('.datatable-header-cell'); + } + + /** + * Grabs striped tables + */ + getStatusTables() { + return cy.get('.table.table-striped'); + } + + filterTable(name: string, option: string) { + this.waitDataTableToLoad(); + + cy.get('.tc_filter_name > button').click(); + cy.contains(`.tc_filter_name .dropdown-item`, name).click(); + + cy.get('.tc_filter_option > button').click(); + cy.contains(`.tc_filter_option .dropdown-item`, option).click(); + } + + setPageSize(size: string) { + cy.get('cd-table .dataTables_paginate input').first().clear({ force: true }).type(size); + } + + searchTable(text: string) { + this.waitDataTableToLoad(); + + this.setPageSize('10'); + cy.get('cd-table .search input').first().clear().type(text); + } + + clearTableSearchInput() { + this.waitDataTableToLoad(); + + return cy.get('cd-table .search button').first().click(); + } + + // Click the action button + clickActionButton(action: string) { + cy.get('.table-actions button.dropdown-toggle').first().click(); // open submenu + cy.get(`button.${action}`).click(); // click on "action" menu item + } + + /** + * This is a generic method to delete table rows. + * It will select the first row that contains the provided name and delete it. + * After that it will wait until the row is no longer displayed. + * @param name The string to search in table cells. + * @param columnIndex If provided, search string in columnIndex column. + */ + delete(name: string, columnIndex?: number, section?: string) { + // Selects row + const getRow = columnIndex + ? this.getTableCell.bind(this, columnIndex) + : this.getFirstTableCell.bind(this); + getRow(name).click(); + let action: string; + section === 'hosts' ? (action = 'remove') : (action = 'delete'); + + // Clicks on table Delete/Remove button + this.clickActionButton(action); + + // Convert action to SentenceCase and Confirms deletion + const actionUpperCase = action.charAt(0).toUpperCase() + action.slice(1); + cy.get('cd-modal .custom-control-label').click(); + cy.contains('cd-modal button', actionUpperCase).click(); + + // Wait for modal to close + cy.get('cd-modal').should('not.exist'); + + // Waits for item to be removed from table + getRow(name).should('not.exist'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.e2e-spec.ts new file mode 100644 index 000000000..b4c3c75ac --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.e2e-spec.ts @@ -0,0 +1,54 @@ +import { PoolPageHelper } from './pools.po'; + +describe('Pools page', () => { + const pools = new PoolPageHelper(); + const poolName = 'pool_e2e_pool-test'; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + pools.navigateTo(); + }); + + describe('breadcrumb and tab tests', () => { + it('should open and show breadcrumb', () => { + pools.expectBreadcrumbText('Pools'); + }); + + it('should show two tabs', () => { + pools.getTabsCount().should('equal', 2); + }); + + it('should show pools list tab at first', () => { + pools.getTabText(0).should('eq', 'Pools List'); + }); + + it('should show overall performance as a second tab', () => { + pools.getTabText(1).should('eq', 'Overall Performance'); + }); + }); + + describe('Create, update and destroy', () => { + it('should create a pool', () => { + pools.existTableCell(poolName, false); + pools.navigateTo('create'); + pools.create(poolName, 8, 'rbd'); + pools.existTableCell(poolName); + }); + + it('should edit a pools placement group', () => { + pools.existTableCell(poolName); + pools.edit_pool_pg(poolName, 32); + }); + + it('should show updated configuration field values', () => { + pools.existTableCell(poolName); + const bpsLimit = '4 B/s'; + pools.edit_pool_configuration(poolName, bpsLimit); + }); + + it('should delete a pool', () => { + pools.delete(poolName); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.po.ts new file mode 100644 index 000000000..98cee470e --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/pools/pools.po.ts @@ -0,0 +1,70 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/pool', id: 'cd-pool-list' }, + create: { url: '#/pool/create', id: 'cd-pool-form' } +}; + +export class PoolPageHelper extends PageHelper { + pages = pages; + + private isPowerOf2(n: number) { + // tslint:disable-next-line: no-bitwise + return expect((n & (n - 1)) === 0, `Placement groups ${n} are not a power of 2`).to.be.true; + } + + @PageHelper.restrictTo(pages.create.url) + create(name: string, placement_groups: number, ...apps: string[]) { + cy.get('input[name=name]').clear().type(name); + + this.isPowerOf2(placement_groups); + + this.selectOption('poolType', 'replicated'); + + this.expectSelectOption('pgAutoscaleMode', 'on'); + this.selectOption('pgAutoscaleMode', 'off'); // To show pgNum field + cy.get('input[name=pgNum]').clear().type(`${placement_groups}`); + this.setApplications(apps); + cy.get('cd-submit-button').click(); + } + + edit_pool_pg(name: string, new_pg: number, wait = true) { + this.isPowerOf2(new_pg); + this.navigateEdit(name); + + cy.get('input[name=pgNum]').clear().type(`${new_pg}`); + cy.get('cd-submit-button').click(); + const str = `${new_pg} active+clean`; + this.getTableRow(name); + if (wait) { + this.getTableRow(name).contains(str); + } + } + + edit_pool_configuration(name: string, bpsLimit: string) { + this.navigateEdit(name); + + cy.get('.collapsible').click(); + cy.get('cd-rbd-configuration-form') + .get('input[name=rbd_qos_bps_limit]') + .clear() + .type(`${bpsLimit}`); + cy.get('cd-submit-button').click(); + + this.navigateEdit(name); + + cy.get('.collapsible').click(); + cy.get('cd-rbd-configuration-form') + .get('input[name=rbd_qos_bps_limit]') + .should('have.value', bpsLimit); + } + + private setApplications(apps: string[]) { + if (!apps || apps.length === 0) { + return; + } + cy.get('.float-left.mr-2.select-menu-edit').click(); + cy.get('.popover-body').should('be.visible'); + apps.forEach((app) => cy.get('.select-menu-item-content').contains(app).click()); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.e2e-spec.ts new file mode 100644 index 000000000..e5ffdeee9 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.e2e-spec.ts @@ -0,0 +1,62 @@ +import { BucketsPageHelper } from './buckets.po'; + +describe('RGW buckets page', () => { + const buckets = new BucketsPageHelper(); + const bucket_name = 'e2ebucket'; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + buckets.navigateTo(); + }); + + describe('breadcrumb tests', () => { + it('should open and show breadcrumb', () => { + buckets.expectBreadcrumbText('Buckets'); + }); + }); + + describe('create, edit & delete bucket tests', () => { + it('should create bucket', () => { + buckets.navigateTo('create'); + buckets.create(bucket_name, BucketsPageHelper.USERS[0], 'default-placement'); + buckets.getFirstTableCell(bucket_name).should('exist'); + }); + + it('should edit bucket', () => { + buckets.edit(bucket_name, BucketsPageHelper.USERS[1]); + buckets.getDataTables().should('contain.text', BucketsPageHelper.USERS[1]); + }); + + it('should delete bucket', () => { + buckets.delete(bucket_name); + }); + + it('should create bucket with object locking enabled', () => { + buckets.navigateTo('create'); + buckets.create(bucket_name, BucketsPageHelper.USERS[0], 'default-placement', true); + buckets.getFirstTableCell(bucket_name).should('exist'); + }); + + it('should not allow to edit versioning if object locking is enabled', () => { + buckets.edit(bucket_name, BucketsPageHelper.USERS[1], true); + buckets.getDataTables().should('contain.text', BucketsPageHelper.USERS[1]); + + buckets.delete(bucket_name); + }); + }); + + describe('Invalid Input in Create and Edit tests', () => { + it('should test invalid inputs in create fields', () => { + buckets.testInvalidCreate(); + }); + + it('should test invalid input in edit owner field', () => { + buckets.navigateTo('create'); + buckets.create(bucket_name, BucketsPageHelper.USERS[0], 'default-placement'); + buckets.testInvalidEdit(bucket_name); + buckets.navigateTo(); + buckets.delete(bucket_name); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.po.ts new file mode 100644 index 000000000..4804753d1 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/buckets.po.ts @@ -0,0 +1,193 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/rgw/bucket', id: 'cd-rgw-bucket-list' }, + create: { url: '#/rgw/bucket/create', id: 'cd-rgw-bucket-form' } +}; + +export class BucketsPageHelper extends PageHelper { + static readonly USERS = ['dashboard', 'testid']; + + pages = pages; + + versioningStateEnabled = 'Enabled'; + versioningStateSuspended = 'Suspended'; + + private selectOwner(owner: string) { + return this.selectOption('owner', owner); + } + + private selectPlacementTarget(placementTarget: string) { + return this.selectOption('placement-target', placementTarget); + } + + private selectLockMode(lockMode: string) { + return this.selectOption('lock_mode', lockMode); + } + + @PageHelper.restrictTo(pages.create.url) + create(name: string, owner: string, placementTarget: string, isLocking = false) { + // Enter in bucket name + cy.get('#bid').type(name); + + // Select bucket owner + this.selectOwner(owner); + cy.get('#owner').should('have.class', 'ng-valid'); + + // Select bucket placement target: + this.selectPlacementTarget(placementTarget); + cy.get('#placement-target').should('have.class', 'ng-valid'); + + if (isLocking) { + cy.get('#lock_enabled').click({ force: true }); + // Select lock mode: + this.selectLockMode('Compliance'); + cy.get('#lock_mode').should('have.class', 'ng-valid'); + cy.get('#lock_retention_period_days').type('3'); + } + + // Click the create button and wait for bucket to be made + cy.contains('button', 'Create Bucket').click(); + + this.getFirstTableCell(name).should('exist'); + } + + @PageHelper.restrictTo(pages.index.url) + edit(name: string, new_owner: string, isLocking = false) { + this.navigateEdit(name); + + cy.get('input[name=placement-target]').should('have.value', 'default-placement'); + this.selectOwner(new_owner); + + // If object locking is enabled versioning shouldn't be visible + if (isLocking) { + cy.get('input[id=versioning]').should('be.disabled'); + cy.contains('button', 'Edit Bucket').click(); + + // wait to be back on buckets page with table visible and click + this.getExpandCollapseElement(name).click(); + + // check its details table for edited owner field + cy.get('.table.table-striped.table-bordered') + .first() + .should('contains.text', new_owner) + .as('bucketDataTable'); + + // Check versioning enabled: + cy.get('@bucketDataTable').find('tr').its(2).find('td').last().should('have.text', new_owner); + cy.get('@bucketDataTable').find('tr').its(11).find('td').last().as('versioningValueCell'); + + return cy.get('@versioningValueCell').should('have.text', this.versioningStateEnabled); + } + // Enable versioning + cy.get('input[id=versioning]').should('not.be.checked'); + cy.get('label[for=versioning]').click(); + cy.get('input[id=versioning]').should('be.checked'); + + cy.contains('button', 'Edit Bucket').click(); + + // wait to be back on buckets page with table visible and click + this.getExpandCollapseElement(name).click(); + + // check its details table for edited owner field + cy.get('.table.table-striped.table-bordered') + .first() + .should('contains.text', new_owner) + .as('bucketDataTable'); + + // Check versioning enabled: + cy.get('@bucketDataTable').find('tr').its(2).find('td').last().should('have.text', new_owner); + cy.get('@bucketDataTable').find('tr').its(11).find('td').last().as('versioningValueCell'); + + cy.get('@versioningValueCell').should('have.text', this.versioningStateEnabled); + + // Disable versioning: + this.navigateEdit(name); + + cy.get('label[for=versioning]').click(); + cy.get('input[id=versioning]').should('not.be.checked'); + cy.contains('button', 'Edit Bucket').click(); + + // Check versioning suspended: + this.getExpandCollapseElement(name).click(); + + return cy.get('@versioningValueCell').should('have.text', this.versioningStateSuspended); + } + + testInvalidCreate() { + this.navigateTo('create'); + cy.get('#bid').as('nameInputField'); // Grabs name box field + + // Gives an invalid name (too short), then waits for dashboard to determine validity + cy.get('@nameInputField').type('rq'); + + cy.contains('button', 'Create Bucket').click(); // To trigger a validation + + // Waiting for website to decide if name is valid or not + // Check that name input field was marked invalid in the css + cy.get('@nameInputField') + .should('not.have.class', 'ng-pending') + .and('have.class', 'ng-invalid'); + + // Check that error message was printed under name input field + cy.get('#bid + .invalid-feedback').should( + 'have.text', + 'Bucket names must be 3 to 63 characters long.' + ); + + // Test invalid owner input + // select some valid option. The owner drop down error message will not appear unless a valid user was selected at + // one point before the invalid placeholder user is selected. + this.selectOwner(BucketsPageHelper.USERS[1]); + + // select the first option, which is invalid because it is a placeholder + this.selectOwner('-- Select a user --'); + + cy.get('@nameInputField').click(); + + // Check that owner drop down field was marked invalid in the css + cy.get('#owner').should('have.class', 'ng-invalid'); + + // Check that error message was printed under owner drop down field + cy.get('#owner + .invalid-feedback').should('have.text', 'This field is required.'); + + // Check invalid placement target input + this.selectOwner(BucketsPageHelper.USERS[1]); + // The drop down error message will not appear unless a valid option is previsously selected. + this.selectPlacementTarget('default-placement'); + this.selectPlacementTarget('-- Select a placement target --'); + cy.get('@nameInputField').click(); // Trigger validation + cy.get('#placement-target').should('have.class', 'ng-invalid'); + cy.get('#placement-target + .invalid-feedback').should('have.text', 'This field is required.'); + + // Clicks the Create Bucket button but the page doesn't move. + // Done by testing for the breadcrumb + cy.contains('button', 'Create Bucket').click(); // Clicks Create Bucket button + this.expectBreadcrumbText('Create'); + // content in fields seems to subsist through tests if not cleared, so it is cleared + cy.get('@nameInputField').clear(); + return cy.contains('button', 'Cancel').click(); + } + + testInvalidEdit(name: string) { + this.navigateEdit(name); + + cy.get('input[id=versioning]').should('exist').and('not.be.checked'); + + // Chooses 'Select a user' rather than a valid owner on Edit Bucket page + // and checks if it's an invalid input + + // select the first option, which is invalid because it is a placeholder + this.selectOwner('-- Select a user --'); + + cy.contains('button', 'Edit Bucket').click(); + + // Check that owner drop down field was marked invalid in the css + cy.get('#owner').should('have.class', 'ng-invalid'); + + // Check that error message was printed under owner drop down field + cy.get('#owner + .invalid-feedback').should('have.text', 'This field is required.'); + + this.expectBreadcrumbText('Edit'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.e2e-spec.ts new file mode 100644 index 000000000..4cad786c6 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.e2e-spec.ts @@ -0,0 +1,35 @@ +import { DaemonsPageHelper } from './daemons.po'; + +describe('RGW daemons page', () => { + const daemons = new DaemonsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + daemons.navigateTo(); + }); + + describe('breadcrumb and tab tests', () => { + it('should open and show breadcrumb', () => { + daemons.expectBreadcrumbText('Daemons'); + }); + + it('should show two tabs', () => { + daemons.getTabsCount().should('eq', 2); + }); + + it('should show daemons list tab at first', () => { + daemons.getTabText(0).should('eq', 'Daemons List'); + }); + + it('should show overall performance as a second tab', () => { + daemons.getTabText(1).should('eq', 'Overall Performance'); + }); + }); + + describe('details and performance counters table tests', () => { + it('should check that details/performance tables are visible when daemon is selected', () => { + daemons.checkTables(); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.po.ts new file mode 100644 index 000000000..82a179463 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/daemons.po.ts @@ -0,0 +1,34 @@ +import { PageHelper } from '../page-helper.po'; + +export class DaemonsPageHelper extends PageHelper { + pages = { + index: { url: '#/rgw/daemon', id: 'cd-rgw-daemon-list' } + }; + + getTableCell() { + return cy + .get('.tab-content') + .its(1) + .find('cd-table') + .should('have.length', 1) // Only 1 table should be renderer + .find('datatable-body-cell'); + } + + checkTables() { + // click on a daemon so details table appears + cy.get('.datatable-body-cell-label').first().click(); + + // check details table is visible + // check at least one field is present + this.getTableCell().should('be.visible').should('contain.text', 'ceph_version'); + + // click on performance counters tab and check table is loaded + cy.contains('.nav-link', 'Performance Counters').click(); + + // check at least one field is present + this.getTableCell().should('be.visible').should('contain.text', 'objecter.op_r'); + + // click on performance details tab + cy.contains('.nav-link', 'Performance Details').click(); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.e2e-spec.ts new file mode 100644 index 000000000..b5f366a09 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.e2e-spec.ts @@ -0,0 +1,46 @@ +import { UsersPageHelper } from './users.po'; + +describe('RGW users page', () => { + const users = new UsersPageHelper(); + const tenant = 'e2e_000tenant'; + const user_id = 'e2e_000user_create_edit_delete'; + const user_name = tenant + '$' + user_id; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + users.navigateTo(); + }); + + describe('breadcrumb tests', () => { + it('should open and show breadcrumb', () => { + users.expectBreadcrumbText('Users'); + }); + }); + + describe('create, edit & delete user tests', () => { + it('should create user', () => { + users.navigateTo('create'); + users.create(tenant, user_id, 'Some Name', 'original@website.com', '1200'); + users.getFirstTableCell(user_id).should('exist'); + }); + + it('should edit users full name, email and max buckets', () => { + users.edit(user_name, 'Another Identity', 'changed@othersite.com', '1969'); + }); + + it('should delete user', () => { + users.delete(user_name); + }); + }); + + describe('Invalid input tests', () => { + it('should put invalid input into user creation form and check fields are marked invalid', () => { + users.invalidCreate(); + }); + + it('should put invalid input into user edit form and check fields are marked invalid', () => { + users.invalidEdit(); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.po.ts new file mode 100644 index 000000000..a4266f989 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/rgw/users.po.ts @@ -0,0 +1,139 @@ +import { PageHelper } from '../page-helper.po'; + +const pages = { + index: { url: '#/rgw/user', id: 'cd-rgw-user-list' }, + create: { url: '#/rgw/user/create', id: 'cd-rgw-user-form' } +}; + +export class UsersPageHelper extends PageHelper { + pages = pages; + + @PageHelper.restrictTo(pages.create.url) + create(tenant: string, user_id: string, fullname: string, email: string, maxbuckets: string) { + // Enter in user_id + cy.get('#user_id').type(user_id); + // Show Tenanat + cy.get('#show_tenant').click({ force: true }); + // Enter in tenant + cy.get('#tenant').type(tenant); + // Enter in full name + cy.get('#display_name').click().type(fullname); + + // Enter in email + cy.get('#email').click().type(email); + + // Enter max buckets + this.selectOption('max_buckets_mode', 'Custom'); + cy.get('#max_buckets').should('exist').should('have.value', '1000'); + cy.get('#max_buckets').click().clear().type(maxbuckets); + + // Click the create button and wait for user to be made + cy.contains('button', 'Create User').click(); + this.getFirstTableCell(tenant + '$' + user_id).should('exist'); + } + + @PageHelper.restrictTo(pages.index.url) + edit(name: string, new_fullname: string, new_email: string, new_maxbuckets: string) { + this.navigateEdit(name); + + // Change the full name field + cy.get('#display_name').click().clear().type(new_fullname); + + // Change the email field + cy.get('#email').click().clear().type(new_email); + + // Change the max buckets field + this.selectOption('max_buckets_mode', 'Custom'); + cy.get('#max_buckets').click().clear().type(new_maxbuckets); + + cy.contains('button', 'Edit User').click(); + + // Click the user and check its details table for updated content + this.getExpandCollapseElement(name).click(); + cy.get('.active.tab-pane') + .should('contain.text', new_fullname) + .and('contain.text', new_email) + .and('contain.text', new_maxbuckets); + } + + invalidCreate() { + const tenant = '000invalid_tenant'; + const uname = '000invalid_create_user'; + // creating this user in order to check that you can't give two users the same name + this.navigateTo('create'); + this.create(tenant, uname, 'xxx', 'xxx@xxx', '1'); + + this.navigateTo('create'); + + // Username + cy.get('#user_id') + // No username had been entered. Field should be invalid + .should('have.class', 'ng-invalid') + // Try to give user already taken name. Should make field invalid. + .type(uname); + cy.get('#show_tenant').click({ force: true }); + cy.get('#tenant').type(tenant).should('have.class', 'ng-invalid'); + cy.contains('#tenant + .invalid-feedback', 'The chosen user ID exists in this tenant.'); + + // check that username field is marked invalid if username has been cleared off + cy.get('#user_id').clear().blur().should('have.class', 'ng-invalid'); + cy.contains('#user_id + .invalid-feedback', 'This field is required.'); + + // Full name + cy.get('#display_name') + // No display name has been given so field should be invalid + .should('have.class', 'ng-invalid') + // display name field should also be marked invalid if given input then emptied + .type('a') + .clear() + .blur() + .should('have.class', 'ng-invalid'); + cy.contains('#display_name + .invalid-feedback', 'This field is required.'); + + // put invalid email to make field invalid + cy.get('#email').type('a').blur().should('have.class', 'ng-invalid'); + cy.contains('#email + .invalid-feedback', 'This is not a valid email address.'); + + // put negative max buckets to make field invalid + this.expectSelectOption('max_buckets_mode', 'Custom'); + cy.get('#max_buckets').clear().type('-5').blur().should('have.class', 'ng-invalid'); + cy.contains('#max_buckets + .invalid-feedback', 'The entered value must be >= 1.'); + + this.navigateTo(); + this.delete(tenant + '$' + uname); + } + + invalidEdit() { + const tenant = '000invalid_tenant'; + const uname = '000invalid_edit_user'; + // creating this user to edit for the test + this.navigateTo('create'); + this.create(tenant, uname, 'xxx', 'xxx@xxx', '50'); + const name = tenant + '$' + uname; + this.navigateEdit(name); + + // put invalid email to make field invalid + cy.get('#email') + .clear() + .type('a') + .blur() + .should('not.have.class', 'ng-pending') + .should('have.class', 'ng-invalid'); + cy.contains('#email + .invalid-feedback', 'This is not a valid email address.'); + + // empty the display name field making it invalid + cy.get('#display_name').clear().blur().should('have.class', 'ng-invalid'); + cy.contains('#display_name + .invalid-feedback', 'This field is required.'); + + // put negative max buckets to make field invalid + this.selectOption('max_buckets_mode', 'Disabled'); + cy.get('#max_buckets').should('not.exist'); + this.selectOption('max_buckets_mode', 'Custom'); + cy.get('#max_buckets').should('exist').should('have.value', '50'); + cy.get('#max_buckets').clear().type('-5').blur().should('have.class', 'ng-invalid'); + cy.contains('#max_buckets + .invalid-feedback', 'The entered value must be >= 1.'); + + this.navigateTo(); + this.delete(tenant + '$' + uname); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.e2e-spec.ts new file mode 100644 index 000000000..52994859e --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.e2e-spec.ts @@ -0,0 +1,15 @@ +import { ApiDocsPageHelper } from '../ui/api-docs.po'; + +describe('Api Docs Page', () => { + const apiDocs = new ApiDocsPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + apiDocs.navigateTo(); + }); + + it('should show the API Docs description', () => { + cy.get('.renderedMarkdown').first().contains('This is the official Ceph REST API'); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.po.ts new file mode 100644 index 000000000..c7a8d222d --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/api-docs.po.ts @@ -0,0 +1,5 @@ +import { PageHelper } from '../page-helper.po'; + +export class ApiDocsPageHelper extends PageHelper { + pages = { index: { url: '#/api-docs', id: 'cd-api-docs' } }; +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.e2e-spec.ts new file mode 100644 index 000000000..9cb84480b --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.e2e-spec.ts @@ -0,0 +1,124 @@ +import { IscsiPageHelper } from '../block/iscsi.po'; +import { HostsPageHelper } from '../cluster/hosts.po'; +import { MonitorsPageHelper } from '../cluster/monitors.po'; +import { OSDsPageHelper } from '../cluster/osds.po'; +import { PageHelper } from '../page-helper.po'; +import { PoolPageHelper } from '../pools/pools.po'; +import { DaemonsPageHelper } from '../rgw/daemons.po'; +import { DashboardPageHelper } from './dashboard.po'; + +describe('Dashboard Main Page', () => { + const dashboard = new DashboardPageHelper(); + const daemons = new DaemonsPageHelper(); + const hosts = new HostsPageHelper(); + const osds = new OSDsPageHelper(); + const pools = new PoolPageHelper(); + const monitors = new MonitorsPageHelper(); + const iscsi = new IscsiPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + dashboard.navigateTo(); + }); + + describe('Check that all hyperlinks on info cards lead to the correct page and fields exist', () => { + it('should ensure that all linked info cards lead to correct page', () => { + const expectationMap = { + Monitors: 'Monitors', + OSDs: 'OSDs', + Hosts: 'Hosts', + 'Object Gateways': 'Daemons', + 'iSCSI Gateways': 'Overview', + Pools: 'Pools' + }; + + for (const [linkText, breadcrumbText] of Object.entries(expectationMap)) { + cy.location('hash').should('eq', '#/dashboard'); + dashboard.clickInfoCardLink(linkText); + dashboard.expectBreadcrumbText(breadcrumbText); + dashboard.navigateBack(); + } + }); + + it('should verify that info cards exist on dashboard in proper order', () => { + // Ensures that info cards are all displayed on the dashboard tab while being in the proper + // order, checks for card title and position via indexing into a list of all info cards. + const order = [ + 'Cluster Status', + 'Hosts', + 'Monitors', + 'OSDs', + 'Managers', + 'Object Gateways', + 'Metadata Servers', + 'iSCSI Gateways', + 'Raw Capacity', + 'Objects', + 'PG Status', + 'Pools', + 'PGs per OSD', + 'Client Read/Write', + 'Client Throughput', + 'Recovery Throughput', + 'Scrubbing' + ]; + + for (let i = 0; i < order.length; i++) { + dashboard.infoCard(i).should('contain.text', order[i]); + } + }); + + it('should verify that info card group titles are present and in the right order', () => { + cy.location('hash').should('eq', '#/dashboard'); + dashboard.infoGroupTitle(0).should('eq', 'Status'); + dashboard.infoGroupTitle(1).should('eq', 'Capacity'); + dashboard.infoGroupTitle(2).should('eq', 'Performance'); + }); + }); + + it('Should check that dashboard cards have correct information', () => { + interface TestSpec { + cardName: string; + regexMatcher?: RegExp; + pageObject: PageHelper; + } + const testSpecs: TestSpec[] = [ + { cardName: 'Object Gateways', regexMatcher: /(\d+)\s+total/, pageObject: daemons }, + { cardName: 'Monitors', regexMatcher: /(\d+)\s+\(quorum/, pageObject: monitors }, + { cardName: 'Hosts', regexMatcher: /(\d+)\s+total/, pageObject: hosts }, + { cardName: 'OSDs', regexMatcher: /(\d+)\s+total/, pageObject: osds }, + { cardName: 'Pools', pageObject: pools }, + { cardName: 'iSCSI Gateways', regexMatcher: /(\d+)\s+total/, pageObject: iscsi } + ]; + for (let i = 0; i < testSpecs.length; i++) { + const spec = testSpecs[i]; + dashboard.navigateTo(); + + dashboard.infoCardBodyText(spec.cardName).then((infoCardBodyText: string) => { + let dashCount = 0; + + if (spec.regexMatcher) { + const match = infoCardBodyText.match(new RegExp(spec.regexMatcher)); + expect(match).to.length.gt( + 1, + `Regex ${spec.regexMatcher} did not find a match for card with name ` + + `${spec.cardName}` + ); + dashCount = Number(match[1]); + } else { + dashCount = Number(infoCardBodyText); + } + + spec.pageObject.navigateTo(); + spec.pageObject.getTableCount('total').then((tableCount) => { + expect(tableCount).to.eq( + dashCount, + `Text of card "${spec.cardName}" and regex "${spec.regexMatcher}" resulted in ${dashCount} ` + + `but did not match table count ${tableCount}` + ); + }); + }); + } + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.po.ts new file mode 100644 index 000000000..42d63ef44 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/dashboard.po.ts @@ -0,0 +1,31 @@ +import { PageHelper } from '../page-helper.po'; + +export class DashboardPageHelper extends PageHelper { + pages = { index: { url: '#/dashboard', id: 'cd-dashboard' } }; + + infoGroupTitle(index: number) { + return cy.get('.info-group-title').its(index).text(); + } + + clickInfoCardLink(cardName: string) { + cy.get(`cd-info-card[cardtitle="${cardName}"]`).contains('a', cardName).click(); + } + + infoCard(indexOrTitle: number | string) { + cy.get('cd-info-card').as('infoCards'); + + if (typeof indexOrTitle === 'number') { + return cy.get('@infoCards').its(indexOrTitle); + } else { + return cy.contains('cd-info-card a', indexOrTitle).parent().parent().parent().parent(); + } + } + + infoCardBodyText(infoCard: string) { + return this.infoCard(infoCard).find('.card-text').text(); + } + + infoCardBody(infoCard: string) { + return this.infoCard(infoCard).find('.card-text'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.e2e-spec.ts new file mode 100644 index 000000000..ccf16c2b5 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.e2e-spec.ts @@ -0,0 +1,20 @@ +import { LanguagePageHelper } from './language.po'; + +describe('Shared pages', () => { + const language = new LanguagePageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + language.navigateTo(); + }); + + it('should check default language', () => { + language.getLanguageBtn().should('contain.text', 'English'); + }); + + it('should check all available languages', () => { + language.getLanguageBtn().click(); + language.getAllLanguages().should('have.length', 1).should('contain.text', 'English'); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.po.ts new file mode 100644 index 000000000..80e21ba1e --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/language.po.ts @@ -0,0 +1,15 @@ +import { PageHelper } from '../page-helper.po'; + +export class LanguagePageHelper extends PageHelper { + pages = { + index: { url: '#/dashboard', id: 'cd-dashboard' } + }; + + getLanguageBtn() { + return cy.get('cd-language-selector a').first(); + } + + getAllLanguages() { + return cy.get('cd-language-selector button'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.e2e-spec.ts new file mode 100644 index 000000000..29c9e9e10 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.e2e-spec.ts @@ -0,0 +1,17 @@ +import { LoginPageHelper } from './login.po'; + +describe('Login page', () => { + const login = new LoginPageHelper(); + + it('should login and navigate to dashboard page', () => { + login.navigateTo(); + login.doLogin(); + }); + + it('should logout when clicking the button', () => { + login.navigateTo(); + login.doLogin(); + + login.doLogout(); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.po.ts new file mode 100644 index 000000000..d4d2c6921 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/login.po.ts @@ -0,0 +1,22 @@ +import { PageHelper } from '../page-helper.po'; + +export class LoginPageHelper extends PageHelper { + pages = { + index: { url: '#/login', id: 'cd-login' }, + dashboard: { url: '#/dashboard', id: 'cd-dashboard' } + }; + + doLogin() { + cy.get('[name=username]').type('admin'); + cy.get('#password').type('admin'); + cy.get('[type=submit]').click(); + cy.get('cd-dashboard').should('exist'); + } + + doLogout() { + cy.get('cd-identity a').click(); + cy.contains('cd-identity span', 'Sign out').click(); + cy.get('cd-login').should('exist'); + cy.location('hash').should('eq', '#/login'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.e2e-spec.ts new file mode 100644 index 000000000..fee2d2db9 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.e2e-spec.ts @@ -0,0 +1,24 @@ +import { NavigationPageHelper } from './navigation.po'; + +describe('Shared pages', () => { + const shared = new NavigationPageHelper(); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + shared.navigateTo(); + }); + + it('should display the vertical menu by default', () => { + shared.getVerticalMenu().should('not.have.class', 'active'); + }); + + it('should hide the vertical menu', () => { + shared.getMenuToggler().click(); + shared.getVerticalMenu().should('have.class', 'active'); + }); + + it('should navigate to the correct page', () => { + shared.checkNavigations(shared.navigations); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.po.ts new file mode 100644 index 000000000..a7ecf3af0 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/navigation.po.ts @@ -0,0 +1,69 @@ +import { PageHelper } from '../page-helper.po'; + +export class NavigationPageHelper extends PageHelper { + pages = { + index: { url: '#/dashboard', id: 'cd-dashboard' } + }; + + navigations = [ + { menu: 'NFS', component: 'cd-error' }, + { + menu: 'Object Gateway', + submenus: [ + { menu: 'Daemons', component: 'cd-rgw-daemon-list' }, + { menu: 'Users', component: 'cd-rgw-user-list' }, + { menu: 'Buckets', component: 'cd-rgw-bucket-list' } + ] + }, + { menu: 'Dashboard', component: 'cd-dashboard' }, + { + menu: 'Cluster', + submenus: [ + { menu: 'Hosts', component: 'cd-hosts' }, + { menu: 'Physical Disks', component: 'cd-error' }, + { menu: 'Monitors', component: 'cd-monitor' }, + { menu: 'Services', component: 'cd-error' }, + { menu: 'OSDs', component: 'cd-osd-list' }, + { menu: 'Configuration', component: 'cd-configuration' }, + { menu: 'CRUSH map', component: 'cd-crushmap' }, + { menu: 'Manager Modules', component: 'cd-mgr-module-list' }, + { menu: 'Logs', component: 'cd-logs' }, + { menu: 'Monitoring', component: 'cd-prometheus-tabs' } + ] + }, + { menu: 'Pools', component: 'cd-pool-list' }, + { + menu: 'Block', + submenus: [ + { menu: 'Images', component: 'cd-error' }, + { menu: 'Mirroring', component: 'cd-mirroring' }, + { menu: 'iSCSI', component: 'cd-iscsi' } + ] + }, + { menu: 'File Systems', component: 'cd-cephfs-list' } + ]; + + getVerticalMenu() { + return cy.get('nav[id=sidebar]'); + } + + getMenuToggler() { + return cy.get('[aria-label="toggle sidebar visibility"]'); + } + + checkNavigations(navs: any) { + // The nfs-ganesha, RGW, and block/rbd status requests are mocked to ensure that this method runs in time + cy.intercept('/ui-api/nfs-ganesha/status', { fixture: 'nfs-ganesha-status.json' }); + cy.intercept('/ui-api/rgw/status', { fixture: 'rgw-status.json' }); + cy.intercept('/ui-api/block/rbd/status', { fixture: 'block-rbd-status.json' }); + + navs.forEach((nav: any) => { + cy.contains('.simplebar-content li.nav-item a', nav.menu).click(); + if (nav.submenus) { + this.checkNavigations(nav.submenus); + } else { + cy.get(nav.component).should('exist'); + } + }); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.e2e-spec.ts new file mode 100644 index 000000000..2ee73a706 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.e2e-spec.ts @@ -0,0 +1,59 @@ +import { PoolPageHelper } from '../pools/pools.po'; +import { NotificationSidebarPageHelper } from './notification.po'; + +describe('Notification page', () => { + const notification = new NotificationSidebarPageHelper(); + const pools = new PoolPageHelper(); + const poolName = 'e2e_notification_pool'; + + before(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + pools.navigateTo('create'); + pools.create(poolName, 8); + pools.edit_pool_pg(poolName, 4, false); + }); + + after(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + pools.navigateTo(); + pools.delete(poolName); + }); + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + pools.navigateTo(); + }); + + it('should open notification sidebar', () => { + notification.getSidebar().should('not.be.visible'); + notification.open(); + notification.getSidebar().should('be.visible'); + }); + + it('should display a running task', () => { + notification.getToast().should('not.exist'); + + // Check that running task is shown. + notification.open(); + notification.getTasks().contains(poolName).should('exist'); + + // Delete pool after task is complete (otherwise we get an error). + notification.getTasks().contains(poolName, { timeout: 300000 }).should('not.exist'); + }); + + it('should have notifications', () => { + notification.open(); + notification.getNotifications().should('have.length.gt', 0); + }); + + it('should clear notifications', () => { + notification.getToast().should('not.exist'); + notification.open(); + notification.getNotifications().should('have.length.gt', 0); + notification.getClearNotficationsBtn().should('be.visible'); + notification.clearNotifications(); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.po.ts new file mode 100644 index 000000000..12c424e35 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/notification.po.ts @@ -0,0 +1,45 @@ +import { PageHelper } from '../page-helper.po'; + +export class NotificationSidebarPageHelper extends PageHelper { + getNotificatinoIcon() { + return cy.get('cd-notifications a'); + } + + getSidebar() { + return cy.get('cd-notifications-sidebar'); + } + + getTasks() { + return this.getSidebar().find('.card.tc_task'); + } + + getNotifications() { + return this.getSidebar().find('.card.tc_notification'); + } + + getClearNotficationsBtn() { + return this.getSidebar().find('button.btn-block'); + } + + getCloseBtn() { + return this.getSidebar().find('button.close'); + } + + open() { + this.getNotificatinoIcon().click(); + this.getSidebar().should('be.visible'); + } + + clearNotifications() { + // It can happen that although notifications are cleared, by the time we check the notifications + // amount, another notification can appear, so we check it more than once (if needed). + this.getClearNotficationsBtn().click(); + this.getNotifications() + .should('have.length.gte', 0) + .then(($elems) => { + if ($elems.length > 0) { + this.clearNotifications(); + } + }); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.e2e-spec.ts new file mode 100644 index 000000000..c3f325dbb --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.e2e-spec.ts @@ -0,0 +1,37 @@ +import { RoleMgmtPageHelper } from './role-mgmt.po'; + +describe('Role Management page', () => { + const roleMgmt = new RoleMgmtPageHelper(); + const role_name = 'e2e_role_mgmt_role'; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + roleMgmt.navigateTo(); + }); + + describe('breadcrumb tests', () => { + it('should check breadcrumb on roles tab on user management page', () => { + roleMgmt.expectBreadcrumbText('Roles'); + }); + + it('should check breadcrumb on role creation page', () => { + roleMgmt.navigateTo('create'); + roleMgmt.expectBreadcrumbText('Create'); + }); + }); + + describe('role create, edit & delete test', () => { + it('should create a role', () => { + roleMgmt.create(role_name, 'An interesting description'); + }); + + it('should edit a role', () => { + roleMgmt.edit(role_name, 'A far more interesting description'); + }); + + it('should delete a role', () => { + roleMgmt.delete(role_name); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.po.ts new file mode 100644 index 000000000..1cc3630a4 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/role-mgmt.po.ts @@ -0,0 +1,40 @@ +import { PageHelper } from '../page-helper.po'; + +export class RoleMgmtPageHelper extends PageHelper { + pages = { + index: { url: '#/user-management/roles', id: 'cd-role-list' }, + create: { url: '#/user-management/roles/create', id: 'cd-role-form' } + }; + + create(name: string, description: string) { + this.navigateTo('create'); + // Waits for data to load + cy.contains('grafana'); + + // fill in fields + cy.get('#name').type(name); + cy.get('#description').type(description); + + // Click the create button and wait for role to be made + cy.get('[data-cy=submitBtn]').click(); + cy.get('.breadcrumb-item.active').should('not.have.text', 'Create'); + + this.getFirstTableCell(name).should('exist'); + } + + edit(name: string, description: string) { + this.navigateEdit(name); + // Waits for data to load + cy.contains('grafana'); + + // fill in fields with new values + cy.get('#description').clear().type(description); + + // Click the edit button and check new values are present in table + cy.get('[data-cy=submitBtn]').click(); + cy.get('.breadcrumb-item.active').should('not.have.text', 'Edit'); + + this.getFirstTableCell(name).should('exist'); + this.getFirstTableCell(description).should('exist'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.e2e-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.e2e-spec.ts new file mode 100644 index 000000000..92dc77212 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.e2e-spec.ts @@ -0,0 +1,37 @@ +import { UserMgmtPageHelper } from './user-mgmt.po'; + +describe('User Management page', () => { + const userMgmt = new UserMgmtPageHelper(); + const user_name = 'e2e_user_mgmt_user'; + + beforeEach(() => { + cy.login(); + Cypress.Cookies.preserveOnce('token'); + userMgmt.navigateTo(); + }); + + describe('breadcrumb tests', () => { + it('should check breadcrumb on users tab of user management page', () => { + userMgmt.expectBreadcrumbText('Users'); + }); + + it('should check breadcrumb on user creation page', () => { + userMgmt.navigateTo('create'); + userMgmt.expectBreadcrumbText('Create'); + }); + }); + + describe('user create, edit & delete test', () => { + it('should create a user', () => { + userMgmt.create(user_name, 'cool_password', 'Jeff', 'realemail@realwebsite.com'); + }); + + it('should edit a user', () => { + userMgmt.edit(user_name, 'cool_password_number_2', 'Geoff', 'w@m'); + }); + + it('should delete a user', () => { + userMgmt.delete(user_name); + }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.po.ts new file mode 100644 index 000000000..fb2b79129 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/ui/user-mgmt.po.ts @@ -0,0 +1,39 @@ +import { PageHelper } from '../page-helper.po'; + +export class UserMgmtPageHelper extends PageHelper { + pages = { + index: { url: '#/user-management/users', id: 'cd-user-list' }, + create: { url: '#/user-management/users/create', id: 'cd-user-form' } + }; + + create(username: string, password: string, name: string, email: string) { + this.navigateTo('create'); + + // fill in fields + cy.get('#username').type(username); + cy.get('#password').type(password); + cy.get('#confirmpassword').type(password); + cy.get('#name').type(name); + cy.get('#email').type(email); + + // Click the create button and wait for user to be made + cy.get('[data-cy=submitBtn]').click(); + this.getFirstTableCell(username).should('exist'); + } + + edit(username: string, password: string, name: string, email: string) { + this.navigateEdit(username); + + // fill in fields with new values + cy.get('#password').clear().type(password); + cy.get('#confirmpassword').clear().type(password); + cy.get('#name').clear().type(name); + cy.get('#email').clear().type(email); + + // Click the edit button and check new values are present in table + const editButton = cy.get('[data-cy=submitBtn]'); + editButton.click(); + this.getFirstTableCell(email).should('exist'); + this.getFirstTableCell(name).should('exist'); + } +} diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/dashboard.vrt-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/dashboard.vrt-spec.ts new file mode 100644 index 000000000..b83d16d3d --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/dashboard.vrt-spec.ts @@ -0,0 +1,22 @@ +import { LoginPageHelper } from '../ui/login.po'; + +describe('Dashboard Landing Page', () => { + const login = new LoginPageHelper(); + + beforeEach(() => { + cy.eyesOpen({ + testName: 'Dashboard Component' + }); + }); + + afterEach(() => { + cy.eyesClose(); + }); + + it('should take screenshot of dashboard landing page', () => { + login.navigateTo(); + login.doLogin(); + cy.get('.card-text').should('be.visible'); + cy.eyesCheckWindow({ tag: 'Dashboard landing page', ignore: { selector: '.card-text' } }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/login.vrt-spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/login.vrt-spec.ts new file mode 100644 index 000000000..ea74f1d0f --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/integration/visualTests/login.vrt-spec.ts @@ -0,0 +1,19 @@ +describe('Login Page', () => { + beforeEach(() => { + cy.visit('#/login'); + cy.eyesOpen({ + appName: 'Ceph', + testName: 'Login Component Check' + }); + }); + + afterEach(() => { + cy.eyesClose(); + }); + + it('types login credentials and takes screenshot', () => { + cy.get('[name=username]').type('admin'); + cy.get('#password').type('admin'); + cy.eyesCheckWindow({ tag: 'Login Screen with credentials typed' }); + }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/plugins/index.js b/src/pybind/mgr/dashboard/frontend/cypress/plugins/index.js new file mode 100644 index 000000000..d9294002b --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/plugins/index.js @@ -0,0 +1,26 @@ + +const browserify = require('@cypress/browserify-preprocessor'); +const cucumber = require('cypress-cucumber-preprocessor').default; +module.exports = (on, _config) => { + const options = { + ...browserify.defaultOptions, + typescript: require.resolve("typescript"), + }; + + on('file:preprocessor', cucumber(options)); + on('before:browser:launch', (browser, launchOptions) => { + if (browser.name === 'chrome' && browser.isHeadless) { + launchOptions.args.push('--disable-gpu'); + return launchOptions; + } + }); + + on('task', { + log({ message, optional }) { + optional ? console.log(message, optional) : console.log(message); + return null; + }, + }); +}; + +require('@applitools/eyes-cypress')(module); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/support/commands.ts b/src/pybind/mgr/dashboard/frontend/cypress/support/commands.ts new file mode 100644 index 000000000..6ff17f9d6 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/support/commands.ts @@ -0,0 +1,59 @@ +declare global { + namespace Cypress { + interface Chainable { + login(): void; + logToConsole(message: string, optional?: any): void; + text(): Chainable; + } + } +} +// Disabling tslint rule since cypress-cucumber has +// issues with absolute import paths. +// This can be removed when +// https://github.com/cypress-io/cypress-browserify-preprocessor/issues/53 +// is fixed. +/* tslint:disable*/ +import { CdHelperClass } from '../../src/app/shared/classes/cd-helper.class'; +import { Permissions } from '../../src/app/shared/models/permissions'; +/* tslint:enable*/ +let auth: any; + +const fillAuth = () => { + window.localStorage.setItem('dashboard_username', auth.username); + window.localStorage.setItem('dashboard_permissions', auth.permissions); + window.localStorage.setItem('user_pwd_expiration_date', auth.pwdExpirationDate); + window.localStorage.setItem('user_pwd_update_required', auth.pwdUpdateRequired); + window.localStorage.setItem('sso', auth.sso); +}; + +Cypress.Commands.add('login', () => { + const username = Cypress.env('LOGIN_USER') || 'admin'; + const password = Cypress.env('LOGIN_PWD') || 'admin'; + + if (auth === undefined) { + cy.request({ + method: 'POST', + url: 'api/auth', + headers: { Accept: CdHelperClass.cdVersionHeader('1', '0') }, + body: { username: username, password: password } + }).then((resp) => { + auth = resp.body; + auth.permissions = JSON.stringify(new Permissions(auth.permissions)); + auth.pwdExpirationDate = String(auth.pwdExpirationDate); + auth.pwdUpdateRequired = String(auth.pwdUpdateRequired); + auth.sso = String(auth.sso); + fillAuth(); + }); + } else { + fillAuth(); + } +}); + +// @ts-ignore +Cypress.Commands.add('text', { prevSubject: true }, (subject: any) => { + return subject.text(); +}); + +Cypress.Commands.add('logToConsole', (message: string, optional?: any) => { + cy.task('log', { message: `(${new Date().toISOString()}) ${message}`, optional }); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/support/eyes-index.d.ts b/src/pybind/mgr/dashboard/frontend/cypress/support/eyes-index.d.ts new file mode 100644 index 000000000..59fc1eca4 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/support/eyes-index.d.ts @@ -0,0 +1 @@ +import '@applitools/eyes-cypress'; diff --git a/src/pybind/mgr/dashboard/frontend/cypress/support/index.ts b/src/pybind/mgr/dashboard/frontend/cypress/support/index.ts new file mode 100644 index 000000000..f2307131a --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/support/index.ts @@ -0,0 +1,11 @@ +import '@applitools/eyes-cypress/commands'; + +import './commands'; + +afterEach(() => { + cy.visit('#/403'); +}); + +Cypress.on('uncaught:exception', (err: Error) => { + return !err.message.includes('ResizeObserver loop limit exceeded'); +}); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/tsconfig.json b/src/pybind/mgr/dashboard/frontend/cypress/tsconfig.json new file mode 100644 index 000000000..90f899b57 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/cypress/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../tsconfig.json", + "exclude": [], + "include": [ + "**/*.ts", + "plugins/index.js" + ], + "compilerOptions": { + "sourceMap": false, + "types": [ + "cypress", + "@applitools/eyes-cypress" + ], + "target": "es6" + } +} diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/117.9781bbf8cc6a4aaa7e8e.js b/src/pybind/mgr/dashboard/frontend/dist/en-US/117.9781bbf8cc6a4aaa7e8e.js new file mode 100644 index 000000000..b02db3d52 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/117.9781bbf8cc6a4aaa7e8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[117],{73117:(Si,Ae,r)=>{r.r(Ae),r.d(Ae,{PoolModule:()=>ze,RoutedPoolModule:()=>hi});var C=r(12057),a=r(24751),Oe=r(6283),E=r(38549),M=r(79512),O_=r(44466),d_=r(70483),u_=r(370),f_=r(23815),g=r.n(f_),P_=r(80226),E_=r(26504),ue=r(80842);class S{constructor(){this.nodes=[],this.idTree={},this.allDevices=[],this.buckets=[],this.failureDomains={},this.failureDomainKeys=[],this.devices=[],this.deviceCount=0}static searchFailureDomains(i,_){return this.getFailureDomains(this.search(i,_))}static search(i,_){const[o,n]=_.split("~"),s=i.find(c=>["name","id","type"].some(d=>c[d]===o));return s?(i=this.getSubNodes(s,this.createIdTreeFromNodes(i)),n&&(i=this.filterNodesByDeviceType(i,n)),i):[]}static createIdTreeFromNodes(i){const _={};return i.forEach(o=>{_[o.id]=o}),_}static getSubNodes(i,_){let o=[i];return i.children&&i.children.forEach(n=>{o=o.concat(this.getSubNodes(_[n],_))}),o}static filterNodesByDeviceType(i,_){let n,o=i.filter(c=>c.device_class&&c.device_class!==_).map(c=>c.id),s=o;do{n=!1,i=i.filter(d=>!o.includes(d.id));const c=[];i.forEach(d=>{d.children&&d.children.every(f=>o.includes(f))&&(c.push(d.id),n=!0)}),n&&(o=c,s=s.concat(c))}while(n);return(i=g().cloneDeep(i)).map(c=>(c.children&&(c.children=c.children.filter(d=>!s.includes(d))),c))}static getFailureDomains(i){const _={};return i.forEach(o=>{const n=o.type;_[n]||(_[n]=[]),_[n].push(o)}),_}initCrushNodeSelection(i,_,o,n){this.nodes=i,this.idTree=S.createIdTreeFromNodes(i),i.forEach(s=>{this.idTree[s.id]=s}),this.buckets=g().sortBy(i.filter(s=>s.children),"name"),this.controls={root:_,failure:o,device:n},this.preSelectRoot(),this.controls.root.valueChanges.subscribe(()=>this.onRootChange()),this.controls.failure.valueChanges.subscribe(()=>this.onFailureDomainChange()),this.controls.device.valueChanges.subscribe(()=>this.onDeviceChange())}preSelectRoot(){const i=this.nodes.find(_=>"root"===_.type);this.silentSet(this.controls.root,i),this.onRootChange()}silentSet(i,_){i.setValue(_,{emitEvent:!1})}onRootChange(){const i=S.getSubNodes(this.controls.root.value,this.idTree),_=S.getFailureDomains(i);Object.keys(_).forEach(o=>{_[o].length<=1&&delete _[o]}),this.failureDomains=_,this.failureDomainKeys=Object.keys(_).sort(),this.updateFailureDomain()}updateFailureDomain(){let i=this.getIncludedCustomValue(this.controls.failure,Object.keys(this.failureDomains));""===i&&(i=this.setMostCommonDomain(this.controls.failure)),this.updateDevices(i)}getIncludedCustomValue(i,_){return i.dirty&&_.includes(i.value)?i.value:""}setMostCommonDomain(i){let _={n:0,type:""};return Object.keys(this.failureDomains).forEach(o=>{const n=this.failureDomains[o].length;_.nS.getSubNodes(n,this.idTree)));this.allDevices=_.filter(n=>n.device_class).map(n=>n.device_class),this.devices=g().uniq(this.allDevices).sort();const o=1===this.devices.length?this.devices[0]:this.getIncludedCustomValue(this.controls.device,this.devices);this.silentSet(this.controls.device,o),this.onDeviceChange(o)}onDeviceChange(i=this.controls.device.value){this.deviceCount=""===i?this.allDevices.length:this.allDevices.filter(_=>_===i).length}}var Fe=r(30982),g_=r(14745),v=r(65862),p_=r(93614),Ne=r(95463),P=r(77205),m_=r(30633),I=r(76111),R_=r(47557),C_=r(28211),de=r(32337),e=r(74788),be=r(62862),ve=r(83608),Ie=r(60312),fe=r(41582),Pe=r(56310),Ee=r(87925),ge=r(94276),pe=r(82945),me=r(18372),Re=r(30839),Ce=r(10545);function M_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,31),e.qZA())}function T_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,32),e.qZA())}function h_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,33),e.qZA())}function S_(t,i){1&t&&(e.TgZ(0,"option",26),e.SDv(1,34),e.qZA())}function L_(t,i){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}function A_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,36),e.qZA())}function F_(t,i){1&t&&(e.TgZ(0,"option",26),e.SDv(1,37),e.qZA())}function N_(t,i){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw();e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function b_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,38),e.qZA())}function v_(t,i){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}let I_=(()=>{class t extends S{constructor(_,o,n,s,c){super(),this.formBuilder=_,this.activeModal=o,this.taskWrapper=n,this.crushRuleService=s,this.actionLabels=c,this.submitAction=new e.vpe,this.tooltips=this.crushRuleService.formTooltips,this.action=this.actionLabels.CREATE,this.resource="Crush Rule",this.createForm()}createForm(){this.form=this.formBuilder.group({name:["",[a.kI.required,a.kI.pattern("[A-Za-z0-9_-]+"),P.h.custom("uniqueName",_=>this.names&&-1!==this.names.indexOf(_))]],root:null,failure_domain:"",device_class:""})}ngOnInit(){this.crushRuleService.getInfo().subscribe(({names:_,nodes:o})=>{this.initCrushNodeSelection(o,this.form.get("root"),this.form.get("failure_domain"),this.form.get("device_class")),this.names=_})}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _=g().cloneDeep(this.form.value);_.root=_.root.name,""===_.device_class&&delete _.device_class,this.taskWrapper.wrapTaskAroundCall({task:new I.R("crushRule/create",_),call:this.crushRuleService.create(_)}).subscribe({error:()=>{this.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.submitAction.emit(_)}})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(be.O),e.Y36(E.Kz),e.Y36(de.P),e.Y36(ve.H),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-crush-rule-form-modal"]],outputs:{submitAction:"submitAction"},features:[e.qOj],decls:55,vars:27,consts:function(){let i,_,o,n,s,c,d,f,p,m,T,h,R;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Root",n="Failure domain type",s="Device class",c="Let Ceph decide",d="This field is required!",f="The name can only consist of alphanumeric characters, dashes and underscores.",p="The chosen erasure code profile name is already in use.",m="Loading...",T="This field is required!",h="Loading...",R="This field is required!",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label"],_,[1,"required"],[1,"cd-col-form-input"],["type","text","id","name","name","name","placeholder","Name...","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","root",1,"cd-col-form-label"],o,[3,"html"],["id","root","name","root","formControlName","root",1,"form-control"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["for","failure_domain",1,"cd-col-form-label"],n,["id","failure_domain","name","failure_domain","formControlName","failure_domain",1,"form-control"],["for","device_class",1,"cd-col-form-label"],s,["id","device_class","name","device_class","formControlName","device_class",1,"form-control"],["ngValue",""],c,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],d,f,p,m,[3,"ngValue"],T,h,R]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5),e.TgZ(8,"div",6),e.TgZ(9,"div",7),e.TgZ(10,"label",8),e.ynx(11),e.SDv(12,9),e.BQk(),e._UZ(13,"span",10),e.qZA(),e.TgZ(14,"div",11),e._UZ(15,"input",12),e.YNc(16,M_,2,0,"span",13),e.YNc(17,T_,2,0,"span",13),e.YNc(18,h_,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(19,"div",7),e.TgZ(20,"label",14),e.ynx(21),e.SDv(22,15),e.BQk(),e._UZ(23,"cd-helper",16),e._UZ(24,"span",10),e.qZA(),e.TgZ(25,"div",11),e.TgZ(26,"select",17),e.YNc(27,S_,2,0,"option",18),e.YNc(28,L_,2,2,"option",19),e.qZA(),e.YNc(29,A_,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(30,"div",7),e.TgZ(31,"label",20),e.ynx(32),e.SDv(33,21),e.BQk(),e._UZ(34,"cd-helper",16),e._UZ(35,"span",10),e.qZA(),e.TgZ(36,"div",11),e.TgZ(37,"select",22),e.YNc(38,F_,2,0,"option",18),e.YNc(39,N_,2,3,"option",19),e.qZA(),e.YNc(40,b_,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(41,"div",7),e.TgZ(42,"label",23),e.ynx(43),e.SDv(44,24),e.BQk(),e._UZ(45,"cd-helper",16),e.qZA(),e.TgZ(46,"div",11),e.TgZ(47,"select",25),e.TgZ(48,"option",26),e.SDv(49,27),e.qZA(),e.YNc(50,v_,2,2,"option",19),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.TgZ(51,"div",28),e.TgZ(52,"cd-form-button-panel",29),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(53,"titlecase"),e.ALo(54,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&_){const n=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,19,o.action))(e.lcZ(4,21,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(10),e.Q6J("ngIf",o.form.showError("name",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"pattern")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"uniqueName")),e.xp6(5),e.Q6J("html",o.tooltips.root),e.xp6(4),e.Q6J("ngIf",!o.buckets),e.xp6(1),e.Q6J("ngForOf",o.buckets),e.xp6(1),e.Q6J("ngIf",o.form.showError("root",n,"required")),e.xp6(5),e.Q6J("html",o.tooltips.failure_domain),e.xp6(4),e.Q6J("ngIf",!o.failureDomains),e.xp6(1),e.Q6J("ngForOf",o.failureDomainKeys),e.xp6(1),e.Q6J("ngIf",o.form.showError("failure_domain",n,"required")),e.xp6(5),e.Q6J("html",o.tooltips.device_class),e.xp6(5),e.Q6J("ngForOf",o.devices),e.xp6(2),e.Q6J("form",o.form)("submitText",e.lcZ(53,23,o.action)+" "+e.lcZ(54,25,o.resource))}},directives:[Ie.z,a._Y,a.JL,fe.V,a.sg,Pe.P,Ee.o,a.Fj,ge.b,a.JJ,a.u,pe.U,C.O5,me.S,a.EJ,C.sg,a.YN,a.Kr,Re.p],pipes:[C.rS,Ce.m],styles:[""]}),t})();class $_{}var D_=r(58497);let Me=(()=>{class t{constructor(_){this.http=_,this.apiPath="api/erasure_code_profile",this.formTooltips={k:"Each object is split in data-chunks parts, each stored on a different OSD.",m:"Compute coding chunks for each object and store them on different OSDs.\n The number of coding chunks is also the number of OSDs that can be down without losing data.",plugins:{jerasure:{description:"The jerasure plugin is the most generic and flexible plugin,\n it is also the default for Ceph erasure coded pools.",technique:"The more flexible technique is reed_sol_van : it is enough to set k\n and m. The cauchy_good technique can be faster but you need to chose the packetsize\n carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n in the sense that they can only be configured with m=2.",packetSize:"The encoding will be done on packets of bytes size at a time.\n Choosing the right packet size is difficult.\n The jerasure documentation contains extensive information on this topic."},lrc:{description:"With the jerasure plugin, when an erasure coded object is stored on\n multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n from the eleven others to repair.\n\n The lrc erasure code plugin creates local parity chunks to be able to recover using\n less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n recovered with only four OSDs instead of eleven.",l:"Group the coding and data chunks into sets of size locality. For instance,\n for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n be recovered without reading chunks from another set.",crushLocality:"The type of the crush bucket in which each set of chunks defined\n by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n placed in a different rack. It is used to create a CRUSH rule step such as step choose\n rack. If it is not set, no such grouping is done."},isa:{description:"The isa plugin encapsulates the ISA library. It only runs on Intel processors.",technique:"The ISA plugin comes in two Reed Solomon forms.\n If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy."},shec:{description:"The shec plugin encapsulates the multiple SHEC library.\n It allows ceph to recover data more efficiently than Reed Solomon codes.",c:"The number of parity chunks each of which includes each data chunk in its\n calculation range. The number is used as a durability estimator. For instance, if c=2,\n 2 OSDs can be down without losing data."},clay:{description:"CLAY (short for coupled-layer) codes are erasure codes designed to\n bring about significant savings in terms of network bandwidth and disk IO when a failed\n node/OSD/rack is being repaired.",d:"Number of OSDs requested to send data during recovery of a single chunk.\n d needs to be chosen such that k+1 <= d <= k+m-1. The larger the d, the better\n the savings.",scalar_mds:"scalar_mds specifies the plugin that is used as a building block\n in the layered construction. It can be one of jerasure, isa, shec.",technique:"technique specifies the technique that will be picked\n within the 'scalar_mds' plugin specified. Supported techniques\n are 'reed_sol_van', 'reed_sol_r6_op', 'cauchy_orig',\n 'cauchy_good', 'liber8tion' for jerasure, 'reed_sol_van',\n 'cauchy' for isa and 'single', 'multiple' for shec."}},crushRoot:"The name of the crush bucket used for the first step of the CRUSH rule.\n For instance step take default.",crushFailureDomain:"Ensure that no two chunks are in a bucket with the same failure\n domain. For instance, if the failure domain is host no two chunks will be stored on the same\n host. It is used to create a CRUSH rule step such as step chooseleaf host.",crushDeviceClass:"Restrict placement to devices of a specific class\n (e.g., ssd or hdd), using the crush device class names in the CRUSH map.",directory:"Set the directory name from which the erasure code plugin is loaded."}}list(){return this.http.get(this.apiPath)}create(_){return this.http.post(this.apiPath,_,{observe:"response"})}delete(_){return this.http.delete(`${this.apiPath}/${_}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return t.\u0275fac=function(_){return new(_||t)(e.LFG(D_.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function Z_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,47),e.qZA())}function x_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,48),e.qZA())}function y_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,49),e.qZA())}function U_(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,50),e.qZA())}function q_(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}function H_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,52),e.qZA())}function G_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,53),e.qZA())}function z_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,54),e.qZA())}function X_(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,55),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.deviceCount),e.QtT(1)}}function w_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,56),e.qZA())}function Q_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,57),e.qZA())}function J_(t,i){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,58),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.lrcMultiK),e.QtT(1)}}function k_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,59),e.qZA())}function V_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,60),e.qZA())}function Y_(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,61),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.deviceCount),e.QtT(1)}}function B_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,65),e.qZA())}function j_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,66),e.qZA())}function K_(t,i){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",62),e.TgZ(2,"span",14),e.SDv(3,63),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",64),e.YNc(7,B_,2,0,"span",12),e.YNc(8,j_,2,0,"span",12),e.qZA(),e.qZA()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.shec.c),e.xp6(3),e.Q6J("ngIf",_.form.showError("c",o,"min")),e.xp6(1),e.Q6J("ngIf",_.form.showError("c",o,"cGreaterM"))}}function W_(t,i){1&t&&(e.TgZ(0,"span",39),e.SDv(1,75),e.qZA())}function eo(t,i){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,76),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.pQV(_.getDMin())(_.getDMax()),e.QtT(1)}}function _o(t,i){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,77),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.pQV(_.getDMax()),e.QtT(1)}}function oo(t,i){if(1&t&&(e.ynx(0),e.YNc(1,eo,2,2,"span",23),e.YNc(2,_o,2,1,"span",23),e.BQk()),2&t){const _=e.oxw(2);e.xp6(1),e.Q6J("ngIf",_.getDMin()<_.getDMax()),e.xp6(1),e.Q6J("ngIf",_.getDMin()===_.getDMax())}}function to(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,78),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.pQV(_.getDMin()),e.QtT(1)}}function io(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,79),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.pQV(_.getDMax()),e.QtT(1)}}function no(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",7),e.TgZ(1,"label",67),e.TgZ(2,"span",14),e.SDv(3,68),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e.TgZ(6,"div",69),e._UZ(7,"input",70),e.TgZ(8,"span",71),e.TgZ(9,"button",72),e.NdJ("click",function(){return e.CHM(_),e.oxw().toggleDCalc()}),e._UZ(10,"i",73),e.qZA(),e.qZA(),e.qZA(),e.YNc(11,W_,2,0,"span",23),e.YNc(12,oo,3,2,"ng-container",74),e.YNc(13,to,2,1,"span",12),e.YNc(14,io,2,1,"span",12),e.qZA(),e.qZA()}if(2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.clay.d),e.xp6(6),e.Q6J("ngClass",_.dCalc?_.icons.unlock:_.icons.lock),e.xp6(1),e.Q6J("ngIf",_.dCalc),e.xp6(1),e.Q6J("ngIf",!_.dCalc),e.xp6(1),e.Q6J("ngIf",_.form.showError("d",o,"dMin")),e.xp6(1),e.Q6J("ngIf",_.form.showError("d",o,"dMax"))}}function so(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,84),e.qZA())}function ao(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,85),e.qZA())}function lo(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,86),e.qZA())}function ro(t,i){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",80),e.TgZ(2,"span",14),e.SDv(3,81),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",82),e.YNc(7,so,2,0,"span",12),e.YNc(8,ao,2,0,"span",12),e.YNc(9,lo,2,0,"span",12),e.TgZ(10,"span",39),e.SDv(11,83),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.lrc.l),e.xp6(3),e.Q6J("ngIf",_.form.showError("l",o,"required")),e.xp6(1),e.Q6J("ngIf",_.form.showError("l",o,"min")),e.xp6(1),e.Q6J("ngIf",_.form.showError("l",o,"unequal")),e.xp6(2),e.pQV(_.lrcGroups),e.QtT(11)}}function co(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,87),e.qZA())}function Oo(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw();e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function uo(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,91),e.qZA())}function fo(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,92),e.qZA())}function Po(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw(2);e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function Eo(t,i){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",88),e.ynx(2),e.SDv(3,89),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e.TgZ(6,"select",90),e.YNc(7,uo,2,0,"option",18),e.YNc(8,fo,2,0,"option",18),e.YNc(9,Po,2,3,"option",19),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins.lrc.crushLocality),e.xp6(3),e.Q6J("ngIf",!_.failureDomains),e.xp6(1),e.Q6J("ngIf",_.failureDomainKeys.length>0),e.xp6(1),e.Q6J("ngForOf",_.failureDomainKeys)}}function go(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}const $e=function(t,i,_){return[t,i,_]};function po(t,i){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",93),e.ynx(2),e.SDv(3,94),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e.TgZ(6,"select",95),e.YNc(7,go,2,2,"option",19),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins.clay.scalar_mds),e.xp6(3),e.Q6J("ngForOf",e.kEZ(2,$e,_.PLUGIN.JERASURE,_.PLUGIN.ISA,_.PLUGIN.SHEC))}}function mo(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}function Ro(t,i){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",96),e.ynx(2),e.SDv(3,97),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e.TgZ(6,"select",98),e.YNc(7,mo,2,2,"option",19),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins[_.plugin].technique),e.xp6(3),e.Q6J("ngForOf",_.techniques)}}function Co(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,102),e.qZA())}function Mo(t,i){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",99),e.ynx(2),e.SDv(3,100),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",101),e.YNc(7,Co,2,0,"span",12),e.qZA(),e.qZA()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.jerasure.packetSize),e.xp6(3),e.Q6J("ngIf",_.form.showError("packetSize",o,"min"))}}function To(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,103),e.qZA())}function ho(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}function So(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}let Lo=(()=>{class t extends S{constructor(_,o,n,s,c){super(),this.formBuilder=_,this.activeModal=o,this.taskWrapper=n,this.ecpService=s,this.actionLabels=c,this.submitAction=new e.vpe,this.tooltips=this.ecpService.formTooltips,this.PLUGIN={LRC:"lrc",SHEC:"shec",CLAY:"clay",JERASURE:"jerasure",ISA:"isa"},this.plugin=this.PLUGIN.JERASURE,this.icons=v.P,this.action=this.actionLabels.CREATE,this.resource="EC Profile",this.createForm(),this.setJerasureDefaults()}createForm(){this.form=this.formBuilder.group({name:[null,[a.kI.required,a.kI.pattern("[A-Za-z0-9_-]+"),P.h.custom("uniqueName",_=>this.names&&-1!==this.names.indexOf(_))]],plugin:[this.PLUGIN.JERASURE,[a.kI.required]],k:[4,[a.kI.required,P.h.custom("max",()=>this.baseValueValidation(!0)),P.h.custom("unequal",_=>this.lrcDataValidation(_)),P.h.custom("kLowerM",_=>this.shecDataValidation(_))]],m:[2,[a.kI.required,P.h.custom("max",()=>this.baseValueValidation())]],crushFailureDomain:"",crushRoot:null,crushDeviceClass:"",directory:"",technique:"reed_sol_van",packetSize:[2048],l:[3,[a.kI.required,P.h.custom("unequal",_=>this.lrcLocalityValidation(_))]],crushLocality:"",c:[2,[a.kI.required,P.h.custom("cGreaterM",_=>this.shecDurabilityValidation(_))]],d:[5,[a.kI.required,P.h.custom("dMin",_=>this.dMinValidation(_)),P.h.custom("dMax",_=>this.dMaxValidation(_))]],scalar_mds:[this.PLUGIN.JERASURE,[a.kI.required]]}),this.toggleDCalc(),this.form.get("k").valueChanges.subscribe(()=>this.updateValidityOnChange(["m","l","d"])),this.form.get("m").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","l","c","d"])),this.form.get("l").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","m"])),this.form.get("plugin").valueChanges.subscribe(_=>this.onPluginChange(_)),this.form.get("scalar_mds").valueChanges.subscribe(()=>this.setClayDefaultsForScalar())}baseValueValidation(_=!1){return this.validValidation(()=>this.getKMSum()>this.deviceCount&&this.form.getValue("k")>this.form.getValue("m")===_)}validValidation(_,o){return!((!this.form||o)&&this.plugin!==o)&&_()}getKMSum(){return this.form.getValue("k")+this.form.getValue("m")}lrcDataValidation(_){return this.validValidation(()=>{const o=this.form.getValue("m"),n=this.form.getValue("l"),s=_+o;return this.lrcMultiK=_/(s/n),_%(s/n)!=0},"lrc")}shecDataValidation(_){return this.validValidation(()=>this.form.getValue("m")>_,"shec")}lrcLocalityValidation(_){return this.validValidation(()=>{const o=this.getKMSum();return this.lrcGroups=_>0?o/_:0,_>0&&o%_!=0},"lrc")}shecDurabilityValidation(_){return this.validValidation(()=>{const o=this.form.getValue("m");return _>o},"shec")}dMinValidation(_){return this.validValidation(()=>this.getDMin()>_,"clay")}getDMin(){return this.form.getValue("k")+1}dMaxValidation(_){return this.validValidation(()=>_>this.getDMax(),"clay")}getDMax(){const _=this.form.getValue("m");return this.form.getValue("k")+_-1}toggleDCalc(){this.dCalc=!this.dCalc,this.form.get("d")[this.dCalc?"disable":"enable"](),this.calculateD()}calculateD(){this.plugin!==this.PLUGIN.CLAY||!this.dCalc||this.form.silentSet("d",this.getDMax())}updateValidityOnChange(_){_.forEach(o=>{"d"===o&&this.calculateD(),this.form.get(o).updateValueAndValidity({emitEvent:!1})})}onPluginChange(_){this.plugin=_,_===this.PLUGIN.JERASURE?this.setJerasureDefaults():_===this.PLUGIN.LRC?this.setLrcDefaults():_===this.PLUGIN.ISA?this.setIsaDefaults():_===this.PLUGIN.SHEC?this.setShecDefaults():_===this.PLUGIN.CLAY&&this.setClayDefaults(),this.updateValidityOnChange(["m"])}setJerasureDefaults(){this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liberation","blaum_roth","liber8tion"],this.setDefaults({k:4,m:2,technique:"reed_sol_van"})}setLrcDefaults(){this.setDefaults({k:4,m:2,l:3})}setIsaDefaults(){this.techniques=["reed_sol_van","cauchy"],this.setDefaults({k:7,m:3,technique:"reed_sol_van"})}setShecDefaults(){this.setDefaults({k:4,m:3,c:2})}setClayDefaults(){this.setDefaults({k:4,m:2,scalar_mds:this.PLUGIN.JERASURE}),this.setClayDefaultsForScalar()}setClayDefaultsForScalar(){const _=this.form.getValue("scalar_mds");let o="reed_sol_van";_===this.PLUGIN.JERASURE?this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liber8tion"]:_===this.PLUGIN.ISA?this.techniques=["reed_sol_van","cauchy"]:(o="single",this.techniques=["single","multiple"]),this.setDefaults({technique:o})}setDefaults(_){Object.keys(_).forEach(o=>{const n=this.form.get(o),s=n.value;n.pristine||"technique"===o&&!this.techniques.includes(s)||"k"===o&&[4,7].includes(s)||"m"===o&&[2,3].includes(s)?n.setValue(_[o]):n.updateValueAndValidity()})}ngOnInit(){this.ecpService.getInfo().subscribe(({plugins:_,names:o,directory:n,nodes:s})=>{this.initCrushNodeSelection(s,this.form.get("crushRoot"),this.form.get("crushFailureDomain"),this.form.get("crushDeviceClass")),this.plugins=_,this.names=o,this.form.silentSet("directory",n),this.preValidateNumericInputFields()})}preValidateNumericInputFields(){const _=["k","m","l","c","d"].map(o=>this.form.get(o));_.forEach(o=>{o.markAsTouched(),o.markAsDirty()}),_[1].updateValueAndValidity()}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _=this.createJson();this.taskWrapper.wrapTaskAroundCall({task:new I.R("ecp/create",{name:_.name}),call:this.ecpService.create(_)}).subscribe({error:()=>{this.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.submitAction.emit(_)}})}createJson(){const _={technique:[this.PLUGIN.ISA,this.PLUGIN.JERASURE,this.PLUGIN.CLAY],packetSize:[this.PLUGIN.JERASURE],l:[this.PLUGIN.LRC],crushLocality:[this.PLUGIN.LRC],c:[this.PLUGIN.SHEC],d:[this.PLUGIN.CLAY],scalar_mds:[this.PLUGIN.CLAY]},o=new $_,n=this.form.getValue("plugin");return Object.keys(this.form.controls).filter(s=>{const c=_[s],d=this.form.getValue(s);return(c&&c.includes(n)||!c)&&d&&""!==d}).forEach(s=>{this.extendJson(s,o)}),o}extendJson(_,o){const s=this.form.getValue(_);o[{crushFailureDomain:"crush-failure-domain",crushRoot:"crush-root",crushDeviceClass:"crush-device-class",packetSize:"packetsize",crushLocality:"crush-locality"}[_]||_]="crushRoot"===_?s.name:s}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(be.O),e.Y36(E.Kz),e.Y36(de.P),e.Y36(Me),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-erasure-code-profile-form-modal"]],outputs:{submitAction:"submitAction"},features:[e.qOj],decls:98,vars:53,consts:function(){let i,_,o,n,s,c,d,f,p,m,T,h,R,u,A,$,D,Z,x,y,U,q,H,G,z,X,w,Q,J,k,V,Y,B,j,K,N,W,ee,_e,oe,te,ie,ne,se,ae,le,re,ce,b;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Plugin",n="Data chunks (k)",s="Coding chunks (m)",c="Crush failure domain",d="Crush root",f="Crush device class",p="Let Ceph decide",m="Available OSDs: " + "\ufffd0\ufffd" + "",T="Directory",h="This field is required!",R="The name can only consist of alphanumeric characters, dashes and underscores.",u="The chosen erasure code profile name is already in use.",A="Loading...",$="This field is required!",D="This field is required!",Z="Must be equal to or greater than 2.",x="Chunks (k+m) have exceeded the available OSDs of " + "\ufffd0\ufffd" + ".",y="For an equal distribution k has to be a multiple of (k+m)/l.",U="K has to be equal to or greater than m in order to recover data correctly through c.",q="Distribution factor: " + "\ufffd0\ufffd" + "",H="This field is required!",G="Must be equal to or greater than 1.",z="Chunks (k+m) have exceeded the available OSDs of " + "\ufffd0\ufffd" + ".",X="Durability estimator (c)",w="Must be equal to or greater than 1.",Q="C has to be equal to or lower than m as m defines the amount of chunks that can be used.",J="Helper chunks (d)",k="Set d manually or use the plugin's default calculation that maximizes d.",V="D is automatically updated on k and m changes",Y="D can be set from " + "\ufffd0\ufffd" + " to " + "\ufffd1\ufffd" + "",B="D can only be set to " + "\ufffd0\ufffd" + "",j="D has to be greater than k (" + "\ufffd0\ufffd" + ").",K="D has to be lower than k + m (" + "\ufffd0\ufffd" + ").",N="Locality (l)",W="Locality groups: " + "\ufffd0\ufffd" + "",ee="This field is required!",_e="Must be equal to or greater than 1.",oe="Can't split up chunks (k+m) correctly with the current locality.",te="Loading...",ie="Crush Locality",ne="Loading...",se="None",ae="Scalar mds",le="Technique",re="Packetsize",ce="Must be equal to or greater than 1.",b="Loading...",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["type","text","id","name","name","name","placeholder","Name...","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","plugin",1,"cd-col-form-label"],[1,"required"],o,[3,"html"],["id","plugin","name","plugin","formControlName","plugin",1,"form-control"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["for","k",1,"cd-col-form-label"],n,["type","number","id","k","name","k","ng-model","$ctrl.erasureCodeProfile.k","placeholder","Data chunks...","formControlName","k","min","2",1,"form-control"],["class","form-text text-muted",4,"ngIf"],["for","m",1,"cd-col-form-label"],s,["type","number","id","m","name","m","placeholder","Coding chunks...","formControlName","m","min","1",1,"form-control"],["class","form-group row",4,"ngIf"],["for","crushFailureDomain",1,"cd-col-form-label"],c,["id","crushFailureDomain","name","crushFailureDomain","formControlName","crushFailureDomain",1,"form-control"],["for","crushRoot",1,"cd-col-form-label"],d,["id","crushRoot","name","crushRoot","formControlName","crushRoot",1,"form-control"],["for","crushDeviceClass",1,"cd-col-form-label"],f,["id","crushDeviceClass","name","crushDeviceClass","formControlName","crushDeviceClass",1,"form-control"],["ngValue",""],p,[1,"form-text","text-muted"],m,["for","directory",1,"cd-col-form-label"],T,["type","text","id","directory","name","directory","placeholder","Path...","formControlName","directory",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],h,R,u,A,[3,"ngValue"],$,D,Z,x,y,U,q,H,G,z,["for","c",1,"cd-col-form-label"],X,["type","number","id","c","name","c","placeholder","Coding chunks...","formControlName","c","min","1",1,"form-control"],w,Q,["for","d",1,"cd-col-form-label"],J,[1,"input-group"],["type","number","id","d","name","d","placeholder","Helper chunks...","formControlName","d",1,"form-control"],[1,"input-group-append"],["id","d-calc-btn","ngbTooltip",k,"type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],[4,"ngIf"],V,Y,B,j,K,["for","l",1,"cd-col-form-label"],N,["type","number","id","l","name","l","placeholder","Coding chunks...","formControlName","l","min","1",1,"form-control"],W,ee,_e,oe,te,["for","crushLocality",1,"cd-col-form-label"],ie,["id","crushLocality","name","crushLocality","formControlName","crushLocality",1,"form-control"],ne,se,["for","scalar_mds",1,"cd-col-form-label"],ae,["id","scalar_mds","name","scalar_mds","formControlName","scalar_mds",1,"form-control"],["for","technique",1,"cd-col-form-label"],le,["id","technique","name","technique","formControlName","technique",1,"form-control"],["for","packetSize",1,"cd-col-form-label"],re,["type","number","id","packetSize","name","packetSize","placeholder","Packetsize...","formControlName","packetSize","min","1",1,"form-control"],ce,b]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5),e.TgZ(8,"div",6),e.TgZ(9,"div",7),e.TgZ(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,Z_,2,0,"span",12),e.YNc(15,x_,2,0,"span",12),e.YNc(16,y_,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(17,"div",7),e.TgZ(18,"label",13),e.TgZ(19,"span",14),e.SDv(20,15),e.qZA(),e._UZ(21,"cd-helper",16),e.qZA(),e.TgZ(22,"div",10),e.TgZ(23,"select",17),e.YNc(24,U_,2,0,"option",18),e.YNc(25,q_,2,2,"option",19),e.qZA(),e.YNc(26,H_,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(27,"div",7),e.TgZ(28,"label",20),e.TgZ(29,"span",14),e.SDv(30,21),e.qZA(),e._UZ(31,"cd-helper",16),e.qZA(),e.TgZ(32,"div",10),e._UZ(33,"input",22),e.YNc(34,G_,2,0,"span",12),e.YNc(35,z_,2,0,"span",12),e.YNc(36,X_,2,1,"span",12),e.YNc(37,w_,2,0,"span",12),e.YNc(38,Q_,2,0,"span",12),e.YNc(39,J_,2,1,"span",23),e.qZA(),e.qZA(),e.TgZ(40,"div",7),e.TgZ(41,"label",24),e.TgZ(42,"span",14),e.SDv(43,25),e.qZA(),e._UZ(44,"cd-helper",16),e.qZA(),e.TgZ(45,"div",10),e._UZ(46,"input",26),e.YNc(47,k_,2,0,"span",12),e.YNc(48,V_,2,0,"span",12),e.YNc(49,Y_,2,1,"span",12),e.qZA(),e.qZA(),e.YNc(50,K_,9,3,"div",27),e.YNc(51,no,15,6,"div",27),e.YNc(52,ro,12,5,"div",27),e.TgZ(53,"div",7),e.TgZ(54,"label",28),e.ynx(55),e.SDv(56,29),e.BQk(),e._UZ(57,"cd-helper",16),e.qZA(),e.TgZ(58,"div",10),e.TgZ(59,"select",30),e.YNc(60,co,2,0,"option",18),e.YNc(61,Oo,2,3,"option",19),e.qZA(),e.qZA(),e.qZA(),e.YNc(62,Eo,10,4,"div",27),e.YNc(63,po,8,6,"div",27),e.YNc(64,Ro,8,2,"div",27),e.YNc(65,Mo,8,2,"div",27),e.TgZ(66,"div",7),e.TgZ(67,"label",31),e.ynx(68),e.SDv(69,32),e.BQk(),e._UZ(70,"cd-helper",16),e.qZA(),e.TgZ(71,"div",10),e.TgZ(72,"select",33),e.YNc(73,To,2,0,"option",18),e.YNc(74,ho,2,2,"option",19),e.qZA(),e.qZA(),e.qZA(),e.TgZ(75,"div",7),e.TgZ(76,"label",34),e.ynx(77),e.SDv(78,35),e.BQk(),e._UZ(79,"cd-helper",16),e.qZA(),e.TgZ(80,"div",10),e.TgZ(81,"select",36),e.TgZ(82,"option",37),e.SDv(83,38),e.qZA(),e.YNc(84,So,2,2,"option",19),e.qZA(),e.TgZ(85,"span",39),e.SDv(86,40),e.qZA(),e.qZA(),e.qZA(),e.TgZ(87,"div",7),e.TgZ(88,"label",41),e.ynx(89),e.SDv(90,42),e.BQk(),e._UZ(91,"cd-helper",16),e.qZA(),e.TgZ(92,"div",10),e._UZ(93,"input",43),e.qZA(),e.qZA(),e.qZA(),e.TgZ(94,"div",44),e.TgZ(95,"cd-form-button-panel",45),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(96,"titlecase"),e.ALo(97,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&_){const n=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,41,o.action))(e.lcZ(4,43,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(8),e.Q6J("ngIf",o.form.showError("name",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"pattern")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"uniqueName")),e.xp6(5),e.Q6J("html",o.tooltips.plugins[o.plugin].description),e.xp6(3),e.Q6J("ngIf",!o.plugins),e.xp6(1),e.Q6J("ngForOf",o.plugins),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"required")),e.xp6(5),e.Q6J("html",o.tooltips.k),e.xp6(3),e.Q6J("ngIf",o.form.showError("k",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"max")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"unequal")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"kLowerM")),e.xp6(1),e.Q6J("ngIf","lrc"===o.plugin),e.xp6(5),e.Q6J("html",o.tooltips.m),e.xp6(3),e.Q6J("ngIf",o.form.showError("m",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("m",n,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("m",n,"max")),e.xp6(1),e.Q6J("ngIf","shec"===o.plugin),e.xp6(1),e.Q6J("ngIf","clay"===o.plugin),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.LRC),e.xp6(5),e.Q6J("html",o.tooltips.crushFailureDomain),e.xp6(3),e.Q6J("ngIf",!o.failureDomains),e.xp6(1),e.Q6J("ngForOf",o.failureDomainKeys),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.LRC),e.xp6(1),e.Q6J("ngIf",o.PLUGIN.CLAY===o.plugin),e.xp6(1),e.Q6J("ngIf",e.kEZ(49,$e,o.PLUGIN.JERASURE,o.PLUGIN.ISA,o.PLUGIN.CLAY).includes(o.plugin)),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.JERASURE),e.xp6(5),e.Q6J("html",o.tooltips.crushRoot),e.xp6(3),e.Q6J("ngIf",!o.buckets),e.xp6(1),e.Q6J("ngForOf",o.buckets),e.xp6(5),e.Q6J("html",o.tooltips.crushDeviceClass),e.xp6(5),e.Q6J("ngForOf",o.devices),e.xp6(2),e.pQV(o.deviceCount),e.QtT(86),e.xp6(5),e.Q6J("html",o.tooltips.directory),e.xp6(4),e.Q6J("form",o.form)("submitText",e.lcZ(96,45,o.action)+" "+e.lcZ(97,47,o.resource))}},directives:[Ie.z,a._Y,a.JL,fe.V,a.sg,Pe.P,Ee.o,a.Fj,ge.b,a.JJ,a.u,pe.U,C.O5,me.S,a.EJ,C.sg,a.wV,a.qQ,a.YN,a.Kr,Re.p,E._L,C.mk],pipes:[C.rS,Ce.m],styles:[""]}),t})();var Ao=r(7022);class Fo{constructor(){this.erasureInfo=!1,this.crushInfo=!1,this.pgs=1,this.poolTypes=["erasure","replicated"],this.applications={selected:[],default:["cephfs","rbd","rgw"],available:[],validators:[a.kI.pattern("[A-Za-z0-9_]+"),a.kI.maxLength(128)],messages:new Ao.a({empty:"No applications added",selectionLimit:{text:"Applications limit reached",tooltip:"A pool can only have up to four applications definitions."},customValidations:{pattern:"Allowed characters '_a-zA-Z0-9'",maxlength:"Maximum length is 128 characters"},filter:"Filter or add applications'",add:"Add application"})}}}var De=r(63285),Ze=r(74937),No=r(63622),bo=r(60192),vo=r(17932),Io=r(54555),$o=r(30490),xe=r(61350);const Do=["crushInfoTabs"],Zo=["crushDeletionBtn"],xo=["ecpInfoTabs"],yo=["ecpDeletionBtn"];function Uo(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,41),e.qZA())}function qo(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,42),e.qZA())}function Ho(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,43),e.qZA())}function Go(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,44),e.qZA())}function zo(t,i){if(1&t&&(e.TgZ(0,"option",45),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Xo(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,46),e.qZA())}function wo(t,i){if(1&t&&(e.TgZ(0,"option",45),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Qo(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,57),e.qZA())}function Jo(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,58),e.qZA())}function ko(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,59),e.qZA())}function Vo(t,i){1&t&&(e.TgZ(0,"span",54),e.SDv(1,60),e.qZA())}function Yo(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",8),e.TgZ(1,"label",51),e.SDv(2,52),e.qZA(),e.TgZ(3,"div",11),e.TgZ(4,"input",53),e.NdJ("focus",function(){return e.CHM(_),e.oxw(3).externalPgChange=!1})("blur",function(){return e.CHM(_),e.oxw(3).alignPgs()}),e.qZA(),e.YNc(5,Qo,2,0,"span",13),e.YNc(6,Jo,2,0,"span",13),e.YNc(7,ko,2,0,"span",13),e.TgZ(8,"span",54),e._UZ(9,"cd-doc",55),e.qZA(),e.YNc(10,Vo,2,0,"span",56),e.qZA(),e.qZA()}if(2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.form.showError("pgNum",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("pgNum",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("pgNum",_,"34")),e.xp6(3),e.Q6J("ngIf",o.externalPgChange)}}function Bo(t,i){if(1&t&&(e.TgZ(0,"span",40),e.TgZ(1,"ul",65),e.TgZ(2,"li"),e.SDv(3,66),e.qZA(),e.TgZ(4,"li"),e.SDv(5,67),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw(4);e.xp6(3),e.pQV(_.getMinSize()),e.QtT(3),e.xp6(2),e.pQV(_.getMaxSize()),e.QtT(5)}}function jo(t,i){if(1&t&&(e.TgZ(0,"span",40),e.SDv(1,68),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.pQV(_.getMinSize())(_.getMaxSize()),e.QtT(1)}}function Ko(t,i){1&t&&(e.TgZ(0,"span",69),e.SDv(1,70),e.qZA())}function Wo(t,i){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",61),e.SDv(2,62),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",63),e.YNc(5,Bo,6,2,"span",13),e.YNc(6,jo,2,2,"span",13),e.YNc(7,Ko,2,0,"span",64),e.qZA(),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(4),e.Q6J("max",o.getMaxSize())("min",o.getMinSize()),e.xp6(1),e.Q6J("ngIf",o.form.showError("size",_)),e.xp6(1),e.Q6J("ngIf",o.form.showError("size",_)),e.xp6(1),e.Q6J("ngIf",1===o.form.getValue("size"))}}function et(t,i){1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",71),e.SDv(2,72),e.qZA(),e.TgZ(3,"div",11),e.TgZ(4,"div",73),e._UZ(5,"input",74),e.TgZ(6,"label",75),e.SDv(7,76),e.qZA(),e.qZA(),e.qZA(),e.qZA())}function _t(t,i){if(1&t&&(e.TgZ(0,"div"),e.TgZ(1,"div",8),e.TgZ(2,"label",47),e.SDv(3,48),e.qZA(),e.TgZ(4,"div",11),e.TgZ(5,"select",49),e.YNc(6,wo,2,2,"option",19),e.qZA(),e.qZA(),e.qZA(),e.YNc(7,Yo,11,4,"div",50),e.YNc(8,Wo,8,5,"div",50),e.YNc(9,et,8,0,"div",50),e.qZA()),2&t){const _=e.oxw(2);e.xp6(6),e.Q6J("ngForOf",_.pgAutoscaleModes),e.xp6(1),e.Q6J("ngIf","on"!==_.form.getValue("pgAutoscaleMode")),e.xp6(1),e.Q6J("ngIf",_.isReplicated),e.xp6(1),e.Q6J("ngIf",_.info.is_all_bluestore&&_.isErasure)}}function ot(t,i){1&t&&(e.TgZ(0,"option",17),e.SDv(1,91),e.qZA())}function tt(t,i){1&t&&(e.TgZ(0,"option",92),e.SDv(1,93),e.qZA()),2&t&&e.Q6J("ngValue",null)}function it(t,i){1&t&&(e.TgZ(0,"option",92),e.SDv(1,94),e.qZA()),2&t&&e.Q6J("ngValue",null)}function nt(t,i){if(1&t&&(e.TgZ(0,"option",92),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}const F=function(t){return[t]};function st(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",95),e.NdJ("click",function(){return e.CHM(_),e.oxw(4).addErasureCodeProfile()}),e._UZ(1,"i",87),e.qZA()}if(2&t){const _=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,F,_.icons.add))}}function at(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",96,97),e.NdJ("click",function(){return e.CHM(_),e.oxw(4).deleteErasureCodeProfile()}),e._UZ(2,"i",87),e.qZA()}if(2&t){const _=e.oxw(4);e.xp6(2),e.Q6J("ngClass",e.VKq(1,F,_.icons.trash))}}const lt=function(){return["name"]};function rt(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",108),2&t){const _=e.oxw(5);e.Q6J("renderObjects",!0)("hideKeys",e.DdM(4,lt))("data",_.form.getValue("erasureProfile"))("autoReload",!1)}}function ct(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,111),e.qZA())}function Ot(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.xp6(1),e.hij(" ",_," ")}}function dt(t,i){if(1&t&&(e.TgZ(0,"ul"),e.YNc(1,Ot,2,1,"li",112),e.qZA()),2&t){const _=e.oxw(6);e.xp6(1),e.Q6J("ngForOf",_.ecpUsage)}}function ut(t,i){if(1&t&&(e.YNc(0,ct,2,0,"ng-template",null,109,e.W1O),e.YNc(2,dt,2,1,"ul",110)),2&t){const _=e.MAs(1),o=e.oxw(5);e.xp6(2),e.Q6J("ngIf",o.ecpUsage)("ngIfElse",_)}}function ft(t,i){if(1&t&&(e.TgZ(0,"span",98),e.TgZ(1,"ul",99,100),e.TgZ(3,"li",101),e.TgZ(4,"a",102),e.SDv(5,103),e.qZA(),e.YNc(6,rt,1,5,"ng-template",104),e.qZA(),e.TgZ(7,"li",105),e.TgZ(8,"a",102),e.SDv(9,106),e.qZA(),e.YNc(10,ut,3,2,"ng-template",104),e.qZA(),e.qZA(),e._UZ(11,"div",107),e.qZA()),2&t){const _=e.MAs(2);e.xp6(11),e.Q6J("ngbNavOutlet",_)}}const ye=function(t){return{active:t}};function Pt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",8),e.TgZ(1,"label",78),e.SDv(2,79),e.qZA(),e.TgZ(3,"div",11),e.TgZ(4,"div",80),e.TgZ(5,"select",81),e.YNc(6,ot,2,0,"option",82),e.YNc(7,tt,2,1,"option",83),e.YNc(8,it,2,1,"option",83),e.YNc(9,nt,2,2,"option",84),e.qZA(),e.TgZ(10,"span",85),e.TgZ(11,"button",86),e.NdJ("click",function(){e.CHM(_);const n=e.oxw(3);return n.data.erasureInfo=!n.data.erasureInfo}),e._UZ(12,"i",87),e.qZA(),e.YNc(13,st,2,3,"button",88),e.YNc(14,at,3,3,"button",89),e.qZA(),e.qZA(),e.YNc(15,ft,12,1,"span",90),e.qZA(),e.qZA()}if(2&t){const _=e.oxw(3);e.xp6(6),e.Q6J("ngIf",!_.ecProfiles),e.xp6(1),e.Q6J("ngIf",_.ecProfiles&&0===_.ecProfiles.length),e.xp6(1),e.Q6J("ngIf",_.ecProfiles&&_.ecProfiles.length>0),e.xp6(1),e.Q6J("ngForOf",_.ecProfiles),e.xp6(2),e.Q6J("ngClass",e.VKq(9,ye,_.data.erasureInfo)),e.xp6(1),e.Q6J("ngClass",e.VKq(11,F,_.icons.questionCircle)),e.xp6(1),e.Q6J("ngIf",!_.editing),e.xp6(1),e.Q6J("ngIf",!_.editing),e.xp6(1),e.Q6J("ngIf",_.data.erasureInfo&&_.form.getValue("erasureProfile"))}}function Et(t,i){1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",113),e.SDv(2,114),e.qZA(),e.TgZ(3,"div",11),e.TgZ(4,"span",54),e.SDv(5,115),e.qZA(),e.qZA(),e.qZA())}function gt(t,i){1&t&&(e.TgZ(0,"span",54),e.TgZ(1,"span"),e.SDv(2,118),e.qZA(),e._uU(3,"\xa0 "),e.qZA())}function pt(t,i){if(1&t&&(e.TgZ(0,"option",92),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.rule_name," ")}}function mt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",95),e.NdJ("click",function(){return e.CHM(_),e.oxw(5).addCrushRule()}),e._UZ(1,"i",87),e.qZA()}if(2&t){const _=e.oxw(5);e.xp6(1),e.Q6J("ngClass",e.VKq(1,F,_.icons.add))}}function Rt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",124,125),e.NdJ("click",function(){return e.CHM(_),e.oxw(5).deleteCrushRule()}),e._UZ(2,"i",87),e.qZA()}if(2&t){const _=e.oxw(5);e.xp6(2),e.Q6J("ngClass",e.VKq(1,F,_.icons.trash))}}const Ct=function(){return["steps","ruleset","type","rule_name"]};function Mt(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",108),2&t){const _=e.oxw(6);e.Q6J("renderObjects",!1)("hideKeys",e.DdM(4,Ct))("data",_.form.getValue("crushRule"))("autoReload",!1)}}function Tt(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw(7);e.xp6(1),e.hij(" ",o.describeCrushStep(_)," ")}}function ht(t,i){if(1&t&&(e.TgZ(0,"ol"),e.YNc(1,Tt,2,1,"li",112),e.qZA()),2&t){const _=e.oxw(6);e.xp6(1),e.Q6J("ngForOf",_.form.get("crushRule").value.steps)}}function St(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,134),e.qZA())}function Lt(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.xp6(1),e.hij(" ",_," ")}}function At(t,i){if(1&t&&(e.TgZ(0,"ul"),e.YNc(1,Lt,2,1,"li",112),e.qZA()),2&t){const _=e.oxw(7);e.xp6(1),e.Q6J("ngForOf",_.crushUsage)}}function Ft(t,i){if(1&t&&(e.YNc(0,St,2,0,"ng-template",null,133,e.W1O),e.YNc(2,At,2,1,"ul",110)),2&t){const _=e.MAs(1),o=e.oxw(6);e.xp6(2),e.Q6J("ngIf",o.crushUsage)("ngIfElse",_)}}function Nt(t,i){if(1&t&&(e.TgZ(0,"div",126),e.TgZ(1,"ul",99,127),e.TgZ(3,"li",128),e.TgZ(4,"a",102),e.SDv(5,129),e.qZA(),e.YNc(6,Mt,1,5,"ng-template",104),e.qZA(),e.TgZ(7,"li",130),e.TgZ(8,"a",102),e.SDv(9,131),e.qZA(),e.YNc(10,ht,2,1,"ng-template",104),e.qZA(),e.TgZ(11,"li",105),e.TgZ(12,"a",102),e.SDv(13,132),e.qZA(),e.YNc(14,Ft,3,2,"ng-template",104),e.qZA(),e.qZA(),e._UZ(15,"div",107),e.qZA()),2&t){const _=e.MAs(2);e.xp6(15),e.Q6J("ngbNavOutlet",_)}}function bt(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,135),e.qZA())}function vt(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,136),e.qZA())}function It(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div"),e.TgZ(1,"div",80),e.TgZ(2,"select",119),e.TgZ(3,"option",92),e.SDv(4,120),e.qZA(),e.YNc(5,pt,2,2,"option",84),e.qZA(),e.TgZ(6,"span",85),e.TgZ(7,"button",121),e.NdJ("click",function(){e.CHM(_);const n=e.oxw(4);return n.data.crushInfo=!n.data.crushInfo}),e._UZ(8,"i",87),e.qZA(),e.YNc(9,mt,2,3,"button",88),e.YNc(10,Rt,3,3,"button",122),e.qZA(),e.qZA(),e.YNc(11,Nt,16,1,"div",123),e.YNc(12,bt,2,0,"span",13),e.YNc(13,vt,2,0,"span",13),e.qZA()}if(2&t){e.oxw(3);const _=e.MAs(2),o=e.oxw();e.xp6(3),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.current.rules),e.xp6(2),e.Q6J("ngClass",e.VKq(9,ye,o.data.crushInfo)),e.xp6(1),e.Q6J("ngClass",e.VKq(11,F,o.icons.questionCircle)),e.xp6(1),e.Q6J("ngIf",o.isReplicated&&!o.editing),e.xp6(1),e.Q6J("ngIf",o.isReplicated&&!o.editing),e.xp6(1),e.Q6J("ngIf",o.data.crushInfo&&o.form.getValue("crushRule")),e.xp6(1),e.Q6J("ngIf",o.form.showError("crushRule",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("crushRule",_,"tooFewOsds"))}}function $t(t,i){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",113),e.SDv(2,116),e.qZA(),e.TgZ(3,"div",11),e.YNc(4,gt,4,0,"ng-template",null,117,e.W1O),e.YNc(6,It,14,13,"div",110),e.qZA(),e.qZA()),2&t){const _=e.MAs(5),o=e.oxw(3);e.xp6(6),e.Q6J("ngIf",o.current.rules.length>0)("ngIfElse",_)}}function Dt(t,i){if(1&t&&(e.TgZ(0,"div"),e.TgZ(1,"legend"),e.SDv(2,77),e.qZA(),e.YNc(3,Pt,16,13,"div",50),e.YNc(4,Et,6,0,"div",50),e.YNc(5,$t,7,2,"div",50),e.qZA()),2&t){const _=e.oxw(2);e.xp6(3),e.Q6J("ngIf",_.isErasure),e.xp6(1),e.Q6J("ngIf",_.isErasure&&!_.editing),e.xp6(1),e.Q6J("ngIf",_.isReplicated||_.editing)}}function Zt(t,i){if(1&t&&(e.TgZ(0,"option",45),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function xt(t,i){1&t&&(e.TgZ(0,"option",17),e.SDv(1,154),e.qZA())}function yt(t,i){1&t&&(e.TgZ(0,"option",17),e.SDv(1,155),e.qZA())}function Ut(t,i){if(1&t&&(e.TgZ(0,"option",45),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function qt(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,156),e.qZA())}function Ht(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,157),e.qZA())}function Gt(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,158),e.qZA())}function zt(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,159),e.qZA())}function Xt(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,160),e.qZA())}function wt(t,i){if(1&t&&(e.TgZ(0,"div"),e.TgZ(1,"div",8),e.TgZ(2,"label",142),e.SDv(3,143),e.qZA(),e.TgZ(4,"div",11),e.TgZ(5,"select",144),e.YNc(6,xt,2,0,"option",82),e.YNc(7,yt,2,0,"option",82),e.YNc(8,Ut,2,2,"option",19),e.qZA(),e.qZA(),e.qZA(),e.TgZ(9,"div",8),e.TgZ(10,"label",145),e.SDv(11,146),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",147),e.YNc(14,qt,2,0,"span",13),e.YNc(15,Ht,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(16,"div",8),e.TgZ(17,"label",148),e.SDv(18,149),e.qZA(),e.TgZ(19,"div",11),e._UZ(20,"input",150),e.YNc(21,Gt,2,0,"span",13),e.YNc(22,zt,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(23,"div",8),e.TgZ(24,"label",151),e.SDv(25,152),e.qZA(),e.TgZ(26,"div",11),e._UZ(27,"input",153),e.YNc(28,Xt,2,0,"span",13),e.qZA(),e.qZA(),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(6),e.Q6J("ngIf",!o.info.compression_algorithms),e.xp6(1),e.Q6J("ngIf",o.info.compression_algorithms&&0===o.info.compression_algorithms.length),e.xp6(1),e.Q6J("ngForOf",o.info.compression_algorithms),e.xp6(6),e.Q6J("ngIf",o.form.showError("minBlobSize",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("minBlobSize",_,"maximum")),e.xp6(6),e.Q6J("ngIf",o.form.showError("maxBlobSize",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("maxBlobSize",_,"minimum")),e.xp6(6),e.Q6J("ngIf",o.form.showError("ratio",_,"min")||o.form.showError("ratio",_,"max"))}}function Qt(t,i){if(1&t&&(e.TgZ(0,"div",137),e.TgZ(1,"legend"),e.SDv(2,138),e.qZA(),e.TgZ(3,"div",8),e.TgZ(4,"label",139),e.SDv(5,140),e.qZA(),e.TgZ(6,"div",11),e.TgZ(7,"select",141),e.YNc(8,Zt,2,2,"option",19),e.qZA(),e.qZA(),e.qZA(),e.YNc(9,wt,29,8,"div",20),e.qZA()),2&t){const _=e.oxw(2);e.xp6(8),e.Q6J("ngForOf",_.info.compression_modes),e.xp6(1),e.Q6J("ngIf",_.hasCompressionEnabled())}}function Jt(t,i){1&t&&(e.TgZ(0,"span",40),e.SDv(1,161),e.qZA())}function kt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",1),e.TgZ(1,"form",2,3),e.TgZ(3,"div",4),e.TgZ(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.TgZ(9,"div",8),e.TgZ(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.YNc(14,Uo,2,0,"span",13),e.YNc(15,qo,2,0,"span",13),e.YNc(16,Ho,2,0,"span",13),e.YNc(17,Go,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(18,"div",8),e.TgZ(19,"label",14),e.SDv(20,15),e.qZA(),e.TgZ(21,"div",11),e.TgZ(22,"select",16),e.TgZ(23,"option",17),e.SDv(24,18),e.qZA(),e.YNc(25,zo,2,2,"option",19),e.qZA(),e.YNc(26,Xo,2,0,"span",13),e.qZA(),e.qZA(),e.YNc(27,_t,10,4,"div",20),e.TgZ(28,"div",8),e.TgZ(29,"label",21),e.SDv(30,22),e.qZA(),e.TgZ(31,"div",11),e.TgZ(32,"cd-select-badges",23),e.NdJ("selection",function(){return e.CHM(_),e.oxw().appSelection()}),e.qZA(),e.qZA(),e.qZA(),e.YNc(33,Dt,6,3,"div",20),e.YNc(34,Qt,10,2,"div",24),e.TgZ(35,"div"),e.TgZ(36,"legend"),e.SDv(37,25),e.qZA(),e.TgZ(38,"div",8),e.TgZ(39,"label",26),e.ynx(40),e.SDv(41,27),e.BQk(),e.TgZ(42,"cd-helper"),e.TgZ(43,"span"),e.SDv(44,28),e.qZA(),e._UZ(45,"br"),e.TgZ(46,"span"),e.SDv(47,29),e.qZA(),e.qZA(),e.qZA(),e.TgZ(48,"div",11),e._UZ(49,"input",30),e.qZA(),e.qZA(),e.TgZ(50,"div",8),e.TgZ(51,"label",31),e.ynx(52),e.SDv(53,32),e.BQk(),e.TgZ(54,"cd-helper"),e.TgZ(55,"span"),e.SDv(56,33),e.qZA(),e._UZ(57,"br"),e.TgZ(58,"span"),e.SDv(59,34),e.qZA(),e.qZA(),e.qZA(),e.TgZ(60,"div",11),e._UZ(61,"input",35),e.YNc(62,Jt,2,0,"span",13),e.qZA(),e.qZA(),e.qZA(),e.TgZ(63,"div",36),e.TgZ(64,"cd-rbd-configuration-form",37),e.NdJ("changes",function(n){return e.CHM(_),e.oxw().currentConfigurationValues=n()}),e.qZA(),e.qZA(),e.qZA(),e.TgZ(65,"div",38),e.TgZ(66,"cd-form-button-panel",39),e.NdJ("submitActionEvent",function(){return e.CHM(_),e.oxw().submit()}),e.ALo(67,"titlecase"),e.ALo(68,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&t){const _=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.form),e.xp6(6),e.pQV(e.lcZ(6,24,o.action))(e.lcZ(7,26,o.resource)),e.QtT(5),e.xp6(7),e.Q6J("ngIf",o.form.showError("name",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"uniqueName")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"rbdPool")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"pattern")),e.xp6(8),e.Q6J("ngForOf",o.data.poolTypes),e.xp6(1),e.Q6J("ngIf",o.form.showError("poolType",_,"required")),e.xp6(1),e.Q6J("ngIf",o.isReplicated||o.isErasure),e.xp6(5),e.Q6J("customBadges",!0)("customBadgeValidators",o.data.applications.validators)("messages",o.data.applications.messages)("data",o.data.applications.selected)("options",o.data.applications.available)("selectionLimit",4),e.xp6(1),e.Q6J("ngIf",o.isErasure||o.isReplicated),e.xp6(1),e.Q6J("ngIf",o.info.is_all_bluestore),e.xp6(28),e.Q6J("ngIf",o.form.showError("max_objects",_,"min")),e.xp6(1),e.Q6J("hidden",o.isErasure||-1===o.data.applications.selected.indexOf("rbd")),e.xp6(1),e.Q6J("form",o.form)("initializeData",o.initializeConfigData),e.xp6(2),e.Q6J("form",o.form)("submitText",e.lcZ(67,28,o.action)+" "+e.lcZ(68,30,o.resource))}}let Ue=(()=>{class t extends p_.E{constructor(_,o,n,s,c,d,f,p,m,T,h){super(),this.dimlessBinaryPipe=_,this.route=o,this.router=n,this.modalService=s,this.poolService=c,this.authStorageService=d,this.formatter=f,this.taskWrapper=p,this.ecpService=m,this.crushRuleService=T,this.actionLabels=h,this.editing=!1,this.isReplicated=!1,this.isErasure=!1,this.data=new Fo,this.externalPgChange=!1,this.current={rules:[]},this.initializeConfigData=new P_.t(1),this.currentConfigurationValues={},this.icons=v.P,this.crushUsage=void 0,this.ecpUsage=void 0,this.editing=this.router.url.startsWith(`/pool/${M.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource="pool",this.authenticate(),this.createForm()}authenticate(){if(this.permission=this.authStorageService.getPermissions().pool,!this.permission.read||!this.permission.update&&this.editing||!this.permission.create&&!this.editing)throw new E_._2}createForm(){const _=new Ne.d({mode:new a.NI("none"),algorithm:new a.NI(""),minBlobSize:new a.NI("",{updateOn:"blur"}),maxBlobSize:new a.NI("",{updateOn:"blur"}),ratio:new a.NI("",{updateOn:"blur"})});this.form=new Ne.d({name:new a.NI("",{validators:[a.kI.pattern(/^[.A-Za-z0-9_/-]+$/),a.kI.required,P.h.custom("rbdPool",()=>this.form&&this.form.getValue("name").includes("/")&&this.data&&-1!==this.data.applications.selected.indexOf("rbd"))]}),poolType:new a.NI("",{validators:[a.kI.required]}),crushRule:new a.NI(null,{validators:[P.h.custom("tooFewOsds",o=>this.info&&o&&this.info.osd_countthis.isReplicated&&this.info.crush_rules_replicated.length>0&&!o)]}),size:new a.NI("",{updateOn:"blur"}),erasureProfile:new a.NI(null),pgNum:new a.NI("",{validators:[a.kI.required]}),pgAutoscaleMode:new a.NI(null),ecOverwrites:new a.NI(!1),compression:_,max_bytes:new a.NI(""),max_objects:new a.NI(0)},[P.h.custom("form",()=>null)])}ngOnInit(){this.poolService.getInfo().subscribe(_=>{this.initInfo(_),this.editing?this.initEditMode():(this.setAvailableApps(),this.loadingReady()),this.listenToChanges(),this.setComplexValidators()})}initInfo(_){this.pgAutoscaleModes=_.pg_autoscale_modes,this.form.silentSet("pgAutoscaleMode",_.pg_autoscale_default_mode),this.form.silentSet("algorithm",_.bluestore_compression_algorithm),this.info=_,this.initEcp(_.erasure_code_profiles)}initEcp(_){this.setListControlStatus("erasureProfile",_),this.ecProfiles=_}setListControlStatus(_,o){const n=this.form.get(_),s=n.value;1!==o.length||s&&g().isEqual(s,o[0])?0===o.length&&s&&n.setValue(null):n.setValue(o[0]),o.length<=1?n.enabled&&n.disable():n.disabled&&n.enable()}initEditMode(){this.disableForEdit(),this.routeParamsSubscribe=this.route.params.subscribe(_=>this.poolService.get(_.name).subscribe(o=>{this.data.pool=o,this.initEditFormData(o),this.loadingReady()}))}disableForEdit(){["poolType","crushRule","size","erasureProfile","ecOverwrites"].forEach(_=>this.form.get(_).disable())}initEditFormData(_){this.initializeConfigData.next({initialData:_.configuration,sourceType:m_.h.pool}),this.poolTypeChange(_.type);const o=this.info.crush_rules_replicated.concat(this.info.crush_rules_erasure),n={name:_.pool_name,poolType:_.type,crushRule:o.find(s=>s.rule_name===_.crush_rule),size:_.size,erasureProfile:this.ecProfiles.find(s=>s.name===_.erasure_code_profile),pgAutoscaleMode:_.pg_autoscale_mode,pgNum:_.pg_num,ecOverwrites:_.flags_names.includes("ec_overwrites"),mode:_.options.compression_mode,algorithm:_.options.compression_algorithm,minBlobSize:this.dimlessBinaryPipe.transform(_.options.compression_min_blob_size),maxBlobSize:this.dimlessBinaryPipe.transform(_.options.compression_max_blob_size),ratio:_.options.compression_required_ratio,max_bytes:this.dimlessBinaryPipe.transform(_.quota_max_bytes),max_objects:_.quota_max_objects};Object.keys(n).forEach(s=>{const c=n[s];!g().isUndefined(c)&&""!==c&&this.form.silentSet(s,c)}),this.data.pgs=this.form.getValue("pgNum"),this.setAvailableApps(this.data.applications.default.concat(_.application_metadata)),this.data.applications.selected=_.application_metadata}setAvailableApps(_=this.data.applications.default){this.data.applications.available=g().uniq(_.sort()).map(o=>new g_.$(!1,o,""))}listenToChanges(){this.listenToChangesDuringAddEdit(),this.editing||this.listenToChangesDuringAdd()}listenToChangesDuringAddEdit(){this.form.get("pgNum").valueChanges.subscribe(_=>{const o=_-this.data.pgs;1===Math.abs(o)&&2!==_?this.doPgPowerJump(o):this.data.pgs=_})}doPgPowerJump(_){const o=this.calculatePgPower()+_;this.setPgs(-1===_?Math.round(o):Math.floor(o))}calculatePgPower(_=this.form.getValue("pgNum")){return Math.log(_)/Math.log(2)}setPgs(_){const o=Math.pow(2,_<0?0:_);this.data.pgs=o,this.form.silentSet("pgNum",o)}listenToChangesDuringAdd(){this.form.get("poolType").valueChanges.subscribe(_=>{this.poolTypeChange(_)}),this.form.get("crushRule").valueChanges.subscribe(_=>{this.crushDeletionBtn&&this.crushDeletionBtn.isOpen()&&this.crushDeletionBtn.close(),_&&(this.setCorrectMaxSize(_),this.crushRuleIsUsedBy(_.rule_name),this.replicatedRuleChange(),this.pgCalc())}),this.form.get("size").valueChanges.subscribe(()=>{this.pgCalc()}),this.form.get("erasureProfile").valueChanges.subscribe(_=>{this.ecpDeletionBtn&&this.ecpDeletionBtn.isOpen()&&this.ecpDeletionBtn.close(),_&&(this.ecpIsUsedBy(_.name),this.pgCalc())}),this.form.get("mode").valueChanges.subscribe(()=>{["minBlobSize","maxBlobSize","ratio"].forEach(_=>{this.form.get(_).updateValueAndValidity({emitEvent:!1})})}),this.form.get("minBlobSize").valueChanges.subscribe(()=>{this.form.get("maxBlobSize").updateValueAndValidity({emitEvent:!1})}),this.form.get("maxBlobSize").valueChanges.subscribe(()=>{this.form.get("minBlobSize").updateValueAndValidity({emitEvent:!1})})}poolTypeChange(_){if("replicated"===_?this.setTypeBooleans(!0,!1):this.setTypeBooleans(!1,"erasure"===_),!_||!this.info)return void(this.current.rules=[]);const o=this.info["crush_rules_"+_]||[];this.current.rules=o,!this.editing&&(this.isReplicated&&this.setListControlStatus("crushRule",o),this.replicatedRuleChange(),this.pgCalc())}setTypeBooleans(_,o){this.isReplicated=_,this.isErasure=o}replicatedRuleChange(){if(!this.isReplicated)return;const _=this.form.get("size");let o=this.form.getValue("size")||3;const n=this.getMinSize(),s=this.getMaxSize();os&&(o=s),o!==_.value&&this.form.silentSet("size",o)}getMinSize(){if(!this.info||this.info.osd_count<1)return 0;const _=this.form.getValue("crushRule");return _?_.min_size:1}getMaxSize(){const _=this.form.getValue("crushRule");return this.info?_?_.usable_size:Math.min(this.info.osd_count,3):0}pgCalc(){const _=this.form.getValue("poolType");if(!this.info||this.form.get("pgNum").dirty||!_)return;const o=100*this.info.osd_count,n=this.isReplicated?this.replicatedPgCalc(o):this.erasurePgCalc(o);if(!n)return;const s=this.data.pgs;this.alignPgs(n),this.externalPgChange||(this.externalPgChange=s!==this.data.pgs)}setCorrectMaxSize(_=this.form.getValue("crushRule")){if(!_)return;const n=S.searchFailureDomains(this.info.nodes,_.steps[0].item_name)[_.steps[1].type];_.usable_size=Math.min(n?n.length:_.max_size,_.max_size)}replicatedPgCalc(_){const o=this.form.get("size"),n=o.value;return o.valid&&n>0?_/n:0}erasurePgCalc(_){const o=this.form.get("erasureProfile"),n=o.value;return(o.valid||o.disabled)&&n?_/(n.k+n.m):0}alignPgs(_=this.form.getValue("pgNum")){this.setPgs(Math.round(this.calculatePgPower(_<1?1:_)))}setComplexValidators(){this.editing?this.form.get("name").setValidators([this.form.get("name").validator,P.h.custom("uniqueName",_=>this.data.pool&&this.info&&-1!==this.info.pool_names.indexOf(_)&&this.info.pool_names.indexOf(_)!==this.info.pool_names.indexOf(this.data.pool.pool_name))]):(P.h.validateIf(this.form.get("size"),()=>this.isReplicated,[P.h.custom("min",_=>this.form.getValue("size")&&_this.form.getValue("size")&&this.getMaxSize()<_)]),this.form.get("name").setValidators([this.form.get("name").validator,P.h.custom("uniqueName",_=>this.info&&-1!==this.info.pool_names.indexOf(_))])),this.setCompressionValidators()}setCompressionValidators(){P.h.validateIf(this.form.get("minBlobSize"),()=>this.hasCompressionEnabled(),[a.kI.min(0),P.h.custom("maximum",_=>this.oddBlobSize(_,this.form.getValue("maxBlobSize")))]),P.h.validateIf(this.form.get("maxBlobSize"),()=>this.hasCompressionEnabled(),[a.kI.min(0),P.h.custom("minimum",_=>this.oddBlobSize(this.form.getValue("minBlobSize"),_))]),P.h.validateIf(this.form.get("ratio"),()=>this.hasCompressionEnabled(),[a.kI.min(0),a.kI.max(1)])}oddBlobSize(_,o){const n=this.formatter.toBytes(_),s=this.formatter.toBytes(o);return Boolean(n&&s&&n>=s)}hasCompressionEnabled(){return this.form.getValue("mode")&&"none"!==this.form.get("mode").value.toLowerCase()}describeCrushStep(_){return[_.op.replace("_"," "),_.item_name||"",_.type?_.num+" type "+_.type:""].join(" ")}addErasureCodeProfile(){this.addModal(Lo,_=>this.reloadECPs(_))}addModal(_,o){this.hideOpenTooltips(),this.modalService.show(_).componentInstance.submitAction.subscribe(s=>{o(s.name)})}hideOpenTooltips(){const _=o=>o&&o.isOpen()&&o.close();_(this.ecpDeletionBtn),_(this.crushDeletionBtn)}reloadECPs(_){this.reloadList({newItemName:_,getInfo:()=>this.ecpService.list(),initInfo:o=>this.initEcp(o),findNewItem:()=>this.ecProfiles.find(o=>o.name===_),controlName:"erasureProfile"})}reloadList({newItemName:_,getInfo:o,initInfo:n,findNewItem:s,controlName:c}){this.modalSubscription&&this.modalSubscription.unsubscribe(),o().subscribe(d=>{if(n(d),!_)return;const f=s();f&&this.form.get(c).setValue(f)})}deleteErasureCodeProfile(){this.deletionModal({value:this.form.getValue("erasureProfile"),usage:this.ecpUsage,deletionBtn:this.ecpDeletionBtn,dataName:"erasureInfo",getTabs:()=>this.ecpInfoTabs,tabPosition:"used-by-pools",nameAttribute:"name",itemDescription:"erasure code profile",reloadFn:()=>this.reloadECPs(),deleteFn:_=>this.ecpService.delete(_),taskName:"ecp/delete"})}deletionModal({value:_,usage:o,deletionBtn:n,dataName:s,getTabs:c,tabPosition:d,nameAttribute:f,itemDescription:p,reloadFn:m,deleteFn:T,taskName:h}){if(!_)return;if(o)return n.animation=!1,n.toggle(),this.data[s]=!0,void setTimeout(()=>{const u=c();u&&u.select(d)},50);const R=_[f];this.modalService.show(Fe.M,{itemDescription:p,itemNames:[R],submitActionObservable:()=>{const u=T(R);return u.subscribe(()=>m()),this.taskWrapper.wrapTaskAroundCall({task:new I.R(h,{name:R}),call:u})}})}addCrushRule(){this.addModal(I_,_=>this.reloadCrushRules(_))}reloadCrushRules(_){this.reloadList({newItemName:_,getInfo:()=>this.poolService.getInfo(),initInfo:o=>{this.initInfo(o),this.poolTypeChange("replicated")},findNewItem:()=>this.info.crush_rules_replicated.find(o=>o.rule_name===_),controlName:"crushRule"})}deleteCrushRule(){this.deletionModal({value:this.form.getValue("crushRule"),usage:this.crushUsage,deletionBtn:this.crushDeletionBtn,dataName:"crushInfo",getTabs:()=>this.crushInfoTabs,tabPosition:"used-by-pools",nameAttribute:"rule_name",itemDescription:"crush rule",reloadFn:()=>this.reloadCrushRules(),deleteFn:_=>this.crushRuleService.delete(_),taskName:"crushRule/delete"})}crushRuleIsUsedBy(_){this.crushUsage=_?this.info.used_rules[_]:void 0}ecpIsUsedBy(_){this.ecpUsage=_?this.info.used_profiles[_]:void 0}submit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _={pool:this.form.getValue("name")};this.assignFormFields(_,[{externalFieldName:"pool_type",formControlName:"poolType"},{externalFieldName:"pg_autoscale_mode",formControlName:"pgAutoscaleMode",editable:!0},{externalFieldName:"pg_num",formControlName:"pgNum",replaceFn:n=>"on"===this.form.getValue("pgAutoscaleMode")?1:n,editable:!0},this.isReplicated?{externalFieldName:"size",formControlName:"size"}:{externalFieldName:"erasure_code_profile",formControlName:"erasureProfile",attr:"name"},{externalFieldName:"rule_name",formControlName:"crushRule",replaceFn:n=>this.isReplicated?n&&n.rule_name:void 0},{externalFieldName:"quota_max_bytes",formControlName:"max_bytes",replaceFn:this.formatter.toBytes,editable:!0,resetValue:this.editing?0:void 0},{externalFieldName:"quota_max_objects",formControlName:"max_objects",editable:!0,resetValue:this.editing?0:void 0}]),this.info.is_all_bluestore&&(this.assignFormField(_,{externalFieldName:"flags",formControlName:"ecOverwrites",replaceFn:()=>this.isErasure?["ec_overwrites"]:void 0}),"none"!==this.form.getValue("mode")?this.assignFormFields(_,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:n=>this.hasCompressionEnabled()&&n},{externalFieldName:"compression_algorithm",formControlName:"algorithm",editable:!0},{externalFieldName:"compression_min_blob_size",formControlName:"minBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_max_blob_size",formControlName:"maxBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_required_ratio",formControlName:"ratio",editable:!0,resetValue:0}]):this.editing&&this.assignFormFields(_,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:()=>"unset"},{externalFieldName:"srcpool",formControlName:"name",editable:!0,replaceFn:()=>this.data.pool.pool_name}]));const o=this.data.applications.selected;(o.length>0||this.editing)&&(_.application_metadata=o),this.isReplicated&&!g().isEmpty(this.currentConfigurationValues)&&(_.configuration=this.currentConfigurationValues),this.triggerApiTask(_)}assignFormFields(_,o){o.forEach(n=>this.assignFormField(_,n))}assignFormField(_,{externalFieldName:o,formControlName:n,attr:s,replaceFn:c,editable:d,resetValue:f}){if(this.editing&&(!d||this.form.get(n).pristine))return;const p=this.form.getValue(n);let m=c?c(p):s?g().get(p,s):p;if(!p||!m){if(!d||g().isUndefined(f))return;m=f}_[o]=m}triggerApiTask(_){this.taskWrapper.wrapTaskAroundCall({task:new I.R("pool/"+(this.editing?M.MQ.EDIT:M.MQ.CREATE),{pool_name:_.hasOwnProperty("srcpool")?_.srcpool:_.pool}),call:this.poolService[this.editing?M.MQ.UPDATE:M.MQ.CREATE](_)}).subscribe({error:o=>{g().isObject(o.error)&&"34"===o.error.code&&this.form.get("pgNum").setErrors({34:!0}),this.form.setErrors({cdSubmitButton:!0})},complete:()=>this.router.navigate(["/pool"])})}appSelection(){this.form.get("name").updateValueAndValidity({emitEvent:!1,onlySelf:!0})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(R_.$),e.Y36(Oe.gz),e.Y36(Oe.F0),e.Y36(De.Z),e.Y36(ue.q),e.Y36(Ze.j),e.Y36(C_.H),e.Y36(de.P),e.Y36(Me),e.Y36(ve.H),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-form"]],viewQuery:function(_,o){if(1&_&&(e.Gf(Do,5),e.Gf(Zo,5),e.Gf(xo,5),e.Gf(yo,5)),2&_){let n;e.iGM(n=e.CRH())&&(o.crushInfoTabs=n.first),e.iGM(n=e.CRH())&&(o.crushDeletionBtn=n.first),e.iGM(n=e.CRH())&&(o.ecpInfoTabs=n.first),e.iGM(n=e.CRH())&&(o.ecpDeletionBtn=n.first)}},features:[e.qOj],decls:1,vars:1,consts:function(){let i,_,o,n,s,c,d,f,p,m,T,h,R,u,A,$,D,Z,x,y,U,q,H,G,z,X,w,Q,J,k,V,Y,B,j,K,N,W,ee,_e,oe,te,ie,ne,se,ae,le,re,ce,b,O,Xe,we,Qe,Je,ke,Ve,Ye,Be,je,Ke,We,e_,__,o_,t_,i_,n_,s_,a_,l_,r_,c_;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Name...",n="Pool type",s="-- Select a pool type --",c="Applications",d="Quotas",f="Max bytes",p="Leave it blank or specify 0 to disable this quota.",m="A valid quota should be greater than 0.",T="e.g., 10GiB",h="Max objects",R="Leave it blank or specify 0 to disable this quota.",u="A valid quota should be greater than 0.",A="This field is required!",$="The chosen Ceph pool name is already in use.",D="It's not possible to create an RBD pool with '/' in the name. Please change the name or remove 'rbd' from the applications list.",Z="Pool name can only contain letters, numbers, '.', '-', '_' or '/'.",x="This field is required!",y="PG Autoscale",U="Placement groups",q="Calculation help",H="This field is required!",G="At least one placement group is needed!",z="Your cluster can't handle this many PGs. Please recalculate the PG amount needed.",X="The current PGs settings were calculated for you, you should make sure the values suit your needs before submit.",w="Replicated size",Q="Minimum: " + "\ufffd0\ufffd" + "",J="Maximum: " + "\ufffd0\ufffd" + "",k="The size specified is out of range. A value from " + "\ufffd0\ufffd" + " to " + "\ufffd1\ufffd" + " is usable.",V="A size of 1 will not create a replication of the object. The 'Replicated size' includes the object itself.",Y="Flags",B="EC Overwrites",j="CRUSH",K="Erasure code profile",N="This profile can't be deleted as it is in use.",W="Loading...",ee="-- No erasure code profile available --",_e="-- Select an erasure code profile --",oe="Profile",te="Used by pools",ie="Profile is not in use.",ne="Crush ruleset",se="A new crush ruleset will be implicitly created.",ae="Crush ruleset",le="There are no rules.",re="-- Select a crush rule --",ce="Placement and\n replication strategies or distribution policies that allow to\n specify how CRUSH places data replicas.",b="This rule can't be deleted as it is in use.",O="Crush rule",Xe="Crush steps",we="Used by pools",Qe="Rule is not in use.",Je="This field is required!",ke="The rule can't be used in the current cluster as it has too few OSDs to meet the minimum required OSD by this rule.",Ve="Compression",Ye="Mode",Be="Algorithm",je="Minimum blob size",Ke="e.g., 128KiB",We="Maximum blob size",e_="e.g., 512KiB",__="Ratio",o_="Compression ratio",t_="Loading...",i_="-- No erasure compression algorithm available --",n_="Value should be greater than 0",s_="Value should be less than the maximum blob size",a_="Value should be greater than 0",l_="Value should be greater than the minimum blob size",r_="Value should be between 0.0 and 1.0",c_="The value should be greater or equal to 0",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],i,[1,"card-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],_,[1,"cd-col-form-input"],["id","name","name","name","type","text","placeholder",o,"formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","poolType",1,"cd-col-form-label","required"],n,["id","poolType","formControlName","poolType","name","poolType",1,"form-control"],["ngValue",""],s,[3,"value",4,"ngFor","ngForOf"],[4,"ngIf"],["for","applications",1,"cd-col-form-label"],c,["id","applications",3,"customBadges","customBadgeValidators","messages","data","options","selectionLimit","selection"],["formGroupName","compression",4,"ngIf"],d,["for","max_bytes",1,"cd-col-form-label"],f,p,m,["id","max_bytes","name","max_bytes","type","text","formControlName","max_bytes","placeholder",T,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["for","max_objects",1,"cd-col-form-label"],h,R,u,["id","max_objects","min","0","name","max_objects","type","number","formControlName","max_objects",1,"form-control"],[3,"hidden"],[3,"form","initializeData","changes"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],A,$,D,Z,[3,"value"],x,["for","pgAutoscaleMode",1,"cd-col-form-label"],y,["id","pgAutoscaleMode","name","pgAutoscaleMode","formControlName","pgAutoscaleMode",1,"form-control"],["class","form-group row",4,"ngIf"],["for","pgNum",1,"cd-col-form-label","required"],U,["id","pgNum","name","pgNum","formControlName","pgNum","min","1","type","number","required","",1,"form-control",3,"focus","blur"],[1,"form-text","text-muted"],["section","pgs","docText",q],["class","form-text text-muted",4,"ngIf"],H,G,z,X,["for","size",1,"cd-col-form-label","required"],w,["id","size","name","size","type","number","formControlName","size",1,"form-control",3,"max","min"],["class","text-warning-dark",4,"ngIf"],[1,"list-inline"],Q,J,k,[1,"text-warning-dark"],V,[1,"cd-col-form-label"],Y,[1,"custom-control","custom-checkbox"],["type","checkbox","id","ec-overwrites","formControlName","ecOverwrites",1,"custom-control-input"],["for","ec-overwrites",1,"custom-control-label"],B,j,["for","erasureProfile",1,"cd-col-form-label"],K,[1,"input-group"],["id","erasureProfile","name","erasureProfile","formControlName","erasureProfile",1,"form-control"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],[1,"input-group-append"],["id","ecp-info-button","type","button",1,"btn","btn-light",3,"ngClass","click"],["aria-hidden","true",3,"ngClass"],["class","btn btn-light","type","button",3,"click",4,"ngIf"],["class","btn btn-light","type","button","ngbTooltip",N,"triggers","manual",3,"click",4,"ngIf"],["class","form-text text-muted","id","ecp-info-block",4,"ngIf"],W,[3,"ngValue"],ee,_e,["type","button",1,"btn","btn-light",3,"click"],["type","button","ngbTooltip",N,"triggers","manual",1,"btn","btn-light",3,"click"],["ecpDeletionBtn","ngbTooltip"],["id","ecp-info-block",1,"form-text","text-muted"],["ngbNav","",1,"nav-tabs"],["ecpInfoTabs","ngbNav"],["ngbNavItem","ecp-info"],["ngbNavLink",""],oe,["ngbNavContent",""],["ngbNavItem","used-by-pools"],te,[3,"ngbNavOutlet"],[3,"renderObjects","hideKeys","data","autoReload"],["ecpIsNotUsed",""],[4,"ngIf","ngIfElse"],ie,[4,"ngFor","ngForOf"],["for","crushRule",1,"cd-col-form-label"],ne,se,ae,["noRules",""],le,["id","crushRule","formControlName","crushRule","name","crushSet",1,"form-control"],re,["id","crush-info-button","type","button","ngbTooltip",ce,1,"btn","btn-light",3,"ngClass","click"],["class","btn btn-light","type","button","ngbTooltip",b,"triggers","manual",3,"click",4,"ngIf"],["class","form-text text-muted","id","crush-info-block",4,"ngIf"],["type","button","ngbTooltip",b,"triggers","manual",1,"btn","btn-light",3,"click"],["crushDeletionBtn","ngbTooltip"],["id","crush-info-block",1,"form-text","text-muted"],["crushInfoTabs","ngbNav"],["ngbNavItem","crush-rule-info"],O,["ngbNavItem","crush-rule-steps"],Xe,we,["ruleIsNotUsed",""],Qe,Je,ke,["formGroupName","compression"],Ve,["for","mode",1,"cd-col-form-label"],Ye,["id","mode","name","mode","formControlName","mode",1,"form-control"],["for","algorithm",1,"cd-col-form-label"],Be,["id","algorithm","name","algorithm","formControlName","algorithm",1,"form-control"],["for","minBlobSize",1,"cd-col-form-label"],je,["id","minBlobSize","name","minBlobSize","formControlName","minBlobSize","type","text","min","0","placeholder",Ke,"defaultUnit","KiB","cdDimlessBinary","",1,"form-control"],["for","maxBlobSize",1,"cd-col-form-label"],We,["id","maxBlobSize","type","text","min","0","formControlName","maxBlobSize","placeholder",e_,"defaultUnit","KiB","cdDimlessBinary","",1,"form-control"],["for","ratio",1,"cd-col-form-label"],__,["id","ratio","name","ratio","formControlName","ratio","type","number","min","0","max","1","step","0.1","placeholder",o_,1,"form-control"],t_,i_,n_,s_,a_,l_,r_,c_]},template:function(_,o){1&_&&e.YNc(0,kt,69,32,"div",0),2&_&&e.Q6J("cdFormLoading",o.loading)},directives:[No.y,a._Y,a.JL,fe.V,a.sg,Pe.P,Ee.o,a.Fj,ge.b,a.JJ,a.u,pe.U,C.O5,a.EJ,a.YN,a.Kr,C.sg,bo.m,me.S,vo.Q,a.qQ,a.wV,Io.d,Re.p,a.Q7,$o.K,a.Fd,a.Wl,C.mk,E._L,E.Pz,E.nv,E.Vx,E.uN,E.tO,xe.b,a.x0],pipes:[C.rS,Ce.m],styles:[""]}),t})();var Vt=r(19773),Yt=r(49671),Bt=r(68136),Te=r(69158),he=r(35905),L=r(99466),jt=r(91801),Kt=r(68774),Wt=r(66369),qe=r(38047),Se=r(51847);class ei{constructor(i){this.pool_name=i}}var _i=r(64724),oi=r(94928),He=r(51295),ti=r(59376),Ge=r(76317),ii=r(71752);function ni(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",12),2&t){const _=e.oxw(2);e.Q6J("renderObjects",!0)("data",_.poolDetails)("autoReload",!1)}}function si(t,i){if(1&t&&e._UZ(0,"cd-grafana",15),2&t){const _=e.oxw(3);e.MGl("grafanaPath","ceph-pool-detail?var-pool_name=",_.selection.pool_name,"")}}function ai(t,i){1&t&&(e.TgZ(0,"li",13),e.TgZ(1,"a",5),e.SDv(2,14),e.qZA(),e.YNc(3,si,1,1,"ng-template",7),e.qZA())}function li(t,i){if(1&t&&e._UZ(0,"cd-rbd-configuration-table",18),2&t){const _=e.oxw(3);e.Q6J("data",_.selectedPoolConfiguration)}}function ri(t,i){1&t&&(e.TgZ(0,"li",16),e.TgZ(1,"a",5),e.SDv(2,17),e.qZA(),e.YNc(3,li,1,1,"ng-template",7),e.qZA())}function ci(t,i){if(1&t&&e._UZ(0,"cd-table",21),2&t){const _=e.oxw(3);e.Q6J("data",_.cacheTiers)("columns",_.cacheTierColumns)("autoSave",!1)}}function Oi(t,i){1&t&&(e.TgZ(0,"li",19),e.TgZ(1,"a",5),e.SDv(2,20),e.qZA(),e.YNc(3,ci,1,3,"ng-template",7),e.qZA())}function di(t,i){if(1&t&&(e.ynx(0,1),e.TgZ(1,"ul",2,3),e.TgZ(3,"li",4),e.TgZ(4,"a",5),e.SDv(5,6),e.qZA(),e.YNc(6,ni,1,3,"ng-template",7),e.qZA(),e.YNc(7,ai,4,0,"li",8),e.YNc(8,ri,4,0,"li",9),e.YNc(9,Oi,4,0,"li",10),e.qZA(),e._UZ(10,"div",11),e.BQk()),2&t){const _=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngIf","replicated"===o.selection.type),e.xp6(1),e.Q6J("ngIf",(null==o.selection.tiers?null:o.selection.tiers.length)>0),e.xp6(1),e.Q6J("ngbNavOutlet",_)}}let ui=(()=>{class t{constructor(_){this.poolService=_,this.cacheTierColumns=[],this.omittedPoolAttributes=["cdExecuting","cdIsBinary","stats"],this.cacheTierColumns=[{prop:"pool_name",name:"Name",flexGrow:3},{prop:"cache_mode",name:"Cache Mode",flexGrow:2},{prop:"cache_min_evict_age",name:"Min Evict Age",flexGrow:2},{prop:"cache_min_flush_age",name:"Min Flush Age",flexGrow:2},{prop:"target_max_bytes",name:"Target Max Bytes",flexGrow:2},{prop:"target_max_objects",name:"Target Max Objects",flexGrow:2}]}ngOnChanges(){this.selection&&(this.poolService.getConfiguration(this.selection.pool_name).subscribe(_=>{He.T.updateChanged(this,{selectedPoolConfiguration:_})}),He.T.updateChanged(this,{poolDetails:g().omit(this.selection,this.omittedPoolAttributes)}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ue.q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-details"]],inputs:{cacheTiers:"cacheTiers",permissions:"permissions",selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let i,_,o,n;return i="Details",_="Performance Details",o="Configuration",n="Cache Tiers Details",[["cdTableDetail","",4,"ngIf"],["cdTableDetail",""],["ngbNav","","cdStatefulTab","pool-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","performance-details",4,"ngIf"],["ngbNavItem","configuration",4,"ngIf"],["ngbNavItem","cache-tiers-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"renderObjects","data","autoReload"],["ngbNavItem","performance-details"],_,["uid","-xyV8KCiz","grafanaStyle","three",3,"grafanaPath"],["ngbNavItem","configuration"],o,[3,"data"],["ngbNavItem","cache-tiers-details"],n,["columnMode","flex",3,"data","columns","autoSave"]]},template:function(_,o){1&_&&e.YNc(0,di,11,4,"ng-container",0),2&_&&e.Q6J("ngIf",o.selection)},directives:[C.O5,E.Pz,ti.m,E.nv,E.Vx,E.uN,E.tO,xe.b,Ge.F,ii.P,he.a],styles:[""],changeDetection:0}),t})();var fi=r(60251);const Pi=["poolUsageTpl"],Ei=["poolConfigurationSourceTpl"];function gi(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table",9,10),e.NdJ("fetchData",function(){return e.CHM(_),e.oxw().taskListService.fetch()})("setExpandedRow",function(n){return e.CHM(_),e.oxw().setExpandedRow(n)})("updateSelection",function(n){return e.CHM(_),e.oxw().updateSelection(n)}),e._UZ(2,"cd-table-actions",11),e._UZ(3,"cd-pool-details",12),e.qZA()}if(2&t){const _=e.oxw();e.Q6J("data",_.pools)("columns",_.columns)("hasDetails",!0)("status",_.tableStatus)("autoReload",-1),e.xp6(2),e.Q6J("permission",_.permissions.pool)("selection",_.selection)("tableActions",_.tableActions),e.xp6(1),e.Q6J("selection",_.expandedRow)("permissions",_.permissions)("cacheTiers",_.cacheTiers)}}function pi(t,i){1&t&&e._UZ(0,"cd-grafana",14),2&t&&e.Q6J("grafanaPath","ceph-pools-overview?")}function mi(t,i){1&t&&(e.TgZ(0,"li",2),e.TgZ(1,"a",3),e.SDv(2,13),e.qZA(),e.YNc(3,pi,1,1,"ng-template",5),e.qZA())}function Ri(t,i){if(1&t&&e._UZ(0,"cd-usage-bar",16),2&t){const _=e.oxw().row;e.Q6J("total",_.stats.bytes_used.latest+_.stats.avail_raw.latest)("used",_.stats.bytes_used.latest)}}function Ci(t,i){if(1&t&&e.YNc(0,Ri,1,2,"cd-usage-bar",15),2&t){const _=i.row;e.Q6J("ngIf",null==_.stats||null==_.stats.avail_raw?null:_.stats.avail_raw.latest)}}let Mi=(()=>{class t extends Bt.o{constructor(_,o,n,s,c,d,f,p,m,T,h){super(),this.poolService=_,this.taskWrapper=o,this.ecpService=n,this.authStorageService=s,this.taskListService=c,this.modalService=d,this.pgCategoryService=f,this.dimlessPipe=p,this.urlBuilder=m,this.configurationService=T,this.actionLabels=h,this.selection=new Kt.r,this.executingTasks=[],this.tableStatus=new Te.E,this.cacheTiers=[],this.monAllowPoolDelete=!1,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"create",icon:v.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:v.P.edit,routerLink:()=>this.urlBuilder.getEdit(encodeURIComponent(this.selection.first().pool_name)),name:this.actionLabels.EDIT},{permission:"delete",icon:v.P.destroy,click:()=>this.deletePoolModal(),name:this.actionLabels.DELETE,disable:this.getDisableDesc.bind(this)}],this.permissions.configOpt.read&&this.configurationService.get("mon_allow_pool_delete").subscribe(R=>{if(g().has(R,"value")){const u=g().find(R.value,A=>"mon"===A.section)||{value:!1};this.monAllowPoolDelete="true"===u.value}})}ngOnInit(){const _=(o,n,s)=>g().get(n,o)>g().get(s,o)?1:-1;this.columns=[{prop:"pool_name",name:"Name",flexGrow:4,cellTransformation:L.e.executing},{prop:"data_protection",name:"Data Protection",cellTransformation:L.e.badge,customTemplateConfig:{class:"badge-background-gray"},flexGrow:1.3},{prop:"application_metadata",name:"Applications",cellTransformation:L.e.badge,customTemplateConfig:{class:"badge-background-primary"},flexGrow:1.5},{prop:"pg_status",name:"PG Status",flexGrow:1.2,cellClass:({row:o,column:n,value:s})=>this.getPgStatusCellClass(o,n,s)},{prop:"crush_rule",name:"Crush Ruleset",isHidden:!0,flexGrow:2},{name:"Usage",prop:"usage",cellTemplate:this.poolUsageTpl,flexGrow:1.2},{prop:"stats.rd_bytes.rates",name:"Read bytes",comparator:(o,n,s,c)=>_("stats.rd_bytes.latest",s,c),cellTransformation:L.e.sparkline,flexGrow:1.5},{prop:"stats.wr_bytes.rates",name:"Write bytes",comparator:(o,n,s,c)=>_("stats.wr_bytes.latest",s,c),cellTransformation:L.e.sparkline,flexGrow:1.5},{prop:"stats.rd.rate",name:"Read ops",flexGrow:1,pipe:this.dimlessPipe,cellTransformation:L.e.perSecond},{prop:"stats.wr.rate",name:"Write ops",flexGrow:1,pipe:this.dimlessPipe,cellTransformation:L.e.perSecond}],this.taskListService.init(()=>this.ecpService.list().pipe((0,Vt.zg)(o=>(this.ecProfileList=o,this.poolService.getList()))),void 0,o=>{this.pools=this.transformPoolsData(o),this.tableStatus=new Te.E},()=>{this.table.reset(),this.tableStatus=new Te.E(jt.T.ValueException)},o=>o.name.startsWith("pool/"),(o,n)=>n.metadata.pool_name===o.pool_name,{default:o=>new ei(o.pool_name)})}updateSelection(_){this.selection=_}deletePoolModal(){const _=this.selection.first().pool_name;this.modalService.show(Fe.M,{itemDescription:"Pool",itemNames:[_],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new I.R(`pool/${M.MQ.DELETE}`,{pool_name:_}),call:this.poolService.delete(_)})})}getPgStatusCellClass(_,o,n){return{"text-right":!0,[`pg-${this.pgCategoryService.getTypeByStates(n)}`]:!0}}getErasureCodeProfile(_){let o="";return g().forEach(this.ecProfileList,n=>{n.name===_&&(o=`EC: ${n.k}+${n.m}`)}),o}transformPoolsData(_){const o=["bytes_used","max_avail","avail_raw","percent_used","rd_bytes","wr_bytes","rd","wr"],n={latest:0,rate:0,rates:[]};return g().forEach(_,s=>{s.pg_status=this.transformPgStatus(s.pg_status);const c={};g().forEach(o,d=>{c[d]=s.stats&&s.stats[d]?s.stats[d]:n}),s.stats=c,s.usage=c.percent_used.latest,!s.cdExecuting&&s.pg_num+s.pg_placement_num!==s.pg_num_target+s.pg_placement_num_target&&(s.cdExecuting="Updating"),["rd_bytes","wr_bytes"].forEach(d=>{s.stats[d].rates=s.stats[d].rates.map(f=>f[1])}),s.cdIsBinary=!0,"erasure"===s.type&&(s.data_protection=this.getErasureCodeProfile(s.erasure_code_profile)),"replicated"===s.type&&(s.data_protection=`replica: \xd7${s.size}`)}),_}transformPgStatus(_){const o=[];return g().forEach(_,(n,s)=>{o.push(`${n} ${s}`)}),o.join(", ")}getSelectionTiers(){if(void 0!==this.expandedRow){const _=this.expandedRow.tiers;this.cacheTiers=this.pools.filter(o=>_.includes(o.pool))}}getDisableDesc(){var _;return!(null===(_=this.selection)||void 0===_?void 0:_.hasSelection)||!this.monAllowPoolDelete&&"Pool deletion is disabled by the mon_allow_pool_delete configuration setting."}setExpandedRow(_){super.setExpandedRow(_),this.getSelectionTiers()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ue.q),e.Y36(de.P),e.Y36(Me),e.Y36(Ze.j),e.Y36(qe.j),e.Y36(De.Z),e.Y36(Yt.j),e.Y36(Wt.n),e.Y36(Se.F),e.Y36(_i.e),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-list"]],viewQuery:function(_,o){if(1&_&&(e.Gf(he.a,5),e.Gf(Pi,7),e.Gf(Ei,5)),2&_){let n;e.iGM(n=e.CRH())&&(o.table=n.first),e.iGM(n=e.CRH())&&(o.poolUsageTpl=n.first),e.iGM(n=e.CRH())&&(o.poolConfigurationSourceTpl=n.first)}},features:[e._Bn([qe.j,{provide:Se.F,useValue:new Se.F("pool")}]),e.qOj],decls:10,vars:2,consts:function(){let i,_;return i="Pools List",_="Overall Performance",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["poolUsageTpl",""],["id","pool-list","selectionType","single",3,"data","columns","hasDetails","status","autoReload","fetchData","setExpandedRow","updateSelection"],["table",""],["id","pool-list-actions",1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","","id","pool-list-details",3,"selection","permissions","cacheTiers"],_,["uid","z99hzWtmk","grafanaStyle","two",3,"grafanaPath"],["decimals","2",3,"total","used",4,"ngIf"],["decimals","2",3,"total","used"]]},template:function(_,o){if(1&_&&(e.TgZ(0,"ul",0,1),e.TgZ(2,"li",2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,gi,4,11,"ng-template",5),e.qZA(),e.YNc(6,mi,4,0,"li",6),e.qZA(),e._UZ(7,"div",7),e.YNc(8,Ci,1,1,"ng-template",null,8,e.W1O)),2&_){const n=e.MAs(1);e.xp6(6),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngbNavOutlet",n)}},directives:[E.Pz,E.nv,E.Vx,E.uN,C.O5,E.tO,he.a,oi.K,ui,Ge.F,fi.O],styles:["cd-pool-list .pg-clean{color:#0b0} cd-pool-list .pg-working{color:#2b99a8} cd-pool-list .pg-warning{color:#ffc200} cd-pool-list .pg-unknown{color:#ef5c55}"]}),t})(),ze=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[u_.t,C.ez,E.Oz,O_.m,Oe.Bz,a.UX,E.HK,d_.BlockModule]]}),t})();const Ti=[{path:"",component:Mi},{path:M.MQ.CREATE,component:Ue,data:{breadcrumbs:M.Qn.CREATE}},{path:`${M.MQ.EDIT}/:name`,component:Ue,data:{breadcrumbs:M.Qn.EDIT}}];let hi=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[ze,Oe.Bz.forChild(Ti)]]}),t})()}}]); \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/281.0d0cd268ddc6a6760dd4.js b/src/pybind/mgr/dashboard/frontend/dist/en-US/281.0d0cd268ddc6a6760dd4.js new file mode 100644 index 000000000..84a069270 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/281.0d0cd268ddc6a6760dd4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[281],{59281:(si,Oe,r)=>{r.r(Oe),r.d(Oe,{RgwModule:()=>e_,RoutedRgwModule:()=>ii});var f=r(12057),a=r(24751),w=r(6283),M=r(38549),Ue=r(37496),A=r(79512),N_=r(44466),O_=r(66265),U_=r(23815),u=r.n(U_),Y=r(35758),Me=r(95152),We=r(33394),Ze=r(64762),$e=r(58497),me=r(25917),he=r(19773),W_=r(96736),Z_=r(5304),ge=r(20523),$_=r(93523),e=r(74788);let O=class{constructor(o,_){this.http=o,this.rgwDaemonService=_,this.url="api/rgw/user"}list(){return this.enumerate().pipe((0,he.zg)(o=>o.length>0?(0,Y.D)(o.map(_=>this.get(_))):(0,me.of)([])))}enumerate(){return this.rgwDaemonService.request(o=>this.http.get(this.url,{params:o}))}enumerateEmail(){return this.rgwDaemonService.request(o=>this.http.get(`${this.url}/get_emails`,{params:o}))}get(o){return this.rgwDaemonService.request(_=>this.http.get(`${this.url}/${o}`,{params:_}))}getQuota(o){return this.rgwDaemonService.request(_=>this.http.get(`${this.url}/${o}/quota`,{params:_}))}create(o){return this.rgwDaemonService.request(_=>(u().keys(o).forEach(n=>{_=_.append(n,o[n])}),this.http.post(this.url,null,{params:_})))}update(o,_){return this.rgwDaemonService.request(n=>(u().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.put(`${this.url}/${o}`,null,{params:n})))}updateQuota(o,_){return this.rgwDaemonService.request(n=>(u().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.put(`${this.url}/${o}/quota`,null,{params:n})))}delete(o){return this.rgwDaemonService.request(_=>this.http.delete(`${this.url}/${o}`,{params:_}))}createSubuser(o,_){return this.rgwDaemonService.request(n=>(u().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.post(`${this.url}/${o}/subuser`,null,{params:n})))}deleteSubuser(o,_){return this.rgwDaemonService.request(n=>this.http.delete(`${this.url}/${o}/subuser/${_}`,{params:n}))}addCapability(o,_,n){return this.rgwDaemonService.request(i=>(i=(i=i.append("type",_)).append("perm",n),this.http.post(`${this.url}/${o}/capability`,null,{params:i})))}deleteCapability(o,_,n){return this.rgwDaemonService.request(i=>(i=(i=i.append("type",_)).append("perm",n),this.http.delete(`${this.url}/${o}/capability`,{params:i})))}addS3Key(o,_){return this.rgwDaemonService.request(n=>(n=n.append("key_type","s3"),u().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.post(`${this.url}/${o}/key`,null,{params:n})))}deleteS3Key(o,_){return this.rgwDaemonService.request(n=>(n=(n=n.append("key_type","s3")).append("access_key",_),this.http.delete(`${this.url}/${o}/key`,{params:n})))}exists(o){return this.get(o).pipe((0,W_.h)(!0),(0,Z_.K)(_=>(u().isFunction(_.preventDefault)&&_.preventDefault(),(0,me.of)(!1))))}emailExists(o){return o=decodeURIComponent(o),this.enumerateEmail().pipe((0,he.zg)(_=>{const n=u().indexOf(_,o);return(0,me.of)(-1!==n)}))}};O.\u0275fac=function(o){return new(o||O)(e.LFG($e.eN),e.LFG(ge.b))},O.\u0275prov=e.Yz7({token:O,factory:O.\u0275fac,providedIn:"root"}),O=(0,Ze.gn)([$_.o,(0,Ze.w6)("design:paramtypes",[$e.eN,ge.b])],O);var D=r(65862),Ae=r(18001),Ie=r(93614),m=r(77205),ve=r(97161),k=(()=>{return(t=k||(k={})).ENABLED="Enabled",t.DISABLED="Disabled",k;var t})(),B=(()=>{return(t=B||(B={})).ENABLED="Enabled",t.SUSPENDED="Suspended",B;var t})(),J=r(62862),Fe=r(63622),V=r(41582),H=r(56310),q=r(87925),X=r(94276),j=r(82945),h_=r(18372),ee=r(30839),K=r(10545);function I_(t,o){1&t&&(e.TgZ(0,"div",9),e.TgZ(1,"label",35),e.SDv(2,36),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",37),e.qZA(),e.qZA())}function v_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,39),e.qZA())}function F_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,40),e.qZA())}function L_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,41),e.qZA())}function D_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,42),e.qZA())}function x_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,43),e.qZA())}function y_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,44),e.qZA())}function q_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,45),e.qZA())}function w_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,46),e.qZA())}function k_(t,o){1&t&&(e.TgZ(0,"option",47),e.SDv(1,48),e.qZA()),2&t&&e.Q6J("ngValue",null)}function B_(t,o){1&t&&(e.TgZ(0,"option",47),e.SDv(1,49),e.qZA()),2&t&&e.Q6J("ngValue",null)}function H_(t,o){if(1&t&&(e.TgZ(0,"option",50),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function X_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,51),e.qZA())}function K_(t,o){1&t&&(e.TgZ(0,"option",47),e.SDv(1,53),e.qZA()),2&t&&e.Q6J("ngValue",null)}function z_(t,o){1&t&&(e.TgZ(0,"option",47),e.SDv(1,54),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Q_(t,o){if(1&t&&(e.TgZ(0,"option",50),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_.name),e.xp6(1),e.Oqu(_.description)}}function Y_(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,55),e.qZA())}function J_(t,o){if(1&t&&(e.TgZ(0,"select",52),e.YNc(1,K_,2,1,"option",18),e.YNc(2,z_,2,1,"option",18),e.YNc(3,Q_,2,2,"option",19),e.qZA(),e.YNc(4,Y_,2,0,"span",14)),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(1),e.Q6J("ngIf",null===n.placementTargets),e.xp6(1),e.Q6J("ngIf",null!==n.placementTargets),e.xp6(1),e.Q6J("ngForOf",n.placementTargets),e.xp6(1),e.Q6J("ngIf",n.bucketForm.showError("placement-target",_,"required"))}}function V_(t,o){1&t&&(e.ynx(0),e._UZ(1,"input",56),e.BQk())}function j_(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset"),e.TgZ(1,"legend",25),e.SDv(2,57),e.qZA(),e.TgZ(3,"div",9),e.TgZ(4,"div",27),e.TgZ(5,"div",28),e.TgZ(6,"input",58),e.NdJ("change",function(){return e.CHM(_),e.oxw(2).setMfaDeleteValidators()}),e.qZA(),e.TgZ(7,"label",59),e.SDv(8,60),e.qZA(),e.TgZ(9,"cd-helper"),e.TgZ(10,"span"),e.SDv(11,61),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}}function et(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,70),e.qZA())}function _t(t,o){if(1&t&&(e.TgZ(0,"div",9),e.TgZ(1,"label",67),e.SDv(2,68),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",69),e.YNc(5,et,2,0,"span",14),e.qZA(),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.bucketForm.showError("mfa-token-serial",_,"required"))}}function tt(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,74),e.qZA())}function nt(t,o){if(1&t&&(e.TgZ(0,"div",9),e.TgZ(1,"label",71),e.SDv(2,72),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",73),e.YNc(5,tt,2,0,"span",14),e.qZA(),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.bucketForm.showError("mfa-token-pin",_,"required"))}}function ot(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset"),e.TgZ(1,"legend",25),e.SDv(2,62),e.qZA(),e.TgZ(3,"div",9),e.TgZ(4,"div",27),e.TgZ(5,"div",28),e.TgZ(6,"input",63),e.NdJ("change",function(){return e.CHM(_),e.oxw(2).setMfaDeleteValidators()}),e.qZA(),e.TgZ(7,"label",64),e.SDv(8,65),e.qZA(),e.TgZ(9,"cd-helper"),e.TgZ(10,"span"),e.SDv(11,66),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(12,_t,6,1,"div",8),e.YNc(13,nt,6,1,"div",8),e.qZA()}if(2&t){const _=e.oxw(2);e.xp6(12),e.Q6J("ngIf",_.areMfaCredentialsRequired()),e.xp6(1),e.Q6J("ngIf",_.areMfaCredentialsRequired())}}function it(t,o){1&t&&(e.TgZ(0,"div",9),e.TgZ(1,"label",75),e.SDv(2,76),e.qZA(),e.TgZ(3,"div",12),e.TgZ(4,"select",77),e.TgZ(5,"option",78),e.SDv(6,79),e.qZA(),e.TgZ(7,"option",80),e.SDv(8,81),e.qZA(),e.qZA(),e.qZA(),e.qZA())}function st(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,86),e.qZA())}function at(t,o){1&t&&(e.TgZ(0,"span",38),e.SDv(1,87),e.qZA())}function rt(t,o){if(1&t&&(e.TgZ(0,"div",9),e.TgZ(1,"label",82),e.ynx(2),e.SDv(3,83),e.BQk(),e.TgZ(4,"cd-helper"),e.SDv(5,84),e.qZA(),e.qZA(),e.TgZ(6,"div",12),e._UZ(7,"input",85),e.YNc(8,st,2,0,"span",14),e.YNc(9,at,2,0,"span",14),e.qZA(),e.qZA()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(8),e.Q6J("ngIf",n.bucketForm.showError("lock_retention_period_days",_,"pattern")),e.xp6(1),e.Q6J("ngIf",n.bucketForm.showError("lock_retention_period_days",_,"lockDays"))}}const Le=function(t){return{required:t}};function lt(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div",1),e.TgZ(1,"form",2,3),e.TgZ(3,"div",4),e.TgZ(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.YNc(9,I_,5,0,"div",8),e.TgZ(10,"div",9),e.TgZ(11,"label",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"div",12),e._UZ(14,"input",13),e.YNc(15,v_,2,0,"span",14),e.YNc(16,F_,2,0,"span",14),e.YNc(17,L_,2,0,"span",14),e.YNc(18,D_,2,0,"span",14),e.YNc(19,x_,2,0,"span",14),e.YNc(20,y_,2,0,"span",14),e.YNc(21,q_,2,0,"span",14),e.YNc(22,w_,2,0,"span",14),e.qZA(),e.qZA(),e.TgZ(23,"div",9),e.TgZ(24,"label",15),e.SDv(25,16),e.qZA(),e.TgZ(26,"div",12),e.TgZ(27,"select",17),e.YNc(28,k_,2,1,"option",18),e.YNc(29,B_,2,1,"option",18),e.YNc(30,H_,2,2,"option",19),e.qZA(),e.YNc(31,X_,2,0,"span",14),e.qZA(),e.qZA(),e.TgZ(32,"div",9),e.TgZ(33,"label",20),e.SDv(34,21),e.qZA(),e.TgZ(35,"div",12),e.YNc(36,J_,5,4,"ng-template",null,22,e.W1O),e.YNc(38,V_,2,0,"ng-container",23),e.qZA(),e.qZA(),e.YNc(39,j_,12,0,"fieldset",24),e.YNc(40,ot,14,2,"fieldset",24),e.TgZ(41,"fieldset"),e.TgZ(42,"legend",25),e.SDv(43,26),e.qZA(),e.TgZ(44,"div",9),e.TgZ(45,"div",27),e.TgZ(46,"div",28),e._UZ(47,"input",29),e.TgZ(48,"label",30),e.SDv(49,31),e.qZA(),e.TgZ(50,"cd-helper"),e.TgZ(51,"span"),e.SDv(52,32),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(53,it,9,0,"div",8),e.YNc(54,rt,10,2,"div",8),e.qZA(),e.qZA(),e.TgZ(55,"div",33),e.TgZ(56,"cd-form-button-panel",34),e.NdJ("submitActionEvent",function(){return e.CHM(_),e.oxw().submit()}),e.ALo(57,"titlecase"),e.ALo(58,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&t){const _=e.MAs(2),n=e.MAs(37),i=e.oxw();e.xp6(1),e.Q6J("formGroup",i.bucketForm),e.xp6(6),e.pQV(e.lcZ(6,29,i.action))(e.lcZ(7,31,i.resource)),e.QtT(5),e.xp6(2),e.Q6J("ngIf",i.editing),e.xp6(2),e.Q6J("ngClass",e.VKq(37,Le,!i.editing)),e.xp6(3),e.Q6J("readonly",i.editing)("autofocus",!i.editing),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"required")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"bucketNameInvalid")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"bucketNameNotAllowed")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"containsUpperCase")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"lowerCaseOrNumber")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"ipAddress")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"onlyLowerCaseAndNumbers")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"shouldBeInRange")),e.xp6(5),e.Q6J("autofocus",i.editing),e.xp6(1),e.Q6J("ngIf",null===i.owners),e.xp6(1),e.Q6J("ngIf",null!==i.owners),e.xp6(1),e.Q6J("ngForOf",i.owners),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("owner",_,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(39,Le,!i.editing)),e.xp6(5),e.Q6J("ngIf",i.editing)("ngIfElse",n),e.xp6(1),e.Q6J("ngIf",i.editing),e.xp6(1),e.Q6J("ngIf",i.editing),e.xp6(13),e.Q6J("ngIf",i.bucketForm.getValue("lock_enabled")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.getValue("lock_enabled")),e.xp6(2),e.Q6J("form",i.bucketForm)("submitText",e.lcZ(57,33,i.action)+" "+e.lcZ(58,35,i.resource))}}let De=(()=>{class t extends Ie.E{constructor(_,n,i,s,c,d,E,g){super(),this.route=_,this.router=n,this.formBuilder=i,this.rgwBucketService=s,this.rgwSiteService=c,this.rgwUserService=d,this.notificationService=E,this.actionLabels=g,this.editing=!1,this.owners=null,this.placementTargets=[],this.isVersioningAlreadyEnabled=!1,this.isMfaDeleteAlreadyEnabled=!1,this.icons=D.P,this.editing=this.router.url.startsWith(`/rgw/bucket/${A.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource="bucket",this.createForm()}get isVersioningEnabled(){return this.bucketForm.getValue("versioning")}get isMfaDeleteEnabled(){return this.bucketForm.getValue("mfa-delete")}createForm(){const _=this,n=m.h.custom("lockDays",()=>{if(!_.bucketForm||!u().get(_.bucketForm.getRawValue(),"lock_enabled"))return!1;const i=Number(_.bucketForm.getValue("lock_retention_period_days"));return!Number.isInteger(i)||0===i});this.bucketForm=this.formBuilder.group({id:[null],bid:[null,[a.kI.required],this.editing?[]:[m.h.bucketName(),m.h.bucketExistence(!1,this.rgwBucketService)]],owner:[null,[a.kI.required]],"placement-target":[null,this.editing?[]:[a.kI.required]],versioning:[null],"mfa-delete":[null],"mfa-token-serial":[""],"mfa-token-pin":[""],lock_enabled:[{value:!1,disabled:this.editing}],lock_mode:["COMPLIANCE"],lock_retention_period_days:[0,[m.h.number(!1),n]]})}ngOnInit(){const _={owners:this.rgwUserService.enumerate()};this.editing||(_.getPlacementTargets=this.rgwSiteService.get("placement-targets")),this.route.params.subscribe(n=>{if(n.hasOwnProperty("bid")){const i=decodeURIComponent(n.bid);_.getBid=this.rgwBucketService.get(i)}(0,Y.D)(_).subscribe(i=>{if(this.owners=i.owners.sort(),i.getPlacementTargets){const s=i.getPlacementTargets;this.zonegroup=s.zonegroup,u().forEach(s.placement_targets,c=>{c.description=`${c.name} (${"pool"}: ${c.data_pool})`,this.placementTargets.push(c)}),1===this.placementTargets.length&&this.bucketForm.get("placement-target").setValue(this.placementTargets[0].name)}if(i.getBid){const s=i.getBid,c=u().clone(this.bucketForm.getRawValue());let d=u().pick(s,u().keys(c));d.lock_retention_period_days=this.rgwBucketService.getLockDays(s),d["placement-target"]=s.placement_rule,d.versioning=s.versioning===B.ENABLED,d["mfa-delete"]=s.mfa_delete===k.ENABLED,d=u().merge(c,d),this.bucketForm.setValue(d),this.editing&&(this.isVersioningAlreadyEnabled=this.isVersioningEnabled,this.isMfaDeleteAlreadyEnabled=this.isMfaDeleteEnabled,this.setMfaDeleteValidators(),d.lock_enabled&&this.bucketForm.controls.versioning.disable())}this.loadingReady()})})}goToListView(){this.router.navigate(["/rgw/bucket"])}submit(){if(this.bucketForm.pristine)return void this.goToListView();const _=this.bucketForm.value;if(this.editing){const n=this.getVersioningStatus(),i=this.getMfaDeleteStatus();this.rgwBucketService.update(_.bid,_.id,_.owner,n,i,_["mfa-token-serial"],_["mfa-token-pin"],_.lock_mode,_.lock_retention_period_days).subscribe(()=>{this.notificationService.show(Ae.k.success,"Updated Object Gateway bucket '" + _.bid + "'."),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}else this.rgwBucketService.create(_.bid,_.owner,this.zonegroup,_["placement-target"],_.lock_enabled,_.lock_mode,_.lock_retention_period_days).subscribe(()=>{this.notificationService.show(Ae.k.success,"Created Object Gateway bucket '" + _.bid + "'"),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}areMfaCredentialsRequired(){return this.isMfaDeleteEnabled!==this.isMfaDeleteAlreadyEnabled||this.isMfaDeleteAlreadyEnabled&&this.isVersioningEnabled!==this.isVersioningAlreadyEnabled}setMfaDeleteValidators(){const _=this.bucketForm.get("mfa-token-serial"),n=this.bucketForm.get("mfa-token-pin");this.areMfaCredentialsRequired()?(_.setValidators(a.kI.required),n.setValidators(a.kI.required)):(_.setValidators(null),n.setValidators(null)),_.updateValueAndValidity(),n.updateValueAndValidity()}getVersioningStatus(){return this.isVersioningEnabled?B.ENABLED:B.SUSPENDED}getMfaDeleteStatus(){return this.isMfaDeleteEnabled?k.ENABLED:k.DISABLED}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(w.gz),e.Y36(w.F0),e.Y36(J.O),e.Y36(Me.o),e.Y36(We.I),e.Y36(O),e.Y36(ve.g),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let o,_,n,i,s,c,d,E,g,C,b,P,G,N,p,U,W,Z,$,h,I,v,F,T,x,y,S,_e,te,ne,oe,ie,se,ae,re,le,ce,de,ue,Re;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",n="Name...",i="Owner",s="Placement target",c="Locking",d="Enabled",E="Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.",g="Id",C="This field is required.",b="Bucket names can only contain lowercase letters, numbers, periods and hyphens.",P="The chosen name is already in use.",G="Bucket names must not contain uppercase characters or underscores.",N="Each label must start and end with a lowercase letter or a number.",p="Bucket names cannot be formatted as IP address.",U="Bucket labels cannot be empty and can only contain lowercase letters, numbers and hyphens.",W="Bucket names must be 3 to 63 characters long.",Z="Loading...",$="-- Select a user --",h="This field is required.",I="Loading...",v="-- Select a placement target --",F="This field is required.",T="Versioning",x="Enabled",y="Enables versioning for the objects in the bucket.",S="Multi-Factor Authentication",_e="Delete enabled",te="Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.",ne="Token Serial Number",oe="This field is required.",ie="Token PIN",se="This field is required.",ae="Mode",re="Compliance",le="Governance",ce="Days",de="The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.",ue="The entered value must be a positive integer.",Re="Retention Days must be a positive integer.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","bucketForm","novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],o,[1,"card-body"],["class","form-group row",4,"ngIf"],[1,"form-group","row"],["for","bid",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","bid","name","bid","type","text","placeholder",n,"formControlName","bid",1,"form-control",3,"readonly","autofocus"],["class","invalid-feedback",4,"ngIf"],["for","owner",1,"cd-col-form-label","required"],i,["id","owner","name","owner","formControlName","owner",1,"form-control",3,"autofocus"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["for","placement-target",1,"cd-col-form-label",3,"ngClass"],s,["placementTargetSelect",""],[4,"ngIf","ngIfElse"],[4,"ngIf"],[1,"cd-header"],c,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","lock_enabled","formControlName","lock_enabled","type","checkbox",1,"custom-control-input"],["for","lock_enabled",1,"custom-control-label"],d,E,[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["for","id",1,"cd-col-form-label"],g,["id","id","name","id","type","text","formControlName","id","readonly","",1,"form-control"],[1,"invalid-feedback"],C,b,P,G,N,p,U,W,[3,"ngValue"],Z,$,[3,"value"],h,["id","placement-target","name","placement-target","formControlName","placement-target",1,"form-control"],I,v,F,["id","placement-target","name","placement-target","formControlName","placement-target","type","text","readonly","",1,"form-control"],T,["type","checkbox","id","versioning","name","versioning","formControlName","versioning",1,"custom-control-input",3,"change"],["for","versioning",1,"custom-control-label"],x,y,S,["type","checkbox","id","mfa-delete","name","mfa-delete","formControlName","mfa-delete",1,"custom-control-input",3,"change"],["for","mfa-delete",1,"custom-control-label"],_e,te,["for","mfa-token-serial",1,"cd-col-form-label"],ne,["type","text","id","mfa-token-serial","name","mfa-token-serial","formControlName","mfa-token-serial",1,"form-control"],oe,["for","mfa-token-pin",1,"cd-col-form-label"],ie,["type","text","id","mfa-token-pin","name","mfa-token-pin","formControlName","mfa-token-pin",1,"form-control"],se,["for","lock_mode",1,"cd-col-form-label"],ae,["formControlName","lock_mode","name","lock_mode","id","lock_mode",1,"form-control"],["value","COMPLIANCE"],re,["value","GOVERNANCE"],le,["for","lock_retention_period_days",1,"cd-col-form-label"],ce,de,["type","number","id","lock_retention_period_days","formControlName","lock_retention_period_days","min","0",1,"form-control"],ue,Re]},template:function(_,n){1&_&&e.YNc(0,lt,59,41,"div",0),2&_&&e.Q6J("cdFormLoading",n.loading)},directives:[Fe.y,a._Y,a.JL,V.V,a.sg,f.O5,H.P,f.mk,q.o,a.Fj,X.b,a.JJ,a.u,j.U,a.EJ,f.sg,a.Wl,h_.S,ee.p,a.YN,a.Kr,a.wV,a.qQ],pipes:[f.rS,K.m],styles:[""]}),t})();var xe=r(18891),be=r(68136),ye=r(30982),z=r(35905),Pe=r(68774),qe=r(47557),we=r(66369),Q=r(51847),Ee=r(74937),Te=r(63285),ke=r(94928),ct=r(96102),Be=r(68962);function dt(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,24),e.qZA())}function ut(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimless"),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.selection.bucket_quota.max_size)," ")}}function Rt(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,25),e.qZA())}function gt(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.hij(" ",_.selection.bucket_quota.max_objects," ")}}function Et(t,o){if(1&t&&(e.TgZ(0,"div"),e.TgZ(1,"legend"),e.SDv(2,20),e.qZA(),e.TgZ(3,"table",1),e.TgZ(4,"tbody"),e.TgZ(5,"tr"),e.TgZ(6,"td",2),e.SDv(7,21),e.qZA(),e.TgZ(8,"td",4),e._uU(9),e.ALo(10,"booleanText"),e.qZA(),e.qZA(),e.TgZ(11,"tr"),e.TgZ(12,"td",5),e.SDv(13,22),e.qZA(),e.YNc(14,dt,2,0,"td",0),e.YNc(15,ut,3,3,"td",0),e.qZA(),e.TgZ(16,"tr"),e.TgZ(17,"td",5),e.SDv(18,23),e.qZA(),e.YNc(19,Rt,2,0,"td",0),e.YNc(20,gt,2,1,"td",0),e.qZA(),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw(2);e.xp6(9),e.Oqu(e.lcZ(10,5,_.selection.bucket_quota.enabled)),e.xp6(5),e.Q6J("ngIf",_.selection.bucket_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",_.selection.bucket_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota.max_objects>-1)}}function Tt(t,o){if(1&t&&(e.ynx(0),e.TgZ(1,"tr"),e.TgZ(2,"td",5),e.SDv(3,26),e.qZA(),e.TgZ(4,"td"),e._uU(5),e.qZA(),e.qZA(),e.TgZ(6,"tr"),e.TgZ(7,"td",5),e.SDv(8,27),e.qZA(),e.TgZ(9,"td"),e._uU(10),e.qZA(),e.qZA(),e.BQk()),2&t){const _=e.oxw(2);e.xp6(5),e.Oqu(_.selection.lock_mode),e.xp6(5),e.Oqu(_.selection.lock_retention_period_days)}}function St(t,o){if(1&t&&(e.ynx(0),e.TgZ(1,"table",1),e.TgZ(2,"tbody"),e.TgZ(3,"tr"),e.TgZ(4,"td",2),e.SDv(5,3),e.qZA(),e.TgZ(6,"td",4),e._uU(7),e.qZA(),e.qZA(),e.TgZ(8,"tr"),e.TgZ(9,"td",5),e.SDv(10,6),e.qZA(),e.TgZ(11,"td"),e._uU(12),e.qZA(),e.qZA(),e.TgZ(13,"tr"),e.TgZ(14,"td",5),e.SDv(15,7),e.qZA(),e.TgZ(16,"td"),e._uU(17),e.qZA(),e.qZA(),e.TgZ(18,"tr"),e.TgZ(19,"td",5),e.SDv(20,8),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.qZA(),e.qZA(),e.TgZ(23,"tr"),e.TgZ(24,"td",5),e.SDv(25,9),e.qZA(),e.TgZ(26,"td"),e._uU(27),e.qZA(),e.qZA(),e.TgZ(28,"tr"),e.TgZ(29,"td",5),e.SDv(30,10),e.qZA(),e.TgZ(31,"td"),e._uU(32),e.qZA(),e.qZA(),e.TgZ(33,"tr"),e.TgZ(34,"td",5),e.SDv(35,11),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.qZA(),e.qZA(),e.TgZ(38,"tr"),e.TgZ(39,"td",5),e.SDv(40,12),e.qZA(),e.TgZ(41,"td"),e._uU(42),e.qZA(),e.qZA(),e.TgZ(43,"tr"),e.TgZ(44,"td",5),e.SDv(45,13),e.qZA(),e.TgZ(46,"td"),e._uU(47),e.qZA(),e.qZA(),e.TgZ(48,"tr"),e.TgZ(49,"td",5),e.SDv(50,14),e.qZA(),e.TgZ(51,"td"),e._uU(52),e.ALo(53,"cdDate"),e.qZA(),e.qZA(),e.TgZ(54,"tr"),e.TgZ(55,"td",5),e.SDv(56,15),e.qZA(),e.TgZ(57,"td"),e._uU(58),e.qZA(),e.qZA(),e.TgZ(59,"tr"),e.TgZ(60,"td",5),e.SDv(61,16),e.qZA(),e.TgZ(62,"td"),e._uU(63),e.qZA(),e.qZA(),e.TgZ(64,"tr"),e.TgZ(65,"td",5),e.SDv(66,17),e.qZA(),e.TgZ(67,"td"),e._uU(68),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(69,Et,21,7,"div",0),e.TgZ(70,"legend"),e.SDv(71,18),e.qZA(),e.TgZ(72,"table",1),e.TgZ(73,"tbody"),e.TgZ(74,"tr"),e.TgZ(75,"td",2),e.SDv(76,19),e.qZA(),e.TgZ(77,"td",4),e._uU(78),e.ALo(79,"booleanText"),e.qZA(),e.qZA(),e.YNc(80,Tt,11,2,"ng-container",0),e.qZA(),e.qZA(),e.BQk()),2&t){const _=e.oxw();e.xp6(7),e.Oqu(_.selection.bid),e.xp6(5),e.Oqu(_.selection.id),e.xp6(5),e.Oqu(_.selection.owner),e.xp6(5),e.Oqu(_.selection.index_type),e.xp6(5),e.Oqu(_.selection.placement_rule),e.xp6(5),e.Oqu(_.selection.marker),e.xp6(5),e.Oqu(_.selection.max_marker),e.xp6(5),e.Oqu(_.selection.ver),e.xp6(5),e.Oqu(_.selection.master_ver),e.xp6(5),e.Oqu(e.lcZ(53,16,_.selection.mtime)),e.xp6(6),e.Oqu(_.selection.zonegroup),e.xp6(5),e.Oqu(_.selection.versioning),e.xp6(5),e.Oqu(_.selection.mfa_delete),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota),e.xp6(9),e.Oqu(e.lcZ(79,18,_.selection.lock_enabled)),e.xp6(2),e.Q6J("ngIf",_.selection.lock_enabled)}}let ft=(()=>{class t{constructor(_){this.rgwBucketService=_}ngOnChanges(){this.selection&&this.rgwBucketService.get(this.selection.bid).subscribe(_=>{_.lock_retention_period_days=this.rgwBucketService.getLockDays(_),this.selection=_})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Me.o))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let o,_,n,i,s,c,d,E,g,C,b,P,G,N,p,U,W,Z,$,h,I,v,F;return o="Name",_="ID",n="Owner",i="Index type",s="Placement rule",c="Marker",d="Maximum marker",E="Version",g="Master version",C="Modification time",b="Zonegroup",P="Versioning",G="MFA Delete",N="Locking",p="Enabled",U="Bucket quota",W="Enabled",Z="Maximum size",$="Maximum objects",h="Unlimited",I="Unlimited",v="Mode",F="Days",[[4,"ngIf"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],o,[1,"w-75"],[1,"bold"],_,n,i,s,c,d,E,g,C,b,P,G,N,p,U,W,Z,$,h,I,v,F]},template:function(_,n){1&_&&e.YNc(0,St,81,20,"ng-container",0),2&_&&e.Q6J("ngIf",n.selection)},directives:[f.O5],pipes:[ct.N,Be.T,we.n],styles:["table[_ngcontent-%COMP%]{table-layout:fixed}table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{word-wrap:break-word}"]}),t})();var He=r(60251);const Ct=["bucketSizeTpl"],pt=["bucketObjectTpl"];function Mt(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",8),2&t){const _=e.oxw().row;e.Q6J("total",_.bucket_quota.max_size)("used",_.bucket_size)}}function mt(t,o){1&t&&e.SDv(0,9)}function At(t,o){if(1&t&&(e.YNc(0,Mt,1,2,"cd-usage-bar",6),e.YNc(1,mt,1,0,"ng-template",null,7,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.bucket_quota.max_size>0&&_.bucket_quota.enabled)("ngIfElse",n)}}function bt(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",12),2&t){const _=e.oxw().row;e.Q6J("total",_.bucket_quota.max_objects)("used",_.num_objects)("isBinary",!1)}}function Pt(t,o){1&t&&e.SDv(0,13)}function Gt(t,o){if(1&t&&(e.YNc(0,bt,1,3,"cd-usage-bar",10),e.YNc(1,Pt,1,0,"ng-template",null,11,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.bucket_quota.max_objects>0&&_.bucket_quota.enabled)("ngIfElse",n)}}let Ot=(()=>{class t extends be.o{constructor(_,n,i,s,c,d,E,g){super(g),this.authStorageService=_,this.dimlessBinaryPipe=n,this.dimlessPipe=i,this.rgwBucketService=s,this.modalService=c,this.urlBuilder=d,this.actionLabels=E,this.ngZone=g,this.columns=[],this.buckets=[],this.selection=new Pe.r}ngOnInit(){this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:"Name",prop:"bid",flexGrow:2},{name:"Owner",prop:"owner",flexGrow:2.5},{name:"Used Capacity",prop:"bucket_size",flexGrow:.6,pipe:this.dimlessBinaryPipe},{name:"Capacity Limit %",prop:"size_usage",cellTemplate:this.bucketSizeTpl,flexGrow:.8},{name:"Objects",prop:"num_objects",flexGrow:.6,pipe:this.dimlessPipe},{name:"Object Limit %",prop:"object_usage",cellTemplate:this.bucketObjectTpl,flexGrow:.8}];const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().bid)}`;this.tableActions=[{permission:"create",icon:D.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:c=>!c.hasSelection},{permission:"update",icon:D.P.edit,routerLink:()=>this.urlBuilder.getEdit(_()),name:this.actionLabels.EDIT},{permission:"delete",icon:D.P.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:c=>c.hasMultiSelection}],this.setTableRefreshTimeout()}transformBucketData(){u().forEach(this.buckets,_=>{const n=_.bucket_quota.max_size,i=_.bucket_quota.max_objects;_.bucket_size=0,_.num_objects=0,u().isEmpty(_.usage)||(_.bucket_size=_.usage["rgw.main"].size_actual,_.num_objects=_.usage["rgw.main"].num_objects),_.size_usage=n>0?_.bucket_size/n:void 0,_.object_usage=i>0?_.num_objects/i:void 0})}getBucketList(_){this.setTableRefreshTimeout(),this.rgwBucketService.list(!0).subscribe(n=>{this.buckets=n,this.transformBucketData()},()=>{_.error()})}updateSelection(_){this.selection=_}deleteAction(){this.modalService.show(ye.M,{itemDescription:this.selection.hasSingleSelection?"bucket":"buckets",itemNames:this.selection.selected.map(_=>_.bid),submitActionObservable:()=>new xe.y(_=>{(0,Y.D)(this.selection.selected.map(n=>this.rgwBucketService.delete(n.bid))).subscribe({error:n=>{_.error(n),this.table.refreshBtn()},complete:()=>{_.complete(),this.table.refreshBtn()}})})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Ee.j),e.Y36(qe.$),e.Y36(we.n),e.Y36(Me.o),e.Y36(Te.Z),e.Y36(Q.F),e.Y36(A.p4),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-list"]],viewQuery:function(_,n){if(1&_&&(e.Gf(z.a,7),e.Gf(Ct,7),e.Gf(pt,7)),2&_){let i;e.iGM(i=e.CRH())&&(n.table=i.first),e.iGM(i=e.CRH())&&(n.bucketSizeTpl=i.first),e.iGM(i=e.CRH())&&(n.bucketObjectTpl=i.first)}},features:[e._Bn([{provide:Q.F,useValue:new Q.F("rgw/bucket")}]),e.qOj],decls:8,vars:9,consts:function(){let o,_;return o="No Limit",_="No Limit",[["columnMode","flex","selectionType","multiClick","identifier","bid",3,"autoReload","data","columns","hasDetails","status","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["bucketSizeTpl",""],["bucketObjectTpl",""],[3,"total","used",4,"ngIf","ngIfElse"],["noSizeQuota",""],[3,"total","used"],o,[3,"total","used","isBinary",4,"ngIf","ngIfElse"],["noObjectQuota",""],[3,"total","used","isBinary"],_]},template:function(_,n){1&_&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(s){return n.setExpandedRow(s)})("updateSelection",function(s){return n.updateSelection(s)})("fetchData",function(s){return n.getBucketList(s)}),e._UZ(2,"cd-table-actions",2),e._UZ(3,"cd-rgw-bucket-details",3),e.qZA(),e.YNc(4,At,3,2,"ng-template",null,4,e.W1O),e.YNc(6,Gt,3,2,"ng-template",null,5,e.W1O)),2&_&&(e.Q6J("autoReload",!1)("data",n.buckets)("columns",n.columns)("hasDetails",!0)("status",n.tableStatus),e.xp6(2),e.Q6J("permission",n.permission)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("selection",n.expandedRow))},directives:[z.a,ke.K,ft,f.O5,He.O],styles:[""]}),t})();var Ut=r(58111),Xe=r(59376),Wt=r(61350),Zt=r(98056),Ke=r(76317);function $t(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table-key-value",11),e.NdJ("fetchData",function(){return e.CHM(_),e.oxw(2).getMetaData()}),e.qZA()}if(2&t){const _=e.oxw(2);e.Q6J("data",_.metadata)}}function ht(t,o){if(1&t&&e._UZ(0,"cd-table-performance-counter",12),2&t){const _=e.oxw(2);e.Q6J("serviceId",_.serviceMapId)}}function It(t,o){if(1&t&&e._UZ(0,"cd-grafana",15),2&t){const _=e.oxw(3);e.Q6J("grafanaPath","rgw-instance-detail?var-rgw_servers=rgw."+_.serviceId)}}function vt(t,o){1&t&&(e.TgZ(0,"li",13),e.TgZ(1,"a",4),e.SDv(2,14),e.qZA(),e.YNc(3,It,1,1,"ng-template",6),e.qZA())}function Ft(t,o){if(1&t&&(e.ynx(0),e.TgZ(1,"ul",1,2),e.TgZ(3,"li",3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,$t,1,1,"ng-template",6),e.qZA(),e.TgZ(7,"li",7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,ht,1,1,"ng-template",6),e.qZA(),e.YNc(11,vt,4,0,"li",9),e.qZA(),e._UZ(12,"div",10),e.BQk()),2&t){const _=e.MAs(2),n=e.oxw();e.xp6(11),e.Q6J("ngIf",n.grafanaPermission.read),e.xp6(1),e.Q6J("ngbNavOutlet",_)}}let Lt=(()=>{class t{constructor(_,n){this.rgwDaemonService=_,this.authStorageService=n,this.serviceId="",this.serviceMapId="",this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection&&(this.serviceId=this.selection.id,this.serviceMapId=this.selection.service_map_id)}getMetaData(){u().isEmpty(this.serviceId)||this.rgwDaemonService.get(this.serviceId).subscribe(_=>{this.metadata=_.rgw_metadata})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ge.b),e.Y36(Ee.j))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-daemon-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let o,_,n;return o="Details",_="Performance Counters",n="Performance Details",[[4,"ngIf"],["ngbNav","","cdStatefulTab","rgw-daemon-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],o,["ngbNavContent",""],["ngbNavItem","performance-counters"],_,["ngbNavItem","performance-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"data","fetchData"],["serviceType","rgw",3,"serviceId"],["ngbNavItem","performance-details"],n,["uid","x5ARzZtmk","grafanaStyle","one",3,"grafanaPath"]]},template:function(_,n){1&_&&e.YNc(0,Ft,13,2,"ng-container",0),2&_&&e.Q6J("ngIf",n.selection)},directives:[f.O5,M.Pz,Xe.m,M.nv,M.Vx,M.uN,M.tO,Wt.b,Zt.p,Ke.F],styles:[""]}),t})();function Dt(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table",8),e.NdJ("setExpandedRow",function(i){return e.CHM(_),e.oxw().setExpandedRow(i)})("fetchData",function(i){return e.CHM(_),e.oxw().getDaemonList(i)}),e._UZ(1,"cd-rgw-daemon-details",9),e.qZA()}if(2&t){const _=e.oxw();e.Q6J("data",_.daemons)("columns",_.columns)("hasDetails",!0),e.xp6(1),e.Q6J("selection",_.expandedRow)}}function xt(t,o){1&t&&e._UZ(0,"cd-grafana",11),2&t&&e.Q6J("grafanaPath","rgw-overview?")}function yt(t,o){1&t&&(e.TgZ(0,"li",2),e.TgZ(1,"a",3),e.SDv(2,10),e.qZA(),e.YNc(3,xt,1,1,"ng-template",5),e.qZA())}function qt(t,o){1&t&&e._UZ(0,"cd-grafana",13),2&t&&e.Q6J("grafanaPath","radosgw-sync-overview?")}function wt(t,o){1&t&&(e.TgZ(0,"li",2),e.TgZ(1,"a",3),e.SDv(2,12),e.qZA(),e.YNc(3,qt,1,1,"ng-template",5),e.qZA())}let kt=(()=>{class t extends be.o{constructor(_,n,i,s){super(),this.rgwDaemonService=_,this.authStorageService=n,this.cephShortVersionPipe=i,this.rgwSiteService=s,this.columns=[],this.daemons=[],this.updateDaemons=c=>{this.daemons=c}}ngOnInit(){this.grafanaPermission=this.authStorageService.getPermissions().grafana,this.columns=[{name:"ID",prop:"id",flexGrow:2},{name:"Hostname",prop:"server_hostname",flexGrow:2},{name:"Zone",prop:"zone_name",flexGrow:2},{name:"Zone Group",prop:"zonegroup_name",flexGrow:2},{name:"Realm",prop:"realm_name",flexGrow:2},{name:"Version",prop:"version",flexGrow:1,pipe:this.cephShortVersionPipe}],this.rgwSiteService.get("realms").subscribe(_=>this.isMultiSite=_.length>0)}getDaemonList(_){this.rgwDaemonService.list().subscribe(this.updateDaemons,()=>{_.error()})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ge.b),e.Y36(Ee.j),e.Y36(Ut.F),e.Y36(We.I))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-daemon-list"]],features:[e.qOj],decls:9,vars:3,consts:function(){let o,_,n;return o="Daemons List",_="Overall Performance",n="Sync Performance",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],o,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["columnMode","flex",3,"data","columns","hasDetails","setExpandedRow","fetchData"],["cdTableDetail","",3,"selection"],_,["uid","WAkugZpiz","grafanaStyle","two",3,"grafanaPath"],n,["uid","rgw-sync-overview","grafanaStyle","two",3,"grafanaPath"]]},template:function(_,n){if(1&_&&(e.TgZ(0,"ul",0,1),e.TgZ(2,"li",2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,Dt,2,4,"ng-template",5),e.qZA(),e.YNc(6,yt,4,0,"li",6),e.YNc(7,wt,4,0,"li",6),e.qZA(),e._UZ(8,"div",7)),2&_){const i=e.MAs(1);e.xp6(6),e.Q6J("ngIf",n.grafanaPermission.read),e.xp6(1),e.Q6J("ngIf",n.grafanaPermission.read&&n.isMultiSite),e.xp6(1),e.Q6J("ngbNavOutlet",i)}},directives:[M.Pz,M.nv,M.Vx,M.uN,f.O5,M.tO,z.a,Lt,Ke.F],styles:[""]}),t})();var Bt=r(58071),Ge=r(28211),Se=(()=>{return(t=Se||(Se={})).USERS="users",t.BUCKETS="buckets",t.METADATA="metadata",t.USAGE="usage",t.ZONE="zone",Se;var t})();let ze=(()=>{class t{static getAll(){return Object.values(t.capabilities)}}return t.capabilities=Se,t})();var fe=r(60312);function Ht(t,o){1&t&&e._UZ(0,"input",22),2&t&&e.Q6J("readonly",!0)}function Xt(t,o){1&t&&(e.TgZ(0,"option",17),e.SDv(1,25),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Kt(t,o){if(1&t&&(e.TgZ(0,"option",26),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function zt(t,o){if(1&t&&(e.TgZ(0,"select",23),e.YNc(1,Xt,2,1,"option",24),e.YNc(2,Kt,2,2,"option",19),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",null!==_.types),e.xp6(1),e.Q6J("ngForOf",_.types)}}function Qt(t,o){1&t&&(e.TgZ(0,"span",27),e.SDv(1,28),e.qZA())}function Yt(t,o){if(1&t&&(e.TgZ(0,"option",26),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Jt(t,o){1&t&&(e.TgZ(0,"span",27),e.SDv(1,29),e.qZA())}const Vt=function(t){return{required:t}},jt=function(){return["read","write","*"]};let en=(()=>{class t{constructor(_,n,i){this.formBuilder=_,this.activeModal=n,this.actionLabels=i,this.submitAction=new e.vpe,this.editing=!0,this.types=[],this.resource="capability",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({type:[null,[a.kI.required]],perm:[null,[a.kI.required]]})}setEditing(_=!0){this.editing=_,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.ADD}setValues(_,n){this.formGroup.setValue({type:_,perm:n})}setCapabilities(_){const n=[];_.forEach(i=>{n.push(i.type)}),this.types=[],ze.getAll().forEach(i=>{-1===u().indexOf(n,i)&&this.types.push(i)})}onSubmit(){this.submitAction.emit(this.formGroup.value),this.activeModal.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(J.O),e.Y36(M.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-capability-modal"]],outputs:{submitAction:"submitAction"},decls:29,vars:24,consts:function(){let o,_,n,i,s,c,d;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Type",n="Permission",i="-- Select a permission --",s="-- Select a type --",c="This field is required.",d="This field is required.",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","type",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","type","class","form-control","type","text","formControlName","type",3,"readonly",4,"ngIf"],["id","type","class","form-control","formControlName","type","autofocus","",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["for","perm",1,"cd-col-form-label","required"],n,["id","perm","formControlName","perm",1,"form-control"],[3,"ngValue"],i,[3,"value",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["id","type","type","text","formControlName","type",1,"form-control",3,"readonly"],["id","type","formControlName","type","autofocus","",1,"form-control"],[3,"ngValue",4,"ngIf"],s,[3,"value"],[1,"invalid-feedback"],c,d]},template:function(_,n){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5),e.TgZ(8,"div",6),e.TgZ(9,"div",7),e.TgZ(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e.YNc(13,Ht,1,1,"input",11),e.YNc(14,zt,3,2,"select",12),e.YNc(15,Qt,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(16,"div",7),e.TgZ(17,"label",14),e.SDv(18,15),e.qZA(),e.TgZ(19,"div",10),e.TgZ(20,"select",16),e.TgZ(21,"option",17),e.SDv(22,18),e.qZA(),e.YNc(23,Yt,2,2,"option",19),e.qZA(),e.YNc(24,Jt,2,0,"span",13),e.qZA(),e.qZA(),e.qZA(),e.TgZ(25,"div",20),e.TgZ(26,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return n.onSubmit()}),e.ALo(27,"titlecase"),e.ALo(28,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",n.activeModal),e.xp6(4),e.pQV(e.lcZ(3,13,n.action))(e.lcZ(4,15,n.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",n.formGroup),e.xp6(4),e.Q6J("ngClass",e.VKq(21,Vt,!n.editing)),e.xp6(3),e.Q6J("ngIf",n.editing),e.xp6(1),e.Q6J("ngIf",!n.editing),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("type",i,"required")),e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(23,jt)),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("perm",i,"required")),e.xp6(2),e.Q6J("form",n.formGroup)("submitText",e.lcZ(27,17,n.action)+" "+e.lcZ(28,19,n.resource))}},directives:[fe.z,a._Y,a.JL,V.V,a.sg,H.P,f.mk,f.O5,q.o,a.EJ,X.b,a.JJ,a.u,a.YN,a.Kr,f.sg,ee.p,a.Fj,j.U],pipes:[f.rS,K.m],styles:[""]}),t})();var Ce=r(4416),pe=r(58039);function _n(t,o){1&t&&e._UZ(0,"input",17),2&t&&e.Q6J("readonly",!0)}function tn(t,o){1&t&&(e.TgZ(0,"option",21),e.SDv(1,22),e.qZA()),2&t&&e.Q6J("ngValue",null)}function nn(t,o){if(1&t&&(e.TgZ(0,"option",23),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function on(t,o){if(1&t&&(e.TgZ(0,"select",18),e.YNc(1,tn,2,1,"option",19),e.YNc(2,nn,2,2,"option",20),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",null!==_.userCandidates),e.xp6(1),e.Q6J("ngForOf",_.userCandidates)}}function sn(t,o){1&t&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function an(t,o){1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"div",26),e.TgZ(2,"div",27),e._UZ(3,"input",28),e.TgZ(4,"label",29),e.SDv(5,30),e.qZA(),e.qZA(),e.qZA(),e.qZA())}function rn(t,o){1&t&&(e.TgZ(0,"span",24),e.SDv(1,38),e.qZA())}const Ne=function(t){return{required:t}};function ln(t,o){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",31),e.SDv(2,32),e.qZA(),e.TgZ(3,"div",10),e.TgZ(4,"div",33),e._UZ(5,"input",34),e.TgZ(6,"span",35),e._UZ(7,"button",36),e._UZ(8,"cd-copy-2-clipboard-button",37),e.qZA(),e.qZA(),e.YNc(9,rn,2,0,"span",13),e.qZA(),e.qZA()),2&t){const _=e.oxw(),n=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(3,Ne,!_.viewing)),e.xp6(4),e.Q6J("readonly",_.viewing),e.xp6(4),e.Q6J("ngIf",_.formGroup.showError("access_key",n,"required"))}}function cn(t,o){1&t&&(e.TgZ(0,"span",24),e.SDv(1,44),e.qZA())}function dn(t,o){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",39),e.SDv(2,40),e.qZA(),e.TgZ(3,"div",10),e.TgZ(4,"div",33),e._UZ(5,"input",41),e.TgZ(6,"span",35),e._UZ(7,"button",42),e._UZ(8,"cd-copy-2-clipboard-button",43),e.qZA(),e.qZA(),e.YNc(9,cn,2,0,"span",13),e.qZA(),e.qZA()),2&t){const _=e.oxw(),n=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(3,Ne,!_.viewing)),e.xp6(4),e.Q6J("readonly",_.viewing),e.xp6(4),e.Q6J("ngIf",_.formGroup.showError("secret_key",n,"required"))}}let Qe=(()=>{class t{constructor(_,n,i){this.formBuilder=_,this.activeModal=n,this.actionLabels=i,this.submitAction=new e.vpe,this.viewing=!0,this.userCandidates=[],this.resource="S3 Key",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({user:[null,[a.kI.required]],generate_key:[!0],access_key:[null,[m.h.requiredIf({generate_key:!1})]],secret_key:[null,[m.h.requiredIf({generate_key:!1})]]})}setViewing(_=!0){this.viewing=_,this.action=this.viewing?this.actionLabels.SHOW:this.actionLabels.CREATE}setValues(_,n,i){this.formGroup.setValue({user:_,generate_key:u().isEmpty(n),access_key:n,secret_key:i})}setUserCandidates(_){this.userCandidates=_}onSubmit(){this.submitAction.emit(this.formGroup.value),this.activeModal.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(J.O),e.Y36(M.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-s3-key-modal"]],outputs:{submitAction:"submitAction"},decls:23,vars:24,consts:function(){let o,_,n,i,s,c,d,E,g;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",n="-- Select a username --",i="This field is required.",s="Auto-generate key",c="Access key",d="This field is required.",E="Secret key",g="This field is required.",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","user",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","user","class","form-control","type","text","formControlName","user",3,"readonly",4,"ngIf"],["id","user","class","form-control","formControlName","user","autofocus","",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","showSubmit","submitActionEvent"],["id","user","type","text","formControlName","user",1,"form-control",3,"readonly"],["id","user","formControlName","user","autofocus","",1,"form-control"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],n,[3,"value"],[1,"invalid-feedback"],i,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","generate_key","type","checkbox","formControlName","generate_key",1,"custom-control-input"],["for","generate_key",1,"custom-control-label"],s,["for","access_key",1,"cd-col-form-label",3,"ngClass"],c,[1,"input-group"],["id","access_key","type","password","formControlName","access_key",1,"form-control",3,"readonly"],[1,"input-group-append"],["type","button","cdPasswordButton","access_key",1,"btn","btn-light"],["source","access_key"],d,["for","secret_key",1,"cd-col-form-label",3,"ngClass"],E,["id","secret_key","type","password","formControlName","secret_key",1,"form-control",3,"readonly"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],g]},template:function(_,n){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5),e.TgZ(8,"div",6),e.TgZ(9,"div",7),e.TgZ(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e.YNc(13,_n,1,1,"input",11),e.YNc(14,on,3,2,"select",12),e.YNc(15,sn,2,0,"span",13),e.qZA(),e.qZA(),e.YNc(16,an,6,0,"div",14),e.YNc(17,ln,10,5,"div",14),e.YNc(18,dn,10,5,"div",14),e.qZA(),e.TgZ(19,"div",15),e.TgZ(20,"cd-form-button-panel",16),e.NdJ("submitActionEvent",function(){return n.onSubmit()}),e.ALo(21,"titlecase"),e.ALo(22,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",n.activeModal),e.xp6(4),e.pQV(e.lcZ(3,14,n.action))(e.lcZ(4,16,n.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",n.formGroup),e.xp6(4),e.Q6J("ngClass",e.VKq(22,Ne,!n.viewing)),e.xp6(3),e.Q6J("ngIf",n.viewing),e.xp6(1),e.Q6J("ngIf",!n.viewing),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",!n.viewing),e.xp6(1),e.Q6J("ngIf",!n.formGroup.getValue("generate_key")),e.xp6(1),e.Q6J("ngIf",!n.formGroup.getValue("generate_key")),e.xp6(2),e.Q6J("form",n.formGroup)("submitText",e.lcZ(21,18,n.action)+" "+e.lcZ(22,20,n.resource))("showSubmit",!n.viewing)}},directives:[fe.z,a._Y,a.JL,V.V,a.sg,H.P,f.mk,f.O5,ee.p,q.o,a.Fj,X.b,a.JJ,a.u,a.EJ,j.U,f.sg,a.YN,a.Kr,a.Wl,Ce.C,pe.s],pipes:[f.rS,K.m],styles:[""]}),t})();class un{}function Rn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function gn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function En(t,o){if(1&t&&(e.TgZ(0,"option",32),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Tn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,33),e.qZA())}function Sn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,48),e.qZA())}function fn(t,o){if(1&t&&(e.TgZ(0,"div",7),e.TgZ(1,"label",41),e.SDv(2,42),e.qZA(),e.TgZ(3,"div",10),e.TgZ(4,"div",43),e._UZ(5,"input",44),e.TgZ(6,"span",45),e._UZ(7,"button",46),e._UZ(8,"cd-copy-2-clipboard-button",47),e.qZA(),e.qZA(),e.YNc(9,Sn,2,0,"span",15),e.qZA(),e.qZA()),2&t){const _=e.oxw(2),n=e.MAs(7);e.xp6(9),e.Q6J("ngIf",_.formGroup.showError("secret_key",n,"required"))}}function Cn(t,o){if(1&t&&(e.TgZ(0,"fieldset"),e.TgZ(1,"legend"),e.SDv(2,34),e.qZA(),e.TgZ(3,"div",7),e.TgZ(4,"div",35),e.TgZ(5,"div",36),e._UZ(6,"input",37),e.TgZ(7,"label",38),e.SDv(8,39),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(9,fn,10,1,"div",40),e.qZA()),2&t){const _=e.oxw();e.xp6(9),e.Q6J("ngIf",!_.editing&&!_.formGroup.getValue("generate_secret"))}}const pn=function(t){return{required:t}},Mn=function(){return["read","write"]};let mn=(()=>{class t{constructor(_,n,i){this.formBuilder=_,this.bsModalRef=n,this.actionLabels=i,this.submitAction=new e.vpe,this.editing=!0,this.subusers=[],this.resource="Subuser",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({uid:[null],subuid:[null,[a.kI.required,this.subuserValidator()]],perm:[null,[a.kI.required]],generate_secret:[!0],secret_key:[null,[m.h.requiredIf({generate_secret:!1})]]})}subuserValidator(){const _=this;return n=>_.editing||(0,m.P)(n.value)?null:_.subusers.some(s=>u().isEqual(_.getSubuserName(s.id),n.value))?{subuserIdExists:!0}:null}getSubuserName(_){if(u().isEmpty(_))return _;const n=_.match(/([^:]+)(:(.+))?/);return u().isUndefined(n[3])?n[1]:n[3]}setEditing(_=!0){this.editing=_,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE}setValues(_,n="",i=""){this.formGroup.setValue({uid:_,subuid:this.getSubuserName(n),perm:i,generate_secret:!0,secret_key:null})}setSubusers(_){this.subusers=_}onSubmit(){const _=this.formGroup.value,n=new un;n.id=`${_.uid}:${_.subuid}`,n.permissions=_.perm,n.generate_secret=_.generate_secret,n.secret_key=_.secret_key,this.submitAction.emit(n),this.bsModalRef.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(J.O),e.Y36(M.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-subuser-modal"]],outputs:{submitAction:"submitAction"},decls:39,vars:26,consts:function(){let o,_,n,i,s,c,d,E,g,C,b,P,G,N;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",n="Subuser",i="Permission",s="-- Select a permission --",c="read, write",d="full",E="This field is required.",g="The chosen subuser ID is already in use.",C="This field is required.",b="Swift key",P="Auto-generate secret",G="Secret key",N="This field is required.",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","uid",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","uid","type","text","formControlName","uid",1,"form-control",3,"readonly"],["for","subuid",1,"cd-col-form-label",3,"ngClass"],n,["id","subuid","type","text","formControlName","subuid","autofocus","",1,"form-control",3,"readonly"],["class","invalid-feedback",4,"ngIf"],["for","perm",1,"cd-col-form-label","required"],i,["id","perm","formControlName","perm",1,"form-control"],[3,"ngValue"],s,[3,"value",4,"ngFor","ngForOf"],["value","read-write"],c,["value","full-control"],d,[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],E,g,[3,"value"],C,b,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","generate_secret","type","checkbox","formControlName","generate_secret",1,"custom-control-input"],["for","generate_secret",1,"custom-control-label"],P,["class","form-group row",4,"ngIf"],["for","secret_key",1,"cd-col-form-label","required"],G,[1,"input-group"],["id","secret_key","type","password","formControlName","secret_key",1,"form-control"],[1,"input-group-append"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],N]},template:function(_,n){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5),e.TgZ(8,"div",6),e.TgZ(9,"div",7),e.TgZ(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.qZA(),e.qZA(),e.TgZ(14,"div",7),e.TgZ(15,"label",12),e.SDv(16,13),e.qZA(),e.TgZ(17,"div",10),e._UZ(18,"input",14),e.YNc(19,Rn,2,0,"span",15),e.YNc(20,gn,2,0,"span",15),e.qZA(),e.qZA(),e.TgZ(21,"div",7),e.TgZ(22,"label",16),e.SDv(23,17),e.qZA(),e.TgZ(24,"div",10),e.TgZ(25,"select",18),e.TgZ(26,"option",19),e.SDv(27,20),e.qZA(),e.YNc(28,En,2,2,"option",21),e.TgZ(29,"option",22),e.SDv(30,23),e.qZA(),e.TgZ(31,"option",24),e.SDv(32,25),e.qZA(),e.qZA(),e.YNc(33,Tn,2,0,"span",15),e.qZA(),e.qZA(),e.YNc(34,Cn,10,1,"fieldset",26),e.qZA(),e.TgZ(35,"div",27),e.TgZ(36,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return n.onSubmit()}),e.ALo(37,"titlecase"),e.ALo(38,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",n.bsModalRef),e.xp6(4),e.pQV(e.lcZ(3,15,n.action))(e.lcZ(4,17,n.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",n.formGroup),e.xp6(7),e.Q6J("readonly",!0),e.xp6(2),e.Q6J("ngClass",e.VKq(23,pn,!n.editing)),e.xp6(3),e.Q6J("readonly",n.editing),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("subuid",i,"required")),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("subuid",i,"subuserIdExists")),e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(25,Mn)),e.xp6(5),e.Q6J("ngIf",n.formGroup.showError("perm",i,"required")),e.xp6(1),e.Q6J("ngIf",!n.editing),e.xp6(2),e.Q6J("form",n.formGroup)("submitText",e.lcZ(37,19,n.action)+" "+e.lcZ(38,21,n.resource))}},directives:[fe.z,a._Y,a.JL,V.V,a.sg,H.P,q.o,a.Fj,X.b,a.JJ,a.u,f.mk,j.U,f.O5,a.EJ,a.YN,a.Kr,f.sg,ee.p,a.Wl,Ce.C,pe.s],pipes:[f.rS,K.m],styles:[""]}),t})();var An=r(13472);let Ye=(()=>{class t{constructor(_,n){this.activeModal=_,this.actionLabels=n,this.resource="Swift Key",this.action=this.actionLabels.SHOW}setValues(_,n){this.user=_,this.secret_key=n}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(M.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-swift-key-modal"]],decls:24,vars:11,consts:function(){let o,_,n;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",n="Secret key",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],[1,"modal-body"],["novalidate",""],[1,"form-group","row"],["for","user",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","user","name","user","type","text",1,"form-control",3,"readonly","ngModel","ngModelChange"],["for","secret_key",1,"cd-col-form-label"],n,[1,"input-group"],["id","secret_key","name","secret_key","type","password",1,"form-control",3,"ngModel","readonly","ngModelChange"],[1,"input-group-append"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],[1,"modal-footer"],[3,"backAction"]]},template:function(_,n){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"div",4),e.TgZ(7,"form",5),e.TgZ(8,"div",6),e.TgZ(9,"label",7),e.SDv(10,8),e.qZA(),e.TgZ(11,"div",9),e.TgZ(12,"input",10),e.NdJ("ngModelChange",function(s){return n.user=s}),e.qZA(),e.qZA(),e.qZA(),e.TgZ(13,"div",6),e.TgZ(14,"label",11),e.SDv(15,12),e.qZA(),e.TgZ(16,"div",9),e.TgZ(17,"div",13),e.TgZ(18,"input",14),e.NdJ("ngModelChange",function(s){return n.secret_key=s}),e.qZA(),e.TgZ(19,"span",15),e._UZ(20,"button",16),e._UZ(21,"cd-copy-2-clipboard-button",17),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.TgZ(22,"div",18),e.TgZ(23,"cd-back-button",19),e.NdJ("backAction",function(){return n.activeModal.close()}),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&_&&(e.Q6J("modalRef",n.activeModal),e.xp6(4),e.pQV(e.lcZ(3,7,n.action))(e.lcZ(4,9,n.resource)),e.QtT(2),e.xp6(8),e.Q6J("readonly",!0)("ngModel",n.user),e.xp6(6),e.Q6J("ngModel",n.secret_key)("readonly",!0))},directives:[fe.z,a._Y,a.JL,a.F,H.P,q.o,a.Fj,X.b,a.JJ,a.On,Ce.C,pe.s,An.W],pipes:[f.rS,K.m],styles:[""]}),t})();var bn=r(17932);function Pn(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,50),e.qZA())}function Gn(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,51),e.qZA())}function Nn(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,52),e.qZA())}function On(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,56),e.qZA())}function Un(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,57),e.qZA())}function Wn(t,o){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",53),e.SDv(2,54),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",55),e.YNc(5,On,2,0,"span",13),e.YNc(6,Un,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(4),e.Q6J("readonly",n.editing),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("tenant",_,"pattern")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("tenant",_,"notUnique"))}}function Zn(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,58),e.qZA())}function $n(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,59),e.qZA())}function hn(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,60),e.qZA())}function In(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,63),e.qZA())}function vn(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,64),e.qZA())}function Fn(t,o){if(1&t&&(e.TgZ(0,"div",8),e._UZ(1,"label",61),e.TgZ(2,"div",11),e._UZ(3,"input",62),e.YNc(4,In,2,0,"span",13),e.YNc(5,vn,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(4),e.Q6J("ngIf",n.userForm.showError("max_buckets",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("max_buckets",_,"min"))}}function Ln(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,76),e.qZA())}function Dn(t,o){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",69),e.SDv(2,70),e.qZA(),e.TgZ(3,"div",11),e.TgZ(4,"div",71),e._UZ(5,"input",72),e.TgZ(6,"span",73),e._UZ(7,"button",74),e._UZ(8,"cd-copy-2-clipboard-button",75),e.qZA(),e.qZA(),e.YNc(9,Ln,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(9),e.Q6J("ngIf",n.userForm.showError("access_key",_,"required"))}}function xn(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,82),e.qZA())}function yn(t,o){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",77),e.SDv(2,78),e.qZA(),e.TgZ(3,"div",11),e.TgZ(4,"div",71),e._UZ(5,"input",79),e.TgZ(6,"span",73),e._UZ(7,"button",80),e._UZ(8,"cd-copy-2-clipboard-button",81),e.qZA(),e.qZA(),e.YNc(9,xn,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(9),e.Q6J("ngIf",n.userForm.showError("secret_key",_,"required"))}}function qn(t,o){if(1&t&&(e.TgZ(0,"fieldset"),e.TgZ(1,"legend"),e.SDv(2,65),e.qZA(),e.TgZ(3,"div",8),e.TgZ(4,"div",14),e.TgZ(5,"div",15),e._UZ(6,"input",66),e.TgZ(7,"label",67),e.SDv(8,68),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(9,Dn,10,1,"div",19),e.YNc(10,yn,10,1,"div",19),e.qZA()),2&t){const _=e.oxw(2);e.xp6(9),e.Q6J("ngIf",!_.editing&&!_.userForm.getValue("generate_key")),e.xp6(1),e.Q6J("ngIf",!_.editing&&!_.userForm.getValue("generate_key"))}}function wn(t,o){1&t&&(e.TgZ(0,"span",92),e.TgZ(1,"span",93),e.SDv(2,94),e.qZA(),e.qZA())}const L=function(t){return[t]};function kn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span"),e.TgZ(1,"div",71),e.TgZ(2,"div",95),e.TgZ(3,"span",96),e._UZ(4,"i"),e.qZA(),e.qZA(),e._UZ(5,"input",97),e.TgZ(6,"div",98),e.TgZ(7,"span",96),e._UZ(8,"i"),e.qZA(),e.qZA(),e._UZ(9,"input",97),e.TgZ(10,"span",73),e.TgZ(11,"button",99),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showSubuserModal(s)}),e._UZ(12,"i",89),e.qZA(),e.TgZ(13,"button",100),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).deleteSubuser(s)}),e._UZ(14,"i",89),e.qZA(),e.qZA(),e.qZA(),e._UZ(15,"span",93),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(4),e.Tol(n.icons.user),e.xp6(1),e.s9C("value",_.id),e.xp6(3),e.Tol(n.icons.share),e.xp6(1),e.s9C("value","full-control"===_.permissions?"full":_.permissions),e.xp6(3),e.Q6J("ngClass",e.VKq(10,L,n.icons.edit)),e.xp6(2),e.Q6J("ngClass",e.VKq(12,L,n.icons.destroy))}}function Bn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset"),e.TgZ(1,"legend"),e.SDv(2,83),e.qZA(),e.TgZ(3,"div",84),e.TgZ(4,"div",14),e.YNc(5,wn,3,0,"span",85),e.YNc(6,kn,16,14,"span",86),e.TgZ(7,"div",84),e.TgZ(8,"div",87),e.TgZ(9,"button",88),e.NdJ("click",function(){return e.CHM(_),e.oxw(2).showSubuserModal()}),e._UZ(10,"i",89),e.ynx(11),e.SDv(12,90),e.ALo(13,"titlecase"),e.ALo(14,"upperFirst"),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(15,"span",91),e.qZA(),e.qZA(),e.qZA()}if(2&t){const _=e.oxw(2);e.xp6(5),e.Q6J("ngIf",0===_.subusers.length),e.xp6(1),e.Q6J("ngForOf",_.subusers),e.xp6(4),e.Q6J("ngClass",e.VKq(9,L,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(13,5,_.actionLabels.CREATE))(e.lcZ(14,7,_.subuserLabel)),e.QtT(12)}}function Hn(t,o){1&t&&(e.TgZ(0,"span",92),e.TgZ(1,"span",93),e.SDv(2,106),e.qZA(),e.qZA())}function Xn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span"),e.TgZ(1,"div",71),e.TgZ(2,"div",95),e.TgZ(3,"div",96),e._UZ(4,"i"),e.qZA(),e.qZA(),e._UZ(5,"input",97),e.TgZ(6,"span",73),e.TgZ(7,"button",107),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showS3KeyModal(s)}),e._UZ(8,"i",89),e.qZA(),e.TgZ(9,"button",108),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).deleteS3Key(s)}),e._UZ(10,"i",89),e.qZA(),e.qZA(),e.qZA(),e._UZ(11,"span",93),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(4),e.Tol(n.icons.key),e.xp6(1),e.s9C("value",_.user),e.xp6(3),e.Q6J("ngClass",e.VKq(6,L,n.icons.show)),e.xp6(2),e.Q6J("ngClass",e.VKq(8,L,n.icons.destroy))}}function Kn(t,o){1&t&&(e.TgZ(0,"span",92),e.TgZ(1,"span",93),e.SDv(2,109),e.qZA(),e.qZA())}function zn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span"),e.TgZ(1,"div",71),e.TgZ(2,"div",95),e.TgZ(3,"span",96),e._UZ(4,"i"),e.qZA(),e.qZA(),e._UZ(5,"input",97),e.TgZ(6,"span",73),e.TgZ(7,"button",110),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showSwiftKeyModal(s)}),e._UZ(8,"i",89),e.qZA(),e.qZA(),e.qZA(),e._UZ(9,"span",93),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(4),e.Tol(n.icons.key),e.xp6(1),e.s9C("value",_.user),e.xp6(3),e.Q6J("ngClass",e.VKq(5,L,n.icons.show))}}function Qn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset"),e.TgZ(1,"legend"),e.SDv(2,101),e.qZA(),e.TgZ(3,"div",8),e.TgZ(4,"label",61),e.SDv(5,102),e.qZA(),e.TgZ(6,"div",11),e.YNc(7,Hn,3,0,"span",85),e.YNc(8,Xn,12,10,"span",86),e.TgZ(9,"div",84),e.TgZ(10,"div",87),e.TgZ(11,"button",103),e.NdJ("click",function(){return e.CHM(_),e.oxw(2).showS3KeyModal()}),e._UZ(12,"i",89),e.ynx(13),e.SDv(14,104),e.ALo(15,"titlecase"),e.ALo(16,"upperFirst"),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(17,"span",91),e.qZA(),e._UZ(18,"hr"),e.qZA(),e.TgZ(19,"div",8),e.TgZ(20,"label",61),e.SDv(21,105),e.qZA(),e.TgZ(22,"div",11),e.YNc(23,Kn,3,0,"span",85),e.YNc(24,zn,10,7,"span",86),e.qZA(),e.qZA(),e.qZA()}if(2&t){const _=e.oxw(2);e.xp6(7),e.Q6J("ngIf",0===_.s3Keys.length),e.xp6(1),e.Q6J("ngForOf",_.s3Keys),e.xp6(4),e.Q6J("ngClass",e.VKq(11,L,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(15,7,_.actionLabels.CREATE))(e.lcZ(16,9,_.s3keyLabel)),e.QtT(14),e.xp6(7),e.Q6J("ngIf",0===_.swiftKeys.length),e.xp6(1),e.Q6J("ngForOf",_.swiftKeys)}}function Yn(t,o){1&t&&(e.TgZ(0,"span",92),e.TgZ(1,"span",93),e.SDv(2,114),e.qZA(),e.qZA())}function Jn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span"),e.TgZ(1,"div",71),e.TgZ(2,"span",95),e.TgZ(3,"div",96),e._UZ(4,"i"),e.qZA(),e.qZA(),e._UZ(5,"input",97),e.TgZ(6,"span",73),e.TgZ(7,"button",115),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showCapabilityModal(s)}),e._UZ(8,"i",89),e.qZA(),e.TgZ(9,"button",116),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).deleteCapability(s)}),e._UZ(10,"i",89),e.qZA(),e.qZA(),e.qZA(),e._UZ(11,"span",93),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(4),e.Tol(n.icons.share),e.xp6(1),e.hYB("value","",_.type,":",_.perm,""),e.xp6(3),e.Q6J("ngClass",e.VKq(7,L,n.icons.edit)),e.xp6(2),e.Q6J("ngClass",e.VKq(9,L,n.icons.destroy))}}function Vn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset"),e.TgZ(1,"legend"),e.SDv(2,111),e.qZA(),e.TgZ(3,"div",8),e.TgZ(4,"div",14),e.YNc(5,Yn,3,0,"span",85),e.YNc(6,Jn,12,11,"span",86),e.TgZ(7,"div",84),e.TgZ(8,"div",87),e.TgZ(9,"button",112),e.NdJ("click",function(){return e.CHM(_),e.oxw(2).showCapabilityModal()}),e.ALo(10,"pipeFunction"),e.ALo(11,"pipeFunction"),e._UZ(12,"i",89),e.ynx(13),e.SDv(14,113),e.ALo(15,"titlecase"),e.ALo(16,"upperFirst"),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(17,"span",91),e.qZA(),e.qZA(),e.qZA()}if(2&t){const _=e.oxw(2);e.xp6(5),e.Q6J("ngIf",0===_.capabilities.length),e.xp6(1),e.Q6J("ngForOf",_.capabilities),e.xp6(3),e.Q6J("disabled",e.xi3(10,7,_.capabilities,_.hasAllCapabilities))("disableTooltip",!e.xi3(11,10,_.capabilities,_.hasAllCapabilities)),e.xp6(3),e.Q6J("ngClass",e.VKq(17,L,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(15,13,_.actionLabels.ADD))(e.lcZ(16,15,_.capabilityLabel)),e.QtT(14)}}function jn(t,o){1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"div",14),e.TgZ(2,"div",15),e._UZ(3,"input",117),e.TgZ(4,"label",118),e.SDv(5,119),e.qZA(),e.qZA(),e.qZA(),e.qZA())}function eo(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,123),e.qZA())}function _o(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,124),e.qZA())}function to(t,o){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",120),e.SDv(2,121),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",122),e.YNc(5,eo,2,0,"span",13),e.YNc(6,_o,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("user_quota_max_size",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_quota_max_size",_,"quotaMaxSize"))}}function no(t,o){1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"div",14),e.TgZ(2,"div",15),e._UZ(3,"input",125),e.TgZ(4,"label",126),e.SDv(5,127),e.qZA(),e.qZA(),e.qZA(),e.qZA())}function oo(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,131),e.qZA())}function io(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,132),e.qZA())}function so(t,o){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",128),e.SDv(2,129),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",130),e.YNc(5,oo,2,0,"span",13),e.YNc(6,io,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("user_quota_max_objects",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_quota_max_objects",_,"min"))}}function ao(t,o){1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"div",14),e.TgZ(2,"div",15),e._UZ(3,"input",133),e.TgZ(4,"label",134),e.SDv(5,135),e.qZA(),e.qZA(),e.qZA(),e.qZA())}function ro(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,139),e.qZA())}function lo(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,140),e.qZA())}function co(t,o){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",136),e.SDv(2,137),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",138),e.YNc(5,ro,2,0,"span",13),e.YNc(6,lo,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_size",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_size",_,"quotaMaxSize"))}}function uo(t,o){1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"div",14),e.TgZ(2,"div",15),e._UZ(3,"input",141),e.TgZ(4,"label",142),e.SDv(5,143),e.qZA(),e.qZA(),e.qZA(),e.qZA())}function Ro(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,147),e.qZA())}function go(t,o){1&t&&(e.TgZ(0,"span",49),e.SDv(1,148),e.qZA())}function Eo(t,o){if(1&t&&(e.TgZ(0,"div",8),e.TgZ(1,"label",144),e.SDv(2,145),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",146),e.YNc(5,Ro,2,0,"span",13),e.YNc(6,go,2,0,"span",13),e.qZA(),e.qZA()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_objects",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_objects",_,"min"))}}const Je=function(t){return{required:t}};function To(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div",1),e.TgZ(1,"form",2,3),e.TgZ(3,"div",4),e.TgZ(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.TgZ(9,"div",8),e.TgZ(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.YNc(14,Pn,2,0,"span",13),e.YNc(15,Gn,2,0,"span",13),e.YNc(16,Nn,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(17,"div",8),e.TgZ(18,"div",14),e.TgZ(19,"div",15),e.TgZ(20,"input",16),e.NdJ("click",function(){return e.CHM(_),e.oxw().updateFieldsWhenTenanted()}),e.qZA(),e.TgZ(21,"label",17),e.SDv(22,18),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(23,Wn,7,3,"div",19),e.TgZ(24,"div",8),e.TgZ(25,"label",20),e.SDv(26,21),e.qZA(),e.TgZ(27,"div",11),e._UZ(28,"input",22),e.YNc(29,Zn,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(30,"div",8),e.TgZ(31,"label",23),e.SDv(32,24),e.qZA(),e.TgZ(33,"div",11),e._UZ(34,"input",25),e.YNc(35,$n,2,0,"span",13),e.YNc(36,hn,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(37,"div",8),e.TgZ(38,"label",26),e.SDv(39,27),e.qZA(),e.TgZ(40,"div",11),e.TgZ(41,"select",28),e.NdJ("change",function(i){return e.CHM(_),e.oxw().onMaxBucketsModeChange(i.target.value)}),e.TgZ(42,"option",29),e.SDv(43,30),e.qZA(),e.TgZ(44,"option",31),e.SDv(45,32),e.qZA(),e.TgZ(46,"option",33),e.SDv(47,34),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(48,Fn,6,2,"div",19),e.TgZ(49,"div",8),e.TgZ(50,"div",14),e.TgZ(51,"div",15),e._UZ(52,"input",35),e.TgZ(53,"label",36),e.SDv(54,37),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(55,qn,11,2,"fieldset",38),e.YNc(56,Bn,16,11,"fieldset",38),e.YNc(57,Qn,25,13,"fieldset",38),e.YNc(58,Vn,18,19,"fieldset",38),e.TgZ(59,"fieldset"),e.TgZ(60,"legend"),e.SDv(61,39),e.qZA(),e.TgZ(62,"div",8),e.TgZ(63,"div",14),e.TgZ(64,"div",15),e._UZ(65,"input",40),e.TgZ(66,"label",41),e.SDv(67,42),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(68,jn,6,0,"div",19),e.YNc(69,to,7,2,"div",19),e.YNc(70,no,6,0,"div",19),e.YNc(71,so,7,2,"div",19),e.qZA(),e.TgZ(72,"fieldset"),e.TgZ(73,"legend"),e.SDv(74,43),e.qZA(),e.TgZ(75,"div",8),e.TgZ(76,"div",14),e.TgZ(77,"div",15),e._UZ(78,"input",44),e.TgZ(79,"label",45),e.SDv(80,46),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.YNc(81,ao,6,0,"div",19),e.YNc(82,co,7,2,"div",19),e.YNc(83,uo,6,0,"div",19),e.YNc(84,Eo,7,2,"div",19),e.qZA(),e.qZA(),e.TgZ(85,"div",47),e.TgZ(86,"cd-form-button-panel",48),e.NdJ("submitActionEvent",function(){return e.CHM(_),e.oxw().onSubmit()}),e.ALo(87,"titlecase"),e.ALo(88,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&t){const _=e.MAs(2),n=e.oxw();e.xp6(1),e.Q6J("formGroup",n.userForm),e.xp6(6),e.pQV(e.lcZ(6,29,n.action))(e.lcZ(7,31,n.resource)),e.QtT(5),e.xp6(3),e.Q6J("ngClass",e.VKq(37,Je,!n.editing)),e.xp6(3),e.Q6J("readonly",n.editing),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_id",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_id",_,"pattern")),e.xp6(1),e.Q6J("ngIf",!n.userForm.getValue("show_tenant")&&n.userForm.showError("user_id",_,"notUnique")),e.xp6(4),e.Q6J("readonly",!0),e.xp6(3),e.Q6J("ngIf",n.userForm.getValue("show_tenant")),e.xp6(2),e.Q6J("ngClass",e.VKq(39,Je,!n.editing)),e.xp6(4),e.Q6J("ngIf",n.userForm.showError("display_name",_,"required")),e.xp6(6),e.Q6J("ngIf",n.userForm.showError("email",_,"email")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("email",_,"notUnique")),e.xp6(12),e.Q6J("ngIf",1==n.userForm.get("max_buckets_mode").value),e.xp6(7),e.Q6J("ngIf",!n.editing),e.xp6(1),e.Q6J("ngIf",n.editing),e.xp6(1),e.Q6J("ngIf",n.editing),e.xp6(1),e.Q6J("ngIf",n.editing),e.xp6(10),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value&&!n.userForm.getValue("user_quota_max_size_unlimited")),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value&&!n.userForm.getValue("user_quota_max_objects_unlimited")),e.xp6(10),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value&&!n.userForm.getValue("bucket_quota_max_size_unlimited")),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value&&!n.userForm.getValue("bucket_quota_max_objects_unlimited")),e.xp6(2),e.Q6J("form",n.userForm)("submitText",e.lcZ(87,33,n.action)+" "+e.lcZ(88,35,n.resource))}}let Ve=(()=>{class t extends Ie.E{constructor(_,n,i,s,c,d,E){super(),this.formBuilder=_,this.route=n,this.router=i,this.rgwUserService=s,this.modalService=c,this.notificationService=d,this.actionLabels=E,this.editing=!1,this.submitObservables=[],this.icons=D.P,this.subusers=[],this.s3Keys=[],this.swiftKeys=[],this.capabilities=[],this.showTenant=!1,this.previousTenant=null,this.resource="user",this.subuserLabel="subuser",this.s3keyLabel="S3 Key",this.capabilityLabel="capability",this.editing=this.router.url.startsWith(`/rgw/user/${A.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.createForm()}createForm(){this.userForm=this.formBuilder.group({user_id:[null,[a.kI.required,a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_-]+$/)],this.editing?[]:[m.h.unique(this.rgwUserService.exists,this.rgwUserService,()=>this.userForm.getValue("tenant"))]],show_tenant:[this.editing],tenant:[null,[a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_-]+$/)],this.editing?[]:[m.h.unique(this.rgwUserService.exists,this.rgwUserService,()=>this.userForm.getValue("user_id"),!0)]],display_name:[null,[a.kI.required]],email:[null,[m.h.email],[m.h.unique(this.rgwUserService.emailExists,this.rgwUserService)]],max_buckets_mode:[1],max_buckets:[1e3,[m.h.requiredIf({max_buckets_mode:"1"}),m.h.number(!1)]],suspended:[!1],generate_key:[!0],access_key:[null,[m.h.requiredIf({generate_key:!1})]],secret_key:[null,[m.h.requiredIf({generate_key:!1})]],user_quota_enabled:[!1],user_quota_max_size_unlimited:[!0],user_quota_max_size:[null,[m.h.composeIf({user_quota_enabled:!0,user_quota_max_size_unlimited:!1},[a.kI.required,this.quotaMaxSizeValidator])]],user_quota_max_objects_unlimited:[!0],user_quota_max_objects:[null,[m.h.requiredIf({user_quota_enabled:!0,user_quota_max_objects_unlimited:!1})]],bucket_quota_enabled:[!1],bucket_quota_max_size_unlimited:[!0],bucket_quota_max_size:[null,[m.h.composeIf({bucket_quota_enabled:!0,bucket_quota_max_size_unlimited:!1},[a.kI.required,this.quotaMaxSizeValidator])]],bucket_quota_max_objects_unlimited:[!0],bucket_quota_max_objects:[null,[m.h.requiredIf({bucket_quota_enabled:!0,bucket_quota_max_objects_unlimited:!1})]]})}ngOnInit(){this.route.params.subscribe(_=>{if(!_.hasOwnProperty("uid"))return void this.loadingReady();const n=decodeURIComponent(_.uid),i=[];i.push(this.rgwUserService.get(n)),i.push(this.rgwUserService.getQuota(n)),(0,Y.D)(i).subscribe(s=>{const c=u().clone(this.userForm.value);let d=u().pick(s[0],u().keys(this.userForm.value));switch(d.max_buckets){case-1:d.max_buckets_mode=-1,d.max_buckets="";break;case 0:d.max_buckets_mode=0,d.max_buckets="";break;default:d.max_buckets_mode=1}["user","bucket"].forEach(g=>{const C=s[1][g+"_quota"];d[g+"_quota_enabled"]=C.enabled,C.max_size<0?(d[g+"_quota_max_size_unlimited"]=!0,d[g+"_quota_max_size"]=null):(d[g+"_quota_max_size_unlimited"]=!1,d[g+"_quota_max_size"]=`${C.max_size} B`),C.max_objects<0?(d[g+"_quota_max_objects_unlimited"]=!0,d[g+"_quota_max_objects"]=null):(d[g+"_quota_max_objects_unlimited"]=!1,d[g+"_quota_max_objects"]=C.max_objects)}),d=u().merge(c,d),this.userForm.setValue(d),this.subusers=s[0].subusers,this.s3Keys=s[0].keys,this.swiftKeys=s[0].swift_keys;const E={"read, write":"*"};s[0].caps.forEach(g=>{g.perm in E&&(g.perm=E[g.perm])}),this.capabilities=s[0].caps,this.loadingReady()},()=>{this.loadingError()})})}goToListView(){this.router.navigate(["/rgw/user"])}onSubmit(){let _;if(this.userForm.pristine)return void this.goToListView();const n=this.getUID();if(this.editing){if(this._isGeneralDirty()){const i=this._getUpdateArgs();this.submitObservables.push(this.rgwUserService.update(n,i))}_="Updated Object Gateway user '" + n + "'"}else{const i=this._getCreateArgs();this.submitObservables.push(this.rgwUserService.create(i)),_="Created Object Gateway user '" + n + "'"}if(this._isUserQuotaDirty()){const i=this._getUserQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,i))}if(this._isBucketQuotaDirty()){const i=this._getBucketQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,i))}(0,Bt.z)(...this.submitObservables).subscribe({error:()=>{this.userForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.notificationService.show(Ae.k.success,_),this.goToListView()}})}updateFieldsWhenTenanted(){this.showTenant=this.userForm.getValue("show_tenant"),this.showTenant?(this.userForm.get("user_id").markAsTouched(),this.previousTenant=this.userForm.get("tenant").value,this.userForm.get("tenant").patchValue(null)):(this.userForm.get("user_id").markAsUntouched(),this.userForm.get("tenant").patchValue(this.previousTenant))}getUID(){var _;let n=this.userForm.getValue("user_id");const i=null===(_=this.userForm)||void 0===_?void 0:_.getValue("tenant");return i&&i.length>0&&(n=`${this.userForm.getValue("tenant")}$${n}`),n}quotaMaxSizeValidator(_){return(0,m.P)(_.value)?null:null===RegExp("^(\\d+(\\.\\d+)?)\\s*(B|K(B|iB)?|M(B|iB)?|G(B|iB)?|T(B|iB)?)?$","i").exec(_.value)||(new Ge.H).toBytes(_.value)<1024?{quotaMaxSize:!0}:null}setSubuser(_,n){const i={"full-control":"full","read-write":"readwrite"},s=this.getUID();this.submitObservables.push(this.rgwUserService.createSubuser(s,{subuser:_.id,access:_.permissions in i?i[_.permissions]:_.permissions,key_type:"swift",secret_key:_.secret_key,generate_secret:_.generate_secret?"true":"false"})),u().isNumber(n)?this.subusers[n]=_:(this.subusers.push(_),this.swiftKeys.push({user:_.id,secret_key:_.generate_secret?"Apply your changes first...":_.secret_key})),this.userForm.markAsDirty()}deleteSubuser(_){const n=this.subusers[_];this.submitObservables.push(this.rgwUserService.deleteSubuser(this.getUID(),n.id)),this.s3Keys=this.s3Keys.filter(i=>i.user!==n.id),this.swiftKeys=this.swiftKeys.filter(i=>i.user!==n.id),this.subusers.splice(_,1),this.userForm.markAsDirty()}setCapability(_,n){const i=this.getUID();if(u().isNumber(n)){const s=this.capabilities[n];this.submitObservables.push(this.rgwUserService.deleteCapability(i,s.type,s.perm)),this.submitObservables.push(this.rgwUserService.addCapability(i,_.type,_.perm)),this.capabilities[n]=_}else this.submitObservables.push(this.rgwUserService.addCapability(i,_.type,_.perm)),this.capabilities=[...this.capabilities,_];this.userForm.markAsDirty()}deleteCapability(_){const n=this.capabilities[_];this.submitObservables.push(this.rgwUserService.deleteCapability(this.getUID(),n.type,n.perm)),this.capabilities.splice(_,1),this.capabilities=[...this.capabilities],this.userForm.markAsDirty()}hasAllCapabilities(_){return!u().difference(ze.getAll(),u().map(_,"type")).length}setS3Key(_,n){if(!u().isNumber(n)){const i=_.user.match(/([^:]+)(:(.+))?/),s=i[1],c={subuser:i[2]?i[3]:"",generate_key:_.generate_key?"true":"false"};"false"===c.generate_key&&(u().isNil(_.access_key)||(c.access_key=_.access_key),u().isNil(_.secret_key)||(c.secret_key=_.secret_key)),this.submitObservables.push(this.rgwUserService.addS3Key(s,c)),this.s3Keys.push({user:_.user,access_key:_.generate_key?"Apply your changes first...":_.access_key,secret_key:_.generate_key?"Apply your changes first...":_.secret_key})}this.userForm.markAsDirty()}deleteS3Key(_){const n=this.s3Keys[_];this.submitObservables.push(this.rgwUserService.deleteS3Key(this.getUID(),n.access_key)),this.s3Keys.splice(_,1),this.userForm.markAsDirty()}showSubuserModal(_){const n=this.getUID(),i=this.modalService.show(mn);if(u().isNumber(_)){const s=this.subusers[_];i.componentInstance.setEditing(),i.componentInstance.setValues(n,s.id,s.permissions)}else i.componentInstance.setEditing(!1),i.componentInstance.setValues(n),i.componentInstance.setSubusers(this.subusers);i.componentInstance.submitAction.subscribe(s=>{this.setSubuser(s,_)})}showS3KeyModal(_){const n=this.modalService.show(Qe);if(u().isNumber(_)){const i=this.s3Keys[_];n.componentInstance.setViewing(),n.componentInstance.setValues(i.user,i.access_key,i.secret_key)}else{const i=this._getS3KeyUserCandidates();n.componentInstance.setViewing(!1),n.componentInstance.setUserCandidates(i),n.componentInstance.submitAction.subscribe(s=>{this.setS3Key(s)})}}showSwiftKeyModal(_){const n=this.modalService.show(Ye),i=this.swiftKeys[_];n.componentInstance.setValues(i.user,i.secret_key)}showCapabilityModal(_){const n=this.modalService.show(en);if(u().isNumber(_)){const i=this.capabilities[_];n.componentInstance.setEditing(),n.componentInstance.setValues(i.type,i.perm)}else n.componentInstance.setEditing(!1),n.componentInstance.setCapabilities(this.capabilities);n.componentInstance.submitAction.subscribe(i=>{this.setCapability(i,_)})}_isGeneralDirty(){return["display_name","email","max_buckets_mode","max_buckets","suspended"].some(_=>this.userForm.get(_).dirty)}_isUserQuotaDirty(){return["user_quota_enabled","user_quota_max_size_unlimited","user_quota_max_size","user_quota_max_objects_unlimited","user_quota_max_objects"].some(_=>this.userForm.get(_).dirty)}_isBucketQuotaDirty(){return["bucket_quota_enabled","bucket_quota_max_size_unlimited","bucket_quota_max_size","bucket_quota_max_objects_unlimited","bucket_quota_max_objects"].some(_=>this.userForm.get(_).dirty)}_getCreateArgs(){const _={uid:this.getUID(),display_name:this.userForm.getValue("display_name"),suspended:this.userForm.getValue("suspended"),email:"",max_buckets:this.userForm.getValue("max_buckets"),generate_key:this.userForm.getValue("generate_key"),access_key:"",secret_key:""},n=this.userForm.getValue("email");u().isString(n)&&n.length>0&&u().merge(_,{email:n}),this.userForm.getValue("generate_key")||u().merge(_,{generate_key:!1,access_key:this.userForm.getValue("access_key"),secret_key:this.userForm.getValue("secret_key")});const s=parseInt(this.userForm.getValue("max_buckets_mode"),10);return u().includes([-1,0],s)&&u().merge(_,{max_buckets:s}),_}_getUpdateArgs(){const _={},n=["display_name","email","max_buckets","suspended"];for(const s of n)_[s]=this.userForm.getValue(s);const i=parseInt(this.userForm.getValue("max_buckets_mode"),10);return u().includes([-1,0],i)&&(_.max_buckets=i),_}_getUserQuotaArgs(){const _={quota_type:"user",enabled:this.userForm.getValue("user_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("user_quota_max_size_unlimited")){const n=(new Ge.H).toBytes(this.userForm.getValue("user_quota_max_size"));_.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("user_quota_max_objects_unlimited")||(_.max_objects=this.userForm.getValue("user_quota_max_objects")),_}_getBucketQuotaArgs(){const _={quota_type:"bucket",enabled:this.userForm.getValue("bucket_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("bucket_quota_max_size_unlimited")){const n=(new Ge.H).toBytes(this.userForm.getValue("bucket_quota_max_size"));_.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("bucket_quota_max_objects_unlimited")||(_.max_objects=this.userForm.getValue("bucket_quota_max_objects")),_}_getS3KeyUserCandidates(){let _=[];const n=this.getUID();return u().isString(n)&&!u().isEmpty(n)&&_.push(n),this.subusers.forEach(i=>{_.push(i.id)}),this.s3Keys.forEach(i=>{_.push(i.user)}),_=u().uniq(_),_}onMaxBucketsModeChange(_){"1"===_&&(this.userForm.get("max_buckets").valid||this.userForm.patchValue({max_buckets:1e3}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(J.O),e.Y36(w.gz),e.Y36(w.F0),e.Y36(O),e.Y36(Te.Z),e.Y36(ve.g),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let o,_,n,i,s,c,d,E,g,C,b,P,G,N,p,U,W,Z,$,h,I,v,F,T,x,y,S,_e,te,ne,oe,ie,se,ae,re,le,ce,de,ue,Re,R,__,t_,n_,o_,i_,s_,a_,r_,l_,c_,d_,u_,R_,g_,E_,T_,S_,f_,C_,p_,M_,m_,A_,b_,P_,G_;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="User ID",n="Show Tenant",i="Full name",s="Email address",c="Max. buckets",d="Disabled",E="Unlimited",g="Custom",C="Suspended",b="User quota",P="Enabled",G="Bucket quota",N="Enabled",p="This field is required.",U="The value is not valid.",W="The chosen user ID is already in use.",Z="Tenant",$="The value is not valid.",h="The chosen user ID exists in this tenant.",I="This field is required.",v="This is not a valid email address.",F="The chosen email address is already in use.",T="This field is required.",x="The entered value must be >= 1.",y="S3 key",S="Auto-generate key",_e="Access key",te="This field is required.",ne="Secret key",oe="This field is required.",ie="Subusers",se="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",ae="There are no subusers.",re="Edit",le="Delete",ce="Keys",de="S3",ue="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Re="Swift",R="There are no keys.",__="Show",t_="Delete",n_="There are no keys.",o_="Show",i_="Capabilities",s_="All capabilities are already added.",a_="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",r_="There are no capabilities.",l_="Edit",c_="Delete",d_="Unlimited size",u_="Max. size",R_="This field is required.",g_="The value is not valid.",E_="Unlimited objects",T_="Max. objects",S_="This field is required.",f_="The entered value must be >= 0.",C_="Unlimited size",p_="Max. size",M_="This field is required.",m_="The value is not valid.",A_="Unlimited objects",b_="Max. objects",P_="This field is required.",G_="The entered value must be >= 0.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],o,[1,"card-body"],[1,"form-group","row"],["for","user_id",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","user_id","type","text","formControlName","user_id",1,"form-control",3,"readonly"],["class","invalid-feedback",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","show_tenant","type","checkbox","formControlName","show_tenant",1,"custom-control-input",3,"readonly","click"],["for","show_tenant",1,"custom-control-label"],n,["class","form-group row",4,"ngIf"],["for","display_name",1,"cd-col-form-label",3,"ngClass"],i,["id","display_name","type","text","formControlName","display_name",1,"form-control"],["for","email",1,"cd-col-form-label"],s,["id","email","type","text","formControlName","email",1,"form-control"],["for","max_buckets_mode",1,"cd-col-form-label"],c,["formControlName","max_buckets_mode","name","max_buckets_mode","id","max_buckets_mode",1,"form-control",3,"change"],["value","-1"],d,["value","0"],E,["value","1"],g,["id","suspended","type","checkbox","formControlName","suspended",1,"custom-control-input"],["for","suspended",1,"custom-control-label"],C,[4,"ngIf"],b,["id","user_quota_enabled","type","checkbox","formControlName","user_quota_enabled",1,"custom-control-input"],["for","user_quota_enabled",1,"custom-control-label"],P,G,["id","bucket_quota_enabled","type","checkbox","formControlName","bucket_quota_enabled",1,"custom-control-input"],["for","bucket_quota_enabled",1,"custom-control-label"],N,[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],p,U,W,["for","tenant",1,"cd-col-form-label"],Z,["id","tenant","type","text","formControlName","tenant","autofocus","",1,"form-control",3,"readonly"],$,h,I,v,F,[1,"cd-col-form-label"],["id","max_buckets","type","number","formControlName","max_buckets","min","1",1,"form-control"],T,x,y,["id","generate_key","type","checkbox","formControlName","generate_key",1,"custom-control-input"],["for","generate_key",1,"custom-control-label"],S,["for","access_key",1,"cd-col-form-label","required"],_e,[1,"input-group"],["id","access_key","type","password","formControlName","access_key",1,"form-control"],[1,"input-group-append"],["type","button","cdPasswordButton","access_key",1,"btn","btn-light"],["source","access_key"],te,["for","secret_key",1,"cd-col-form-label","required"],ne,["id","secret_key","type","password","formControlName","secret_key",1,"form-control"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],oe,ie,[1,"row"],["class","no-border",4,"ngIf"],[4,"ngFor","ngForOf"],[1,"col-12"],["type","button",1,"btn","btn-light","float-right","tc_addSubuserButton",3,"click"],[3,"ngClass"],se,[1,"help-block"],[1,"no-border"],[1,"form-text","text-muted"],ae,[1,"input-group-prepend"],[1,"input-group-text"],["type","text","readonly","",1,"cd-form-control",3,"value"],[1,"input-group-prepend","border-left-0","border-right-0"],["type","button","ngbTooltip",re,1,"btn","btn-light","tc_showSubuserButton",3,"click"],["type","button","ngbTooltip",le,1,"btn","btn-light","tc_deleteSubuserButton",3,"click"],ce,de,["type","button",1,"btn","btn-light","float-right","tc_addS3KeyButton",3,"click"],ue,Re,R,["type","button","ngbTooltip",__,1,"btn","btn-light","tc_showS3KeyButton",3,"click"],["type","button","ngbTooltip",t_,1,"btn","btn-light","tc_deleteS3KeyButton",3,"click"],n_,["type","button","ngbTooltip",o_,1,"btn","btn-light","tc_showSwiftKeyButton",3,"click"],i_,["type","button","ngbTooltip",s_,"triggers","pointerenter:pointerleave",1,"btn","btn-light","float-right","tc_addCapButton",3,"disabled","disableTooltip","click"],a_,r_,["type","button","ngbTooltip",l_,1,"btn","btn-light","tc_editCapButton",3,"click"],["type","button","ngbTooltip",c_,1,"btn","btn-light","tc_deleteCapButton",3,"click"],["id","user_quota_max_size_unlimited","type","checkbox","formControlName","user_quota_max_size_unlimited",1,"custom-control-input"],["for","user_quota_max_size_unlimited",1,"custom-control-label"],d_,["for","user_quota_max_size",1,"cd-col-form-label","required"],u_,["id","user_quota_max_size","type","text","formControlName","user_quota_max_size","cdDimlessBinary","",1,"form-control"],R_,g_,["id","user_quota_max_objects_unlimited","type","checkbox","formControlName","user_quota_max_objects_unlimited",1,"custom-control-input"],["for","user_quota_max_objects_unlimited",1,"custom-control-label"],E_,["for","user_quota_max_objects",1,"cd-col-form-label","required"],T_,["id","user_quota_max_objects","type","number","formControlName","user_quota_max_objects","min","0",1,"form-control"],S_,f_,["id","bucket_quota_max_size_unlimited","type","checkbox","formControlName","bucket_quota_max_size_unlimited",1,"custom-control-input"],["for","bucket_quota_max_size_unlimited",1,"custom-control-label"],C_,["for","bucket_quota_max_size",1,"cd-col-form-label","required"],p_,["id","bucket_quota_max_size","type","text","formControlName","bucket_quota_max_size","cdDimlessBinary","",1,"form-control"],M_,m_,["id","bucket_quota_max_objects_unlimited","type","checkbox","formControlName","bucket_quota_max_objects_unlimited",1,"custom-control-input"],["for","bucket_quota_max_objects_unlimited",1,"custom-control-label"],A_,["for","bucket_quota_max_objects",1,"cd-col-form-label","required"],b_,["id","bucket_quota_max_objects","type","number","formControlName","bucket_quota_max_objects","min","0",1,"form-control"],P_,G_]},template:function(_,n){1&_&&e.YNc(0,To,89,41,"div",0),2&_&&e.Q6J("cdFormLoading",n.loading)},directives:[Fe.y,a._Y,a.JL,V.V,a.sg,H.P,f.mk,q.o,a.Fj,X.b,a.JJ,a.u,f.O5,a.Wl,a.EJ,a.YN,a.Kr,ee.p,j.U,a.wV,a.qQ,Ce.C,pe.s,f.sg,M._L,bn.Q],pipes:[f.rS,K.m,Ue.i],styles:[""]}),t})();var je=r(99466),So=r(78877),fo=r(86969);const Co=["accessKeyTpl"],po=["secretKeyTpl"];function Mo(t,o){if(1&t&&(e.TgZ(0,"tr"),e.TgZ(1,"td",15),e.SDv(2,20),e.qZA(),e.TgZ(3,"td"),e._uU(4),e.qZA(),e.qZA()),2&t){const _=e.oxw(4);e.xp6(4),e.Oqu(_.user.email)}}function mo(t,o){if(1&t&&(e.TgZ(0,"div"),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.xp6(1),e.AsE(" ",_.id," (",_.permissions,") ")}}function Ao(t,o){if(1&t&&(e.TgZ(0,"tr"),e.TgZ(1,"td",15),e.SDv(2,21),e.qZA(),e.TgZ(3,"td"),e.YNc(4,mo,2,2,"div",22),e.qZA(),e.qZA()),2&t){const _=e.oxw(4);e.xp6(4),e.Q6J("ngForOf",_.user.subusers)}}function bo(t,o){if(1&t&&(e.TgZ(0,"div"),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.xp6(1),e.AsE(" ",_.type," (",_.perm,") ")}}function Po(t,o){if(1&t&&(e.TgZ(0,"tr"),e.TgZ(1,"td",15),e.SDv(2,23),e.qZA(),e.TgZ(3,"td"),e.YNc(4,bo,2,2,"div",22),e.qZA(),e.qZA()),2&t){const _=e.oxw(4);e.xp6(4),e.Q6J("ngForOf",_.user.caps)}}function Go(t,o){if(1&t&&(e.TgZ(0,"tr"),e.TgZ(1,"td",15),e.SDv(2,24),e.qZA(),e.TgZ(3,"td"),e._uU(4),e.ALo(5,"join"),e.qZA(),e.qZA()),2&t){const _=e.oxw(4);e.xp6(4),e.Oqu(e.lcZ(5,1,_.user.mfa_ids))}}function No(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function Oo(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,29),e.qZA())}function Uo(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const _=e.oxw(5);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.user.user_quota.max_size)," ")}}function Wo(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function Zo(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,30),e.qZA())}function $o(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(5);e.xp6(1),e.hij(" ",_.user.user_quota.max_objects," ")}}function ho(t,o){if(1&t&&(e.TgZ(0,"div"),e.TgZ(1,"legend"),e.SDv(2,25),e.qZA(),e.TgZ(3,"table",9),e.TgZ(4,"tbody"),e.TgZ(5,"tr"),e.TgZ(6,"td",10),e.SDv(7,26),e.qZA(),e.TgZ(8,"td",12),e._uU(9),e.ALo(10,"booleanText"),e.qZA(),e.qZA(),e.TgZ(11,"tr"),e.TgZ(12,"td",15),e.SDv(13,27),e.qZA(),e.YNc(14,No,2,0,"td",0),e.YNc(15,Oo,2,0,"td",0),e.YNc(16,Uo,3,3,"td",0),e.qZA(),e.TgZ(17,"tr"),e.TgZ(18,"td",15),e.SDv(19,28),e.qZA(),e.YNc(20,Wo,2,0,"td",0),e.YNc(21,Zo,2,0,"td",0),e.YNc(22,$o,2,1,"td",0),e.qZA(),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw(4);e.xp6(9),e.Oqu(e.lcZ(10,7,_.user.user_quota.enabled)),e.xp6(5),e.Q6J("ngIf",!_.user.user_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",!_.user.user_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_objects>-1)}}function Io(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function vo(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,35),e.qZA())}function Fo(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const _=e.oxw(5);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.user.bucket_quota.max_size)," ")}}function Lo(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function Do(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,36),e.qZA())}function xo(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(5);e.xp6(1),e.hij(" ",_.user.bucket_quota.max_objects," ")}}function yo(t,o){if(1&t&&(e.TgZ(0,"div"),e.TgZ(1,"legend"),e.SDv(2,31),e.qZA(),e.TgZ(3,"table",9),e.TgZ(4,"tbody"),e.TgZ(5,"tr"),e.TgZ(6,"td",10),e.SDv(7,32),e.qZA(),e.TgZ(8,"td",12),e._uU(9),e.ALo(10,"booleanText"),e.qZA(),e.qZA(),e.TgZ(11,"tr"),e.TgZ(12,"td",15),e.SDv(13,33),e.qZA(),e.YNc(14,Io,2,0,"td",0),e.YNc(15,vo,2,0,"td",0),e.YNc(16,Fo,3,3,"td",0),e.qZA(),e.TgZ(17,"tr"),e.TgZ(18,"td",15),e.SDv(19,34),e.qZA(),e.YNc(20,Lo,2,0,"td",0),e.YNc(21,Do,2,0,"td",0),e.YNc(22,xo,2,1,"td",0),e.qZA(),e.qZA(),e.qZA(),e.qZA()),2&t){const _=e.oxw(4);e.xp6(9),e.Oqu(e.lcZ(10,7,_.user.bucket_quota.enabled)),e.xp6(5),e.Q6J("ngIf",!_.user.bucket_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",!_.user.bucket_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_objects>-1)}}function qo(t,o){if(1&t&&(e.TgZ(0,"div"),e.TgZ(1,"table",9),e.TgZ(2,"tbody"),e.TgZ(3,"tr"),e.TgZ(4,"td",10),e.SDv(5,11),e.qZA(),e.TgZ(6,"td",12),e._uU(7),e.qZA(),e.qZA(),e.TgZ(8,"tr"),e.TgZ(9,"td",10),e.SDv(10,13),e.qZA(),e.TgZ(11,"td",12),e._uU(12),e.qZA(),e.qZA(),e.TgZ(13,"tr"),e.TgZ(14,"td",10),e.SDv(15,14),e.qZA(),e.TgZ(16,"td",12),e._uU(17),e.qZA(),e.qZA(),e.TgZ(18,"tr"),e.TgZ(19,"td",15),e.SDv(20,16),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.qZA(),e.qZA(),e.YNc(23,Mo,5,1,"tr",0),e.TgZ(24,"tr"),e.TgZ(25,"td",15),e.SDv(26,17),e.qZA(),e.TgZ(27,"td"),e._uU(28),e.ALo(29,"booleanText"),e.qZA(),e.qZA(),e.TgZ(30,"tr"),e.TgZ(31,"td",15),e.SDv(32,18),e.qZA(),e.TgZ(33,"td"),e._uU(34),e.ALo(35,"booleanText"),e.qZA(),e.qZA(),e.TgZ(36,"tr"),e.TgZ(37,"td",15),e.SDv(38,19),e.qZA(),e.TgZ(39,"td"),e._uU(40),e.ALo(41,"map"),e.qZA(),e.qZA(),e.YNc(42,Ao,5,1,"tr",0),e.YNc(43,Po,5,1,"tr",0),e.YNc(44,Go,6,3,"tr",0),e.qZA(),e.qZA(),e.YNc(45,ho,23,9,"div",0),e.YNc(46,yo,23,9,"div",0),e.qZA()),2&t){const _=e.oxw(3);e.xp6(7),e.Oqu(_.user.tenant),e.xp6(5),e.Oqu(_.user.user_id),e.xp6(5),e.Oqu(_.user.uid),e.xp6(5),e.Oqu(_.user.display_name),e.xp6(1),e.Q6J("ngIf",null==_.user.email?null:_.user.email.length),e.xp6(5),e.Oqu(e.lcZ(29,13,_.user.suspended)),e.xp6(6),e.Oqu(e.lcZ(35,15,"true"===_.user.system)),e.xp6(6),e.Oqu(e.xi3(41,17,_.user.max_buckets,_.maxBucketsMap)),e.xp6(2),e.Q6J("ngIf",_.user.subusers&&_.user.subusers.length),e.xp6(1),e.Q6J("ngIf",_.user.caps&&_.user.caps.length),e.xp6(1),e.Q6J("ngIf",null==_.user.mfa_ids?null:_.user.mfa_ids.length),e.xp6(1),e.Q6J("ngIf",_.user.user_quota),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota)}}function wo(t,o){if(1&t&&e.YNc(0,qo,47,20,"div",0),2&t){const _=e.oxw(2);e.Q6J("ngIf",_.user)}}const ko=function(t){return[t]};function Bo(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table",39),e.NdJ("updateSelection",function(i){return e.CHM(_),e.oxw(3).updateKeysSelection(i)}),e.TgZ(1,"div",40),e.TgZ(2,"div",41),e.TgZ(3,"button",42),e.NdJ("click",function(){return e.CHM(_),e.oxw(3).showKeyModal()}),e._UZ(4,"i",43),e.ynx(5),e.SDv(6,44),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&t){const _=e.oxw(3);e.Q6J("data",_.keys)("columns",_.keysColumns),e.xp6(3),e.Q6J("disabled",!_.keysSelection.hasSingleSelection),e.xp6(1),e.Q6J("ngClass",e.VKq(4,ko,_.icons.show))}}function Ho(t,o){1&t&&(e.TgZ(0,"li",37),e.TgZ(1,"a",4),e.SDv(2,38),e.qZA(),e.YNc(3,Bo,7,6,"ng-template",6),e.qZA())}function Xo(t,o){if(1&t&&(e.ynx(0),e.TgZ(1,"ul",1,2),e.TgZ(3,"li",3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,wo,1,1,"ng-template",6),e.qZA(),e.YNc(7,Ho,4,0,"li",7),e.qZA(),e._UZ(8,"div",8),e.BQk()),2&t){const _=e.MAs(2),n=e.oxw();e.xp6(7),e.Q6J("ngIf",n.keys.length),e.xp6(1),e.Q6J("ngbNavOutlet",_)}}let Ko=(()=>{class t{constructor(_,n){this.rgwUserService=_,this.modalService=n,this.keys=[],this.keysColumns=[],this.keysSelection=new Pe.r,this.icons=D.P}ngOnInit(){this.keysColumns=[{name:"Username",prop:"username",flexGrow:1},{name:"Type",prop:"type",flexGrow:1}],this.maxBucketsMap={"-1":"Disabled",0:"Unlimited"}}ngOnChanges(){this.selection&&(this.user=this.selection,this.user.subusers=u().sortBy(this.user.subusers,"id"),this.user.caps=u().sortBy(this.user.caps,"type"),this.rgwUserService.getQuota(this.user.uid).subscribe(_=>{u().extend(this.user,_)}),this.keys=[],this.user.keys&&this.user.keys.forEach(_=>{this.keys.push({id:this.keys.length+1,type:"S3",username:_.user,ref:_})}),this.user.swift_keys&&this.user.swift_keys.forEach(_=>{this.keys.push({id:this.keys.length+1,type:"Swift",username:_.user,ref:_})}),this.keys=u().sortBy(this.keys,"user"))}updateKeysSelection(_){this.keysSelection=_}showKeyModal(){const _=this.keysSelection.first(),n=this.modalService.show("S3"===_.type?Qe:Ye);switch(_.type){case"S3":n.componentInstance.setViewing(),n.componentInstance.setValues(_.ref.user,_.ref.access_key,_.ref.secret_key);break;case"Swift":n.componentInstance.setValues(_.ref.user,_.ref.secret_key)}}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(O),e.Y36(Te.Z))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-details"]],viewQuery:function(_,n){if(1&_&&(e.Gf(Co,5),e.Gf(po,5)),2&_){let i;e.iGM(i=e.CRH())&&(n.accessKeyTpl=i.first),e.iGM(i=e.CRH())&&(n.secretKeyTpl=i.first)}},inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let o,_,n,i,s,c,d,E,g,C,b,P,G,N,p,U,W,Z,$,h,I,v,F,T,x,y;return o="Details",_="Tenant",n="User ID",i="Username",s="Full name",c="Suspended",d="System",E="Maximum buckets",g="Email address",C="Subusers",b="Capabilities",P="MFAs(Id)",G="User quota",N="Enabled",p="Maximum size",U="Maximum objects",W="Unlimited",Z="Unlimited",$="Bucket quota",h="Enabled",I="Maximum size",v="Maximum objects",F="Unlimited",T="Unlimited",x="Keys",y="Show",[[4,"ngIf"],["ngbNav","","cdStatefulTab","rgw-user-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],o,["ngbNavContent",""],["ngbNavItem","keys",4,"ngIf"],[3,"ngbNavOutlet"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],_,[1,"w-75"],n,i,[1,"bold"],s,c,d,E,g,C,[4,"ngFor","ngForOf"],b,P,G,N,p,U,W,Z,$,h,I,v,F,T,["ngbNavItem","keys"],x,["columnMode","flex","selectionType","multi","forceIdentifier","true",3,"data","columns","updateSelection"],[1,"table-actions"],["dropdown","",1,"btn-group"],["type","button",1,"btn","btn-accent",3,"disabled","click"],[3,"ngClass"],y]},template:function(_,n){1&_&&e.YNc(0,Xo,9,2,"ng-container",0),2&_&&e.Q6J("ngIf",n.selection)},directives:[f.O5,M.Pz,Xe.m,M.nv,M.Vx,M.uN,M.tO,f.sg,z.a,q.o,f.mk],pipes:[Be.T,So.b,fo.A,qe.$],styles:[""]}),t})();const zo=["userSizeTpl"],Qo=["userObjectTpl"];function Yo(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",8),2&t){const _=e.oxw().row;e.Q6J("total",_.user_quota.max_size)("used",_.stats.size_actual)}}function Jo(t,o){1&t&&e.SDv(0,9)}function Vo(t,o){if(1&t&&(e.YNc(0,Yo,1,2,"cd-usage-bar",6),e.YNc(1,Jo,1,0,"ng-template",null,7,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.user_quota.max_size>0&&_.user_quota.enabled)("ngIfElse",n)}}function jo(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",12),2&t){const _=e.oxw().row;e.Q6J("total",_.user_quota.max_objects)("used",_.stats.num_objects)("isBinary",!1)}}function ei(t,o){1&t&&e.SDv(0,13)}function _i(t,o){if(1&t&&(e.YNc(0,jo,1,3,"cd-usage-bar",10),e.YNc(1,ei,1,0,"ng-template",null,11,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.user_quota.max_objects>0&&_.user_quota.enabled)("ngIfElse",n)}}let ni=(()=>{class t extends be.o{constructor(_,n,i,s,c,d){super(d),this.authStorageService=_,this.rgwUserService=n,this.modalService=i,this.urlBuilder=s,this.actionLabels=c,this.ngZone=d,this.columns=[],this.users=[],this.selection=new Pe.r}ngOnInit(){this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:"Username",prop:"uid",flexGrow:1},{name:"Tenant",prop:"tenant",flexGrow:1},{name:"Full name",prop:"display_name",flexGrow:1},{name:"Email address",prop:"email",flexGrow:1},{name:"Suspended",prop:"suspended",flexGrow:1,cellClass:"text-center",cellTransformation:je.e.checkIcon},{name:"Max. buckets",prop:"max_buckets",flexGrow:1,cellTransformation:je.e.map,customTemplateConfig:{"-1":"Disabled",0:"Unlimited"}},{name:"Capacity Limit %",prop:"size_usage",cellTemplate:this.userSizeTpl,flexGrow:.8},{name:"Object Limit %",prop:"object_usage",cellTemplate:this.userObjectTpl,flexGrow:.8}];const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().uid)}`;this.tableActions=[{permission:"create",icon:D.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:c=>!c.hasSelection},{permission:"update",icon:D.P.edit,routerLink:()=>this.urlBuilder.getEdit(_()),name:this.actionLabels.EDIT},{permission:"delete",icon:D.P.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:c=>c.hasMultiSelection}],this.setTableRefreshTimeout()}getUserList(_){this.setTableRefreshTimeout(),this.rgwUserService.list().subscribe(n=>{this.users=n},()=>{_.error()})}updateSelection(_){this.selection=_}deleteAction(){this.modalService.show(ye.M,{itemDescription:this.selection.hasSingleSelection?"user":"users",itemNames:this.selection.selected.map(_=>_.uid),submitActionObservable:()=>new xe.y(_=>{(0,Y.D)(this.selection.selected.map(n=>this.rgwUserService.delete(n.uid))).subscribe({error:n=>{_.error(n),this.table.refreshBtn()},complete:()=>{_.complete(),this.table.refreshBtn()}})})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Ee.j),e.Y36(O),e.Y36(Te.Z),e.Y36(Q.F),e.Y36(A.p4),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-list"]],viewQuery:function(_,n){if(1&_&&(e.Gf(z.a,7),e.Gf(zo,7),e.Gf(Qo,7)),2&_){let i;e.iGM(i=e.CRH())&&(n.table=i.first),e.iGM(i=e.CRH())&&(n.userSizeTpl=i.first),e.iGM(i=e.CRH())&&(n.userObjectTpl=i.first)}},features:[e._Bn([{provide:Q.F,useValue:new Q.F("rgw/user")}]),e.qOj],decls:8,vars:9,consts:function(){let o,_;return o="No Limit",_="No Limit",[["columnMode","flex","selectionType","multiClick","identifier","uid",3,"autoReload","data","columns","hasDetails","status","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["userSizeTpl",""],["userObjectTpl",""],[3,"total","used",4,"ngIf","ngIfElse"],["noSizeQuota",""],[3,"total","used"],o,[3,"total","used","isBinary",4,"ngIf","ngIfElse"],["noObjectQuota",""],[3,"total","used","isBinary"],_]},template:function(_,n){1&_&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(s){return n.setExpandedRow(s)})("updateSelection",function(s){return n.updateSelection(s)})("fetchData",function(s){return n.getUserList(s)}),e._UZ(2,"cd-table-actions",2),e._UZ(3,"cd-rgw-user-details",3),e.qZA(),e.YNc(4,Vo,3,2,"ng-template",null,4,e.W1O),e.YNc(6,_i,3,2,"ng-template",null,5,e.W1O)),2&_&&(e.Q6J("autoReload",!1)("data",n.users)("columns",n.columns)("hasDetails",!0)("status",n.tableStatus),e.xp6(2),e.Q6J("permission",n.permission)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("selection",n.expandedRow))},directives:[z.a,ke.K,Ko,f.O5,He.O],styles:[""]}),t})(),e_=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[f.ez,N_.m,a.u5,a.UX,O_.B,M.Oz,w.Bz,M.HK,Ue.b]]}),t})();const oi=[{path:""},{path:"daemon",component:kt,data:{breadcrumbs:"Daemons"}},{path:"user",data:{breadcrumbs:"Users"},children:[{path:"",component:ni},{path:A.MQ.CREATE,component:Ve,data:{breadcrumbs:A.Qn.CREATE}},{path:`${A.MQ.EDIT}/:uid`,component:Ve,data:{breadcrumbs:A.Qn.EDIT}}]},{path:"bucket",data:{breadcrumbs:"Buckets"},children:[{path:"",component:Ot},{path:A.MQ.CREATE,component:De,data:{breadcrumbs:A.Qn.CREATE}},{path:`${A.MQ.EDIT}/:bid`,component:De,data:{breadcrumbs:A.Qn.EDIT}}]}];let ii=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[e_,w.Bz.forChild(oi)]]}),t})()}}]); \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/3rdpartylicenses.txt b/src/pybind/mgr/dashboard/frontend/dist/en-US/3rdpartylicenses.txt new file mode 100644 index 000000000..0f40b833c --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/3rdpartylicenses.txt @@ -0,0 +1,3508 @@ +@angular/animations +MIT + +@angular/common +MIT + +@angular/core +MIT + +@angular/forms +MIT + +@angular/platform-browser +MIT + +@angular/router +MIT + +@babel/runtime +MIT +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +@babel/runtime-corejs3 +MIT +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +@braintree/sanitize-url +MIT +MIT License + +Copyright (c) 2017 Braintree + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +@circlon/angular-tree-component +MIT +The MIT License (MIT) + +Copyright (c) 2020 Circlon Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +@juggle/resize-observer +Apache-2.0 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 JUGGLE LTD + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +@ng-bootstrap/ng-bootstrap +MIT +The MIT License (MIT) + +Copyright (c) 2015-2018 Angular ng-bootstrap team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +@swimlane/ngx-datatable +MIT +(The MIT License) + +Copyright (c) 2019 Swimlane + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +async-mutex +MIT +The MIT License (MIT) + +Copyright (c) 2016 Christian Speckner + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +autolinker +MIT +The MIT License (MIT) + +Copyright (c) 2014 Gregory Jacobs (http://greg-jacobs.com) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +balanced-match +MIT +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +base64-js +MIT +The MIT License (MIT) + +Copyright (c) 2014 Jameson Little + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +brace-expansion +MIT +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +call-bind +MIT +MIT License + +Copyright (c) 2020 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +can-use-dom +MIT +The MIT License (MIT) + +Copyright (c) 2015 Kiran Abburi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +chart.js +MIT +The MIT License (MIT) + +Copyright (c) 2018 Chart.js Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +classnames +MIT +The MIT License (MIT) + +Copyright (c) 2018 Jed Watson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +concat-map +MIT +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +cookie +MIT +(The MIT License) + +Copyright (c) 2012-2014 Roman Shtylman +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +copy-to-clipboard +MIT +MIT License + +Copyright (c) 2017 sudodoki + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +core-js +MIT +Copyright (c) 2014-2022 Denis Pushkarev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +core-js-pure +MIT +Copyright (c) 2014-2022 Denis Pushkarev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +cross-fetch +MIT +The MIT License (MIT) + +Copyright (c) 2017 Leonardo Quixadá + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +css.escape +MIT +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +deepmerge +MIT +The MIT License (MIT) + +Copyright (c) 2012 James Halliday, Josh Duff, and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +detect-browser +MIT +The MIT License (MIT) + +Copyright (c) 2019 Damon Oehlman + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +dompurify +(MPL-2.0 OR Apache-2.0) +DOMPurify +Copyright 2015 Mario Heiderich + +DOMPurify is free software; you can redistribute it and/or modify it under the +terms of either: + +a) the Apache License Version 2.0, or +b) the Mozilla Public License Version 2.0 + +----------------------------------------------------------------------------- + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +----------------------------------------------------------------------------- +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + + +drange +MIT +The MIT License (MIT) + +Copyright (c) 2014 David Tudury + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +fast-json-patch +MIT +(The MIT License) + +Copyright (c) 2013, 2014, 2020 Joachim Wester + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +fault +MIT +(The MIT License) + +Copyright (c) 2015 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +file-saver +MIT +The MIT License + +Copyright © 2016 [Eli Grey][1]. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + [1]: http://eligrey.com + + +format +MIT + +formdata-node +MIT +The MIT License (MIT) + +Copyright (c) 2017-present Nick K. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +function-bind +MIT +Copyright (c) 2013 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + +get-intrinsic +MIT +MIT License + +Copyright (c) 2020 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +has +MIT +Copyright (c) 2013 Thiago de Arruda + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +has-symbols +MIT +MIT License + +Copyright (c) 2016 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +highlight.js +BSD-3-Clause +BSD 3-Clause License + +Copyright (c) 2006, Ivan Sagalaev. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +hoist-non-react-statics +BSD-3-Clause +Software License Agreement (BSD License) +======================================== + +Copyright (c) 2015, Yahoo! Inc. All rights reserved. +---------------------------------------------------- + +Redistribution and use of this software in source and binary forms, with or +without modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Yahoo! Inc. nor the names of YUI's contributors may be + used to endorse or promote products derived from this software without + specific prior written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +ieee754 +BSD-3-Clause +Copyright 2008 Fair Oaks Labs, Inc. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +immutable +MIT +MIT License + +Copyright (c) 2014-present, Facebook, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +is-plain-object +MIT +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +js-file-download +MIT +Copyright 2017 Kenneth Jiang + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE + + +js-yaml +MIT +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +lodash +MIT +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + +lodash-es +MIT +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + +lodash.debounce +MIT +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + +lodash.memoize +MIT +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + +lodash.throttle +MIT +Copyright jQuery Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + + +lowlight +MIT +(The MIT License) + +Copyright (c) 2016 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +mobx +MIT +The MIT License (MIT) + +Copyright (c) 2015 Michel Weststrate + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +moment +MIT +Copyright (c) JS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +ng-block-ui +MIT +MIT License + +Copyright (c) 2017 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +ng-click-outside +MIT +The MIT License (MIT) + +Copyright (c) 2016 Eugene Cheung + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +ng2-charts +ISC + +ngx-pipe-function +MIT License + +Copyright (c) 2019 Artem Lanovyy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +ngx-toastr +MIT +The MIT License (MIT) + +Copyright (c) Scott Cooper + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +object-assign +MIT +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +object-inspect +MIT +MIT License + +Copyright (c) 2013 James Halliday + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +prop-types +MIT +MIT License + +Copyright (c) 2013-present, Facebook, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +punycode +MIT +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +qs +BSD-3-Clause +BSD 3-Clause License + +Copyright (c) 2014, Nathan LaFreniere and other [contributors](https://github.com/ljharb/qs/graphs/contributors) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +querystring +MIT + +Copyright 2012 Irakli Gozalishvili. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + + +querystringify +MIT +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +randexp +MIT +MIT License + +Copyright (C) 2011 by fent + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +react +MIT +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +react-copy-to-clipboard +MIT +The MIT License (MIT) + +Copyright (c) 2016 Nik Butenko + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +react-debounce-input +MIT +The MIT License (MIT) + +Copyright (c) 2016 Nik Butenko + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +react-dom +MIT +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +react-immutable-proptypes +MIT +The MIT License (MIT) + +Copyright (c) 2015 James Burnett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +react-immutable-pure-component +MIT +The MIT License (MIT) + +Copyright (c) 2017 Piotr Tomasz Monarski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +react-is +MIT +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +react-redux +MIT +The MIT License (MIT) + +Copyright (c) 2015-present Dan Abramov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +react-syntax-highlighter +MIT +MIT License + +Copyright (c) 2019 Conor Hastings + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +redux +MIT +The MIT License (MIT) + +Copyright (c) 2015-present Dan Abramov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +redux-immutable +BSD-3-Clause +Copyright (c) 2016, Gajus Kuizinas (http://gajus.com/) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the Gajus Kuizinas (http://gajus.com/) nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL ANUARY BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +remarkable +MIT +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert +Copyright (c) 2014 Jon Schlinkert, Vitaly Puzrin. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +repeat-string +MIT +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +requires-port +MIT +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +reselect +MIT +The MIT License (MIT) + +Copyright (c) 2015-2018 Reselect Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +ret +MIT +MIT License + +Copyright (C) 2011 by fent + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +rxjs +Apache-2.0 + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +scheduler +MIT +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +serialize-error +MIT +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +side-channel +MIT +MIT License + +Copyright (c) 2019 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +simplebar +MIT + +simplebar-angular +The MIT License (MIT) + +Copyright (c) 2015 Jonathan Nicol + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +swagger-client +Apache-2.0 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +swagger-ui +Apache-2.0 + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +toggle-selection +MIT + +traverse +MIT +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: +http://www.opensource.org/licenses/mit-license.php + +Copyright 2010 James Halliday (mail@substack.net) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +tslib +0BSD +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +url +MIT +The MIT License (MIT) + +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +url-parse +MIT +The MIT License (MIT) + +Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +xml-but-prettier +MIT +The MIT License (MIT) + +Copyright (c) 2015 Jonathan Persson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +zenscroll +Unlicense +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to + + + +zone.js +MIT +The MIT License + +Copyright (c) 2010-2020 Google LLC. http://angular.io/license + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/483.f42c1d67e206231ecdac.js b/src/pybind/mgr/dashboard/frontend/dist/en-US/483.f42c1d67e206231ecdac.js new file mode 100644 index 000000000..b1f3294a4 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/483.f42c1d67e206231ecdac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[483],{70483:(ct,Oe,p)=>{p.r(Oe),p.d(Oe,{BlockModule:()=>$t,RoutedBlockModule:()=>sr});var l=p(12057),a=p(24751),m=p(6283),ne=p(19723),N=p(38549),Ie=p(37496),v=p(79512),U=p(4222),re=p(54462),Ae=p(44466),be=p(23815),S=p.n(be),le=p(35758),D=p(64762),ie=p(58497),V=p(93523),e=p(74788);let X=class{constructor(s){this.http=s}listTargets(){return this.http.get("api/iscsi/target")}getTarget(s){return this.http.get(`api/iscsi/target/${s}`)}updateTarget(s,t){return this.http.put(`api/iscsi/target/${s}`,t,{observe:"response"})}status(){return this.http.get("ui-api/iscsi/status")}settings(){return this.http.get("ui-api/iscsi/settings")}version(){return this.http.get("ui-api/iscsi/version")}portals(){return this.http.get("ui-api/iscsi/portals")}createTarget(s){return this.http.post("api/iscsi/target",s,{observe:"response"})}deleteTarget(s){return this.http.delete(`api/iscsi/target/${s}`,{observe:"response"})}getDiscovery(){return this.http.get("api/iscsi/discoveryauth")}updateDiscovery(s){return this.http.put("api/iscsi/discoveryauth",s)}overview(){return this.http.get("ui-api/iscsi/overview")}};X.\u0275fac=function(s){return new(s||X)(e.LFG(ie.eN))},X.\u0275prov=e.Yz7({token:X,factory:X.\u0275fac,providedIn:"root"}),X=(0,D.gn)([V.o,(0,D.w6)("design:paramtypes",[ie.eN])],X);var Ne=p(88002),Fe=p(76189),L=p(19358),he=p(34089);let q=class extends Fe.S{constructor(s,t){super(),this.http=s,this.rbdConfigurationService=t}isRBDPool(s){return-1!==S().indexOf(s.application_metadata,"rbd")&&!s.pool_name.includes("/")}create(s){return this.http.post("api/block/image",s,{observe:"response"})}delete(s){return this.http.delete(`api/block/image/${s.toStringEncoded()}`,{observe:"response"})}update(s,t){return this.http.put(`api/block/image/${s.toStringEncoded()}`,t,{observe:"response"})}get(s){return this.http.get(`api/block/image/${s.toStringEncoded()}`)}list(s){return this.http.get("api/block/image",{params:s,headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"}).pipe((0,Ne.U)(t=>t.body.map(o=>(o.value.map(i=>(i.configuration&&i.configuration.map(_=>Object.assign(_,this.rbdConfigurationService.getOptionByName(_.name))),i)),o.headers=t.headers,o))))}copy(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/copy`,t,{observe:"response"})}flatten(s){return this.http.post(`api/block/image/${s.toStringEncoded()}/flatten`,null,{observe:"response"})}defaultFeatures(){return this.http.get("api/block/image/default_features")}cloneFormatVersion(){return this.http.get("api/block/image/clone_format_version")}createSnapshot(s,t){const o={snapshot_name:t};return this.http.post(`api/block/image/${s.toStringEncoded()}/snap`,o,{observe:"response"})}renameSnapshot(s,t,o){const i={new_snap_name:o};return this.http.put(`api/block/image/${s.toStringEncoded()}/snap/${t}`,i,{observe:"response"})}protectSnapshot(s,t,o){const i={is_protected:o};return this.http.put(`api/block/image/${s.toStringEncoded()}/snap/${t}`,i,{observe:"response"})}rollbackSnapshot(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/snap/${t}/rollback`,null,{observe:"response"})}cloneSnapshot(s,t,o){return this.http.post(`api/block/image/${s.toStringEncoded()}/snap/${t}/clone`,o,{observe:"response"})}deleteSnapshot(s,t){return this.http.delete(`api/block/image/${s.toStringEncoded()}/snap/${t}`,{observe:"response"})}listTrash(){return this.http.get("api/block/image/trash/")}createNamespace(s,t){return this.http.post(`api/block/pool/${s}/namespace`,{namespace:t},{observe:"response"})}listNamespaces(s){return this.http.get(`api/block/pool/${s}/namespace/`)}deleteNamespace(s,t){return this.http.delete(`api/block/pool/${s}/namespace/${t}`,{observe:"response"})}moveTrash(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/move_trash`,{delay:t},{observe:"response"})}purgeTrash(s){return this.http.post(`api/block/image/trash/purge/?pool_name=${s}`,null,{observe:"response"})}restoreTrash(s,t){return this.http.post(`api/block/image/trash/${s.toStringEncoded()}/restore`,{new_image_name:t},{observe:"response"})}removeTrash(s,t=!1){return this.http.delete(`api/block/image/trash/${s.toStringEncoded()}/?force=${t}`,{observe:"response"})}};q.\u0275fac=function(s){return new(s||q)(e.LFG(ie.eN),e.LFG(he.n))},q.\u0275prov=e.Yz7({token:q,factory:q.\u0275fac,providedIn:"root"}),(0,D.gn)([(0,D.fM)(1,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[L.N,String]),(0,D.w6)("design:returntype",void 0)],q.prototype,"createSnapshot",null),(0,D.gn)([(0,D.fM)(2,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[L.N,String,String]),(0,D.w6)("design:returntype",void 0)],q.prototype,"renameSnapshot",null),(0,D.gn)([(0,D.fM)(2,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[L.N,String,Boolean]),(0,D.w6)("design:returntype",void 0)],q.prototype,"protectSnapshot",null),(0,D.gn)([(0,D.fM)(1,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[L.N,String]),(0,D.w6)("design:returntype",void 0)],q.prototype,"restoreTrash",null),q=(0,D.gn)([V.o,(0,D.w6)("design:paramtypes",[ie.eN,he.n])],q);var F=p(7022),x=p(14745),T=p(65862),H=p(93614),y=p(95463),z=p(77205),A=p(86919),R=p(76111),u=p(32337),C=p(60312),h=p(41582),O=p(56310),$=p(87925),k=p(94276),j=p(30839);function to(n,s){if(1&n&&(e.TgZ(0,"option",6),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngValue",t),e.xp6(1),e.Oqu(t)}}function oo(n,s){if(1&n&&(e.TgZ(0,"select",5),e._UZ(1,"option",6),e.YNc(2,to,2,2,"option",7),e.qZA()),2&n){const t=e.oxw();e.s9C("id",t.setting),e.s9C("name",t.setting),e.Q6J("formControlName",t.setting),e.xp6(1),e.Q6J("ngValue",null),e.xp6(1),e.Q6J("ngForOf",t.limits.values)}}function no(n,s){if(1&n&&e._UZ(0,"input",10),2&n){const t=e.oxw(2);e.Q6J("formControlName",t.setting)}}function io(n,s){if(1&n&&e._UZ(0,"input",11),2&n){const t=e.oxw(2);e.Q6J("formControlName",t.setting)}}function so(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"br"),e.TgZ(2,"div",12),e._UZ(3,"input",13),e.TgZ(4,"label",14),e._uU(5,"Yes"),e.qZA(),e.qZA(),e.TgZ(6,"div",12),e._UZ(7,"input",13),e.TgZ(8,"label",14),e._uU(9,"No"),e.qZA(),e.qZA(),e.BQk()),2&n){const t=e.oxw(2);e.xp6(3),e.Q6J("id",t.setting+"True")("value",!0)("formControlName",t.setting),e.xp6(1),e.Q6J("for",t.setting+"True"),e.xp6(3),e.Q6J("id",t.setting+"False")("value",!1)("formControlName",t.setting),e.xp6(1),e.Q6J("for",t.setting+"False")}}function _o(n,s){if(1&n&&(e.TgZ(0,"span"),e.YNc(1,no,1,1,"input",8),e.YNc(2,io,1,1,"input",9),e.YNc(3,so,10,8,"ng-container",3),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf","int"===t.limits.type),e.xp6(1),e.Q6J("ngIf","str"===t.limits.type),e.xp6(1),e.Q6J("ngIf","bool"===t.limits.type)}}function ao(n,s){if(1&n&&(e.TgZ(0,"span",15),e.ynx(1),e.SDv(2,16),e.BQk(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.limits.min),e.QtT(2)}}function ro(n,s){if(1&n&&(e.TgZ(0,"span",15),e.ynx(1),e.SDv(2,17),e.BQk(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.limits.max),e.QtT(2)}}let dt=(()=>{class n{ngOnInit(){const t=[];"min"in this.limits&&t.push(a.kI.min(this.limits.min)),"max"in this.limits&&t.push(a.kI.max(this.limits.max)),this.settingsForm.get(this.setting).setValidators(t)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-setting"]],inputs:{settingsForm:"settingsForm",formDir:"formDir",setting:"setting",limits:"limits"},decls:7,vars:7,consts:function(){let s,t;return s="Must be greater than or equal to " + "\ufffd0\ufffd" + ".",t="Must be less than or equal to " + "\ufffd0\ufffd" + ".",[[1,"form-group",3,"formGroup"],[1,"col-form-label",3,"for"],["class","form-control",3,"id","name","formControlName",4,"ngIf"],[4,"ngIf"],["class","invalid-feedback",4,"ngIf"],[1,"form-control",3,"id","name","formControlName"],[3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf"],["type","number","class","form-control",3,"formControlName",4,"ngIf"],["type","text","class","form-control",3,"formControlName",4,"ngIf"],["type","number",1,"form-control",3,"formControlName"],["type","text",1,"form-control",3,"formControlName"],[1,"custom-control","custom-radio","custom-control-inline"],["type","radio",1,"custom-control-input",3,"id","value","formControlName"],[1,"custom-control-label",3,"for"],[1,"invalid-feedback"],s,t]},template:function(t,o){1&t&&(e.TgZ(0,"div",0),e.TgZ(1,"label",1),e._uU(2),e.qZA(),e.YNc(3,oo,3,5,"select",2),e.YNc(4,_o,4,3,"span",3),e.YNc(5,ao,3,1,"span",4),e.YNc(6,ro,3,1,"span",4),e.qZA()),2&t&&(e.Q6J("formGroup",o.settingsForm),e.xp6(1),e.s9C("for",o.setting),e.xp6(1),e.Oqu(o.setting),e.xp6(1),e.Q6J("ngIf","enum"===o.limits.type),e.xp6(1),e.Q6J("ngIf","enum"!==o.limits.type),e.xp6(1),e.Q6J("ngIf",o.settingsForm.showError(o.setting,o.formDir,"min")),e.xp6(1),e.Q6J("ngIf",o.settingsForm.showError(o.setting,o.formDir,"max")))},directives:[O.P,a.JL,a.sg,h.V,l.O5,$.o,a.EJ,k.b,a.JJ,a.u,a.YN,a.Kr,l.sg,a.wV,a.Fj,a._],styles:[""]}),n})();var Je=p(88820);function lo(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function co(n,s){if(1&n&&(e.TgZ(0,"span"),e.TgZ(1,"legend",10),e.SDv(2,21),e.qZA(),e.TgZ(3,"div",12),e.TgZ(4,"div",13),e.TgZ(5,"label",22),e.SDv(6,23),e.qZA(),e._UZ(7,"input",24),e.YNc(8,lo,2,0,"span",25),e.qZA(),e.qZA(),e.TgZ(9,"div",12),e.TgZ(10,"div",13),e.TgZ(11,"label",26),e.SDv(12,27),e.qZA(),e._UZ(13,"input",28),e.qZA(),e.qZA(),e.qZA()),2&n){const t=e.oxw(),o=e.MAs(9);e.xp6(8),e.Q6J("ngIf",t.settingsForm.showError("lun",o,"required"))}}function po(n,s){if(1&n&&(e.TgZ(0,"option",31),e._uU(1),e.ALo(2,"iscsiBackstore"),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(e.lcZ(2,2,t))}}function go(n,s){if(1&n&&(e.TgZ(0,"div",12),e.TgZ(1,"div",13),e._UZ(2,"cd-iscsi-setting",33),e.qZA(),e.qZA()),2&n){const t=s.$implicit,o=e.oxw(2).$implicit,i=e.oxw(),_=e.MAs(9);e.xp6(2),e.Q6J("settingsForm",i.settingsForm)("formDir",_)("setting",t.key)("limits",i.getDiskControlLimits(o,t.key))}}function uo(n,s){if(1&n&&(e.ynx(0),e.YNc(1,go,3,4,"div",32),e.ALo(2,"keyvalue"),e.BQk()),2&n){const t=e.oxw().$implicit,o=e.oxw();e.xp6(1),e.Q6J("ngForOf",e.lcZ(2,1,o.disk_default_controls[t]))}}function mo(n,s){if(1&n&&(e.ynx(0),e.YNc(1,uo,3,3,"ng-container",9),e.BQk()),2&n){const t=s.$implicit,o=e.oxw();e.xp6(1),e.Q6J("ngIf",o.settingsForm.value.backstore===t)}}let To=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.iscsiService=o,this.actionLabels=i}ngOnInit(){const t={backstore:new a.NI(this.imagesSettings[this.image].backstore),lun:new a.NI(this.imagesSettings[this.image].lun),wwn:new a.NI(this.imagesSettings[this.image].wwn)};S().forEach(this.backstores,o=>{const i=this.imagesSettings[this.image][o]||{};S().forIn(this.disk_default_controls[o],(_,r)=>{t[r]=new a.NI(i[r])})}),this.settingsForm=new y.d(t)}getDiskControlLimits(t,o){return this.disk_controls_limits?this.disk_controls_limits[t][o]:{type:"int"}}save(){const t=this.settingsForm.controls.backstore.value,o=this.settingsForm.controls.lun.value,i=this.settingsForm.controls.wwn.value,_={};S().forIn(this.settingsForm.controls,(r,c)=>{""!==r.value&&null!==r.value&&c in this.disk_default_controls[this.settingsForm.value.backstore]&&(_[c]=r.value,S().forEach(this.backstores,d=>{d!==t&&c in(this.imagesSettings[this.image][d]||{})&&(this.imagesSettings[this.image][d][c]=r.value)}))}),this.imagesSettings[this.image].backstore=t,this.imagesSettings[this.image].lun=o,this.imagesSettings[this.image].wwn=i,this.imagesSettings[this.image][t]=_,this.imagesSettings=Object.assign({},this.imagesSettings),this.control.updateValueAndValidity({emitEvent:!1}),this.activeModal.close()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(X),e.Y36(v.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-image-settings-modal"]],decls:25,vars:8,consts:function(){let s,t,o,i,_,r,c,d;return s="Configure",t="Changing these parameters from their default values is usually not necessary.",o="Settings",i="Backstore",_="Identifier",r="lun",c="wwn",d="This field is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","settingsForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"alert-warning"],t,[4,"ngIf"],[1,"cd-header"],o,[1,"form-group","row"],[1,"col-sm-12"],[1,"col-form-label"],i,["id","backstore","name","backstore","formControlName","backstore",1,"form-control"],[3,"value",4,"ngFor","ngForOf"],[4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],_,["for","lun",1,"col-form-label","required"],r,["type","number","id","lun","name","lun","formControlName","lun",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","wwn",1,"col-form-label"],c,["type","text","id","wwn","name","wwn","formControlName","wwn",1,"form-control"],[1,"invalid-feedback"],d,[3,"value"],["class","form-group row",4,"ngFor","ngForOf"],[3,"settingsForm","formDir","setting","limits"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.ynx(2),e.SDv(3,2),e.BQk(),e._uU(4,"\xa0 "),e.TgZ(5,"small"),e._uU(6),e.qZA(),e.BQk(),e.ynx(7,3),e.TgZ(8,"form",4,5),e.TgZ(10,"div",6),e.TgZ(11,"p",7),e.SDv(12,8),e.qZA(),e.YNc(13,co,14,1,"span",9),e.TgZ(14,"legend",10),e.SDv(15,11),e.qZA(),e.TgZ(16,"div",12),e.TgZ(17,"div",13),e.TgZ(18,"label",14),e.SDv(19,15),e.qZA(),e.TgZ(20,"select",16),e.YNc(21,po,3,4,"option",17),e.qZA(),e.qZA(),e.qZA(),e.YNc(22,mo,2,1,"ng-container",18),e.qZA(),e.TgZ(23,"div",19),e.TgZ(24,"cd-form-button-panel",20),e.NdJ("submitActionEvent",function(){return o.save()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(6),e.Oqu(o.image),e.xp6(2),e.Q6J("formGroup",o.settingsForm),e.xp6(5),e.Q6J("ngIf",o.api_version>=1),e.xp6(8),e.Q6J("ngForOf",o.backstores),e.xp6(1),e.Q6J("ngForOf",o.backstores),e.xp6(2),e.Q6J("form",o.settingsForm)("submitText",o.actionLabels.UPDATE))},directives:[C.z,a._Y,a.JL,a.sg,h.V,l.O5,O.P,$.o,a.EJ,k.b,a.JJ,a.u,l.sg,j.p,a.wV,a.Fj,a.YN,a.Kr,dt],pipes:[Je.V,l.Nd],styles:[""]}),n})();function fo(n,s){if(1&n&&(e.TgZ(0,"div",12),e.TgZ(1,"div",13),e._UZ(2,"cd-iscsi-setting",14),e.qZA(),e.qZA()),2&n){const t=s.$implicit,o=e.oxw(),i=e.MAs(5);e.xp6(2),e.Q6J("settingsForm",o.settingsForm)("formDir",i)("setting",t.key)("limits",o.getTargetControlLimits(t.key))}}let Co=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.iscsiService=o,this.actionLabels=i}ngOnInit(){const t={};S().forIn(this.target_default_controls,(o,i)=>{t[i]=new a.NI(this.target_controls.value[i])}),this.settingsForm=new y.d(t)}save(){const t={};S().forIn(this.settingsForm.controls,(o,i)=>{""===o.value||null===o.value||(t[i]=o.value)}),this.target_controls.setValue(t),this.activeModal.close()}getTargetControlLimits(t){return this.target_controls_limits?this.target_controls_limits[t]:["Yes","No"].includes(this.target_default_controls[t])?{type:"bool"}:{type:"int"}}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(X),e.Y36(v.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-iqn-settings-modal"]],decls:13,vars:7,consts:function(){let s,t;return s="Advanced Settings",t="Changing these parameters from their default values is usually not necessary.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","settingsForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"alert-warning"],t,["class","form-group row",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"form-group","row"],[1,"col-sm-12"],[3,"settingsForm","formDir","setting","limits"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"p",7),e.SDv(8,8),e.qZA(),e.YNc(9,fo,3,4,"div",9),e.ALo(10,"keyvalue"),e.qZA(),e.TgZ(11,"div",10),e.TgZ(12,"cd-form-button-panel",11),e.NdJ("submitActionEvent",function(){return o.save()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.settingsForm),e.xp6(5),e.Q6J("ngForOf",e.lcZ(10,5,o.settingsForm.controls)),e.xp6(3),e.Q6J("form",o.settingsForm)("submitText",o.actionLabels.UPDATE))},directives:[C.z,a._Y,a.JL,a.sg,h.V,l.sg,j.p,O.P,dt],pipes:[l.Nd],styles:[""]}),n})();var de=p(63285),pt=p(63622);let So=(()=>{class n{constructor(t){this.ngControl=t}onInput(t){this.setValue(t)}setValue(t){t=S().isString(t)?t.trim():t,this.ngControl.control.setValue(t)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(a.a5))},n.\u0275dir=e.lG2({type:n,selectors:[["","cdTrim",""]],hostBindings:function(t,o){1&t&&e.NdJ("input",function(_){return o.onInput(_.target.value)})}}),n})();var Eo=p(39092),gt=p(4416),Ye=p(58039),et=p(10545);function Ro(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,42),e.qZA())}function Mo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,43),e.qZA())}function Oo(n,s){1&n&&(e.TgZ(0,"span",41),e.ynx(1),e.SDv(2,44),e.BQk(),e._UZ(3,"br"),e.ynx(4),e.SDv(5,45),e.BQk(),e._UZ(6,"br"),e.TgZ(7,"a",46),e.SDv(8,47),e.qZA(),e.qZA())}function Ao(n,s){1&n&&(e.TgZ(0,"span",48),e.SDv(1,49),e.qZA())}const J=function(n){return[n]};function ho(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",50),e._UZ(2,"input",51),e.TgZ(3,"span",14),e.TgZ(4,"button",52),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,r=i.$implicit;return e.oxw(2).removePortal(_,r)}),e._UZ(5,"i",16),e.qZA(),e.qZA(),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("value",t),e.xp6(3),e.Q6J("ngClass",e.VKq(2,J,o.icons.destroy))}}function Po(n,s){if(1&n&&(e.TgZ(0,"span",41),e.SDv(1,53),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.pQV(t.minimum_gateways),e.QtT(1)}}function Io(n,s){if(1&n&&(e.TgZ(0,"div",56),e._uU(1),e.qZA()),2&n){const t=e.oxw().$implicit,o=e.oxw(2);e.xp6(1),e.hij("lun: ",o.imagesSettings[t].lun,"")}}function bo(n,s){if(1&n&&(e.ynx(0),e.SDv(1,57),e.ALo(2,"iscsiBackstore"),e.BQk()),2&n){const t=e.oxw().$implicit,o=e.oxw(2);e.xp6(2),e.pQV(e.lcZ(2,1,o.imagesSettings[t].backstore)),e.QtT(1)}}function No(n,s){1&n&&(e.ynx(0),e.SDv(1,58),e.BQk())}function Fo(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",50),e._UZ(2,"input",51),e.TgZ(3,"span",14),e.YNc(4,Io,2,1,"div",54),e.TgZ(5,"button",52),e.NdJ("click",function(){const _=e.CHM(t).$implicit;return e.oxw(2).imageSettingsModal(_)}),e._UZ(6,"i",16),e.qZA(),e.TgZ(7,"button",52),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,r=i.$implicit;return e.oxw(2).removeImage(_,r)}),e._UZ(8,"i",16),e.qZA(),e.qZA(),e.qZA(),e.TgZ(9,"span",48),e.YNc(10,bo,3,3,"ng-container",55),e.YNc(11,No,2,0,"ng-container",55),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngIf",o.api_version>=1),e.xp6(2),e.Q6J("ngClass",e.VKq(6,J,o.icons.deepCheck)),e.xp6(2),e.Q6J("ngClass",e.VKq(8,J,o.icons.destroy)),e.xp6(2),e.Q6J("ngIf",o.backstores.length>1),e.xp6(1),e.Q6J("ngIf",o.hasAdvancedSettings(o.imagesSettings[t][o.imagesSettings[t].backstore]))}}function Do(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,59),e.qZA())}function vo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,60),e.qZA())}function Lo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,78),e.qZA())}function $o(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,79),e.qZA())}function Zo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,80),e.qZA())}function Bo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,81),e.qZA())}function Go(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,82),e.qZA())}function xo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,83),e.qZA())}function yo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,84),e.qZA())}function wo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,85),e.qZA())}function qo(n,s){if(1&n&&(e.TgZ(0,"div",61),e.TgZ(1,"div",8),e.TgZ(2,"label",62),e.ynx(3),e.SDv(4,63),e.BQk(),e.qZA(),e.TgZ(5,"div",11),e._UZ(6,"input",64),e.YNc(7,Lo,2,0,"span",17),e.YNc(8,$o,2,0,"span",17),e.qZA(),e.qZA(),e.TgZ(9,"div",8),e.TgZ(10,"label",65),e.ynx(11),e.SDv(12,66),e.BQk(),e.qZA(),e.TgZ(13,"div",11),e.TgZ(14,"div",12),e._UZ(15,"input",67),e.TgZ(16,"span",14),e._UZ(17,"button",68),e._UZ(18,"cd-copy-2-clipboard-button",69),e.qZA(),e.qZA(),e.YNc(19,Zo,2,0,"span",17),e.YNc(20,Bo,2,0,"span",17),e.qZA(),e.qZA(),e.TgZ(21,"div",8),e.TgZ(22,"label",70),e.ynx(23),e.SDv(24,71),e.BQk(),e.qZA(),e.TgZ(25,"div",11),e._UZ(26,"input",72),e.YNc(27,Go,2,0,"span",17),e.YNc(28,xo,2,0,"span",17),e.qZA(),e.qZA(),e.TgZ(29,"div",8),e.TgZ(30,"label",73),e.ynx(31),e.SDv(32,74),e.BQk(),e.qZA(),e.TgZ(33,"div",11),e.TgZ(34,"div",12),e._UZ(35,"input",75),e.TgZ(36,"span",14),e._UZ(37,"button",76),e._UZ(38,"cd-copy-2-clipboard-button",77),e.qZA(),e.qZA(),e.YNc(39,yo,2,0,"span",17),e.YNc(40,wo,2,0,"span",17),e.qZA(),e.qZA(),e.qZA()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.targetForm.showError("user",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("user",t,"pattern")),e.xp6(11),e.Q6J("ngIf",o.targetForm.showError("password",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("password",t,"pattern")),e.xp6(7),e.Q6J("ngIf",o.targetForm.showError("mutual_user",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("mutual_user",t,"pattern")),e.xp6(11),e.Q6J("ngIf",o.targetForm.showError("mutual_password",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("mutual_password",t,"pattern"))}}function Ho(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,115),e.qZA())}function ko(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,116),e.qZA())}function Ko(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,117),e.qZA())}function Xo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,118),e.qZA())}function Qo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,119),e.qZA())}function zo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,120),e.qZA())}function Jo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,121),e.qZA())}function Yo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,122),e.qZA())}function Vo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,123),e.qZA())}function Uo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,124),e.qZA())}function jo(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,125),e.qZA())}function Wo(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",50),e._UZ(2,"input",51),e.TgZ(3,"span",14),e.TgZ(4,"button",52),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,r=i.$implicit,c=e.oxw(),d=c.$implicit,g=c.index;return e.oxw(3).removeInitiatorImage(d,_,g,r)}),e._UZ(5,"i",16),e.qZA(),e.qZA(),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(3),e.Q6J("ngClass",e.VKq(2,J,o.icons.destroy))}}function en(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,126),e.qZA())}function tn(n,s){if(1&n&&(e.TgZ(0,"div",22),e.TgZ(1,"div",23),e.TgZ(2,"cd-select",127),e._UZ(3,"i",25),e.ynx(4),e.SDv(5,128),e.BQk(),e.qZA(),e.qZA(),e.qZA()),2&n){const t=e.oxw(),o=t.$implicit,i=t.index,_=e.oxw(3);e.xp6(2),e.Q6J("data",o.getValue("luns"))("options",_.imagesInitiatorSelections[i])("messages",_.messages.initiatorImage),e.xp6(1),e.Q6J("ngClass",e.VKq(4,J,_.icons.add))}}function on(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",92),e.TgZ(1,"div",5),e.ynx(2),e.SDv(3,93),e.BQk(),e._uU(4),e.TgZ(5,"button",94),e.NdJ("click",function(){const _=e.CHM(t).index;return e.oxw(3).removeInitiator(_)}),e._UZ(6,"i",25),e.qZA(),e.qZA(),e.TgZ(7,"div",7),e.TgZ(8,"div",8),e.TgZ(9,"label",95),e.SDv(10,96),e.qZA(),e.TgZ(11,"div",11),e.TgZ(12,"input",97),e.NdJ("blur",function(){return e.CHM(t),e.oxw(3).updatedInitiatorSelector()}),e.qZA(),e.YNc(13,Ho,2,0,"span",17),e.YNc(14,ko,2,0,"span",17),e.YNc(15,Ko,2,0,"span",17),e.qZA(),e.qZA(),e.ynx(16,61),e.TgZ(17,"div",8),e.TgZ(18,"label",98),e.SDv(19,99),e.qZA(),e.TgZ(20,"div",11),e._UZ(21,"input",100),e.YNc(22,Xo,2,0,"span",17),e.YNc(23,Qo,2,0,"span",17),e.qZA(),e.qZA(),e.TgZ(24,"div",8),e.TgZ(25,"label",101),e.SDv(26,102),e.qZA(),e.TgZ(27,"div",11),e.TgZ(28,"div",12),e._UZ(29,"input",103),e.TgZ(30,"span",14),e._UZ(31,"button",104),e._UZ(32,"cd-copy-2-clipboard-button",105),e.qZA(),e.qZA(),e.YNc(33,zo,2,0,"span",17),e.YNc(34,Jo,2,0,"span",17),e.qZA(),e.qZA(),e.TgZ(35,"div",8),e.TgZ(36,"label",106),e.ynx(37),e.SDv(38,107),e.BQk(),e.qZA(),e.TgZ(39,"div",11),e._UZ(40,"input",108),e.YNc(41,Yo,2,0,"span",17),e.YNc(42,Vo,2,0,"span",17),e.qZA(),e.qZA(),e.TgZ(43,"div",8),e.TgZ(44,"label",109),e.SDv(45,110),e.qZA(),e.TgZ(46,"div",11),e.TgZ(47,"div",12),e._UZ(48,"input",111),e.TgZ(49,"span",14),e._UZ(50,"button",104),e._UZ(51,"cd-copy-2-clipboard-button",105),e.qZA(),e.qZA(),e.YNc(52,Uo,2,0,"span",17),e.YNc(53,jo,2,0,"span",17),e.qZA(),e.qZA(),e.BQk(),e.TgZ(54,"div",8),e.TgZ(55,"label",112),e.SDv(56,113),e.qZA(),e.TgZ(57,"div",11),e.YNc(58,Wo,6,4,"ng-container",21),e.YNc(59,en,2,0,"span",55),e.YNc(60,tn,6,6,"div",114),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&n){const t=s.$implicit,o=s.index;e.oxw(2);const i=e.MAs(2),_=e.oxw();e.Q6J("formGroup",t),e.xp6(4),e.hij(": ",t.getValue("client_iqn")," "),e.xp6(2),e.Q6J("ngClass",e.VKq(25,J,_.icons.destroy)),e.xp6(7),e.Q6J("ngIf",t.showError("client_iqn",i,"notUnique")),e.xp6(1),e.Q6J("ngIf",t.showError("client_iqn",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("client_iqn",i,"pattern")),e.xp6(6),e.Q6J("id","user"+o),e.xp6(1),e.Q6J("ngIf",t.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("user",i,"pattern")),e.xp6(6),e.Q6J("id","password"+o),e.xp6(2),e.Q6J("cdPasswordButton","password"+o),e.xp6(1),e.Q6J("source","password"+o),e.xp6(1),e.Q6J("ngIf",t.showError("password",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("password",i,"pattern")),e.xp6(6),e.Q6J("id","mutual_user"+o),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_user",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_user",i,"pattern")),e.xp6(6),e.Q6J("id","mutual_password"+o),e.xp6(2),e.Q6J("cdPasswordButton","mutual_password"+o),e.xp6(1),e.Q6J("source","mutual_password"+o),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_password",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_password",i,"pattern")),e.xp6(5),e.Q6J("ngForOf",t.getValue("luns")),e.xp6(1),e.Q6J("ngIf",t.getValue("cdIsInGroup")),e.xp6(1),e.Q6J("ngIf",!t.getValue("cdIsInGroup"))}}function nn(n,s){1&n&&(e.TgZ(0,"span",48),e.SDv(1,129),e.qZA())}function sn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8),e.TgZ(1,"label",86),e.SDv(2,87),e.qZA(),e.TgZ(3,"div",88),e.YNc(4,on,61,27,"div",89),e.TgZ(5,"div",22),e.TgZ(6,"div",23),e.YNc(7,nn,2,0,"span",18),e.TgZ(8,"button",90),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addInitiator(),!1}),e._UZ(9,"i",25),e.ynx(10),e.SDv(11,91),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(12,"hr"),e.qZA(),e.qZA()}if(2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",t.initiators.controls),e.xp6(3),e.Q6J("ngIf",0===t.initiators.controls.length),e.xp6(2),e.Q6J("ngClass",e.VKq(3,J,t.icons.add))}}function _n(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",50),e._UZ(2,"input",51),e.TgZ(3,"span",14),e.TgZ(4,"button",52),e.NdJ("click",function(){const _=e.CHM(t).index,r=e.oxw(),c=r.$implicit,d=r.index;return e.oxw(3).removeGroupInitiator(c,_,d)}),e._UZ(5,"i",16),e.qZA(),e.qZA(),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(3),e.Q6J("ngClass",e.VKq(2,J,o.icons.destroy))}}function an(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",50),e._UZ(2,"input",51),e.TgZ(3,"span",14),e.TgZ(4,"button",52),e.NdJ("click",function(){const _=e.CHM(t).index,r=e.oxw(),c=r.$implicit,d=r.index;return e.oxw(3).removeGroupDisk(c,_,d)}),e._UZ(5,"i",16),e.qZA(),e.qZA(),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(3),e.Q6J("ngClass",e.VKq(2,J,o.icons.destroy))}}function rn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",92),e.TgZ(1,"div",5),e.ynx(2),e.SDv(3,133),e.BQk(),e._uU(4),e.TgZ(5,"button",94),e.NdJ("click",function(){const _=e.CHM(t).index;return e.oxw(3).removeGroup(_)}),e._UZ(6,"i",25),e.qZA(),e.qZA(),e.TgZ(7,"div",7),e.TgZ(8,"div",8),e.TgZ(9,"label",134),e.SDv(10,135),e.qZA(),e.TgZ(11,"div",11),e._UZ(12,"input",136),e.qZA(),e.qZA(),e.TgZ(13,"div",8),e.TgZ(14,"label",137),e.ynx(15),e.SDv(16,138),e.BQk(),e.qZA(),e.TgZ(17,"div",11),e.YNc(18,_n,6,4,"ng-container",21),e.TgZ(19,"div",22),e.TgZ(20,"div",23),e.TgZ(21,"cd-select",24),e.NdJ("selection",function(i){const r=e.CHM(t).index;return e.oxw(3).onGroupMemberSelection(i,r)}),e._UZ(22,"i",25),e.ynx(23),e.SDv(24,139),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(25,"hr"),e.qZA(),e.qZA(),e.TgZ(26,"div",8),e.TgZ(27,"label",28),e.ynx(28),e.SDv(29,140),e.BQk(),e.qZA(),e.TgZ(30,"div",11),e.YNc(31,an,6,4,"ng-container",21),e.TgZ(32,"div",22),e.TgZ(33,"div",23),e.TgZ(34,"cd-select",127),e._UZ(35,"i",25),e.ynx(36),e.SDv(37,141),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(38,"hr"),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&n){const t=s.$implicit,o=s.index,i=e.oxw(3);e.Q6J("formGroup",t),e.xp6(4),e.hij(": ",t.getValue("group_id")," "),e.xp6(2),e.Q6J("ngClass",e.VKq(13,J,i.icons.destroy)),e.xp6(12),e.Q6J("ngForOf",t.getValue("members")),e.xp6(3),e.Q6J("data",t.getValue("members"))("options",i.groupMembersSelections[o])("messages",i.messages.groupInitiator),e.xp6(1),e.Q6J("ngClass",e.VKq(15,J,i.icons.add)),e.xp6(9),e.Q6J("ngForOf",t.getValue("disks")),e.xp6(3),e.Q6J("data",t.getValue("disks"))("options",i.groupDiskSelections[o])("messages",i.messages.initiatorImage),e.xp6(1),e.Q6J("ngClass",e.VKq(17,J,i.icons.add))}}function ln(n,s){1&n&&(e.TgZ(0,"span",48),e.SDv(1,142),e.qZA())}function cn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8),e.TgZ(1,"label",86),e.SDv(2,130),e.qZA(),e.TgZ(3,"div",131),e.YNc(4,rn,39,19,"div",89),e.TgZ(5,"div",22),e.TgZ(6,"div",23),e.YNc(7,ln,2,0,"span",18),e.TgZ(8,"button",90),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addGroup(),!1}),e._UZ(9,"i",25),e.ynx(10),e.SDv(11,132),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",t.groups.controls),e.xp6(3),e.Q6J("ngIf",0===t.groups.controls.length),e.xp6(2),e.Q6J("ngClass",e.VKq(3,J,t.icons.add))}}function dn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1),e.TgZ(1,"form",2,3),e.TgZ(3,"div",4),e.TgZ(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.TgZ(9,"div",8),e.TgZ(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e.TgZ(13,"div",12),e._UZ(14,"input",13),e.TgZ(15,"span",14),e.TgZ(16,"button",15),e.NdJ("click",function(){return e.CHM(t),e.oxw().targetSettingsModal()}),e._UZ(17,"i",16),e.qZA(),e.qZA(),e.qZA(),e.YNc(18,Ro,2,0,"span",17),e.YNc(19,Mo,2,0,"span",17),e.YNc(20,Oo,9,0,"span",17),e.YNc(21,Ao,2,0,"span",18),e._UZ(22,"hr"),e.qZA(),e.qZA(),e.TgZ(23,"div",8),e.TgZ(24,"label",19),e.SDv(25,20),e.qZA(),e.TgZ(26,"div",11),e.YNc(27,ho,6,4,"ng-container",21),e.TgZ(28,"div",22),e.TgZ(29,"div",23),e.TgZ(30,"cd-select",24),e.NdJ("selection",function(i){return e.CHM(t),e.oxw().onPortalSelection(i)}),e._UZ(31,"i",25),e.ynx(32),e.SDv(33,26),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(34,"input",27),e.YNc(35,Po,2,1,"span",17),e._UZ(36,"hr"),e.qZA(),e.qZA(),e.TgZ(37,"div",8),e.TgZ(38,"label",28),e.SDv(39,29),e.qZA(),e.TgZ(40,"div",11),e.YNc(41,Fo,12,10,"ng-container",21),e._UZ(42,"input",30),e.YNc(43,Do,2,0,"span",17),e.YNc(44,vo,2,0,"span",17),e.TgZ(45,"div",22),e.TgZ(46,"div",23),e.TgZ(47,"cd-select",24),e.NdJ("selection",function(i){return e.CHM(t),e.oxw().onImageSelection(i)}),e._UZ(48,"i",25),e.ynx(49),e.SDv(50,31),e.BQk(),e.qZA(),e.qZA(),e.qZA(),e._UZ(51,"hr"),e.qZA(),e.qZA(),e.TgZ(52,"div",8),e.TgZ(53,"div",32),e.TgZ(54,"div",33),e._UZ(55,"input",34),e.TgZ(56,"label",35),e.SDv(57,36),e.qZA(),e.qZA(),e._UZ(58,"hr"),e.qZA(),e.qZA(),e.YNc(59,qo,41,8,"div",37),e.YNc(60,sn,13,5,"div",38),e.YNc(61,cn,12,5,"div",38),e.qZA(),e.TgZ(62,"div",39),e.TgZ(63,"cd-form-button-panel",40),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().submit()}),e.ALo(64,"titlecase"),e.ALo(65,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.targetForm),e.xp6(6),e.pQV(e.lcZ(6,26,o.action))(e.lcZ(7,28,o.resource)),e.QtT(5),e.xp6(10),e.Q6J("ngClass",e.VKq(34,J,o.icons.deepCheck)),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"pattern")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"iqn")),e.xp6(1),e.Q6J("ngIf",o.hasAdvancedSettings(o.targetForm.getValue("target_controls"))),e.xp6(6),e.Q6J("ngForOf",o.portals.value),e.xp6(3),e.Q6J("data",o.portals.value)("options",o.portalsSelections)("messages",o.messages.portals),e.xp6(1),e.Q6J("ngClass",e.VKq(36,J,o.icons.add)),e.xp6(4),e.Q6J("ngIf",o.targetForm.showError("portals",t,"minGateways")),e.xp6(6),e.Q6J("ngForOf",o.targetForm.getValue("disks")),e.xp6(2),e.Q6J("ngIf",o.targetForm.showError("disks",t,"dupLunId")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("disks",t,"dupWwn")),e.xp6(3),e.Q6J("data",o.disks.value)("options",o.imagesSelections)("messages",o.messages.images),e.xp6(1),e.Q6J("ngClass",e.VKq(38,J,o.icons.add)),e.xp6(11),e.Q6J("ngIf",o.cephIscsiConfigVersion>10&&!o.targetForm.getValue("acl_enabled")),e.xp6(1),e.Q6J("ngIf",o.targetForm.getValue("acl_enabled")),e.xp6(1),e.Q6J("ngIf",o.targetForm.getValue("acl_enabled")),e.xp6(2),e.Q6J("form",o.targetForm)("submitText",e.lcZ(64,30,o.action)+" "+e.lcZ(65,32,o.resource))}}let ut=(()=>{class n extends H.E{constructor(t,o,i,_,r,c,d){super(),this.iscsiService=t,this.modalService=o,this.rbdService=i,this.router=_,this.route=r,this.taskWrapper=c,this.actionLabels=d,this.api_version=0,this.minimum_gateways=1,this.icons=T.P,this.isEdit=!1,this.portalsSelections=[],this.imagesInitiatorSelections=[],this.groupDiskSelections=[],this.groupMembersSelections=[],this.imagesSettings={},this.messages={portals:new F.a({noOptions:"There are no portals available."}),images:new F.a({noOptions:"There are no images available."}),initiatorImage:new F.a({noOptions:"There are no images available. Please make sure you add an image to the target."}),groupInitiator:new F.a({noOptions:"There are no initiators available. Please make sure you add an initiator to the target."})},this.IQN_REGEX=/^iqn\.(19|20)\d\d-(0[1-9]|1[0-2])\.\D{2,3}(\.[A-Za-z0-9-]+)+(:[A-Za-z0-9-\.]+)*$/,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.resource="target"}ngOnInit(){const t=new A.E(()=>{});t.pageInfo.limit=-1;const o=[this.iscsiService.listTargets(),this.rbdService.list(t.toParams()),this.iscsiService.portals(),this.iscsiService.settings(),this.iscsiService.version()];this.router.url.startsWith("/block/iscsi/targets/edit")&&(this.isEdit=!0,this.route.params.subscribe(i=>{this.target_iqn=decodeURIComponent(i.target_iqn),o.push(this.iscsiService.getTarget(this.target_iqn))})),this.action=this.isEdit?this.actionLabels.EDIT:this.actionLabels.CREATE,(0,le.D)(o).subscribe(i=>{const _=S()(i[0]).filter(c=>c.target_iqn!==this.target_iqn).flatMap(c=>c.disks).map(c=>`${c.pool}/${c.image}`).value();"api_version"in i[3]&&(this.api_version=i[3].api_version),this.minimum_gateways=i[3].config.minimum_gateways,this.target_default_controls=i[3].target_default_controls,this.target_controls_limits=i[3].target_controls_limits,this.disk_default_controls=i[3].disk_default_controls,this.disk_controls_limits=i[3].disk_controls_limits,this.backstores=i[3].backstores,this.default_backstore=i[3].default_backstore,this.unsupported_rbd_features=i[3].unsupported_rbd_features,this.required_rbd_features=i[3].required_rbd_features,this.imagesAll=S()(i[1]).flatMap(c=>c.value).filter(c=>!c.namespace&&!(-1!==_.indexOf(`${c.pool_name}/${c.name}`)||0===this.getValidBackstores(c).length)).value(),this.imagesSelections=this.imagesAll.map(c=>new x.$(!1,`${c.pool_name}/${c.name}`,""));const r=[];i[2].forEach(c=>{c.ip_addresses.forEach(d=>{r.push(new x.$(!1,c.name+":"+d,""))})}),this.portalsSelections=[...r],this.cephIscsiConfigVersion=i[4].ceph_iscsi_config_version,this.createForm(),i[5]&&this.resolveModel(i[5]),this.loadingReady()})}createForm(){if(this.targetForm=new y.d({target_iqn:new a.NI("iqn.2001-07.com.ceph:"+Date.now(),{validators:[a.kI.required,a.kI.pattern(this.IQN_REGEX)]}),target_controls:new a.NI({}),portals:new a.NI([],{validators:[z.h.custom("minGateways",t=>S().uniq(t.map(i=>i.split(":")[0])).length{const o=this.getLunIds(t);return o.length!==S().uniq(o).length}),z.h.custom("dupWwn",t=>{const o=this.getWwns(t);return o.length!==S().uniq(o).length})]}),initiators:new a.Oe([]),groups:new a.Oe([]),acl_enabled:new a.NI(!1)}),this.cephIscsiConfigVersion>10){const t=new y.d({user:new a.NI(""),password:new a.NI(""),mutual_user:new a.NI(""),mutual_password:new a.NI("")});this.setAuthValidator(t),this.targetForm.addControl("auth",t)}}resolveModel(t){this.targetForm.patchValue({target_iqn:t.target_iqn,target_controls:t.target_controls,acl_enabled:t.acl_enabled}),this.cephIscsiConfigVersion>10&&this.targetForm.patchValue({auth:t.auth});const o=[];S().forEach(t.portals,_=>{o.push(`${_.host}:${_.ip}`)}),this.targetForm.patchValue({portals:o});const i=[];S().forEach(t.disks,_=>{const r=`${_.pool}/${_.image}`;i.push(r),this.imagesSettings[r]={backstore:_.backstore},this.imagesSettings[r][_.backstore]=_.controls,"lun"in _&&(this.imagesSettings[r].lun=_.lun),"wwn"in _&&(this.imagesSettings[r].wwn=_.wwn),this.onImageSelection({option:{name:r,selected:!0}})}),this.targetForm.patchValue({disks:i}),S().forEach(t.clients,_=>{const r=this.addInitiator();_.luns=S().map(_.luns,c=>`${c.pool}/${c.image}`),r.patchValue(_)}),t.groups.forEach((_,r)=>{const c=this.addGroup();_.disks=S().map(_.disks,d=>`${d.pool}/${d.image}`),c.patchValue(_),S().forEach(_.members,d=>{this.onGroupMemberSelection({option:new x.$(!0,d,"")},r)})})}hasAdvancedSettings(t){return Object.values(t).length>0}get portals(){return this.targetForm.get("portals")}onPortalSelection(){this.portals.setValue(this.portals.value)}removePortal(t,o){return this.portalsSelections.forEach(i=>{i.name===o&&(i.selected=!1)}),this.portals.value.splice(t,1),this.portals.setValue(this.portals.value),!1}get disks(){return this.targetForm.get("disks")}removeImage(t,o){return this.imagesSelections.forEach(i=>{i.name===o&&(i.selected=!1)}),this.disks.value.splice(t,1),this.removeImageRefs(o),this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1}),!1}removeImageRefs(t){this.initiators.controls.forEach(o=>{const i=o.value.luns.filter(_=>_!==t);o.get("luns").setValue(i)}),this.groups.controls.forEach(o=>{const i=o.value.disks.filter(_=>_!==t);o.get("disks").setValue(i)}),S().forEach(this.imagesInitiatorSelections,(o,i)=>{this.imagesInitiatorSelections[i]=o.filter(_=>_.name!==t)}),S().forEach(this.groupDiskSelections,(o,i)=>{this.groupDiskSelections[i]=o.filter(_=>_.name!==t)})}getDefaultBackstore(t){let o=this.default_backstore;const i=this.getImageById(t);return this.validFeatures(i,this.default_backstore)||this.backstores.forEach(_=>{_!==this.default_backstore&&this.validFeatures(i,_)&&(o=_)}),o}isLunIdInUse(t,o){const i=this.disks.value.filter(_=>_!==o);return this.getLunIds(i).includes(t)}getLunIds(t){return S().map(t,o=>this.imagesSettings[o].lun)}nextLunId(t){const o=this.disks.value.filter(r=>r!==t),i=this.getLunIds(o);let _=0;for(;i.includes(_);)_++;return _}getWwns(t){return S().map(t,i=>this.imagesSettings[i].wwn).filter(i=>S().isString(i)&&""!==i)}onImageSelection(t){const o=t.option;if(o.selected){if(this.imagesSettings[o.name])this.isLunIdInUse(this.imagesSettings[o.name].lun,o.name)&&(this.imagesSettings[o.name].lun=this.nextLunId(o.name));else{const i=this.getDefaultBackstore(o.name);this.imagesSettings[o.name]={backstore:i,lun:this.nextLunId(o.name)},this.imagesSettings[o.name][i]={}}S().forEach(this.imagesInitiatorSelections,(i,_)=>{i.push(new x.$(!1,o.name,"")),this.imagesInitiatorSelections[_]=[...i]}),S().forEach(this.groupDiskSelections,(i,_)=>{i.push(new x.$(!1,o.name,"")),this.groupDiskSelections[_]=[...i]})}else this.removeImageRefs(o.name);this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1})}get initiators(){return this.targetForm.get("initiators")}addInitiator(){const t=new y.d({client_iqn:new a.NI("",{validators:[a.kI.required,z.h.custom("notUnique",i=>{const _=this.initiators.controls.reduce(function(r,c){return r.concat(c.value.client_iqn)},[]);return _.indexOf(i)!==_.lastIndexOf(i)}),a.kI.pattern(this.IQN_REGEX)]}),auth:new y.d({user:new a.NI(""),password:new a.NI(""),mutual_user:new a.NI(""),mutual_password:new a.NI("")}),luns:new a.NI([]),cdIsInGroup:new a.NI(!1)});this.setAuthValidator(t),this.initiators.push(t),S().forEach(this.groupMembersSelections,(i,_)=>{i.push(new x.$(!1,"","")),this.groupMembersSelections[_]=[...i]});const o=S().map(this.targetForm.getValue("disks"),i=>new x.$(!1,i,""));return this.imagesInitiatorSelections.push(o),t}setAuthValidator(t){z.h.validateIf(t.get("user"),()=>t.getValue("password")||t.getValue("mutual_user")||t.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[t.get("password"),t.get("mutual_user"),t.get("mutual_password")]),z.h.validateIf(t.get("password"),()=>t.getValue("user")||t.getValue("mutual_user")||t.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[t.get("user"),t.get("mutual_user"),t.get("mutual_password")]),z.h.validateIf(t.get("mutual_user"),()=>t.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[t.get("user"),t.get("password"),t.get("mutual_password")]),z.h.validateIf(t.get("mutual_password"),()=>t.getValue("mutual_user"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[t.get("user"),t.get("password"),t.get("mutual_user")])}removeInitiator(t){const o=this.initiators.value[t];this.initiators.removeAt(t),S().forEach(this.groupMembersSelections,(i,_)=>{i.splice(t,1),this.groupMembersSelections[_]=[...i]}),this.groups.controls.forEach(i=>{const _=i.value.members.filter(r=>r!==o.client_iqn);i.get("members").setValue(_)}),this.imagesInitiatorSelections.splice(t,1)}updatedInitiatorSelector(){this.initiators.controls.forEach(t=>{t.get("client_iqn").updateValueAndValidity({emitEvent:!1})}),S().forEach(this.groupMembersSelections,(t,o)=>{S().forEach(t,(i,_)=>{const r=i.name;i.name=this.initiators.controls[_].value.client_iqn,this.groups.controls.forEach(c=>{const d=c.value.members,g=d.indexOf(r);-1!==g&&(d[g]=i.name),c.get("members").setValue(d)})}),this.groupMembersSelections[o]=[...this.groupMembersSelections[o]]})}removeInitiatorImage(t,o,i,_){const r=t.getValue("luns");return r.splice(o,1),t.patchValue({luns:r}),this.imagesInitiatorSelections[i].forEach(c=>{c.name===_&&(c.selected=!1)}),!1}get groups(){return this.targetForm.get("groups")}addGroup(){const t=new y.d({group_id:new a.NI("",{validators:[a.kI.required]}),members:new a.NI([]),disks:new a.NI([])});this.groups.push(t);const o=S().map(this.targetForm.getValue("disks"),_=>new x.$(!1,_,""));this.groupDiskSelections.push(o);const i=S().map(this.initiators.value,_=>new x.$(!1,_.client_iqn,"",!_.cdIsInGroup));return this.groupMembersSelections.push(i),t}removeGroup(t){this.groups.removeAt(t),this.groupMembersSelections[t].filter(i=>i.selected).forEach(i=>{i.selected=!1,this.onGroupMemberSelection({option:i},t)}),this.groupMembersSelections.splice(t,1),this.groupDiskSelections.splice(t,1)}onGroupMemberSelection(t,o){const i=t.option;let _=[];i.selected||(_=this.groupDiskSelections[o].filter(c=>c.selected).map(c=>c.name)),this.initiators.controls.forEach((r,c)=>{r.value.client_iqn===i.name&&(r.patchValue({luns:_}),r.get("cdIsInGroup").setValue(i.selected),S().forEach(this.groupMembersSelections,d=>{d[c].enabled=!i.selected}),this.imagesInitiatorSelections[c].forEach(d=>{d.selected=_.includes(d.name)}))})}removeGroupInitiator(t,o,i){const _=t.getValue("members")[o];t.getValue("members").splice(o,1),this.onGroupMemberSelection({option:new x.$(!1,_,"")},i)}removeGroupDisk(t,o,i){const _=t.getValue("disks")[o];t.getValue("disks").splice(o,1),this.groupDiskSelections[i].forEach(r=>{r.name===_&&(r.selected=!1)}),this.groupDiskSelections[i]=[...this.groupDiskSelections[i]]}submit(){const t=S().cloneDeep(this.targetForm.value),o={target_iqn:this.targetForm.getValue("target_iqn"),target_controls:this.targetForm.getValue("target_controls"),acl_enabled:this.targetForm.getValue("acl_enabled"),portals:[],disks:[],clients:[],groups:[]};if(this.cephIscsiConfigVersion>10){const _=this.targetForm.get("auth");_.getValue("user")||_.get("user").setValue(""),_.getValue("password")||_.get("password").setValue(""),_.getValue("mutual_user")||_.get("mutual_user").setValue(""),_.getValue("mutual_password")||_.get("mutual_password").setValue("");const r=this.targetForm.getValue("acl_enabled");o.auth={user:r?"":_.getValue("user"),password:r?"":_.getValue("password"),mutual_user:r?"":_.getValue("mutual_user"),mutual_password:r?"":_.getValue("mutual_password")}}let i;t.disks.forEach(_=>{const r=_.split("/"),c=this.imagesSettings[_].backstore;o.disks.push({pool:r[0],image:r[1],backstore:c,controls:this.imagesSettings[_][c],lun:this.imagesSettings[_].lun,wwn:this.imagesSettings[_].wwn})}),t.portals.forEach(_=>{const r=_.indexOf(":");o.portals.push({host:_.substring(0,r),ip:_.substring(r+1)})}),o.acl_enabled&&(t.initiators.forEach(_=>{_.auth.user||(_.auth.user=""),_.auth.password||(_.auth.password=""),_.auth.mutual_user||(_.auth.mutual_user=""),_.auth.mutual_password||(_.auth.mutual_password=""),delete _.cdIsInGroup;const r=[];_.luns.forEach(c=>{const d=c.split("/");r.push({pool:d[0],image:d[1]})}),_.luns=r}),o.clients=t.initiators),o.acl_enabled&&(t.groups.forEach(_=>{const r=[];_.disks.forEach(c=>{const d=c.split("/");r.push({pool:d[0],image:d[1]})}),_.disks=r}),o.groups=t.groups),this.isEdit?(o.new_target_iqn=o.target_iqn,o.target_iqn=this.target_iqn,i=this.taskWrapper.wrapTaskAroundCall({task:new R.R("iscsi/target/edit",{target_iqn:o.target_iqn}),call:this.iscsiService.updateTarget(this.target_iqn,o)})):i=this.taskWrapper.wrapTaskAroundCall({task:new R.R("iscsi/target/create",{target_iqn:o.target_iqn}),call:this.iscsiService.createTarget(o)}),i.subscribe({error:()=>{this.targetForm.setErrors({cdSubmitButton:!0})},complete:()=>this.router.navigate(["/block/iscsi/targets"])})}targetSettingsModal(){const t={target_controls:this.targetForm.get("target_controls"),target_default_controls:this.target_default_controls,target_controls_limits:this.target_controls_limits};this.modalRef=this.modalService.show(Co,t)}imageSettingsModal(t){const o={imagesSettings:this.imagesSettings,image:t,api_version:this.api_version,disk_default_controls:this.disk_default_controls,disk_controls_limits:this.disk_controls_limits,backstores:this.getValidBackstores(this.getImageById(t)),control:this.targetForm.get("disks")};this.modalRef=this.modalService.show(To,o)}validFeatures(t,o){const i=t.features,_=this.required_rbd_features[o];return(i&_)===_&&0==(i&this.unsupported_rbd_features[o])}getImageById(t){return this.imagesAll.find(o=>t===`${o.pool_name}/${o.name}`)}getValidBackstores(t){return this.backstores.filter(o=>this.validFeatures(t,o))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(X),e.Y36(de.Z),e.Y36(q),e.Y36(m.F0),e.Y36(m.gz),e.Y36(u.P),e.Y36(v.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,i,_,r,c,d,g,f,I,P,Z,B,Q,Y,ee,te,w,_e,ae,M,ge,ue,me,Te,fe,Ce,G,Be,Ge,xe,ye,we,qe,He,ke,Ke,Xe,Qe,ze,b,Zt,Bt,Gt,xt,yt,wt,qt,Ht,kt,Kt,Xt,Qt,zt,Jt,Yt,Vt,Ut,jt,Wt,eo;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Target IQN",o="Portals",i="Add portal",_="Images",r="Add image",c="ACL authentication",d="This field is required.",g="IQN has wrong pattern.",f="An IQN has the following notation 'iqn.$year-$month.$reversedAddress:$definedName'",I="For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309",P="More information",Z="This target has modified advanced settings.",B="At least " + "\ufffd0\ufffd" + " gateways are required.",Q="Backstore: " + "\ufffd0\ufffd" + ".\xA0",Y="This image has modified settings.",ee="Duplicated LUN numbers.",te="Duplicated WWN.",w="User",_e="Password",ae="Mutual User",M="Mutual Password",ge="This field is required.",ue="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",me="This field is required.",Te="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",fe="This field is required.",Ce="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",G="This field is required.",Be="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",Ge="Initiators",xe="Add initiator",ye="Initiator",we="Client IQN",qe="User",He="Password",ke="Mutual User",Ke="Mutual Password",Xe="Images",Qe="Initiator IQN needs to be unique.",ze="This field is required.",b="IQN has wrong pattern.",Zt="This field is required.",Bt="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",Gt="This field is required.",xt="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",yt="This field is required.",wt="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",qt="This field is required.",Ht="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",kt="Initiator belongs to a group. Images will be configure in the group.",Kt="Add image",Xt="No items added.",Qt="Groups",zt="Add group",Jt="Group",Yt="Name",Vt="Initiators",Ut="Add initiator",jt="Images",Wt="Add image",eo="No items added.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","targetForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],[1,"form-group","row"],["for","target_iqn",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],[1,"input-group"],["type","text","id","target_iqn","name","target_iqn","formControlName","target_iqn","cdTrim","",1,"form-control"],[1,"input-group-append"],["id","ecp-info-button","type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],["class","invalid-feedback",4,"ngIf"],["class","form-text text-muted",4,"ngIf"],["for","portals",1,"cd-col-form-label","required"],o,[4,"ngFor","ngForOf"],[1,"row"],[1,"col-md-12"],["elemClass","btn btn-light float-right",3,"data","options","messages","selection"],[3,"ngClass"],i,["type","hidden","id","portals","name","portals","formControlName","portals",1,"form-control"],["for","disks",1,"cd-col-form-label"],_,["type","hidden","id","disks","name","disks","formControlName","disks",1,"form-control"],r,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","acl_enabled","name","acl_enabled","id","acl_enabled",1,"custom-control-input"],["for","acl_enabled",1,"custom-control-label"],c,["formGroupName","auth",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],d,g,f,I,["target","_blank","href","https://en.wikipedia.org/wiki/ISCSI#Addressing"],P,[1,"form-text","text-muted"],Z,[1,"input-group","cd-mb"],["type","text","disabled","",1,"cd-form-control",3,"value"],["type","button",1,"btn","btn-light",3,"click"],B,["class","input-group-text",4,"ngIf"],[4,"ngIf"],[1,"input-group-text"],Q,Y,ee,te,["formGroupName","auth"],["for","target_user",1,"cd-col-form-label"],w,["type","text","autocomplete","off","id","target_user","name","target_user","formControlName","user",1,"form-control"],["for","target_password",1,"cd-col-form-label"],_e,["type","password","autocomplete","new-password","id","target_password","name","target_password","formControlName","password",1,"form-control"],["type","button","cdPasswordButton","target_password",1,"btn","btn-light"],["source","target_password"],["for","target_mutual_user",1,"cd-col-form-label"],ae,["type","text","autocomplete","off","id","target_mutual_user","name","target_mutual_user","formControlName","mutual_user",1,"form-control"],["for","target_mutual_password",1,"cd-col-form-label"],M,["type","password","autocomplete","new-password","id","target_mutual_password","name","target_mutual_password","formControlName","mutual_password",1,"form-control"],["type","button","cdPasswordButton","target_mutual_password",1,"btn","btn-light"],["source","target_mutual_password"],ge,ue,me,Te,fe,Ce,G,Be,["for","initiators",1,"cd-col-form-label"],Ge,["formArrayName","initiators",1,"cd-col-form-input"],["class","card mb-2",3,"formGroup",4,"ngFor","ngForOf"],[1,"btn","btn-light","float-right",3,"click"],xe,[1,"card","mb-2",3,"formGroup"],ye,["type","button",1,"close",3,"click"],["for","client_iqn",1,"cd-col-form-label","required"],we,["type","text","formControlName","client_iqn","cdTrim","",1,"form-control",3,"blur"],["for","user",1,"cd-col-form-label"],qe,["formControlName","user","autocomplete","off","type","text",1,"form-control",3,"id"],["for","password",1,"cd-col-form-label"],He,["formControlName","password","autocomplete","new-password","type","password",1,"form-control",3,"id"],["type","button",1,"btn","btn-light",3,"cdPasswordButton"],[3,"source"],["for","mutual_user",1,"cd-col-form-label"],ke,["formControlName","mutual_user","autocomplete","off","type","text",1,"form-control",3,"id"],["for","mutual_password",1,"cd-col-form-label"],Ke,["formControlName","mutual_password","autocomplete","new-password","type","password",1,"form-control",3,"id"],["for","luns",1,"cd-col-form-label"],Xe,["class","row",4,"ngIf"],Qe,ze,b,Zt,Bt,Gt,xt,yt,wt,qt,Ht,kt,["elemClass","btn btn-light float-right",3,"data","options","messages"],Kt,Xt,Qt,["formArrayName","groups",1,"cd-col-form-input"],zt,Jt,["for","group_id",1,"cd-col-form-label","required"],Yt,["type","text","formControlName","group_id",1,"form-control"],["for","members",1,"cd-col-form-label"],Vt,Ut,jt,Wt,eo]},template:function(t,o){1&t&&e.YNc(0,dn,66,40,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[pt.y,a._Y,a.JL,a.sg,h.V,O.P,$.o,a.Fj,k.b,a.JJ,a.u,So,l.mk,l.O5,l.sg,Eo.H,a.Wl,j.p,a.x0,gt.C,Ye.s,a.CE],pipes:[l.rS,et.m,Je.V],styles:[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}"]}),n})();var mt=p(68136),pe=p(30982),W=p(35905),De=p(99466),Se=p(68774),Tt=p(55657),ce=p(38047),tt=p(18001),ve=p(97161),oe=p(74937);function pn(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,31),e.qZA())}function gn(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,32),e.qZA())}function un(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,33),e.qZA())}function mn(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,34),e.qZA())}function Tn(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,35),e.qZA())}function fn(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,36),e.qZA())}function Cn(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,37),e.qZA())}function Sn(n,s){1&n&&(e.TgZ(0,"span",30),e.SDv(1,38),e.qZA())}let En=(()=>{class n{constructor(t,o,i,_,r){this.authStorageService=t,this.activeModal=o,this.actionLabels=i,this.iscsiService=_,this.notificationService=r,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.permission=this.authStorageService.getPermissions().iscsi}ngOnInit(){this.hasPermission=this.permission.update,this.createForm(),this.iscsiService.getDiscovery().subscribe(t=>{this.discoveryForm.patchValue(t)})}createForm(){this.discoveryForm=new y.d({user:new a.NI({value:"",disabled:!this.hasPermission}),password:new a.NI({value:"",disabled:!this.hasPermission}),mutual_user:new a.NI({value:"",disabled:!this.hasPermission}),mutual_password:new a.NI({value:"",disabled:!this.hasPermission})}),z.h.validateIf(this.discoveryForm.get("user"),()=>this.discoveryForm.getValue("password")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("password"),()=>this.discoveryForm.getValue("user")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("mutual_user"),()=>this.discoveryForm.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("mutual_password"),()=>this.discoveryForm.getValue("mutual_user"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user")])}submitAction(){this.iscsiService.updateDiscovery(this.discoveryForm.value).subscribe(()=>{this.notificationService.show(tt.k.success,"Updated discovery authentication"),this.activeModal.close()},()=>{this.discoveryForm.setErrors({cdSubmitButton:!0})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(N.Kz),e.Y36(v.p4),e.Y36(X),e.Y36(ve.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-discovery-modal"]],decls:46,vars:13,consts:function(){let s,t,o,i,_,r,c,d,g,f,I,P,Z;return s="Discovery Authentication",t="User",o="Password",i="Mutual User",_="Mutual Password",r="This field is required.",c="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",d="This field is required.",g="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",f="This field is required.",I="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",P="This field is required.",Z="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","discoveryForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","user",1,"cd-col-form-label"],t,[1,"cd-col-form-input"],["id","user","formControlName","user","type","text","autocomplete","off",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","password",1,"cd-col-form-label"],o,[1,"input-group"],["id","password","formControlName","password","type","password","autocomplete","new-password",1,"form-control"],[1,"input-group-append"],["type","button","cdPasswordButton","password",1,"btn","btn-light"],["source","password"],["for","mutual_user",1,"cd-col-form-label"],i,["id","mutual_user","formControlName","mutual_user","type","text","autocomplete","off",1,"form-control"],["for","mutual_password",1,"cd-col-form-label"],_,["id","mutual_password","formControlName","mutual_password","type","password","autocomplete","new-password",1,"form-control"],["type","button","cdPasswordButton","mutual_password",1,"btn","btn-light"],["source","mutual_password"],[1,"modal-footer"],[3,"form","showSubmit","submitText","submitActionEvent"],[1,"invalid-feedback"],r,c,d,g,f,I,P,Z]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"div",7),e.TgZ(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e._UZ(11,"input",11),e.YNc(12,pn,2,0,"span",12),e.YNc(13,gn,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(14,"div",7),e.TgZ(15,"label",13),e.SDv(16,14),e.qZA(),e.TgZ(17,"div",10),e.TgZ(18,"div",15),e._UZ(19,"input",16),e.TgZ(20,"span",17),e._UZ(21,"button",18),e._UZ(22,"cd-copy-2-clipboard-button",19),e.qZA(),e.qZA(),e.YNc(23,un,2,0,"span",12),e.YNc(24,mn,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(25,"div",7),e.TgZ(26,"label",20),e.ynx(27),e.SDv(28,21),e.BQk(),e.qZA(),e.TgZ(29,"div",10),e._UZ(30,"input",22),e.YNc(31,Tn,2,0,"span",12),e.YNc(32,fn,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(33,"div",7),e.TgZ(34,"label",23),e.SDv(35,24),e.qZA(),e.TgZ(36,"div",10),e.TgZ(37,"div",15),e._UZ(38,"input",25),e.TgZ(39,"span",17),e._UZ(40,"button",26),e._UZ(41,"cd-copy-2-clipboard-button",27),e.qZA(),e.qZA(),e.YNc(42,Cn,2,0,"span",12),e.YNc(43,Sn,2,0,"span",12),e.qZA(),e.qZA(),e.qZA(),e.TgZ(44,"div",28),e.TgZ(45,"cd-form-button-panel",29),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.discoveryForm),e.xp6(8),e.Q6J("ngIf",o.discoveryForm.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("user",i,"pattern")),e.xp6(10),e.Q6J("ngIf",o.discoveryForm.showError("password",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("password",i,"pattern")),e.xp6(7),e.Q6J("ngIf",o.discoveryForm.showError("mutual_user",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("mutual_user",i,"pattern")),e.xp6(10),e.Q6J("ngIf",o.discoveryForm.showError("mutual_password",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("mutual_password",i,"pattern")),e.xp6(2),e.Q6J("form",o.discoveryForm)("showSubmit",o.hasPermission)("submitText",o.actionLabels.SUBMIT)}},directives:[C.z,a._Y,a.JL,a.sg,h.V,O.P,$.o,a.Fj,k.b,a.JJ,a.u,l.O5,gt.C,Ye.s,j.p],styles:[""]}),n})();var Rn=p(86969);let ft=(()=>{class n{constructor(t){this.router=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(m.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-tabs"]],decls:8,vars:1,consts:function(){let s,t;return s="Overview",t="Targets",[["ngbNav","",1,"nav-tabs",3,"activeId","navChange"],["nav","ngbNav"],["ngbNavItem","/block/iscsi/overview"],["ngbNavLink",""],s,["ngbNavItem","/block/iscsi/targets"],t]},template:function(t,o){1&t&&(e.TgZ(0,"ul",0,1),e.NdJ("navChange",function(_){return o.router.navigate([_.nextId])}),e.TgZ(2,"li",2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.qZA(),e.TgZ(5,"li",5),e.TgZ(6,"a",3),e.SDv(7,6),e.qZA(),e.qZA(),e.qZA()),2&t&&e.Q6J("activeId",o.router.url)},directives:[N.Pz,N.nv,N.Vx],styles:[""]}),n})();var Ct=p(34501),Mn=p(30490),Ee=p(94928),On=p(68962);const An=["highlightTpl"],hn=["detailTable"],Pn=["tree"],In=function(){return["logged_in"]},bn=function(){return["logged_out"]},Nn=function(n,s){return{"badge-success":n,"badge-danger":s}};function Fn(n,s){if(1&n&&(e._UZ(0,"i"),e.TgZ(1,"span"),e._uU(2),e.qZA(),e._uU(3," \xa0 "),e.TgZ(4,"span",8),e._uU(5),e.qZA()),2&n){const t=s.$implicit;e.Tol(t.data.cdIcon),e.xp6(2),e.Oqu(t.data.name),e.xp6(2),e.Q6J("ngClass",e.WLB(7,Nn,e.DdM(5,In).includes(t.data.status),e.DdM(6,bn).includes(t.data.status))),e.xp6(1),e.hij(" ",t.data.status," ")}}function Dn(n,s){if(1&n&&(e.TgZ(0,"div",9),e.TgZ(1,"legend"),e._uU(2),e.qZA(),e._UZ(3,"cd-table",10,11),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.Oqu(t.title),e.xp6(1),e.Q6J("data",t.data)("columns",t.columns)("limit",0)}}function vn(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Ln(n,s){if(1&n&&(e.TgZ(0,"strong"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function $n(n,s){if(1&n&&(e.YNc(0,vn,2,1,"span",12),e.YNc(1,Ln,2,1,"strong",12)),2&n){const t=s.row;e.Q6J("ngIf",void 0===t.default||t.default===t.current),e.xp6(1),e.Q6J("ngIf",void 0!==t.default&&t.default!==t.current)}}let Zn=(()=>{class n{constructor(t,o){this.iscsiBackstorePipe=t,this.booleanTextPipe=o,this.icons=T.P,this.metadata={},this.nodes=[],this.treeOptions={useVirtualScroll:!0,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}}}set content(t){this.detailTable=t,t&&t.updateColumns()}ngOnInit(){this.columns=[{prop:"displayName",name:"Name",flexGrow:1,cellTemplate:this.highlightTpl},{prop:"current",name:"Current",flexGrow:1,cellTemplate:this.highlightTpl},{prop:"default",name:"Default",flexGrow:1,cellTemplate:this.highlightTpl}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.generateTree()),this.data=void 0}generateTree(){const t=S().cloneDeep(this.selectedItem.target_controls);this.cephIscsiConfigVersion>10&&S().extend(t,S().cloneDeep(this.selectedItem.auth)),this.metadata={root:t};const o={target:{expanded:S().join(this.selectedItem.cdExecuting?[T.P.large,T.P.spinner,T.P.spin]:[T.P.large,T.P.bullseye]," ")},initiators:{expanded:S().join([T.P.large,T.P.user]," "),leaf:S().join([T.P.user]," ")},groups:{expanded:S().join([T.P.large,T.P.users]," "),leaf:S().join([T.P.users]," ")},disks:{expanded:S().join([T.P.large,T.P.disk]," "),leaf:S().join([T.P.disk]," ")},portals:{expanded:S().join([T.P.large,T.P.server]," "),leaf:S().join([T.P.server]," ")}},i=[];S().forEach(this.selectedItem.disks,d=>{const g="disk_"+d.pool+"_"+d.image;this.metadata[g]={controls:d.controls,backstore:d.backstore},["wwn","lun"].forEach(f=>{f in d&&(this.metadata[g][f]=d[f])}),i.push({name:`${d.pool}/${d.image}`,cdId:g,cdIcon:o.disks.leaf})});const _=[];S().forEach(this.selectedItem.portals,d=>{_.push({name:`${d.host}:${d.ip}`,cdIcon:o.portals.leaf})});const r=[];S().forEach(this.selectedItem.clients,d=>{const g=S().cloneDeep(d.auth);d.info&&(S().extend(g,d.info),delete g.state,S().forEach(Object.keys(d.info.state),P=>{g[P.toLowerCase()]=d.info.state[P]})),this.metadata["client_"+d.client_iqn]=g;const f=[];d.luns.forEach(P=>{f.push({name:`${P.pool}/${P.image}`,cdId:"disk_"+P.pool+"_"+P.image,cdIcon:o.disks.leaf})});let I="";d.info&&(I=Object.keys(d.info.state).includes("LOGGED_IN")?"logged_in":"logged_out"),r.push({name:d.client_iqn,status:I,cdId:"client_"+d.client_iqn,children:f,cdIcon:o.initiators.leaf})});const c=[];S().forEach(this.selectedItem.groups,d=>{const g=[];d.disks.forEach(I=>{g.push({name:`${I.pool}/${I.image}`,cdId:"disk_"+I.pool+"_"+I.image,cdIcon:o.disks.leaf})});const f=[];d.members.forEach(I=>{f.push({name:I,cdId:"client_"+I})}),c.push({name:d.group_id,cdIcon:o.groups.leaf,children:[{name:"Disks",children:g,cdIcon:o.disks.expanded},{name:"Initiators",children:f,cdIcon:o.initiators.expanded}]})}),this.nodes=[{name:this.selectedItem.target_iqn,cdId:"root",isExpanded:!0,cdIcon:o.target.expanded,children:[{name:"Disks",isExpanded:!0,children:i,cdIcon:o.disks.expanded},{name:"Portals",isExpanded:!0,children:_,cdIcon:o.portals.expanded},{name:"Initiators",isExpanded:!0,children:r,cdIcon:o.initiators.expanded},{name:"Groups",isExpanded:!0,children:c,cdIcon:o.groups.expanded}]}]}format(t){return"boolean"==typeof t?this.booleanTextPipe.transform(t):t}onNodeSelected(t,o){var i,_,r,c;if(ne.iM.ACTIVATE(t,o,!0),o.data.cdId){this.title=o.data.name;const d=this.metadata[o.data.cdId]||{};"root"===o.data.cdId?(null===(i=this.detailTable)||void 0===i||i.toggleColumn({prop:"default",isHidden:!0}),this.data=S().map(this.settings.target_default_controls,(g,f)=>({displayName:f,default:g=this.format(g),current:S().isUndefined(d[f])?g:this.format(d[f])})),this.cephIscsiConfigVersion>10&&["user","password","mutual_user","mutual_password"].forEach(g=>{this.data.push({displayName:g,default:null,current:d[g]})})):o.data.cdId.toString().startsWith("disk_")?(null===(_=this.detailTable)||void 0===_||_.toggleColumn({prop:"default",isHidden:!0}),this.data=S().map(this.settings.disk_default_controls[d.backstore],(g,f)=>({displayName:f,default:g=this.format(g),current:S().isUndefined(d.controls[f])?g:this.format(d.controls[f])})),this.data.push({displayName:"backstore",default:this.iscsiBackstorePipe.transform(this.settings.default_backstore),current:this.iscsiBackstorePipe.transform(d.backstore)}),["wwn","lun"].forEach(g=>{g in d&&this.data.push({displayName:g,default:void 0,current:d[g]})})):(null===(r=this.detailTable)||void 0===r||r.toggleColumn({prop:"default",isHidden:!1}),this.data=S().map(d,(g,f)=>({displayName:f,default:void 0,current:this.format(g)})))}else this.data=void 0;null===(c=this.detailTable)||void 0===c||c.updateColumns()}onUpdateData(){this.tree.treeModel.expandAll()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Je.V),e.Y36(On.T))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-details"]],viewQuery:function(t,o){if(1&t&&(e.Gf(An,7),e.Gf(hn,5),e.Gf(Pn,5)),2&t){let i;e.iGM(i=e.CRH())&&(o.highlightTpl=i.first),e.iGM(i=e.CRH())&&(o.content=i.first),e.iGM(i=e.CRH())&&(o.tree=i.first)}},inputs:{selection:"selection",settings:"settings",cephIscsiConfigVersion:"cephIscsiConfigVersion"},features:[e.TTD],decls:11,vars:3,consts:function(){let s;return s="iSCSI Topology",[[1,"row"],[1,"col-6"],s,[3,"nodes","options","updateData"],["tree",""],["treeNodeTemplate",""],["class","col-6 metadata",4,"ngIf"],["highlightTpl",""],[1,"badge",3,"ngClass"],[1,"col-6","metadata"],["columnMode","flex",3,"data","columns","limit"],["detailTable",""],[4,"ngIf"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0),e.TgZ(1,"div",1),e.TgZ(2,"legend"),e.SDv(3,2),e.qZA(),e.TgZ(4,"tree-root",3,4),e.NdJ("updateData",function(){return o.onUpdateData()}),e.YNc(6,Fn,6,10,"ng-template",null,5,e.W1O),e.qZA(),e.qZA(),e.YNc(8,Dn,5,4,"div",6),e.qZA(),e.YNc(9,$n,2,2,"ng-template",null,7,e.W1O)),2&t&&(e.xp6(4),e.Q6J("nodes",o.nodes)("options",o.treeOptions),e.xp6(4),e.Q6J("ngIf",o.data))},directives:[ne.qr,l.O5,l.mk,W.a],styles:[""]}),n})();function Bn(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"br"),e.TgZ(2,"span"),e.SDv(3,6),e.qZA(),e.TgZ(4,"pre"),e._uU(5),e.qZA(),e.BQk()),2&n){const t=e.oxw(2);e.xp6(5),e.Oqu(t.status)}}function Gn(n,s){if(1&n&&(e.TgZ(0,"cd-alert-panel",2),e.ynx(1),e.tHW(2,3),e._UZ(3,"cd-doc",4),e.N_p(),e.BQk(),e.YNc(4,Bn,6,1,"ng-container",5),e.qZA()),2&n){const t=e.oxw();e.xp6(4),e.Q6J("ngIf",t.status)}}function xn(n,s){if(1&n&&e._UZ(0,"cd-iscsi-target-details",15),2&n){const t=e.oxw(2);e.Q6J("cephIscsiConfigVersion",t.cephIscsiConfigVersion)("selection",t.expandedRow)("settings",t.settings)}}const yn=function(n){return[n]};function wn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",7,8),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().getTargets()})("setExpandedRow",function(i){return e.CHM(t),e.oxw().setExpandedRow(i)})("updateSelection",function(i){return e.CHM(t),e.oxw().updateSelection(i)}),e.TgZ(2,"div",9),e._UZ(3,"cd-table-actions",10),e.TgZ(4,"button",11),e.NdJ("click",function(){return e.CHM(t),e.oxw().configureDiscoveryAuth()}),e._UZ(5,"i",12),e.ynx(6),e.SDv(7,13),e.BQk(),e.qZA(),e.qZA(),e.YNc(8,xn,1,3,"cd-iscsi-target-details",14),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.targets)("columns",t.columns)("hasDetails",!0)("autoReload",!1)("status",t.tableStatus),e.xp6(3),e.Q6J("permission",t.permission)("selection",t.selection)("tableActions",t.tableActions),e.xp6(2),e.Q6J("ngClass",e.VKq(10,yn,t.icons.key)),e.xp6(3),e.Q6J("ngIf",t.expandedRow)}}let qn=(()=>{class n extends mt.o{constructor(t,o,i,_,r,c,d,g,f){super(f),this.authStorageService=t,this.iscsiService=o,this.joinPipe=i,this.taskListService=_,this.notAvailablePipe=r,this.modalService=c,this.taskWrapper=d,this.actionLabels=g,this.ngZone=f,this.available=void 0,this.selection=new Se.r,this.targets=[],this.icons=T.P,this.builders={"iscsi/target/create":I=>({target_iqn:I.target_iqn})},this.permission=this.authStorageService.getPermissions().iscsi,this.tableActions=[{permission:"create",icon:T.P.add,routerLink:()=>"/block/iscsi/targets/create",name:this.actionLabels.CREATE},{permission:"update",icon:T.P.edit,routerLink:()=>`/block/iscsi/targets/edit/${this.selection.first().target_iqn}`,name:this.actionLabels.EDIT,disable:()=>this.getEditDisableDesc()},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteIscsiTargetModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:"Target",prop:"target_iqn",flexGrow:2,cellTransformation:De.e.executing},{name:"Portals",prop:"cdPortals",pipe:this.joinPipe,flexGrow:2},{name:"Images",prop:"cdImages",pipe:this.joinPipe,flexGrow:2},{name:"# Sessions",prop:"info.num_sessions",pipe:this.notAvailablePipe,flexGrow:1}],this.iscsiService.status().subscribe(t=>{this.available=t.available,t.available||(this.status=t.message)})}getTargets(){this.available&&(this.setTableRefreshTimeout(),this.iscsiService.version().subscribe(t=>{this.cephIscsiConfigVersion=t.ceph_iscsi_config_version}),this.taskListService.init(()=>this.iscsiService.listTargets(),t=>this.prepareResponse(t),t=>this.targets=t,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders),this.iscsiService.settings().subscribe(t=>{this.settings=t}))}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}getEditDisableDesc(){const t=this.selection.first();return t&&(null==t?void 0:t.cdExecuting)?t.cdExecuting:t&&S().isUndefined(null==t?void 0:t.info)?"Unavailable gateway(s)":!t}getDeleteDisableDesc(){var t;const o=this.selection.first();return(null==o?void 0:o.cdExecuting)?o.cdExecuting:o&&S().isUndefined(null==o?void 0:o.info)?"Unavailable gateway(s)":o&&(null===(t=null==o?void 0:o.info)||void 0===t?void 0:t.num_sessions)?"Target has active sessions":!o}prepareResponse(t){return t.forEach(o=>{o.cdPortals=o.portals.map(i=>`${i.host}:${i.ip}`),o.cdImages=o.disks.map(i=>`${i.pool}/${i.image}`)}),t}onFetchError(){this.table.reset()}itemFilter(t,o){return t.target_iqn===o.metadata.target_iqn}taskFilter(t){return["iscsi/target/create","iscsi/target/edit","iscsi/target/delete"].includes(t.name)}updateSelection(t){this.selection=t}deleteIscsiTargetModal(){const t=this.selection.first().target_iqn;this.modalRef=this.modalService.show(pe.M,{itemDescription:"iSCSI target",itemNames:[t],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new R.R("iscsi/target/delete",{target_iqn:t}),call:this.iscsiService.deleteTarget(t)})})}configureDiscoveryAuth(){this.modalService.show(En)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(X),e.Y36(Rn.A),e.Y36(ce.j),e.Y36(Tt.g),e.Y36(de.Z),e.Y36(u.P),e.Y36(v.p4),e.Y36(e.R0b))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-list"]],viewQuery:function(t,o){if(1&t&&e.Gf(W.a,5),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first)}},features:[e._Bn([ce.j]),e.qOj],decls:3,vars:2,consts:function(){let s,t,o,i;return s="iSCSI Targets not available",t="Please consult the " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " on how to configure and enable the iSCSI Targets management functionality.",o="Available information:",i="Discovery authentication",[["type","info","title",s,4,"ngIf"],["columnMode","flex","identifier","target_iqn","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","autoReload","status","fetchData","setExpandedRow","updateSelection",4,"ngIf"],["type","info","title",s],t,["section","iscsi"],[4,"ngIf"],o,["columnMode","flex","identifier","target_iqn","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","autoReload","status","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],i,["cdTableDetail","",3,"cephIscsiConfigVersion","selection","settings",4,"ngIf"],["cdTableDetail","",3,"cephIscsiConfigVersion","selection","settings"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-iscsi-tabs"),e.YNc(1,Gn,5,1,"cd-alert-panel",0),e.YNc(2,wn,9,12,"cd-table",1)),2&t&&(e.xp6(1),e.Q6J("ngIf",!1===o.available),e.xp6(1),e.Q6J("ngIf",!0===o.available))},directives:[ft,l.O5,Ct.G,Mn.K,W.a,Ee.K,$.o,l.mk,Zn],styles:[""]}),n})();var ot=p(66369),Hn=p(76446),kn=p(90068);const Kn=["iscsiSparklineTpl"],Xn=["iscsiPerSecondTpl"],Qn=["iscsiRelativeDateTpl"];function zn(n,s){if(1&n&&(e.TgZ(0,"span"),e._UZ(1,"cd-sparkline",9),e.qZA()),2&n){const t=e.oxw(),o=t.value,i=t.row;e.xp6(1),e.Q6J("data",o)("isBinary",i.cdIsBinary)}}function Jn(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function Yn(n,s){if(1&n&&(e.YNc(0,zn,2,2,"span",7),e.YNc(1,Jn,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}function Vn(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.hij(" ",t," /s ")}}function Un(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function jn(n,s){if(1&n&&(e.YNc(0,Vn,2,1,"span",7),e.YNc(1,Un,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}function Wn(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"notAvailable"),e.ALo(3,"relativeDate"),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.hij(" ",e.lcZ(2,1,e.lcZ(3,3,t))," ")}}function ei(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function ti(n,s){if(1&n&&(e.YNc(0,Wn,4,5,"span",7),e.YNc(1,ei,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}let oi=(()=>{class n{constructor(t,o,i){this.iscsiService=t,this.dimlessPipe=o,this.iscsiBackstorePipe=i,this.gateways=[],this.images=[]}ngOnInit(){this.gatewaysColumns=[{name:"Name",prop:"name"},{name:"State",prop:"state",flexGrow:1,cellTransformation:De.e.badge,customTemplateConfig:{map:{up:{class:"badge-success"},down:{class:"badge-danger"}}}},{name:"# Targets",prop:"num_targets"},{name:"# Sessions",prop:"num_sessions"}],this.imagesColumns=[{name:"Pool",prop:"pool"},{name:"Image",prop:"image"},{name:"Backstore",prop:"backstore",pipe:this.iscsiBackstorePipe},{name:"Read Bytes",prop:"stats_history.rd_bytes",cellTemplate:this.iscsiSparklineTpl},{name:"Write Bytes",prop:"stats_history.wr_bytes",cellTemplate:this.iscsiSparklineTpl},{name:"Read Ops",prop:"stats.rd",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:"Write Ops",prop:"stats.wr",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:"A/O Since",prop:"optimized_since",cellTemplate:this.iscsiRelativeDateTpl}]}refresh(){this.iscsiService.overview().subscribe(t=>{this.gateways=t.gateways,this.images=t.images,this.images.map(o=>(o.stats_history&&(o.stats_history.rd_bytes=o.stats_history.rd_bytes.map(i=>i[1]),o.stats_history.wr_bytes=o.stats_history.wr_bytes.map(i=>i[1])),o.cdIsBinary=!0,o))})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(X),e.Y36(ot.n),e.Y36(Je.V))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Kn,7),e.Gf(Xn,7),e.Gf(Qn,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.iscsiSparklineTpl=i.first),e.iGM(i=e.CRH())&&(o.iscsiPerSecondTpl=i.first),e.iGM(i=e.CRH())&&(o.iscsiRelativeDateTpl=i.first)}},decls:13,vars:4,consts:function(){let s,t;return s="Gateways",t="Images",[s,[3,"data","columns","fetchData"],t,[3,"data","columns"],["iscsiSparklineTpl",""],["iscsiPerSecondTpl",""],["iscsiRelativeDateTpl",""],[4,"ngIf"],["class","text-muted",4,"ngIf"],[3,"data","isBinary"],[1,"text-muted"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-iscsi-tabs"),e.TgZ(1,"legend"),e.SDv(2,0),e.qZA(),e.TgZ(3,"cd-table",1),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA(),e.TgZ(4,"legend"),e.SDv(5,2),e.qZA(),e._UZ(6,"cd-table",3),e.YNc(7,Yn,2,2,"ng-template",null,4,e.W1O),e.YNc(9,jn,2,2,"ng-template",null,5,e.W1O),e.YNc(11,ti,2,2,"ng-template",null,6,e.W1O)),2&t&&(e.xp6(3),e.Q6J("data",o.gateways)("columns",o.gatewaysColumns),e.xp6(3),e.Q6J("data",o.images)("columns",o.imagesColumns))},directives:[ft,W.a,l.O5,Hn.l],pipes:[Tt.g,kn.h],styles:[""]}),n})(),ni=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[l.ez,Ae.m,N.Oz,m.Bz,a.u5,a.UX,N.ZQ]]}),n})();var ii=p(75319),si=p(26215),_i=p(45435),St=p(46947);let K=class{constructor(s,t){this.http=s,this.timerService=t,this.REFRESH_INTERVAL=3e4,this.summaryDataSource=new si.X(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/block/mirroring/summary")}retrieveSummaryObserver(){return s=>{this.summaryDataSource.next(s)}}subscribeSummary(s,t){return this.summaryData$.pipe((0,_i.h)(o=>!!o)).subscribe(s,t)}getPool(s){return this.http.get(`api/block/mirroring/pool/${s}`)}updatePool(s,t){return this.http.put(`api/block/mirroring/pool/${s}`,t,{observe:"response"})}getSiteName(){return this.http.get("api/block/mirroring/site_name")}setSiteName(s){return this.http.put("api/block/mirroring/site_name",{site_name:s},{observe:"response"})}createBootstrapToken(s){return this.http.post(`api/block/mirroring/pool/${s}/bootstrap/token`,{})}importBootstrapToken(s,t,o){return this.http.post(`api/block/mirroring/pool/${s}/bootstrap/peer`,{direction:t,token:o},{observe:"response"})}getPeer(s,t){return this.http.get(`api/block/mirroring/pool/${s}/peer/${t}`)}addPeer(s,t){return this.http.post(`api/block/mirroring/pool/${s}/peer`,t,{observe:"response"})}updatePeer(s,t,o){return this.http.put(`api/block/mirroring/pool/${s}/peer/${t}`,o,{observe:"response"})}deletePeer(s,t){return this.http.delete(`api/block/mirroring/pool/${s}/peer/${t}`,{observe:"response"})}};K.\u0275fac=function(s){return new(s||K)(e.LFG(ie.eN),e.LFG(St.f))},K.\u0275prov=e.Yz7({token:K,factory:K.\u0275fac,providedIn:"root"}),(0,D.gn)([(0,D.fM)(0,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[String]),(0,D.w6)("design:returntype",void 0)],K.prototype,"setSiteName",null),(0,D.gn)([(0,D.fM)(1,V.G),(0,D.fM)(2,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[String,String,String]),(0,D.w6)("design:returntype",void 0)],K.prototype,"importBootstrapToken",null),K=(0,D.gn)([V.o,(0,D.w6)("design:paramtypes",[ie.eN,St.f])],K);var nt=p(58071),ai=p(68307),Et=p(12627),Re=p(82945),ri=p(39749),li=p(13472);function ci(n,s){1&n&&(e.TgZ(0,"span",25),e.SDv(1,26),e.qZA())}function di(n,s){if(1&n&&(e.TgZ(0,"div",27),e._UZ(1,"input",28),e.TgZ(2,"label",29),e._uU(3),e.qZA(),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.name),e.s9C("name",t.name),e.s9C("formControlName",t.name),e.xp6(1),e.s9C("for",t.name),e.xp6(1),e.Oqu(t.name)}}function pi(n,s){1&n&&(e.TgZ(0,"span",25),e.SDv(1,30),e.qZA())}let gi=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.rbdMirroringService=o,this.taskWrapper=i,this.pools=[],this.createForm()}createForm(){this.createBootstrapForm=new y.d({siteName:new a.NI("",{validators:[a.kI.required]}),pools:new a.cw({},{validators:[this.validatePools()]}),token:new a.NI("",{})})}ngOnInit(){this.createBootstrapForm.get("siteName").setValue(this.siteName),this.rbdMirroringService.getSiteName().subscribe(t=>{this.createBootstrapForm.get("siteName").setValue(t.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.pools=t.content_data.pools.reduce((_,r)=>(_.push({name:r.name,mirror_mode:r.mirror_mode}),_),[]);const i=this.createBootstrapForm.get("pools");S().each(this.pools,_=>{const r=_.name,c="disabled"===_.mirror_mode,d=i.controls[r];d?c&&d.disabled?d.enable():!c&&d.enabled&&(d.disable(),d.setValue(!0)):i.addControl(r,new a.NI({value:!c,disabled:!c}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return t=>{let o=0;return S().each(t.controls,i=>{!0===i.value&&++o}),o>0?null:{requirePool:!0}}}generate(){this.createBootstrapForm.get("token").setValue("");let t="";const o=[],i=this.createBootstrapForm.get("pools");S().each(i.controls,(g,f)=>{!0===g.value&&(t=f,g.disabled||o.push(f))});const _={mirror_mode:"image"},r=(0,nt.z)(this.rbdMirroringService.setSiteName(this.createBootstrapForm.getValue("siteName")),(0,le.D)(o.map(g=>this.rbdMirroringService.updatePool(g,_))),this.rbdMirroringService.createBootstrapToken(t).pipe((0,ai.b)(g=>this.createBootstrapForm.get("token").setValue(g.token)))).pipe((0,Et.Z)()),c=()=>{this.rbdMirroringService.refresh(),this.createBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/mirroring/bootstrap/create",{}),call:r}).subscribe({error:c,complete:c})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(K),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-bootstrap-create-modal"]],decls:32,vars:6,consts:function(){let s,t,o,i,_,r,c,d,g,f,I;return s="Create Bootstrap Token",t="To create a bootstrap token which can be imported by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, and click\xA0 " + "\ufffd#10\ufffd" + "Generate" + "\ufffd/#10\ufffd" + ".",o="Site Name",i="Name...",_="Pools",r="Generate",c="Token",d="Generated token...",g="Close",f="This field is required.",I="At least one pool is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","createBootstrapForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","siteName",1,"col-form-label","required"],o,["type","text","placeholder",i,"id","siteName","name","siteName","formControlName","siteName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["formGroupName","pools",1,"form-group"],["for","pools",1,"col-form-label","required"],_,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],[1,"mb-4","float-right",3,"form","submitAction"],r,["for","token",1,"col-form-label"],c,["placeholder",d,"id","token","formControlName","token","readonly","",1,"form-control","resize-vertical"],["source","token",1,"float-right"],[1,"modal-footer"],["name",g,3,"backAction"],[1,"invalid-feedback"],f,[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],I]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(11,"div",8),e.TgZ(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,ci,2,0,"span",12),e.qZA(),e.TgZ(16,"div",13),e.TgZ(17,"label",14),e.SDv(18,15),e.qZA(),e.YNc(19,di,4,5,"div",16),e.YNc(20,pi,2,0,"span",12),e.qZA(),e.TgZ(21,"cd-submit-button",17),e.NdJ("submitAction",function(){return o.generate()}),e.SDv(22,18),e.qZA(),e.TgZ(23,"div",8),e.TgZ(24,"label",19),e.TgZ(25,"span"),e.SDv(26,20),e.qZA(),e.qZA(),e.TgZ(27,"textarea",21),e._uU(28," "),e.qZA(),e.qZA(),e._UZ(29,"cd-copy-2-clipboard-button",22),e.qZA(),e.TgZ(30,"div",23),e.TgZ(31,"cd-back-button",24),e.NdJ("backAction",function(){return o.activeModal.close()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.createBootstrapForm),e.xp6(11),e.Q6J("ngIf",o.createBootstrapForm.showError("siteName",i,"required")),e.xp6(4),e.Q6J("ngForOf",o.pools),e.xp6(1),e.Q6J("ngIf",o.createBootstrapForm.showError("pools",i,"requirePool")),e.xp6(1),e.Q6J("form",o.createBootstrapForm)}},directives:[C.z,a._Y,a.JL,h.V,a.sg,O.P,$.o,a.Fj,k.b,a.JJ,a.u,Re.U,l.O5,a.x0,l.sg,ri.w,Ye.s,li.W,a.Wl],styles:[".form-group.ng-invalid[_ngcontent-%COMP%] .invalid-feedback[_ngcontent-%COMP%]{display:block}"]}),n})();function ui(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,27),e.qZA())}function mi(n,s){if(1&n&&(e.TgZ(0,"option",28),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.key),e.xp6(1),e.Oqu(t.desc)}}function Ti(n,s){if(1&n&&(e.TgZ(0,"div",29),e._UZ(1,"input",30),e.TgZ(2,"label",31),e._uU(3),e.qZA(),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.name),e.s9C("name",t.name),e.s9C("formControlName",t.name),e.xp6(1),e.s9C("for",t.name),e.xp6(1),e.Oqu(t.name)}}function fi(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,32),e.qZA())}function Ci(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,33),e.qZA())}function Si(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,34),e.qZA())}let Ei=(()=>{class n{constructor(t,o,i,_){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.pools=[],this.directions=[{key:"rx-tx",desc:"Bidirectional"},{key:"rx",desc:"Unidirectional (receive-only)"}],this.createForm()}createForm(){this.importBootstrapForm=new y.d({siteName:new a.NI("",{validators:[a.kI.required]}),direction:new a.NI("rx-tx",{}),pools:new a.cw({},{validators:[this.validatePools()]}),token:new a.NI("",{validators:[a.kI.required,this.validateToken()]})})}ngOnInit(){this.rbdMirroringService.getSiteName().subscribe(t=>{this.importBootstrapForm.get("siteName").setValue(t.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.pools=t.content_data.pools.reduce((_,r)=>(_.push({name:r.name,mirror_mode:r.mirror_mode}),_),[]);const i=this.importBootstrapForm.get("pools");S().each(this.pools,_=>{const r=_.name,c="disabled"===_.mirror_mode,d=i.controls[r];d?c&&d.disabled?d.enable():!c&&d.enabled&&(d.disable(),d.setValue(!0)):i.addControl(r,new a.NI({value:!c,disabled:!c}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return t=>{let o=0;return S().each(t.controls,i=>{!0===i.value&&++o}),o>0?null:{requirePool:!0}}}validateToken(){return t=>{try{if(JSON.parse(atob(t.value)))return null}catch(o){}return{invalidToken:!0}}}import(){const t=[],o=[],i=this.importBootstrapForm.get("pools");S().each(i.controls,(g,f)=>{!0===g.value&&(t.push(f),g.disabled||o.push(f))});const _={mirror_mode:"image"};let r=(0,nt.z)(this.rbdMirroringService.setSiteName(this.importBootstrapForm.getValue("siteName")),(0,le.D)(o.map(g=>this.rbdMirroringService.updatePool(g,_))));r=t.reduce((g,f)=>(0,nt.z)(g,this.rbdMirroringService.importBootstrapToken(f,this.importBootstrapForm.getValue("direction"),this.importBootstrapForm.getValue("token"))),r).pipe((0,Et.Z)());const c=()=>{this.rbdMirroringService.refresh(),this.importBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/mirroring/bootstrap/import",{}),call:r}).subscribe({error:c,complete:()=>{c(),this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(v.p4),e.Y36(K),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-bootstrap-import-modal"]],decls:36,vars:10,consts:function(){let s,t,o,i,_,r,c,d,g,f,I,P;return s="Import Bootstrap Token",t="To import a bootstrap token which was created by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, provide the generated token, and click\xA0" + "\ufffd#10\ufffd" + "Import" + "\ufffd/#10\ufffd" + ".",o="Site Name",i="Name...",_="Direction",r="Pools",c="Token",d="Generated token...",g="This field is required.",f="At least one pool is required.",I="This field is required.",P="The token is invalid.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","importBootstrapForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","siteName",1,"col-form-label","required"],o,["type","text","placeholder",i,"id","siteName","name","siteName","formControlName","siteName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","direction",1,"col-form-label"],_,["id","direction","name","direction","formControlName","direction",1,"form-control"],[3,"value",4,"ngFor","ngForOf"],["formGroupName","pools",1,"form-group"],["for","pools",1,"col-form-label","required"],r,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["for","token",1,"col-form-label","required"],c,["placeholder",d,"id","token","formControlName","token",1,"form-control","resize-vertical"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],g,[3,"value"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],f,I,P]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(11,"div",8),e.TgZ(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,ui,2,0,"span",12),e.qZA(),e.TgZ(16,"div",8),e.TgZ(17,"label",13),e.TgZ(18,"span"),e.SDv(19,14),e.qZA(),e.qZA(),e.TgZ(20,"select",15),e.YNc(21,mi,2,2,"option",16),e.qZA(),e.qZA(),e.TgZ(22,"div",17),e.TgZ(23,"label",18),e.SDv(24,19),e.qZA(),e.YNc(25,Ti,4,5,"div",20),e.YNc(26,fi,2,0,"span",12),e.qZA(),e.TgZ(27,"div",8),e.TgZ(28,"label",21),e.SDv(29,22),e.qZA(),e.TgZ(30,"textarea",23),e._uU(31," "),e.qZA(),e.YNc(32,Ci,2,0,"span",12),e.YNc(33,Si,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(34,"div",24),e.TgZ(35,"cd-form-button-panel",25),e.NdJ("submitActionEvent",function(){return o.import()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.importBootstrapForm),e.xp6(11),e.Q6J("ngIf",o.importBootstrapForm.showError("siteName",i,"required")),e.xp6(6),e.Q6J("ngForOf",o.directions),e.xp6(4),e.Q6J("ngForOf",o.pools),e.xp6(1),e.Q6J("ngIf",o.importBootstrapForm.showError("pools",i,"requirePool")),e.xp6(6),e.Q6J("ngIf",o.importBootstrapForm.showError("token",i,"required")),e.xp6(1),e.Q6J("ngIf",o.importBootstrapForm.showError("token",i,"invalidToken")),e.xp6(2),e.Q6J("form",o.importBootstrapForm)("submitText",o.actionLabels.SUBMIT)}},directives:[C.z,a._Y,a.JL,h.V,a.sg,O.P,$.o,a.Fj,k.b,a.JJ,a.u,Re.U,l.O5,a.EJ,l.sg,a.x0,j.p,a.YN,a.Kr,a.Wl],styles:[""]}),n})();var se=p(69158),Ri=p(58111);let it=(()=>{class n{transform(t){return"warning"===t?"badge badge-warning":"error"===t?"badge badge-danger":"success"===t?"badge badge-success":"badge badge-info"}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"mirrorHealthColor",type:n,pure:!0}),n})();const Mi=["healthTmpl"];function Oi(n,s){if(1&n&&(e.TgZ(0,"span",2),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.health_color)),e.xp6(2),e.Oqu(o)}}let Ai=(()=>{class n{constructor(t,o){this.rbdMirroringService=t,this.cephShortVersionPipe=o,this.tableStatus=new se.E}ngOnInit(){this.columns=[{prop:"instance_id",name:"Instance",flexGrow:2},{prop:"id",name:"ID",flexGrow:2},{prop:"server_hostname",name:"Hostname",flexGrow:2},{prop:"version",name:"Version",pipe:this.cephShortVersionPipe,flexGrow:2},{prop:"health",name:"Health",cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.data=t.content_data.daemons,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(K),e.Y36(Ri.F))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-daemons"]],viewQuery:function(t,o){if(1&t&&e.Gf(Mi,7),2&t){let i;e.iGM(i=e.CRH())&&(o.healthTmpl=i.first)}},decls:3,vars:4,consts:[["columnMode","flex",3,"data","columns","autoReload","status","fetchData"],["healthTmpl",""],[3,"ngClass"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA(),e.YNc(1,Oi,3,4,"ng-template",null,1,e.W1O)),2&t&&e.Q6J("data",o.data)("columns",o.columns)("autoReload",-1)("status",o.tableStatus)},directives:[W.a,l.mk],pipes:[it],styles:[""]}),n})();var Rt=p(18891);class hi{}function Pi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function Ii(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,26),e.qZA())}function bi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,27),e.qZA())}function Ni(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,28),e.qZA())}function Fi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,29),e.qZA())}function Di(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,30),e.qZA())}let vi=(()=>{class n{constructor(t,o,i,_){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.bsConfig={containerClass:"theme-default"},this.createForm()}createForm(){this.editPeerForm=new y.d({clusterName:new a.NI("",{validators:[a.kI.required,this.validateClusterName]}),clientID:new a.NI("",{validators:[a.kI.required,this.validateClientID]}),monAddr:new a.NI("",{validators:[this.validateMonAddr]}),key:new a.NI("",{validators:[this.validateKey]})})}ngOnInit(){this.pattern=`${this.poolName}/${this.peerUUID}`,"edit"===this.mode&&this.rbdMirroringService.getPeer(this.poolName,this.peerUUID).subscribe(t=>{this.setResponse(t)})}validateClusterName(t){if(!t.value.match(/^[\w\-_]*$/))return{invalidClusterName:{value:t.value}}}validateClientID(t){if(!t.value.match(/^(?!client\.)[\w\-_.]*$/))return{invalidClientID:{value:t.value}}}validateMonAddr(t){if(!t.value.match(/^[,; ]*([\w.\-_\[\]]+(:[\d]+)?[,; ]*)*$/))return{invalidMonAddr:{value:t.value}}}validateKey(t){try{if(""===t.value||atob(t.value))return null}catch(o){}return{invalidKey:{value:t.value}}}setResponse(t){this.response=t,this.editPeerForm.get("clusterName").setValue(t.cluster_name),this.editPeerForm.get("clientID").setValue(t.client_id),this.editPeerForm.get("monAddr").setValue(t.mon_host),this.editPeerForm.get("key").setValue(t.key)}update(){const t=new hi;let o;t.cluster_name=this.editPeerForm.getValue("clusterName"),t.client_id=this.editPeerForm.getValue("clientID"),t.mon_host=this.editPeerForm.getValue("monAddr"),t.key=this.editPeerForm.getValue("key"),o=this.taskWrapper.wrapTaskAroundCall("edit"===this.mode?{task:new R.R("rbd/mirroring/peer/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePeer(this.poolName,this.peerUUID,t)}:{task:new R.R("rbd/mirroring/peer/add",{pool_name:this.poolName}),call:this.rbdMirroringService.addPeer(this.poolName,t)}),o.subscribe({error:()=>this.editPeerForm.setErrors({cdSubmitButton:!0}),complete:()=>{this.rbdMirroringService.refresh(),this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(v.p4),e.Y36(K),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-pool-edit-peer-modal"]],decls:38,vars:13,consts:function(){let s,t,o,i,_,r,c,d,g,f,I,P,Z,B,Q,Y,ee,te;return s="{VAR_SELECT, select, edit {Edit} other {Add}}",s=e.Zx4(s,{VAR_SELECT:"\ufffd0\ufffd"}),t="" + s + " pool mirror peer",o="{VAR_SELECT, select, edit {Edit} other {Add}}",o=e.Zx4(o,{VAR_SELECT:"\ufffd0\ufffd"}),i="" + o + " the pool mirror peer attributes for pool " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd1\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + " and click " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Submit" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ".",i=e.Zx4(i),_="Cluster Name",r="Name...",c="CephX ID",d="CephX ID...",g="Monitor Addresses",f="Comma-delimited addresses...",I="CephX Key",P="Base64-encoded key...",Z="This field is required.",B="The cluster name is not valid.",Q="This field is required.",Y="The CephX ID is not valid.",ee="The monitory address is not valid.",te="CephX key must be base64 encoded.",[[3,"modalRef"],[1,"modal-title"],t,[1,"modal-content"],["name","editPeerForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],i,[1,"form-group"],["for","clusterName",1,"col-form-label","required"],_,["type","text","placeholder",r,"id","clusterName","name","clusterName","formControlName","clusterName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","clientID",1,"col-form-label","required"],c,["type","text","placeholder",d,"id","clientID","name","clientID","formControlName","clientID",1,"form-control"],["for","monAddr",1,"col-form-label"],g,["type","text","placeholder",f,"id","monAddr","name","monAddr","formControlName","monAddr",1,"form-control"],["for","key",1,"col-form-label"],I,["type","text","placeholder",P,"id","key","name","key","formControlName","key",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],Z,B,Q,Y,ee,te]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.TgZ(1,"span",1),e.SDv(2,2),e.qZA(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"p"),e.TgZ(8,"span"),e.tHW(9,7),e._UZ(10,"kbd"),e._UZ(11,"kbd"),e.N_p(),e.qZA(),e.qZA(),e.TgZ(12,"div",8),e.TgZ(13,"label",9),e.SDv(14,10),e.qZA(),e._UZ(15,"input",11),e.YNc(16,Pi,2,0,"span",12),e.YNc(17,Ii,2,0,"span",12),e.qZA(),e.TgZ(18,"div",8),e.TgZ(19,"label",13),e.SDv(20,14),e.qZA(),e._UZ(21,"input",15),e.YNc(22,bi,2,0,"span",12),e.YNc(23,Ni,2,0,"span",12),e.qZA(),e.TgZ(24,"div",8),e.TgZ(25,"label",16),e.TgZ(26,"span"),e.SDv(27,17),e.qZA(),e.qZA(),e._UZ(28,"input",18),e.YNc(29,Fi,2,0,"span",12),e.qZA(),e.TgZ(30,"div",8),e.TgZ(31,"label",19),e.TgZ(32,"span"),e.SDv(33,20),e.qZA(),e.qZA(),e._UZ(34,"input",21),e.YNc(35,Di,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(36,"div",22),e.TgZ(37,"cd-form-button-panel",23),e.NdJ("submitActionEvent",function(){return o.update()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.mode),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.editPeerForm),e.xp6(7),e.pQV(o.mode)(o.poolName),e.QtT(9),e.xp6(5),e.Q6J("ngIf",o.editPeerForm.showError("clusterName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.editPeerForm.showError("clusterName",i,"invalidClusterName")),e.xp6(5),e.Q6J("ngIf",o.editPeerForm.showError("clientID",i,"required")),e.xp6(1),e.Q6J("ngIf",o.editPeerForm.showError("clientID",i,"invalidClientID")),e.xp6(6),e.Q6J("ngIf",o.editPeerForm.showError("monAddr",i,"invalidMonAddr")),e.xp6(6),e.Q6J("ngIf",o.editPeerForm.showError("key",i,"invalidKey")),e.xp6(2),e.Q6J("form",o.editPeerForm)("submitText",o.actionLabels.SUBMIT)}},directives:[C.z,a._Y,a.JL,h.V,a.sg,O.P,$.o,a.Fj,k.b,a.JJ,a.u,Re.U,l.O5,j.p],styles:[""]}),n})();const Li=["healthTmpl"];function $i(n,s){if(1&n&&(e.TgZ(0,"span",4),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.health_color)),e.xp6(2),e.Oqu(o)}}let Bi=(()=>{class n{constructor(t,o,i,_,r){this.authStorageService=t,this.rbdMirroringService=o,this.modalService=i,this.taskWrapper=_,this.router=r,this.selection=new Se.r,this.tableStatus=new se.E,this.data=[],this.permission=this.authStorageService.getPermissions().rbdMirroring;const c={permission:"update",icon:T.P.edit,click:()=>this.editModeModal(),name:"Edit Mode",canBePrimary:()=>!0},d={permission:"create",icon:T.P.add,name:"Add Peer",click:()=>this.editPeersModal("add"),disable:()=>!this.selection.first()||"disabled"===this.selection.first().mirror_mode,visible:()=>!this.getPeerUUID(),canBePrimary:()=>!1},g={permission:"update",icon:T.P.exchange,name:"Edit Peer",click:()=>this.editPeersModal("edit"),visible:()=>!!this.getPeerUUID()},f={permission:"delete",icon:T.P.destroy,name:"Delete Peer",click:()=>this.deletePeersModal(),visible:()=>!!this.getPeerUUID()};this.tableActions=[c,d,g,f]}ngOnInit(){this.columns=[{prop:"name",name:"Name",flexGrow:2},{prop:"mirror_mode",name:"Mode",flexGrow:2},{prop:"leader_id",name:"Leader",flexGrow:2},{prop:"image_local_count",name:"# Local",flexGrow:2},{prop:"image_remote_count",name:"# Remote",flexGrow:2},{prop:"health",name:"Health",cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.data=t.content_data.pools,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}editModeModal(){this.router.navigate(["/block/mirroring",{outlets:{modal:[v.MQ.EDIT,this.selection.first().name]}}])}editPeersModal(t){const o={poolName:this.selection.first().name,mode:t};"edit"===t&&(o.peerUUID=this.getPeerUUID()),this.modalRef=this.modalService.show(vi,o)}deletePeersModal(){const t=this.selection.first().name,o=this.getPeerUUID();this.modalRef=this.modalService.show(pe.M,{itemDescription:"mirror peer",itemNames:[`${t} (${o})`],submitActionObservable:()=>new Rt.y(i=>{this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/mirroring/peer/delete",{pool_name:t}),call:this.rbdMirroringService.deletePeer(t,o)}).subscribe({error:_=>i.error(_),complete:()=>{this.rbdMirroringService.refresh(),i.complete()}})})})}getPeerUUID(){const t=this.selection.first(),o=this.data.find(i=>t&&t.name===i.name);if(o&&o.peer_uuids)return o.peer_uuids[0]}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(K),e.Y36(de.Z),e.Y36(u.P),e.Y36(m.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-pools"]],viewQuery:function(t,o){if(1&t&&e.Gf(Li,7),2&t){let i;e.iGM(i=e.CRH())&&(o.healthTmpl=i.first)}},decls:5,vars:7,consts:[["columnMode","flex","identifier","name","forceIdentifier","true","selectionType","single",3,"data","columns","autoReload","status","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["healthTmpl",""],["name","modal"],[3,"ngClass"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA(),e.YNc(2,$i,3,4,"ng-template",null,2,e.W1O),e._UZ(4,"router-outlet",3)),2&t&&(e.Q6J("data",o.data)("columns",o.columns)("autoReload",-1)("status",o.tableStatus),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[W.a,Ee.K,m.lC,l.mk],pipes:[it],styles:[""]}),n})();var Mt=p(59376);const Gi=["stateTmpl"],xi=["syncTmpl"],yi=["progressTmpl"];function wi(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().refresh()}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_error.data)("columns",t.image_error.columns)("autoReload",-1)("status",t.tableStatus)}}function qi(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().refresh()}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_syncing.data)("columns",t.image_syncing.columns)("autoReload",-1)("status",t.tableStatus)}}function Hi(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().refresh()}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_ready.data)("columns",t.image_ready.columns)("autoReload",-1)("status",t.tableStatus)}}function ki(n,s){if(1&n&&(e.TgZ(0,"span",14),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.state_color)),e.xp6(2),e.Oqu(o)}}function Ki(n,s){1&n&&e._UZ(0,"div")}function Xi(n,s){if(1&n&&e._UZ(0,"ngb-progressbar",17),2&n){const t=e.oxw().value;e.Q6J("value",t)("showValue",!0)}}function Qi(n,s){if(1&n&&(e.YNc(0,Ki,1,0,"div",15),e.YNc(1,Xi,1,2,"ngb-progressbar",16)),2&n){const t=s.row;e.Q6J("ngIf","Replaying"===t.state),e.xp6(1),e.Q6J("ngIf","Syncing"===t.state)}}let zi=(()=>{class n{constructor(t){this.rbdMirroringService=t,this.image_error={data:[],columns:{}},this.image_syncing={data:[],columns:{}},this.image_ready={data:[],columns:{}},this.tableStatus=new se.E}ngOnInit(){this.image_error.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"description",name:"Issue",flexGrow:4}],this.image_syncing.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"progress",name:"Progress",cellTemplate:this.progressTmpl,flexGrow:2},{prop:"bytes_per_second",name:"Bytes per second",flexGrow:2},{prop:"entries_behind_primary",name:"Entries behind primary",flexGrow:2}],this.image_ready.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"description",name:"Description",flexGrow:4}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.image_error.data=t.content_data.image_error,this.image_syncing.data=t.content_data.image_syncing,this.image_ready.data=t.content_data.image_ready,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(K))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-images"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Gi,7),e.Gf(xi,7),e.Gf(yi,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.stateTmpl=i.first),e.iGM(i=e.CRH())&&(o.syncTmpl=i.first),e.iGM(i=e.CRH())&&(o.progressTmpl=i.first)}},decls:19,vars:4,consts:function(){let s,t,o;return s="Issues (" + "\ufffd0\ufffd" + ")",t="Syncing (" + "\ufffd0\ufffd" + ")",o="Ready (" + "\ufffd0\ufffd" + ")",[["ngbNav","","cdStatefulTab","image-list",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","issues"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","syncing"],t,["ngbNavItem","ready"],o,[3,"ngbNavOutlet"],["stateTmpl",""],["progressTmpl",""],["columnMode","flex",3,"data","columns","autoReload","status","fetchData"],[3,"ngClass"],[4,"ngIf"],["type","info",3,"value","showValue",4,"ngIf"],["type","info",3,"value","showValue"]]},template:function(t,o){if(1&t&&(e.TgZ(0,"ul",0,1),e.TgZ(2,"li",2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,wi,1,4,"ng-template",5),e.qZA(),e.TgZ(6,"li",6),e.TgZ(7,"a",3),e.SDv(8,7),e.qZA(),e.YNc(9,qi,1,4,"ng-template",5),e.qZA(),e.TgZ(10,"li",8),e.TgZ(11,"a",3),e.SDv(12,9),e.qZA(),e.YNc(13,Hi,1,4,"ng-template",5),e.qZA(),e.qZA(),e._UZ(14,"div",10),e.YNc(15,ki,3,4,"ng-template",null,11,e.W1O),e.YNc(17,Qi,2,2,"ng-template",null,12,e.W1O)),2&t){const i=e.MAs(1);e.xp6(4),e.pQV(o.image_error.data.length),e.QtT(4),e.xp6(4),e.pQV(o.image_syncing.data.length),e.QtT(8),e.xp6(4),e.pQV(o.image_ready.data.length),e.QtT(12),e.xp6(2),e.Q6J("ngbNavOutlet",i)}},directives:[N.Pz,Mt.m,N.nv,N.Vx,N.uN,N.tO,W.a,l.mk,l.O5,N.Ly],pipes:[it],styles:[""]}),n})();function Ji(n,s){if(1&n&&e._UZ(0,"i",18),2&n){const t=e.oxw();e.Q6J("ngClass",t.icons.edit)}}function Yi(n,s){if(1&n&&e._UZ(0,"i",18),2&n){const t=e.oxw();e.Q6J("ngClass",t.icons.check)}}let Vi=(()=>{class n{constructor(t,o,i,_){this.authStorageService=t,this.rbdMirroringService=o,this.modalService=i,this.taskWrapper=_,this.selection=new Se.r,this.peersExist=!0,this.subs=new ii.w,this.editing=!1,this.icons=T.P,this.permission=this.authStorageService.getPermissions().rbdMirroring;const r={permission:"update",icon:T.P.upload,click:()=>this.createBootstrapModal(),name:"Create Bootstrap Token",canBePrimary:()=>!0,disable:()=>!1},c={permission:"update",icon:T.P.download,click:()=>this.importBootstrapModal(),name:"Import Bootstrap Token",disable:()=>this.peersExist};this.tableActions=[r,c]}ngOnInit(){this.createForm(),this.subs.add(this.rbdMirroringService.startPolling()),this.subs.add(this.rbdMirroringService.subscribeSummary(t=>{this.status=t.content_data.status,this.peersExist=!!t.content_data.pools.find(o=>o.peer_uuids.length>0)})),this.rbdMirroringService.getSiteName().subscribe(t=>{this.siteName=t.site_name,this.rbdmirroringForm.get("siteName").setValue(this.siteName)})}createForm(){this.rbdmirroringForm=new y.d({siteName:new a.NI({value:"",disabled:!0})})}ngOnDestroy(){this.subs.unsubscribe()}updateSiteName(){this.editing&&this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/mirroring/site_name/edit",{}),call:this.rbdMirroringService.setSiteName(this.rbdmirroringForm.getValue("siteName"))}).subscribe({complete:()=>{this.rbdMirroringService.refresh()}}),this.editing=!this.editing}createBootstrapModal(){this.modalRef=this.modalService.show(gi,{siteName:this.siteName})}importBootstrapModal(){this.modalRef=this.modalService.show(Ei,{siteName:this.siteName})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(K),e.Y36(de.Z),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring"]],decls:29,vars:9,consts:function(){let s,t,o,i;return s="Site Name",t="Daemons",o="Pools",i="Images",[[1,"row"],[1,"col-md-12"],["name","rbdmirroringForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"d-flex","flex-row"],["for","siteName",1,"col-form-label"],s,[1,"col-md-4","input-group","mb-3","mr-auto"],["type","text","id","siteName","name","siteName","formControlName","siteName",1,"form-control"],[1,"input-group-append"],["id","editSiteName",1,"btn","btn-light",3,"click"],[3,"ngClass",4,"ngIf"],[3,"source","byId"],[1,"table-actions",3,"permission","selection","tableActions"],[1,"col-sm-6"],t,o,i,[3,"ngClass"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0),e.TgZ(1,"div",1),e.TgZ(2,"form",2,3),e.TgZ(4,"div",4),e.TgZ(5,"label",5),e.SDv(6,6),e.qZA(),e.TgZ(7,"div",7),e._UZ(8,"input",8),e.TgZ(9,"div",9),e.TgZ(10,"button",10),e.NdJ("click",function(){return o.updateSiteName()}),e.YNc(11,Ji,1,1,"i",11),e.YNc(12,Yi,1,1,"i",11),e.qZA(),e._UZ(13,"cd-copy-2-clipboard-button",12),e.qZA(),e.qZA(),e._UZ(14,"cd-table-actions",13),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.TgZ(15,"div",0),e.TgZ(16,"div",14),e.TgZ(17,"legend"),e.SDv(18,15),e.qZA(),e._UZ(19,"cd-mirroring-daemons"),e.qZA(),e.TgZ(20,"div",14),e.TgZ(21,"legend"),e.SDv(22,16),e.qZA(),e._UZ(23,"cd-mirroring-pools"),e.qZA(),e.qZA(),e.TgZ(24,"div",0),e.TgZ(25,"div",1),e.TgZ(26,"legend"),e.SDv(27,17),e.qZA(),e._UZ(28,"cd-mirroring-images"),e.qZA(),e.qZA()),2&t&&(e.xp6(2),e.Q6J("formGroup",o.rbdmirroringForm),e.xp6(6),e.uIk("disabled",!o.editing||null),e.xp6(3),e.Q6J("ngIf",!o.editing),e.xp6(1),e.Q6J("ngIf",o.editing),e.xp6(1),e.Q6J("source",o.siteName)("byId",!1),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[a._Y,a.JL,h.V,a.sg,$.o,a.Fj,k.b,a.JJ,a.u,l.O5,Ye.s,Ee.K,Ai,Bi,zi,l.mk],styles:[""]}),n})();class Ui{}function ji(n,s){if(1&n&&(e.TgZ(0,"option",16),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function Wi(n,s){1&n&&(e.TgZ(0,"span",17),e.SDv(1,18),e.qZA())}let es=(()=>{class n{constructor(t,o,i,_,r,c){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.route=r,this.location=c,this.bsConfig={containerClass:"theme-default"},this.peerExists=!1,this.mirrorModes=[{id:"disabled",name:"Disabled"},{id:"pool",name:"Pool"},{id:"image",name:"Image"}],this.createForm()}createForm(){this.editModeForm=new y.d({mirrorMode:new a.NI("",{validators:[a.kI.required,this.validateMode.bind(this)]})})}ngOnInit(){this.route.params.subscribe(t=>{this.poolName=t.pool_name}),this.pattern=`${this.poolName}`,this.rbdMirroringService.getPool(this.poolName).subscribe(t=>{this.setResponse(t)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.peerExists=!1;const i=t.content_data.pools.find(_=>this.poolName===_.name);this.peerExists=i&&i.peer_uuids.length})}ngOnDestroy(){this.subs.unsubscribe()}validateMode(t){return"disabled"===t.value&&this.peerExists?{cannotDisable:{value:t.value}}:null}setResponse(t){this.editModeForm.get("mirrorMode").setValue(t.mirror_mode)}update(){const t=new Ui;t.mirror_mode=this.editModeForm.getValue("mirrorMode"),this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/mirroring/pool/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePool(this.poolName,t)}).subscribe({error:()=>this.editModeForm.setErrors({cdSubmitButton:!0}),complete:()=>{this.rbdMirroringService.refresh(),this.location.back()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(v.p4),e.Y36(K),e.Y36(u.P),e.Y36(m.gz),e.Y36(l.Ye))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-pool-edit-mode-modal"]],decls:21,vars:7,consts:function(){let s,t,o,i;return s="Edit pool mirror mode",t="To edit the mirror mode for pool\xA0 " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd0\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ", select a new mode from the list and click\xA0 " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Update" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ".",t=e.Zx4(t),o="Mode",i="Peer clusters must be removed prior to disabling mirror.",[["pageURL","mirroring",3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","editModeForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","mirrorMode",1,"col-form-label"],o,["id","mirrorMode","name","mirrorMode","formControlName","mirrorMode",1,"form-control"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[3,"value"],[1,"invalid-feedback"],i]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd"),e._UZ(11,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(12,"div",8),e.TgZ(13,"label",9),e.TgZ(14,"span"),e.SDv(15,10),e.qZA(),e.qZA(),e.TgZ(16,"select",11),e.YNc(17,ji,2,2,"option",12),e.qZA(),e.YNc(18,Wi,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(19,"div",14),e.TgZ(20,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.update()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.editModeForm),e.xp6(7),e.pQV(o.poolName),e.QtT(9),e.xp6(6),e.Q6J("ngForOf",o.mirrorModes),e.xp6(1),e.Q6J("ngIf",o.editModeForm.showError("mirrorMode",i,"cannotDisable")),e.xp6(2),e.Q6J("form",o.editModeForm)("submitText",o.actionLabels.UPDATE)}},directives:[C.z,a._Y,a.JL,h.V,a.sg,O.P,$.o,a.EJ,k.b,a.JJ,a.u,l.sg,l.O5,j.p,a.YN,a.Kr],styles:[""]}),n})();var Ot=p(80226),ts=p(28049),os=p(43190),Ve=p(80842),st=p(30633),Le=p(47557),ns=p(28211);class is{}var Pe=(()=>{return(n=Pe||(Pe={}))[n.V1=1]="V1",n[n.V2=2]="V2",Pe;var n})();class ss{constructor(){this.features=[]}}class _s{constructor(){this.features=[]}}class rs extends class{}{constructor(){super(...arguments),this.features=[]}}class _t{constructor(){this.features=[],this.remove_scheduling=!1}}var Ue=(()=>{return(n=Ue||(Ue={})).editing="editing",n.cloning="cloning",n.copying="copying",Ue;var n})(),ls=p(17932),cs=p(18372),ds=p(54555);function ps(n,s){if(1&n&&(e.TgZ(0,"div",9),e.TgZ(1,"label",58),e.SDv(2,59),e.ALo(3,"titlecase"),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",60),e._UZ(6,"hr"),e.qZA(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(3),e.pQV(e.lcZ(3,1,t.action)),e.QtT(2)}}function gs(n,s){1&n&&(e.TgZ(0,"span",61),e.ynx(1),e.SDv(2,62),e.BQk(),e.qZA())}function us(n,s){1&n&&(e.TgZ(0,"span",61),e.ynx(1),e.SDv(2,63),e.BQk(),e.qZA())}function ms(n,s){1&n&&e._UZ(0,"input",64)}function Ts(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,67),e.qZA()),2&n&&e.Q6J("ngValue",null)}function fs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,68),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Cs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,69),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ss(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function Es(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"select",65),e.NdJ("change",function(){return e.CHM(t),e.oxw(2).setPoolMirrorMode()}),e.YNc(1,Ts,2,1,"option",66),e.YNc(2,fs,2,1,"option",66),e.YNc(3,Cs,2,1,"option",66),e.YNc(4,Ss,2,2,"option",46),e.qZA()}if(2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.pools)}}function Rs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,71),e.qZA())}const Ms=function(n,s){return[n,s]};function Os(n,s){if(1&n&&(e.TgZ(0,"div",9),e.TgZ(1,"div",20),e._UZ(2,"i",72),e.qZA(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(2),e.Q6J("ngClass",e.WLB(1,Ms,t.icons.spinner,t.icons.spin))}}function As(n,s){1&n&&e._UZ(0,"input",76)}function hs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,78),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ps(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,79),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Is(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,80),e.qZA()),2&n&&e.Q6J("ngValue",null)}function bs(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function Ns(n,s){if(1&n&&(e.TgZ(0,"select",77),e.YNc(1,hs,2,1,"option",66),e.YNc(2,Ps,2,1,"option",66),e.YNc(3,Is,2,1,"option",66),e.YNc(4,bs,2,2,"option",46),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.namespaces)}}function Fs(n,s){if(1&n&&(e.TgZ(0,"div",9),e.TgZ(1,"label",73),e._uU(2," Namespace "),e.qZA(),e.TgZ(3,"div",12),e.YNc(4,As,1,0,"input",74),e.YNc(5,Ns,5,4,"select",75),e.qZA(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngIf","editing"===t.mode||!t.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==t.mode&&t.poolPermission.read)}}function Ds(n,s){1&n&&(e.TgZ(0,"cd-helper"),e.TgZ(1,"span"),e.SDv(2,81),e.qZA(),e.qZA())}function vs(n,s){1&n&&e._UZ(0,"input",87)}function Ls(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,89),e.qZA()),2&n&&e.Q6J("ngValue",null)}function $s(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,90),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Zs(n,s){1&n&&(e.TgZ(0,"option",50),e._uU(1,"-- Select a data pool -- "),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Bs(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function Gs(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"select",88),e.NdJ("change",function(i){return e.CHM(t),e.oxw(3).onDataPoolChange(i.target.value)}),e.YNc(1,Ls,2,1,"option",66),e.YNc(2,$s,2,1,"option",66),e.YNc(3,Zs,2,1,"option",66),e.YNc(4,Bs,2,2,"option",46),e.qZA()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngIf",null===t.dataPools),e.xp6(1),e.Q6J("ngIf",null!==t.dataPools&&0===t.dataPools.length),e.xp6(1),e.Q6J("ngIf",null!==t.dataPools&&t.dataPools.length>0),e.xp6(1),e.Q6J("ngForOf",t.dataPools)}}function xs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,91),e.qZA())}const je=function(n){return{required:n}};function ys(n,s){if(1&n&&(e.TgZ(0,"div",9),e.TgZ(1,"label",82),e.TgZ(2,"span",72),e.SDv(3,83),e.qZA(),e._UZ(4,"cd-helper",84),e.qZA(),e.TgZ(5,"div",12),e.YNc(6,vs,1,0,"input",85),e.YNc(7,Gs,5,4,"select",86),e.YNc(8,xs,2,0,"span",14),e.qZA(),e.qZA()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(4,je,"editing"!==o.mode)),e.xp6(4),e.Q6J("ngIf","editing"===o.mode||!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("dataPool",t,"required"))}}function ws(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,92),e.qZA())}function qs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,93),e.qZA())}function Hs(n,s){if(1&n&&e._UZ(0,"cd-helper",97),2&n){const t=e.oxw().$implicit;e.s9C("html",t.helperHtml)}}function ks(n,s){if(1&n&&(e.TgZ(0,"div",21),e._UZ(1,"input",94),e.TgZ(2,"label",95),e._uU(3),e.qZA(),e.YNc(4,Hs,1,1,"cd-helper",96),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.key),e.s9C("name",t.key),e.s9C("formControlName",t.key),e.xp6(1),e.s9C("for",t.key),e.xp6(1),e.Oqu(t.desc),e.xp6(1),e.Q6J("ngIf",t.helperHtml)}}const At=function(n){return["edit",n]},ht=function(n){return{modal:n}},Pt=function(n){return{outlets:n}},It=function(n){return["/block/mirroring",n]};function Ks(n,s){if(1&n&&(e.TgZ(0,"cd-helper"),e.TgZ(1,"span"),e.tHW(2,98),e._UZ(3,"b"),e._UZ(4,"a",99),e.N_p(),e.qZA(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("routerLink",e.VKq(7,It,e.VKq(5,Pt,e.VKq(3,ht,e.VKq(1,At,t.currentPoolName)))))}}function Xs(n,s){if(1&n&&(e.TgZ(0,"cd-helper"),e.TgZ(1,"span"),e.tHW(2,103),e._UZ(3,"b"),e._UZ(4,"a",99),e.N_p(),e.qZA(),e.qZA()),2&n){const t=e.oxw(4);e.xp6(4),e.Q6J("routerLink",e.VKq(7,It,e.VKq(5,Pt,e.VKq(3,ht,e.VKq(1,At,t.currentPoolName)))))}}function Qs(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",101),e.TgZ(1,"input",102),e.NdJ("change",function(){return e.CHM(t),e.oxw(3).setExclusiveLock()}),e.qZA(),e.TgZ(2,"label",95),e._uU(3),e.ALo(4,"titlecase"),e.qZA(),e.YNc(5,Xs,5,9,"cd-helper",25),e.qZA()}if(2&n){const t=s.$implicit,o=e.oxw(3);e.xp6(1),e.Q6J("id",t)("value",t),e.uIk("disabled","pool"===o.poolMirrorMode&&"snapshot"===t||null),e.xp6(1),e.Q6J("for",t),e.xp6(1),e.Oqu(e.lcZ(4,6,t)),e.xp6(2),e.Q6J("ngIf","pool"===o.poolMirrorMode&&"snapshot"===t)}}function zs(n,s){if(1&n&&(e.TgZ(0,"div"),e.YNc(1,Qs,6,8,"div",100),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngForOf",t.mirroringOptions)}}function Js(n,s){if(1&n&&(e.TgZ(0,"div",9),e.TgZ(1,"label",104),e.tHW(2,105),e._UZ(3,"cd-helper",106),e.N_p(),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",107),e.qZA(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(5),e.uIk("disabled",t.mode===t.rbdFormMode.editing||null)}}function Ys(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"a",108),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).advancedEnabled=!0,!1}),e.SDv(1,109),e.qZA()}}function Vs(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function Us(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function js(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,110),e.qZA())}function Ws(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,111),e.qZA())}function e_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,112),e.qZA())}function t_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,113),e.qZA())}function o_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1),e.TgZ(1,"form",2,3),e.TgZ(3,"div",4),e.TgZ(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.YNc(9,ps,7,3,"div",8),e.TgZ(10,"div",9),e.TgZ(11,"label",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"div",12),e._UZ(14,"input",13),e.YNc(15,gs,3,0,"span",14),e.YNc(16,us,3,0,"span",14),e.qZA(),e.qZA(),e.TgZ(17,"div",15),e.NdJ("change",function(i){return e.CHM(t),e.oxw().onPoolChange(i.target.value)}),e.TgZ(18,"label",16),e.SDv(19,17),e.qZA(),e.TgZ(20,"div",12),e.YNc(21,ms,1,0,"input",18),e.YNc(22,Es,5,4,"select",19),e.YNc(23,Rs,2,0,"span",14),e.qZA(),e.qZA(),e.YNc(24,Os,3,4,"div",8),e.YNc(25,Fs,6,2,"div",8),e.TgZ(26,"div",9),e.TgZ(27,"div",20),e.TgZ(28,"div",21),e.TgZ(29,"input",22),e.NdJ("change",function(){return e.CHM(t),e.oxw().onUseDataPoolChange()}),e.qZA(),e.TgZ(30,"label",23),e.SDv(31,24),e.qZA(),e.YNc(32,Ds,3,0,"cd-helper",25),e.qZA(),e.qZA(),e.qZA(),e.YNc(33,ys,9,6,"div",8),e.TgZ(34,"div",9),e.TgZ(35,"label",26),e.SDv(36,27),e.qZA(),e.TgZ(37,"div",12),e._UZ(38,"input",28),e.YNc(39,ws,2,0,"span",14),e.YNc(40,qs,2,0,"span",14),e.qZA(),e.qZA(),e.TgZ(41,"div",29),e.TgZ(42,"label",30),e.SDv(43,31),e.qZA(),e.TgZ(44,"div",12),e.YNc(45,ks,5,6,"div",32),e.qZA(),e.qZA(),e.TgZ(46,"div",9),e.TgZ(47,"div",20),e.TgZ(48,"div",21),e.TgZ(49,"input",33),e.NdJ("change",function(){return e.CHM(t),e.oxw().setMirrorMode()}),e.qZA(),e.TgZ(50,"label",34),e._uU(51,"Mirroring"),e.qZA(),e.YNc(52,Ks,5,9,"cd-helper",25),e.qZA(),e.YNc(53,zs,2,1,"div",25),e.qZA(),e.qZA(),e.YNc(54,Js,6,1,"div",8),e.TgZ(55,"div",35),e.TgZ(56,"div",36),e.YNc(57,Ys,2,0,"a",37),e.qZA(),e.qZA(),e.TgZ(58,"div",38),e.TgZ(59,"legend",39),e.SDv(60,40),e.qZA(),e.TgZ(61,"div",41),e.TgZ(62,"h4",39),e.SDv(63,42),e.qZA(),e.TgZ(64,"div",9),e.TgZ(65,"label",43),e.tHW(66,44),e._UZ(67,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(68,"div",12),e.TgZ(69,"select",45),e.YNc(70,Vs,2,2,"option",46),e.qZA(),e.qZA(),e.qZA(),e.TgZ(71,"div",9),e.TgZ(72,"label",47),e.tHW(73,48),e._UZ(74,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(75,"div",12),e.TgZ(76,"select",49),e.TgZ(77,"option",50),e.SDv(78,51),e.qZA(),e.YNc(79,Us,2,2,"option",46),e.qZA(),e.YNc(80,js,2,0,"span",14),e.YNc(81,Ws,2,0,"span",14),e.qZA(),e.qZA(),e.TgZ(82,"div",9),e.TgZ(83,"label",52),e.tHW(84,53),e._UZ(85,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(86,"div",12),e._UZ(87,"input",54),e.YNc(88,e_,2,0,"span",14),e.YNc(89,t_,2,0,"span",14),e.qZA(),e.qZA(),e.qZA(),e.TgZ(90,"cd-rbd-configuration-form",55),e.NdJ("changes",function(i){return e.CHM(t),e.oxw().getDirtyConfigurationValues=i}),e.qZA(),e.qZA(),e.qZA(),e.TgZ(91,"div",56),e.TgZ(92,"cd-form-button-panel",57),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().submit()}),e.ALo(93,"titlecase"),e.ALo(94,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.qZA(),e.qZA()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.rbdForm),e.xp6(6),e.pQV(e.lcZ(6,35,o.action))(e.lcZ(7,37,o.resource)),e.QtT(5),e.xp6(2),e.Q6J("ngIf",o.rbdForm.getValue("parent")),e.xp6(6),e.Q6J("ngIf",o.rbdForm.showError("name",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("name",t,"pattern")),e.xp6(2),e.Q6J("ngClass",e.VKq(43,je,"editing"!==o.mode)),e.xp6(3),e.Q6J("ngIf","editing"===o.mode||!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("pool",t,"required")),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.rbdForm.getValue("pool")&&null===o.namespaces),e.xp6(1),e.Q6J("ngIf","editing"===o.mode&&o.rbdForm.getValue("namespace")||"editing"!==o.mode&&(o.namespaces&&o.namespaces.length>0||!o.poolPermission.read)),e.xp6(7),e.Q6J("ngIf",o.allDataPools.length<=1),e.xp6(1),e.Q6J("ngIf",o.rbdForm.getValue("useDataPool")),e.xp6(6),e.Q6J("ngIf",o.rbdForm.showError("size",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("size",t,"invalidSizeObject")),e.xp6(5),e.Q6J("ngForOf",o.featuresList),e.xp6(7),e.Q6J("ngIf",!1===o.mirroring&&o.currentPoolName),e.xp6(1),e.Q6J("ngIf",o.mirroring),e.xp6(1),e.Q6J("ngIf","snapshot"===o.rbdForm.getValue("mirroringMode")&&o.mirroring),e.xp6(3),e.Q6J("ngIf",!o.advancedEnabled),e.xp6(1),e.Q6J("hidden",!o.advancedEnabled),e.xp6(12),e.Q6J("ngForOf",o.objectSizes),e.xp6(2),e.Q6J("ngClass",e.VKq(45,je,o.rbdForm.getValue("stripingCount"))),e.xp6(5),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.objectSizes),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingUnit",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingUnit",t,"invalidStripingUnit")),e.xp6(2),e.Q6J("ngClass",e.VKq(47,je,o.rbdForm.getValue("stripingUnit"))),e.xp6(5),e.Q6J("ngIf",o.rbdForm.showError("stripingCount",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingCount",t,"min")),e.xp6(1),e.Q6J("form",o.rbdForm)("initializeData",o.initializeConfigData),e.xp6(2),e.Q6J("form",t)("submitText",e.lcZ(93,39,o.action)+" "+e.lcZ(94,41,o.resource))}}let $e=(()=>{class n extends H.E{constructor(t,o,i,_,r,c,d,g,f,I){super(),this.authStorageService=t,this.route=o,this.poolService=i,this.rbdService=_,this.formatter=r,this.taskWrapper=c,this.dimlessBinaryPipe=d,this.actionLabels=g,this.router=f,this.rbdMirroringService=I,this.namespaces=[],this.namespacesByPoolCache={},this.pools=null,this.allPools=null,this.dataPools=null,this.allDataPools=[],this.featuresList=[],this.initializeConfigData=new Ot.t(1),this.advancedEnabled=!1,this.rbdFormMode=Ue,this.defaultObjectSize="4 MiB",this.mirroringOptions=["journal","snapshot"],this.mirroring=!1,this.currentPoolName="",this.objectSizes=["4 KiB","8 KiB","16 KiB","32 KiB","64 KiB","128 KiB","256 KiB","512 KiB","1 MiB","2 MiB","4 MiB","8 MiB","16 MiB","32 MiB"],this.defaultStripingUnit="4 MiB",this.defaultStripingCount=1,this.rbdImage=new Ot.t(1),this.icons=T.P,this.routerUrl=this.router.url,this.poolPermission=this.authStorageService.getPermissions().pool,this.resource="RBD",this.features={"deep-flatten":{desc:"Deep flatten",requires:null,allowEnable:!1,allowDisable:!0},layering:{desc:"Layering",requires:null,allowEnable:!1,allowDisable:!1},"exclusive-lock":{desc:"Exclusive lock",requires:null,allowEnable:!0,allowDisable:!0},"object-map":{desc:"Object map (requires exclusive-lock)",requires:"exclusive-lock",allowEnable:!0,allowDisable:!0,initDisabled:!0},"fast-diff":{desc:"Fast diff (interlocked with object-map)",requires:"object-map",allowEnable:!0,allowDisable:!0,interlockedWith:"object-map",initDisabled:!0}},this.featuresList=this.objToArray(this.features),this.createForm()}objToArray(t){return S().map(t,(o,i)=>Object.assign(o,{key:i}))}createForm(){this.rbdForm=new y.d({parent:new a.NI(""),name:new a.NI("",{validators:[a.kI.required,a.kI.pattern(/^[^@/]+?$/)]}),pool:new a.NI(null,{validators:[a.kI.required]}),namespace:new a.NI(null),useDataPool:new a.NI(!1),dataPool:new a.NI(null),size:new a.NI(null,{updateOn:"blur"}),obj_size:new a.NI(this.defaultObjectSize),features:new y.d(this.featuresList.reduce((t,o)=>(t[o.key]=new a.NI({value:!1,disabled:!!o.initDisabled}),t),{})),mirroring:new a.NI(!1),schedule:new a.NI("",{validators:[a.kI.pattern(/^([0-9]+)d|([0-9]+)h|([0-9]+)m$/)]}),mirroringMode:new a.NI(this.mirroringOptions[0]),stripingUnit:new a.NI(this.defaultStripingUnit),stripingCount:new a.NI(this.defaultStripingCount,{updateOn:"blur"})},this.validateRbdForm(this.formatter))}disableForEdit(){this.rbdForm.get("parent").disable(),this.rbdForm.get("pool").disable(),this.rbdForm.get("namespace").disable(),this.rbdForm.get("useDataPool").disable(),this.rbdForm.get("dataPool").disable(),this.rbdForm.get("obj_size").disable(),this.rbdForm.get("stripingUnit").disable(),this.rbdForm.get("stripingCount").disable(),this.rbdImage.subscribe(t=>{t.image_format===Pe.V1&&(this.rbdForm.get("deep-flatten").disable(),this.rbdForm.get("layering").disable(),this.rbdForm.get("exclusive-lock").disable())})}disableForClone(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}disableForCopy(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}ngOnInit(){this.prepareFormForAction(),this.gatherNeededData().subscribe(this.handleExternalData.bind(this))}setExclusiveLock(){this.mirroring&&"journal"===this.rbdForm.get("mirroringMode").value?(this.rbdForm.get("exclusive-lock").setValue(!0),this.rbdForm.get("exclusive-lock").disable()):(this.rbdForm.get("exclusive-lock").enable(),"pool"===this.poolMirrorMode&&this.rbdForm.get("mirroringMode").setValue(this.mirroringOptions[0]))}setMirrorMode(){this.mirroring=!this.mirroring,this.setExclusiveLock()}setPoolMirrorMode(){var t;this.currentPoolName=this.mode===this.rbdFormMode.editing?null===(t=this.response)||void 0===t?void 0:t.pool_name:this.rbdForm.getValue("pool"),this.currentPoolName&&(this.rbdMirroringService.refresh(),this.rbdMirroringService.subscribeSummary(o=>{const i=o.content_data.pools.find(_=>_.name===this.currentPoolName);this.poolMirrorMode=i.mirror_mode,"disabled"===i.mirror_mode?(this.mirroring=!1,this.rbdForm.get("mirroring").setValue(this.mirroring),this.rbdForm.get("mirroring").disable()):this.mode!==this.rbdFormMode.editing&&(this.rbdForm.get("mirroring").enable(),this.mirroring=!0,this.rbdForm.get("mirroring").setValue(this.mirroring))})),this.setExclusiveLock()}prepareFormForAction(){const t=this.routerUrl;t.startsWith("/block/rbd/edit")?(this.mode=this.rbdFormMode.editing,this.action=this.actionLabels.EDIT,this.disableForEdit()):t.startsWith("/block/rbd/clone")?(this.mode=this.rbdFormMode.cloning,this.disableForClone(),this.action=this.actionLabels.CLONE):t.startsWith("/block/rbd/copy")?(this.mode=this.rbdFormMode.copying,this.action=this.actionLabels.COPY,this.disableForCopy()):this.action=this.actionLabels.CREATE,S().each(this.features,o=>{this.rbdForm.get("features").get(o.key).valueChanges.subscribe(i=>this.featureFormUpdate(o.key,i))})}gatherNeededData(){const t={};return this.mode?this.route.params.subscribe(o=>{const i=L.N.fromString(decodeURIComponent(o.image_spec));o.snap&&(this.snapName=decodeURIComponent(o.snap)),t.rbd=this.rbdService.get(i)}):t.defaultFeatures=this.rbdService.defaultFeatures(),this.mode!==this.rbdFormMode.editing&&this.poolPermission.read&&(t.pools=this.poolService.list(["pool_name","type","flags_names","application_metadata"])),(0,le.D)(t)}handleExternalData(t){if(this.handlePoolData(t.pools),this.setPoolMirrorMode(),t.defaultFeatures&&this.setFeatures(t.defaultFeatures),t.rbd){const o=t.rbd;this.setResponse(o,this.snapName),this.rbdImage.next(o)}this.loadingReady()}handlePoolData(t){if(!t)return;const o=[],i=[];for(const _ of t)this.rbdService.isRBDPool(_)&&("replicated"===_.type?(o.push(_),i.push(_)):"erasure"===_.type&&-1!==_.flags_names.indexOf("ec_overwrites")&&i.push(_));if(this.pools=o,this.allPools=o,this.dataPools=i,this.allDataPools=i,1===this.pools.length){const _=this.pools[0].pool_name;this.rbdForm.get("pool").setValue(_),this.onPoolChange(_)}this.allDataPools.length<=1&&this.rbdForm.get("useDataPool").disable()}onPoolChange(t){const o=this.rbdForm.get("dataPool");o.value===t&&o.setValue(null),this.dataPools=this.allDataPools?this.allDataPools.filter(i=>i.pool_name!==t):[],this.namespaces=null,t in this.namespacesByPoolCache?this.namespaces=this.namespacesByPoolCache[t]:this.rbdService.listNamespaces(t).subscribe(i=>{i=i.map(_=>_.namespace),this.namespacesByPoolCache[t]=i,this.namespaces=i}),this.rbdForm.get("namespace").setValue(null)}onUseDataPoolChange(){this.rbdForm.getValue("useDataPool")||(this.rbdForm.get("dataPool").setValue(null),this.onDataPoolChange(null))}onDataPoolChange(t){const o=this.allPools.filter(i=>i.pool_name!==t);this.rbdForm.getValue("pool")===t&&this.rbdForm.get("pool").setValue(null),this.pools=o}validateRbdForm(t){return o=>{const i=o.get("useDataPool"),_=o.get("dataPool");let r=null;i.value&&null==_.value&&(r={required:!0}),_.setErrors(r);const c=o.get("size"),d=o.get("obj_size"),g=t.toBytes(null!=d.value?d.value:this.defaultObjectSize),f=o.get("stripingCount"),I=null!=f.value?f.value:this.defaultStripingCount;let P=null;null===c.value?P={required:!0}:I*g>t.toBytes(c.value)&&(P={invalidSizeObject:!0}),c.setErrors(P);const Z=o.get("stripingUnit");let B=null;null===Z.value&&null!==f.value?B={required:!0}:null!==Z.value&&t.toBytes(Z.value)>g&&(B={invalidStripingUnit:!0}),Z.setErrors(B);let Q=null;return null===f.value&&null!==Z.value?Q={required:!0}:I<1&&(Q={min:!0}),f.setErrors(Q),null}}deepBoxCheck(t,o){this.getDependentChildFeatures(t).forEach(_=>{const r=this.rbdForm.get(_.key);o?r.enable({emitEvent:!1}):(r.disable({emitEvent:!1}),r.setValue(!1,{emitEvent:!1}),this.deepBoxCheck(_.key,o));const c=this.rbdForm.get("features");this.mode===this.rbdFormMode.editing&&c.get(_.key).enabled&&(-1!==this.response.features_name.indexOf(_.key)&&!_.allowDisable||-1===this.response.features_name.indexOf(_.key)&&!_.allowEnable)&&c.get(_.key).disable()})}getDependentChildFeatures(t){return S().filter(this.features,o=>o.requires===t)||[]}interlockCheck(t,o){const i=this.featuresList.find(_=>_.key===t);if(this.response){const _=null!=i.interlockedWith,r=this.featuresList.find(d=>d.interlockedWith===i.key),c=!!this.response.features_name.find(d=>d===i.key);if(_){if(c!==!!this.response.features_name.find(g=>g===i.interlockedWith))return}else if(r&&!!this.response.features_name.find(g=>g===r.key)!==c)return}o?S().filter(this.features,_=>_.interlockedWith===t).forEach(_=>this.rbdForm.get(_.key).setValue(!0,{emitEvent:!1})):i.interlockedWith&&this.rbdForm.get("features").get(i.interlockedWith).setValue(!1)}featureFormUpdate(t,o){if(o){const i=this.features[t].requires;if(i&&!this.rbdForm.getValue(i))return void this.rbdForm.get(`features.${t}`).setValue(!1)}this.deepBoxCheck(t,o),this.interlockCheck(t,o)}setFeatures(t){const o=this.rbdForm.get("features");S().forIn(this.features,i=>{-1!==t.indexOf(i.key)&&o.get(i.key).setValue(!0),this.featureFormUpdate(i.key,o.get(i.key).value)})}setResponse(t,o){this.response=t;const i=new L.N(t.pool_name,t.namespace,t.name).toString();if(this.mode===this.rbdFormMode.cloning)this.rbdForm.get("parent").setValue(`${i}@${o}`);else if(this.mode===this.rbdFormMode.copying)o?this.rbdForm.get("parent").setValue(`${i}@${o}`):this.rbdForm.get("parent").setValue(`${i}`);else if(t.parent){const _=t.parent;this.rbdForm.get("parent").setValue(`${_.pool_name}/${_.image_name}@${_.snap_name}`)}this.mode===this.rbdFormMode.editing&&(this.rbdForm.get("name").setValue(t.name),"snapshot"===(null==t?void 0:t.mirror_mode)||t.features_name.includes("journaling")?(this.mirroring=!0,this.rbdForm.get("mirroring").setValue(this.mirroring),this.rbdForm.get("mirroringMode").setValue(null==t?void 0:t.mirror_mode),this.rbdForm.get("schedule").setValue(null==t?void 0:t.schedule_interval)):(this.mirroring=!1,this.rbdForm.get("mirroring").setValue(this.mirroring)),this.setPoolMirrorMode()),this.rbdForm.get("pool").setValue(t.pool_name),this.onPoolChange(t.pool_name),this.rbdForm.get("namespace").setValue(t.namespace),t.data_pool&&(this.rbdForm.get("useDataPool").setValue(!0),this.rbdForm.get("dataPool").setValue(t.data_pool)),this.rbdForm.get("size").setValue(this.dimlessBinaryPipe.transform(t.size)),this.rbdForm.get("obj_size").setValue(this.dimlessBinaryPipe.transform(t.obj_size)),this.setFeatures(t.features_name),this.rbdForm.get("stripingUnit").setValue(this.dimlessBinaryPipe.transform(t.stripe_unit)),this.rbdForm.get("stripingCount").setValue(t.stripe_count),this.initializeConfigData.next({initialData:this.response.configuration,sourceType:st.h.image})}createRequest(){const t=new rs;return t.pool_name=this.rbdForm.getValue("pool"),t.namespace=this.rbdForm.getValue("namespace"),t.name=this.rbdForm.getValue("name"),t.schedule_interval=this.rbdForm.getValue("schedule"),t.size=this.formatter.toBytes(this.rbdForm.getValue("size")),"image"===this.poolMirrorMode&&(t.mirror_mode=this.rbdForm.getValue("mirroringMode")),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(),t}addObjectSizeAndStripingToRequest(t){t.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),S().forIn(this.features,o=>{this.rbdForm.getValue(o.key)&&t.features.push(o.key)}),this.mirroring&&"journal"===this.rbdForm.getValue("mirroringMode")&&t.features.push("journaling"),t.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),t.stripe_count=this.rbdForm.getValue("stripingCount"),t.data_pool=this.rbdForm.getValue("dataPool")}createAction(){const t=this.createRequest();return this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/create",{pool_name:t.pool_name,namespace:t.namespace,image_name:t.name,schedule_interval:t.schedule_interval,start_time:t.start_time}),call:this.rbdService.create(t)})}editRequest(){const t=new _t;if(t.name=this.rbdForm.getValue("name"),t.schedule_interval=this.rbdForm.getValue("schedule"),t.name=this.rbdForm.getValue("name"),t.size=this.formatter.toBytes(this.rbdForm.getValue("size")),S().forIn(this.features,o=>{this.rbdForm.getValue(o.key)&&t.features.push(o.key)}),t.enable_mirror=this.rbdForm.getValue("mirroring"),t.enable_mirror)"journal"===this.rbdForm.getValue("mirroringMode")&&t.features.push("journaling"),"image"===this.poolMirrorMode&&(t.mirror_mode=this.rbdForm.getValue("mirroringMode"));else{const o=t.features.indexOf("journaling",0);o>-1&&t.features.splice(o,1)}return t.configuration=this.getDirtyConfigurationValues(),t}cloneRequest(){const t=new ss;return t.child_pool_name=this.rbdForm.getValue("pool"),t.child_namespace=this.rbdForm.getValue("namespace"),t.child_image_name=this.rbdForm.getValue("name"),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(!0,st.h.image),t}editAction(){const t=new L.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/edit",{image_spec:t.toString()}),call:this.rbdService.update(t,this.editRequest())})}cloneAction(){const t=this.cloneRequest(),o=new L.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/clone",{parent_image_spec:o.toString(),parent_snap_name:this.snapName,child_pool_name:t.child_pool_name,child_namespace:t.child_namespace,child_image_name:t.child_image_name}),call:this.rbdService.cloneSnapshot(o,this.snapName,t)})}copyRequest(){const t=new _s;return this.snapName&&(t.snapshot_name=this.snapName),t.dest_pool_name=this.rbdForm.getValue("pool"),t.dest_namespace=this.rbdForm.getValue("namespace"),t.dest_image_name=this.rbdForm.getValue("name"),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(!0,st.h.image),t}copyAction(){const t=this.copyRequest(),o=new L.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/copy",{src_image_spec:o.toString(),dest_pool_name:t.dest_pool_name,dest_namespace:t.dest_namespace,dest_image_name:t.dest_image_name}),call:this.rbdService.copy(o,t)})}submit(){this.mode||this.rbdImage.next("create"),this.rbdImage.pipe((0,ts.P)(),(0,os.w)(()=>this.mode===this.rbdFormMode.editing?this.editAction():this.mode===this.rbdFormMode.cloning?this.cloneAction():this.mode===this.rbdFormMode.copying?this.copyAction():this.createAction())).subscribe(()=>{},()=>this.rbdForm.setErrors({cdSubmitButton:!0}),()=>this.router.navigate(["/block/rbd"]))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(m.gz),e.Y36(Ve.q),e.Y36(q),e.Y36(ns.H),e.Y36(u.P),e.Y36(Le.$),e.Y36(v.p4),e.Y36(m.F0),e.Y36(K))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,i,_,r,c,d,g,f,I,P,Z,B,Q,Y,ee,te,w,_e,ae,M,ge,ue,me,Te,fe,Ce,G,Be,Ge,xe,ye,we,qe,He,ke,Ke,Xe,Qe,ze;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Name",o="Pool",i="Use a dedicated data pool",_="Size",r="e.g., 10GiB",c="Features",d="Advanced",g="Striping",f="Object size" + "\ufffd#67\ufffd" + "Objects in the Ceph Storage Cluster have a maximum configurable size (e.g., 2MB, 4MB, etc.). The object size should be large enough to accommodate many stripe units, and should be a multiple of the stripe unit." + "\ufffd/#67\ufffd" + "",I="Stripe unit" + "\ufffd#74\ufffd" + "Stripes have a configurable unit size (e.g., 64kb). The Ceph Client divides the data it will write to objects into equally sized stripe units, except for the last stripe unit. A stripe width, should be a fraction of the Object Size so that an object may contain many stripe units." + "\ufffd/#74\ufffd" + "",P="-- Select stripe unit --",Z="Stripe count" + "\ufffd#85\ufffd" + "The Ceph Client writes a sequence of stripe units over a series of objects determined by the stripe count. The series of objects is called an object set. After the Ceph Client writes to the last object in the object set, it returns to the first object in the object set." + "\ufffd/#85\ufffd" + "",B="" + "\ufffd0\ufffd" + " from",Q="This field is required.",Y="'/' and '@' are not allowed.",ee="Loading...",te="-- No rbd pools available --",w="-- Select a pool --",_e="This field is required.",ae="Loading...",M="-- No namespaces available --",ge="-- Select a namespace --",ue="You need more than one pool with the rbd application label use to use a dedicated data pool.",me="Data pool",Te="Dedicated pool that stores the object-data of the RBD.",fe="Loading...",Ce="-- No data pools available --",G="This field is required.",Be="This field is required.",Ge="You have to increase the size.",xe="You need to enable a " + "\ufffd#3\ufffd" + "mirror mode" + "\ufffd/#3\ufffd" + " in the selected pool. Please " + "\ufffd#4\ufffd" + "click here to select a mode and enable it in this pool." + "\ufffd/#4\ufffd" + "",ye="You need to enable " + "\ufffd#3\ufffd" + "image mirror mode" + "\ufffd/#3\ufffd" + " in the selected pool. Please " + "\ufffd#4\ufffd" + "click here to select a mode and enable it in this pool." + "\ufffd/#4\ufffd" + "",we="Create Mirror-Snapshots automatically on a periodic basis. The interval can be specified in days, hours, or minutes using d, h, m suffix respectively.",qe="Schedule Interval " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + "",He="e.g., 12h or 1d or 10m",ke="Advanced...",Ke="This field is required because stripe count is defined!",Xe="Stripe unit is greater than object size.",Qe="This field is required because stripe unit is defined!",ze="Stripe count must be greater than 0.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","rbdForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],["class","form-group row",4,"ngIf"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["type","text","placeholder","Name...","id","name","name","name","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"form-group","row",3,"change"],["for","pool",1,"cd-col-form-label",3,"ngClass"],o,["class","form-control","type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",4,"ngIf"],["id","pool","name","pool","class","form-control","formControlName","pool",3,"change",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","useDataPool","name","useDataPool","formControlName","useDataPool",1,"custom-control-input",3,"change"],["for","useDataPool",1,"custom-control-label"],i,[4,"ngIf"],["for","size",1,"cd-col-form-label","required"],_,["id","size","name","size","type","text","formControlName","size","placeholder",r,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["formGroupName","features",1,"form-group","row"],["for","features",1,"cd-col-form-label"],c,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["type","checkbox","id","mirroring","name","mirroring","formControlName","mirroring",1,"custom-control-input",3,"change"],["for","mirroring",1,"custom-control-label"],[1,"row"],[1,"col-sm-12"],["class","float-right margin-right-md","href","",3,"click",4,"ngIf"],[3,"hidden"],[1,"cd-header"],d,[1,"col-md-12"],g,["for","size",1,"cd-col-form-label"],f,["id","obj_size","name","obj_size","formControlName","obj_size",1,"form-control"],[3,"value",4,"ngFor","ngForOf"],["for","stripingUnit",1,"cd-col-form-label",3,"ngClass"],I,["id","stripingUnit","name","stripingUnit","formControlName","stripingUnit",1,"form-control"],[3,"ngValue"],P,["for","stripingCount",1,"cd-col-form-label",3,"ngClass"],Z,["id","stripingCount","name","stripingCount","formControlName","stripingCount","type","number",1,"form-control"],[3,"form","initializeData","changes"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["for","name",1,"cd-col-form-label"],B,["type","text","id","parent","name","parent","formControlName","parent",1,"form-control"],[1,"invalid-feedback"],Q,Y,["type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",1,"form-control"],["id","pool","name","pool","formControlName","pool",1,"form-control",3,"change"],[3,"ngValue",4,"ngIf"],ee,te,w,[3,"value"],_e,[3,"ngClass"],["for","pool",1,"cd-col-form-label"],["class","form-control","type","text","placeholder","Namespace...","id","namespace","name","namespace","formControlName","namespace",4,"ngIf"],["id","namespace","name","namespace","class","form-control","formControlName","namespace",4,"ngIf"],["type","text","placeholder","Namespace...","id","namespace","name","namespace","formControlName","namespace",1,"form-control"],["id","namespace","name","namespace","formControlName","namespace",1,"form-control"],ae,M,ge,ue,["for","dataPool",1,"cd-col-form-label"],me,["html",Te],["class","form-control","type","text","placeholder","Data pool name...","id","dataPool","name","dataPool","formControlName","dataPool",4,"ngIf"],["id","dataPool","name","dataPool","class","form-control","formControlName","dataPool",3,"change",4,"ngIf"],["type","text","placeholder","Data pool name...","id","dataPool","name","dataPool","formControlName","dataPool",1,"form-control"],["id","dataPool","name","dataPool","formControlName","dataPool",1,"form-control",3,"change"],fe,Ce,G,Be,Ge,["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],[3,"html",4,"ngIf"],[3,"html"],xe,[3,"routerLink"],["class","custom-control custom-radio ml-2",4,"ngFor","ngForOf"],[1,"custom-control","custom-radio","ml-2"],["type","radio","name","mirroringMode","formControlName","mirroringMode",1,"custom-control-input",3,"id","value","change"],ye,[1,"cd-col-form-label"],qe,["html",we],["id","schedule","name","schedule","type","text","formControlName","schedule","placeholder",He,1,"form-control"],["href","",1,"float-right","margin-right-md",3,"click"],ke,Ke,Xe,Qe,ze]},template:function(t,o){1&t&&e.YNc(0,o_,95,49,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[pt.y,a._Y,a.JL,a.sg,h.V,l.O5,O.P,$.o,a.Fj,k.b,a.JJ,a.u,Re.U,l.mk,a.Wl,ls.Q,a.x0,l.sg,cs.S,a.EJ,a.YN,a.Kr,a.wV,ds.d,j.p,m.yS,a._],pipes:[l.rS,et.m],styles:[""]}),n})();var bt=p(71225),Nt=p(36169);let n_=(()=>{class n{constructor(){}static getCount(t){var o;return Number(null===(o=t.headers)||void 0===o?void 0:o.get("X-Total-Count"))}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var at=p(51847),i_=p(16738),Me=p.n(i_),rt=p(62862),s_=p(52266);function __(n,s){1&n&&(e.TgZ(0,"div",18),e.TgZ(1,"span"),e.SDv(2,19),e.qZA(),e.qZA())}function a_(n,s){1&n&&(e.TgZ(0,"span",20),e.SDv(1,21),e.qZA())}function r_(n,s){1&n&&(e.TgZ(0,"span",20),e.SDv(1,22),e.qZA())}function l_(n,s){if(1&n&&e._UZ(0,"cd-date-time-picker",23),2&n){const t=e.oxw();e.Q6J("control",t.moveForm.get("expiresAt"))}}let c_=(()=>{class n{constructor(t,o,i,_,r){this.rbdService=t,this.activeModal=o,this.actionLabels=i,this.fb=_,this.taskWrapper=r,this.createForm()}createForm(){this.moveForm=this.fb.group({expiresAt:["",[z.h.custom("format",t=>!(""===t||Me()(t,"YYYY-MM-DD HH:mm:ss").isValid())),z.h.custom("expired",t=>Me()().isAfter(t))]]})}ngOnInit(){this.imageSpec=new L.N(this.poolName,this.namespace,this.imageName),this.imageSpecStr=this.imageSpec.toString(),this.pattern=`${this.poolName}/${this.imageName}`}moveImage(){let t=0;const o=this.moveForm.getValue("expiresAt");o&&(t=Me()(o,"YYYY-MM-DD HH:mm:ss").diff(Me()(),"seconds",!0)),t<0&&(t=0),this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/trash/move",{image_spec:this.imageSpecStr}),call:this.rbdService.moveTrash(this.imageSpec,t)}).subscribe({complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(q),e.Y36(N.Kz),e.Y36(v.p4),e.Y36(rt.O),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-move-modal"]],decls:23,vars:9,consts:function(){let s,t,o,i,_,r,c;return s="Move an image to trash",t="To move " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd0\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + " to trash, click " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Move" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ". Optionally, you can pick an expiration date.",t=e.Zx4(t),o="Protection expires at",i="NOT PROTECTED",_="This image contains snapshot(s), which will prevent it from being removed after moved to trash.",r="Wrong date format. Please use \"YYYY-MM-DD HH:mm:ss\".",c="Protection has already expired. Please pick a future date or leave it empty.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","moveForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],["class","alert alert-warning","role","alert",4,"ngIf"],t,[1,"form-group"],["for","expiresAt",1,"col-form-label"],o,["type","text","placeholder",i,"formControlName","expiresAt","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["p","ngbPopover"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["popContent",""],["role","alert",1,"alert","alert-warning"],_,[1,"invalid-feedback"],r,c,[3,"control"]]},template:function(t,o){if(1&t){const i=e.EpF();e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.YNc(7,__,3,0,"div",7),e.TgZ(8,"p"),e.tHW(9,8),e._UZ(10,"kbd"),e._UZ(11,"kbd"),e.N_p(),e.qZA(),e.TgZ(12,"div",9),e.TgZ(13,"label",10),e.SDv(14,11),e.qZA(),e.TgZ(15,"input",12,13),e.NdJ("click",function(){return e.CHM(i),e.MAs(16).open()})("keypress",function(){return e.CHM(i),e.MAs(16).close()}),e.qZA(),e.YNc(17,a_,2,0,"span",14),e.YNc(18,r_,2,0,"span",14),e.qZA(),e.qZA(),e.TgZ(19,"div",15),e.TgZ(20,"cd-form-button-panel",16),e.NdJ("submitActionEvent",function(){return o.moveImage()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA(),e.YNc(21,l_,1,1,"ng-template",null,17,e.W1O)}if(2&t){const i=e.MAs(5),_=e.MAs(22);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.moveForm),e.xp6(3),e.Q6J("ngIf",o.hasSnapshots),e.xp6(4),e.pQV(o.imageSpecStr),e.QtT(9),e.xp6(4),e.Q6J("ngbPopover",_),e.xp6(2),e.Q6J("ngIf",o.moveForm.showError("expiresAt",i,"format")),e.xp6(1),e.Q6J("ngIf",o.moveForm.showError("expiresAt",i,"expired")),e.xp6(2),e.Q6J("form",o.moveForm)("submitText",o.actionLabels.MOVE)}},directives:[C.z,a._Y,a.JL,a.sg,h.V,l.O5,O.P,$.o,a.Fj,k.b,a.JJ,a.u,N.o8,j.p,s_.J],styles:[""]}),n})();function d_(n,s){1&n&&(e.TgZ(0,"li",10),e.TgZ(1,"a",3),e.SDv(2,11),e.qZA(),e.qZA())}let We=(()=>{class n{constructor(t,o){this.authStorageService=t,this.router=o,this.grafanaPermission=this.authStorageService.getPermissions().grafana}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(m.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-tabs"]],decls:12,vars:2,consts:function(){let s,t,o,i;return s="Images",t="Namespaces",o="Trash",i="Overall Performance",[["ngbNav","",1,"nav-tabs",3,"activeId","navChange"],["nav","ngbNav"],["ngbNavItem","/block/rbd"],["ngbNavLink",""],s,["ngbNavItem","/block/rbd/namespaces"],t,["ngbNavItem","/block/rbd/trash"],o,["ngbNavItem","/block/rbd/performance",4,"ngIf"],["ngbNavItem","/block/rbd/performance"],i]},template:function(t,o){1&t&&(e.TgZ(0,"ul",0,1),e.NdJ("navChange",function(_){return o.router.navigate([_.nextId])}),e.TgZ(2,"li",2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.qZA(),e.TgZ(5,"li",5),e.TgZ(6,"a",3),e.SDv(7,6),e.qZA(),e.qZA(),e.TgZ(8,"li",7),e.TgZ(9,"a",3),e.SDv(10,8),e.qZA(),e.qZA(),e.YNc(11,d_,3,0,"li",9),e.qZA()),2&t&&(e.Q6J("activeId",o.router.url),e.xp6(11),e.Q6J("ngIf",o.grafanaPermission.read))},directives:[N.Pz,N.nv,N.Vx,l.O5],styles:[""]}),n})();var p_=p(25917),Ft=p(51295),lt=p(60737),g_=p(74255),Dt=p(71099),vt=p(79765);function u_(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,17),e.qZA())}function m_(n,s){if(1&n&&(e.TgZ(0,"span"),e.tHW(1,18),e._UZ(2,"b"),e.N_p(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.imageName),e.QtT(1)}}let T_=(()=>{class n{constructor(t,o,i,_,r){this.activeModal=t,this.rbdService=o,this.taskManagerService=i,this.notificationService=_,this.actionLabels=r,this.editing=!1,this.onSubmit=new vt.xQ,this.action=this.actionLabels.CREATE,this.resource="RBD Snapshot",this.createForm()}createForm(){this.snapshotForm=new y.d({snapshotName:new a.NI("",{validators:[a.kI.required]})})}setSnapName(t){this.snapName=t,"snapshot"!==this.mirroring?this.snapshotForm.get("snapshotName").setValue(t):this.snapshotForm.get("snapshotName").clearValidators()}setEditing(t=!0){this.editing=t,this.action=this.editing?this.actionLabels.RENAME:this.actionLabels.CREATE}editAction(){const t=this.snapshotForm.getValue("snapshotName"),o=new L.N(this.poolName,this.namespace,this.imageName),i=new R.R;i.name="rbd/snap/edit",i.metadata={image_spec:o.toString(),snapshot_name:t},this.rbdService.renameSnapshot(o,this.snapName,t).toPromise().then(()=>{this.taskManagerService.subscribe(i.name,i.metadata,_=>{this.notificationService.notifyTask(_)}),this.activeModal.close(),this.onSubmit.next(this.snapName)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}createAction(){const t=this.snapshotForm.getValue("snapshotName"),o=new L.N(this.poolName,this.namespace,this.imageName),i=new R.R;i.name="rbd/snap/create",i.metadata={image_spec:o.toString(),snapshot_name:t},this.rbdService.createSnapshot(o,t).toPromise().then(()=>{this.taskManagerService.subscribe(i.name,i.metadata,_=>{this.notificationService.notifyTask(_)}),this.activeModal.close(),this.onSubmit.next(t)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}submit(){this.editing?this.editAction():this.createAction()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(q),e.Y36(Dt.k),e.Y36(ve.g),e.Y36(v.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-snapshot-form-modal"]],decls:22,vars:17,consts:function(){let s,t,o,i;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Name",o="This field is required.",i="Snapshot mode is enabled on image " + "\ufffd#2\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#2\ufffd" + ": snapshot names are auto generated",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","snapshotForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","snapshotName",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["type","text","placeholder","Snapshot name...","id","snapshotName","name","snapshotName","formControlName","snapshotName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],o,i]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5),e.TgZ(8,"div",6),e.TgZ(9,"div",7),e.TgZ(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,u_,2,0,"span",12),e._UZ(15,"br"),e._UZ(16,"br"),e.YNc(17,m_,3,1,"span",13),e.qZA(),e.qZA(),e.qZA(),e.TgZ(18,"div",14),e.TgZ(19,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(20,"titlecase"),e.ALo(21,"upperFirst"),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,9,o.action))(e.lcZ(4,11,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.snapshotForm),e.xp6(7),e.uIk("disabled","snapshot"===o.mirroring||null),e.xp6(1),e.Q6J("ngIf",o.snapshotForm.showError("snapshotName",i,"required")),e.xp6(3),e.Q6J("ngIf","snapshot"===o.mirroring),e.xp6(2),e.Q6J("form",o.snapshotForm)("submitText",e.lcZ(20,13,o.action)+" "+e.lcZ(21,15,o.resource))}},directives:[C.z,a._Y,a.JL,a.sg,h.V,O.P,$.o,a.Fj,k.b,a.JJ,a.u,Re.U,l.O5,j.p],pipes:[l.rS,et.m],styles:[""]}),n})();class f_{constructor(s,t,o){this.featuresName=t,this.cloneFormatVersion=1,o.cloneFormatVersion().subscribe(i=>{this.cloneFormatVersion=i}),this.create={permission:"create",icon:T.P.add,name:s.CREATE},this.rename={permission:"update",icon:T.P.edit,name:s.RENAME,disable:i=>this.disableForMirrorSnapshot(i)},this.protect={permission:"update",icon:T.P.lock,visible:i=>i.hasSingleSelection&&!i.first().is_protected,name:s.PROTECT,disable:i=>this.disableForMirrorSnapshot(i)},this.unprotect={permission:"update",icon:T.P.unlock,visible:i=>i.hasSingleSelection&&i.first().is_protected,name:s.UNPROTECT,disable:i=>this.disableForMirrorSnapshot(i)},this.clone={permission:"create",canBePrimary:i=>i.hasSingleSelection,disable:i=>this.getCloneDisableDesc(i,this.featuresName)||this.disableForMirrorSnapshot(i),icon:T.P.clone,name:s.CLONE},this.copy={permission:"create",canBePrimary:i=>i.hasSingleSelection,disable:i=>!i.hasSingleSelection||i.first().cdExecuting||this.disableForMirrorSnapshot(i),icon:T.P.copy,name:s.COPY},this.rollback={permission:"update",icon:T.P.undo,name:s.ROLLBACK,disable:i=>this.disableForMirrorSnapshot(i)},this.deleteSnap={permission:"delete",icon:T.P.destroy,disable:i=>{const _=i.first();return!i.hasSingleSelection||_.cdExecuting||_.is_protected||this.disableForMirrorSnapshot(i)},name:s.DELETE},this.ordering=[this.create,this.rename,this.protect,this.unprotect,this.clone,this.copy,this.rollback,this.deleteSnap]}getCloneDisableDesc(s,t){return!(s.hasSingleSelection&&!s.first().cdExecuting)||((null==t?void 0:t.includes("layering"))?1===this.cloneFormatVersion&&!s.first().is_protected&&"Snapshot must be protected in order to clone.":"Parent image must support Layering")}disableForMirrorSnapshot(s){return s.hasSingleSelection&&"snapshot"===s.first().mirror_mode&&s.first().name.includes(".mirror.")}}class C_{}var Ze=p(96102);const S_=["nameTpl"],E_=["rollbackTpl"];function R_(n,s){if(1&n&&(e.ynx(0),e.SDv(1,3),e.BQk(),e.TgZ(2,"strong"),e._uU(3),e.qZA(),e._uU(4,".\n")),2&n){const t=s.$implicit;e.xp6(3),e.hij(" ",t.snapName,"")}}let M_=(()=>{class n{constructor(t,o,i,_,r,c,d,g,f,I,P){this.authStorageService=t,this.modalService=o,this.dimlessBinaryPipe=i,this.cdDatePipe=_,this.rbdService=r,this.taskManagerService=c,this.notificationService=d,this.summaryService=g,this.taskListService=f,this.actionLabels=I,this.cdr=P,this.snapshots=[],this.selection=new Se.r,this.builders={"rbd/snap/create":Z=>{const B=new C_;return B.name=Z.snapshot_name,B}},this.permission=this.authStorageService.getPermissions().rbdImage}ngOnInit(){this.columns=[{name:"Name",prop:"name",cellTransformation:De.e.executing,flexGrow:2},{name:"Size",prop:"size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:"Provisioned",prop:"disk_usage",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:"State",prop:"is_protected",flexGrow:1,cellTransformation:De.e.badge,customTemplateConfig:{map:{true:{value:"PROTECTED",class:"badge-success"},false:{value:"UNPROTECTED",class:"badge-info"}}}},{name:"Created",prop:"timestamp",flexGrow:1,pipe:this.cdDatePipe}],this.imageSpec=new L.N(this.poolName,this.namespace,this.rbdName),this.rbdTableActions=new f_(this.actionLabels,this.featuresName,this.rbdService),this.rbdTableActions.create.click=()=>this.openCreateSnapshotModal(),this.rbdTableActions.rename.click=()=>this.openEditSnapshotModal(),this.rbdTableActions.protect.click=()=>this.toggleProtection(),this.rbdTableActions.unprotect.click=()=>this.toggleProtection();const t=()=>this.selection.first()&&`${this.imageSpec.toStringEncoded()}/${encodeURIComponent(this.selection.first().name)}`;this.rbdTableActions.clone.routerLink=()=>`/block/rbd/clone/${t()}`,this.rbdTableActions.copy.routerLink=()=>`/block/rbd/copy/${t()}`,this.rbdTableActions.rollback.click=()=>this.rollbackModal(),this.rbdTableActions.deleteSnap.click=()=>this.deleteSnapshotModal(),this.tableActions=this.rbdTableActions.ordering,this.taskListService.init(()=>(0,p_.of)(this.snapshots),null,_=>{Ft.T.updateChanged(this,{data:_})&&(this.cdr.detectChanges(),this.data=[...this.data])},()=>{Ft.T.updateChanged(this,{data:this.snapshots})&&(this.cdr.detectChanges(),this.data=[...this.data])},_=>["rbd/snap/create","rbd/snap/delete","rbd/snap/edit","rbd/snap/rollback"].includes(_.name)&&this.imageSpec.toString()===_.metadata.image_spec,(_,r)=>_.name===r.metadata.snapshot_name,this.builders)}ngOnChanges(){this.columns&&(this.imageSpec=new L.N(this.poolName,this.namespace,this.rbdName),this.rbdTableActions&&(this.rbdTableActions.featuresName=this.featuresName),this.taskListService.fetch())}openSnapshotModal(t,o=null){this.modalRef=this.modalService.show(T_,{mirroring:this.mirroring}),this.modalRef.componentInstance.poolName=this.poolName,this.modalRef.componentInstance.imageName=this.rbdName,this.modalRef.componentInstance.namespace=this.namespace,o?this.modalRef.componentInstance.setEditing():o=`${this.rbdName}_${Me()().toISOString(!0)}`,this.modalRef.componentInstance.setSnapName(o),this.modalRef.componentInstance.onSubmit.subscribe(_=>{const r=new lt.o;r.name=t,r.metadata={image_spec:this.imageSpec.toString(),snapshot_name:_},this.summaryService.addRunningTask(r)})}openCreateSnapshotModal(){this.openSnapshotModal("rbd/snap/create")}openEditSnapshotModal(){this.openSnapshotModal("rbd/snap/edit",this.selection.first().name)}toggleProtection(){const t=this.selection.first().name,o=this.selection.first().is_protected,i=new R.R;i.name="rbd/snap/edit";const _=new L.N(this.poolName,this.namespace,this.rbdName);i.metadata={image_spec:_.toString(),snapshot_name:t},this.rbdService.protectSnapshot(_,t,!o).toPromise().then(()=>{const r=new lt.o;r.name=i.name,r.metadata=i.metadata,this.summaryService.addRunningTask(r),this.taskManagerService.subscribe(i.name,i.metadata,c=>{this.notificationService.notifyTask(c)})})}_asyncTask(t,o,i){const _=new R.R;_.name=o,_.metadata={image_spec:new L.N(this.poolName,this.namespace,this.rbdName).toString(),snapshot_name:i};const r=new L.N(this.poolName,this.namespace,this.rbdName);this.rbdService[t](r,i).toPromise().then(()=>{const c=new lt.o;c.name=_.name,c.metadata=_.metadata,this.summaryService.addRunningTask(c),this.modalRef.close(),this.taskManagerService.subscribe(c.name,c.metadata,d=>{this.notificationService.notifyTask(d)})}).catch(()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}rollbackModal(){const t=this.selection.selected[0].name,o=new L.N(this.poolName,this.namespace,this.rbdName).toString(),i={titleText:"RBD snapshot rollback",buttonText:"Rollback",bodyTpl:this.rollbackTpl,bodyData:{snapName:`${o}@${t}`},onSubmit:()=>{this._asyncTask("rollbackSnapshot","rbd/snap/rollback",t)}};this.modalRef=this.modalService.show(Nt.Y,i)}deleteSnapshotModal(){const t=this.selection.selected[0].name;this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD snapshot",itemNames:[t],submitAction:()=>this._asyncTask("deleteSnapshot","rbd/snap/delete",t)})}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(de.Z),e.Y36(Le.$),e.Y36(Ze.N),e.Y36(q),e.Y36(Dt.k),e.Y36(ve.g),e.Y36(g_.J),e.Y36(ce.j),e.Y36(v.p4),e.Y36(e.sBO))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-snapshot-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(S_,5),e.Gf(E_,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.nameTpl=i.first),e.iGM(i=e.CRH())&&(o.rollbackTpl=i.first)}},inputs:{snapshots:"snapshots",featuresName:"featuresName",poolName:"poolName",namespace:"namespace",mirroring:"mirroring",rbdName:"rbdName"},features:[e._Bn([ce.j]),e.TTD],decls:4,vars:5,consts:function(){let s;return s="You are about to rollback",[["columnMode","flex","selectionType","single",3,"data","columns","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["rollbackTpl",""],s]},template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA(),e.YNc(2,R_,5,1,"ng-template",null,2,e.W1O)),2&t&&(e.Q6J("data",o.data)("columns",o.columns),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[W.a,Ee.K],styles:[""],changeDetection:0}),n})();var O_=p(71752),Lt=p(76317),A_=p(41039);const h_=["poolConfigurationSourceTpl"];function P_(n,s){1&n&&(e.ynx(0),e.tHW(1,3),e._UZ(2,"strong"),e.N_p(),e.BQk())}function I_(n,s){if(1&n&&(e.TgZ(0,"span"),e.TgZ(1,"span",38),e._uU(2),e.qZA(),e.qZA()),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t)}}function b_(n,s){if(1&n&&(e.TgZ(0,"span"),e.TgZ(1,"span",39),e.SDv(2,40),e.qZA(),e.qZA()),2&n){e.oxw(3);const t=e.MAs(1);e.xp6(1),e.Q6J("ngbTooltip",t)}}function N_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.selection.disk_usage)," ")}}function F_(n,s){if(1&n&&(e.TgZ(0,"span"),e.TgZ(1,"span",39),e.SDv(2,41),e.qZA(),e.qZA()),2&n){e.oxw(3);const t=e.MAs(1);e.xp6(1),e.Q6J("ngbTooltip",t)}}function D_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.selection.total_disk_usage)," ")}}function v_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.hij("/",t.selection.parent.pool_namespace,"")}}function L_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,v_,2,1,"span",1),e._uU(3),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Oqu(t.selection.parent.pool_name),e.xp6(1),e.Q6J("ngIf",t.selection.parent.pool_namespace),e.xp6(1),e.AsE("/",t.selection.parent.image_name,"@",t.selection.parent.snap_name,"")}}function $_(n,s){1&n&&(e.TgZ(0,"span"),e._uU(1,"-"),e.qZA())}function Z_(n,s){if(1&n&&(e.TgZ(0,"table",17),e.TgZ(1,"tbody"),e.TgZ(2,"tr"),e.TgZ(3,"td",18),e.SDv(4,19),e.qZA(),e.TgZ(5,"td",20),e._uU(6),e.qZA(),e.qZA(),e.TgZ(7,"tr"),e.TgZ(8,"td",21),e.SDv(9,22),e.qZA(),e.TgZ(10,"td"),e._uU(11),e.qZA(),e.qZA(),e.TgZ(12,"tr"),e.TgZ(13,"td",21),e.SDv(14,23),e.qZA(),e.TgZ(15,"td"),e._uU(16),e.ALo(17,"empty"),e.qZA(),e.qZA(),e.TgZ(18,"tr"),e.TgZ(19,"td",21),e.SDv(20,24),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.ALo(23,"cdDate"),e.qZA(),e.qZA(),e.TgZ(24,"tr"),e.TgZ(25,"td",21),e.SDv(26,25),e.qZA(),e.TgZ(27,"td"),e._uU(28),e.ALo(29,"dimlessBinary"),e.qZA(),e.qZA(),e.TgZ(30,"tr"),e.TgZ(31,"td",21),e.SDv(32,26),e.qZA(),e.TgZ(33,"td"),e._uU(34),e.ALo(35,"dimless"),e.qZA(),e.qZA(),e.TgZ(36,"tr"),e.TgZ(37,"td",21),e.SDv(38,27),e.qZA(),e.TgZ(39,"td"),e._uU(40),e.ALo(41,"dimlessBinary"),e.qZA(),e.qZA(),e.TgZ(42,"tr"),e.TgZ(43,"td",21),e.SDv(44,28),e.qZA(),e.TgZ(45,"td"),e.YNc(46,I_,3,1,"span",29),e.qZA(),e.qZA(),e.TgZ(47,"tr"),e.TgZ(48,"td",21),e.SDv(49,30),e.qZA(),e.TgZ(50,"td"),e.YNc(51,b_,3,1,"span",1),e.YNc(52,N_,3,3,"span",1),e.qZA(),e.qZA(),e.TgZ(53,"tr"),e.TgZ(54,"td",21),e.SDv(55,31),e.qZA(),e.TgZ(56,"td"),e.YNc(57,F_,3,1,"span",1),e.YNc(58,D_,3,3,"span",1),e.qZA(),e.qZA(),e.TgZ(59,"tr"),e.TgZ(60,"td",21),e.SDv(61,32),e.qZA(),e.TgZ(62,"td"),e._uU(63),e.ALo(64,"dimlessBinary"),e.qZA(),e.qZA(),e.TgZ(65,"tr"),e.TgZ(66,"td",21),e.SDv(67,33),e.qZA(),e.TgZ(68,"td"),e._uU(69),e.qZA(),e.qZA(),e.TgZ(70,"tr"),e.TgZ(71,"td",21),e.SDv(72,34),e.qZA(),e.TgZ(73,"td"),e.YNc(74,L_,4,4,"span",1),e.YNc(75,$_,2,0,"span",1),e.qZA(),e.qZA(),e.TgZ(76,"tr"),e.TgZ(77,"td",21),e.SDv(78,35),e.qZA(),e.TgZ(79,"td"),e._uU(80),e.qZA(),e.qZA(),e.TgZ(81,"tr"),e.TgZ(82,"td",21),e.SDv(83,36),e.qZA(),e.TgZ(84,"td"),e._uU(85),e.qZA(),e.qZA(),e.TgZ(86,"tr"),e.TgZ(87,"td",21),e.SDv(88,37),e.qZA(),e.TgZ(89,"td"),e._uU(90),e.qZA(),e.qZA(),e.qZA(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(6),e.Oqu(t.selection.name),e.xp6(5),e.Oqu(t.selection.pool_name),e.xp6(5),e.Oqu(e.lcZ(17,19,t.selection.data_pool)),e.xp6(6),e.Oqu(e.lcZ(23,21,t.selection.timestamp)),e.xp6(6),e.Oqu(e.lcZ(29,23,t.selection.size)),e.xp6(6),e.Oqu(e.lcZ(35,25,t.selection.num_objs)),e.xp6(6),e.Oqu(e.lcZ(41,27,t.selection.obj_size)),e.xp6(6),e.Q6J("ngForOf",t.selection.features_name),e.xp6(5),e.Q6J("ngIf",-1===(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(1),e.Q6J("ngIf",-1!==(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(5),e.Q6J("ngIf",-1===(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(1),e.Q6J("ngIf",-1!==(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(5),e.Oqu(e.lcZ(64,29,t.selection.stripe_unit)),e.xp6(6),e.Oqu(t.selection.stripe_count),e.xp6(5),e.Q6J("ngIf",t.selection.parent),e.xp6(1),e.Q6J("ngIf",!t.selection.parent),e.xp6(5),e.Oqu(t.selection.block_name_prefix),e.xp6(5),e.Oqu(t.selection.order),e.xp6(5),e.Oqu(t.selection.image_format)}}function B_(n,s){if(1&n&&e._UZ(0,"cd-rbd-snapshot-list",42),2&n){const t=e.oxw(2);e.Q6J("snapshots",t.selection.snapshots)("featuresName",t.selection.features_name)("poolName",t.selection.pool_name)("namespace",t.selection.namespace)("mirroring",t.selection.mirror_mode)("rbdName",t.selection.name)}}function G_(n,s){if(1&n&&e._UZ(0,"cd-rbd-configuration-table",43),2&n){const t=e.oxw(2);e.Q6J("data",t.selection.configuration)}}function x_(n,s){if(1&n&&e._UZ(0,"cd-grafana",44),2&n){const t=e.oxw(2);e.Q6J("grafanaPath",t.rbdDashboardUrl)}}function y_(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"ul",4,5),e.TgZ(3,"li",6),e.TgZ(4,"a",7),e.SDv(5,8),e.qZA(),e.YNc(6,Z_,91,31,"ng-template",9),e.qZA(),e.TgZ(7,"li",10),e.TgZ(8,"a",7),e.SDv(9,11),e.qZA(),e.YNc(10,B_,1,6,"ng-template",9),e.qZA(),e.TgZ(11,"li",12),e.TgZ(12,"a",7),e.SDv(13,13),e.qZA(),e.YNc(14,G_,1,1,"ng-template",9),e.qZA(),e.TgZ(15,"li",14),e.TgZ(16,"a",7),e.SDv(17,15),e.qZA(),e.YNc(18,x_,1,1,"ng-template",9),e.qZA(),e.qZA(),e._UZ(19,"div",16),e.BQk()),2&n){const t=e.MAs(2);e.xp6(19),e.Q6J("ngbNavOutlet",t)}}function w_(n,s){1&n&&(e.ynx(0),e.TgZ(1,"cd-alert-panel",45),e.SDv(2,46),e.qZA(),e.BQk())}function q_(n,s){1&n&&(e.ynx(0),e.TgZ(1,"strong",49),e.SDv(2,50),e.qZA(),e.BQk())}function H_(n,s){1&n&&(e.TgZ(0,"span",51),e.SDv(1,52),e.qZA())}function k_(n,s){if(1&n&&(e.YNc(0,q_,3,0,"ng-container",47),e.YNc(1,H_,2,0,"ng-template",null,48,e.W1O)),2&n){const t=s.value,o=e.MAs(2);e.Q6J("ngIf",+t)("ngIfElse",o)}}let K_=(()=>{class n{ngOnChanges(){this.selection&&(this.rbdDashboardUrl=`rbd-details?var-Pool=${this.selection.pool_name}&var-Image=${this.selection.name}`)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-details"]],viewQuery:function(t,o){if(1&t&&(e.Gf(h_,7),e.Gf(N.Pz,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.poolConfigurationSourceTpl=i.first),e.iGM(i=e.CRH())&&(o.nav=i.first)}},inputs:{selection:"selection",images:"images"},features:[e.TTD],decls:6,vars:2,consts:function(){let s,t,o,i,_,r,c,d,g,f,I,P,Z,B,Q,Y,ee,te,w,_e,ae,M,ge,ue,me,Te,fe,Ce;return s="Only available for RBD images with " + "\ufffd#2\ufffd" + "fast-diff" + "\ufffd/#2\ufffd" + " enabled",t="Details",o="Snapshots",i="Configuration",_="Performance",r="Name",c="Pool",d="Data Pool",g="Created",f="Size",I="Objects",P="Object size",Z="Features",B="Provisioned",Q="Total provisioned",Y="Striping unit",ee="Striping count",te="Parent",w="Block name prefix",_e="Order",ae="Format Version",M="N/A",ge="N/A",ue="Information can not be displayed for RBD in status 'Removing'.",me="This setting overrides the global value",Te="Image",fe="This is the global value. No value for this option has been set for this image.",Ce="Global",[["usageNotAvailableTooltipTpl",""],[4,"ngIf"],["poolConfigurationSourceTpl",""],s,["ngbNav","","cdStatefulTab","rbd-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],t,["ngbNavContent",""],["ngbNavItem","snapshots"],o,["ngbNavItem","configuration"],i,["ngbNavItem","performance"],_,[3,"ngbNavOutlet"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],r,[1,"w-75"],[1,"bold"],c,d,g,f,I,P,Z,[4,"ngFor","ngForOf"],B,Q,Y,ee,te,w,_e,ae,[1,"badge","badge-dark","mr-2"],["placement","top",1,"form-text","text-muted",3,"ngbTooltip"],M,ge,[3,"snapshots","featuresName","poolName","namespace","mirroring","rbdName"],[3,"data"],["uid","YhCYGcuZz","grafanaStyle","one",3,"grafanaPath"],["type","warning"],ue,[4,"ngIf","ngIfElse"],["global",""],["ngbTooltip",me],Te,["ngbTooltip",fe],Ce]},template:function(t,o){1&t&&(e.YNc(0,P_,3,0,"ng-template",null,0,e.W1O),e.YNc(2,y_,20,1,"ng-container",1),e.YNc(3,w_,3,0,"ng-container",1),e.YNc(4,k_,3,2,"ng-template",null,2,e.W1O)),2&t&&(e.xp6(2),e.Q6J("ngIf",o.selection&&"REMOVING"!==o.selection.source),e.xp6(1),e.Q6J("ngIf",o.selection&&"REMOVING"===o.selection.source))},directives:[l.O5,N.Pz,Mt.m,N.nv,N.Vx,N.uN,N.tO,l.sg,N._L,M_,O_.P,Lt.F,Ct.G],pipes:[A_.W,Ze.N,Le.$,ot.n],styles:[""]}),n})();const X_=["usageTpl"],Q_=["parentTpl"],z_=["nameTpl"],J_=["mirroringTpl"],Y_=["flattenTpl"],V_=["deleteTpl"],U_=["removingStatTpl"],j_=["provisionedNotAvailableTooltipTpl"],W_=["totalProvisionedNotAvailableTooltipTpl"];function ea(n,s){1&n&&e._UZ(0,"div",12),2&n&&e.Q6J("innerHtml","Only available for RBD images with fast-diff enabled",e.oJD)}function ta(n,s){if(1&n&&(e.TgZ(0,"span",15),e.SDv(1,16),e.qZA()),2&n){const t=e.oxw(2);e.Q6J("ngbTooltip",t.usageNotAvailableTooltipTpl)}}function oa(n,s){if(1&n&&(e.SDv(0,17),e.ALo(1,"dimlessBinary")),2&n){const t=e.oxw().row;e.xp6(1),e.pQV(e.lcZ(1,1,t.disk_usage)),e.QtT(0)}}function na(n,s){if(1&n&&(e.YNc(0,ta,2,1,"span",13),e.YNc(1,oa,2,3,"ng-template",null,14,e.W1O)),2&n){const t=s.row,o=e.MAs(2);e.Q6J("ngIf",null===t.disk_usage&&!t.features_name.includes("fast-diff"))("ngIfElse",o)}}function ia(n,s){if(1&n&&(e.TgZ(0,"span",15),e.SDv(1,19),e.qZA()),2&n){const t=e.oxw(2);e.Q6J("ngbTooltip",t.usageNotAvailableTooltipTpl)}}function sa(n,s){if(1&n&&(e.SDv(0,20),e.ALo(1,"dimlessBinary")),2&n){const t=e.oxw().row;e.xp6(1),e.pQV(e.lcZ(1,1,t.total_disk_usage)),e.QtT(0)}}function _a(n,s){if(1&n&&(e.YNc(0,ia,2,1,"span",13),e.YNc(1,sa,2,3,"ng-template",null,18,e.W1O)),2&n){const t=s.row,o=e.MAs(2);e.Q6J("ngIf",null===t.total_disk_usage&&!t.features_name.includes("fast-diff"))("ngIfElse",o)}}function aa(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).value;e.xp6(1),e.hij("/",t.pool_namespace,"")}}function ra(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,aa,2,1,"span",21),e._uU(3),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t.pool_name),e.xp6(1),e.Q6J("ngIf",t.pool_namespace),e.xp6(1),e.AsE("/",t.image_name,"@",t.snap_name,"")}}function la(n,s){1&n&&(e.TgZ(0,"span"),e._uU(1,"-"),e.qZA())}function ca(n,s){if(1&n&&(e.YNc(0,ra,4,4,"span",21),e.YNc(1,la,2,0,"span",21)),2&n){const t=s.value;e.Q6J("ngIf",t),e.xp6(1),e.Q6J("ngIf",!t)}}function da(n,s){if(1&n&&(e.TgZ(0,"span",26),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t[0])}}function pa(n,s){if(1&n&&(e.TgZ(0,"span",27),e.ALo(1,"cdDate"),e._uU(2),e.qZA()),2&n){const t=e.oxw().value;e.Q6J("ngbTooltip","Next scheduled snapshot on "+e.lcZ(1,2,t[2])),e.xp6(2),e.Oqu(t[1])}}function ga(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,28),e.qZA())}function ua(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,29),e.qZA())}function ma(n,s){if(1&n&&(e.TgZ(0,"span",26),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Ta(n,s){if(1&n&&(e.YNc(0,da,2,1,"span",22),e._uU(1,"\xa0 "),e.YNc(2,pa,3,4,"span",23),e.YNc(3,ga,2,0,"span",24),e.YNc(4,ua,2,0,"span",24),e.YNc(5,ma,2,1,"ng-template",null,25,e.W1O)),2&n){const t=s.value,o=s.row,i=e.MAs(6);e.Q6J("ngIf",3===t.length)("ngIfElse",i),e.xp6(2),e.Q6J("ngIf",3===t.length),e.xp6(1),e.Q6J("ngIf",!0===o.primary),e.xp6(1),e.Q6J("ngIf",!1===o.primary)}}function fa(n,s){if(1&n&&(e._uU(0," You are about to flatten "),e.TgZ(1,"strong"),e._uU(2),e.qZA(),e._uU(3,". "),e._UZ(4,"br"),e._UZ(5,"br"),e._uU(6," All blocks will be copied from parent "),e.TgZ(7,"strong"),e._uU(8),e.qZA(),e._uU(9," to child "),e.TgZ(10,"strong"),e._uU(11),e.qZA(),e._uU(12,".\n")),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t.child),e.xp6(6),e.Oqu(t.parent),e.xp6(3),e.Oqu(t.child)}}function Ca(n,s){if(1&n&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.Oqu(t)}}function Sa(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"span"),e.SDv(2,33),e.qZA(),e.TgZ(3,"ul"),e.YNc(4,Ca,2,1,"li",34),e.qZA(),e.BQk()),2&n){const t=e.oxw(2).snapshots;e.xp6(4),e.Q6J("ngForOf",t)}}function Ea(n,s){if(1&n&&(e.TgZ(0,"div",31),e.TgZ(1,"span"),e.SDv(2,32),e.qZA(),e._UZ(3,"br"),e.YNc(4,Sa,5,1,"ng-container",21),e.qZA()),2&n){const t=e.oxw().snapshots;e.xp6(4),e.Q6J("ngIf",t.length>0)}}function Ra(n,s){1&n&&e.YNc(0,Ea,5,1,"div",30),2&n&&e.Q6J("ngIf",s.hasSnapshots)}const Ma=function(n,s){return[n,s]};function Oa(n,s){if(1&n&&e._UZ(0,"i",36),2&n){const t=e.oxw(2);e.Q6J("ngClass",e.WLB(1,Ma,t.icons.spinner,t.icons.spin))}}function Aa(n,s){if(1&n&&(e.TgZ(0,"span",36),e._uU(1),e.qZA()),2&n){const t=e.oxw(),o=t.column,i=t.row;e.Q6J("ngClass",null!=o&&null!=o.customTemplateConfig&&o.customTemplateConfig.executingClass?o.customTemplateConfig.executingClass:"text-muted italic"),e.xp6(1),e.hij(" (",i.cdExecuting,") ")}}function ha(n,s){if(1&n&&e._UZ(0,"i",38),2&n){const t=e.oxw(2);e.Gre("",t.icons.warning," warn")}}function Pa(n,s){if(1&n&&(e.YNc(0,Oa,1,4,"i",35),e.TgZ(1,"span",36),e._uU(2),e.qZA(),e.YNc(3,Aa,2,2,"span",35),e.YNc(4,ha,1,3,"i",37)),2&n){const t=s.column,o=s.value,i=s.row;e.Q6J("ngIf",i.cdExecuting),e.xp6(1),e.Q6J("ngClass",null==t||null==t.customTemplateConfig?null:t.customTemplateConfig.valueClass),e.xp6(1),e.hij(" ",o," "),e.xp6(1),e.Q6J("ngIf",i.cdExecuting),e.xp6(1),e.Q6J("ngIf",i.source&&"REMOVING"===i.source)}}let ba=(()=>{class n extends mt.o{constructor(t,o,i,_,r,c,d,g,f){super(),this.authStorageService=t,this.rbdService=o,this.dimlessBinaryPipe=i,this.dimlessPipe=_,this.modalService=r,this.taskWrapper=c,this.taskListService=d,this.urlBuilder=g,this.actionLabels=f,this.tableStatus=new bt.c("light"),this.selection=new Se.r,this.icons=T.P,this.count=0,this.tableContext=null,this.builders={"rbd/create":M=>this.createRbdFromTask(M.pool_name,M.namespace,M.image_name),"rbd/delete":M=>this.createRbdFromTaskImageSpec(M.image_spec),"rbd/clone":M=>this.createRbdFromTask(M.child_pool_name,M.child_namespace,M.child_image_name),"rbd/copy":M=>this.createRbdFromTask(M.dest_pool_name,M.dest_namespace,M.dest_image_name)},this.permission=this.authStorageService.getPermissions().rbdImage;const I=()=>this.selection.first()&&new L.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name).toStringEncoded();this.tableActions=[{permission:"create",icon:T.P.add,routerLink:()=>this.urlBuilder.getCreate(),canBePrimary:M=>!M.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:T.P.edit,routerLink:()=>this.urlBuilder.getEdit(I()),name:this.actionLabels.EDIT,disable:M=>this.getRemovingStatusDesc(M)||this.getInvalidNameDisable(M)},{permission:"create",canBePrimary:M=>M.hasSingleSelection,disable:M=>this.getRemovingStatusDesc(M)||this.getInvalidNameDisable(M)||!!M.first().cdExecuting,icon:T.P.copy,routerLink:()=>`/block/rbd/copy/${I()}`,name:this.actionLabels.COPY},{permission:"update",disable:M=>this.getRemovingStatusDesc(M)||this.getInvalidNameDisable(M)||M.first().cdExecuting||!M.first().parent,icon:T.P.flatten,click:()=>this.flattenRbdModal(),name:this.actionLabels.FLATTEN},{permission:"update",icon:T.P.refresh,click:()=>this.resyncRbdModal(),name:this.actionLabels.RESYNC,disable:M=>this.getResyncDisableDesc(M)},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteRbdModal(),name:this.actionLabels.DELETE,disable:M=>this.getDeleteDisableDesc(M)},{permission:"delete",icon:T.P.trash,click:()=>this.trashRbdModal(),name:this.actionLabels.TRASH,disable:M=>this.getRemovingStatusDesc(M)||this.getInvalidNameDisable(M)||M.first().image_format===Pe.V1},{permission:"update",icon:T.P.edit,click:()=>this.removeSchedulingModal(),name:this.actionLabels.REMOVE_SCHEDULING,disable:M=>this.getRemovingStatusDesc(M)||this.getInvalidNameDisable(M)||void 0===M.first().schedule_info},{permission:"update",icon:T.P.edit,click:()=>this.actionPrimary(!0),name:this.actionLabels.PROMOTE,visible:()=>null!=this.selection.first()&&!this.selection.first().primary},{permission:"update",icon:T.P.edit,click:()=>this.actionPrimary(!1),name:this.actionLabels.DEMOTE,visible:()=>null!=this.selection.first()&&this.selection.first().primary}]}createRbdFromTaskImageSpec(t){const o=L.N.fromString(t);return this.createRbdFromTask(o.poolName,o.namespace,o.imageName)}createRbdFromTask(t,o,i){const _=new is;return _.id="-1",_.unique_id="-1",_.name=i,_.namespace=o,_.pool_name=t,_.image_format=Pe.V2,_}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:2,cellTemplate:this.removingStatTpl},{name:"Pool",prop:"pool_name",flexGrow:2},{name:"Namespace",prop:"namespace",flexGrow:2},{name:"Size",prop:"size",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessBinaryPipe},{name:"Objects",prop:"num_objs",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessPipe},{name:"Object size",prop:"obj_size",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessBinaryPipe},{name:"Provisioned",prop:"disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe,sortable:!1,cellTemplate:this.provisionedNotAvailableTooltipTpl},{name:"Total provisioned",prop:"total_disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe,sortable:!1,cellTemplate:this.totalProvisionedNotAvailableTooltipTpl},{name:"Parent",prop:"parent",flexGrow:2,sortable:!1,cellTemplate:this.parentTpl},{name:"Mirroring",prop:"mirror_mode",flexGrow:3,sortable:!1,cellTemplate:this.mirroringTpl}],this.taskListService.init(i=>this.getRbdImages(i),i=>this.prepareResponse(i),i=>this.images=i,()=>this.onFetchError(),i=>["rbd/clone","rbd/copy","rbd/create","rbd/delete","rbd/edit","rbd/flatten","rbd/trash/move"].includes(i.name),(i,_)=>{let r;switch(_.name){case"rbd/copy":r=new L.N(_.metadata.dest_pool_name,_.metadata.dest_namespace,_.metadata.dest_image_name).toString();break;case"rbd/clone":r=new L.N(_.metadata.child_pool_name,_.metadata.child_namespace,_.metadata.child_image_name).toString();break;case"rbd/create":r=new L.N(_.metadata.pool_name,_.metadata.namespace,_.metadata.image_name).toString();break;default:r=_.metadata.image_spec}return r===new L.N(i.pool_name,i.namespace,i.name).toString()},this.builders)}onFetchError(){this.table.reset(),this.tableStatus=new bt.c("danger")}getRbdImages(t){var o;return null!==t&&(this.tableContext=t),null==this.tableContext&&(this.tableContext=new A.E(()=>{})),this.rbdService.list(null===(o=this.tableContext)||void 0===o?void 0:o.toParams())}prepareResponse(t){let o=[];return t.forEach(i=>{o=o.concat(i.value)}),o.forEach(i=>{if(void 0!==i.schedule_info){let _=[];const r="scheduled";let c=+new Date(i.schedule_info.schedule_time);const d=(new Date).getTimezoneOffset();c+=6e4*Math.abs(d),_.push(i.mirror_mode,r,c),i.mirror_mode=_,_=[]}}),this.count=o.length>0?n_.getCount(t[0]):0,o}updateSelection(t){this.selection=t}deleteRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=new L.N(t,o,i);this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD",itemNames:[_],bodyTemplate:this.deleteTpl,bodyContext:{hasSnapshots:this.hasSnapshots(),snapshots:this.listProtectedSnapshots()},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/delete",{image_spec:_.toString()}),call:this.rbdService.delete(_)})})}resyncRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=new L.N(t,o,i);this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD",itemNames:[_],actionDescription:"resync",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/edit",{image_spec:_.toString()}),call:this.rbdService.update(_,{resync:!0})})})}trashRbdModal(){const t={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,hasSnapshots:this.hasSnapshots()};this.modalRef=this.modalService.show(c_,t)}flattenRbd(t){this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/flatten",{image_spec:t.toString()}),call:this.rbdService.flatten(t)}).subscribe({complete:()=>{this.modalRef.close()}})}flattenRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=this.selection.first().parent,r=new L.N(_.pool_name,_.pool_namespace,_.image_name),c=new L.N(t,o,i),d={titleText:"RBD flatten",buttonText:"Flatten",bodyTpl:this.flattenTpl,bodyData:{parent:`${r}@${_.snap_name}`,child:c.toString()},onSubmit:()=>{this.flattenRbd(c)}};this.modalRef=this.modalService.show(Nt.Y,d)}editRequest(){const t=new _t;return t.remove_scheduling=!t.remove_scheduling,t}removeSchedulingModal(){const t=this.selection.first().name,o=new L.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name);this.modalRef=this.modalService.show(pe.M,{actionDescription:"remove scheduling on",itemDescription:"image",itemNames:[`${t}`],submitActionObservable:()=>new Rt.y(i=>{this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/edit",{image_spec:o.toString()}),call:this.rbdService.update(o,this.editRequest())}).subscribe({error:_=>i.error(_),complete:()=>{this.modalRef.close()}})})})}actionPrimary(t){const o=new _t;o.primary=t,o.features=null;const i=new L.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name);this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/edit",{image_spec:i.toString()}),call:this.rbdService.update(i,o)}).subscribe()}hasSnapshots(){return(this.selection.first().snapshots||[]).length>0}hasClonedSnapshots(t){return(t.snapshots||[]).some(i=>i.children&&i.children.length>0)}listProtectedSnapshots(){return this.selection.first().snapshots.reduce((i,_)=>(_.is_protected&&i.push(_.name),i),[])}getDeleteDisableDesc(t){const o=t.first();return o&&this.hasClonedSnapshots(o)?"This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.":this.getInvalidNameDisable(t)||this.hasClonedSnapshots(t.first())}getResyncDisableDesc(t){const o=t.first();return o&&this.imageIsPrimary(o)?"Primary RBD images cannot be resynced":this.getInvalidNameDisable(t)}imageIsPrimary(t){return t.primary}getInvalidNameDisable(t){var o;const i=t.first();return(null===(o=null==i?void 0:i.name)||void 0===o?void 0:o.match(/[@/]/))?"This RBD image has an invalid name and can't be managed by ceph.":!t.first()||!t.hasSingleSelection}getRemovingStatusDesc(t){const o=t.first();return"REMOVING"===(null==o?void 0:o.source)&&"Action not possible for an RBD in status 'Removing'"}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(Le.$),e.Y36(ot.n),e.Y36(de.Z),e.Y36(u.P),e.Y36(ce.j),e.Y36(at.F),e.Y36(v.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(W.a,7),e.Gf(X_,5),e.Gf(Q_,7),e.Gf(z_,5),e.Gf(J_,7),e.Gf(Y_,7),e.Gf(V_,7),e.Gf(U_,7),e.Gf(j_,7),e.Gf(W_,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.usageTpl=i.first),e.iGM(i=e.CRH())&&(o.parentTpl=i.first),e.iGM(i=e.CRH())&&(o.nameTpl=i.first),e.iGM(i=e.CRH())&&(o.mirroringTpl=i.first),e.iGM(i=e.CRH())&&(o.flattenTpl=i.first),e.iGM(i=e.CRH())&&(o.deleteTpl=i.first),e.iGM(i=e.CRH())&&(o.removingStatTpl=i.first),e.iGM(i=e.CRH())&&(o.provisionedNotAvailableTooltipTpl=i.first),e.iGM(i=e.CRH())&&(o.totalProvisionedNotAvailableTooltipTpl=i.first)}},features:[e._Bn([ce.j,{provide:at.F,useValue:new at.F("block/rbd")}]),e.qOj],decls:21,vars:13,consts:function(){let s,t,o,i,_,r,c,d,g;return s="N/A",t="" + "\ufffd0\ufffd" + "",o="N/A",i="" + "\ufffd0\ufffd" + "",_="primary",r="secondary",c="Deleting this image will also delete all its snapshots.",d="The following snapshots are currently protected and will be removed:",g="RBD in status 'Removing'",[["columnMode","flex","identifier","unique_id","forceIdentifier","true","selectionType","single",3,"data","columns","searchableObjects","serverSide","count","hasDetails","status","maxLimit","autoReload","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["scheduleStatus",""],["provisionedNotAvailableTooltipTpl",""],["totalProvisionedNotAvailableTooltipTpl",""],["parentTpl",""],["mirroringTpl",""],["flattenTpl",""],["deleteTpl",""],["removingStatTpl",""],[3,"innerHtml"],["placement","top",3,"ngbTooltip",4,"ngIf","ngIfElse"],["provisioned",""],["placement","top",3,"ngbTooltip"],s,t,["totalProvisioned",""],o,i,[4,"ngIf"],["class","badge badge-info",4,"ngIf","ngIfElse"],["class","badge badge-info",3,"ngbTooltip",4,"ngIf"],["class","badge badge-info",4,"ngIf"],["probb",""],[1,"badge","badge-info"],[1,"badge","badge-info",3,"ngbTooltip"],_,r,["class","alert alert-warning","role","alert",4,"ngIf"],["role","alert",1,"alert","alert-warning"],c,d,[4,"ngFor","ngForOf"],[3,"ngClass",4,"ngIf"],[3,"ngClass"],["title",g,3,"class",4,"ngIf"],["title",g]]},template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0,1),e.NdJ("fetchData",function(_){return o.taskListService.fetch(_)})("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(3,"cd-table-actions",2),e._UZ(4,"cd-rbd-details",3),e.qZA(),e.YNc(5,ea,1,1,"ng-template",null,4,e.W1O),e.YNc(7,na,3,2,"ng-template",null,5,e.W1O),e.YNc(9,_a,3,2,"ng-template",null,6,e.W1O),e.YNc(11,ca,2,2,"ng-template",null,7,e.W1O),e.YNc(13,Ta,7,5,"ng-template",null,8,e.W1O),e.YNc(15,fa,13,3,"ng-template",null,9,e.W1O),e.YNc(17,Ra,1,1,"ng-template",null,10,e.W1O),e.YNc(19,Pa,5,5,"ng-template",null,11,e.W1O)),2&t&&(e.xp6(1),e.Q6J("data",o.images)("columns",o.columns)("searchableObjects",!0)("serverSide",!0)("count",o.count)("hasDetails",!0)("status",o.tableStatus)("maxLimit",25)("autoReload",-1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},directives:[We,W.a,Ee.K,K_,l.O5,N._L,l.sg,l.mk],pipes:[Le.$,Ze.N],styles:[".warn[_ngcontent-%COMP%]{color:#ffc200}"]}),n})();function Na(n,s){1&n&&e._UZ(0,"input",19)}function Fa(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,24),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Da(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,25),e.qZA()),2&n&&e.Q6J("ngValue",null)}function va(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,26),e.qZA()),2&n&&e.Q6J("ngValue",null)}function La(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function $a(n,s){if(1&n&&(e.TgZ(0,"select",20),e.YNc(1,Fa,2,1,"option",21),e.YNc(2,Da,2,1,"option",21),e.YNc(3,va,2,1,"option",21),e.YNc(4,La,2,2,"option",22),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.pools)}}function Za(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,29),e.qZA())}function Ba(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,30),e.qZA())}function Ga(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,31),e.qZA())}let xa=(()=>{class n{constructor(t,o,i,_,r,c){this.activeModal=t,this.actionLabels=o,this.authStorageService=i,this.notificationService=_,this.poolService=r,this.rbdService=c,this.pools=null,this.editing=!1,this.poolPermission=this.authStorageService.getPermissions().pool,this.createForm()}createForm(){this.namespaceForm=new y.d({pool:new a.NI(""),namespace:new a.NI("")},this.validator(),this.asyncValidator())}validator(){return t=>{const o=t.get("pool"),i=t.get("namespace");let _=null;o.value||(_={required:!0}),o.setErrors(_);let r=null;return i.value||(r={required:!0}),i.setErrors(r),null}}asyncValidator(){return t=>new Promise(o=>{const i=t.get("pool"),_=t.get("namespace");this.rbdService.listNamespaces(i.value).subscribe(r=>{if(r.some(c=>c.namespace===_.value)){const c={namespaceExists:!0};_.setErrors(c),o(c)}else o(null)})})}ngOnInit(){this.onSubmit=new vt.xQ,this.poolPermission.read&&this.poolService.list(["pool_name","type","application_metadata"]).then(t=>{const o=[];for(const i of t)this.rbdService.isRBDPool(i)&&"replicated"===i.type&&o.push(i);if(this.pools=o,1===this.pools.length){const i=this.pools[0].pool_name;this.namespaceForm.get("pool").setValue(i)}})}submit(){const t=this.namespaceForm.getValue("pool"),o=this.namespaceForm.getValue("namespace"),i=new R.R;i.name="rbd/namespace/create",i.metadata={pool:t,namespace:o},this.rbdService.createNamespace(t,o).toPromise().then(()=>{this.notificationService.show(tt.k.success,"Created namespace '" + t + "/" + o + "'"),this.activeModal.close(),this.onSubmit.next()}).catch(()=>{this.namespaceForm.setErrors({cdSubmitButton:!0})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(N.Kz),e.Y36(v.p4),e.Y36(oe.j),e.Y36(ve.g),e.Y36(Ve.q),e.Y36(q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-namespace-form-modal"]],decls:23,vars:9,consts:function(){let s,t,o,i,_,r,c,d,g;return s="Create Namespace",t="Pool",o="Name",i="Loading...",_="-- No rbd pools available --",r="-- Select a pool --",c="This field is required.",d="This field is required.",g="Namespace already exists.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","namespaceForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","pool",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["class","form-control","type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",4,"ngIf"],["id","pool","name","pool","class","form-control","formControlName","pool",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["for","namespace",1,"cd-col-form-label","required"],o,["type","text","placeholder","Namespace name...","id","namespace","name","namespace","formControlName","namespace","autofocus","",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",1,"form-control"],["id","pool","name","pool","formControlName","pool",1,"form-control"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],i,_,r,[3,"value"],[1,"invalid-feedback"],c,d,g]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"div",7),e.TgZ(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e.YNc(11,Na,1,0,"input",11),e.YNc(12,$a,5,4,"select",12),e.YNc(13,Za,2,0,"span",13),e.qZA(),e.qZA(),e.TgZ(14,"div",7),e.TgZ(15,"label",14),e.SDv(16,15),e.qZA(),e.TgZ(17,"div",10),e._UZ(18,"input",16),e.YNc(19,Ba,2,0,"span",13),e.YNc(20,Ga,2,0,"span",13),e.qZA(),e.qZA(),e.qZA(),e.TgZ(21,"div",17),e.TgZ(22,"cd-form-button-panel",18),e.NdJ("submitActionEvent",function(){return o.submit()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.namespaceForm),e.xp6(7),e.Q6J("ngIf",!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.namespaceForm.showError("pool",i,"required")),e.xp6(6),e.Q6J("ngIf",o.namespaceForm.showError("namespace",i,"required")),e.xp6(1),e.Q6J("ngIf",o.namespaceForm.showError("namespace",i,"namespaceExists")),e.xp6(2),e.Q6J("form",o.namespaceForm)("submitText",o.actionLabels.CREATE)}},directives:[C.z,a._Y,a.JL,a.sg,h.V,O.P,l.O5,$.o,a.Fj,k.b,a.JJ,a.u,Re.U,j.p,a.EJ,l.sg,a.YN,a.Kr],styles:[""]}),n})(),ya=(()=>{class n{constructor(t,o,i,_,r,c){this.authStorageService=t,this.rbdService=o,this.poolService=i,this.modalService=_,this.notificationService=r,this.actionLabels=c,this.selection=new Se.r,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"create",icon:T.P.add,click:()=>this.createModal(),name:this.actionLabels.CREATE},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:"Namespace",prop:"namespace",flexGrow:1},{name:"Pool",prop:"pool",flexGrow:1},{name:"Total images",prop:"num_images",flexGrow:1}],this.refresh()}refresh(){this.poolService.list(["pool_name","type","application_metadata"]).then(t=>{t=t.filter(i=>this.rbdService.isRBDPool(i)&&"replicated"===i.type);const o=[];t.forEach(i=>{o.push(this.rbdService.listNamespaces(i.pool_name))}),o.length>0?(0,le.D)(o).subscribe(i=>{const _=[];for(let r=0;r{_.push({id:`${d}/${g.namespace}`,pool:d,namespace:g.namespace,num_images:g.num_images})})}this.namespaces=_}):this.namespaces=[]})}updateSelection(t){this.selection=t}createModal(){this.modalRef=this.modalService.show(xa),this.modalRef.componentInstance.onSubmit.subscribe(()=>{this.refresh()})}deleteModal(){const t=this.selection.first().pool,o=this.selection.first().namespace;this.modalRef=this.modalService.show(pe.M,{itemDescription:"Namespace",itemNames:[`${t}/${o}`],submitAction:()=>this.rbdService.deleteNamespace(t,o).subscribe(()=>{this.notificationService.show(tt.k.success,"Deleted namespace '" + t + "/" + o + "'"),this.modalRef.close(),this.refresh()},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})})}getDeleteDisableDesc(){var t;const o=this.selection.first();return(null==o?void 0:o.num_images)>0?"Namespace contains images":!(null===(t=this.selection)||void 0===t?void 0:t.first())}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(Ve.q),e.Y36(de.Z),e.Y36(ve.g),e.Y36(v.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-namespace-list"]],features:[e._Bn([ce.j])],decls:4,vars:5,consts:[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"]],template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",1),e._UZ(3,"cd-table-actions",2),e.qZA(),e.qZA()),2&t&&(e.xp6(1),e.Q6J("data",o.namespaces)("columns",o.columns),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[We,W.a,Ee.K],styles:[""]}),n})(),wa=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-performance"]],decls:2,vars:1,consts:[["uid","41FrpeUiz","grafanaStyle","two",3,"grafanaPath"]],template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e._UZ(1,"cd-grafana",0)),2&t&&(e.xp6(1),e.Q6J("grafanaPath","rbd-overview?"))},directives:[We,Lt.F],styles:[""]}),n})();var qa=p(91801);function Ha(n,s){1&n&&e._UZ(0,"input",15)}function ka(n,s){if(1&n&&(e.TgZ(0,"option",20),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function Ka(n,s){if(1&n&&(e.TgZ(0,"select",16),e.TgZ(1,"option",17),e.SDv(2,18),e.qZA(),e.YNc(3,ka,2,2,"option",19),e.qZA()),2&n){const t=e.oxw();e.xp6(3),e.Q6J("ngForOf",t.pools)}}let Xa=(()=>{class n{constructor(t,o,i,_,r,c,d){this.authStorageService=t,this.rbdService=o,this.activeModal=i,this.actionLabels=_,this.fb=r,this.poolService=c,this.taskWrapper=d,this.poolPermission=this.authStorageService.getPermissions().pool}createForm(){this.purgeForm=this.fb.group({poolName:""})}ngOnInit(){this.poolPermission.read&&this.poolService.list(["pool_name","application_metadata"]).then(t=>{this.pools=t.filter(o=>o.application_metadata.includes("rbd")).map(o=>o.pool_name)}),this.createForm()}purge(){const t=this.purgeForm.getValue("poolName")||"";this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/trash/purge",{pool_name:t}),call:this.rbdService.purgeTrash(t)}).subscribe({error:()=>{this.purgeForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(N.Kz),e.Y36(v.p4),e.Y36(rt.O),e.Y36(Ve.q),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-purge-modal"]],decls:18,vars:6,consts:function(){let s,t,o,i,_;return s="Purge Trash",t="To purge, select\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "All" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + "\xA0 or one pool and click\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "Purge" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ".\xA0",t=e.Zx4(t),o="Pool:",i="Pool name...",_="All",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","purgeForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],[1,"col-form-label","mx-auto"],o,["class","form-control","type","text","placeholder",i,"formControlName","poolName",4,"ngIf"],["id","poolName","name","poolName","class","form-control","formControlName","poolName",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["type","text","placeholder",i,"formControlName","poolName",1,"form-control"],["id","poolName","name","poolName","formControlName","poolName",1,"form-control"],["value",""],_,[3,"value",4,"ngFor","ngForOf"],[3,"value"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"p"),e.tHW(8,7),e._UZ(9,"kbd"),e._UZ(10,"kbd"),e.N_p(),e.qZA(),e.TgZ(11,"div",8),e.TgZ(12,"label",9),e.SDv(13,10),e.qZA(),e.YNc(14,Ha,1,0,"input",11),e.YNc(15,Ka,4,1,"select",12),e.qZA(),e.qZA(),e.TgZ(16,"div",13),e.TgZ(17,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.purge()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.purgeForm),e.xp6(10),e.Q6J("ngIf",!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.poolPermission.read),e.xp6(2),e.Q6J("form",o.purgeForm)("submitText",o.actionLabels.PURGE))},directives:[C.z,a._Y,a.JL,a.sg,h.V,O.P,l.O5,j.p,$.o,a.Fj,k.b,a.JJ,a.u,a.EJ,a.YN,a.Kr,l.sg],styles:[""]}),n})();function Qa(n,s){1&n&&(e.TgZ(0,"span",15),e.SDv(1,16),e.qZA())}let za=(()=>{class n{constructor(t,o,i,_,r){this.rbdService=t,this.activeModal=o,this.actionLabels=i,this.fb=_,this.taskWrapper=r}ngOnInit(){this.imageSpec=new L.N(this.poolName,this.namespace,this.imageName).toString(),this.restoreForm=this.fb.group({name:this.imageName})}restore(){const t=this.restoreForm.getValue("name"),o=new L.N(this.poolName,this.namespace,this.imageId);this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/trash/restore",{image_id_spec:o.toString(),new_image_name:t}),call:this.rbdService.restoreTrash(o,t)}).subscribe({error:()=>{this.restoreForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(q),e.Y36(N.Kz),e.Y36(v.p4),e.Y36(rt.O),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-restore-modal"]],decls:18,vars:7,consts:function(){let s,t,o,i;return s="Restore Image",t="To restore\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "" + "\ufffd0\ufffd" + "@" + "\ufffd1\ufffd" + "" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ",\xA0 type the image's new name and click\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "Restore" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ".",t=e.Zx4(t),o="New Name",i="This field is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","restoreForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","name",1,"col-form-label"],o,["type","text","name","name","id","name","autocomplete","off","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],i]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.TgZ(6,"div",6),e.TgZ(7,"p"),e.tHW(8,7),e._UZ(9,"kbd"),e._UZ(10,"kbd"),e.N_p(),e.qZA(),e.TgZ(11,"div",8),e.TgZ(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,Qa,2,0,"span",12),e.qZA(),e.qZA(),e.TgZ(16,"div",13),e.TgZ(17,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.restore()}),e.qZA(),e.qZA(),e.qZA(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.restoreForm),e.xp6(6),e.pQV(o.imageSpec)(o.imageId),e.QtT(8),e.xp6(5),e.Q6J("ngIf",o.restoreForm.showError("name",i,"required")),e.xp6(2),e.Q6J("form",o.restoreForm)("submitText",o.actionLabels.RESTORE)}},directives:[C.z,a._Y,a.JL,a.sg,h.V,O.P,$.o,a.Fj,k.b,a.JJ,a.u,Re.U,l.O5,j.p],styles:[""]}),n})();const Ja=["expiresTpl"],Ya=["deleteTpl"],Va=function(n){return[n]};function Ua(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",6),e.NdJ("click",function(){return e.CHM(t),e.oxw().purgeModal()}),e._UZ(1,"i",7),e.ynx(2),e.SDv(3,8),e.BQk(),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("disabled",t.disablePurgeBtn),e.xp6(1),e.Q6J("ngClass",e.VKq(2,Va,t.icons.destroy))}}function ja(n,s){1&n&&(e.ynx(0),e.SDv(1,10),e.BQk())}function Wa(n,s){1&n&&(e.ynx(0),e.SDv(1,11),e.BQk())}function er(n,s){if(1&n&&(e.YNc(0,ja,2,0,"ng-container",9),e.YNc(1,Wa,2,0,"ng-container",9),e._uU(2),e.ALo(3,"cdDate")),2&n){const t=s.row,o=s.value;e.Q6J("ngIf",t.cdIsExpired),e.xp6(1),e.Q6J("ngIf",!t.cdIsExpired),e.xp6(1),e.hij(" ",e.lcZ(3,3,o),"\n")}}function tr(n,s){if(1&n&&(e.TgZ(0,"p",13),e.TgZ(1,"strong"),e.ynx(2),e.SDv(3,14),e.ALo(4,"cdDate"),e.BQk(),e.qZA(),e.qZA()),2&n){const t=e.oxw().expiresAt;e.xp6(4),e.pQV(e.lcZ(4,1,t)),e.QtT(3)}}function or(n,s){1&n&&e.YNc(0,tr,5,3,"p",12),2&n&&e.Q6J("ngIf",!s.isExpired)}let nr=(()=>{class n{constructor(t,o,i,_,r,c,d){this.authStorageService=t,this.rbdService=o,this.modalService=i,this.cdDatePipe=_,this.taskListService=r,this.taskWrapper=c,this.actionLabels=d,this.icons=T.P,this.executingTasks=[],this.selection=new Se.r,this.tableStatus=new se.E,this.disablePurgeBtn=!0,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"update",icon:T.P.undo,click:()=>this.restoreModal(),name:this.actionLabels.RESTORE},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"ID",prop:"id",flexGrow:1,cellTransformation:De.e.executing},{name:"Name",prop:"name",flexGrow:1},{name:"Pool",prop:"pool_name",flexGrow:1},{name:"Namespace",prop:"namespace",flexGrow:1},{name:"Status",prop:"deferment_end_time",flexGrow:1,cellTemplate:this.expiresTpl},{name:"Deleted At",prop:"deletion_time",flexGrow:1,pipe:this.cdDatePipe}],this.taskListService.init(()=>this.rbdService.listTrash(),i=>this.prepareResponse(i),i=>this.images=i,()=>this.onFetchError(),i=>["rbd/trash/remove","rbd/trash/restore"].includes(i.name),(i,_)=>new L.N(i.pool_name,i.namespace,i.id).toString()===_.metadata.image_id_spec,void 0)}prepareResponse(t){let o=[];const i={};let _;if(t.forEach(r=>{S().isUndefined(i[r.status])&&(i[r.status]=[]),i[r.status].push(r.pool_name),o=o.concat(r.value),this.disablePurgeBtn=!o.length}),i[3]?_=3:i[1]?_=1:i[2]&&(_=2),_){const r=(i[_].length>1?"pools ":"pool ")+i[_].join();this.tableStatus=new se.E(_,r)}else this.tableStatus=new se.E;return o.forEach(r=>{r.cdIsExpired=Me()().isAfter(r.deferment_end_time)}),o}onFetchError(){this.table.reset(),this.tableStatus=new se.E(qa.T.ValueException)}updateSelection(t){this.selection=t}restoreModal(){const t={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,imageId:this.selection.first().id};this.modalRef=this.modalService.show(za,t)}deleteModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().id,_=this.selection.first().deferment_end_time,r=Me()().isAfter(_),c=new L.N(t,o,i);this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD",itemNames:[c],bodyTemplate:this.deleteTpl,bodyContext:{expiresAt:_,isExpired:r},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new R.R("rbd/trash/remove",{image_id_spec:c.toString()}),call:this.rbdService.removeTrash(c,!0)})})}purgeModal(){this.modalService.show(Xa)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(de.Z),e.Y36(Ze.N),e.Y36(ce.j),e.Y36(u.P),e.Y36(v.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(W.a,7),e.Gf(Ja,7),e.Gf(Ya,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.expiresTpl=i.first),e.iGM(i=e.CRH())&&(o.deleteTpl=i.first)}},features:[e._Bn([ce.j])],decls:9,vars:8,consts:function(){let s,t,o,i;return s="Purge Trash",t="Expired at",o="Protected until",i="This image is protected until " + "\ufffd0\ufffd" + ".",[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","status","autoReload","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["class","btn btn-light","type","button",3,"disabled","click",4,"ngIf"],["expiresTpl",""],["deleteTpl",""],["type","button",1,"btn","btn-light",3,"disabled","click"],["aria-hidden","true",3,"ngClass"],s,[4,"ngIf"],t,o,["class","text-danger",4,"ngIf"],[1,"text-danger"],i]},template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0),e.NdJ("fetchData",function(){return o.taskListService.fetch()})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",1),e._UZ(3,"cd-table-actions",2),e.YNc(4,Ua,4,4,"button",3),e.qZA(),e.qZA(),e.YNc(5,er,4,5,"ng-template",null,4,e.W1O),e.YNc(7,or,1,1,"ng-template",null,5,e.W1O)),2&t&&(e.xp6(1),e.Q6J("data",o.images)("columns",o.columns)("status",o.tableStatus)("autoReload",-1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("ngIf",o.permission.delete))},directives:[We,W.a,Ee.K,l.O5,$.o,l.mk],pipes:[Ze.N],styles:[""]}),n})(),$t=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[l.ez,ni,a.u5,a.UX,N.Oz,N.dT,N.HK,Ie.b,Ae.m,m.Bz,ne.xc]]}),n})();const ir=[{path:"",redirectTo:"rbd",pathMatch:"full"},{path:"rbd",canActivate:[U.T,re.P],data:{moduleStatusGuardConfig:{uiApiPath:"block/rbd",redirectTo:"error",header:"No RBD pools available",button_name:"Create RBD pool",button_route:"/pool/create"},breadcrumbs:"Images"},children:[{path:"",component:ba},{path:"namespaces",component:ya,data:{breadcrumbs:"Namespaces"}},{path:"trash",component:nr,data:{breadcrumbs:"Trash"}},{path:"performance",component:wa,data:{breadcrumbs:"Overall Performance"}},{path:v.MQ.CREATE,component:$e,data:{breadcrumbs:v.Qn.CREATE}},{path:`${v.MQ.EDIT}/:image_spec`,component:$e,data:{breadcrumbs:v.Qn.EDIT}},{path:`${v.MQ.CLONE}/:image_spec/:snap`,component:$e,data:{breadcrumbs:v.Qn.CLONE}},{path:`${v.MQ.COPY}/:image_spec`,component:$e,data:{breadcrumbs:v.Qn.COPY}},{path:`${v.MQ.COPY}/:image_spec/:snap`,component:$e,data:{breadcrumbs:v.Qn.COPY}}]},{path:"mirroring",component:Vi,canActivate:[U.T,re.P],data:{moduleStatusGuardConfig:{uiApiPath:"block/mirroring",redirectTo:"error",header:"RBD mirroring is not configured",button_name:"Configure RBD Mirroring",button_title:"This will create rbd-mirror service and a replicated RBD pool",component:"RBD Mirroring",uiConfig:!0},breadcrumbs:"Mirroring"},children:[{path:`${v.MQ.EDIT}/:pool_name`,component:es,outlet:"modal"}]},{path:"iscsi",canActivate:[U.T],data:{breadcrumbs:"iSCSI"},children:[{path:"",redirectTo:"overview",pathMatch:"full"},{path:"overview",component:oi,data:{breadcrumbs:"Overview"}},{path:"targets",data:{breadcrumbs:"Targets"},children:[{path:"",component:qn},{path:v.MQ.CREATE,component:ut,data:{breadcrumbs:v.Qn.CREATE}},{path:`${v.MQ.EDIT}/:target_iqn`,component:ut,data:{breadcrumbs:v.Qn.EDIT}}]}]}];let sr=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[$t,m.Bz.forChild(ir)]]}),n})()},54555:(ct,Oe,p)=>{p.d(Oe,{d:()=>z});var l=p(74788),a=p(24751),m=p(23815),ne=p.n(m),N=p(80226),Ie=p(65862),v=p(95463),U=p(30633),re=p(28211),Ae=p(34089),be=p(41582),S=p(12057),le=p(56310),D=p(18372),ie=p(87925),V=p(94276);let e=(()=>{class A{constructor(u,C){this.control=u,this.formatter=C}setValue(u){const C=this.formatter.toMilliseconds(u);this.control.control.setValue(`${C} ms`)}ngOnInit(){this.setValue(this.control.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.control.value))}onUpdate(u){this.setValue(u)}}return A.\u0275fac=function(u){return new(u||A)(l.Y36(a.a5),l.Y36(re.H))},A.\u0275dir=l.lG2({type:A,selectors:[["","cdMilliseconds",""]],hostBindings:function(u,C){1&u&&l.NdJ("blur",function(O){return C.onUpdate(O.target.value)})},inputs:{ngDataReady:"ngDataReady"}}),A})();var X=p(20044);let Ne=(()=>{class A{constructor(u,C,h,O){this.elementRef=u,this.control=C,this.dimlessBinaryPerSecondPipe=h,this.formatter=O,this.ngModelChange=new l.vpe,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.el.value))}setValue(u){/^[\d.]+$/.test(u)&&(u+=this.defaultUnit||"m");const C=this.formatter.toBytes(u,0),h=this.round(C);this.el.value=this.dimlessBinaryPerSecondPipe.transform(h),null!==C?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(u){if(null!==u&&0!==u){if(!ne().isUndefined(this.minBytes)&&uthis.maxBytes)return this.maxBytes;if(!ne().isUndefined(this.roundPower)){const C=Math.round(Math.log(u)/Math.log(this.roundPower));return Math.pow(this.roundPower,C)}}return u}onBlur(u){this.setValue(u)}}return A.\u0275fac=function(u){return new(u||A)(l.Y36(l.SBq),l.Y36(a.a5),l.Y36(X.O),l.Y36(re.H))},A.\u0275dir=l.lG2({type:A,selectors:[["","cdDimlessBinaryPerSecond",""]],hostBindings:function(u,C){1&u&&l.NdJ("blur",function(O){return C.onBlur(O.target.value)})},inputs:{ngDataReady:"ngDataReady",minBytes:"minBytes",maxBytes:"maxBytes",roundPower:"roundPower",defaultUnit:"defaultUnit"},outputs:{ngModelChange:"ngModelChange"}}),A})(),Fe=(()=>{class A{constructor(u,C){this.formatter=u,this.ngControl=C}setValue(u){const C=this.formatter.toIops(u);this.ngControl.control.setValue(`${C} IOPS`)}ngOnInit(){this.setValue(this.ngControl.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.ngControl.value))}onUpdate(u){this.setValue(u)}}return A.\u0275fac=function(u){return new(u||A)(l.Y36(re.H),l.Y36(a.a5))},A.\u0275dir=l.lG2({type:A,selectors:[["","cdIops",""]],hostBindings:function(u,C){1&u&&l.NdJ("blur",function(O){return C.onUpdate(O.target.value)})},inputs:{ngDataReady:"ngDataReady"}}),A})();function L(A,R){if(1&A&&(l.ynx(0),l._UZ(1,"input",18),l.BQk()),2&A){const u=l.oxw().$implicit,C=l.oxw(2);l.xp6(1),l.Q6J("id",u.name)("name",u.name)("formControlName",u.name)("ngDataReady",C.ngDataReady)}}function he(A,R){if(1&A&&(l.ynx(0),l._UZ(1,"input",19),l.BQk()),2&A){const u=l.oxw().$implicit,C=l.oxw(2);l.xp6(1),l.Q6J("id",u.name)("name",u.name)("formControlName",u.name)("ngDataReady",C.ngDataReady)}}function q(A,R){if(1&A&&(l.ynx(0),l._UZ(1,"input",20),l.BQk()),2&A){const u=l.oxw().$implicit,C=l.oxw(2);l.xp6(1),l.Q6J("id",u.name)("name",u.name)("formControlName",u.name)("ngDataReady",C.ngDataReady)}}function F(A,R){1&A&&(l.TgZ(0,"span",21),l.SDv(1,22),l.qZA())}const x=function(A){return{active:A}},T=function(A){return[A]};function H(A,R){if(1&A){const u=l.EpF();l.TgZ(0,"div",10),l.TgZ(1,"label",11),l._uU(2),l.TgZ(3,"cd-helper"),l._uU(4),l.qZA(),l.qZA(),l.TgZ(5,"div"),l.TgZ(6,"div",12),l.ynx(7,13),l.YNc(8,L,2,4,"ng-container",14),l.YNc(9,he,2,4,"ng-container",14),l.YNc(10,q,2,4,"ng-container",14),l.BQk(),l.TgZ(11,"span",15),l.TgZ(12,"button",16),l.NdJ("click",function(){const O=l.CHM(u).$implicit;return l.oxw(2).reset(O.name)}),l._UZ(13,"i",7),l.qZA(),l.qZA(),l.qZA(),l.YNc(14,F,2,0,"span",17),l.qZA(),l.qZA()}if(2&A){const u=R.$implicit,C=l.oxw().$implicit,h=l.oxw(),O=l.MAs(1);l.xp6(1),l.Q6J("for",u.name),l.xp6(1),l.Oqu(u.displayName),l.xp6(2),l.Oqu(u.description),l.xp6(1),l.Gre("cd-col-form-input ",C.heading,""),l.xp6(2),l.Q6J("ngSwitch",u.type),l.xp6(1),l.Q6J("ngSwitchCase",h.configurationType.milliseconds),l.xp6(1),l.Q6J("ngSwitchCase",h.configurationType.bps),l.xp6(1),l.Q6J("ngSwitchCase",h.configurationType.iops),l.xp6(2),l.Q6J("ngClass",l.VKq(13,x,h.isDisabled(u.name))),l.xp6(1),l.Q6J("ngClass",l.VKq(15,T,h.icons.erase)),l.xp6(1),l.Q6J("ngIf",h.form.showError("configuration."+u.name,O,"min"))}}function y(A,R){if(1&A){const u=l.EpF();l.TgZ(0,"div",4),l.TgZ(1,"h4",5),l.TgZ(2,"span",6),l.NdJ("click",function(){const O=l.CHM(u).$implicit;return l.oxw().toggleSectionVisibility(O.class)}),l._uU(3),l._UZ(4,"i",7),l.qZA(),l.qZA(),l.TgZ(5,"div",8),l.YNc(6,H,15,17,"div",9),l.qZA(),l.qZA()}if(2&A){const u=R.$implicit,C=l.oxw();l.xp6(3),l.hij(" ",u.heading," "),l.xp6(1),l.Q6J("ngClass",C.sectionVisibility[u.class]?C.icons.minusCircle:C.icons.addCircle),l.xp6(1),l.Tol(u.class),l.Q6J("hidden",!C.sectionVisibility[u.class]),l.xp6(1),l.Q6J("ngForOf",u.options)}}let z=(()=>{class A{constructor(u,C){this.formatterService=u,this.rbdConfigurationService=C,this.initializeData=new N.t(1),this.changes=new l.vpe,this.icons=Ie.P,this.ngDataReady=new l.vpe,this.configurationType=U.r,this.sectionVisibility={}}ngOnInit(){const u=this.createConfigurationFormGroup();this.form.addControl("configuration",u),u.valueChanges.subscribe(()=>{this.changes.emit(this.getDirtyValues.bind(this))}),this.initializeData&&this.initializeData.subscribe(C=>{this.initialData=C.initialData;const h=C.sourceType;this.rbdConfigurationService.getWritableOptionFields().forEach(O=>{const $=C.initialData.filter(k=>k.name===O.name).pop();$&&$.source===h&&this.form.get(`configuration.${O.name}`).setValue($.value)}),this.ngDataReady.emit()}),this.rbdConfigurationService.getWritableSections().forEach(C=>this.sectionVisibility[C.class]=!1)}getDirtyValues(u=!1,C){if(u&&!C)throw new Error("ProgrammingError: If local values shall be included, a proper localFieldType argument has to be provided, too");const h={};return this.rbdConfigurationService.getWritableOptionFields().forEach(O=>{const $=this.form.get("configuration").get(O.name);this.initialData&&this.initialData[O.name]===$.value||($.dirty||u&&$.source===C)&&(h[O.name]=null===$.value?$.value:O.type===U.r.bps?this.formatterService.toBytes($.value):O.type===U.r.milliseconds?this.formatterService.toMilliseconds($.value):O.type===U.r.iops?this.formatterService.toIops($.value):$.value)}),h}createConfigurationFormGroup(){const u=new v.d({});return this.rbdConfigurationService.getWritableOptionFields().forEach(C=>{let h;if(C.type!==U.r.milliseconds&&C.type!==U.r.iops&&C.type!==U.r.bps)throw new Error(`Type ${C.type} is unknown, you may need to add it to RbdConfiguration class`);{let O=0;ne().forEach(this.initialData,$=>{$.name===C.name&&(O=$.value)}),h=new a.NI(O,a.kI.min(0))}u.addControl(C.name,h)}),u}reset(u){const C=this.form.get("configuration").get(u);C.disabled?(C.setValue(C.previousValue||0),C.enable(),C.previousValue||C.markAsPristine()):(C.previousValue=C.value,C.setValue(null),C.markAsDirty(),C.disable())}isDisabled(u){return this.form.get("configuration").get(u).disabled}toggleSectionVisibility(u){this.sectionVisibility[u]=!this.sectionVisibility[u]}}return A.\u0275fac=function(u){return new(u||A)(l.Y36(re.H),l.Y36(Ae.n))},A.\u0275cmp=l.Xpm({type:A,selectors:[["cd-rbd-configuration-form"]],inputs:{form:"form",initializeData:"initializeData"},outputs:{changes:"changes"},decls:5,vars:2,consts:function(){let R,u,C;return R="RBD Configuration",u="Remove the local configuration value. The parent configuration value will be inherited and used instead.",C="The minimum value is 0",[[3,"formGroup"],["cfgFormGroup",""],R,["class","col-12",4,"ngFor","ngForOf"],[1,"col-12"],[1,"cd-header"],[1,"collapsible",3,"click"],["aria-hidden","true",3,"ngClass"],[3,"hidden"],["class","form-group row",4,"ngFor","ngForOf"],[1,"form-group","row"],[1,"cd-col-form-label",3,"for"],[1,"input-group"],[3,"ngSwitch"],[4,"ngSwitchCase"],[1,"input-group-append"],["type","button","data-toggle","button","title",u,1,"btn","btn-light",3,"ngClass","click"],["class","invalid-feedback",4,"ngIf"],["type","text","cdMilliseconds","",1,"form-control",3,"id","name","formControlName","ngDataReady"],["type","text","defaultUnit","b","cdDimlessBinaryPerSecond","",1,"form-control",3,"id","name","formControlName","ngDataReady"],["type","text","cdIops","",1,"form-control",3,"id","name","formControlName","ngDataReady"],[1,"invalid-feedback"],C]},template:function(u,C){1&u&&(l.TgZ(0,"fieldset",0,1),l.TgZ(2,"legend"),l.SDv(3,2),l.qZA(),l.YNc(4,y,7,7,"div",3),l.qZA()),2&u&&(l.Q6J("formGroup",C.form.get("configuration")),l.xp6(4),l.Q6J("ngForOf",C.rbdConfigurationService.sections))},directives:[a.JL,a.sg,be.V,S.sg,S.mk,le.P,D.S,S.RF,S.n9,ie.o,S.O5,a.Fj,V.b,e,a.JJ,a.u,Ne,Fe],styles:[".collapsible[_ngcontent-%COMP%]{cursor:pointer;user-select:none}"]}),A})()},71752:(ct,Oe,p)=>{p.d(Oe,{P:()=>q});var l=p(35905),a=p(30633),m=p(74788);let ne=(()=>{class F{transform(T){return{0:"global",1:"pool",2:"image"}[T]}}return F.\u0275fac=function(T){return new(T||F)},F.\u0275pipe=m.Yjl({name:"rbdConfigurationSource",type:F,pure:!0}),F})();var N=p(28211),Ie=p(34089),v=p(12057),U=p(20044),re=p(48537),Ae=p(21766);const be=["configurationSourceTpl"],S=["configurationValueTpl"],le=["poolConfTable"];function D(F,x){1&F&&(m.TgZ(0,"span"),m.SDv(1,6),m.qZA())}function ie(F,x){1&F&&(m.TgZ(0,"strong"),m.SDv(1,7),m.qZA())}function V(F,x){1&F&&(m.TgZ(0,"strong"),m.SDv(1,8),m.qZA())}function e(F,x){1&F&&(m.TgZ(0,"div",4),m.YNc(1,D,2,0,"span",5),m.YNc(2,ie,2,0,"strong",5),m.YNc(3,V,2,0,"strong",5),m.qZA()),2&F&&(m.Q6J("ngSwitch",x.value),m.xp6(1),m.Q6J("ngSwitchCase","global"),m.xp6(1),m.Q6J("ngSwitchCase","image"),m.xp6(1),m.Q6J("ngSwitchCase","pool"))}function X(F,x){if(1&F&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"dimlessBinaryPerSecond"),m.qZA()),2&F){const T=m.oxw().value;m.xp6(1),m.Oqu(m.lcZ(2,1,T))}}function Ne(F,x){if(1&F&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"milliseconds"),m.qZA()),2&F){const T=m.oxw().value;m.xp6(1),m.Oqu(m.lcZ(2,1,T))}}function Fe(F,x){if(1&F&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"iops"),m.qZA()),2&F){const T=m.oxw().value;m.xp6(1),m.Oqu(m.lcZ(2,1,T))}}function L(F,x){if(1&F&&(m.TgZ(0,"span"),m._uU(1),m.qZA()),2&F){const T=m.oxw().value;m.xp6(1),m.Oqu(T)}}function he(F,x){if(1&F&&(m.TgZ(0,"div",4),m.YNc(1,X,3,3,"span",5),m.YNc(2,Ne,3,3,"span",5),m.YNc(3,Fe,3,3,"span",5),m.YNc(4,L,2,1,"span",9),m.qZA()),2&F){const T=x.row,H=m.oxw();m.Q6J("ngSwitch",T.type),m.xp6(1),m.Q6J("ngSwitchCase",H.typeField.bps),m.xp6(1),m.Q6J("ngSwitchCase",H.typeField.milliseconds),m.xp6(1),m.Q6J("ngSwitchCase",H.typeField.iops)}}let q=(()=>{class F{constructor(T,H){this.formatterService=T,this.rbdConfigurationService=H,this.sourceField=a.h,this.typeField=a.r}ngOnInit(){this.poolConfigurationColumns=[{prop:"displayName",name:"Name"},{prop:"description",name:"Description"},{prop:"name",name:"Key"},{prop:"source",name:"Source",cellTemplate:this.configurationSourceTpl,pipe:new ne},{prop:"value",name:"Value",cellTemplate:this.configurationValueTpl}]}ngOnChanges(){!this.data||(this.data=this.data.filter(T=>this.rbdConfigurationService.getOptionFields().map(H=>H.name).includes(T.name)))}}return F.\u0275fac=function(T){return new(T||F)(m.Y36(N.H),m.Y36(Ie.n))},F.\u0275cmp=m.Xpm({type:F,selectors:[["cd-rbd-configuration-table"]],viewQuery:function(T,H){if(1&T&&(m.Gf(be,7),m.Gf(S,7),m.Gf(le,7)),2&T){let y;m.iGM(y=m.CRH())&&(H.configurationSourceTpl=y.first),m.iGM(y=m.CRH())&&(H.configurationValueTpl=y.first),m.iGM(y=m.CRH())&&(H.poolConfTable=y.first)}},inputs:{data:"data"},features:[m.TTD],decls:6,vars:2,consts:function(){let x,T,H;return x="Global",T="Image",H="Pool",[["identifier","name",3,"data","columns"],["poolConfTable",""],["configurationSourceTpl",""],["configurationValueTpl",""],[3,"ngSwitch"],[4,"ngSwitchCase"],x,T,H,[4,"ngSwitchDefault"]]},template:function(T,H){1&T&&(m._UZ(0,"cd-table",0,1),m.YNc(2,e,4,4,"ng-template",null,2,m.W1O),m.YNc(4,he,5,4,"ng-template",null,3,m.W1O)),2&T&&m.Q6J("data",H.data)("columns",H.poolConfigurationColumns)},directives:[l.a,v.RF,v.n9,v.ED],pipes:[U.O,re.J,Ae.A],styles:[""]}),F})()}}]); \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/Ceph_Logo.487a0001b327fa7f5232.svg b/src/pybind/mgr/dashboard/frontend/dist/en-US/Ceph_Logo.487a0001b327fa7f5232.svg new file mode 100644 index 000000000..9426c300d --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/Ceph_Logo.487a0001b327fa7f5232.svg @@ -0,0 +1,71 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_red_white.svg b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_red_white.svg new file mode 100644 index 000000000..a5b0602eb --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_red_white.svg @@ -0,0 +1,69 @@ + +image/svg+xml diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_white.svg b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_white.svg new file mode 100644 index 000000000..35bcc8c0a --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Ceph_Logo_with_text_white.svg @@ -0,0 +1,69 @@ + +image/svg+xml diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Logo.svg b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Logo.svg new file mode 100644 index 000000000..9426c300d --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/Ceph_Logo.svg @@ -0,0 +1,71 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/ceph_background.gif b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/ceph_background.gif new file mode 100644 index 000000000..0f7426ee0 Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/ceph_background.gif differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/loading.gif b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/loading.gif new file mode 100755 index 000000000..8fb88dea3 Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/loading.gif differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/logo-mini.png b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/logo-mini.png new file mode 100644 index 000000000..b3446a894 Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/logo-mini.png differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/prometheus_logo.svg b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/prometheus_logo.svg new file mode 100644 index 000000000..5c51f66d9 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/assets/prometheus_logo.svg @@ -0,0 +1,50 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/ceph_background.e82dd79127290ddbe8cb.gif b/src/pybind/mgr/dashboard/frontend/dist/en-US/ceph_background.e82dd79127290ddbe8cb.gif new file mode 100644 index 000000000..0f7426ee0 Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/ceph_background.e82dd79127290ddbe8cb.gif differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/favicon.ico b/src/pybind/mgr/dashboard/frontend/dist/en-US/favicon.ico new file mode 100644 index 000000000..90e538ba7 Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/favicon.ico differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.2dfb5f36fc148e26e398.woff b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.2dfb5f36fc148e26e398.woff new file mode 100644 index 000000000..477da445a Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.2dfb5f36fc148e26e398.woff differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.7c20758e3e7c7dff7c8d.woff2 b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.7c20758e3e7c7dff7c8d.woff2 new file mode 100644 index 000000000..f3520b533 Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.7c20758e3e7c7dff7c8d.woff2 differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.86541105409e56d17291.svg b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.86541105409e56d17291.svg new file mode 100644 index 000000000..e99720454 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.86541105409e56d17291.svg @@ -0,0 +1,2849 @@ + + + + + +Created by FontForge 20180321 at Mon Feb 18 18:29:30 2019 + By Julien Deswaef +The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). Fork Awesome is a fork based of off Font Awesome 4.7.0 by Dave Gandy. More info on licenses at https://forkawesome.github.io + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.e182ad6df04f9177b326.eot b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.e182ad6df04f9177b326.eot new file mode 100644 index 000000000..b96d208fa Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.e182ad6df04f9177b326.eot differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.ee4d8bfd0af89fc714a2.ttf b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.ee4d8bfd0af89fc714a2.ttf new file mode 100644 index 000000000..6cf62efb8 Binary files /dev/null and b/src/pybind/mgr/dashboard/frontend/dist/en-US/forkawesome-webfont.ee4d8bfd0af89fc714a2.ttf differ diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/index.html b/src/pybind/mgr/dashboard/frontend/dist/en-US/index.html new file mode 100644 index 000000000..75c21411f --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/index.html @@ -0,0 +1,23 @@ + + + Ceph + + + + + + + + + + + \ No newline at end of file diff --git a/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c3b711a3156fe72f66f4.js b/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c3b711a3156fe72f66f4.js new file mode 100644 index 000000000..0933ce611 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/dist/en-US/main.c3b711a3156fe72f66f4.js @@ -0,0 +1,3 @@ +var $localize=Object.assign(void 0===$localize?{}:$localize,{locale:"en-US"}); +"use strict";(function(global){global.ng=global.ng||{};global.ng.common=global.ng.common||{};global.ng.common.locales=global.ng.common.locales||{};const u=undefined;function plural(n){const i=Math.floor(Math.abs(n)),v=n.toString().replace(/^[^.]*\.?/,"").length;if(i===1&&v===0)return 1;return 5}global.ng.common.locales["en-us-posix"]=["en-US-POSIX",[["a","p"],["AM","PM"],u],[["AM","PM"],u,u],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],u,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],u,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",u,"{1} 'at' {0}",u],[".",",",";","%","+","-","E","\xD7","0/00","INF","NaN",":"],["0.######","0%","\xA4\xA00.00","0.000000E+000"],"USD","$","US Dollar",{},"ltr",plural,[[["mi","n","in the morning","in the afternoon","in the evening","at night"],["midnight","noon","in the morning","in the afternoon","in the evening","at night"],u],[["midnight","noon","morning","afternoon","evening","night"],u,u],["00:00","12:00",["06:00","12:00"],["12:00","18:00"],["18:00","21:00"],["21:00","06:00"]]]]})(typeof globalThis!=="undefined"&&globalThis||typeof global!=="undefined"&&global||typeof window!=="undefined"&&window);; +var vm=Math.pow;(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[179],{98255:v=>{function T(i){return Promise.resolve().then(()=>{var r=new Error("Cannot find module '"+i+"'");throw r.code="MODULE_NOT_FOUND",r})}T.keys=()=>[],T.resolve=T,T.id=98255,v.exports=T},56083:(v,T,i)=>{"use strict";i.d(T,{l3:()=>p,_j:()=>r,LC:()=>u,ZN:()=>H,jt:()=>e,vP:()=>y,SB:()=>A,oB:()=>S,eR:()=>L,X$:()=>d,ZE:()=>se,k1:()=>Ee});class r{}class u{}const p="*";function d(ie,he){return{type:7,name:ie,definitions:he,options:{}}}function e(ie,he=null){return{type:4,styles:he,timings:ie}}function y(ie,he=null){return{type:2,steps:ie,options:he}}function S(ie){return{type:6,styles:ie,offset:null}}function A(ie,he,ge){return{type:0,name:ie,styles:he,options:ge}}function L(ie,he,ge=null){return{type:1,expr:ie,animation:he,options:ge}}function ae(ie){Promise.resolve(null).then(ie)}class H{constructor(he=0,ge=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=he+ge}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(he=>he()),this._onDoneFns=[])}onStart(he){this._onStartFns.push(he)}onDone(he){this._onDoneFns.push(he)}onDestroy(he){this._onDestroyFns.push(he)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){ae(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(he=>he()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(he=>he()),this._onDestroyFns=[])}reset(){this._started=!1}setPosition(he){this._position=this.totalTime?he*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(he){const ge="start"==he?this._onStartFns:this._onDoneFns;ge.forEach(De=>De()),ge.length=0}}class se{constructor(he){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=he;let ge=0,De=0,ce=0;const lt=this.players.length;0==lt?ae(()=>this._onFinish()):this.players.forEach(Ve=>{Ve.onDone(()=>{++ge==lt&&this._onFinish()}),Ve.onDestroy(()=>{++De==lt&&this._onDestroy()}),Ve.onStart(()=>{++ce==lt&&this._onStart()})}),this.totalTime=this.players.reduce((Ve,ze)=>Math.max(Ve,ze.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(he=>he()),this._onDoneFns=[])}init(){this.players.forEach(he=>he.init())}onStart(he){this._onStartFns.push(he)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(he=>he()),this._onStartFns=[])}onDone(he){this._onDoneFns.push(he)}onDestroy(he){this._onDestroyFns.push(he)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(he=>he.play())}pause(){this.players.forEach(he=>he.pause())}restart(){this.players.forEach(he=>he.restart())}finish(){this._onFinish(),this.players.forEach(he=>he.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(he=>he.destroy()),this._onDestroyFns.forEach(he=>he()),this._onDestroyFns=[])}reset(){this.players.forEach(he=>he.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(he){const ge=he*this.totalTime;this.players.forEach(De=>{const ce=De.totalTime?Math.min(1,ge/De.totalTime):1;De.setPosition(ce)})}getPosition(){const he=this.players.reduce((ge,De)=>null===ge||De.totalTime>ge.totalTime?De:ge,null);return null!=he?he.getPosition():0}beforeDestroy(){this.players.forEach(he=>{he.beforeDestroy&&he.beforeDestroy()})}triggerCallback(he){const ge="start"==he?this._onStartFns:this._onDoneFns;ge.forEach(De=>De()),ge.length=0}}const Ee="!"},12057:(v,T,i)=>{"use strict";i.d(T,{mr:()=>se,Ov:()=>Ws,ez:()=>Eo,K0:()=>y,uU:()=>So,JJ:()=>an,x:()=>Be,Do:()=>ie,Gx:()=>to,Ts:()=>sn,Nd:()=>$e,V_:()=>N,Ye:()=>he,S$:()=>ae,i8:()=>Po,mk:()=>si,sg:()=>co,O5:()=>ls,PC:()=>Il,RF:()=>us,n9:()=>ya,ED:()=>el,tP:()=>fo,b0:()=>Ee,Zx:()=>ti,lw:()=>S,rS:()=>Ls,Tn:()=>Pe,gd:()=>ps,EM:()=>Fs,JF:()=>Zl,p6:()=>_i,Mn:()=>It,ol:()=>tn,UT:()=>Zt,NF:()=>bc,w_:()=>_,bD:()=>ba,q:()=>p,Mx:()=>on,HT:()=>e});var r=i(74788);let u=null;function p(){return u}function e(rt){u||(u=rt)}class _{}const y=new r.OlP("DocumentToken");let S=(()=>{class rt{historyGo(dt){throw new Error("Not implemented")}}return rt.\u0275fac=function(dt){return new(dt||rt)},rt.\u0275prov=(0,r.Yz7)({factory:A,token:rt,providedIn:"platform"}),rt})();function A(){return(0,r.LFG)(L)}const N=new r.OlP("Location Initialized");let L=(()=>{class rt extends S{constructor(dt){super(),this._doc=dt,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return p().getBaseHref(this._doc)}onPopState(dt){const Te=p().getGlobalEventTarget(this._doc,"window");return Te.addEventListener("popstate",dt,!1),()=>Te.removeEventListener("popstate",dt)}onHashChange(dt){const Te=p().getGlobalEventTarget(this._doc,"window");return Te.addEventListener("hashchange",dt,!1),()=>Te.removeEventListener("hashchange",dt)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(dt){this.location.pathname=dt}pushState(dt,Te,Me){Z()?this._history.pushState(dt,Te,Me):this.location.hash=Me}replaceState(dt,Te,Me){Z()?this._history.replaceState(dt,Te,Me):this.location.hash=Me}forward(){this._history.forward()}back(){this._history.back()}historyGo(dt=0){this._history.go(dt)}getState(){return this._history.state}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.LFG(y))},rt.\u0275prov=(0,r.Yz7)({factory:J,token:rt,providedIn:"platform"}),rt})();function Z(){return!!window.history.pushState}function J(){return new L((0,r.LFG)(y))}function K(rt,Pt){if(0==rt.length)return Pt;if(0==Pt.length)return rt;let dt=0;return rt.endsWith("/")&&dt++,Pt.startsWith("/")&&dt++,2==dt?rt+Pt.substring(1):1==dt?rt+Pt:rt+"/"+Pt}function ee(rt){const Pt=rt.match(/#|\?|$/),dt=Pt&&Pt.index||rt.length;return rt.slice(0,dt-("/"===rt[dt-1]?1:0))+rt.slice(dt)}function ue(rt){return rt&&"?"!==rt[0]?"?"+rt:rt}let ae=(()=>{class rt{historyGo(dt){throw new Error("Not implemented")}}return rt.\u0275fac=function(dt){return new(dt||rt)},rt.\u0275prov=(0,r.Yz7)({factory:H,token:rt,providedIn:"root"}),rt})();function H(rt){const Pt=(0,r.LFG)(y).location;return new Ee((0,r.LFG)(S),Pt&&Pt.origin||"")}const se=new r.OlP("appBaseHref");let Ee=(()=>{class rt extends ae{constructor(dt,Te){if(super(),this._platformLocation=dt,this._removeListenerFns=[],null==Te&&(Te=this._platformLocation.getBaseHrefFromDOM()),null==Te)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");this._baseHref=Te}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(dt){this._removeListenerFns.push(this._platformLocation.onPopState(dt),this._platformLocation.onHashChange(dt))}getBaseHref(){return this._baseHref}prepareExternalUrl(dt){return K(this._baseHref,dt)}path(dt=!1){const Te=this._platformLocation.pathname+ue(this._platformLocation.search),Me=this._platformLocation.hash;return Me&&dt?`${Te}${Me}`:Te}pushState(dt,Te,Me,xe){const Ct=this.prepareExternalUrl(Me+ue(xe));this._platformLocation.pushState(dt,Te,Ct)}replaceState(dt,Te,Me,xe){const Ct=this.prepareExternalUrl(Me+ue(xe));this._platformLocation.replaceState(dt,Te,Ct)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}historyGo(dt=0){var Te,Me;null===(Me=(Te=this._platformLocation).historyGo)||void 0===Me||Me.call(Te,dt)}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.LFG(S),r.LFG(se,8))},rt.\u0275prov=r.Yz7({token:rt,factory:rt.\u0275fac}),rt})(),ie=(()=>{class rt extends ae{constructor(dt,Te){super(),this._platformLocation=dt,this._baseHref="",this._removeListenerFns=[],null!=Te&&(this._baseHref=Te)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(dt){this._removeListenerFns.push(this._platformLocation.onPopState(dt),this._platformLocation.onHashChange(dt))}getBaseHref(){return this._baseHref}path(dt=!1){let Te=this._platformLocation.hash;return null==Te&&(Te="#"),Te.length>0?Te.substring(1):Te}prepareExternalUrl(dt){const Te=K(this._baseHref,dt);return Te.length>0?"#"+Te:Te}pushState(dt,Te,Me,xe){let Ct=this.prepareExternalUrl(Me+ue(xe));0==Ct.length&&(Ct=this._platformLocation.pathname),this._platformLocation.pushState(dt,Te,Ct)}replaceState(dt,Te,Me,xe){let Ct=this.prepareExternalUrl(Me+ue(xe));0==Ct.length&&(Ct=this._platformLocation.pathname),this._platformLocation.replaceState(dt,Te,Ct)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}historyGo(dt=0){var Te,Me;null===(Me=(Te=this._platformLocation).historyGo)||void 0===Me||Me.call(Te,dt)}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.LFG(S),r.LFG(se,8))},rt.\u0275prov=r.Yz7({token:rt,factory:rt.\u0275fac}),rt})(),he=(()=>{class rt{constructor(dt,Te){this._subject=new r.vpe,this._urlChangeListeners=[],this._platformStrategy=dt;const Me=this._platformStrategy.getBaseHref();this._platformLocation=Te,this._baseHref=ee(ce(Me)),this._platformStrategy.onPopState(xe=>{this._subject.emit({url:this.path(!0),pop:!0,state:xe.state,type:xe.type})})}path(dt=!1){return this.normalize(this._platformStrategy.path(dt))}getState(){return this._platformLocation.getState()}isCurrentPathEqualTo(dt,Te=""){return this.path()==this.normalize(dt+ue(Te))}normalize(dt){return rt.stripTrailingSlash(function(rt,Pt){return rt&&Pt.startsWith(rt)?Pt.substring(rt.length):Pt}(this._baseHref,ce(dt)))}prepareExternalUrl(dt){return dt&&"/"!==dt[0]&&(dt="/"+dt),this._platformStrategy.prepareExternalUrl(dt)}go(dt,Te="",Me=null){this._platformStrategy.pushState(Me,"",dt,Te),this._notifyUrlChangeListeners(this.prepareExternalUrl(dt+ue(Te)),Me)}replaceState(dt,Te="",Me=null){this._platformStrategy.replaceState(Me,"",dt,Te),this._notifyUrlChangeListeners(this.prepareExternalUrl(dt+ue(Te)),Me)}forward(){this._platformStrategy.forward()}back(){this._platformStrategy.back()}historyGo(dt=0){var Te,Me;null===(Me=(Te=this._platformStrategy).historyGo)||void 0===Me||Me.call(Te,dt)}onUrlChange(dt){this._urlChangeListeners.push(dt),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(Te=>{this._notifyUrlChangeListeners(Te.url,Te.state)}))}_notifyUrlChangeListeners(dt="",Te){this._urlChangeListeners.forEach(Me=>Me(dt,Te))}subscribe(dt,Te,Me){return this._subject.subscribe({next:dt,error:Te,complete:Me})}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.LFG(ae),r.LFG(S))},rt.normalizeQueryParams=ue,rt.joinWithSlash=K,rt.stripTrailingSlash=ee,rt.\u0275prov=(0,r.Yz7)({factory:ge,token:rt,providedIn:"root"}),rt})();function ge(){return new he((0,r.LFG)(ae),(0,r.LFG)(S))}function ce(rt){return rt.replace(/\/index.html$/,"")}var Ve=(()=>((Ve=Ve||{})[Ve.Decimal=0]="Decimal",Ve[Ve.Percent=1]="Percent",Ve[Ve.Currency=2]="Currency",Ve[Ve.Scientific=3]="Scientific",Ve))(),ze=(()=>((ze=ze||{})[ze.Zero=0]="Zero",ze[ze.One=1]="One",ze[ze.Two=2]="Two",ze[ze.Few=3]="Few",ze[ze.Many=4]="Many",ze[ze.Other=5]="Other",ze))(),Be=(()=>((Be=Be||{})[Be.Format=0]="Format",Be[Be.Standalone=1]="Standalone",Be))(),Pe=(()=>((Pe=Pe||{})[Pe.Narrow=0]="Narrow",Pe[Pe.Abbreviated=1]="Abbreviated",Pe[Pe.Wide=2]="Wide",Pe[Pe.Short=3]="Short",Pe))(),je=(()=>((je=je||{})[je.Short=0]="Short",je[je.Medium=1]="Medium",je[je.Long=2]="Long",je[je.Full=3]="Full",je))(),He=(()=>((He=He||{})[He.Decimal=0]="Decimal",He[He.Group=1]="Group",He[He.List=2]="List",He[He.PercentSign=3]="PercentSign",He[He.PlusSign=4]="PlusSign",He[He.MinusSign=5]="MinusSign",He[He.Exponential=6]="Exponential",He[He.SuperscriptingExponent=7]="SuperscriptingExponent",He[He.PerMille=8]="PerMille",He[He.Infinity=9]="Infinity",He[He.NaN=10]="NaN",He[He.TimeSeparator=11]="TimeSeparator",He[He.CurrencyDecimal=12]="CurrencyDecimal",He[He.CurrencyGroup=13]="CurrencyGroup",He))();function tn(rt,Pt,dt){const Te=(0,r.cg1)(rt),xe=fi([Te[r.wAp.DayPeriodsFormat],Te[r.wAp.DayPeriodsStandalone]],Pt);return fi(xe,dt)}function It(rt,Pt,dt){const Te=(0,r.cg1)(rt),xe=fi([Te[r.wAp.DaysFormat],Te[r.wAp.DaysStandalone]],Pt);return fi(xe,dt)}function Zt(rt,Pt,dt){const Te=(0,r.cg1)(rt),xe=fi([Te[r.wAp.MonthsFormat],Te[r.wAp.MonthsStandalone]],Pt);return fi(xe,dt)}function Gt(rt,Pt){return fi((0,r.cg1)(rt)[r.wAp.DateFormat],Pt)}function xt(rt,Pt){return fi((0,r.cg1)(rt)[r.wAp.TimeFormat],Pt)}function Xt(rt,Pt){return fi((0,r.cg1)(rt)[r.wAp.DateTimeFormat],Pt)}function Zn(rt,Pt){const dt=(0,r.cg1)(rt),Te=dt[r.wAp.NumberSymbols][Pt];if(void 0===Te){if(Pt===He.CurrencyDecimal)return dt[r.wAp.NumberSymbols][He.Decimal];if(Pt===He.CurrencyGroup)return dt[r.wAp.NumberSymbols][He.Group]}return Te}function Ur(rt,Pt){return(0,r.cg1)(rt)[r.wAp.NumberFormats][Pt]}const ei=r.kL8;function Nn(rt){if(!rt[r.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${rt[r.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function fi(rt,Pt){for(let dt=Pt;dt>-1;dt--)if(void 0!==rt[dt])return rt[dt];throw new Error("Locale data API: locale data undefined")}function ki(rt){const[Pt,dt]=rt.split(":");return{hours:+Pt,minutes:+dt}}const Wt=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,zn={},rr=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Fr=(()=>((Fr=Fr||{})[Fr.Short=0]="Short",Fr[Fr.ShortGMT=1]="ShortGMT",Fr[Fr.Long=2]="Long",Fr[Fr.Extended=3]="Extended",Fr))(),Gn=(()=>((Gn=Gn||{})[Gn.FullYear=0]="FullYear",Gn[Gn.Month=1]="Month",Gn[Gn.Date=2]="Date",Gn[Gn.Hours=3]="Hours",Gn[Gn.Minutes=4]="Minutes",Gn[Gn.Seconds=5]="Seconds",Gn[Gn.FractionalSeconds=6]="FractionalSeconds",Gn[Gn.Day=7]="Day",Gn))(),Jr=(()=>((Jr=Jr||{})[Jr.DayPeriods=0]="DayPeriods",Jr[Jr.Days=1]="Days",Jr[Jr.Months=2]="Months",Jr[Jr.Eras=3]="Eras",Jr))();function _i(rt,Pt,dt,Te){let Me=function(rt){if(lo(rt))return rt;if("number"==typeof rt&&!isNaN(rt))return new Date(rt);if("string"==typeof rt){if(rt=rt.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(rt)){const[Me,xe=1,Ct=1]=rt.split("-").map(ur=>+ur);return wi(Me,xe-1,Ct)}const dt=parseFloat(rt);if(!isNaN(rt-dt))return new Date(dt);let Te;if(Te=rt.match(Wt))return function(rt){const Pt=new Date(0);let dt=0,Te=0;const Me=rt[8]?Pt.setUTCFullYear:Pt.setFullYear,xe=rt[8]?Pt.setUTCHours:Pt.setHours;rt[9]&&(dt=Number(rt[9]+rt[10]),Te=Number(rt[9]+rt[11])),Me.call(Pt,Number(rt[1]),Number(rt[2])-1,Number(rt[3]));const Ct=Number(rt[4]||0)-dt,ur=Number(rt[5]||0)-Te,Qi=Number(rt[6]||0),Go=Math.floor(1e3*parseFloat("0."+(rt[7]||0)));return xe.call(Pt,Ct,ur,Qi,Go),Pt}(Te)}const Pt=new Date(rt);if(!lo(Pt))throw new Error(`Unable to convert "${rt}" into a date`);return Pt}(rt);Pt=br(dt,Pt)||Pt;let ur,Ct=[];for(;Pt;){if(ur=rr.exec(Pt),!ur){Ct.push(Pt);break}{Ct=Ct.concat(ur.slice(1));const ms=Ct.pop();if(!ms)break;Pt=ms}}let Qi=Me.getTimezoneOffset();Te&&(Qi=Wr(Te,Qi),Me=function(rt,Pt,dt){const Me=rt.getTimezoneOffset();return function(rt,Pt){return(rt=new Date(rt.getTime())).setMinutes(rt.getMinutes()+Pt),rt}(rt,-1*(Wr(Pt,Me)-Me))}(Me,Te));let Go="";return Ct.forEach(ms=>{const hs=function(rt){if(An[rt])return An[rt];let Pt;switch(rt){case"G":case"GG":case"GGG":Pt=Vn(Jr.Eras,Pe.Abbreviated);break;case"GGGG":Pt=Vn(Jr.Eras,Pe.Wide);break;case"GGGGG":Pt=Vn(Jr.Eras,Pe.Narrow);break;case"y":Pt=gr(Gn.FullYear,1,0,!1,!0);break;case"yy":Pt=gr(Gn.FullYear,2,0,!0,!0);break;case"yyy":Pt=gr(Gn.FullYear,3,0,!1,!0);break;case"yyyy":Pt=gr(Gn.FullYear,4,0,!1,!0);break;case"Y":Pt=mi(1);break;case"YY":Pt=mi(2,!0);break;case"YYY":Pt=mi(3);break;case"YYYY":Pt=mi(4);break;case"M":case"L":Pt=gr(Gn.Month,1,1);break;case"MM":case"LL":Pt=gr(Gn.Month,2,1);break;case"MMM":Pt=Vn(Jr.Months,Pe.Abbreviated);break;case"MMMM":Pt=Vn(Jr.Months,Pe.Wide);break;case"MMMMM":Pt=Vn(Jr.Months,Pe.Narrow);break;case"LLL":Pt=Vn(Jr.Months,Pe.Abbreviated,Be.Standalone);break;case"LLLL":Pt=Vn(Jr.Months,Pe.Wide,Be.Standalone);break;case"LLLLL":Pt=Vn(Jr.Months,Pe.Narrow,Be.Standalone);break;case"w":Pt=kr(1);break;case"ww":Pt=kr(2);break;case"W":Pt=kr(1,!0);break;case"d":Pt=gr(Gn.Date,1);break;case"dd":Pt=gr(Gn.Date,2);break;case"c":case"cc":Pt=gr(Gn.Day,1);break;case"ccc":Pt=Vn(Jr.Days,Pe.Abbreviated,Be.Standalone);break;case"cccc":Pt=Vn(Jr.Days,Pe.Wide,Be.Standalone);break;case"ccccc":Pt=Vn(Jr.Days,Pe.Narrow,Be.Standalone);break;case"cccccc":Pt=Vn(Jr.Days,Pe.Short,Be.Standalone);break;case"E":case"EE":case"EEE":Pt=Vn(Jr.Days,Pe.Abbreviated);break;case"EEEE":Pt=Vn(Jr.Days,Pe.Wide);break;case"EEEEE":Pt=Vn(Jr.Days,Pe.Narrow);break;case"EEEEEE":Pt=Vn(Jr.Days,Pe.Short);break;case"a":case"aa":case"aaa":Pt=Vn(Jr.DayPeriods,Pe.Abbreviated);break;case"aaaa":Pt=Vn(Jr.DayPeriods,Pe.Wide);break;case"aaaaa":Pt=Vn(Jr.DayPeriods,Pe.Narrow);break;case"b":case"bb":case"bbb":Pt=Vn(Jr.DayPeriods,Pe.Abbreviated,Be.Standalone,!0);break;case"bbbb":Pt=Vn(Jr.DayPeriods,Pe.Wide,Be.Standalone,!0);break;case"bbbbb":Pt=Vn(Jr.DayPeriods,Pe.Narrow,Be.Standalone,!0);break;case"B":case"BB":case"BBB":Pt=Vn(Jr.DayPeriods,Pe.Abbreviated,Be.Format,!0);break;case"BBBB":Pt=Vn(Jr.DayPeriods,Pe.Wide,Be.Format,!0);break;case"BBBBB":Pt=Vn(Jr.DayPeriods,Pe.Narrow,Be.Format,!0);break;case"h":Pt=gr(Gn.Hours,1,-12);break;case"hh":Pt=gr(Gn.Hours,2,-12);break;case"H":Pt=gr(Gn.Hours,1);break;case"HH":Pt=gr(Gn.Hours,2);break;case"m":Pt=gr(Gn.Minutes,1);break;case"mm":Pt=gr(Gn.Minutes,2);break;case"s":Pt=gr(Gn.Seconds,1);break;case"ss":Pt=gr(Gn.Seconds,2);break;case"S":Pt=gr(Gn.FractionalSeconds,1);break;case"SS":Pt=gr(Gn.FractionalSeconds,2);break;case"SSS":Pt=gr(Gn.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":Pt=Dn(Fr.Short);break;case"ZZZZZ":Pt=Dn(Fr.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":Pt=Dn(Fr.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":Pt=Dn(Fr.Long);break;default:return null}return An[rt]=Pt,Pt}(ms);Go+=hs?hs(Me,dt,Qi):"''"===ms?"'":ms.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Go}function wi(rt,Pt,dt){const Te=new Date(0);return Te.setFullYear(rt,Pt,dt),Te.setHours(0,0,0),Te}function br(rt,Pt){const dt=function(rt){return(0,r.cg1)(rt)[r.wAp.LocaleId]}(rt);if(zn[dt]=zn[dt]||{},zn[dt][Pt])return zn[dt][Pt];let Te="";switch(Pt){case"shortDate":Te=Gt(rt,je.Short);break;case"mediumDate":Te=Gt(rt,je.Medium);break;case"longDate":Te=Gt(rt,je.Long);break;case"fullDate":Te=Gt(rt,je.Full);break;case"shortTime":Te=xt(rt,je.Short);break;case"mediumTime":Te=xt(rt,je.Medium);break;case"longTime":Te=xt(rt,je.Long);break;case"fullTime":Te=xt(rt,je.Full);break;case"short":const Me=br(rt,"shortTime"),xe=br(rt,"shortDate");Te=Dr(Xt(rt,je.Short),[Me,xe]);break;case"medium":const Ct=br(rt,"mediumTime"),ur=br(rt,"mediumDate");Te=Dr(Xt(rt,je.Medium),[Ct,ur]);break;case"long":const Qi=br(rt,"longTime"),Go=br(rt,"longDate");Te=Dr(Xt(rt,je.Long),[Qi,Go]);break;case"full":const ms=br(rt,"fullTime"),hs=br(rt,"fullDate");Te=Dr(Xt(rt,je.Full),[ms,hs])}return Te&&(zn[dt][Pt]=Te),Te}function Dr(rt,Pt){return Pt&&(rt=rt.replace(/\{([^}]+)}/g,function(dt,Te){return null!=Pt&&Te in Pt?Pt[Te]:dt})),rt}function gn(rt,Pt,dt="-",Te,Me){let xe="";(rt<0||Me&&rt<=0)&&(Me?rt=1-rt:(rt=-rt,xe=dt));let Ct=String(rt);for(;Ct.length0||ur>-dt)&&(ur+=dt),rt===Gn.Hours)0===ur&&-12===dt&&(ur=12);else if(rt===Gn.FractionalSeconds)return function(rt,Pt){return gn(rt,3).substr(0,Pt)}(ur,Pt);const Qi=Zn(Ct,He.MinusSign);return gn(ur,Pt,Qi,Te,Me)}}function Vn(rt,Pt,dt=Be.Format,Te=!1){return function(Me,xe){return function(rt,Pt,dt,Te,Me,xe){switch(dt){case Jr.Months:return Zt(Pt,Me,Te)[rt.getMonth()];case Jr.Days:return It(Pt,Me,Te)[rt.getDay()];case Jr.DayPeriods:const Ct=rt.getHours(),ur=rt.getMinutes();if(xe){const Go=function(rt){const Pt=(0,r.cg1)(rt);return Nn(Pt),(Pt[r.wAp.ExtraData][2]||[]).map(Te=>"string"==typeof Te?ki(Te):[ki(Te[0]),ki(Te[1])])}(Pt),ms=function(rt,Pt,dt){const Te=(0,r.cg1)(rt);Nn(Te);const xe=fi([Te[r.wAp.ExtraData][0],Te[r.wAp.ExtraData][1]],Pt)||[];return fi(xe,dt)||[]}(Pt,Me,Te),hs=Go.findIndex(Ts=>{if(Array.isArray(Ts)){const[Ma,au]=Ts,Wa=Ct>=Ma.hours&&ur>=Ma.minutes,Rl=Ct0?Math.floor(Me/60):Math.ceil(Me/60);switch(rt){case Fr.Short:return(Me>=0?"+":"")+gn(Ct,2,xe)+gn(Math.abs(Me%60),2,xe);case Fr.ShortGMT:return"GMT"+(Me>=0?"+":"")+gn(Ct,1,xe);case Fr.Long:return"GMT"+(Me>=0?"+":"")+gn(Ct,2,xe)+":"+gn(Math.abs(Me%60),2,xe);case Fr.Extended:return 0===Te?"Z":(Me>=0?"+":"")+gn(Ct,2,xe)+":"+gn(Math.abs(Me%60),2,xe);default:throw new Error(`Unknown zone width "${rt}"`)}}}function Ge(rt){return wi(rt.getFullYear(),rt.getMonth(),rt.getDate()+(4-rt.getDay()))}function kr(rt,Pt=!1){return function(dt,Te){let Me;if(Pt){const xe=new Date(dt.getFullYear(),dt.getMonth(),1).getDay()-1,Ct=dt.getDate();Me=1+Math.floor((Ct+xe)/7)}else{const xe=Ge(dt),Ct=function(rt){const Pt=wi(rt,0,1).getDay();return wi(rt,0,1+(Pt<=4?4:11)-Pt)}(xe.getFullYear()),ur=xe.getTime()-Ct.getTime();Me=1+Math.round(ur/6048e5)}return gn(Me,rt,Zn(Te,He.MinusSign))}}function mi(rt,Pt=!1){return function(dt,Te){return gn(Ge(dt).getFullYear(),rt,Zn(Te,He.MinusSign),Pt)}}const An={};function Wr(rt,Pt){rt=rt.replace(/:/g,"");const dt=Date.parse("Jan 01, 1970 00:00:00 "+rt)/6e4;return isNaN(dt)?Pt:dt}function lo(rt){return rt instanceof Date&&!isNaN(rt.valueOf())}const vo=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function lr(rt,Pt,dt,Te,Me,xe,Ct=!1){let ur="",Qi=!1;if(isFinite(rt)){let Go=function(rt){let Te,Me,xe,Ct,ur,Pt=Math.abs(rt)+"",dt=0;for((Me=Pt.indexOf("."))>-1&&(Pt=Pt.replace(".","")),(xe=Pt.search(/e/i))>0?(Me<0&&(Me=xe),Me+=+Pt.slice(xe+1),Pt=Pt.substring(0,xe)):Me<0&&(Me=Pt.length),xe=0;"0"===Pt.charAt(xe);xe++);if(xe===(ur=Pt.length))Te=[0],Me=1;else{for(ur--;"0"===Pt.charAt(ur);)ur--;for(Me-=xe,Te=[],Ct=0;xe<=ur;xe++,Ct++)Te[Ct]=Number(Pt.charAt(xe))}return Me>22&&(Te=Te.splice(0,21),dt=Me-1,Me=1),{digits:Te,exponent:dt,integerLen:Me}}(rt);Ct&&(Go=function(rt){if(0===rt.digits[0])return rt;const Pt=rt.digits.length-rt.integerLen;return rt.exponent?rt.exponent+=2:(0===Pt?rt.digits.push(0,0):1===Pt&&rt.digits.push(0),rt.integerLen+=2),rt}(Go));let ms=Pt.minInt,hs=Pt.minFrac,Ts=Pt.maxFrac;if(xe){const Al=xe.match(vo);if(null===Al)throw new Error(`${xe} is not a valid digit info`);const vs=Al[1],Lc=Al[3],Tc=Al[5];null!=vs&&(ms=Ar(vs)),null!=Lc&&(hs=Ar(Lc)),null!=Tc?Ts=Ar(Tc):null!=Lc&&hs>Ts&&(Ts=hs)}!function(rt,Pt,dt){if(Pt>dt)throw new Error(`The minimum number of digits after fraction (${Pt}) is higher than the maximum (${dt}).`);let Te=rt.digits,Me=Te.length-rt.integerLen;const xe=Math.min(Math.max(Pt,Me),dt);let Ct=xe+rt.integerLen,ur=Te[Ct];if(Ct>0){Te.splice(Math.max(rt.integerLen,Ct));for(let hs=Ct;hs=5)if(Ct-1<0){for(let hs=0;hs>Ct;hs--)Te.unshift(0),rt.integerLen++;Te.unshift(1),rt.integerLen++}else Te[Ct-1]++;for(;Me=Go?au.pop():Qi=!1),Ts>=10?1:0},0);ms&&(Te.unshift(ms),rt.integerLen++)}(Go,hs,Ts);let Ma=Go.digits,au=Go.integerLen;const Wa=Go.exponent;let Rl=[];for(Qi=Ma.every(Al=>!Al);au0?Rl=Ma.splice(au,Ma.length):(Rl=Ma,Ma=[0]);const nc=[];for(Ma.length>=Pt.lgSize&&nc.unshift(Ma.splice(-Pt.lgSize,Ma.length).join(""));Ma.length>Pt.gSize;)nc.unshift(Ma.splice(-Pt.gSize,Ma.length).join(""));Ma.length&&nc.unshift(Ma.join("")),ur=nc.join(Zn(dt,Te)),Rl.length&&(ur+=Zn(dt,Me)+Rl.join("")),Wa&&(ur+=Zn(dt,He.Exponential)+"+"+Wa)}else ur=Zn(dt,He.Infinity);return ur=rt<0&&!Qi?Pt.negPre+ur+Pt.negSuf:Pt.posPre+ur+Pt.posSuf,ur}function uo(rt,Pt="-"){const dt={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},Te=rt.split(";"),Me=Te[0],xe=Te[1],Ct=-1!==Me.indexOf(".")?Me.split("."):[Me.substring(0,Me.lastIndexOf("0")+1),Me.substring(Me.lastIndexOf("0")+1)],ur=Ct[0],Qi=Ct[1]||"";dt.posPre=ur.substr(0,ur.indexOf("#"));for(let ms=0;ms{class rt extends Rt{constructor(dt){super(),this.locale=dt}getPluralCategory(dt,Te){switch(ei(Te||this.locale)(dt)){case ze.Zero:return"zero";case ze.One:return"one";case ze.Two:return"two";case ze.Few:return"few";case ze.Many:return"many";default:return"other"}}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.LFG(r.soG))},rt.\u0275prov=r.Yz7({token:rt,factory:rt.\u0275fac}),rt})();function on(rt,Pt){Pt=encodeURIComponent(Pt);for(const dt of rt.split(";")){const Te=dt.indexOf("="),[Me,xe]=-1==Te?[dt,""]:[dt.slice(0,Te),dt.slice(Te+1)];if(Me.trim()===Pt)return decodeURIComponent(xe)}return null}let si=(()=>{class rt{constructor(dt,Te,Me,xe){this._iterableDiffers=dt,this._keyValueDiffers=Te,this._ngEl=Me,this._renderer=xe,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(dt){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof dt?dt.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(dt){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof dt?dt.split(/\s+/):dt,this._rawClass&&((0,r.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const dt=this._iterableDiffer.diff(this._rawClass);dt&&this._applyIterableChanges(dt)}else if(this._keyValueDiffer){const dt=this._keyValueDiffer.diff(this._rawClass);dt&&this._applyKeyValueChanges(dt)}}_applyKeyValueChanges(dt){dt.forEachAddedItem(Te=>this._toggleClass(Te.key,Te.currentValue)),dt.forEachChangedItem(Te=>this._toggleClass(Te.key,Te.currentValue)),dt.forEachRemovedItem(Te=>{Te.previousValue&&this._toggleClass(Te.key,!1)})}_applyIterableChanges(dt){dt.forEachAddedItem(Te=>{if("string"!=typeof Te.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,r.AaK)(Te.item)}`);this._toggleClass(Te.item,!0)}),dt.forEachRemovedItem(Te=>this._toggleClass(Te.item,!1))}_applyClasses(dt){dt&&(Array.isArray(dt)||dt instanceof Set?dt.forEach(Te=>this._toggleClass(Te,!0)):Object.keys(dt).forEach(Te=>this._toggleClass(Te,!!dt[Te])))}_removeClasses(dt){dt&&(Array.isArray(dt)||dt instanceof Set?dt.forEach(Te=>this._toggleClass(Te,!1)):Object.keys(dt).forEach(Te=>this._toggleClass(Te,!1)))}_toggleClass(dt,Te){(dt=dt.trim())&&dt.split(/\s+/g).forEach(Me=>{Te?this._renderer.addClass(this._ngEl.nativeElement,Me):this._renderer.removeClass(this._ngEl.nativeElement,Me)})}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.ZZ4),r.Y36(r.aQg),r.Y36(r.SBq),r.Y36(r.Qsj))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"}}),rt})();class _o{constructor(Pt,dt,Te,Me){this.$implicit=Pt,this.ngForOf=dt,this.index=Te,this.count=Me}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let co=(()=>{class rt{constructor(dt,Te,Me){this._viewContainer=dt,this._template=Te,this._differs=Me,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(dt){this._ngForOf=dt,this._ngForOfDirty=!0}set ngForTrackBy(dt){this._trackByFn=dt}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(dt){dt&&(this._template=dt)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const dt=this._ngForOf;if(!this._differ&&dt)try{this._differ=this._differs.find(dt).create(this.ngForTrackBy)}catch(Te){throw new Error(`Cannot find a differ supporting object '${dt}' of type '${function(rt){return rt.name||typeof rt}(dt)}'. NgFor only supports binding to Iterables such as Arrays.`)}}if(this._differ){const dt=this._differ.diff(this._ngForOf);dt&&this._applyChanges(dt)}}_applyChanges(dt){const Te=[];dt.forEachOperation((Me,xe,Ct)=>{if(null==Me.previousIndex){const ur=this._viewContainer.createEmbeddedView(this._template,new _o(null,this._ngForOf,-1,-1),null===Ct?void 0:Ct),Qi=new Es(Me,ur);Te.push(Qi)}else if(null==Ct)this._viewContainer.remove(null===xe?void 0:xe);else if(null!==xe){const ur=this._viewContainer.get(xe);this._viewContainer.move(ur,Ct);const Qi=new Es(Me,ur);Te.push(Qi)}});for(let Me=0;Me{this._viewContainer.get(Me.currentIndex).context.$implicit=Me.item})}_perViewChange(dt,Te){dt.context.$implicit=Te.item}static ngTemplateContextGuard(dt,Te){return!0}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(r.ZZ4))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}}),rt})();class Es{constructor(Pt,dt){this.record=Pt,this.view=dt}}let ls=(()=>{class rt{constructor(dt,Te){this._viewContainer=dt,this._context=new La,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=Te}set ngIf(dt){this._context.$implicit=this._context.ngIf=dt,this._updateView()}set ngIfThen(dt){ta("ngIfThen",dt),this._thenTemplateRef=dt,this._thenViewRef=null,this._updateView()}set ngIfElse(dt){ta("ngIfElse",dt),this._elseTemplateRef=dt,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(dt,Te){return!0}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}}),rt})();class La{constructor(){this.$implicit=null,this.ngIf=null}}function ta(rt,Pt){if(Pt&&!Pt.createEmbeddedView)throw new Error(`${rt} must be a TemplateRef, but received '${(0,r.AaK)(Pt)}'.`)}class Is{constructor(Pt,dt){this._viewContainerRef=Pt,this._templateRef=dt,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(Pt){Pt&&!this._created?this.create():!Pt&&this._created&&this.destroy()}}let us=(()=>{class rt{constructor(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(dt){this._ngSwitch=dt,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(dt){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(dt)}_matchCase(dt){const Te=dt==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||Te,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),Te}_updateDefaultCases(dt){if(this._defaultViews&&dt!==this._defaultUsed){this._defaultUsed=dt;for(let Te=0;Te{class rt{constructor(dt,Te,Me){this.ngSwitch=Me,Me._addCase(),this._view=new Is(dt,Te)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(us,9))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"}}),rt})(),el=(()=>{class rt{constructor(dt,Te,Me){Me._addDefault(new Is(dt,Te))}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(us,9))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngSwitchDefault",""]]}),rt})(),Il=(()=>{class rt{constructor(dt,Te,Me){this._ngEl=dt,this._differs=Te,this._renderer=Me,this._ngStyle=null,this._differ=null}set ngStyle(dt){this._ngStyle=dt,!this._differ&&dt&&(this._differ=this._differs.find(dt).create())}ngDoCheck(){if(this._differ){const dt=this._differ.diff(this._ngStyle);dt&&this._applyChanges(dt)}}_setStyle(dt,Te){const[Me,xe]=dt.split(".");null!=(Te=null!=Te&&xe?`${Te}${xe}`:Te)?this._renderer.setStyle(this._ngEl.nativeElement,Me,Te):this._renderer.removeStyle(this._ngEl.nativeElement,Me)}_applyChanges(dt){dt.forEachRemovedItem(Te=>this._setStyle(Te.key,null)),dt.forEachAddedItem(Te=>this._setStyle(Te.key,Te.currentValue)),dt.forEachChangedItem(Te=>this._setStyle(Te.key,Te.currentValue))}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.SBq),r.Y36(r.aQg),r.Y36(r.Qsj))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"}}),rt})(),fo=(()=>{class rt{constructor(dt){this._viewContainerRef=dt,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null}ngOnChanges(dt){if(dt.ngTemplateOutlet){const Te=this._viewContainerRef;this._viewRef&&Te.remove(Te.indexOf(this._viewRef)),this._viewRef=this.ngTemplateOutlet?Te.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext):null}else this._viewRef&&dt.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.s_b))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet"},features:[r.TTD]}),rt})();function Ao(rt,Pt){return Error(`InvalidPipeArgument: '${Pt}' for pipe '${(0,r.AaK)(rt)}'`)}class fs{createSubscription(Pt,dt){return Pt.subscribe({next:dt,error:Te=>{throw Te}})}dispose(Pt){Pt.unsubscribe()}onDestroy(Pt){Pt.unsubscribe()}}class Ca{createSubscription(Pt,dt){return Pt.then(dt,Te=>{throw Te})}dispose(Pt){}onDestroy(Pt){}}const Ra=new Ca,pl=new fs;let Ws=(()=>{class rt{constructor(dt){this._ref=dt,this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null}ngOnDestroy(){this._subscription&&this._dispose()}transform(dt){return this._obj?dt!==this._obj?(this._dispose(),this.transform(dt)):this._latestValue:(dt&&this._subscribe(dt),this._latestValue)}_subscribe(dt){this._obj=dt,this._strategy=this._selectStrategy(dt),this._subscription=this._strategy.createSubscription(dt,Te=>this._updateLatestValue(dt,Te))}_selectStrategy(dt){if((0,r.QGY)(dt))return Ra;if((0,r.F4k)(dt))return pl;throw Ao(rt,dt)}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(dt,Te){dt===this._obj&&(this._latestValue=Te,this._ref.markForCheck())}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.sBO,16))},rt.\u0275pipe=r.Yjl({name:"async",type:rt,pure:!1}),rt})(),Po=(()=>{class rt{transform(dt){if(null==dt)return null;if("string"!=typeof dt)throw Ao(rt,dt);return dt.toLowerCase()}}return rt.\u0275fac=function(dt){return new(dt||rt)},rt.\u0275pipe=r.Yjl({name:"lowercase",type:rt,pure:!0}),rt})();const bo=/(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;let Ls=(()=>{class rt{transform(dt){if(null==dt)return null;if("string"!=typeof dt)throw Ao(rt,dt);return dt.replace(bo,Te=>Te[0].toUpperCase()+Te.substr(1).toLowerCase())}}return rt.\u0275fac=function(dt){return new(dt||rt)},rt.\u0275pipe=r.Yjl({name:"titlecase",type:rt,pure:!0}),rt})(),ps=(()=>{class rt{transform(dt){if(null==dt)return null;if("string"!=typeof dt)throw Ao(rt,dt);return dt.toUpperCase()}}return rt.\u0275fac=function(dt){return new(dt||rt)},rt.\u0275pipe=r.Yjl({name:"uppercase",type:rt,pure:!0}),rt})(),So=(()=>{class rt{constructor(dt){this.locale=dt}transform(dt,Te="mediumDate",Me,xe){if(null==dt||""===dt||dt!=dt)return null;try{return _i(dt,Te,xe||this.locale,Me)}catch(Ct){throw Ao(rt,Ct.message)}}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.soG,16))},rt.\u0275pipe=r.Yjl({name:"date",type:rt,pure:!0}),rt})();const $r=/#/g;let to=(()=>{class rt{constructor(dt){this._localization=dt}transform(dt,Te,Me){if(null==dt)return"";if("object"!=typeof Te||null===Te)throw Ao(rt,Te);return Te[function(rt,Pt,dt,Te){let Me=`=${rt}`;if(Pt.indexOf(Me)>-1||(Me=dt.getPluralCategory(rt,Te),Pt.indexOf(Me)>-1))return Me;if(Pt.indexOf("other")>-1)return"other";throw new Error(`No plural message found for value "${rt}"`)}(dt,Object.keys(Te),this._localization,Me)].replace($r,dt.toString())}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(Rt,16))},rt.\u0275pipe=r.Yjl({name:"i18nPlural",type:rt,pure:!0}),rt})(),sn=(()=>{class rt{transform(dt){return JSON.stringify(dt,null,2)}}return rt.\u0275fac=function(dt){return new(dt||rt)},rt.\u0275pipe=r.Yjl({name:"json",type:rt,pure:!1}),rt})(),$e=(()=>{class rt{constructor(dt){this.differs=dt,this.keyValues=[],this.compareFn=Lt}transform(dt,Te=Lt){if(!dt||!(dt instanceof Map)&&"object"!=typeof dt)return null;this.differ||(this.differ=this.differs.find(dt).create());const Me=this.differ.diff(dt),xe=Te!==this.compareFn;return Me&&(this.keyValues=[],Me.forEachItem(Ct=>{this.keyValues.push(function(rt,Pt){return{key:rt,value:Pt}}(Ct.key,Ct.currentValue))})),(Me||xe)&&(this.keyValues.sort(Te),this.compareFn=Te),this.keyValues}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.aQg,16))},rt.\u0275pipe=r.Yjl({name:"keyvalue",type:rt,pure:!1}),rt})();function Lt(rt,Pt){const dt=rt.key,Te=Pt.key;if(dt===Te)return 0;if(void 0===dt)return 1;if(void 0===Te)return-1;if(null===dt)return 1;if(null===Te)return-1;if("string"==typeof dt&&"string"==typeof Te)return dt{class rt{constructor(dt){this._locale=dt}transform(dt,Te,Me){if(!xi(dt))return null;Me=Me||this._locale;try{return function(rt,Pt,dt){return lr(rt,uo(Ur(Pt,Ve.Decimal),Zn(Pt,He.MinusSign)),Pt,He.Group,He.Decimal,dt)}(ts(dt),Me,Te)}catch(xe){throw Ao(rt,xe.message)}}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.soG,16))},rt.\u0275pipe=r.Yjl({name:"number",type:rt,pure:!0}),rt})(),ti=(()=>{class rt{constructor(dt){this._locale=dt}transform(dt,Te,Me){if(!xi(dt))return null;Me=Me||this._locale;try{return function(rt,Pt,dt){return lr(rt,uo(Ur(Pt,Ve.Percent),Zn(Pt,He.MinusSign)),Pt,He.Group,He.Decimal,dt,!0).replace(new RegExp("%","g"),Zn(Pt,He.PercentSign))}(ts(dt),Me,Te)}catch(xe){throw Ao(rt,xe.message)}}}return rt.\u0275fac=function(dt){return new(dt||rt)(r.Y36(r.soG,16))},rt.\u0275pipe=r.Yjl({name:"percent",type:rt,pure:!0}),rt})();function xi(rt){return!(null==rt||""===rt||rt!=rt)}function ts(rt){if("string"==typeof rt&&!isNaN(Number(rt)-parseFloat(rt)))return Number(rt);if("number"!=typeof rt)throw new Error(`${rt} is not a number`);return rt}let Eo=(()=>{class rt{}return rt.\u0275fac=function(dt){return new(dt||rt)},rt.\u0275mod=r.oAB({type:rt}),rt.\u0275inj=r.cJS({providers:[{provide:Rt,useClass:mt}]}),rt})();const ba="browser";function bc(rt){return rt===ba}let Fs=(()=>{class rt{}return rt.\u0275prov=(0,r.Yz7)({token:rt,providedIn:"root",factory:()=>new dc((0,r.LFG)(y),window)}),rt})();class dc{constructor(Pt,dt){this.document=Pt,this.window=dt,this.offset=()=>[0,0]}setOffset(Pt){this.offset=Array.isArray(Pt)?()=>Pt:Pt}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(Pt){this.supportsScrolling()&&this.window.scrollTo(Pt[0],Pt[1])}scrollToAnchor(Pt){if(!this.supportsScrolling())return;const dt=function(rt,Pt){const dt=rt.getElementById(Pt)||rt.getElementsByName(Pt)[0];if(dt)return dt;if("function"==typeof rt.createTreeWalker&&rt.body&&(rt.body.createShadowRoot||rt.body.attachShadow)){const Te=rt.createTreeWalker(rt.body,NodeFilter.SHOW_ELEMENT);let Me=Te.currentNode;for(;Me;){const xe=Me.shadowRoot;if(xe){const Ct=xe.getElementById(Pt)||xe.querySelector(`[name="${Pt}"]`);if(Ct)return Ct}Me=Te.nextNode()}}return null}(this.document,Pt);dt&&(this.scrollToElement(dt),this.attemptFocus(dt))}setHistoryScrollRestoration(Pt){if(this.supportScrollRestoration()){const dt=this.window.history;dt&&dt.scrollRestoration&&(dt.scrollRestoration=Pt)}}scrollToElement(Pt){const dt=Pt.getBoundingClientRect(),Te=dt.left+this.window.pageXOffset,Me=dt.top+this.window.pageYOffset,xe=this.offset();this.window.scrollTo(Te-xe[0],Me-xe[1])}attemptFocus(Pt){return Pt.focus(),this.document.activeElement===Pt}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const Pt=iu(this.window.history)||iu(Object.getPrototypeOf(this.window.history));return!(!Pt||!Pt.writable&&!Pt.set)}catch(Pt){return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch(Pt){return!1}}}function iu(rt){return Object.getOwnPropertyDescriptor(rt,"scrollRestoration")}class Zl{}},58497:(v,T,i)=>{"use strict";i.d(T,{TP:()=>it,eN:()=>He,JF:()=>fi,UA:()=>Pe,LE:()=>ae});var r=i(12057),u=i(74788),p=i(25917),d=i(18891),e=i(94612),_=i(45435),y=i(88002);class S{}class A{}class N{constructor(Cn){this.normalizedNames=new Map,this.lazyUpdate=null,Cn?this.lazyInit="string"==typeof Cn?()=>{this.headers=new Map,Cn.split("\n").forEach(Wt=>{const zn=Wt.indexOf(":");if(zn>0){const rr=Wt.slice(0,zn),Fr=rr.toLowerCase(),Gn=Wt.slice(zn+1).trim();this.maybeSetNormalizedName(rr,Fr),this.headers.has(Fr)?this.headers.get(Fr).push(Gn):this.headers.set(Fr,[Gn])}})}:()=>{this.headers=new Map,Object.keys(Cn).forEach(Wt=>{let zn=Cn[Wt];const rr=Wt.toLowerCase();"string"==typeof zn&&(zn=[zn]),zn.length>0&&(this.headers.set(rr,zn),this.maybeSetNormalizedName(Wt,rr))})}:this.headers=new Map}has(Cn){return this.init(),this.headers.has(Cn.toLowerCase())}get(Cn){this.init();const Wt=this.headers.get(Cn.toLowerCase());return Wt&&Wt.length>0?Wt[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(Cn){return this.init(),this.headers.get(Cn.toLowerCase())||null}append(Cn,Wt){return this.clone({name:Cn,value:Wt,op:"a"})}set(Cn,Wt){return this.clone({name:Cn,value:Wt,op:"s"})}delete(Cn,Wt){return this.clone({name:Cn,value:Wt,op:"d"})}maybeSetNormalizedName(Cn,Wt){this.normalizedNames.has(Wt)||this.normalizedNames.set(Wt,Cn)}init(){this.lazyInit&&(this.lazyInit instanceof N?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(Cn=>this.applyUpdate(Cn)),this.lazyUpdate=null))}copyFrom(Cn){Cn.init(),Array.from(Cn.headers.keys()).forEach(Wt=>{this.headers.set(Wt,Cn.headers.get(Wt)),this.normalizedNames.set(Wt,Cn.normalizedNames.get(Wt))})}clone(Cn){const Wt=new N;return Wt.lazyInit=this.lazyInit&&this.lazyInit instanceof N?this.lazyInit:this,Wt.lazyUpdate=(this.lazyUpdate||[]).concat([Cn]),Wt}applyUpdate(Cn){const Wt=Cn.name.toLowerCase();switch(Cn.op){case"a":case"s":let zn=Cn.value;if("string"==typeof zn&&(zn=[zn]),0===zn.length)return;this.maybeSetNormalizedName(Cn.name,Wt);const rr=("a"===Cn.op?this.headers.get(Wt):void 0)||[];rr.push(...zn),this.headers.set(Wt,rr);break;case"d":const Fr=Cn.value;if(Fr){let Gn=this.headers.get(Wt);if(!Gn)return;Gn=Gn.filter(Jr=>-1===Fr.indexOf(Jr)),0===Gn.length?(this.headers.delete(Wt),this.normalizedNames.delete(Wt)):this.headers.set(Wt,Gn)}else this.headers.delete(Wt),this.normalizedNames.delete(Wt)}}forEach(Cn){this.init(),Array.from(this.normalizedNames.keys()).forEach(Wt=>Cn(this.normalizedNames.get(Wt),this.headers.get(Wt)))}}class L{encodeKey(Cn){return ee(Cn)}encodeValue(Cn){return ee(Cn)}decodeKey(Cn){return decodeURIComponent(Cn)}decodeValue(Cn){return decodeURIComponent(Cn)}}const J=/%(\d[a-f0-9])/gi,K={40:"@","3A":":",24:"$","2C":",","3B":";","2B":"+","3D":"=","3F":"?","2F":"/"};function ee(Zr){return encodeURIComponent(Zr).replace(J,(Cn,Wt)=>{var zn;return null!==(zn=K[Wt])&&void 0!==zn?zn:Cn})}function ue(Zr){return`${Zr}`}class ae{constructor(Cn={}){if(this.updates=null,this.cloneFrom=null,this.encoder=Cn.encoder||new L,Cn.fromString){if(Cn.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function(Zr,Cn){const Wt=new Map;return Zr.length>0&&Zr.replace(/^\?/,"").split("&").forEach(rr=>{const Fr=rr.indexOf("="),[Gn,Jr]=-1==Fr?[Cn.decodeKey(rr),""]:[Cn.decodeKey(rr.slice(0,Fr)),Cn.decodeValue(rr.slice(Fr+1))],_i=Wt.get(Gn)||[];_i.push(Jr),Wt.set(Gn,_i)}),Wt}(Cn.fromString,this.encoder)}else Cn.fromObject?(this.map=new Map,Object.keys(Cn.fromObject).forEach(Wt=>{const zn=Cn.fromObject[Wt];this.map.set(Wt,Array.isArray(zn)?zn:[zn])})):this.map=null}has(Cn){return this.init(),this.map.has(Cn)}get(Cn){this.init();const Wt=this.map.get(Cn);return Wt?Wt[0]:null}getAll(Cn){return this.init(),this.map.get(Cn)||null}keys(){return this.init(),Array.from(this.map.keys())}append(Cn,Wt){return this.clone({param:Cn,value:Wt,op:"a"})}appendAll(Cn){const Wt=[];return Object.keys(Cn).forEach(zn=>{const rr=Cn[zn];Array.isArray(rr)?rr.forEach(Fr=>{Wt.push({param:zn,value:Fr,op:"a"})}):Wt.push({param:zn,value:rr,op:"a"})}),this.clone(Wt)}set(Cn,Wt){return this.clone({param:Cn,value:Wt,op:"s"})}delete(Cn,Wt){return this.clone({param:Cn,value:Wt,op:"d"})}toString(){return this.init(),this.keys().map(Cn=>{const Wt=this.encoder.encodeKey(Cn);return this.map.get(Cn).map(zn=>Wt+"="+this.encoder.encodeValue(zn)).join("&")}).filter(Cn=>""!==Cn).join("&")}clone(Cn){const Wt=new ae({encoder:this.encoder});return Wt.cloneFrom=this.cloneFrom||this,Wt.updates=(this.updates||[]).concat(Cn),Wt}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(Cn=>this.map.set(Cn,this.cloneFrom.map.get(Cn))),this.updates.forEach(Cn=>{switch(Cn.op){case"a":case"s":const Wt=("a"===Cn.op?this.map.get(Cn.param):void 0)||[];Wt.push(ue(Cn.value)),this.map.set(Cn.param,Wt);break;case"d":if(void 0===Cn.value){this.map.delete(Cn.param);break}{let zn=this.map.get(Cn.param)||[];const rr=zn.indexOf(ue(Cn.value));-1!==rr&&zn.splice(rr,1),zn.length>0?this.map.set(Cn.param,zn):this.map.delete(Cn.param)}}}),this.cloneFrom=this.updates=null)}}class se{constructor(){this.map=new Map}set(Cn,Wt){return this.map.set(Cn,Wt),this}get(Cn){return this.map.has(Cn)||this.map.set(Cn,Cn.defaultValue()),this.map.get(Cn)}delete(Cn){return this.map.delete(Cn),this}keys(){return this.map.keys()}}function ie(Zr){return"undefined"!=typeof ArrayBuffer&&Zr instanceof ArrayBuffer}function he(Zr){return"undefined"!=typeof Blob&&Zr instanceof Blob}function ge(Zr){return"undefined"!=typeof FormData&&Zr instanceof FormData}class ce{constructor(Cn,Wt,zn,rr){let Fr;if(this.url=Wt,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=Cn.toUpperCase(),function(Zr){switch(Zr){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||rr?(this.body=void 0!==zn?zn:null,Fr=rr):Fr=zn,Fr&&(this.reportProgress=!!Fr.reportProgress,this.withCredentials=!!Fr.withCredentials,Fr.responseType&&(this.responseType=Fr.responseType),Fr.headers&&(this.headers=Fr.headers),Fr.context&&(this.context=Fr.context),Fr.params&&(this.params=Fr.params)),this.headers||(this.headers=new N),this.context||(this.context=new se),this.params){const Gn=this.params.toString();if(0===Gn.length)this.urlWithParams=Wt;else{const Jr=Wt.indexOf("?");this.urlWithParams=Wt+(-1===Jr?"?":Jrgn.set(yn,Cn.setHeaders[yn]),wi)),Cn.setParams&&(br=Object.keys(Cn.setParams).reduce((gn,yn)=>gn.set(yn,Cn.setParams[yn]),br)),new ce(zn,rr,Gn,{params:br,headers:wi,context:Dr,reportProgress:_i,responseType:Fr,withCredentials:Jr})}}var lt=(()=>((lt=lt||{})[lt.Sent=0]="Sent",lt[lt.UploadProgress=1]="UploadProgress",lt[lt.ResponseHeader=2]="ResponseHeader",lt[lt.DownloadProgress=3]="DownloadProgress",lt[lt.Response=4]="Response",lt[lt.User=5]="User",lt))();class Ve{constructor(Cn,Wt=200,zn="OK"){this.headers=Cn.headers||new N,this.status=void 0!==Cn.status?Cn.status:Wt,this.statusText=Cn.statusText||zn,this.url=Cn.url||null,this.ok=this.status>=200&&this.status<300}}class ze extends Ve{constructor(Cn={}){super(Cn),this.type=lt.ResponseHeader}clone(Cn={}){return new ze({headers:Cn.headers||this.headers,status:void 0!==Cn.status?Cn.status:this.status,statusText:Cn.statusText||this.statusText,url:Cn.url||this.url||void 0})}}class Be extends Ve{constructor(Cn={}){super(Cn),this.type=lt.Response,this.body=void 0!==Cn.body?Cn.body:null}clone(Cn={}){return new Be({body:void 0!==Cn.body?Cn.body:this.body,headers:Cn.headers||this.headers,status:void 0!==Cn.status?Cn.status:this.status,statusText:Cn.statusText||this.statusText,url:Cn.url||this.url||void 0})}}class Pe extends Ve{constructor(Cn){super(Cn,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${Cn.url||"(unknown url)"}`:`Http failure response for ${Cn.url||"(unknown url)"}: ${Cn.status} ${Cn.statusText}`,this.error=Cn.error||null}}function je(Zr,Cn){return{body:Cn,headers:Zr.headers,context:Zr.context,observe:Zr.observe,params:Zr.params,reportProgress:Zr.reportProgress,responseType:Zr.responseType,withCredentials:Zr.withCredentials}}let He=(()=>{class Zr{constructor(Wt){this.handler=Wt}request(Wt,zn,rr={}){let Fr;if(Wt instanceof ce)Fr=Wt;else{let _i,wi;_i=rr.headers instanceof N?rr.headers:new N(rr.headers),rr.params&&(wi=rr.params instanceof ae?rr.params:new ae({fromObject:rr.params})),Fr=new ce(Wt,zn,void 0!==rr.body?rr.body:null,{headers:_i,context:rr.context,params:wi,reportProgress:rr.reportProgress,responseType:rr.responseType||"json",withCredentials:rr.withCredentials})}const Gn=(0,p.of)(Fr).pipe((0,e.b)(_i=>this.handler.handle(_i)));if(Wt instanceof ce||"events"===rr.observe)return Gn;const Jr=Gn.pipe((0,_.h)(_i=>_i instanceof Be));switch(rr.observe||"body"){case"body":switch(Fr.responseType){case"arraybuffer":return Jr.pipe((0,y.U)(_i=>{if(null!==_i.body&&!(_i.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return _i.body}));case"blob":return Jr.pipe((0,y.U)(_i=>{if(null!==_i.body&&!(_i.body instanceof Blob))throw new Error("Response is not a Blob.");return _i.body}));case"text":return Jr.pipe((0,y.U)(_i=>{if(null!==_i.body&&"string"!=typeof _i.body)throw new Error("Response is not a string.");return _i.body}));case"json":default:return Jr.pipe((0,y.U)(_i=>_i.body))}case"response":return Jr;default:throw new Error(`Unreachable: unhandled observe type ${rr.observe}}`)}}delete(Wt,zn={}){return this.request("DELETE",Wt,zn)}get(Wt,zn={}){return this.request("GET",Wt,zn)}head(Wt,zn={}){return this.request("HEAD",Wt,zn)}jsonp(Wt,zn){return this.request("JSONP",Wt,{params:(new ae).append(zn,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(Wt,zn={}){return this.request("OPTIONS",Wt,zn)}patch(Wt,zn,rr={}){return this.request("PATCH",Wt,je(rr,zn))}post(Wt,zn,rr={}){return this.request("POST",Wt,je(rr,zn))}put(Wt,zn,rr={}){return this.request("PUT",Wt,je(rr,zn))}}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)(u.LFG(S))},Zr.\u0275prov=u.Yz7({token:Zr,factory:Zr.\u0275fac}),Zr})();class Vt{constructor(Cn,Wt){this.next=Cn,this.interceptor=Wt}handle(Cn){return this.interceptor.intercept(Cn,this.next)}}const it=new u.OlP("HTTP_INTERCEPTORS");let tn=(()=>{class Zr{intercept(Wt,zn){return zn.handle(Wt)}}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)},Zr.\u0275prov=u.Yz7({token:Zr,factory:Zr.\u0275fac}),Zr})();const Xt=/^\)\]\}',?\n/;let Ur=(()=>{class Zr{constructor(Wt){this.xhrFactory=Wt}handle(Wt){if("JSONP"===Wt.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new d.y(zn=>{const rr=this.xhrFactory.build();if(rr.open(Wt.method,Wt.urlWithParams),Wt.withCredentials&&(rr.withCredentials=!0),Wt.headers.forEach((yn,gr)=>rr.setRequestHeader(yn,gr.join(","))),Wt.headers.has("Accept")||rr.setRequestHeader("Accept","application/json, text/plain, */*"),!Wt.headers.has("Content-Type")){const yn=Wt.detectContentTypeHeader();null!==yn&&rr.setRequestHeader("Content-Type",yn)}if(Wt.responseType){const yn=Wt.responseType.toLowerCase();rr.responseType="json"!==yn?yn:"text"}const Fr=Wt.serializeBody();let Gn=null;const Jr=()=>{if(null!==Gn)return Gn;const yn=1223===rr.status?204:rr.status,gr=rr.statusText||"OK",Jt=new N(rr.getAllResponseHeaders()),Vn=function(Zr){return"responseURL"in Zr&&Zr.responseURL?Zr.responseURL:/^X-Request-URL:/m.test(Zr.getAllResponseHeaders())?Zr.getResponseHeader("X-Request-URL"):null}(rr)||Wt.url;return Gn=new ze({headers:Jt,status:yn,statusText:gr,url:Vn}),Gn},_i=()=>{let{headers:yn,status:gr,statusText:Jt,url:Vn}=Jr(),mr=null;204!==gr&&(mr=void 0===rr.response?rr.responseText:rr.response),0===gr&&(gr=mr?200:0);let Dn=gr>=200&&gr<300;if("json"===Wt.responseType&&"string"==typeof mr){const Pr=mr;mr=mr.replace(Xt,"");try{mr=""!==mr?JSON.parse(mr):null}catch(Yt){mr=Pr,Dn&&(Dn=!1,mr={error:Yt,text:mr})}}Dn?(zn.next(new Be({body:mr,headers:yn,status:gr,statusText:Jt,url:Vn||void 0})),zn.complete()):zn.error(new Pe({error:mr,headers:yn,status:gr,statusText:Jt,url:Vn||void 0}))},wi=yn=>{const{url:gr}=Jr(),Jt=new Pe({error:yn,status:rr.status||0,statusText:rr.statusText||"Unknown Error",url:gr||void 0});zn.error(Jt)};let br=!1;const Dr=yn=>{br||(zn.next(Jr()),br=!0);let gr={type:lt.DownloadProgress,loaded:yn.loaded};yn.lengthComputable&&(gr.total=yn.total),"text"===Wt.responseType&&!!rr.responseText&&(gr.partialText=rr.responseText),zn.next(gr)},gn=yn=>{let gr={type:lt.UploadProgress,loaded:yn.loaded};yn.lengthComputable&&(gr.total=yn.total),zn.next(gr)};return rr.addEventListener("load",_i),rr.addEventListener("error",wi),rr.addEventListener("timeout",wi),rr.addEventListener("abort",wi),Wt.reportProgress&&(rr.addEventListener("progress",Dr),null!==Fr&&rr.upload&&rr.upload.addEventListener("progress",gn)),rr.send(Fr),zn.next({type:lt.Sent}),()=>{rr.removeEventListener("error",wi),rr.removeEventListener("abort",wi),rr.removeEventListener("load",_i),rr.removeEventListener("timeout",wi),Wt.reportProgress&&(rr.removeEventListener("progress",Dr),null!==Fr&&rr.upload&&rr.upload.removeEventListener("progress",gn)),rr.readyState!==rr.DONE&&rr.abort()}})}}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)(u.LFG(r.JF))},Zr.\u0275prov=u.Yz7({token:Zr,factory:Zr.\u0275fac}),Zr})();const di=new u.OlP("XSRF_COOKIE_NAME"),Lr=new u.OlP("XSRF_HEADER_NAME");class Mr{}let Kr=(()=>{class Zr{constructor(Wt,zn,rr){this.doc=Wt,this.platform=zn,this.cookieName=rr,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const Wt=this.doc.cookie||"";return Wt!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,r.Mx)(Wt,this.cookieName),this.lastCookieString=Wt),this.lastToken}}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)(u.LFG(r.K0),u.LFG(u.Lbi),u.LFG(di))},Zr.\u0275prov=u.Yz7({token:Zr,factory:Zr.\u0275fac}),Zr})(),ei=(()=>{class Zr{constructor(Wt,zn){this.tokenService=Wt,this.headerName=zn}intercept(Wt,zn){const rr=Wt.url.toLowerCase();if("GET"===Wt.method||"HEAD"===Wt.method||rr.startsWith("http://")||rr.startsWith("https://"))return zn.handle(Wt);const Fr=this.tokenService.getToken();return null!==Fr&&!Wt.headers.has(this.headerName)&&(Wt=Wt.clone({headers:Wt.headers.set(this.headerName,Fr)})),zn.handle(Wt)}}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)(u.LFG(Mr),u.LFG(Lr))},Zr.\u0275prov=u.Yz7({token:Zr,factory:Zr.\u0275fac}),Zr})(),Nn=(()=>{class Zr{constructor(Wt,zn){this.backend=Wt,this.injector=zn,this.chain=null}handle(Wt){if(null===this.chain){const zn=this.injector.get(it,[]);this.chain=zn.reduceRight((rr,Fr)=>new Vt(rr,Fr),this.backend)}return this.chain.handle(Wt)}}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)(u.LFG(A),u.LFG(u.zs3))},Zr.\u0275prov=u.Yz7({token:Zr,factory:Zr.\u0275fac}),Zr})(),Yr=(()=>{class Zr{static disable(){return{ngModule:Zr,providers:[{provide:ei,useClass:tn}]}}static withOptions(Wt={}){return{ngModule:Zr,providers:[Wt.cookieName?{provide:di,useValue:Wt.cookieName}:[],Wt.headerName?{provide:Lr,useValue:Wt.headerName}:[]]}}}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)},Zr.\u0275mod=u.oAB({type:Zr}),Zr.\u0275inj=u.cJS({providers:[ei,{provide:it,useExisting:ei,multi:!0},{provide:Mr,useClass:Kr},{provide:di,useValue:"XSRF-TOKEN"},{provide:Lr,useValue:"X-XSRF-TOKEN"}]}),Zr})(),fi=(()=>{class Zr{}return Zr.\u0275fac=function(Wt){return new(Wt||Zr)},Zr.\u0275mod=u.oAB({type:Zr}),Zr.\u0275inj=u.cJS({providers:[He,{provide:S,useClass:Nn},Ur,{provide:A,useExisting:Ur}],imports:[[Yr.withOptions({cookieName:"XSRF-TOKEN",headerName:"X-XSRF-TOKEN"})]]}),Zr})()},74788:(v,T,i)=>{"use strict";i.d(T,{deG:()=>vd,tb:()=>Pp,AFp:()=>N2,ip1:()=>yT,CZH:()=>Zv,hGG:()=>$T,z2F:()=>r0,sBO:()=>Kw,Sil:()=>n0,_Vd:()=>Pv,UuU:()=>nM,EJc:()=>F2,SBq:()=>og,qLn:()=>Gf,vpe:()=>Wp,gxx:()=>Jg,tBr:()=>ha,XFs:()=>Yr,OlP:()=>Jl,zs3:()=>Ac,IIB:()=>w2,ZZ4:()=>Ay,aQg:()=>Oy,soG:()=>Gy,YKP:()=>DE,v3s:()=>UD,h0i:()=>zm,PXZ:()=>FD,R0b:()=>Eh,FiY:()=>ia,r_U:()=>gD,Lbi:()=>cm,g9A:()=>D_,Qsj:()=>kw,FYo:()=>Cy,JOm:()=>Bd,Tiy:()=>xE,q3G:()=>Vs,tp0:()=>il,EAV:()=>ZD,Rgc:()=>F1,dDg:()=>AT,DyG:()=>Hf,GfV:()=>aM,i9L:()=>fp,s_b:()=>Dy,ifc:()=>Gn,eFA:()=>DT,G48:()=>RD,Gpc:()=>L,X6Q:()=>xT,_c5:()=>JD,VLi:()=>DD,c2e:()=>L2,zSh:()=>Im,wAp:()=>Ua,vHH:()=>ee,EiD:()=>Xo,mCW:()=>vf,qzn:()=>Yf,JVY:()=>bd,pB0:()=>Nh,eBb:()=>th,L6k:()=>Rh,LAX:()=>nh,cg1:()=>fE,Tjo:()=>WD,kL8:()=>wC,yhl:()=>eh,dqk:()=>Dr,sIi:()=>Hm,CqO:()=>qb,QGY:()=>Zm,F4k:()=>kS,RDi:()=>tl,AaK:()=>S,z3N:()=>kd,qOj:()=>T1,TTD:()=>Eo,_Bn:()=>Pw,xp6:()=>Fa,uIk:()=>A1,Tol:()=>rC,Gre:()=>gC,MT6:()=>mC,DjV:()=>vC,ekj:()=>oE,Suo:()=>a2,Xpm:()=>mi,lG2:()=>lo,Yz7:()=>xt,cJS:()=>Zn,oAB:()=>Fn,Yjl:()=>vo,Y36:()=>D1,_UZ:()=>LS,GkF:()=>FS,BQk:()=>Kb,ynx:()=>Xb,qZA:()=>Qb,TgZ:()=>Jb,EpF:()=>fy,n5z:()=>$f,Ikx:()=>cE,SDv:()=>QC,QtT:()=>KC,DtL:()=>XC,N_p:()=>EE,pQV:()=>TE,Zx4:()=>qC,tHW:()=>Ty,LFG:()=>xn,$8M:()=>Sl,NdJ:()=>eE,CRH:()=>l2,oxw:()=>BS,ALo:()=>e2,lcZ:()=>t2,xi3:()=>bh,Dn7:()=>n2,Hsn:()=>ZS,F$t:()=>YS,Q6J:()=>zb,s9C:()=>nE,MGl:()=>py,hYB:()=>xg,DdM:()=>WE,VKq:()=>JE,WLB:()=>z1,kEZ:()=>WM,l5B:()=>e_,qbA:()=>JM,iGM:()=>o2,MAs:()=>Ke,pYS:()=>Vf,Jf7:()=>Uh,CHM:()=>Aa,oJD:()=>_c,uOi:()=>Hd,LSH:()=>wu,kYT:()=>ar,Udp:()=>iE,d8E:()=>dE,YNc:()=>$,W1O:()=>of,_uU:()=>uC,Oqu:()=>aE,hij:()=>gy,AsE:()=>lE,lnq:()=>uE,Gf:()=>s2});var r=i(79765),u=i(75319),p=i(18891),d=i(66682),e=i(18819);function _(a){for(let l in a)if(a[l]===_)return l;throw Error("Could not find renamed property on target object.")}function y(a,l){for(const f in l)l.hasOwnProperty(f)&&!a.hasOwnProperty(f)&&(a[f]=l[f])}function S(a){if("string"==typeof a)return a;if(Array.isArray(a))return"["+a.map(S).join(", ")+"]";if(null==a)return""+a;if(a.overriddenName)return`${a.overriddenName}`;if(a.name)return`${a.name}`;const l=a.toString();if(null==l)return""+l;const f=l.indexOf("\n");return-1===f?l:l.substring(0,f)}function A(a,l){return null==a||""===a?null===l?"":l:null==l||""===l?a:a+" "+l}const N=_({__forward_ref__:_});function L(a){return a.__forward_ref__=L,a.toString=function(){return S(this())},a}function Z(a){return J(a)?a():a}function J(a){return"function"==typeof a&&a.hasOwnProperty(N)&&a.__forward_ref__===L}class ee extends Error{constructor(l,f){super(function(a,l){return`${a?`NG0${a}: `:""}${l}`}(l,f)),this.code=l}}function H(a){return"string"==typeof a?a:null==a?"":String(a)}function se(a){return"function"==typeof a?a.name||a.toString():"object"==typeof a&&null!=a&&"function"==typeof a.type?a.type.name||a.type.toString():H(a)}function ge(a,l){const f=l?` in ${l}`:"";throw new ee("201",`No provider for ${se(a)} found${f}`)}function Ut(a,l,f,m){throw new Error(`ASSERTION ERROR: ${a}`+(null==m?"":` [Expected=> ${f} ${m} ${l} <=Actual]`))}function xt(a){return{token:a.token,providedIn:a.providedIn||null,factory:a.factory,value:void 0}}function Zn(a){return{providers:a.providers||[],imports:a.imports||[]}}function Ur(a){return di(a,ei)||di(a,$n)}function di(a,l){return a.hasOwnProperty(l)?a[l]:null}function Kr(a){return a&&(a.hasOwnProperty(Nn)||a.hasOwnProperty(Br))?a[Nn]:null}const ei=_({\u0275prov:_}),Nn=_({\u0275inj:_}),$n=_({ngInjectableDef:_}),Br=_({ngInjectorDef:_});var Yr=(()=>((Yr=Yr||{})[Yr.Default=0]="Default",Yr[Yr.Host=1]="Host",Yr[Yr.Self=2]="Self",Yr[Yr.SkipSelf=4]="SkipSelf",Yr[Yr.Optional=8]="Optional",Yr))();let fi;function Hi(a){const l=fi;return fi=a,l}function Zr(a,l,f){const m=Ur(a);return m&&"root"==m.providedIn?void 0===m.value?m.value=m.factory():m.value:f&Yr.Optional?null:void 0!==l?l:void ge(S(a),"Injector")}function Wt(a){return{toString:a}.toString()}var zn=(()=>((zn=zn||{})[zn.OnPush=0]="OnPush",zn[zn.Default=1]="Default",zn))(),Gn=(()=>((Gn=Gn||{})[Gn.Emulated=0]="Emulated",Gn[Gn.None=2]="None",Gn[Gn.ShadowDom=3]="ShadowDom",Gn))();const Jr="undefined"!=typeof globalThis&&globalThis,_i="undefined"!=typeof window&&window,wi="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,Dr=Jr||"undefined"!=typeof global&&global||_i||wi,gr={},Jt=[],Vn=_({\u0275cmp:_}),mr=_({\u0275dir:_}),Dn=_({\u0275pipe:_}),Pr=_({\u0275mod:_}),Yt=_({\u0275loc:_}),_n=_({\u0275fac:_}),Ge=_({__NG_ELEMENT_ID__:_});let kr=0;function mi(a){return Wt(()=>{const f={},m={type:a.type,providersResolver:null,decls:a.decls,vars:a.vars,factory:null,template:a.template||null,consts:a.consts||null,ngContentSelectors:a.ngContentSelectors,hostBindings:a.hostBindings||null,hostVars:a.hostVars||0,hostAttrs:a.hostAttrs||null,contentQueries:a.contentQueries||null,declaredInputs:f,inputs:null,outputs:null,exportAs:a.exportAs||null,onPush:a.changeDetection===zn.OnPush,directiveDefs:null,pipeDefs:null,selectors:a.selectors||Jt,viewQuery:a.viewQuery||null,features:a.features||null,data:a.data||{},encapsulation:a.encapsulation||Gn.Emulated,id:"c",styles:a.styles||Jt,_:null,setInput:null,schemas:a.schemas||null,tView:null},M=a.directives,k=a.features,te=a.pipes;return m.id+=kr++,m.inputs=Wi(a.inputs,f),m.outputs=Wi(a.outputs),k&&k.forEach(le=>le(m)),m.directiveDefs=M?()=>("function"==typeof M?M():M).map(Er):null,m.pipeDefs=te?()=>("function"==typeof te?te():te).map(Wr):null,m})}function Er(a){return Co(a)||function(a){return a[mr]||null}(a)}function Wr(a){return function(a){return a[Dn]||null}(a)}const dr={};function Fn(a){return Wt(()=>{const l={type:a.type,bootstrap:a.bootstrap||Jt,declarations:a.declarations||Jt,imports:a.imports||Jt,exports:a.exports||Jt,transitiveCompileScopes:null,schemas:a.schemas||null,id:a.id||null};return null!=a.id&&(dr[a.id]=a.type),l})}function ar(a,l){return Wt(()=>{const f=jo(a,!0);f.declarations=l.declarations||Jt,f.imports=l.imports||Jt,f.exports=l.exports||Jt})}function Wi(a,l){if(null==a)return gr;const f={};for(const m in a)if(a.hasOwnProperty(m)){let M=a[m],k=M;Array.isArray(M)&&(k=M[1],M=M[0]),f[M]=m,l&&(l[M]=k)}return f}const lo=mi;function vo(a){return{type:a.type,name:a.name,factory:null,pure:!1!==a.pure,onDestroy:a.type.prototype.ngOnDestroy||null}}function Co(a){return a[Vn]||null}function jo(a,l){const f=a[Pr]||null;if(!f&&!0===l)throw new Error(`Type ${S(a)} does not have '\u0275mod' property.`);return f}function ca(a){return Array.isArray(a)&&"object"==typeof a[1]}function $s(a){return Array.isArray(a)&&!0===a[1]}function da(a){return 0!=(8&a.flags)}function Il(a){return 2==(2&a.flags)}function fo(a){return 1==(1&a.flags)}function Ya(a){return null!==a.template}function Ao(a){return 0!=(512&a[2])}function wo(a,l){return a.hasOwnProperty(_n)?a[_n]:null}class ko{constructor(l,f,m){this.previousValue=l,this.currentValue=f,this.firstChange=m}isFirstChange(){return this.firstChange}}function Eo(){return ba}function ba(a){return a.type.prototype.ngOnChanges&&(a.setInput=tc),sl}function sl(){const a=bc(this),l=null==a?void 0:a.current;if(l){const f=a.previous;if(f===gr)a.previous=l;else for(let m in l)f[m]=l[m];a.current=null,this.ngOnChanges(l)}}function tc(a,l,f,m){const M=bc(a)||function(a,l){return a[Nu]=l}(a,{previous:gr,current:null}),k=M.current||(M.current={}),te=M.previous,le=this.declaredInputs[f],Ne=te[le];k[le]=new ko(Ne&&Ne.currentValue,l,te===gr),a[m]=l}Eo.ngInherit=!0;const Nu="__ngSimpleChanges__";function bc(a){return a[Nu]||null}let iu;function tl(a){iu=a}function Su(){return void 0!==iu?iu:"undefined"!=typeof document?document:void 0}function rt(a){return!!a.listen}const dt={createRenderer:(a,l)=>Su()};function Me(a){for(;Array.isArray(a);)a=a[0];return a}function ur(a,l){return Me(l[a])}function Qi(a,l){return Me(l[a.index])}function ms(a,l){return a.data[l]}function hs(a,l){return a[l]}function Ts(a,l){const f=l[a];return ca(f)?f:f[0]}function Ma(a){return 4==(4&a[2])}function au(a){return 128==(128&a[2])}function Rl(a,l){return null==l?null:a[l]}function nc(a){a[18]=0}function Al(a,l){a[5]+=l;let f=a,m=a[3];for(;null!==m&&(1===l&&1===f[5]||-1===l&&0===f[5]);)m[5]+=l,f=m,m=m[3]}const vs={lFrame:Or(null),bindingsEnabled:!0,isInCheckNoChangesMode:!1};function kc(){return vs.bindingsEnabled}function Li(){return vs.lFrame.lView}function sa(){return vs.lFrame.tView}function Aa(a){return vs.lFrame.contextLView=a,a[8]}function Ss(){let a=$u();for(;null!==a&&64===a.type;)a=a.parent;return a}function $u(){return vs.lFrame.currentTNode}function yl(){const a=vs.lFrame,l=a.currentTNode;return a.isParent?l:l.parent}function Mu(a,l){const f=vs.lFrame;f.currentTNode=a,f.isParent=l}function yu(){return vs.lFrame.isParent}function lu(){vs.lFrame.isParent=!1}function Uu(){return vs.isInCheckNoChangesMode}function Bo(a){vs.isInCheckNoChangesMode=a}function uu(){const a=vs.lFrame;let l=a.bindingRootIndex;return-1===l&&(l=a.bindingRootIndex=a.tView.bindingStartIndex),l}function wr(){return vs.lFrame.bindingIndex}function pu(){return vs.lFrame.bindingIndex++}function aa(a){const l=vs.lFrame,f=l.bindingIndex;return l.bindingIndex=l.bindingIndex+a,f}function bl(a){vs.lFrame.inI18n=a}function El(a,l){const f=vs.lFrame;f.bindingIndex=f.bindingRootIndex=a,ks(l)}function ks(a){vs.lFrame.currentDirectiveIndex=a}function V(a){const l=vs.lFrame.currentDirectiveIndex;return-1===l?null:a[l]}function Ae(){return vs.lFrame.currentQueryIndex}function st(a){vs.lFrame.currentQueryIndex=a}function vt(a){const l=a[1];return 2===l.type?l.declTNode:1===l.type?a[6]:null}function ut(a,l,f){if(f&Yr.SkipSelf){let M=l,k=a;for(;!(M=M.parent,null!==M||f&Yr.Host||(M=vt(k),null===M||(k=k[15],10&M.type))););if(null===M)return!1;l=M,a=k}const m=vs.lFrame=mn();return m.currentTNode=l,m.lView=a,!0}function un(a){const l=mn(),f=a[1];vs.lFrame=l,l.currentTNode=f.firstChild,l.lView=a,l.tView=f,l.contextLView=a,l.bindingIndex=f.bindingStartIndex,l.inI18n=!1}function mn(){const a=vs.lFrame,l=null===a?null:a.child;return null===l?Or(a):l}function Or(a){const l={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:a,child:null,inI18n:!1};return null!==a&&(a.child=l),l}function zr(){const a=vs.lFrame;return vs.lFrame=a.parent,a.currentTNode=null,a.lView=null,a}const gi=zr;function ai(){const a=zr();a.isParent=!0,a.tView=null,a.selectedIndex=-1,a.contextLView=null,a.elementDepthCount=0,a.currentDirectiveIndex=-1,a.currentNamespace=null,a.bindingRootIndex=-1,a.bindingIndex=-1,a.currentQueryIndex=0}function In(){return vs.lFrame.selectedIndex}function Cr(a){vs.lFrame.selectedIndex=a}function hr(){const a=vs.lFrame;return ms(a.tView,a.selectedIndex)}function $c(a,l){for(let f=l.directiveStart,m=l.directiveEnd;f=m)break}else l[Ne]<0&&(a[18]+=65536),(le>11>16&&(3&a[2])===l){a[2]+=2048;try{k.call(le)}finally{}}}else try{k.call(le)}finally{}}class Js{constructor(l,f,m){this.factory=l,this.resolving=!1,this.canSeeViewProviders=f,this.injectImpl=m}}function ic(a,l,f){const m=rt(a);let M=0;for(;Ml){te=k-1;break}}}for(;k>16}(a),m=l;for(;f>0;)m=m[15],f--;return m}let Et=!0;function qt(a){const l=Et;return Et=a,l}let Yo=0;function ns(a,l){const f=Hs(a,l);if(-1!==f)return f;const m=l[1];m.firstCreatePass&&(a.injectorIndex=l.length,Oa(m.data,a),Oa(l,null),Oa(m.blueprint,null));const M=fc(a,l),k=a.injectorIndex;if(Ye(M)){const te=Ie(M),le=ot(M,l),Ne=le[1].data;for(let qe=0;qe<8;qe++)l[k+qe]=le[te+qe]|Ne[te+qe]}return l[k+8]=M,k}function Oa(a,l){a.push(0,0,0,0,0,0,0,0,l)}function Hs(a,l){return-1===a.injectorIndex||a.parent&&a.parent.injectorIndex===a.injectorIndex||null===l[a.injectorIndex+8]?-1:a.injectorIndex}function fc(a,l){if(a.parent&&-1!==a.parent.injectorIndex)return a.parent.injectorIndex;let f=0,m=null,M=l;for(;null!==M;){const k=M[1],te=k.type;if(m=2===te?k.declTNode:1===te?M[6]:null,null===m)return-1;if(f++,M=M[15],-1!==m.injectorIndex)return m.injectorIndex|f<<16}return-1}function ga(a,l,f){!function(a,l,f){let m;"string"==typeof f?m=f.charCodeAt(0)||0:f.hasOwnProperty(Ge)&&(m=f[Ge]),null==m&&(m=f[Ge]=Yo++);const M=255&m;l.data[a+(M>>5)]|=1<=0?255&l:Of:l}(f);if("function"==typeof k){if(!ut(l,a,m))return m&Yr.Host?ll(M,f,m):Za(l,f,m,M);try{const te=k(m);if(null!=te||m&Yr.Optional)return te;ge(f)}finally{gi()}}else if("number"==typeof k){let te=null,le=Hs(a,l),Ne=-1,qe=m&Yr.Host?l[16][6]:null;for((-1===le||m&Yr.SkipSelf)&&(Ne=-1===le?fc(a,l):l[le+8],-1!==Ne&&Xd(m,!1)?(te=l[1],le=Ie(Ne),l=ot(Ne,l)):le=-1);-1!==le;){const wt=l[1];if(Cc(k,le,wt.data)){const ln=Rd(le,l,f,te,m,qe);if(ln!==ul)return ln}Ne=l[le+8],-1!==Ne&&Xd(m,l[1].data[le+8]===qe)&&Cc(k,le,l)?(te=wt,le=Ie(Ne),l=ot(Ne,l)):le=-1}}}return Za(l,f,m,M)}const ul={};function Of(){return new jc(Ss(),Li())}function Rd(a,l,f,m,M,k){const te=l[1],le=te.data[a+8],wt=Qd(le,te,f,null==m?Il(le)&&Et:m!=te&&0!=(3&le.type),M&Yr.Host&&k===le);return null!==wt?Sc(l,te,wt,le):ul}function Qd(a,l,f,m,M){const k=a.providerIndexes,te=l.data,le=1048575&k,Ne=a.directiveStart,wt=k>>20,dn=M?le+wt:a.directiveEnd;for(let nr=m?le:le+wt;nr=Ne&&Rr.type===f)return nr}if(M){const nr=te[Ne];if(nr&&Ya(nr)&&nr.type===f)return Ne}return null}function Sc(a,l,f,m){let M=a[f];const k=l.data;if(function(a){return a instanceof Js}(M)){const te=M;te.resolving&&function(a,l){throw new ee("200",`Circular dependency in DI detected for ${a}`)}(se(k[f]));const le=qt(te.canSeeViewProviders);te.resolving=!0;const Ne=te.injectImpl?Hi(te.injectImpl):null;ut(a,m,Yr.Default);try{M=a[f]=te.factory(void 0,k,a,m),l.firstCreatePass&&f>=m.directiveStart&&function(a,l,f){const{ngOnChanges:m,ngOnInit:M,ngDoCheck:k}=l.type.prototype;if(m){const te=ba(l);(f.preOrderHooks||(f.preOrderHooks=[])).push(a,te),(f.preOrderCheckHooks||(f.preOrderCheckHooks=[])).push(a,te)}M&&(f.preOrderHooks||(f.preOrderHooks=[])).push(0-a,M),k&&((f.preOrderHooks||(f.preOrderHooks=[])).push(a,k),(f.preOrderCheckHooks||(f.preOrderCheckHooks=[])).push(a,k))}(f,k[f],l)}finally{null!==Ne&&Hi(Ne),qt(le),te.resolving=!1,gi()}}return M}function Cc(a,l,f){return!!(f[l+(a>>5)]&1<{const l=a.prototype.constructor,f=l[_n]||Ju(l),m=Object.prototype;let M=Object.getPrototypeOf(a.prototype).constructor;for(;M&&M!==m;){const k=M[_n]||Ju(M);if(k&&k!==f)return k;M=Object.getPrototypeOf(M)}return k=>new k})}function Ju(a){return J(a)?()=>{const l=Ju(Z(a));return l&&l()}:wo(a)}function Sl(a){return function(a,l){if("class"===l)return a.classes;if("style"===l)return a.styles;const f=a.attrs;if(f){const m=f.length;let M=0;for(;M{const m=Qu(l);function M(...k){if(this instanceof M)return m.apply(this,k),this;const te=new M(...k);return le.annotation=te,le;function le(Ne,qe,wt){const ln=Ne.hasOwnProperty(kl)?Ne[kl]:Object.defineProperty(Ne,kl,{value:[]})[kl];for(;ln.length<=wt;)ln.push(null);return(ln[wt]=ln[wt]||[]).push(te),Ne}}return f&&(M.prototype=Object.create(f.prototype)),M.prototype.ngMetadataName=a,M.annotationCls=M,M})}function Oc(a,l,f,m){return Wt(()=>{const M=Qu(l);function k(...te){if(this instanceof k)return M.apply(this,te),this;const le=new k(...te);return function(qe,wt){const ln=qe.constructor,dn=ln.hasOwnProperty(Pu)?ln[Pu]:Object.defineProperty(ln,Pu,{value:{}})[Pu];dn[wt]=dn.hasOwnProperty(wt)&&dn[wt]||[],dn[wt].unshift(le),m&&m(qe,wt,...te)}}return f&&(k.prototype=Object.create(f.prototype)),k.prototype.ngMetadataName=a,k.annotationCls=k,k})}class Jl{constructor(l,f){this._desc=l,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof f?this.__NG_ELEMENT_ID__=f:void 0!==f&&(this.\u0275prov=xt({token:this,providedIn:f.providedIn||"root",factory:f.factory}))}toString(){return`InjectionToken ${this._desc}`}}const vd=new Jl("AnalyzeForEntryComponents");class Gc{}const fp=Oc("ViewChild",(a,l)=>Object.assign({selector:a,first:!0,isViewQuery:!0,descendants:!0},l),Gc),Hf=Function;function Dc(a,l){void 0===l&&(l=a);for(let f=0;fArray.isArray(f)?Xl(f,l):l(f))}function Ji(a,l,f){l>=a.length?a.push(f):a.splice(l,0,f)}function cl(a,l){return l>=a.length-1?a.pop():a.splice(l,1)[0]}function Ll(a,l){const f=[];for(let m=0;m=0?a[1|m]=f:(m=~m,function(a,l,f,m){let M=a.length;if(M==l)a.push(f,m);else if(1===M)a.push(m,a[0]),a[0]=f;else{for(M--,a.push(a[M-1],a[M]);M>l;)a[M]=a[M-2],M--;a[l]=f,a[l+1]=m}}(a,m,l,f)),m}function Id(a,l){const f=oc(a,l);if(f>=0)return a[1|f]}function oc(a,l){return function(a,l,f){let m=0,M=a.length>>f;for(;M!==m;){const k=m+(M-m>>1),te=a[k<l?M=k:m=k+1}return~(M< ");else if("object"==typeof l){let k=[];for(let te in l)if(l.hasOwnProperty(te)){let le=l[te];k.push(te+":"+("string"==typeof le?JSON.stringify(le):S(le)))}M=`{${k.join(", ")}}`}return`${f}${m?"("+m+")":""}[${M}]: ${a.replace(ye,"\n ")}`}("\n"+a.message,M,f,m),a.ngTokenPath=M,a[q]=null,a}const ha=Zo(en("Inject",a=>({token:a})),-1),ia=Zo(en("Optional"),8),il=Zo(en("SkipSelf"),4);let na,Hp;function zl(a){var l;return(null===(l=function(){if(void 0===na&&(na=null,Dr.trustedTypes))try{na=Dr.trustedTypes.createPolicy("angular",{createHTML:a=>a,createScript:a=>a,createScriptURL:a=>a})}catch(a){}return na}())||void 0===l?void 0:l.createHTML(a))||a}function Up(){if(void 0===Hp&&(Hp=null,Dr.trustedTypes))try{Hp=Dr.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:a=>a,createScript:a=>a,createScriptURL:a=>a})}catch(a){}return Hp}function mf(a){var l;return(null===(l=Up())||void 0===l?void 0:l.createHTML(a))||a}function dd(a){var l;return(null===(l=Up())||void 0===l?void 0:l.createScriptURL(a))||a}class Fd{constructor(l){this.changingThisBreaksApplicationSecurity=l}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see https://g.co/ng/security#xss)`}}class pp extends Fd{getTypeName(){return"HTML"}}class fl extends Fd{getTypeName(){return"Style"}}class i_ extends Fd{getTypeName(){return"Script"}}class F_ extends Fd{getTypeName(){return"URL"}}class Bf extends Fd{getTypeName(){return"ResourceURL"}}function kd(a){return a instanceof Fd?a.changingThisBreaksApplicationSecurity:a}function Yf(a,l){const f=eh(a);if(null!=f&&f!==l){if("ResourceURL"===f&&"URL"===l)return!0;throw new Error(`Required a safe ${l}, got a ${f} (see https://g.co/ng/security#xss)`)}return f===l}function eh(a){return a instanceof Fd&&a.getTypeName()||null}function bd(a){return new pp(a)}function Rh(a){return new fl(a)}function th(a){return new i_(a)}function nh(a){return new F_(a)}function Nh(a){return new Bf(a)}function rh(a){const l=new xf(a);return function(){try{return!!(new window.DOMParser).parseFromString(zl(""),"text/html")}catch(a){return!1}}()?new Ed(l):l}class Ed{constructor(l){this.inertDocumentHelper=l}getInertBodyElement(l){l=""+l;try{const f=(new window.DOMParser).parseFromString(zl(l),"text/html").body;return null===f?this.inertDocumentHelper.getInertBodyElement(l):(f.removeChild(f.firstChild),f)}catch(f){return null}}}class xf{constructor(l){if(this.defaultDoc=l,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const f=this.inertDocument.createElement("html");this.inertDocument.appendChild(f);const m=this.inertDocument.createElement("body");f.appendChild(m)}}getInertBodyElement(l){const f=this.inertDocument.createElement("template");if("content"in f)return f.innerHTML=zl(l),f;const m=this.inertDocument.createElement("body");return m.innerHTML=zl(l),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(m),m}stripCustomNsAttrs(l){const f=l.attributes;for(let M=f.length-1;0vf(l.trim())).join(", ")}function $d(a){const l={};for(const f of a.split(","))l[f]=!0;return l}function hp(...a){const l={};for(const f of a)for(const m in f)f.hasOwnProperty(m)&&(l[m]=!0);return l}const Zf=$d("area,br,col,hr,img,wbr"),qd=$d("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),ac=$d("rp,rt"),Y=hp(Zf,hp(qd,$d("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),hp(ac,$d("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),hp(ac,qd)),fe=$d("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),w=$d("srcset"),ct=hp(fe,w,$d("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),$d("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),Jn=$d("script,style,template");class Ir{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(l){let f=l.firstChild,m=!0;for(;f;)if(f.nodeType===Node.ELEMENT_NODE?m=this.startElement(f):f.nodeType===Node.TEXT_NODE?this.chars(f.nodeValue):this.sanitizedSomething=!0,m&&f.firstChild)f=f.firstChild;else for(;f;){f.nodeType===Node.ELEMENT_NODE&&this.endElement(f);let M=this.checkClobberedElement(f,f.nextSibling);if(M){f=M;break}f=this.checkClobberedElement(f,f.parentNode)}return this.buf.join("")}startElement(l){const f=l.nodeName.toLowerCase();if(!Y.hasOwnProperty(f))return this.sanitizedSomething=!0,!Jn.hasOwnProperty(f);this.buf.push("<"),this.buf.push(f);const m=l.attributes;for(let M=0;M"),!0}endElement(l){const f=l.nodeName.toLowerCase();Y.hasOwnProperty(f)&&!Zf.hasOwnProperty(f)&&(this.buf.push(""))}chars(l){this.buf.push(Do(l))}checkClobberedElement(l,f){if(f&&(l.compareDocumentPosition(f)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${l.outerHTML}`);return f}}const vi=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,zi=/([^\#-~ |!])/g;function Do(a){return a.replace(/&/g,"&").replace(vi,function(l){return"&#"+(1024*(l.charCodeAt(0)-55296)+(l.charCodeAt(1)-56320)+65536)+";"}).replace(zi,function(l){return"&#"+l.charCodeAt(0)+";"}).replace(//g,">")}let xs;function Xo(a,l){let f=null;try{xs=xs||rh(a);let m=l?String(l):"";f=xs.getInertBodyElement(m);let M=5,k=m;do{if(0===M)throw new Error("Failed to sanitize html because the input is unstable");M--,m=k,k=f.innerHTML,f=xs.getInertBodyElement(m)}while(m!==k);return zl((new Ir).sanitizeChildren(Rs(f)||f))}finally{if(f){const m=Rs(f)||f;for(;m.firstChild;)m.removeChild(m.firstChild)}}}function Rs(a){return"content"in a&&function(a){return a.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===a.nodeName}(a)?a.content:null}var Vs=(()=>((Vs=Vs||{})[Vs.NONE=0]="NONE",Vs[Vs.HTML=1]="HTML",Vs[Vs.STYLE=2]="STYLE",Vs[Vs.SCRIPT=3]="SCRIPT",Vs[Vs.URL=4]="URL",Vs[Vs.RESOURCE_URL=5]="RESOURCE_URL",Vs))();function _c(a){const l=gp();return l?mf(l.sanitize(Vs.HTML,a)||""):Yf(a,"HTML")?mf(kd(a)):Xo(Su(),H(a))}function wu(a){const l=gp();return l?l.sanitize(Vs.URL,a)||"":Yf(a,"URL")?kd(a):vf(H(a))}function Hd(a){const l=gp();if(l)return dd(l.sanitize(Vs.RESOURCE_URL,a)||"");if(Yf(a,"ResourceURL"))return dd(kd(a));throw new Error("unsafe value used in a resource URL context (see https://g.co/ng/security#xss)")}function gp(){const a=Li();return a&&a[12]}const B_="__ngContext__";function Wc(a,l){a[B_]=l}function a_(a){const l=function(a){return a[B_]||null}(a);return l?Array.isArray(l)?l:l.lView:null}function Zu(a){return a.ngOriginalError}function Yp(a,...l){a.error(...l)}class Gf{constructor(){this._console=console}handleError(l){const f=this._findOriginalError(l),m=this._findContext(l),M=(a=l)&&a.ngErrorLogger||Yp;var a;M(this._console,"ERROR",l),f&&M(this._console,"ORIGINAL ERROR",f),m&&M(this._console,"ERROR CONTEXT",m)}_findContext(l){return l?l.ngDebugContext||this._findContext(Zu(l)):null}_findOriginalError(l){let f=l&&Zu(l);for(;f&&Zu(f);)f=Zu(f);return f||null}}const Z_=/^>|^->||--!>|)/;const Hh=(()=>("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(Dr))();function Uh(a){return a.ownerDocument.defaultView}function Vf(a){return a.ownerDocument.body}function yf(a){return a instanceof Function?a():a}var Bd=(()=>((Bd=Bd||{})[Bd.Important=1]="Important",Bd[Bd.DashCase=2]="DashCase",Bd))();let fd;function bf(a,l){return fd(a,l)}function od(a){const l=a[3];return $s(l)?l[3]:l}function np(a){return fh(a[13])}function V_(a){return fh(a[4])}function fh(a){for(;null!==a&&!$s(a);)a=a[4];return a}function Bc(a,l,f,m,M){if(null!=m){let k,te=!1;$s(m)?k=m:ca(m)&&(te=!0,m=m[0]);const le=Me(m);0===a&&null!==f?null==M?Bg(l,f,le):_h(l,f,le,M||null,!0):1===a&&null!==f?_h(l,f,le,M||null,!0):2===a?y_(l,le,te):3===a&&l.destroyNode(le),null!=k&&function(a,l,f,m,M){const k=f[7];k!==Me(f)&&Bc(l,a,m,k,M);for(let le=10;lel.replace(j_,"\u200b$1\u200b"))}(l))}function Bh(a,l,f){return rt(a)?a.createElement(l,f):null===f?a.createElement(l):a.createElementNS(f,l)}function Hg(a,l){const f=a[9],m=f.indexOf(l),M=l[3];1024&l[2]&&(l[2]&=-1025,Al(M,-1)),f.splice(m,1)}function gg(a,l){if(a.length<=10)return;const f=10+l,m=a[f];if(m){const M=m[17];null!==M&&M!==a&&Hg(M,m),l>0&&(a[f-1][4]=m[4]);const k=cl(a,10+l);!function(a,l){jh(a,l,l[11],2,null,null),l[0]=null,l[6]=null}(m[1],m);const te=k[19];null!==te&&te.detachView(k[1]),m[3]=null,m[4]=null,m[2]&=-129}return m}function Ep(a,l){if(!(256&l[2])){const f=l[11];rt(f)&&f.destroyNode&&jh(a,l,f,3,null,null),function(a){let l=a[13];if(!l)return mg(a[1],a);for(;l;){let f=null;if(ca(l))f=l[13];else{const m=l[10];m&&(f=m)}if(!f){for(;l&&!l[4]&&l!==a;)ca(l)&&mg(l[1],l),l=l[3];null===l&&(l=a),ca(l)&&mg(l[1],l),f=l&&l[4]}l=f}}(l)}}function mg(a,l){if(!(256&l[2])){l[2]&=-129,l[2]|=256,function(a,l){let f;if(null!=a&&null!=(f=a.destroyHooks))for(let m=0;m=0?m[M=qe]():m[M=-qe].unsubscribe(),k+=2}else{const te=m[M=f[k+1]];f[k].call(te)}if(null!==m){for(let k=M+1;kk?"":M[ln+1].toLowerCase();const nr=8&m?dn:null;if(nr&&-1!==Sg(nr,qe,0)||2&m&&qe!==dn){if(G(m))return!1;te=!0}}}}else{if(!te&&!G(m)&&!G(Ne))return!1;if(te&&G(Ne))continue;te=!1,m=Ne|1&m}}return G(m)||te}function G(a){return 0==(1&a)}function Se(a,l,f,m){if(null===l)return-1;let M=0;if(m||!f){let k=!1;for(;M-1)for(f++;f0?'="'+le+'"':"")+"]"}else 8&m?M+="."+te:4&m&&(M+=" "+te);else""!==M&&!G(te)&&(l+=Si(k,M),M=""),m=te,k=k||!G(m);f++}return""!==M&&(l+=Si(k,M)),l}const po={};function Fa(a){Ta(sa(),Li(),In()+a,Uu())}function Ta(a,l,f,m){if(!m)if(3==(3&l[2])){const k=a.preOrderCheckHooks;null!==k&&Gl(l,k,f)}else{const k=a.preOrderHooks;null!==k&&$i(l,k,0,f)}Cr(f)}function ni(a,l){return a<<17|l<<2}function Tr(a){return a>>17&32767}function io(a){return 2|a}function va(a){return(131068&a)>>2}function Cs(a,l){return-131069&a|l<<2}function xl(a){return 1|a}function hv(a,l){const f=a.contentQueries;if(null!==f)for(let m=0;m20&&Ta(a,l,20,Uu()),f(m,M)}finally{Cr(k)}}function c1(a,l,f){if(da(l)){const M=l.directiveEnd;for(let k=l.directiveStart;k0;){const f=a[--l];if("number"==typeof f&&f<0)return f}return 0})(le)!=Ne&&le.push(Ne),le.push(m,M,te)}}function Qc(a,l){null!==a.hostBindings&&a.hostBindings(1,l)}function ju(a,l){l.flags|=2,(a.components||(a.components=[])).push(l.index)}function D0(a,l,f){if(f){if(l.exportAs)for(let m=0;m0&&Gu(f)}}function Gu(a){for(let m=np(a);null!==m;m=V_(m))for(let M=10;M0&&Gu(k)}const f=a[1].components;if(null!==f)for(let m=0;m0&&Gu(M)}}function Nm(a,l){const f=Ts(l,a),m=f[1];(function(a,l){for(let f=l.length;fPromise.resolve(null))();function Vu(a){return a[7]||(a[7]=[])}function yb(a){return a.cleanup||(a.cleanup=[])}function mv(a,l){const f=a[9],m=f?f.get(Gf,null):null;m&&m.handleError(l)}function bb(a,l,f,m,M){for(let k=0;kthis.processProvider(le,l,f)),Xl([l],le=>this.processInjectorType(le,[],k)),this.records.set(Jg,sd(void 0,this));const te=this.records.get(Im);this.scope=null!=te?te.value:null,this.source=M||("object"==typeof l?null:S(l))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(l=>l.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(l,f=R,m=Yr.Default){this.assertNotDestroyed();const M=nn(this),k=Hi(void 0);try{if(!(m&Yr.SkipSelf)){let le=this.records.get(l);if(void 0===le){const Ne=("function"==typeof(a=l)||"object"==typeof a&&a instanceof Jl)&&Ur(l);le=Ne&&this.injectableDefInScope(Ne)?sd(yv(l),Lm):null,this.records.set(l,le)}if(null!=le)return this.hydrate(l,le)}return(m&Yr.Self?Ag():this.parent).get(l,f=m&Yr.Optional&&f===R?null:f)}catch(te){if("NullInjectorError"===te.name){if((te[q]=te[q]||[]).unshift(S(l)),M)throw te;return Gs(te,l,"R3InjectorError",this.source)}throw te}finally{Hi(k),nn(M)}var a}_resolveInjectorDefTypes(){this.injectorDefTypes.forEach(l=>this.get(l))}toString(){const l=[];return this.records.forEach((m,M)=>l.push(S(M))),`R3Injector[${l.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new Error("Injector has already been destroyed.")}processInjectorType(l,f,m){if(!(l=Z(l)))return!1;let M=Kr(l);const k=null==M&&l.ngModule||void 0,te=void 0===k?l:k,le=-1!==m.indexOf(te);if(void 0!==k&&(M=Kr(k)),null==M)return!1;if(null!=M.imports&&!le){let wt;m.push(te);try{Xl(M.imports,ln=>{this.processInjectorType(ln,f,m)&&(void 0===wt&&(wt=[]),wt.push(ln))})}finally{}if(void 0!==wt)for(let ln=0;lnthis.processProvider(Rr,dn,nr||Jt))}}this.injectorDefTypes.add(te);const Ne=wo(te)||(()=>new te);this.records.set(te,sd(Ne,Lm));const qe=M.providers;if(null!=qe&&!le){const wt=l;Xl(qe,ln=>this.processProvider(ln,wt,qe))}return void 0!==k&&void 0!==l.providers}processProvider(l,f,m){let M=Og(l=Z(l))?l:Z(l&&l.provide);const k=g1(a=l)?sd(void 0,a.useValue):sd(Md(a),Lm);var a;if(Og(l)||!0!==l.multi)this.records.get(M);else{let te=this.records.get(M);te||(te=sd(void 0,Lm,!0),te.factory=()=>Pi(te.multi),this.records.set(M,te)),M=l,te.multi.push(l)}this.records.set(M,k)}hydrate(l,f){return f.value===Lm&&(f.value=pd,f.value=f.factory()),"object"==typeof f.value&&f.value&&null!==(a=f.value)&&"object"==typeof a&&"function"==typeof a.ngOnDestroy&&this.onDestroy.add(f.value),f.value;var a}injectableDefInScope(l){if(!l.providedIn)return!1;const f=Z(l.providedIn);return"string"==typeof f?"any"===f||f===this.scope:this.injectorDefTypes.has(f)}}function yv(a){const l=Ur(a),f=null!==l?l.factory:wo(a);if(null!==f)return f;if(a instanceof Jl)throw new Error(`Token ${S(a)} is missing a \u0275prov definition.`);if(a instanceof Function)return function(a){const l=a.length;if(l>0){const m=Ll(l,"?");throw new Error(`Can't resolve all parameters for ${S(a)}: (${m.join(", ")}).`)}const f=function(a){const l=a&&(a[ei]||a[$n]);if(l){const f=function(a){if(a.hasOwnProperty("name"))return a.name;const l=(""+a).match(/^function\s*([^\s(]+)/);return null===l?"":l[1]}(a);return console.warn(`DEPRECATED: DI is instantiating a token "${f}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${f}" class.`),l}return null}(a);return null!==f?()=>f.factory(a):()=>new a}(a);throw new Error("unreachable")}function Md(a,l,f){let m;if(Og(a)){const M=Z(a);return wo(M)||yv(M)}if(g1(a))m=()=>Z(a.useValue);else if(function(a){return!(!a||!a.useFactory)}(a))m=()=>a.useFactory(...Pi(a.deps||[]));else if(function(a){return!(!a||!a.useExisting)}(a))m=()=>xn(Z(a.useExisting));else{const M=Z(a&&(a.useClass||a.provide));if(!function(a){return!!a.deps}(a))return wo(M)||yv(M);m=()=>new M(...Pi(a.deps))}return m}function sd(a,l,f=!1){return{factory:a,value:l,multi:f?[]:void 0}}function g1(a){return null!==a&&"object"==typeof a&> in a}function Og(a){return"function"==typeof a}const U0=function(a,l,f){return function(a,l=null,f=null,m){const M=Sb(a,l,f,m);return M._resolveInjectorDefTypes(),M}({name:f},l,a,f)};let Ac=(()=>{class a{static create(f,m){return Array.isArray(f)?U0(f,m,""):U0(f.providers,f.parent,f.name||"")}}return a.THROW_IF_NOT_FOUND=R,a.NULL=new k0,a.\u0275prov=xt({token:a,providedIn:"any",factory:()=>xn(Jg)}),a.__NG_ELEMENT_ID__=-1,a})();function ny(a,l){$c(a_(a)[1],Ss())}function T1(a){let l=function(a){return Object.getPrototypeOf(a.prototype).constructor}(a.type),f=!0;const m=[a];for(;l;){let M;if(Ya(a))M=l.\u0275cmp||l.\u0275dir;else{if(l.\u0275cmp)throw new Error("Directives cannot inherit Components");M=l.\u0275dir}if(M){if(f){m.push(M);const te=a;te.inputs=Nf(a.inputs),te.declaredInputs=Nf(a.declaredInputs),te.outputs=Nf(a.outputs);const le=M.hostBindings;le&&Bb(a,le);const Ne=M.viewQuery,qe=M.contentQueries;if(Ne&&S1(a,Ne),qe&&Ub(a,qe),y(a.inputs,M.inputs),y(a.declaredInputs,M.declaredInputs),y(a.outputs,M.outputs),Ya(M)&&M.data.animation){const wt=a.data;wt.animation=(wt.animation||[]).concat(M.data.animation)}}const k=M.features;if(k)for(let te=0;te=0;m--){const M=a[m];M.hostVars=l+=M.hostVars,M.hostAttrs=Wd(M.hostAttrs,f=Wd(f,M.hostAttrs))}}(m)}function Nf(a){return a===gr?{}:a===Jt?[]:a}function S1(a,l){const f=a.viewQuery;a.viewQuery=f?(m,M)=>{l(m,M),f(m,M)}:l}function Ub(a,l){const f=a.contentQueries;a.contentQueries=f?(m,M,k)=>{l(m,M,k),f(m,M,k)}:l}function Bb(a,l){const f=a.hostBindings;a.hostBindings=f?(m,M)=>{l(m,M),f(m,M)}:l}let Tv=null;function tg(){if(!Tv){const a=Dr.Symbol;if(a&&a.iterator)Tv=a.iterator;else{const l=Object.getOwnPropertyNames(Map.prototype);for(let f=0;fle(Me(Xa[m.index])):m.index;if(rt(f)){let Xa=null;if(!le&&Ne&&(Xa=function(a,l,f,m){const M=a.cleanup;if(null!=M)for(let k=0;kNe?le[Ne]:null}"string"==typeof te&&(k+=2)}return null}(a,l,M,m.index)),null!==Xa)(Xa.__ngLastListenerFn__||Xa).__ngNextListenerFn__=k,Xa.__ngLastListenerFn__=k,nr=!1;else{k=tE(m,l,ln,k,!1);const du=f.listen(Oo,M,k);dn.push(k,du),wt&&wt.push(M,ua,Xi,Xi+1)}}else k=tE(m,l,ln,k,!0),Oo.addEventListener(M,k,te),dn.push(k),wt&&wt.push(M,ua,Xi,te)}else k=tE(m,l,ln,k,!1);const Rr=m.outputs;let Ti;if(nr&&null!==Rr&&(Ti=Rr[M])){const ii=Ti.length;if(ii)for(let Oo=0;Oo0;)l=l[15],a--;return l}(a,vs.lFrame.contextLView))[8]}(a)}function fO(a,l){let f=null;const m=function(a){const l=a.attrs;if(null!=l){const f=l.indexOf(5);if(0==(1&f))return l[f+1]}return null}(a);for(let M=0;M=0}const Tf={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function XS(a){return a.substring(Tf.key,Tf.keyEnd)}function KS(a,l){const f=Tf.textEnd;return f===l?-1:(l=Tf.keyEnd=function(a,l,f){for(;l32;)l++;return l}(a,Tf.key=l,f),Ov(a,l,f))}function Ov(a,l,f){for(;l=0;f=KS(l,f))Vl(a,XS(l),!0)}function O_(a,l,f,m){const M=Li(),k=sa(),te=aa(2);k.firstUpdatePass&&oC(k,a,te,m),l!==po&&nf(M,te,l)&&wv(k,k.data[In()],M,M[11],a,M[te+1]=function(a,l){return null==a||("string"==typeof l?a+=l:"object"==typeof a&&(a=S(kd(a)))),a}(l,f),m,te)}function w_(a,l,f,m){const M=sa(),k=aa(2);M.firstUpdatePass&&oC(M,null,k,m);const te=Li();if(f!==po&&nf(te,k,f)){const le=M.data[In()];if(_y(le,m)&&!iC(M,k)){let Ne=m?le.classesWithoutHost:le.stylesWithoutHost;null!==Ne&&(f=A(Ne,f||"")),Wb(M,le,te,f,m)}else!function(a,l,f,m,M,k,te,le){M===po&&(M=Jt);let Ne=0,qe=0,wt=0=a.expandoStartIndex}function oC(a,l,f,m){const M=a.data;if(null===M[f+1]){const k=M[In()],te=iC(a,f);_y(k,m)&&null===l&&!te&&(l=!1),l=function(a,l,f,m){const M=V(a);let k=m?l.residualClasses:l.residualStyles;if(null===M)0===(m?l.classBindings:l.styleBindings)&&(f=R1(f=sE(null,a,l,f,m),l.attrs,m),k=null);else{const te=l.directiveStylingLast;if(-1===te||a[te]!==M)if(f=sE(M,a,l,f,m),null===k){let Ne=function(a,l,f){const m=f?l.classBindings:l.styleBindings;if(0!==va(m))return a[Tr(m)]}(a,l,m);void 0!==Ne&&Array.isArray(Ne)&&(Ne=sE(null,a,l,Ne[1],m),Ne=R1(Ne,l.attrs,m),function(a,l,f,m){a[Tr(f?l.classBindings:l.styleBindings)]=m}(a,l,m,Ne))}else k=function(a,l,f){let m;const M=l.directiveEnd;for(let k=1+l.directiveStylingLast;k0)&&(qe=!0)}else wt=f;if(M)if(0!==Ne){const dn=Tr(a[le+1]);a[m+1]=ni(dn,le),0!==dn&&(a[dn+1]=Cs(a[dn+1],m)),a[le+1]=function(a,l){return 131071&a|l<<17}(a[le+1],m)}else a[m+1]=ni(le,0),0!==le&&(a[le+1]=Cs(a[le+1],m)),le=m;else a[m+1]=ni(Ne,0),0===le?le=m:a[Ne+1]=Cs(a[Ne+1],m),Ne=m;qe&&(a[m+1]=io(a[m+1])),QS(a,wt,m,!0),QS(a,wt,m,!1),function(a,l,f,m,M){const k=M?a.residualClasses:a.residualStyles;null!=k&&"string"==typeof l&&oc(k,l)>=0&&(f[m+1]=xl(f[m+1]))}(l,wt,a,m,k),te=ni(le,Ne),k?l.classBindings=te:l.styleBindings=te}(M,k,l,f,te,m)}}function sE(a,l,f,m,M){let k=null;const te=f.directiveEnd;let le=f.directiveStylingLast;for(-1===le?le=f.directiveStart:le++;le0;){const Ne=a[M],qe=Array.isArray(Ne),wt=qe?Ne[1]:Ne,ln=null===wt;let dn=f[M+1];dn===po&&(dn=ln?Jt:void 0);let nr=ln?Id(dn,m):wt===m?dn:void 0;if(qe&&!hy(nr)&&(nr=Id(Ne,m)),hy(nr)&&(le=nr,te))return le;const Rr=a[M+1];M=te?Tr(Rr):va(Rr)}if(null!==l){let Ne=k?l.residualClasses:l.residualStyles;null!=Ne&&(le=Id(Ne,m))}return le}function hy(a){return void 0!==a}function _y(a,l){return 0!=(a.flags&(l?16:32))}function uC(a,l=""){const f=Li(),m=sa(),M=a+20,k=m.firstCreatePass?ip(m,M,1,l,null):m.data[M],te=f[M]=Rf(f[11],l);Yh(m,f,te,k),Mu(k,!1)}function aE(a){return gy("",a,""),aE}function gy(a,l,f){const m=Li(),M=Kg(m,a,l,f);return M!==po&&eg(m,In(),M),gy}function lE(a,l,f,m,M){const k=Li(),te=qg(k,a,l,f,m,M);return te!==po&&eg(k,In(),te),lE}function uE(a,l,f,m,M,k,te){const le=Li(),Ne=function(a,l,f,m,M,k,te,le){const qe=Sv(a,wr(),f,M,te);return aa(3),qe?l+H(f)+m+H(M)+k+H(te)+le:po}(le,a,l,f,m,M,k,te);return Ne!==po&&eg(le,In(),Ne),uE}function gC(a,l,f){w_(Vl,ig,Kg(Li(),a,l,f),!0)}function mC(a,l,f,m,M){w_(Vl,ig,qg(Li(),a,l,f,m,M),!0)}function vC(a,l,f,m,M,k,te,le,Ne){w_(Vl,ig,function(a,l,f,m,M,k,te,le,Ne,qe){const ln=zp(a,wr(),f,M,te,Ne);return aa(4),ln?l+H(f)+m+H(M)+k+H(te)+le+H(Ne)+qe:po}(Li(),a,l,f,m,M,k,te,le,Ne),!0)}function cE(a,l,f){const m=Li();return nf(m,pu(),l)&&Ro(sa(),hr(),m,a,l,m[11],f,!0),cE}function dE(a,l,f){const m=Li();if(nf(m,pu(),l)){const k=sa(),te=hr();Ro(k,te,m,a,l,function(a,l,f){return(null===a||Ya(a))&&(f=function(a){for(;Array.isArray(a);){if("object"==typeof a[1])return a;a=a[0]}return null}(f[l.index])),f[11]}(V(k.data),te,m),f,!0)}return dE}const jm=void 0;var GO=["en",[["a","p"],["AM","PM"],jm],[["AM","PM"],jm,jm],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],jm,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],jm,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",jm,"{1} 'at' {0}",jm],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function(a){const l=Math.floor(Math.abs(a)),f=a.toString().replace(/^[^.]*\.?/,"").length;return 1===l&&0===f?1:5}];let xv={};function fE(a){const l=function(a){return a.toLowerCase().replace(/_/g,"-")}(a);let f=xC(l);if(f)return f;const m=l.split("-")[0];if(f=xC(m),f)return f;if("en"===m)return GO;throw new Error(`Missing locale data for the locale "${a}".`)}function wC(a){return fE(a)[Ua.PluralCase]}function xC(a){return a in xv||(xv[a]=Dr.ng&&Dr.ng.common&&Dr.ng.common.locales&&Dr.ng.common.locales[a]),xv[a]}var Ua=(()=>((Ua=Ua||{})[Ua.LocaleId=0]="LocaleId",Ua[Ua.DayPeriodsFormat=1]="DayPeriodsFormat",Ua[Ua.DayPeriodsStandalone=2]="DayPeriodsStandalone",Ua[Ua.DaysFormat=3]="DaysFormat",Ua[Ua.DaysStandalone=4]="DaysStandalone",Ua[Ua.MonthsFormat=5]="MonthsFormat",Ua[Ua.MonthsStandalone=6]="MonthsStandalone",Ua[Ua.Eras=7]="Eras",Ua[Ua.FirstDayOfWeek=8]="FirstDayOfWeek",Ua[Ua.WeekendRange=9]="WeekendRange",Ua[Ua.DateFormat=10]="DateFormat",Ua[Ua.TimeFormat=11]="TimeFormat",Ua[Ua.DateTimeFormat=12]="DateTimeFormat",Ua[Ua.NumberSymbols=13]="NumberSymbols",Ua[Ua.NumberFormats=14]="NumberFormats",Ua[Ua.CurrencyCode=15]="CurrencyCode",Ua[Ua.CurrencySymbol=16]="CurrencySymbol",Ua[Ua.CurrencyName=17]="CurrencyName",Ua[Ua.Currencies=18]="Currencies",Ua[Ua.Directionality=19]="Directionality",Ua[Ua.PluralCase=20]="PluralCase",Ua[Ua.ExtraData=21]="ExtraData",Ua))();const zO=["zero","one","two","few","many"],my="en-US",vy={marker:"element"},yy={marker:"ICU"};var Ad=(()=>((Ad=Ad||{})[Ad.SHIFT=2]="SHIFT",Ad[Ad.APPEND_EAGERLY=1]="APPEND_EAGERLY",Ad[Ad.COMMENT=2]="COMMENT",Ad))();let DC=my;function pE(a){(function(a,l){null==a&&Ut(l,a,null,"!=")})(a,"Expected localeId to be defined"),"string"==typeof a&&(DC=a.toLowerCase().replace(/_/g,"-"))}function RC(a,l,f){const m=l.insertBeforeIndex,M=Array.isArray(m)?m[0]:m;return null===M?Sp(a,0,f):Me(f[M])}function hE(a,l,f,m,M){const k=l.insertBeforeIndex;if(Array.isArray(k)){let te=m,le=null;if(3&l.type||(le=te,te=M),null!==te&&0==(2&l.flags))for(let Ne=1;Ne1)for(let f=a.length-2;f>=0;f--){const m=a[f];NC(m)||XO(m,l)&&null===KO(m)&&qO(m,l.index)}}function NC(a){return!(64&a.type)}function XO(a,l){return NC(l)||a.index>l.index}function KO(a){const l=a.insertBeforeIndex;return Array.isArray(l)?l[0]:l}function qO(a,l){const f=a.insertBeforeIndex;Array.isArray(f)?f[0]=l:(J_(RC,hE),a.insertBeforeIndex=l)}function N1(a,l){const f=a.data[l];return null===f||"string"==typeof f?null:f.hasOwnProperty("currentCaseLViewIndex")?f:f.value}function nw(a,l,f){const m=Jh(a,f,64,null,null);return _E(l,m),m}function by(a,l){const f=l[a.currentCaseLViewIndex];return null===f?f:f<0?~f:f}function PC(a){return a>>>17}function IC(a){return(131070&a)>>>1}let Dv=0,Gm=0;function FC(a,l,f,m){const M=f[11];let te,k=null;for(let le=0;le>>1,f),null,null,nr,Rr,null);break;default:throw new Error(`Unable to determine the type of mutate operation for "${Ne}"`)}else switch(Ne){case yy:const qe=l[++le],wt=l[++le];null===f[wt]&&Wc(f[wt]=_g(M,qe),f);break;case vy:const ln=l[++le],dn=l[++le];null===f[dn]&&Wc(f[dn]=Bh(M,ln,null),f)}}}function kC(a,l,f,m,M){for(let k=0;k>>2;switch(3&wt){case 1:const dn=f[++qe],nr=f[++qe],Rr=a.data[ln];"string"==typeof Rr?d1(l[11],l[ln],null,Rr,dn,Ne,nr):Ro(a,Rr,l,dn,Ne,l[11],nr,!1);break;case 0:const Ti=l[ln];null!==Ti&&ph(l[11],Ti,Ne);break;case 2:sw(a,N1(a,ln),l,Ne);break;case 3:$C(a,N1(a,ln),m,l)}}}}else{const Ne=f[k+1];if(Ne>0&&3==(3&Ne)){const wt=N1(a,Ne>>>2);l[wt.currentCaseLViewIndex]<0&&$C(a,wt,m,l)}}k+=le}}function $C(a,l,f,m){let M=m[l.currentCaseLViewIndex];if(null!==M){let k=Dv;M<0&&(M=m[l.currentCaseLViewIndex]=~M,k=-1),kC(a,m,l.update[M],f,k)}}function sw(a,l,f,m){const M=function(a,l){let f=a.cases.indexOf(l);if(-1===f)switch(a.type){case 1:{const m=function(a,l){const f=wC(l)(parseInt(a,10)),m=zO[f];return void 0!==m?m:"other"}(l,DC);f=a.cases.indexOf(m),-1===f&&"other"!==m&&(f=a.cases.indexOf("other"));break}case 0:f=a.cases.indexOf("other")}return-1===f?null:f}(l,m);if(by(l,f)!==M&&(HC(a,l,f),f[l.currentCaseLViewIndex]=null===M?null:~M,null!==M)){const te=f[l.anchorIdx];te&&FC(a,l.create[M],f,te)}}function HC(a,l,f){let m=by(l,f);if(null!==m){const M=l.remove[m];for(let k=0;k0){const le=ur(te,f);null!==le&&y_(f[11],le)}else HC(a,N1(a,~te),f)}}}function aw(){const a=[];let f,m,l=-1;function k(le,Ne){l=0;const qe=by(le,Ne);m=null!==qe?le.remove[qe]:Jt}function te(){if(l0?f[le]:(a.push(l,m),k(f[1].data[~le],f),te())}return 0===a.length?null:(m=a.pop(),l=a.pop(),te())}return function(le,Ne){for(f=Ne;a.length;)a.pop();return k(le.value,Ne),te}}const Ey=/\ufffd(\d+):?\d*\ufffd/gi,lw=/({\s*\ufffd\d+:?\d*\ufffd\s*,\s*\S{6}\s*,[\s\S]*})/gi,uw=/\ufffd(\d+)\ufffd/,YC=/^\s*(\ufffd\d+:?\d*\ufffd)\s*,\s*(select|plural)\s*,/,cw=/\ufffd\/?\*(\d+:\d+)\ufffd/gi,dw=/\ufffd(\/?[#*]\d+):?\d*\ufffd/gi,ZC=/\uE500/g;function jC(a,l,f,m,M,k,te){const le=Vp(a,m,1,null);let Ne=le<f.length&&f.push(Ne)}return{type:m,mainBinding:M,cases:l,values:f}}function Vm(a){if(!a)return[];let l=0;const f=[],m=[],M=/[{}]/g;let k;for(M.lastIndex=0;k=M.exec(a);){const le=k.index;if("}"==k[0]){if(f.pop(),0==f.length){const Ne=a.substring(l,le);YC.test(Ne)?m.push(yw(Ne)):m.push(Ne),l=le+1}}else{if(0==f.length){const Ne=a.substring(l,le);m.push(Ne),l=le+1}f.push("{")}}const te=a.substring(l);return m.push(te),m}function bw(a,l,f,m,M,k,te,le){const Ne=[],qe=[],wt=[];l.cases.push(k),l.create.push(Ne),l.remove.push(qe),l.update.push(wt);const dn=rh(Su()).getInertBodyElement(te),nr=Rs(dn)||dn;return nr?vE(a,l,f,m,Ne,qe,wt,nr,M,le,0):0}function vE(a,l,f,m,M,k,te,le,Ne,qe,wt){let ln=0,dn=le.firstChild;for(;dn;){const nr=Vp(a,f,1,null);switch(dn.nodeType){case Node.ELEMENT_NODE:const Rr=dn,Ti=Rr.tagName.toLowerCase();if(Y.hasOwnProperty(Ti)){yE(M,vy,Ti,Ne,nr),a.data[nr]=Ti;const ua=Rr.attributes;for(let Xa=0;Xa>>Ad.SHIFT;let ln=a[wt];null===ln&&(ln=a[wt]=Ne?M.createComment(le):Rf(M,le)),qe&&null!==f&&_h(M,f,ln,m,!1)}})(M,Ne.create,wt,le&&8&le.type?M[le.index]:null),bl(!0)}function EE(){bl(!1)}function QC(a,l,f){Ty(a,l,f),EE()}function XC(a,l){const f=sa();!function(a,l,f){const M=Ss().index,k=[];if(a.firstCreatePass&&null===a.data[l]){for(let te=0;te0){const m=a.data[f];kC(a,l,Array.isArray(m)?m:m.update,wr()-Gm-1,Dv)}Dv=0,Gm=0}(sa(),Li(),a+20)}function qC(a,l={}){return function(a,l={}){let f=a;if(Cw.test(a)){const m={},M=[0];f=f.replace(WC,(k,te,le)=>{const Ne=te||le,qe=m[Ne]||[];if(qe.length||(Ne.split("|").forEach(Ti=>{const ii=Ti.match(ww),Oo=ii?parseInt(ii[1],10):0,Xi=Ow.test(Ti);qe.push([Oo,Xi,Ti])}),m[Ne]=qe),!qe.length)throw new Error(`i18n postprocess: unmatched placeholder - ${Ne}`);const wt=M[M.length-1];let ln=0;for(let Ti=0;Til.hasOwnProperty(k)?`${M}${l[k]}${Ne}`:m),f=f.replace(Aw,(m,M)=>l.hasOwnProperty(M)?l[M]:m),f=f.replace(JC,(m,M)=>{if(l.hasOwnProperty(M)){const k=l[M];if(!k.length)throw new Error(`i18n postprocess: unmatched ICU - ${m} with key: ${M}`);return k.shift()}return m})),f}(a,l)}function SE(a,l,f,m,M){if(a=Z(a),Array.isArray(a))for(let k=0;k>20;if(Og(a)||!a.multi){const nr=new Js(Ne,M,D1),Rr=ME(le,l,M?wt:wt+dn,ln);-1===Rr?(ga(ns(qe,te),k,le),CE(k,a,l.length),l.push(le),qe.directiveStart++,qe.directiveEnd++,M&&(qe.providerIndexes+=1048576),f.push(nr),te.push(nr)):(f[Rr]=nr,te[Rr]=nr)}else{const nr=ME(le,l,wt+dn,ln),Rr=ME(le,l,wt,wt+dn),Ti=nr>=0&&f[nr],ii=Rr>=0&&f[Rr];if(M&&!ii||!M&&!Ti){ga(ns(qe,te),k,le);const Oo=function(a,l,f,m,M){const k=new Js(a,f,D1);return k.multi=[],k.index=l,k.componentProviders=0,eM(k,M,m&&!f),k}(M?Nw:Rw,f.length,M,m,Ne);!M&&ii&&(f[Rr].providerFactory=Oo),CE(k,a,l.length,0),l.push(le),qe.directiveStart++,qe.directiveEnd++,M&&(qe.providerIndexes+=1048576),f.push(Oo),te.push(Oo)}else CE(k,a,nr>-1?nr:Rr,eM(f[M?Rr:nr],Ne,!M&&m));!M&&m&&ii&&f[Rr].componentProviders++}}}function CE(a,l,f,m){const M=Og(l);if(M||function(a){return!!a.useClass}(l)){const te=(l.useClass||l).prototype.ngOnDestroy;if(te){const le=a.destroyHooks||(a.destroyHooks=[]);if(!M&&l.multi){const Ne=le.indexOf(f);-1===Ne?le.push(f,[m,te]):le[Ne+1].push(m,te)}else le.push(f,te)}}}function eM(a,l,f){return f&&a.componentProviders++,a.multi.push(l)-1}function ME(a,l,f,m){for(let M=f;M{f.providersResolver=(m,M)=>function(a,l,f){const m=sa();if(m.firstCreatePass){const M=Ya(a);SE(f,m.data,m.blueprint,M,!0),SE(l,m.data,m.blueprint,M,!1)}}(m,M?M(a):a,l)}}class nM{}class rM{}const Sy="ngComponent";class Iw{resolveComponentFactory(l){throw function(a){const l=Error(`No component factory found for ${S(a)}. Did you add it to @NgModule.entryComponents?`);return l[Sy]=a,l}(l)}}let Pv=(()=>{class a{}return a.NULL=new Iw,a})();function I1(...a){}function Iv(a,l){return new og(Qi(a,l))}const Fw=function(){return Iv(Ss(),Li())};let og=(()=>{class a{constructor(f){this.nativeElement=f}}return a.__NG_ELEMENT_ID__=Fw,a})();function sM(a){return a instanceof og?a.nativeElement:a}class Cy{}let kw=(()=>{class a{}return a.__NG_ELEMENT_ID__=()=>Hw(),a})();const Hw=function(){const a=Li(),f=Ts(Ss().index,a);return function(a){return a[11]}(ca(f)?f:a)};let xE=(()=>{class a{}return a.\u0275prov=xt({token:a,providedIn:"root",factory:()=>null}),a})();class aM{constructor(l){this.full=l,this.major=l.split(".")[0],this.minor=l.split(".")[1],this.patch=l.split(".").slice(2).join(".")}}const lM=new aM("12.2.13");class uM{constructor(){}supports(l){return Hm(l)}create(l){return new Zw(l)}}const Yw=(a,l)=>l;class Zw{constructor(l){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=l||Yw}forEachItem(l){let f;for(f=this._itHead;null!==f;f=f._next)l(f)}forEachOperation(l){let f=this._itHead,m=this._removalsHead,M=0,k=null;for(;f||m;){const te=!m||f&&f.currentIndex{te=this._trackByFn(M,le),null!==f&&Object.is(f.trackById,te)?(m&&(f=this._verifyReinsertion(f,le,te,M)),Object.is(f.item,le)||this._addIdentityChange(f,le)):(f=this._mismatch(f,le,te,M),m=!0),f=f._next,M++}),this.length=M;return this._truncate(f),this.collection=l,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let l;for(l=this._previousItHead=this._itHead;null!==l;l=l._next)l._nextPrevious=l._next;for(l=this._additionsHead;null!==l;l=l._nextAdded)l.previousIndex=l.currentIndex;for(this._additionsHead=this._additionsTail=null,l=this._movesHead;null!==l;l=l._nextMoved)l.previousIndex=l.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(l,f,m,M){let k;return null===l?k=this._itTail:(k=l._prev,this._remove(l)),null!==(l=null===this._unlinkedRecords?null:this._unlinkedRecords.get(m,null))?(Object.is(l.item,f)||this._addIdentityChange(l,f),this._reinsertAfter(l,k,M)):null!==(l=null===this._linkedRecords?null:this._linkedRecords.get(m,M))?(Object.is(l.item,f)||this._addIdentityChange(l,f),this._moveAfter(l,k,M)):l=this._addAfter(new jw(f,m),k,M),l}_verifyReinsertion(l,f,m,M){let k=null===this._unlinkedRecords?null:this._unlinkedRecords.get(m,null);return null!==k?l=this._reinsertAfter(k,l._prev,M):l.currentIndex!=M&&(l.currentIndex=M,this._addToMoves(l,M)),l}_truncate(l){for(;null!==l;){const f=l._next;this._addToRemovals(this._unlink(l)),l=f}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(l,f,m){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(l);const M=l._prevRemoved,k=l._nextRemoved;return null===M?this._removalsHead=k:M._nextRemoved=k,null===k?this._removalsTail=M:k._prevRemoved=M,this._insertAfter(l,f,m),this._addToMoves(l,m),l}_moveAfter(l,f,m){return this._unlink(l),this._insertAfter(l,f,m),this._addToMoves(l,m),l}_addAfter(l,f,m){return this._insertAfter(l,f,m),this._additionsTail=null===this._additionsTail?this._additionsHead=l:this._additionsTail._nextAdded=l,l}_insertAfter(l,f,m){const M=null===f?this._itHead:f._next;return l._next=M,l._prev=f,null===M?this._itTail=l:M._prev=l,null===f?this._itHead=l:f._next=l,null===this._linkedRecords&&(this._linkedRecords=new My),this._linkedRecords.put(l),l.currentIndex=m,l}_remove(l){return this._addToRemovals(this._unlink(l))}_unlink(l){null!==this._linkedRecords&&this._linkedRecords.remove(l);const f=l._prev,m=l._next;return null===f?this._itHead=m:f._next=m,null===m?this._itTail=f:m._prev=f,l}_addToMoves(l,f){return l.previousIndex===f||(this._movesTail=null===this._movesTail?this._movesHead=l:this._movesTail._nextMoved=l),l}_addToRemovals(l){return null===this._unlinkedRecords&&(this._unlinkedRecords=new My),this._unlinkedRecords.put(l),l.currentIndex=null,l._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=l,l._prevRemoved=null):(l._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=l),l}_addIdentityChange(l,f){return l.item=f,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=l:this._identityChangesTail._nextIdentityChange=l,l}}class jw{constructor(l,f){this.item=l,this.trackById=f,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class Gw{constructor(){this._head=null,this._tail=null}add(l){null===this._head?(this._head=this._tail=l,l._nextDup=null,l._prevDup=null):(this._tail._nextDup=l,l._prevDup=this._tail,l._nextDup=null,this._tail=l)}get(l,f){let m;for(m=this._head;null!==m;m=m._nextDup)if((null===f||f<=m.currentIndex)&&Object.is(m.trackById,l))return m;return null}remove(l){const f=l._prevDup,m=l._nextDup;return null===f?this._head=m:f._nextDup=m,null===m?this._tail=f:m._prevDup=f,null===this._head}}class My{constructor(){this.map=new Map}put(l){const f=l.trackById;let m=this.map.get(f);m||(m=new Gw,this.map.set(f,m)),m.add(l)}get(l,f){const M=this.map.get(l);return M?M.get(l,f):null}remove(l){const f=l.trackById;return this.map.get(f).remove(l)&&this.map.delete(f),l}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function cM(a,l,f){const m=a.previousIndex;if(null===m)return m;let M=0;return f&&m{if(f&&f.key===M)this._maybeAddToChanges(f,m),this._appendAfter=f,f=f._next;else{const k=this._getOrCreateRecordForKey(M,m);f=this._insertBeforeOrAppend(f,k)}}),f){f._prev&&(f._prev._next=null),this._removalsHead=f;for(let m=f;null!==m;m=m._nextRemoved)m===this._mapHead&&(this._mapHead=null),this._records.delete(m.key),m._nextRemoved=m._next,m.previousValue=m.currentValue,m.currentValue=null,m._prev=null,m._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(l,f){if(l){const m=l._prev;return f._next=l,f._prev=m,l._prev=f,m&&(m._next=f),l===this._mapHead&&(this._mapHead=f),this._appendAfter=l,l}return this._appendAfter?(this._appendAfter._next=f,f._prev=this._appendAfter):this._mapHead=f,this._appendAfter=f,null}_getOrCreateRecordForKey(l,f){if(this._records.has(l)){const M=this._records.get(l);this._maybeAddToChanges(M,f);const k=M._prev,te=M._next;return k&&(k._next=te),te&&(te._prev=k),M._next=null,M._prev=null,M}const m=new zw(l);return this._records.set(l,m),m.currentValue=f,this._addToAdditions(m),m}_reset(){if(this.isDirty){let l;for(this._previousMapHead=this._mapHead,l=this._previousMapHead;null!==l;l=l._next)l._nextPrevious=l._next;for(l=this._changesHead;null!==l;l=l._nextChanged)l.previousValue=l.currentValue;for(l=this._additionsHead;null!=l;l=l._nextAdded)l.previousValue=l.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(l,f){Object.is(f,l.currentValue)||(l.previousValue=l.currentValue,l.currentValue=f,this._addToChanges(l))}_addToAdditions(l){null===this._additionsHead?this._additionsHead=this._additionsTail=l:(this._additionsTail._nextAdded=l,this._additionsTail=l)}_addToChanges(l){null===this._changesHead?this._changesHead=this._changesTail=l:(this._changesTail._nextChanged=l,this._changesTail=l)}_forEach(l,f){l instanceof Map?l.forEach(f):Object.keys(l).forEach(m=>f(l[m],m))}}class zw{constructor(l){this.key=l,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function fM(){return new Ay([new uM])}let Ay=(()=>{class a{constructor(f){this.factories=f}static create(f,m){if(null!=m){const M=m.factories.slice();f=f.concat(M)}return new a(f)}static extend(f){return{provide:a,useFactory:m=>a.create(f,m||fM()),deps:[[a,new il,new ia]]}}find(f){const m=this.factories.find(M=>M.supports(f));if(null!=m)return m;throw new Error(`Cannot find a differ supporting object '${f}' of type '${function(a){return a.name||typeof a}(f)}'`)}}return a.\u0275prov=xt({token:a,providedIn:"root",factory:fM}),a})();function pM(){return new Oy([new dM])}let Oy=(()=>{class a{constructor(f){this.factories=f}static create(f,m){if(m){const M=m.factories.slice();f=f.concat(M)}return new a(f)}static extend(f){return{provide:a,useFactory:m=>a.create(f,m||pM()),deps:[[a,new il,new ia]]}}find(f){const m=this.factories.find(M=>M.supports(f));if(m)return m;throw new Error(`Cannot find a differ supporting object '${f}'`)}}return a.\u0275prov=xt({token:a,providedIn:"root",factory:pM}),a})();function wy(a,l,f,m,M=!1){for(;null!==f;){const k=l[f.index];if(null!==k&&m.push(Me(k)),$s(k))for(let le=10;le-1&&(gg(l,m),cl(f,m))}this._attachedToViewContainer=!1}Ep(this._lView[1],this._lView)}onDestroy(l){at(this._lView[1],this._lView,null,l)}markForCheck(){I0(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){Pm(this._lView[1],this._lView,this.context)}checkNoChanges(){!function(a,l,f){Bo(!0);try{Pm(a,l,f)}finally{Bo(!1)}}(this._lView[1],this._lView,this.context)}attachToViewContainerRef(){if(this._appRef)throw new Error("This view is already attached directly to the ApplicationRef!");this._attachedToViewContainer=!0}detachFromAppRef(){var l;this._appRef=null,jh(this._lView[1],l=this._lView,l[11],2,null,null)}attachToAppRef(l){if(this._attachedToViewContainer)throw new Error("This view is already attached to a ViewContainer!");this._appRef=l}}class Jw extends L1{constructor(l){super(l),this._view=l}detectChanges(){Xh(this._view)}checkNoChanges(){!function(a){Bo(!0);try{Xh(a)}finally{Bo(!1)}}(this._view)}get context(){return null}}const Xw=function(a){return function(a,l,f){if(Il(a)&&!f){const m=Ts(a.index,l);return new L1(m,m)}return 47&a.type?new L1(l[16],l):null}(Ss(),Li(),16==(16&a))};let Kw=(()=>{class a{}return a.__NG_ELEMENT_ID__=Xw,a})();const tx=[new dM],rx=new Ay([new uM]),ix=new Oy(tx),sx=function(){return xy(Ss(),Li())};let F1=(()=>{class a{}return a.__NG_ELEMENT_ID__=sx,a})();const ax=F1,lx=class extends ax{constructor(l,f,m){super(),this._declarationLView=l,this._declarationTContainer=f,this.elementRef=m}createEmbeddedView(l){const f=this._declarationTContainer.tViews,m=Ap(this._declarationLView,f,l,16,null,f.declTNode,null,null,null,null);m[17]=this._declarationLView[this._declarationTContainer.index];const k=this._declarationLView[19];return null!==k&&(m[19]=k.createEmbeddedView(f)),X_(f,m,l),new L1(m)}};function xy(a,l){return 4&a.type?new lx(l,a,Iv(a,l)):null}class zm{}class DE{}const dx=function(){return gM(Ss(),Li())};let Dy=(()=>{class a{}return a.__NG_ELEMENT_ID__=dx,a})();const px=Dy,hM=class extends px{constructor(l,f,m){super(),this._lContainer=l,this._hostTNode=f,this._hostLView=m}get element(){return Iv(this._hostTNode,this._hostLView)}get injector(){return new jc(this._hostTNode,this._hostLView)}get parentInjector(){const l=fc(this._hostTNode,this._hostLView);if(Ye(l)){const f=ot(l,this._hostLView),m=Ie(l);return new jc(f[1].data[m+8],f)}return new jc(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(l){const f=_M(this._lContainer);return null!==f&&f[l]||null}get length(){return this._lContainer.length-10}createEmbeddedView(l,f,m){const M=l.createEmbeddedView(f||{});return this.insert(M,m),M}createComponent(l,f,m,M,k){const te=m||this.parentInjector;if(!k&&null==l.ngModule&&te){const Ne=te.get(zm,null);Ne&&(k=Ne)}const le=l.create(te,M,void 0,k);return this.insert(le.hostView,f),le}insert(l,f){const m=l._lView,M=m[1];if($s(m[3])){const wt=this.indexOf(l);if(-1!==wt)this.detach(wt);else{const ln=m[3],dn=new hM(ln,ln[6],ln[3]);dn.detach(dn.indexOf(l))}}const k=this._adjustIndex(f),te=this._lContainer;!function(a,l,f,m){const M=10+m,k=f.length;m>0&&(f[M-1][4]=l),mHh});class V1 extends rM{constructor(l,f){super(),this.componentDef=l,this.ngModule=f,this.componentType=l.type,this.selector=l.selectors.map(as).join(","),this.ngContentSelectors=l.ngContentSelectors?l.ngContentSelectors:[],this.isBoundToModule=!!f}get inputs(){return GE(this.componentDef.inputs)}get outputs(){return GE(this.componentDef.outputs)}create(l,f,m,M){const k=(M=M||this.ngModule)?function(a,l){return{get:(f,m,M)=>{const k=a.get(f,Uv,M);return k!==Uv||m===Uv?k:l.get(f,m,M)}}}(l,M.injector):l,te=k.get(Cy,dt),le=k.get(xE,null),Ne=te.createRenderer(null,this.componentDef),qe=this.componentDef.selectors[0][0]||"div",wt=m?function(a,l,f){if(rt(a))return a.selectRootElement(l,f===Gn.ShadowDom);let m="string"==typeof l?a.querySelector(l):l;return m.textContent="",m}(Ne,m,this.componentDef.encapsulation):Bh(te.createRenderer(null,this.componentDef),qe,function(a){const l=a.toLowerCase();return"svg"===l?"http://www.w3.org/2000/svg":"math"===l?"http://www.w3.org/1998/MathML/":null}(qe)),ln=this.componentDef.onPush?576:528,dn=function(a,l){return{components:[],scheduler:a||Hh,clean:vS,playerHandler:l||null,flags:0}}(),nr=zg(0,null,null,1,0,null,null,null,null,null),Rr=Ap(null,nr,dn,ln,null,null,te,Ne,le,k);let Ti,ii;un(Rr);try{const Oo=function(a,l,f,m,M,k){const te=f[1];f[20]=a;const Ne=ip(te,20,2,"#host",null),qe=Ne.mergedAttrs=l.hostAttrs;null!==qe&&(vv(Ne,qe,!0),null!==a&&(ic(M,a,qe),null!==Ne.classes&&Gh(M,a,Ne.classes),null!==Ne.styles&&Zg(M,a,Ne.styles)));const wt=m.createRenderer(a,l),ln=Ap(f,_v(l),null,l.onPush?64:16,f[20],Ne,m,wt,k||null,null);return te.firstCreatePass&&(ga(ns(Ne,f),te,l.type),ju(te,Ne),R0(Ne,f.length,1)),h1(f,ln),f[20]=ln}(wt,this.componentDef,Rr,te,Ne);if(wt)if(m)ic(Ne,wt,["ng-version",lM.full]);else{const{attrs:Xi,classes:ua}=function(a){const l=[],f=[];let m=1,M=2;for(;m0&&Gh(Ne,wt,ua.join(" "))}if(ii=ms(nr,20),void 0!==f){const Xi=ii.projection=[];for(let ua=0;uaNe(te,l)),l.contentQueries){const Ne=Ss();l.contentQueries(1,te,Ne.directiveStart)}const le=Ss();return!k.firstCreatePass||null===l.hostBindings&&null===l.hostAttrs||(Cr(le.index),Op(f[1],le,0,le.directiveStart,le.directiveEnd,l),Qc(l,te)),te}(Oo,this.componentDef,Rr,dn,[ny]),X_(nr,Rr,null)}finally{ai()}return new jx(this.componentType,Ti,Iv(ii,Rr),Rr,ii)}}class jx extends nM{constructor(l,f,m,M,k){super(),this.location=m,this._rootLView=M,this._tNode=k,this.instance=f,this.hostView=this.changeDetectorRef=new Jw(M),this.componentType=l}get injector(){return new jc(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(l){this.hostView.onDestroy(l)}}const Bv=new Map;class zx extends zm{constructor(l,f){super(),this._parent=f,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[],this.componentFactoryResolver=new Uy(this);const m=jo(l),M=l[Yt]||null;M&&pE(M),this._bootstrapComponents=yf(m.bootstrap),this._r3Injector=Sb(l,f,[{provide:zm,useValue:this},{provide:Pv,useValue:this.componentFactoryResolver}],S(l)),this._r3Injector._resolveInjectorDefTypes(),this.instance=this.get(l)}get(l,f=Ac.THROW_IF_NOT_FOUND,m=Yr.Default){return l===Ac||l===zm||l===Jg?this:this._r3Injector.get(l,f,m)}destroy(){const l=this._r3Injector;!l.destroyed&&l.destroy(),this.destroyCbs.forEach(f=>f()),this.destroyCbs=null}onDestroy(l){this.destroyCbs.push(l)}}class zE extends DE{constructor(l){super(),this.moduleType=l,null!==jo(l)&&function(a){const l=new Set;!function f(m){const M=jo(m,!0),k=M.id;null!==k&&(function(a,l,f){if(l&&l!==f)throw new Error(`Duplicate module registered for ${a} - ${S(l)} vs ${S(l.name)}`)}(k,Bv.get(k),m),Bv.set(k,m));const te=yf(M.imports);for(const le of te)l.has(le)||(l.add(le),f(le))}(a)}(l)}create(l){return new zx(this.moduleType,l)}}function WE(a,l,f){const m=uu()+a,M=Li();return M[m]===po?Kh(M,m,f?l.call(f):l()):Um(M,m)}function JE(a,l,f,m){return QM(Li(),uu(),a,l,f,m)}function z1(a,l,f,m,M){return XM(Li(),uu(),a,l,f,m,M)}function WM(a,l,f,m,M,k){return KM(Li(),uu(),a,l,f,m,M,k)}function e_(a,l,f,m,M,k,te){return function(a,l,f,m,M,k,te,le,Ne){const qe=l+f;return zp(a,qe,M,k,te,le)?Kh(a,qe+4,Ne?m.call(Ne,M,k,te,le):m(M,k,te,le)):W1(a,qe+4)}(Li(),uu(),a,l,f,m,M,k,te)}function JM(a,l,f,m,M,k,te,le){const Ne=uu()+a,qe=Li(),wt=zp(qe,Ne,f,m,M,k);return nf(qe,Ne+4,te)||wt?Kh(qe,Ne+5,le?l.call(le,f,m,M,k,te):l(f,m,M,k,te)):Um(qe,Ne+5)}function W1(a,l){const f=a[l];return f===po?void 0:f}function QM(a,l,f,m,M,k){const te=l+f;return nf(a,te,M)?Kh(a,te+1,k?m.call(k,M):m(M)):W1(a,te+1)}function XM(a,l,f,m,M,k,te){const le=l+f;return A_(a,le,M,k)?Kh(a,le+2,te?m.call(te,M,k):m(M,k)):W1(a,le+2)}function KM(a,l,f,m,M,k,te,le){const Ne=l+f;return Sv(a,Ne,M,k,te)?Kh(a,Ne+3,le?m.call(le,M,k,te):m(M,k,te)):W1(a,Ne+3)}function e2(a,l){const f=sa();let m;const M=a+20;f.firstCreatePass?(m=function(a,l){if(l)for(let f=l.length-1;f>=0;f--){const m=l[f];if(a===m.name)return m}throw new ee("302",`The pipe '${a}' could not be found!`)}(l,f.pipeRegistry),f.data[M]=m,m.onDestroy&&(f.destroyHooks||(f.destroyHooks=[])).push(M,m.onDestroy)):m=f.data[M];const k=m.factory||(m.factory=wo(m.type)),te=Hi(D1);try{const le=qt(!1),Ne=k();return qt(le),function(a,l,f,m){f>=a.data.length&&(a.data[f]=null,a.blueprint[f]=null),l[f]=m}(f,Li(),M,Ne),Ne}finally{Hi(te)}}function t2(a,l,f){const m=a+20,M=Li(),k=hs(M,m);return J1(M,Qm(M,m)?QM(M,uu(),l,k.transform,f,k):k.transform(f))}function bh(a,l,f,m){const M=a+20,k=Li(),te=hs(k,M);return J1(k,Qm(k,M)?XM(k,uu(),l,te.transform,f,m,te):te.transform(f,m))}function n2(a,l,f,m,M){const k=a+20,te=Li(),le=hs(te,k);return J1(te,Qm(te,k)?KM(te,uu(),l,le.transform,f,m,M,le):le.transform(f,m,M))}function Qm(a,l){return a[1].data[l].pure}function J1(a,l){return mh.isWrapped(l)&&(l=mh.unwrap(l),a[wr()]=po),l}function XE(a){return l=>{setTimeout(a,void 0,l)}}const Wp=class extends r.xQ{constructor(l=!1){super(),this.__isAsync=l}emit(l){super.next(l)}subscribe(l,f,m){var M,k,te;let le=l,Ne=f||(()=>null),qe=m;if(l&&"object"==typeof l){const ln=l;le=null===(M=ln.next)||void 0===M?void 0:M.bind(ln),Ne=null===(k=ln.error)||void 0===k?void 0:k.bind(ln),qe=null===(te=ln.complete)||void 0===te?void 0:te.bind(ln)}this.__isAsync&&(Ne=XE(Ne),le&&(le=XE(le)),qe&&(qe=XE(qe)));const wt=super.subscribe({next:le,error:Ne,complete:qe});return l instanceof u.w&&l.add(wt),wt}};function Kx(){return this._results[tg()]()}class Tu{constructor(l=!1){this._emitDistinctChangesOnly=l,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const f=tg(),m=Tu.prototype;m[f]||(m[f]=Kx)}get changes(){return this._changes||(this._changes=new Wp)}get(l){return this._results[l]}map(l){return this._results.map(l)}filter(l){return this._results.filter(l)}find(l){return this._results.find(l)}reduce(l,f){return this._results.reduce(l,f)}forEach(l){this._results.forEach(l)}some(l){return this._results.some(l)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(l,f){const m=this;m.dirty=!1;const M=Dc(l);(this._changesDetected=!function(a,l,f){if(a.length!==l.length)return!1;for(let m=0;m0)m.push(te[le/2]);else{const qe=k[le+1],wt=l[-Ne];for(let ln=10;ln({bindingPropertyName:a})),gD=Oc("Output",a=>({bindingPropertyName:a})),yT=new Jl("Application Initializer");let Zv=(()=>{class a{constructor(f){this.appInits=f,this.resolve=I1,this.reject=I1,this.initialized=!1,this.done=!1,this.donePromise=new Promise((m,M)=>{this.resolve=m,this.reject=M})}runInitializers(){if(this.initialized)return;const f=[],m=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let M=0;M{k.subscribe({complete:le,error:Ne})});f.push(te)}}Promise.all(f).then(()=>{m()}).catch(M=>{this.reject(M)}),0===f.length&&m(),this.initialized=!0}}return a.\u0275fac=function(f){return new(f||a)(xn(yT,8))},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})();const N2=new Jl("AppId"),I2={provide:N2,useFactory:function(){return`${jy()}${jy()}${jy()}`},deps:[]};function jy(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const D_=new Jl("Platform Initializer"),cm=new Jl("Platform ID"),Pp=new Jl("appBootstrapListener");let L2=(()=>{class a{log(f){console.log(f)}warn(f){console.warn(f)}}return a.\u0275fac=function(f){return new(f||a)},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})();const Gy=new Jl("LocaleId"),F2=new Jl("DefaultCurrencyCode");class $2{constructor(l,f){this.ngModuleFactory=l,this.componentFactories=f}}const zy=function(a){return new zE(a)},dm=zy,ET=function(a){return Promise.resolve(zy(a))},t0=function(a){const l=zy(a),m=yf(jo(a).declarations).reduce((M,k)=>{const te=Co(k);return te&&M.push(new V1(te)),M},[]);return new $2(l,m)},TT=t0,MD=function(a){return Promise.resolve(t0(a))};let n0=(()=>{class a{constructor(){this.compileModuleSync=dm,this.compileModuleAsync=ET,this.compileModuleAndAllComponentsSync=TT,this.compileModuleAndAllComponentsAsync=MD}clearCache(){}clearCacheFor(f){}getModuleId(f){}}return a.\u0275fac=function(f){return new(f||a)},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})();const OD=(()=>Promise.resolve(0))();function ST(a){"undefined"==typeof Zone?OD.then(()=>{a&&a.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",a)}class Eh{constructor({enableLongStackTrace:l=!1,shouldCoalesceEventChangeDetection:f=!1,shouldCoalesceRunChangeDetection:m=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new Wp(!1),this.onMicrotaskEmpty=new Wp(!1),this.onStable=new Wp(!1),this.onError=new Wp(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched();const M=this;M._nesting=0,M._outer=M._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(M._inner=M._inner.fork(new Zone.TaskTrackingZoneSpec)),l&&Zone.longStackTraceZoneSpec&&(M._inner=M._inner.fork(Zone.longStackTraceZoneSpec)),M.shouldCoalesceEventChangeDetection=!m&&f,M.shouldCoalesceRunChangeDetection=m,M.lastRequestAnimationFrameId=-1,M.nativeRequestAnimationFrame=function(){let a=Dr.requestAnimationFrame,l=Dr.cancelAnimationFrame;if("undefined"!=typeof Zone&&a&&l){const f=a[Zone.__symbol__("OriginalDelegate")];f&&(a=f);const m=l[Zone.__symbol__("OriginalDelegate")];m&&(l=m)}return{nativeRequestAnimationFrame:a,nativeCancelAnimationFrame:l}}().nativeRequestAnimationFrame,function(a){const l=()=>{!function(a){a.isCheckStableRunning||-1!==a.lastRequestAnimationFrameId||(a.lastRequestAnimationFrameId=a.nativeRequestAnimationFrame.call(Dr,()=>{a.fakeTopEventTask||(a.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{a.lastRequestAnimationFrameId=-1,MT(a),a.isCheckStableRunning=!0,CT(a),a.isCheckStableRunning=!1},void 0,()=>{},()=>{})),a.fakeTopEventTask.invoke()}),MT(a))}(a)};a._inner=a._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(f,m,M,k,te,le)=>{try{return B2(a),f.invokeTask(M,k,te,le)}finally{(a.shouldCoalesceEventChangeDetection&&"eventTask"===k.type||a.shouldCoalesceRunChangeDetection)&&l(),Y2(a)}},onInvoke:(f,m,M,k,te,le,Ne)=>{try{return B2(a),f.invoke(M,k,te,le,Ne)}finally{a.shouldCoalesceRunChangeDetection&&l(),Y2(a)}},onHasTask:(f,m,M,k)=>{f.hasTask(M,k),m===M&&("microTask"==k.change?(a._hasPendingMicrotasks=k.microTask,MT(a),CT(a)):"macroTask"==k.change&&(a.hasPendingMacrotasks=k.macroTask))},onHandleError:(f,m,M,k)=>(f.handleError(M,k),a.runOutsideAngular(()=>a.onError.emit(k)),!1)})}(M)}static isInAngularZone(){return!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!Eh.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(Eh.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(l,f,m){return this._inner.run(l,f,m)}runTask(l,f,m,M){const k=this._inner,te=k.scheduleEventTask("NgZoneEvent: "+M,l,jv,I1,I1);try{return k.runTask(te,f,m)}finally{k.cancelTask(te)}}runGuarded(l,f,m){return this._inner.runGuarded(l,f,m)}runOutsideAngular(l){return this._outer.run(l)}}const jv={};function CT(a){if(0==a._nesting&&!a.hasPendingMicrotasks&&!a.isStable)try{a._nesting++,a.onMicrotaskEmpty.emit(null)}finally{if(a._nesting--,!a.hasPendingMicrotasks)try{a.runOutsideAngular(()=>a.onStable.emit(null))}finally{a.isStable=!0}}}function MT(a){a.hasPendingMicrotasks=!!(a._hasPendingMicrotasks||(a.shouldCoalesceEventChangeDetection||a.shouldCoalesceRunChangeDetection)&&-1!==a.lastRequestAnimationFrameId)}function B2(a){a._nesting++,a.isStable&&(a.isStable=!1,a.onUnstable.emit(null))}function Y2(a){a._nesting--,CT(a)}class Z2{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Wp,this.onMicrotaskEmpty=new Wp,this.onStable=new Wp,this.onError=new Wp}run(l,f,m){return l.apply(f,m)}runGuarded(l,f,m){return l.apply(f,m)}runOutsideAngular(l){return l()}runTask(l,f,m,M){return l.apply(f,m)}}let AT=(()=>{class a{constructor(f){this._ngZone=f,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),f.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{Eh.assertNotInAngularZone(),ST(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())ST(()=>{for(;0!==this._callbacks.length;){let f=this._callbacks.pop();clearTimeout(f.timeoutId),f.doneCb(this._didWork)}this._didWork=!1});else{let f=this.getPendingTasks();this._callbacks=this._callbacks.filter(m=>!m.updateCb||!m.updateCb(f)||(clearTimeout(m.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(f=>({source:f.source,creationLocation:f.creationLocation,data:f.data})):[]}addCallback(f,m,M){let k=-1;m&&m>0&&(k=setTimeout(()=>{this._callbacks=this._callbacks.filter(te=>te.timeoutId!==k),f(this._didWork,this.getPendingTasks())},m)),this._callbacks.push({doneCb:f,timeoutId:k,updateCb:M})}whenStable(f,m,M){if(M&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(f,m,M),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(f,m,M){return[]}}return a.\u0275fac=function(f){return new(f||a)(xn(Eh))},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})(),OT=(()=>{class a{constructor(){this._applications=new Map,Xm.addToWindow(this)}registerApplication(f,m){this._applications.set(f,m)}unregisterApplication(f){this._applications.delete(f)}unregisterAllApplications(){this._applications.clear()}getTestability(f){return this._applications.get(f)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(f,m=!0){return Xm.findTestabilityInTree(this,f,m)}}return a.\u0275fac=function(f){return new(f||a)},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})();class wT{addToWindow(l){}findTestabilityInTree(l,f,m){return null}}function DD(a){Xm=a}let Xm=new wT,j2=!0,G2=!1;function xT(){return G2=!0,j2}function RD(){if(G2)throw new Error("Cannot enable prod mode after platform setup.");j2=!1}let Th;const z2=new Jl("AllowMultipleToken");class FD{constructor(l,f){this.name=l,this.token=f}}function DT(a,l,f=[]){const m=`Platform: ${l}`,M=new Jl(m);return(k=[])=>{let te=J2();if(!te||te.injector.get(z2,!1))if(a)a(f.concat(k).concat({provide:M,useValue:!0}));else{const le=f.concat(k).concat({provide:M,useValue:!0},{provide:Im,useValue:"platform"});!function(a){if(Th&&!Th.destroyed&&!Th.injector.get(z2,!1))throw new Error("There can be only one platform. Destroy the previous one to create a new one.");Th=a.get(RT);const l=a.get(D_,null);l&&l.forEach(f=>f())}(Ac.create({providers:le,name:m}))}return function(a){const l=J2();if(!l)throw new Error("No platform exists!");if(!l.injector.get(a,null))throw new Error("A platform with a different configuration has been created. Please destroy it first.");return l}(M)}}function J2(){return Th&&!Th.destroyed?Th:null}let RT=(()=>{class a{constructor(f){this._injector=f,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(f,m){const le=function(a,l){let f;return f="noop"===a?new Z2:("zone.js"===a?void 0:a)||new Eh({enableLongStackTrace:xT(),shouldCoalesceEventChangeDetection:!!(null==l?void 0:l.ngZoneEventCoalescing),shouldCoalesceRunChangeDetection:!!(null==l?void 0:l.ngZoneRunCoalescing)}),f}(m?m.ngZone:void 0,{ngZoneEventCoalescing:m&&m.ngZoneEventCoalescing||!1,ngZoneRunCoalescing:m&&m.ngZoneRunCoalescing||!1}),Ne=[{provide:Eh,useValue:le}];return le.run(()=>{const qe=Ac.create({providers:Ne,parent:this.injector,name:f.moduleType.name}),wt=f.create(qe),ln=wt.injector.get(Gf,null);if(!ln)throw new Error("No ErrorHandler. Is platform module (BrowserModule) included?");return le.runOutsideAngular(()=>{const dn=le.onError.subscribe({next:nr=>{ln.handleError(nr)}});wt.onDestroy(()=>{NT(this._modules,wt),dn.unsubscribe()})}),function(a,l,f){try{const m=f();return Zm(m)?m.catch(M=>{throw l.runOutsideAngular(()=>a.handleError(M)),M}):m}catch(m){throw l.runOutsideAngular(()=>a.handleError(m)),m}}(ln,le,()=>{const dn=wt.injector.get(Zv);return dn.runInitializers(),dn.donePromise.then(()=>(pE(wt.injector.get(Gy,my)||my),this._moduleDoBootstrap(wt),wt))})})}bootstrapModule(f,m=[]){const M=Q2({},m);return function(a,l,f){const m=new zE(f);return Promise.resolve(m)}(0,0,f).then(k=>this.bootstrapModuleFactory(k,M))}_moduleDoBootstrap(f){const m=f.injector.get(r0);if(f._bootstrapComponents.length>0)f._bootstrapComponents.forEach(M=>m.bootstrap(M));else{if(!f.instance.ngDoBootstrap)throw new Error(`The module ${S(f.instance.constructor)} was bootstrapped, but it does not declare "@NgModule.bootstrap" components nor a "ngDoBootstrap" method. Please define one of these.`);f.instance.ngDoBootstrap(m)}this._modules.push(f)}onDestroy(f){this._destroyListeners.push(f)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new Error("The platform has already been destroyed!");this._modules.slice().forEach(f=>f.destroy()),this._destroyListeners.forEach(f=>f()),this._destroyed=!0}get destroyed(){return this._destroyed}}return a.\u0275fac=function(f){return new(f||a)(xn(Ac))},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})();function Q2(a,l){return Array.isArray(l)?l.reduce(Q2,a):Object.assign(Object.assign({},a),l)}let r0=(()=>{class a{constructor(f,m,M,k,te){this._zone=f,this._injector=m,this._exceptionHandler=M,this._componentFactoryResolver=k,this._initStatus=te,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const le=new p.y(qe=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{qe.next(this._stable),qe.complete()})}),Ne=new p.y(qe=>{let wt;this._zone.runOutsideAngular(()=>{wt=this._zone.onStable.subscribe(()=>{Eh.assertNotInAngularZone(),ST(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,qe.next(!0))})})});const ln=this._zone.onUnstable.subscribe(()=>{Eh.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{qe.next(!1)}))});return()=>{wt.unsubscribe(),ln.unsubscribe()}});this.isStable=(0,d.T)(le,Ne.pipe((0,e.B)()))}bootstrap(f,m){if(!this._initStatus.done)throw new Error("Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.");let M;M=f instanceof rM?f:this._componentFactoryResolver.resolveComponentFactory(f),this.componentTypes.push(M.componentType);const k=function(a){return a.isBoundToModule}(M)?void 0:this._injector.get(zm),le=M.create(Ac.NULL,[],m||M.selector,k),Ne=le.location.nativeElement,qe=le.injector.get(AT,null),wt=qe&&le.injector.get(OT);return qe&&wt&&wt.registerApplication(Ne,qe),le.onDestroy(()=>{this.detachView(le.hostView),NT(this.components,le),wt&&wt.unregisterApplication(Ne)}),this._loadComponent(le),le}tick(){if(this._runningTick)throw new Error("ApplicationRef.tick is called recursively");try{this._runningTick=!0;for(let f of this._views)f.detectChanges()}catch(f){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(f))}finally{this._runningTick=!1}}attachView(f){const m=f;this._views.push(m),m.attachToAppRef(this)}detachView(f){const m=f;NT(this._views,m),m.detachFromAppRef()}_loadComponent(f){this.attachView(f.hostView),this.tick(),this.components.push(f),this._injector.get(Pp,[]).concat(this._bootstrapListeners).forEach(M=>M(f))}ngOnDestroy(){this._views.slice().forEach(f=>f.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}get viewCount(){return this._views.length}}return a.\u0275fac=function(f){return new(f||a)(xn(Eh),xn(Ac),xn(Gf),xn(Pv),xn(Zv))},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})();function NT(a,l){const f=a.indexOf(l);f>-1&&a.splice(f,1)}class UD{}class eA{}const YD={factoryPathPrefix:"",factoryPathSuffix:".ngfactory"};let ZD=(()=>{class a{constructor(f,m){this._compiler=f,this._config=m||YD}load(f){return this.loadAndCompile(f)}loadAndCompile(f){let[m,M]=f.split("#");return void 0===M&&(M="default"),i(98255)(m).then(k=>k[M]).then(k=>Vv(k,m,M)).then(k=>this._compiler.compileModuleAsync(k))}loadFactory(f){let[m,M]=f.split("#"),k="NgFactory";return void 0===M&&(M="default",k=""),i(98255)(this._config.factoryPathPrefix+m+this._config.factoryPathSuffix).then(te=>te[M+k]).then(te=>Vv(te,m,M))}}return a.\u0275fac=function(f){return new(f||a)(xn(n0),xn(eA,8))},a.\u0275prov=xt({token:a,factory:a.\u0275fac}),a})();function Vv(a,l,f){if(!a)throw new Error(`Cannot find '${f}' in '${l}'`);return a}const WD=function(a){return null},JD=DT(null,"core",[{provide:cm,useValue:"unknown"},{provide:RT,deps:[Ac]},{provide:OT,deps:[]},{provide:L2,deps:[]}]),e3=[{provide:r0,useClass:r0,deps:[Eh,Ac,Gf,Pv,Zv]},{provide:Zx,deps:[Eh],useFactory:function(a){let l=[];return a.onStable.subscribe(()=>{for(;l.length;)l.pop()()}),function(f){l.push(f)}}},{provide:Zv,useClass:Zv,deps:[[new ia,yT]]},{provide:n0,useClass:n0,deps:[]},I2,{provide:Ay,useFactory:function(){return rx},deps:[]},{provide:Oy,useFactory:function(){return ix},deps:[]},{provide:Gy,useFactory:function(a){return pE(a=a||"undefined"!=typeof $localize&&$localize.locale||my),a},deps:[[new ha(Gy),new ia,new il]]},{provide:F2,useValue:"USD"}];let $T=(()=>{class a{constructor(f){}}return a.\u0275fac=function(f){return new(f||a)(xn(r0))},a.\u0275mod=Fn({type:a}),a.\u0275inj=Zn({providers:e3}),a})()},24751:(v,T,i)=>{"use strict";i.d(T,{TO:()=>li,Wl:()=>N,gN:()=>Mr,Fj:()=>K,Oe:()=>vr,CE:()=>Ca,qu:()=>Pt,NI:()=>Bn,u:()=>Ws,cw:()=>lr,sg:()=>fo,x0:()=>Ao,u5:()=>Su,Fd:()=>pi,qQ:()=>ts,Cf:()=>ae,JU:()=>S,a5:()=>Kr,JJ:()=>Br,JL:()=>Yr,F:()=>Ci,On:()=>_o,YN:()=>So,wV:()=>Zs,_:()=>us,UX:()=>Zl,Q7:()=>Eo,EJ:()=>ps,kI:()=>Ee,_Y:()=>co,Kr:()=>$e});var r=i(74788),u=i(12057),p=i(94402),d=i(35758),e=i(88002);let _=(()=>{class Te{constructor(xe,Ct){this._renderer=xe,this._elementRef=Ct,this.onChange=ur=>{},this.onTouched=()=>{}}setProperty(xe,Ct){this._renderer.setProperty(this._elementRef.nativeElement,xe,Ct)}registerOnTouched(xe){this.onTouched=xe}registerOnChange(xe){this.onChange=xe}setDisabledState(xe){this.setProperty("disabled",xe)}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(r.Qsj),r.Y36(r.SBq))},Te.\u0275dir=r.lG2({type:Te}),Te})(),y=(()=>{class Te extends _{}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,features:[r.qOj]}),Te})();const S=new r.OlP("NgValueAccessor"),A={provide:S,useExisting:(0,r.Gpc)(()=>N),multi:!0};let N=(()=>{class Te extends y{writeValue(xe){this.setProperty("checked",xe)}}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,selectors:[["input","type","checkbox","formControlName",""],["input","type","checkbox","formControl",""],["input","type","checkbox","ngModel",""]],hostBindings:function(xe,Ct){1&xe&&r.NdJ("change",function(Qi){return Ct.onChange(Qi.target.checked)})("blur",function(){return Ct.onTouched()})},features:[r._Bn([A]),r.qOj]}),Te})();const L={provide:S,useExisting:(0,r.Gpc)(()=>K),multi:!0},J=new r.OlP("CompositionEventMode");let K=(()=>{class Te extends _{constructor(xe,Ct,ur){super(xe,Ct),this._compositionMode=ur,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function(){const Te=(0,u.q)()?(0,u.q)().getUserAgent():"";return/android (\d+)/.test(Te.toLowerCase())}())}writeValue(xe){this.setProperty("value",null==xe?"":xe)}_handleInput(xe){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(xe)}_compositionStart(){this._composing=!0}_compositionEnd(xe){this._composing=!1,this._compositionMode&&this.onChange(xe)}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(J,8))},Te.\u0275dir=r.lG2({type:Te,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(xe,Ct){1&xe&&r.NdJ("input",function(Qi){return Ct._handleInput(Qi.target.value)})("blur",function(){return Ct.onTouched()})("compositionstart",function(){return Ct._compositionStart()})("compositionend",function(Qi){return Ct._compositionEnd(Qi.target.value)})},features:[r._Bn([L]),r.qOj]}),Te})();function ee(Te){return null==Te||0===Te.length}function ue(Te){return null!=Te&&"number"==typeof Te.length}const ae=new r.OlP("NgValidators"),H=new r.OlP("NgAsyncValidators"),se=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;class Ee{static min(Me){return ie(Me)}static max(Me){return he(Me)}static required(Me){return ge(Me)}static requiredTrue(Me){return!0===Me.value?null:{required:!0}}static email(Me){return ee((Te=Me).value)||se.test(Te.value)?null:{email:!0};var Te}static minLength(Me){return Te=Me,Me=>ee(Me.value)||!ue(Me.value)?null:Me.value.lengthue(Me.value)&&Me.value.length>Te?{maxlength:{requiredLength:Te,actualLength:Me.value.length}}:null;var Te}static pattern(Me){return function(Te){if(!Te)return Be;let Me,xe;return"string"==typeof Te?(xe="","^"!==Te.charAt(0)&&(xe+="^"),xe+=Te,"$"!==Te.charAt(Te.length-1)&&(xe+="$"),Me=new RegExp(xe)):(xe=Te.toString(),Me=Te),Ct=>{if(ee(Ct.value))return null;const ur=Ct.value;return Me.test(ur)?null:{pattern:{requiredPattern:xe,actualValue:ur}}}}(Me)}static nullValidator(Me){return null}static compose(Me){return It(Me)}static composeAsync(Me){return Ut(Me)}}function ie(Te){return Me=>{if(ee(Me.value)||ee(Te))return null;const xe=parseFloat(Me.value);return!isNaN(xe)&&xe{if(ee(Me.value)||ee(Te))return null;const xe=parseFloat(Me.value);return!isNaN(xe)&&xe>Te?{max:{max:Te,actual:Me.value}}:null}}function ge(Te){return ee(Te.value)?{required:!0}:null}function Be(Te){return null}function Pe(Te){return null!=Te}function je(Te){const Me=(0,r.QGY)(Te)?(0,p.D)(Te):Te;return(0,r.CqO)(Me),Me}function He(Te){let Me={};return Te.forEach(xe=>{Me=null!=xe?Object.assign(Object.assign({},Me),xe):Me}),0===Object.keys(Me).length?null:Me}function Vt(Te,Me){return Me.map(xe=>xe(Te))}function tn(Te){return Te.map(Me=>function(Te){return!Te.validate}(Me)?Me:xe=>Me.validate(xe))}function It(Te){if(!Te)return null;const Me=Te.filter(Pe);return 0==Me.length?null:function(xe){return He(Vt(xe,Me))}}function Zt(Te){return null!=Te?It(tn(Te)):null}function Ut(Te){if(!Te)return null;const Me=Te.filter(Pe);return 0==Me.length?null:function(xe){const Ct=Vt(xe,Me).map(je);return(0,d.D)(Ct).pipe((0,e.U)(He))}}function Bt(Te){return null!=Te?Ut(tn(Te)):null}function bt(Te,Me){return null===Te?[Me]:Array.isArray(Te)?[...Te,Me]:[Te,Me]}function Gt(Te){return Te._rawValidators}function xt(Te){return Te._rawAsyncValidators}function Xt(Te){return Te?Array.isArray(Te)?Te:[Te]:[]}function Zn(Te,Me){return Array.isArray(Te)?Te.includes(Me):Te===Me}function Ur(Te,Me){const xe=Xt(Me);return Xt(Te).forEach(ur=>{Zn(xe,ur)||xe.push(ur)}),xe}function di(Te,Me){return Xt(Me).filter(xe=>!Zn(Te,xe))}let Lr=(()=>{class Te{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(xe){this._rawValidators=xe||[],this._composedValidatorFn=Zt(this._rawValidators)}_setAsyncValidators(xe){this._rawAsyncValidators=xe||[],this._composedAsyncValidatorFn=Bt(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(xe){this._onDestroyCallbacks.push(xe)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(xe=>xe()),this._onDestroyCallbacks=[]}reset(xe){this.control&&this.control.reset(xe)}hasError(xe,Ct){return!!this.control&&this.control.hasError(xe,Ct)}getError(xe,Ct){return this.control?this.control.getError(xe,Ct):null}}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275dir=r.lG2({type:Te}),Te})(),Mr=(()=>{class Te extends Lr{get formDirective(){return null}get path(){return null}}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,features:[r.qOj]}),Te})();class Kr extends Lr{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class ei{constructor(Me){this._cd=Me}is(Me){var xe,Ct,ur;return"submitted"===Me?!!(null===(xe=this._cd)||void 0===xe?void 0:xe.submitted):!!(null===(ur=null===(Ct=this._cd)||void 0===Ct?void 0:Ct.control)||void 0===ur?void 0:ur[Me])}}let Br=(()=>{class Te extends ei{constructor(xe){super(xe)}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(Kr,2))},Te.\u0275dir=r.lG2({type:Te,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(xe,Ct){2&xe&&r.ekj("ng-untouched",Ct.is("untouched"))("ng-touched",Ct.is("touched"))("ng-pristine",Ct.is("pristine"))("ng-dirty",Ct.is("dirty"))("ng-valid",Ct.is("valid"))("ng-invalid",Ct.is("invalid"))("ng-pending",Ct.is("pending"))},features:[r.qOj]}),Te})(),Yr=(()=>{class Te extends ei{constructor(xe){super(xe)}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(Mr,10))},Te.\u0275dir=r.lG2({type:Te,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(xe,Ct){2&xe&&r.ekj("ng-untouched",Ct.is("untouched"))("ng-touched",Ct.is("touched"))("ng-pristine",Ct.is("pristine"))("ng-dirty",Ct.is("dirty"))("ng-valid",Ct.is("valid"))("ng-invalid",Ct.is("invalid"))("ng-pending",Ct.is("pending"))("ng-submitted",Ct.is("submitted"))},features:[r.qOj]}),Te})();function wi(Te,Me){return[...Me.path,Te]}function br(Te,Me){gr(Te,Me),Me.valueAccessor.writeValue(Te.value),function(Te,Me){Me.valueAccessor.registerOnChange(xe=>{Te._pendingValue=xe,Te._pendingChange=!0,Te._pendingDirty=!0,"change"===Te.updateOn&&Dn(Te,Me)})}(Te,Me),function(Te,Me){const xe=(Ct,ur)=>{Me.valueAccessor.writeValue(Ct),ur&&Me.viewToModelUpdate(Ct)};Te.registerOnChange(xe),Me._registerOnDestroy(()=>{Te._unregisterOnChange(xe)})}(Te,Me),function(Te,Me){Me.valueAccessor.registerOnTouched(()=>{Te._pendingTouched=!0,"blur"===Te.updateOn&&Te._pendingChange&&Dn(Te,Me),"submit"!==Te.updateOn&&Te.markAsTouched()})}(Te,Me),function(Te,Me){if(Me.valueAccessor.setDisabledState){const xe=Ct=>{Me.valueAccessor.setDisabledState(Ct)};Te.registerOnDisabledChange(xe),Me._registerOnDestroy(()=>{Te._unregisterOnDisabledChange(xe)})}}(Te,Me)}function Dr(Te,Me,xe=!0){const Ct=()=>{};Me.valueAccessor&&(Me.valueAccessor.registerOnChange(Ct),Me.valueAccessor.registerOnTouched(Ct)),Jt(Te,Me),Te&&(Me._invokeOnDestroyCallbacks(),Te._registerOnCollectionChange(()=>{}))}function gn(Te,Me){Te.forEach(xe=>{xe.registerOnValidatorChange&&xe.registerOnValidatorChange(Me)})}function gr(Te,Me){const xe=Gt(Te);null!==Me.validator?Te.setValidators(bt(xe,Me.validator)):"function"==typeof xe&&Te.setValidators([xe]);const Ct=xt(Te);null!==Me.asyncValidator?Te.setAsyncValidators(bt(Ct,Me.asyncValidator)):"function"==typeof Ct&&Te.setAsyncValidators([Ct]);const ur=()=>Te.updateValueAndValidity();gn(Me._rawValidators,ur),gn(Me._rawAsyncValidators,ur)}function Jt(Te,Me){let xe=!1;if(null!==Te){if(null!==Me.validator){const ur=Gt(Te);if(Array.isArray(ur)&&ur.length>0){const Qi=ur.filter(Go=>Go!==Me.validator);Qi.length!==ur.length&&(xe=!0,Te.setValidators(Qi))}}if(null!==Me.asyncValidator){const ur=xt(Te);if(Array.isArray(ur)&&ur.length>0){const Qi=ur.filter(Go=>Go!==Me.asyncValidator);Qi.length!==ur.length&&(xe=!0,Te.setAsyncValidators(Qi))}}}const Ct=()=>{};return gn(Me._rawValidators,Ct),gn(Me._rawAsyncValidators,Ct),xe}function Dn(Te,Me){Te._pendingDirty&&Te.markAsDirty(),Te.setValue(Te._pendingValue,{emitModelToViewChange:!1}),Me.viewToModelUpdate(Te._pendingValue),Te._pendingChange=!1}function Yt(Te,Me){gr(Te,Me)}function mi(Te,Me){if(!Te.hasOwnProperty("model"))return!1;const xe=Te.model;return!!xe.isFirstChange()||!Object.is(Me,xe.currentValue)}function Er(Te,Me){Te._syncPendingControls(),Me.forEach(xe=>{const Ct=xe.control;"submit"===Ct.updateOn&&Ct._pendingChange&&(xe.viewToModelUpdate(Ct._pendingValue),Ct._pendingChange=!1)})}function Wr(Te,Me){if(!Me)return null;let xe,Ct,ur;return Array.isArray(Me),Me.forEach(Qi=>{Qi.constructor===K?xe=Qi:function(Te){return Object.getPrototypeOf(Te.constructor)===y}(Qi)?Ct=Qi:ur=Qi}),ur||Ct||xe||null}function dr(Te,Me){const xe=Te.indexOf(Me);xe>-1&&Te.splice(xe,1)}const ar="VALID",Wi="INVALID",lo="PENDING",vo="DISABLED";function Gi(Te){return(Mi(Te)?Te.validators:Te)||null}function os(Te){return Array.isArray(Te)?Zt(Te):Te||null}function jo(Te,Me){return(Mi(Me)?Me.asyncValidators:Te)||null}function To(Te){return Array.isArray(Te)?Bt(Te):Te||null}function Mi(Te){return null!=Te&&!Array.isArray(Te)&&"object"==typeof Te}class li{constructor(Me,xe){this._hasOwnPendingAsyncValidator=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._rawValidators=Me,this._rawAsyncValidators=xe,this._composedValidatorFn=os(this._rawValidators),this._composedAsyncValidatorFn=To(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn}set validator(Me){this._rawValidators=this._composedValidatorFn=Me}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(Me){this._rawAsyncValidators=this._composedAsyncValidatorFn=Me}get parent(){return this._parent}get valid(){return this.status===ar}get invalid(){return this.status===Wi}get pending(){return this.status==lo}get disabled(){return this.status===vo}get enabled(){return this.status!==vo}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(Me){this._rawValidators=Me,this._composedValidatorFn=os(Me)}setAsyncValidators(Me){this._rawAsyncValidators=Me,this._composedAsyncValidatorFn=To(Me)}addValidators(Me){this.setValidators(Ur(Me,this._rawValidators))}addAsyncValidators(Me){this.setAsyncValidators(Ur(Me,this._rawAsyncValidators))}removeValidators(Me){this.setValidators(di(Me,this._rawValidators))}removeAsyncValidators(Me){this.setAsyncValidators(di(Me,this._rawAsyncValidators))}hasValidator(Me){return Zn(this._rawValidators,Me)}hasAsyncValidator(Me){return Zn(this._rawAsyncValidators,Me)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(Me={}){this.touched=!0,this._parent&&!Me.onlySelf&&this._parent.markAsTouched(Me)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(Me=>Me.markAllAsTouched())}markAsUntouched(Me={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(xe=>{xe.markAsUntouched({onlySelf:!0})}),this._parent&&!Me.onlySelf&&this._parent._updateTouched(Me)}markAsDirty(Me={}){this.pristine=!1,this._parent&&!Me.onlySelf&&this._parent.markAsDirty(Me)}markAsPristine(Me={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(xe=>{xe.markAsPristine({onlySelf:!0})}),this._parent&&!Me.onlySelf&&this._parent._updatePristine(Me)}markAsPending(Me={}){this.status=lo,!1!==Me.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!Me.onlySelf&&this._parent.markAsPending(Me)}disable(Me={}){const xe=this._parentMarkedDirty(Me.onlySelf);this.status=vo,this.errors=null,this._forEachChild(Ct=>{Ct.disable(Object.assign(Object.assign({},Me),{onlySelf:!0}))}),this._updateValue(),!1!==Me.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign(Object.assign({},Me),{skipPristineCheck:xe})),this._onDisabledChange.forEach(Ct=>Ct(!0))}enable(Me={}){const xe=this._parentMarkedDirty(Me.onlySelf);this.status=ar,this._forEachChild(Ct=>{Ct.enable(Object.assign(Object.assign({},Me),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:Me.emitEvent}),this._updateAncestors(Object.assign(Object.assign({},Me),{skipPristineCheck:xe})),this._onDisabledChange.forEach(Ct=>Ct(!1))}_updateAncestors(Me){this._parent&&!Me.onlySelf&&(this._parent.updateValueAndValidity(Me),Me.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(Me){this._parent=Me}updateValueAndValidity(Me={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===ar||this.status===lo)&&this._runAsyncValidator(Me.emitEvent)),!1!==Me.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!Me.onlySelf&&this._parent.updateValueAndValidity(Me)}_updateTreeValidity(Me={emitEvent:!0}){this._forEachChild(xe=>xe._updateTreeValidity(Me)),this.updateValueAndValidity({onlySelf:!0,emitEvent:Me.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?vo:ar}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(Me){if(this.asyncValidator){this.status=lo,this._hasOwnPendingAsyncValidator=!0;const xe=je(this.asyncValidator(this));this._asyncValidationSubscription=xe.subscribe(Ct=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(Ct,{emitEvent:Me})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(Me,xe={}){this.errors=Me,this._updateControlsErrors(!1!==xe.emitEvent)}get(Me){return function(Te,Me,xe){if(null==Me||(Array.isArray(Me)||(Me=Me.split(".")),Array.isArray(Me)&&0===Me.length))return null;let Ct=Te;return Me.forEach(ur=>{Ct=Ct instanceof lr?Ct.controls.hasOwnProperty(ur)?Ct.controls[ur]:null:Ct instanceof vr&&Ct.at(ur)||null}),Ct}(this,Me)}getError(Me,xe){const Ct=xe?this.get(xe):this;return Ct&&Ct.errors?Ct.errors[Me]:null}hasError(Me,xe){return!!this.getError(Me,xe)}get root(){let Me=this;for(;Me._parent;)Me=Me._parent;return Me}_updateControlsErrors(Me){this.status=this._calculateStatus(),Me&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(Me)}_initObservables(){this.valueChanges=new r.vpe,this.statusChanges=new r.vpe}_calculateStatus(){return this._allControlsDisabled()?vo:this.errors?Wi:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(lo)?lo:this._anyControlsHaveStatus(Wi)?Wi:ar}_anyControlsHaveStatus(Me){return this._anyControls(xe=>xe.status===Me)}_anyControlsDirty(){return this._anyControls(Me=>Me.dirty)}_anyControlsTouched(){return this._anyControls(Me=>Me.touched)}_updatePristine(Me={}){this.pristine=!this._anyControlsDirty(),this._parent&&!Me.onlySelf&&this._parent._updatePristine(Me)}_updateTouched(Me={}){this.touched=this._anyControlsTouched(),this._parent&&!Me.onlySelf&&this._parent._updateTouched(Me)}_isBoxedValue(Me){return"object"==typeof Me&&null!==Me&&2===Object.keys(Me).length&&"value"in Me&&"disabled"in Me}_registerOnCollectionChange(Me){this._onCollectionChange=Me}_setUpdateStrategy(Me){Mi(Me)&&null!=Me.updateOn&&(this._updateOn=Me.updateOn)}_parentMarkedDirty(Me){return!Me&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}}class Bn extends li{constructor(Me=null,xe,Ct){super(Gi(xe),jo(Ct,xe)),this._onChange=[],this._applyFormState(Me),this._setUpdateStrategy(xe),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}setValue(Me,xe={}){this.value=this._pendingValue=Me,this._onChange.length&&!1!==xe.emitModelToViewChange&&this._onChange.forEach(Ct=>Ct(this.value,!1!==xe.emitViewToModelChange)),this.updateValueAndValidity(xe)}patchValue(Me,xe={}){this.setValue(Me,xe)}reset(Me=null,xe={}){this._applyFormState(Me),this.markAsPristine(xe),this.markAsUntouched(xe),this.setValue(this.value,xe),this._pendingChange=!1}_updateValue(){}_anyControls(Me){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(Me){this._onChange.push(Me)}_unregisterOnChange(Me){dr(this._onChange,Me)}registerOnDisabledChange(Me){this._onDisabledChange.push(Me)}_unregisterOnDisabledChange(Me){dr(this._onDisabledChange,Me)}_forEachChild(Me){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(Me){this._isBoxedValue(Me)?(this.value=this._pendingValue=Me.value,Me.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=Me}}class lr extends li{constructor(Me,xe,Ct){super(Gi(xe),jo(Ct,xe)),this.controls=Me,this._initObservables(),this._setUpdateStrategy(xe),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(Me,xe){return this.controls[Me]?this.controls[Me]:(this.controls[Me]=xe,xe.setParent(this),xe._registerOnCollectionChange(this._onCollectionChange),xe)}addControl(Me,xe,Ct={}){this.registerControl(Me,xe),this.updateValueAndValidity({emitEvent:Ct.emitEvent}),this._onCollectionChange()}removeControl(Me,xe={}){this.controls[Me]&&this.controls[Me]._registerOnCollectionChange(()=>{}),delete this.controls[Me],this.updateValueAndValidity({emitEvent:xe.emitEvent}),this._onCollectionChange()}setControl(Me,xe,Ct={}){this.controls[Me]&&this.controls[Me]._registerOnCollectionChange(()=>{}),delete this.controls[Me],xe&&this.registerControl(Me,xe),this.updateValueAndValidity({emitEvent:Ct.emitEvent}),this._onCollectionChange()}contains(Me){return this.controls.hasOwnProperty(Me)&&this.controls[Me].enabled}setValue(Me,xe={}){this._checkAllValuesPresent(Me),Object.keys(Me).forEach(Ct=>{this._throwIfControlMissing(Ct),this.controls[Ct].setValue(Me[Ct],{onlySelf:!0,emitEvent:xe.emitEvent})}),this.updateValueAndValidity(xe)}patchValue(Me,xe={}){null!=Me&&(Object.keys(Me).forEach(Ct=>{this.controls[Ct]&&this.controls[Ct].patchValue(Me[Ct],{onlySelf:!0,emitEvent:xe.emitEvent})}),this.updateValueAndValidity(xe))}reset(Me={},xe={}){this._forEachChild((Ct,ur)=>{Ct.reset(Me[ur],{onlySelf:!0,emitEvent:xe.emitEvent})}),this._updatePristine(xe),this._updateTouched(xe),this.updateValueAndValidity(xe)}getRawValue(){return this._reduceChildren({},(Me,xe,Ct)=>(Me[Ct]=xe instanceof Bn?xe.value:xe.getRawValue(),Me))}_syncPendingControls(){let Me=this._reduceChildren(!1,(xe,Ct)=>!!Ct._syncPendingControls()||xe);return Me&&this.updateValueAndValidity({onlySelf:!0}),Me}_throwIfControlMissing(Me){if(!Object.keys(this.controls).length)throw new Error("\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.controls[Me])throw new Error(`Cannot find form control with name: ${Me}.`)}_forEachChild(Me){Object.keys(this.controls).forEach(xe=>{const Ct=this.controls[xe];Ct&&Me(Ct,xe)})}_setUpControls(){this._forEachChild(Me=>{Me.setParent(this),Me._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(Me){for(const xe of Object.keys(this.controls)){const Ct=this.controls[xe];if(this.contains(xe)&&Me(Ct))return!0}return!1}_reduceValue(){return this._reduceChildren({},(Me,xe,Ct)=>((xe.enabled||this.disabled)&&(Me[Ct]=xe.value),Me))}_reduceChildren(Me,xe){let Ct=Me;return this._forEachChild((ur,Qi)=>{Ct=xe(Ct,ur,Qi)}),Ct}_allControlsDisabled(){for(const Me of Object.keys(this.controls))if(this.controls[Me].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_checkAllValuesPresent(Me){this._forEachChild((xe,Ct)=>{if(void 0===Me[Ct])throw new Error(`Must supply a value for form control with name: '${Ct}'.`)})}}class vr extends li{constructor(Me,xe,Ct){super(Gi(xe),jo(Ct,xe)),this.controls=Me,this._initObservables(),this._setUpdateStrategy(xe),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}at(Me){return this.controls[Me]}push(Me,xe={}){this.controls.push(Me),this._registerControl(Me),this.updateValueAndValidity({emitEvent:xe.emitEvent}),this._onCollectionChange()}insert(Me,xe,Ct={}){this.controls.splice(Me,0,xe),this._registerControl(xe),this.updateValueAndValidity({emitEvent:Ct.emitEvent})}removeAt(Me,xe={}){this.controls[Me]&&this.controls[Me]._registerOnCollectionChange(()=>{}),this.controls.splice(Me,1),this.updateValueAndValidity({emitEvent:xe.emitEvent})}setControl(Me,xe,Ct={}){this.controls[Me]&&this.controls[Me]._registerOnCollectionChange(()=>{}),this.controls.splice(Me,1),xe&&(this.controls.splice(Me,0,xe),this._registerControl(xe)),this.updateValueAndValidity({emitEvent:Ct.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(Me,xe={}){this._checkAllValuesPresent(Me),Me.forEach((Ct,ur)=>{this._throwIfControlMissing(ur),this.at(ur).setValue(Ct,{onlySelf:!0,emitEvent:xe.emitEvent})}),this.updateValueAndValidity(xe)}patchValue(Me,xe={}){null!=Me&&(Me.forEach((Ct,ur)=>{this.at(ur)&&this.at(ur).patchValue(Ct,{onlySelf:!0,emitEvent:xe.emitEvent})}),this.updateValueAndValidity(xe))}reset(Me=[],xe={}){this._forEachChild((Ct,ur)=>{Ct.reset(Me[ur],{onlySelf:!0,emitEvent:xe.emitEvent})}),this._updatePristine(xe),this._updateTouched(xe),this.updateValueAndValidity(xe)}getRawValue(){return this.controls.map(Me=>Me instanceof Bn?Me.value:Me.getRawValue())}clear(Me={}){this.controls.length<1||(this._forEachChild(xe=>xe._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:Me.emitEvent}))}_syncPendingControls(){let Me=this.controls.reduce((xe,Ct)=>!!Ct._syncPendingControls()||xe,!1);return Me&&this.updateValueAndValidity({onlySelf:!0}),Me}_throwIfControlMissing(Me){if(!this.controls.length)throw new Error("\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n ");if(!this.at(Me))throw new Error(`Cannot find form control at index ${Me}`)}_forEachChild(Me){this.controls.forEach((xe,Ct)=>{Me(xe,Ct)})}_updateValue(){this.value=this.controls.filter(Me=>Me.enabled||this.disabled).map(Me=>Me.value)}_anyControls(Me){return this.controls.some(xe=>xe.enabled&&Me(xe))}_setUpControls(){this._forEachChild(Me=>this._registerControl(Me))}_checkAllValuesPresent(Me){this._forEachChild((xe,Ct)=>{if(void 0===Me[Ct])throw new Error(`Must supply a value for form control at index: ${Ct}.`)})}_allControlsDisabled(){for(const Me of this.controls)if(Me.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(Me){Me.setParent(this),Me._registerOnCollectionChange(this._onCollectionChange)}}const er={provide:Mr,useExisting:(0,r.Gpc)(()=>Ci)},uo=(()=>Promise.resolve(null))();let Ci=(()=>{class Te extends Mr{constructor(xe,Ct){super(),this.submitted=!1,this._directives=[],this.ngSubmit=new r.vpe,this.form=new lr({},Zt(xe),Bt(Ct))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(xe){uo.then(()=>{const Ct=this._findContainer(xe.path);xe.control=Ct.registerControl(xe.name,xe.control),br(xe.control,xe),xe.control.updateValueAndValidity({emitEvent:!1}),this._directives.push(xe)})}getControl(xe){return this.form.get(xe.path)}removeControl(xe){uo.then(()=>{const Ct=this._findContainer(xe.path);Ct&&Ct.removeControl(xe.name),dr(this._directives,xe)})}addFormGroup(xe){uo.then(()=>{const Ct=this._findContainer(xe.path),ur=new lr({});Yt(ur,xe),Ct.registerControl(xe.name,ur),ur.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(xe){uo.then(()=>{const Ct=this._findContainer(xe.path);Ct&&Ct.removeControl(xe.name)})}getFormGroup(xe){return this.form.get(xe.path)}updateModel(xe,Ct){uo.then(()=>{this.form.get(xe.path).setValue(Ct)})}setValue(xe){this.control.setValue(xe)}onSubmit(xe){return this.submitted=!0,Er(this.form,this._directives),this.ngSubmit.emit(xe),!1}onReset(){this.resetForm()}resetForm(xe){this.form.reset(xe),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(xe){return xe.pop(),xe.length?this.form.get(xe):this.form}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(ae,10),r.Y36(H,10))},Te.\u0275dir=r.lG2({type:Te,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(xe,Ct){1&xe&&r.NdJ("submit",function(Qi){return Ct.onSubmit(Qi)})("reset",function(){return Ct.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[r._Bn([er]),r.qOj]}),Te})(),$o=(()=>{class Te extends Mr{ngOnInit(){this._checkParentType(),this.formDirective.addFormGroup(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormGroup(this)}get control(){return this.formDirective.getFormGroup(this)}get path(){return wi(null==this.name?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,features:[r.qOj]}),Te})();const on={provide:Kr,useExisting:(0,r.Gpc)(()=>_o)},Vi=(()=>Promise.resolve(null))();let _o=(()=>{class Te extends Kr{constructor(xe,Ct,ur,Qi){super(),this.control=new Bn,this._registered=!1,this.update=new r.vpe,this._parent=xe,this._setValidators(Ct),this._setAsyncValidators(ur),this.valueAccessor=Wr(0,Qi)}ngOnChanges(xe){this._checkForErrors(),this._registered||this._setUpControl(),"isDisabled"in xe&&this._updateDisabled(xe),mi(xe,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._parent?wi(this.name,this._parent):[this.name]}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(xe){this.viewModel=xe,this.update.emit(xe)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){br(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(xe){Vi.then(()=>{this.control.setValue(xe,{emitViewToModelChange:!1})})}_updateDisabled(xe){const Ct=xe.isDisabled.currentValue,ur=""===Ct||Ct&&"false"!==Ct;Vi.then(()=>{ur&&!this.control.disabled?this.control.disable():!ur&&this.control.disabled&&this.control.enable()})}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(Mr,9),r.Y36(ae,10),r.Y36(H,10),r.Y36(S,10))},Te.\u0275dir=r.lG2({type:Te,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[r._Bn([on]),r.qOj,r.TTD]}),Te})(),co=(()=>{class Te{}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275dir=r.lG2({type:Te,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),Te})();const Es={provide:S,useExisting:(0,r.Gpc)(()=>Zs),multi:!0};let Zs=(()=>{class Te extends y{writeValue(xe){this.setProperty("value",null==xe?"":xe)}registerOnChange(xe){this.onChange=Ct=>{xe(""==Ct?null:parseFloat(Ct))}}}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(xe,Ct){1&xe&&r.NdJ("input",function(Qi){return Ct.onChange(Qi.target.value)})("blur",function(){return Ct.onTouched()})},features:[r._Bn([Es]),r.qOj]}),Te})();const ls={provide:S,useExisting:(0,r.Gpc)(()=>us),multi:!0};let ta=(()=>{class Te{}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275mod=r.oAB({type:Te}),Te.\u0275inj=r.cJS({}),Te})(),Is=(()=>{class Te{constructor(){this._accessors=[]}add(xe,Ct){this._accessors.push([xe,Ct])}remove(xe){for(let Ct=this._accessors.length-1;Ct>=0;--Ct)if(this._accessors[Ct][1]===xe)return void this._accessors.splice(Ct,1)}select(xe){this._accessors.forEach(Ct=>{this._isSameGroup(Ct,xe)&&Ct[1]!==xe&&Ct[1].fireUncheck(xe.value)})}_isSameGroup(xe,Ct){return!!xe[0].control&&xe[0]._parent===Ct._control._parent&&xe[1].name===Ct.name}}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275prov=(0,r.Yz7)({factory:function(){return new Te},token:Te,providedIn:ta}),Te})(),us=(()=>{class Te extends y{constructor(xe,Ct,ur,Qi){super(xe,Ct),this._registry=ur,this._injector=Qi,this.onChange=()=>{}}ngOnInit(){this._control=this._injector.get(Kr),this._checkName(),this._registry.add(this._control,this)}ngOnDestroy(){this._registry.remove(this)}writeValue(xe){this._state=xe===this.value,this.setProperty("checked",this._state)}registerOnChange(xe){this._fn=xe,this.onChange=()=>{xe(this.value),this._registry.select(this)}}fireUncheck(xe){this.writeValue(xe)}_checkName(){!this.name&&this.formControlName&&(this.name=this.formControlName)}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(Is),r.Y36(r.zs3))},Te.\u0275dir=r.lG2({type:Te,selectors:[["input","type","radio","formControlName",""],["input","type","radio","formControl",""],["input","type","radio","ngModel",""]],hostBindings:function(xe,Ct){1&xe&&r.NdJ("change",function(){return Ct.onChange()})("blur",function(){return Ct.onTouched()})},inputs:{name:"name",formControlName:"formControlName",value:"value"},features:[r._Bn([ls]),r.qOj]}),Te})();const ca=new r.OlP("NgModelWithFormControlWarning"),Il={provide:Mr,useExisting:(0,r.Gpc)(()=>fo)};let fo=(()=>{class Te extends Mr{constructor(xe,Ct){super(),this.validators=xe,this.asyncValidators=Ct,this.submitted=!1,this._onCollectionChange=()=>this._updateDomValue(),this.directives=[],this.form=null,this.ngSubmit=new r.vpe,this._setValidators(xe),this._setAsyncValidators(Ct)}ngOnChanges(xe){this._checkFormPresent(),xe.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}ngOnDestroy(){this.form&&(Jt(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(xe){const Ct=this.form.get(xe.path);return br(Ct,xe),Ct.updateValueAndValidity({emitEvent:!1}),this.directives.push(xe),Ct}getControl(xe){return this.form.get(xe.path)}removeControl(xe){Dr(xe.control||null,xe,!1),dr(this.directives,xe)}addFormGroup(xe){this._setUpFormContainer(xe)}removeFormGroup(xe){this._cleanUpFormContainer(xe)}getFormGroup(xe){return this.form.get(xe.path)}addFormArray(xe){this._setUpFormContainer(xe)}removeFormArray(xe){this._cleanUpFormContainer(xe)}getFormArray(xe){return this.form.get(xe.path)}updateModel(xe,Ct){this.form.get(xe.path).setValue(Ct)}onSubmit(xe){return this.submitted=!0,Er(this.form,this.directives),this.ngSubmit.emit(xe),!1}onReset(){this.resetForm()}resetForm(xe){this.form.reset(xe),this.submitted=!1}_updateDomValue(){this.directives.forEach(xe=>{const Ct=xe.control,ur=this.form.get(xe.path);Ct!==ur&&(Dr(Ct||null,xe),ur instanceof Bn&&(br(ur,xe),xe.control=ur))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(xe){const Ct=this.form.get(xe.path);Yt(Ct,xe),Ct.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(xe){if(this.form){const Ct=this.form.get(xe.path);Ct&&function(Te,Me){return Jt(Te,Me)}(Ct,xe)&&Ct.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){gr(this.form,this),this._oldForm&&Jt(this._oldForm,this)}_checkFormPresent(){}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(ae,10),r.Y36(H,10))},Te.\u0275dir=r.lG2({type:Te,selectors:[["","formGroup",""]],hostBindings:function(xe,Ct){1&xe&&r.NdJ("submit",function(Qi){return Ct.onSubmit(Qi)})("reset",function(){return Ct.onReset()})},inputs:{form:["formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[r._Bn([Il]),r.qOj,r.TTD]}),Te})();const Ya={provide:Mr,useExisting:(0,r.Gpc)(()=>Ao)};let Ao=(()=>{class Te extends $o{constructor(xe,Ct,ur){super(),this._parent=xe,this._setValidators(Ct),this._setAsyncValidators(ur)}_checkParentType(){Ra(this._parent)}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(Mr,13),r.Y36(ae,10),r.Y36(H,10))},Te.\u0275dir=r.lG2({type:Te,selectors:[["","formGroupName",""]],inputs:{name:["formGroupName","name"]},features:[r._Bn([Ya]),r.qOj]}),Te})();const fs={provide:Mr,useExisting:(0,r.Gpc)(()=>Ca)};let Ca=(()=>{class Te extends Mr{constructor(xe,Ct,ur){super(),this._parent=xe,this._setValidators(Ct),this._setAsyncValidators(ur)}ngOnInit(){this._checkParentType(),this.formDirective.addFormArray(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormArray(this)}get control(){return this.formDirective.getFormArray(this)}get formDirective(){return this._parent?this._parent.formDirective:null}get path(){return wi(null==this.name?this.name:this.name.toString(),this._parent)}_checkParentType(){Ra(this._parent)}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(Mr,13),r.Y36(ae,10),r.Y36(H,10))},Te.\u0275dir=r.lG2({type:Te,selectors:[["","formArrayName",""]],inputs:{name:["formArrayName","name"]},features:[r._Bn([fs]),r.qOj]}),Te})();function Ra(Te){return!(Te instanceof Ao||Te instanceof fo||Te instanceof Ca)}const pl={provide:Kr,useExisting:(0,r.Gpc)(()=>Ws)};let Ws=(()=>{class Te extends Kr{constructor(xe,Ct,ur,Qi,Go){super(),this._ngModelWarningConfig=Go,this._added=!1,this.update=new r.vpe,this._ngModelWarningSent=!1,this._parent=xe,this._setValidators(Ct),this._setAsyncValidators(ur),this.valueAccessor=Wr(0,Qi)}set isDisabled(xe){}ngOnChanges(xe){this._added||this._setUpControl(),mi(xe,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(xe){this.viewModel=xe,this.update.emit(xe)}get path(){return wi(null==this.name?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}_setUpControl(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(Mr,13),r.Y36(ae,10),r.Y36(H,10),r.Y36(S,10),r.Y36(ca,8))},Te.\u0275dir=r.lG2({type:Te,selectors:[["","formControlName",""]],inputs:{isDisabled:["disabled","isDisabled"],name:["formControlName","name"],model:["ngModel","model"]},outputs:{update:"ngModelChange"},features:[r._Bn([pl]),r.qOj,r.TTD]}),Te._ngModelWarningSentOnce=!1,Te})();const Po={provide:S,useExisting:(0,r.Gpc)(()=>ps),multi:!0};function bo(Te,Me){return null==Te?`${Me}`:(Me&&"object"==typeof Me&&(Me="Object"),`${Te}: ${Me}`.slice(0,50))}let ps=(()=>{class Te extends y{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(xe){this._compareWith=xe}writeValue(xe){this.value=xe;const Ct=this._getOptionId(xe);null==Ct&&this.setProperty("selectedIndex",-1);const ur=bo(Ct,xe);this.setProperty("value",ur)}registerOnChange(xe){this.onChange=Ct=>{this.value=this._getOptionValue(Ct),xe(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(xe){for(const Ct of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(Ct),xe))return Ct;return null}_getOptionValue(xe){const Ct=function(Te){return Te.split(":")[0]}(xe);return this._optionMap.has(Ct)?this._optionMap.get(Ct):xe}}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(xe,Ct){1&xe&&r.NdJ("change",function(Qi){return Ct.onChange(Qi.target.value)})("blur",function(){return Ct.onTouched()})},inputs:{compareWith:"compareWith"},features:[r._Bn([Po]),r.qOj]}),Te})(),So=(()=>{class Te{constructor(xe,Ct,ur){this._element=xe,this._renderer=Ct,this._select=ur,this._select&&(this.id=this._select._registerOption())}set ngValue(xe){null!=this._select&&(this._select._optionMap.set(this.id,xe),this._setElementValue(bo(this.id,xe)),this._select.writeValue(this._select.value))}set value(xe){this._setElementValue(xe),this._select&&this._select.writeValue(this._select.value)}_setElementValue(xe){this._renderer.setProperty(this._element.nativeElement,"value",xe)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(ps,9))},Te.\u0275dir=r.lG2({type:Te,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),Te})();const $r={provide:S,useExisting:(0,r.Gpc)(()=>ne),multi:!0};function to(Te,Me){return null==Te?`${Me}`:("string"==typeof Me&&(Me=`'${Me}'`),Me&&"object"==typeof Me&&(Me="Object"),`${Te}: ${Me}`.slice(0,50))}let ne=(()=>{class Te extends y{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(xe){this._compareWith=xe}writeValue(xe){let Ct;if(this.value=xe,Array.isArray(xe)){const ur=xe.map(Qi=>this._getOptionId(Qi));Ct=(Qi,Go)=>{Qi._setSelected(ur.indexOf(Go.toString())>-1)}}else Ct=(ur,Qi)=>{ur._setSelected(!1)};this._optionMap.forEach(Ct)}registerOnChange(xe){this.onChange=Ct=>{const ur=[];if(void 0!==Ct.selectedOptions){const Qi=Ct.selectedOptions;for(let Go=0;Go{class Te{constructor(xe,Ct,ur){this._element=xe,this._renderer=Ct,this._select=ur,this._select&&(this.id=this._select._registerOption(this))}set ngValue(xe){null!=this._select&&(this._value=xe,this._setElementValue(to(this.id,xe)),this._select.writeValue(this._select.value))}set value(xe){this._select?(this._value=xe,this._setElementValue(to(this.id,xe)),this._select.writeValue(this._select.value)):this._setElementValue(xe)}_setElementValue(xe){this._renderer.setProperty(this._element.nativeElement,"value",xe)}_setSelected(xe){this._renderer.setProperty(this._element.nativeElement,"selected",xe)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return Te.\u0275fac=function(xe){return new(xe||Te)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(ne,9))},Te.\u0275dir=r.lG2({type:Te,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),Te})(),an=(()=>{class Te{constructor(){this._validator=Be}handleChanges(xe){if(this.inputName in xe){const Ct=this.normalizeInput(xe[this.inputName].currentValue);this._validator=this.createValidator(Ct),this._onChange&&this._onChange()}}validate(xe){return this._validator(xe)}registerOnValidatorChange(xe){this._onChange=xe}}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275dir=r.lG2({type:Te}),Te})();const ti={provide:ae,useExisting:(0,r.Gpc)(()=>pi),multi:!0};let pi=(()=>{class Te extends an{constructor(){super(...arguments),this.inputName="max",this.normalizeInput=xe=>parseFloat(xe),this.createValidator=xe=>he(xe)}ngOnChanges(xe){this.handleChanges(xe)}}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,selectors:[["input","type","number","max","","formControlName",""],["input","type","number","max","","formControl",""],["input","type","number","max","","ngModel",""]],hostVars:1,hostBindings:function(xe,Ct){if(2&xe){let ur;r.uIk("max",null!==(ur=Ct.max)&&void 0!==ur?ur:null)}},inputs:{max:"max"},features:[r._Bn([ti]),r.qOj,r.TTD]}),Te})();const xi={provide:ae,useExisting:(0,r.Gpc)(()=>ts),multi:!0};let ts=(()=>{class Te extends an{constructor(){super(...arguments),this.inputName="min",this.normalizeInput=xe=>parseFloat(xe),this.createValidator=xe=>ie(xe)}ngOnChanges(xe){this.handleChanges(xe)}}return Te.\u0275fac=function(){let Me;return function(Ct){return(Me||(Me=r.n5z(Te)))(Ct||Te)}}(),Te.\u0275dir=r.lG2({type:Te,selectors:[["input","type","number","min","","formControlName",""],["input","type","number","min","","formControl",""],["input","type","number","min","","ngModel",""]],hostVars:1,hostBindings:function(xe,Ct){if(2&xe){let ur;r.uIk("min",null!==(ur=Ct.min)&&void 0!==ur?ur:null)}},inputs:{min:"min"},features:[r._Bn([xi]),r.qOj,r.TTD]}),Te})();const wo={provide:ae,useExisting:(0,r.Gpc)(()=>Eo),multi:!0};let Eo=(()=>{class Te{constructor(){this._required=!1}get required(){return this._required}set required(xe){this._required=null!=xe&&!1!==xe&&"false"!=`${xe}`,this._onChange&&this._onChange()}validate(xe){return this.required?ge(xe):null}registerOnValidatorChange(xe){this._onChange=xe}}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275dir=r.lG2({type:Te,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(xe,Ct){2&xe&&r.uIk("required",Ct.required?"":null)},inputs:{required:"required"},features:[r._Bn([wo])]}),Te})(),tl=(()=>{class Te{}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275mod=r.oAB({type:Te}),Te.\u0275inj=r.cJS({imports:[[ta]]}),Te})(),Su=(()=>{class Te{}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275mod=r.oAB({type:Te}),Te.\u0275inj=r.cJS({imports:[tl]}),Te})(),Zl=(()=>{class Te{static withConfig(xe){return{ngModule:Te,providers:[{provide:ca,useValue:xe.warnOnNgModelWithFormControl}]}}}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275mod=r.oAB({type:Te}),Te.\u0275inj=r.cJS({imports:[tl]}),Te})(),Pt=(()=>{class Te{group(xe,Ct=null){const ur=this._reduceControls(xe);let ms,Qi=null,Go=null;return null!=Ct&&(function(Te){return void 0!==Te.asyncValidators||void 0!==Te.validators||void 0!==Te.updateOn}(Ct)?(Qi=null!=Ct.validators?Ct.validators:null,Go=null!=Ct.asyncValidators?Ct.asyncValidators:null,ms=null!=Ct.updateOn?Ct.updateOn:void 0):(Qi=null!=Ct.validator?Ct.validator:null,Go=null!=Ct.asyncValidator?Ct.asyncValidator:null)),new lr(ur,{asyncValidators:Go,updateOn:ms,validators:Qi})}control(xe,Ct,ur){return new Bn(xe,Ct,ur)}array(xe,Ct,ur){const Qi=xe.map(Go=>this._createControl(Go));return new vr(Qi,Ct,ur)}_reduceControls(xe){const Ct={};return Object.keys(xe).forEach(ur=>{Ct[ur]=this._createControl(xe[ur])}),Ct}_createControl(xe){return xe instanceof Bn||xe instanceof lr||xe instanceof vr?xe:Array.isArray(xe)?this.control(xe[0],xe.length>1?xe[1]:null,xe.length>2?xe[2]:null):this.control(xe)}}return Te.\u0275fac=function(xe){return new(xe||Te)},Te.\u0275prov=(0,r.Yz7)({factory:function(){return new Te},token:Te,providedIn:Zl}),Te})()},91211:(v,T,i)=>{"use strict";i.d(T,{b2:()=>Fn,H7:()=>Vn,HJ:()=>li,q6:()=>Wr,se:()=>di});var r=i(12057),u=i(74788);class p extends r.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class d extends p{static makeCurrent(){(0,r.HT)(new d)}onAndCancel(_t,mt,jt){return _t.addEventListener(mt,jt,!1),()=>{_t.removeEventListener(mt,jt,!1)}}dispatchEvent(_t,mt){_t.dispatchEvent(mt)}remove(_t){_t.parentNode&&_t.parentNode.removeChild(_t)}createElement(_t,mt){return(mt=mt||this.getDefaultDocument()).createElement(_t)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(_t){return _t.nodeType===Node.ELEMENT_NODE}isShadowRoot(_t){return _t instanceof DocumentFragment}getGlobalEventTarget(_t,mt){return"window"===mt?window:"document"===mt?_t:"body"===mt?_t.body:null}getBaseHref(_t){const mt=(e=e||document.querySelector("base"),e?e.getAttribute("href"):null);return null==mt?null:function(Rt){y=y||document.createElement("a"),y.setAttribute("href",Rt);const _t=y.pathname;return"/"===_t.charAt(0)?_t:`/${_t}`}(mt)}resetBaseElement(){e=null}getUserAgent(){return window.navigator.userAgent}getCookie(_t){return(0,r.Mx)(document.cookie,_t)}}let y,e=null;const A=new u.OlP("TRANSITION_ID"),L=[{provide:u.ip1,useFactory:function(Rt,_t,mt){return()=>{mt.get(u.CZH).donePromise.then(()=>{const jt=(0,r.q)(),on=_t.querySelectorAll(`style[ng-transition="${Rt}"]`);for(let si=0;si{const si=_t.findTestabilityInTree(jt,on);if(null==si)throw new Error("Could not find testability for element.");return si},u.dqk.getAllAngularTestabilities=()=>_t.getAllTestabilities(),u.dqk.getAllAngularRootElements=()=>_t.getAllRootElements(),u.dqk.frameworkStabilizers||(u.dqk.frameworkStabilizers=[]),u.dqk.frameworkStabilizers.push(jt=>{const on=u.dqk.getAllAngularTestabilities();let si=on.length,Vi=!1;const _o=function(co){Vi=Vi||co,si--,0==si&&jt(Vi)};on.forEach(function(co){co.whenStable(_o)})})}findTestabilityInTree(_t,mt,jt){if(null==mt)return null;const on=_t.getTestability(mt);return null!=on?on:jt?(0,r.q)().isShadowRoot(mt)?this.findTestabilityInTree(_t,mt.host,!0):this.findTestabilityInTree(_t,mt.parentElement,!0):null}}let J=(()=>{class Rt{build(){return new XMLHttpRequest}}return Rt.\u0275fac=function(mt){return new(mt||Rt)},Rt.\u0275prov=u.Yz7({token:Rt,factory:Rt.\u0275fac}),Rt})();const Be=new u.OlP("EventManagerPlugins");let Pe=(()=>{class Rt{constructor(mt,jt){this._zone=jt,this._eventNameToPlugin=new Map,mt.forEach(on=>on.manager=this),this._plugins=mt.slice().reverse()}addEventListener(mt,jt,on){return this._findPluginFor(jt).addEventListener(mt,jt,on)}addGlobalEventListener(mt,jt,on){return this._findPluginFor(jt).addGlobalEventListener(mt,jt,on)}getZone(){return this._zone}_findPluginFor(mt){const jt=this._eventNameToPlugin.get(mt);if(jt)return jt;const on=this._plugins;for(let si=0;si{class Rt{constructor(){this._stylesSet=new Set}addStyles(mt){const jt=new Set;mt.forEach(on=>{this._stylesSet.has(on)||(this._stylesSet.add(on),jt.add(on))}),this.onStylesAdded(jt)}onStylesAdded(mt){}getAllStyles(){return Array.from(this._stylesSet)}}return Rt.\u0275fac=function(mt){return new(mt||Rt)},Rt.\u0275prov=u.Yz7({token:Rt,factory:Rt.\u0275fac}),Rt})(),Vt=(()=>{class Rt extends He{constructor(mt){super(),this._doc=mt,this._hostNodes=new Map,this._hostNodes.set(mt.head,[])}_addStylesToHost(mt,jt,on){mt.forEach(si=>{const Vi=this._doc.createElement("style");Vi.textContent=si,on.push(jt.appendChild(Vi))})}addHost(mt){const jt=[];this._addStylesToHost(this._stylesSet,mt,jt),this._hostNodes.set(mt,jt)}removeHost(mt){const jt=this._hostNodes.get(mt);jt&&jt.forEach(it),this._hostNodes.delete(mt)}onStylesAdded(mt){this._hostNodes.forEach((jt,on)=>{this._addStylesToHost(mt,on,jt)})}ngOnDestroy(){this._hostNodes.forEach(mt=>mt.forEach(it))}}return Rt.\u0275fac=function(mt){return new(mt||Rt)(u.LFG(r.K0))},Rt.\u0275prov=u.Yz7({token:Rt,factory:Rt.\u0275fac}),Rt})();function it(Rt){(0,r.q)().remove(Rt)}const tn={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},It=/%COMP%/g;function Xt(Rt,_t,mt){for(let jt=0;jt<_t.length;jt++){let on=_t[jt];Array.isArray(on)?Xt(Rt,on,mt):(on=on.replace(It,Rt),mt.push(on))}return mt}function Zn(Rt){return _t=>{if("__ngUnwrap__"===_t)return Rt;!1===Rt(_t)&&(_t.preventDefault(),_t.returnValue=!1)}}let di=(()=>{class Rt{constructor(mt,jt,on){this.eventManager=mt,this.sharedStylesHost=jt,this.appId=on,this.rendererByCompId=new Map,this.defaultRenderer=new Lr(mt)}createRenderer(mt,jt){if(!mt||!jt)return this.defaultRenderer;switch(jt.encapsulation){case u.ifc.Emulated:{let on=this.rendererByCompId.get(jt.id);return on||(on=new Nn(this.eventManager,this.sharedStylesHost,jt,this.appId),this.rendererByCompId.set(jt.id,on)),on.applyToHost(mt),on}case 1:case u.ifc.ShadowDom:return new $n(this.eventManager,this.sharedStylesHost,mt,jt);default:if(!this.rendererByCompId.has(jt.id)){const on=Xt(jt.id,jt.styles,[]);this.sharedStylesHost.addStyles(on),this.rendererByCompId.set(jt.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return Rt.\u0275fac=function(mt){return new(mt||Rt)(u.LFG(Pe),u.LFG(Vt),u.LFG(u.AFp))},Rt.\u0275prov=u.Yz7({token:Rt,factory:Rt.\u0275fac}),Rt})();class Lr{constructor(_t){this.eventManager=_t,this.data=Object.create(null)}destroy(){}createElement(_t,mt){return mt?document.createElementNS(tn[mt]||mt,_t):document.createElement(_t)}createComment(_t){return document.createComment(_t)}createText(_t){return document.createTextNode(_t)}appendChild(_t,mt){_t.appendChild(mt)}insertBefore(_t,mt,jt){_t&&_t.insertBefore(mt,jt)}removeChild(_t,mt){_t&&_t.removeChild(mt)}selectRootElement(_t,mt){let jt="string"==typeof _t?document.querySelector(_t):_t;if(!jt)throw new Error(`The selector "${_t}" did not match any elements`);return mt||(jt.textContent=""),jt}parentNode(_t){return _t.parentNode}nextSibling(_t){return _t.nextSibling}setAttribute(_t,mt,jt,on){if(on){mt=on+":"+mt;const si=tn[on];si?_t.setAttributeNS(si,mt,jt):_t.setAttribute(mt,jt)}else _t.setAttribute(mt,jt)}removeAttribute(_t,mt,jt){if(jt){const on=tn[jt];on?_t.removeAttributeNS(on,mt):_t.removeAttribute(`${jt}:${mt}`)}else _t.removeAttribute(mt)}addClass(_t,mt){_t.classList.add(mt)}removeClass(_t,mt){_t.classList.remove(mt)}setStyle(_t,mt,jt,on){on&(u.JOm.DashCase|u.JOm.Important)?_t.style.setProperty(mt,jt,on&u.JOm.Important?"important":""):_t.style[mt]=jt}removeStyle(_t,mt,jt){jt&u.JOm.DashCase?_t.style.removeProperty(mt):_t.style[mt]=""}setProperty(_t,mt,jt){_t[mt]=jt}setValue(_t,mt){_t.nodeValue=mt}listen(_t,mt,jt){return"string"==typeof _t?this.eventManager.addGlobalEventListener(_t,mt,Zn(jt)):this.eventManager.addEventListener(_t,mt,Zn(jt))}}class Nn extends Lr{constructor(_t,mt,jt,on){super(_t),this.component=jt;const si=Xt(on+"-"+jt.id,jt.styles,[]);mt.addStyles(si),this.contentAttr="_ngcontent-%COMP%".replace(It,on+"-"+jt.id),this.hostAttr="_nghost-%COMP%".replace(It,on+"-"+jt.id)}applyToHost(_t){super.setAttribute(_t,this.hostAttr,"")}createElement(_t,mt){const jt=super.createElement(_t,mt);return super.setAttribute(jt,this.contentAttr,""),jt}}class $n extends Lr{constructor(_t,mt,jt,on){super(_t),this.sharedStylesHost=mt,this.hostEl=jt,this.shadowRoot=jt.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const si=Xt(on.id,on.styles,[]);for(let Vi=0;Vi{class Rt extends je{constructor(mt){super(mt)}supports(mt){return!0}addEventListener(mt,jt,on){return mt.addEventListener(jt,on,!1),()=>this.removeEventListener(mt,jt,on)}removeEventListener(mt,jt,on){return mt.removeEventListener(jt,on)}}return Rt.\u0275fac=function(mt){return new(mt||Rt)(u.LFG(r.K0))},Rt.\u0275prov=u.Yz7({token:Rt,factory:Rt.\u0275fac}),Rt})();const Fr=["alt","control","meta","shift"],Jr={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},_i={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"},yn={alt:Rt=>Rt.altKey,control:Rt=>Rt.ctrlKey,meta:Rt=>Rt.metaKey,shift:Rt=>Rt.shiftKey};let gr=(()=>{class Rt extends je{constructor(mt){super(mt)}supports(mt){return null!=Rt.parseEventName(mt)}addEventListener(mt,jt,on){const si=Rt.parseEventName(jt),Vi=Rt.eventCallback(si.fullKey,on,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,r.q)().onAndCancel(mt,si.domEventName,Vi))}static parseEventName(mt){const jt=mt.toLowerCase().split("."),on=jt.shift();if(0===jt.length||"keydown"!==on&&"keyup"!==on)return null;const si=Rt._normalizeKey(jt.pop());let Vi="";if(Fr.forEach(co=>{const Es=jt.indexOf(co);Es>-1&&(jt.splice(Es,1),Vi+=co+".")}),Vi+=si,0!=jt.length||0===si.length)return null;const _o={};return _o.domEventName=on,_o.fullKey=Vi,_o}static getEventFullKey(mt){let jt="",on=function(Rt){let _t=Rt.key;if(null==_t){if(_t=Rt.keyIdentifier,null==_t)return"Unidentified";_t.startsWith("U+")&&(_t=String.fromCharCode(parseInt(_t.substring(2),16)),3===Rt.location&&_i.hasOwnProperty(_t)&&(_t=_i[_t]))}return Jr[_t]||_t}(mt);return on=on.toLowerCase()," "===on?on="space":"."===on&&(on="dot"),Fr.forEach(si=>{si!=on&&yn[si](mt)&&(jt+=si+".")}),jt+=on,jt}static eventCallback(mt,jt,on){return si=>{Rt.getEventFullKey(si)===mt&&on.runGuarded(()=>jt(si))}}static _normalizeKey(mt){switch(mt){case"esc":return"escape";default:return mt}}}return Rt.\u0275fac=function(mt){return new(mt||Rt)(u.LFG(r.K0))},Rt.\u0275prov=u.Yz7({token:Rt,factory:Rt.\u0275fac}),Rt})(),Vn=(()=>{class Rt{}return Rt.\u0275fac=function(mt){return new(mt||Rt)},Rt.\u0275prov=(0,u.Yz7)({factory:function(){return(0,u.LFG)(Dn)},token:Rt,providedIn:"root"}),Rt})(),Dn=(()=>{class Rt extends Vn{constructor(mt){super(),this._doc=mt}sanitize(mt,jt){if(null==jt)return null;switch(mt){case u.q3G.NONE:return jt;case u.q3G.HTML:return(0,u.qzn)(jt,"HTML")?(0,u.z3N)(jt):(0,u.EiD)(this._doc,String(jt)).toString();case u.q3G.STYLE:return(0,u.qzn)(jt,"Style")?(0,u.z3N)(jt):jt;case u.q3G.SCRIPT:if((0,u.qzn)(jt,"Script"))return(0,u.z3N)(jt);throw new Error("unsafe value used in a script context");case u.q3G.URL:return(0,u.yhl)(jt),(0,u.qzn)(jt,"URL")?(0,u.z3N)(jt):(0,u.mCW)(String(jt));case u.q3G.RESOURCE_URL:if((0,u.qzn)(jt,"ResourceURL"))return(0,u.z3N)(jt);throw new Error("unsafe value used in a resource URL context (see https://g.co/ng/security#xss)");default:throw new Error(`Unexpected SecurityContext ${mt} (see https://g.co/ng/security#xss)`)}}bypassSecurityTrustHtml(mt){return(0,u.JVY)(mt)}bypassSecurityTrustStyle(mt){return(0,u.L6k)(mt)}bypassSecurityTrustScript(mt){return(0,u.eBb)(mt)}bypassSecurityTrustUrl(mt){return(0,u.LAX)(mt)}bypassSecurityTrustResourceUrl(mt){return(0,u.pB0)(mt)}}return Rt.\u0275fac=function(mt){return new(mt||Rt)(u.LFG(r.K0))},Rt.\u0275prov=(0,u.Yz7)({factory:function(){return function(Rt){return new Dn(Rt.get(r.K0))}((0,u.LFG)(u.gxx))},token:Rt,providedIn:"root"}),Rt})();const Wr=(0,u.eFA)(u._c5,"browser",[{provide:u.Lbi,useValue:r.bD},{provide:u.g9A,useValue:function(){d.makeCurrent(),Z.init()},multi:!0},{provide:r.K0,useFactory:function(){return(0,u.RDi)(document),document},deps:[]}]),dr=[[],{provide:u.zSh,useValue:"root"},{provide:u.qLn,useFactory:function(){return new u.qLn},deps:[]},{provide:Be,useClass:Br,multi:!0,deps:[r.K0,u.R0b,u.Lbi]},{provide:Be,useClass:gr,multi:!0,deps:[r.K0]},[],{provide:di,useClass:di,deps:[Pe,Vt,u.AFp]},{provide:u.FYo,useExisting:di},{provide:He,useExisting:Vt},{provide:Vt,useClass:Vt,deps:[r.K0]},{provide:u.dDg,useClass:u.dDg,deps:[u.R0b]},{provide:Pe,useClass:Pe,deps:[Be,u.R0b]},{provide:r.JF,useClass:J,deps:[]},[]];let Fn=(()=>{class Rt{constructor(mt){if(mt)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(mt){return{ngModule:Rt,providers:[{provide:u.AFp,useValue:mt.appId},{provide:A,useExisting:u.AFp},L]}}}return Rt.\u0275fac=function(mt){return new(mt||Rt)(u.LFG(Rt,12))},Rt.\u0275mod=u.oAB({type:Rt}),Rt.\u0275inj=u.cJS({providers:dr,imports:[r.ez,u.hGG]}),Rt})();const Gi="undefined"!=typeof window&&window||{};class os{constructor(_t,mt){this.msPerTick=_t,this.numTicks=mt}}class jo{constructor(_t){this.appRef=_t.injector.get(u.z2F)}timeChangeDetection(_t){const mt=_t&&_t.record,jt="Change Detection",on=null!=Gi.console.profile;mt&&on&&Gi.console.profile(jt);const si=To();let Vi=0;for(;Vi<5||To()-si<500;)this.appRef.tick(),Vi++;const _o=To();mt&&on&&Gi.console.profileEnd(jt);const co=(_o-si)/Vi;return Gi.console.log(`ran ${Vi} change detection cycles`),Gi.console.log(`${co.toFixed(2)} ms per check`),new os(co,Vi)}}function To(){return Gi.performance&&Gi.performance.now?Gi.performance.now():(new Date).getTime()}function li(Rt){return function(Rt,_t){"undefined"!=typeof COMPILED&&COMPILED||((u.dqk.ng=u.dqk.ng||{})[Rt]=_t)}("profiler",new jo(Rt)),Rt}},6283:(v,T,i)=>{"use strict";i.d(T,{gz:()=>tr,m2:()=>He,OD:()=>je,wm:()=>Tl,F0:()=>zr,rH:()=>Io,Od:()=>Cr,yS:()=>Fo,Bz:()=>Js,lC:()=>ao});var r=i(12057),u=i(74788),p=i(18891),d=i(94402),e=i(59193);function _(Ye){return new p.y(Ie=>{let Ce;try{Ce=Ye()}catch(Et){return void Ie.error(Et)}return(Ce?(0,d.D)(Ce):(0,e.c)()).subscribe(Ie)})}var y=i(25917),S=i(26215),A=i(9112),N=i(13410),L=i(58071),Z=i(52441),J=i(79765),K=i(88002),ee=i(43190),ue=i(15257),ae=i(39761),H=i(42145),se=i(45435),Ee=i(5304),ie=i(94612),he=i(12627),ge=i(28049),De=i(19773),ce=i(68307),lt=i(548),Ve=i(51307),ze=i(68939),Be=i(63282);class Pe{constructor(Ie,Ce){this.id=Ie,this.url=Ce}}class je extends Pe{constructor(Ie,Ce,ot="imperative",Et=null){super(Ie,Ce),this.navigationTrigger=ot,this.restoredState=Et}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class He extends Pe{constructor(Ie,Ce,ot){super(Ie,Ce),this.urlAfterRedirects=ot}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class Vt extends Pe{constructor(Ie,Ce,ot){super(Ie,Ce),this.reason=ot}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class it extends Pe{constructor(Ie,Ce,ot){super(Ie,Ce),this.error=ot}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class tn extends Pe{constructor(Ie,Ce,ot,Et){super(Ie,Ce),this.urlAfterRedirects=ot,this.state=Et}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class It extends Pe{constructor(Ie,Ce,ot,Et){super(Ie,Ce),this.urlAfterRedirects=ot,this.state=Et}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Zt extends Pe{constructor(Ie,Ce,ot,Et,qt){super(Ie,Ce),this.urlAfterRedirects=ot,this.state=Et,this.shouldActivate=qt}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class Ut extends Pe{constructor(Ie,Ce,ot,Et){super(Ie,Ce),this.urlAfterRedirects=ot,this.state=Et}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Bt extends Pe{constructor(Ie,Ce,ot,Et){super(Ie,Ce),this.urlAfterRedirects=ot,this.state=Et}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class bt{constructor(Ie){this.route=Ie}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class Gt{constructor(Ie){this.route=Ie}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class xt{constructor(Ie){this.snapshot=Ie}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Xt{constructor(Ie){this.snapshot=Ie}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Zn{constructor(Ie){this.snapshot=Ie}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Ur{constructor(Ie){this.snapshot=Ie}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class di{constructor(Ie,Ce,ot){this.routerEvent=Ie,this.position=Ce,this.anchor=ot}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}const Lr="primary";class Mr{constructor(Ie){this.params=Ie||{}}has(Ie){return Object.prototype.hasOwnProperty.call(this.params,Ie)}get(Ie){if(this.has(Ie)){const Ce=this.params[Ie];return Array.isArray(Ce)?Ce[0]:Ce}return null}getAll(Ie){if(this.has(Ie)){const Ce=this.params[Ie];return Array.isArray(Ce)?Ce:[Ce]}return[]}get keys(){return Object.keys(this.params)}}function Kr(Ye){return new Mr(Ye)}const ei="ngNavigationCancelingError";function Nn(Ye){const Ie=Error("NavigationCancelingError: "+Ye);return Ie[ei]=!0,Ie}function Br(Ye,Ie,Ce){const ot=Ce.path.split("/");if(ot.length>Ye.length||"full"===Ce.pathMatch&&(Ie.hasChildren()||ot.lengthot[qt]===Et)}return Ye===Ie}function Hi(Ye){return Array.prototype.concat.apply([],Ye)}function Zr(Ye){return Ye.length>0?Ye[Ye.length-1]:null}function Wt(Ye,Ie){for(const Ce in Ye)Ye.hasOwnProperty(Ce)&&Ie(Ye[Ce],Ce)}function zn(Ye){return(0,u.CqO)(Ye)?Ye:(0,u.QGY)(Ye)?(0,d.D)(Promise.resolve(Ye)):(0,y.of)(Ye)}const Fr={exact:function wi(Ye,Ie,Ce){if(!Dn(Ye.segments,Ie.segments)||!yn(Ye.segments,Ie.segments,Ce)||Ye.numberOfChildren!==Ie.numberOfChildren)return!1;for(const ot in Ie.children)if(!Ye.children[ot]||!wi(Ye.children[ot],Ie.children[ot],Ce))return!1;return!0},subset:Dr},Gn={exact:function(Ye,Ie){return fi(Ye,Ie)},subset:function(Ye,Ie){return Object.keys(Ie).length<=Object.keys(Ye).length&&Object.keys(Ie).every(Ce=>ki(Ye[Ce],Ie[Ce]))},ignored:()=>!0};function Jr(Ye,Ie,Ce){return Fr[Ce.paths](Ye.root,Ie.root,Ce.matrixParams)&&Gn[Ce.queryParams](Ye.queryParams,Ie.queryParams)&&!("exact"===Ce.fragment&&Ye.fragment!==Ie.fragment)}function Dr(Ye,Ie,Ce){return gn(Ye,Ie,Ie.segments,Ce)}function gn(Ye,Ie,Ce,ot){if(Ye.segments.length>Ce.length){const Et=Ye.segments.slice(0,Ce.length);return!(!Dn(Et,Ce)||Ie.hasChildren()||!yn(Et,Ce,ot))}if(Ye.segments.length===Ce.length){if(!Dn(Ye.segments,Ce)||!yn(Ye.segments,Ce,ot))return!1;for(const Et in Ie.children)if(!Ye.children[Et]||!Dr(Ye.children[Et],Ie.children[Et],ot))return!1;return!0}{const Et=Ce.slice(0,Ye.segments.length),qt=Ce.slice(Ye.segments.length);return!!(Dn(Ye.segments,Et)&&yn(Ye.segments,Et,ot)&&Ye.children[Lr])&&gn(Ye.children[Lr],Ie,qt,ot)}}function yn(Ye,Ie,Ce){return Ie.every((ot,Et)=>Gn[Ce](Ye[Et].parameters,ot.parameters))}class gr{constructor(Ie,Ce,ot){this.root=Ie,this.queryParams=Ce,this.fragment=ot}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Kr(this.queryParams)),this._queryParamMap}toString(){return Ge.serialize(this)}}class Jt{constructor(Ie,Ce){this.segments=Ie,this.children=Ce,this.parent=null,Wt(Ce,(ot,Et)=>ot.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return kr(this)}}class Vn{constructor(Ie,Ce){this.path=Ie,this.parameters=Ce}get parameterMap(){return this._parameterMap||(this._parameterMap=Kr(this.parameters)),this._parameterMap}toString(){return Wi(this)}}function Dn(Ye,Ie){return Ye.length===Ie.length&&Ye.every((Ce,ot)=>Ce.path===Ie[ot].path)}class Yt{}class _n{parse(Ie){const Ce=new li(Ie);return new gr(Ce.parseRootSegment(),Ce.parseQueryParams(),Ce.parseFragment())}serialize(Ie){var Ye;return`${`/${mi(Ie.root,!0)}`}${function(Ye){const Ie=Object.keys(Ye).map(Ce=>{const ot=Ye[Ce];return Array.isArray(ot)?ot.map(Et=>`${Er(Ce)}=${Er(Et)}`).join("&"):`${Er(Ce)}=${Er(ot)}`}).filter(Ce=>!!Ce);return Ie.length?`?${Ie.join("&")}`:""}(Ie.queryParams)}${"string"==typeof Ie.fragment?`#${Ye=Ie.fragment,encodeURI(Ye)}`:""}`}}const Ge=new _n;function kr(Ye){return Ye.segments.map(Ie=>Wi(Ie)).join("/")}function mi(Ye,Ie){if(!Ye.hasChildren())return kr(Ye);if(Ie){const Ce=Ye.children[Lr]?mi(Ye.children[Lr],!1):"",ot=[];return Wt(Ye.children,(Et,qt)=>{qt!==Lr&&ot.push(`${qt}:${mi(Et,!1)}`)}),ot.length>0?`${Ce}(${ot.join("//")})`:Ce}{const Ce=function(Ye,Ie){let Ce=[];return Wt(Ye.children,(ot,Et)=>{Et===Lr&&(Ce=Ce.concat(Ie(ot,Et)))}),Wt(Ye.children,(ot,Et)=>{Et!==Lr&&(Ce=Ce.concat(Ie(ot,Et)))}),Ce}(Ye,(ot,Et)=>Et===Lr?[mi(Ye.children[Lr],!1)]:[`${Et}:${mi(ot,!1)}`]);return 1===Object.keys(Ye.children).length&&null!=Ye.children[Lr]?`${kr(Ye)}/${Ce[0]}`:`${kr(Ye)}/(${Ce.join("//")})`}}function An(Ye){return encodeURIComponent(Ye).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Er(Ye){return An(Ye).replace(/%3B/gi,";")}function dr(Ye){return An(Ye).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function Fn(Ye){return decodeURIComponent(Ye)}function ar(Ye){return Fn(Ye.replace(/\+/g,"%20"))}function Wi(Ye){return`${dr(Ye.path)}${function(Ye){return Object.keys(Ye).map(Ie=>`;${dr(Ie)}=${dr(Ye[Ie])}`).join("")}(Ye.parameters)}`}const Co=/^[^\/()?;=#]+/;function Gi(Ye){const Ie=Ye.match(Co);return Ie?Ie[0]:""}const os=/^[^=?&#]+/,To=/^[^?&#]+/;class li{constructor(Ie){this.url=Ie,this.remaining=Ie}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Jt([],{}):new Jt([],this.parseChildren())}parseQueryParams(){const Ie={};if(this.consumeOptional("?"))do{this.parseQueryParam(Ie)}while(this.consumeOptional("&"));return Ie}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const Ie=[];for(this.peekStartsWith("(")||Ie.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),Ie.push(this.parseSegment());let Ce={};this.peekStartsWith("/(")&&(this.capture("/"),Ce=this.parseParens(!0));let ot={};return this.peekStartsWith("(")&&(ot=this.parseParens(!1)),(Ie.length>0||Object.keys(Ce).length>0)&&(ot[Lr]=new Jt(Ie,Ce)),ot}parseSegment(){const Ie=Gi(this.remaining);if(""===Ie&&this.peekStartsWith(";"))throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);return this.capture(Ie),new Vn(Fn(Ie),this.parseMatrixParams())}parseMatrixParams(){const Ie={};for(;this.consumeOptional(";");)this.parseParam(Ie);return Ie}parseParam(Ie){const Ce=Gi(this.remaining);if(!Ce)return;this.capture(Ce);let ot="";if(this.consumeOptional("=")){const Et=Gi(this.remaining);Et&&(ot=Et,this.capture(ot))}Ie[Fn(Ce)]=Fn(ot)}parseQueryParam(Ie){const Ce=function(Ye){const Ie=Ye.match(os);return Ie?Ie[0]:""}(this.remaining);if(!Ce)return;this.capture(Ce);let ot="";if(this.consumeOptional("=")){const Hn=function(Ye){const Ie=Ye.match(To);return Ie?Ie[0]:""}(this.remaining);Hn&&(ot=Hn,this.capture(ot))}const Et=ar(Ce),qt=ar(ot);if(Ie.hasOwnProperty(Et)){let Hn=Ie[Et];Array.isArray(Hn)||(Hn=[Hn],Ie[Et]=Hn),Hn.push(qt)}else Ie[Et]=qt}parseParens(Ie){const Ce={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const ot=Gi(this.remaining),Et=this.remaining[ot.length];if("/"!==Et&&")"!==Et&&";"!==Et)throw new Error(`Cannot parse url '${this.url}'`);let qt;ot.indexOf(":")>-1?(qt=ot.substr(0,ot.indexOf(":")),this.capture(qt),this.capture(":")):Ie&&(qt=Lr);const Hn=this.parseChildren();Ce[qt]=1===Object.keys(Hn).length?Hn[Lr]:new Jt([],Hn),this.consumeOptional("//")}return Ce}peekStartsWith(Ie){return this.remaining.startsWith(Ie)}consumeOptional(Ie){return!!this.peekStartsWith(Ie)&&(this.remaining=this.remaining.substring(Ie.length),!0)}capture(Ie){if(!this.consumeOptional(Ie))throw new Error(`Expected "${Ie}".`)}}class Bn{constructor(Ie){this._root=Ie}get root(){return this._root.value}parent(Ie){const Ce=this.pathFromRoot(Ie);return Ce.length>1?Ce[Ce.length-2]:null}children(Ie){const Ce=lr(Ie,this._root);return Ce?Ce.children.map(ot=>ot.value):[]}firstChild(Ie){const Ce=lr(Ie,this._root);return Ce&&Ce.children.length>0?Ce.children[0].value:null}siblings(Ie){const Ce=vr(Ie,this._root);return Ce.length<2?[]:Ce[Ce.length-2].children.map(Et=>Et.value).filter(Et=>Et!==Ie)}pathFromRoot(Ie){return vr(Ie,this._root).map(Ce=>Ce.value)}}function lr(Ye,Ie){if(Ye===Ie.value)return Ie;for(const Ce of Ie.children){const ot=lr(Ye,Ce);if(ot)return ot}return null}function vr(Ye,Ie){if(Ye===Ie.value)return[Ie];for(const Ce of Ie.children){const ot=vr(Ye,Ce);if(ot.length)return ot.unshift(Ie),ot}return[]}class er{constructor(Ie,Ce){this.value=Ie,this.children=Ce}toString(){return`TreeNode(${this.value})`}}function ri(Ye){const Ie={};return Ye&&Ye.children.forEach(Ce=>Ie[Ce.value.outlet]=Ce),Ie}class uo extends Bn{constructor(Ie,Ce){super(Ie),this.snapshot=Ce,jt(this,Ie)}toString(){return this.snapshot.toString()}}function Ci(Ye,Ie){const Ce=function(Ye,Ie){const Hn=new _t([],{},{},"",{},Lr,Ie,null,Ye.root,-1,{});return new mt("",new er(Hn,[]))}(Ye,Ie),ot=new S.X([new Vn("",{})]),Et=new S.X({}),qt=new S.X({}),Hn=new S.X({}),Xn=new S.X(""),Ei=new tr(ot,Et,Hn,Xn,qt,Lr,Ie,Ce.root);return Ei.snapshot=Ce.root,new uo(new er(Ei,[]),Ce)}class tr{constructor(Ie,Ce,ot,Et,qt,Hn,Xn,Ei){this.url=Ie,this.params=Ce,this.queryParams=ot,this.fragment=Et,this.data=qt,this.outlet=Hn,this.component=Xn,this._futureSnapshot=Ei}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,K.U)(Ie=>Kr(Ie)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,K.U)(Ie=>Kr(Ie)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function Ar(Ye,Ie="emptyOnly"){const Ce=Ye.pathFromRoot;let ot=0;if("always"!==Ie)for(ot=Ce.length-1;ot>=1;){const Et=Ce[ot],qt=Ce[ot-1];if(Et.routeConfig&&""===Et.routeConfig.path)ot--;else{if(qt.component)break;ot--}}return function(Ye){return Ye.reduce((Ie,Ce)=>({params:Object.assign(Object.assign({},Ie.params),Ce.params),data:Object.assign(Object.assign({},Ie.data),Ce.data),resolve:Object.assign(Object.assign({},Ie.resolve),Ce._resolvedData)}),{params:{},data:{},resolve:{}})}(Ce.slice(ot))}class _t{constructor(Ie,Ce,ot,Et,qt,Hn,Xn,Ei,Yo,$a,ns){this.url=Ie,this.params=Ce,this.queryParams=ot,this.fragment=Et,this.data=qt,this.outlet=Hn,this.component=Xn,this.routeConfig=Ei,this._urlSegment=Yo,this._lastPathIndex=$a,this._resolve=ns}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Kr(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Kr(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(ot=>ot.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class mt extends Bn{constructor(Ie,Ce){super(Ce),this.url=Ie,jt(this,Ce)}toString(){return on(this._root)}}function jt(Ye,Ie){Ie.value._routerState=Ye,Ie.children.forEach(Ce=>jt(Ye,Ce))}function on(Ye){const Ie=Ye.children.length>0?` { ${Ye.children.map(on).join(", ")} } `:"";return`${Ye.value}${Ie}`}function si(Ye){if(Ye.snapshot){const Ie=Ye.snapshot,Ce=Ye._futureSnapshot;Ye.snapshot=Ce,fi(Ie.queryParams,Ce.queryParams)||Ye.queryParams.next(Ce.queryParams),Ie.fragment!==Ce.fragment&&Ye.fragment.next(Ce.fragment),fi(Ie.params,Ce.params)||Ye.params.next(Ce.params),function(Ye,Ie){if(Ye.length!==Ie.length)return!1;for(let Ce=0;Cefi(Ce.parameters,Ie[ot].parameters))}(Ye.url,Ie.url)&&!(!Ye.parent!=!Ie.parent)&&(!Ye.parent||Vi(Ye.parent,Ie.parent))}function co(Ye,Ie,Ce){if(Ce&&Ye.shouldReuseRoute(Ie.value,Ce.value.snapshot)){const ot=Ce.value;ot._futureSnapshot=Ie.value;const Et=function(Ye,Ie,Ce){return Ie.children.map(ot=>{for(const Et of Ce.children)if(Ye.shouldReuseRoute(ot.value,Et.value.snapshot))return co(Ye,ot,Et);return co(Ye,ot)})}(Ye,Ie,Ce);return new er(ot,Et)}{if(Ye.shouldAttach(Ie.value)){const qt=Ye.retrieve(Ie.value);if(null!==qt){const Hn=qt.route;return Es(Ie,Hn),Hn}}const ot=function(Ye){return new tr(new S.X(Ye.url),new S.X(Ye.params),new S.X(Ye.queryParams),new S.X(Ye.fragment),new S.X(Ye.data),Ye.outlet,Ye.component,Ye)}(Ie.value),Et=Ie.children.map(qt=>co(Ye,qt));return new er(ot,Et)}}function Es(Ye,Ie){if(Ye.value.routeConfig!==Ie.value.routeConfig)throw new Error("Cannot reattach ActivatedRouteSnapshot created from a different route");if(Ye.children.length!==Ie.children.length)throw new Error("Cannot reattach ActivatedRouteSnapshot with a different number of children");Ie.value._futureSnapshot=Ye.value;for(let Ce=0;Ce{qt[Xn]=Array.isArray(Hn)?Hn.map(Ei=>`${Ei}`):`${Hn}`}),new gr(Ce.root===Ye?Ie:ya(Ce.root,Ye,Ie),qt,Et)}function ya(Ye,Ie,Ce){const ot={};return Wt(Ye.children,(Et,qt)=>{ot[qt]=Et===Ie?Ce:ya(Et,Ie,Ce)}),new Jt(Ye.segments,ot)}class el{constructor(Ie,Ce,ot){if(this.isAbsolute=Ie,this.numberOfDoubleDots=Ce,this.commands=ot,Ie&&ot.length>0&&ta(ot[0]))throw new Error("Root segment cannot have matrix parameters");const Et=ot.find(Is);if(Et&&Et!==Zr(ot))throw new Error("{outlets:{}} has to be the last command")}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class $s{constructor(Ie,Ce,ot){this.segmentGroup=Ie,this.processChildren=Ce,this.index=ot}}function Ya(Ye,Ie,Ce){if(Ye||(Ye=new Jt([],{})),0===Ye.segments.length&&Ye.hasChildren())return Ao(Ye,Ie,Ce);const ot=function(Ye,Ie,Ce){let ot=0,Et=Ie;const qt={match:!1,pathIndex:0,commandIndex:0};for(;Et=Ce.length)return qt;const Hn=Ye.segments[Et],Xn=Ce[ot];if(Is(Xn))break;const Ei=`${Xn}`,Yo=ot0&&void 0===Ei)break;if(Ei&&Yo&&"object"==typeof Yo&&void 0===Yo.outlets){if(!Ws(Ei,Yo,Hn))return qt;ot+=2}else{if(!Ws(Ei,{},Hn))return qt;ot++}Et++}return{match:!0,pathIndex:Et,commandIndex:ot}}(Ye,Ie,Ce),Et=Ce.slice(ot.commandIndex);if(ot.match&&ot.pathIndex{"string"==typeof qt&&(qt=[qt]),null!==qt&&(Et[Hn]=Ya(Ye.children[Hn],Ie,qt))}),Wt(Ye.children,(qt,Hn)=>{void 0===ot[Hn]&&(Et[Hn]=qt)}),new Jt(Ye.segments,Et)}}function Ca(Ye,Ie,Ce){const ot=Ye.segments.slice(0,Ie);let Et=0;for(;Et{"string"==typeof Ce&&(Ce=[Ce]),null!==Ce&&(Ie[ot]=Ca(new Jt([],{}),0,Ce))}),Ie}function pl(Ye){const Ie={};return Wt(Ye,(Ce,ot)=>Ie[ot]=`${Ce}`),Ie}function Ws(Ye,Ie,Ce){return Ye==Ce.path&&fi(Ie,Ce.parameters)}class bo{constructor(Ie,Ce,ot,Et){this.routeReuseStrategy=Ie,this.futureState=Ce,this.currState=ot,this.forwardEvent=Et}activate(Ie){const Ce=this.futureState._root,ot=this.currState?this.currState._root:null;this.deactivateChildRoutes(Ce,ot,Ie),si(this.futureState.root),this.activateChildRoutes(Ce,ot,Ie)}deactivateChildRoutes(Ie,Ce,ot){const Et=ri(Ce);Ie.children.forEach(qt=>{const Hn=qt.value.outlet;this.deactivateRoutes(qt,Et[Hn],ot),delete Et[Hn]}),Wt(Et,(qt,Hn)=>{this.deactivateRouteAndItsChildren(qt,ot)})}deactivateRoutes(Ie,Ce,ot){const Et=Ie.value,qt=Ce?Ce.value:null;if(Et===qt)if(Et.component){const Hn=ot.getContext(Et.outlet);Hn&&this.deactivateChildRoutes(Ie,Ce,Hn.children)}else this.deactivateChildRoutes(Ie,Ce,ot);else qt&&this.deactivateRouteAndItsChildren(Ce,ot)}deactivateRouteAndItsChildren(Ie,Ce){this.routeReuseStrategy.shouldDetach(Ie.value.snapshot)?this.detachAndStoreRouteSubtree(Ie,Ce):this.deactivateRouteAndOutlet(Ie,Ce)}detachAndStoreRouteSubtree(Ie,Ce){const ot=Ce.getContext(Ie.value.outlet);if(ot&&ot.outlet){const Et=ot.outlet.detach(),qt=ot.children.onOutletDeactivated();this.routeReuseStrategy.store(Ie.value.snapshot,{componentRef:Et,route:Ie,contexts:qt})}}deactivateRouteAndOutlet(Ie,Ce){const ot=Ce.getContext(Ie.value.outlet),Et=ot&&Ie.value.component?ot.children:Ce,qt=ri(Ie);for(const Hn of Object.keys(qt))this.deactivateRouteAndItsChildren(qt[Hn],Et);ot&&ot.outlet&&(ot.outlet.deactivate(),ot.children.onOutletDeactivated(),ot.attachRef=null,ot.resolver=null,ot.route=null)}activateChildRoutes(Ie,Ce,ot){const Et=ri(Ce);Ie.children.forEach(qt=>{this.activateRoutes(qt,Et[qt.value.outlet],ot),this.forwardEvent(new Ur(qt.value.snapshot))}),Ie.children.length&&this.forwardEvent(new Xt(Ie.value.snapshot))}activateRoutes(Ie,Ce,ot){const Et=Ie.value,qt=Ce?Ce.value:null;if(si(Et),Et===qt)if(Et.component){const Hn=ot.getOrCreateContext(Et.outlet);this.activateChildRoutes(Ie,Ce,Hn.children)}else this.activateChildRoutes(Ie,Ce,ot);else if(Et.component){const Hn=ot.getOrCreateContext(Et.outlet);if(this.routeReuseStrategy.shouldAttach(Et.snapshot)){const Xn=this.routeReuseStrategy.retrieve(Et.snapshot);this.routeReuseStrategy.store(Et.snapshot,null),Hn.children.onOutletReAttached(Xn.contexts),Hn.attachRef=Xn.componentRef,Hn.route=Xn.route.value,Hn.outlet&&Hn.outlet.attach(Xn.componentRef,Xn.route.value),Ls(Xn.route)}else{const Xn=function(Ye){for(let Ie=Ye.parent;Ie;Ie=Ie.parent){const Ce=Ie.routeConfig;if(Ce&&Ce._loadedConfig)return Ce._loadedConfig;if(Ce&&Ce.component)return null}return null}(Et.snapshot),Ei=Xn?Xn.module.componentFactoryResolver:null;Hn.attachRef=null,Hn.route=Et,Hn.resolver=Ei,Hn.outlet&&Hn.outlet.activateWith(Et,Ei),this.activateChildRoutes(Ie,null,Hn.children)}}else this.activateChildRoutes(Ie,null,ot)}}function Ls(Ye){si(Ye.value),Ye.children.forEach(Ls)}class So{constructor(Ie,Ce){this.routes=Ie,this.module=Ce}}function $r(Ye){return"function"==typeof Ye}function tt(Ye){return Ye instanceof gr}const an=Symbol("INITIAL_VALUE");function ti(){return(0,ee.w)(Ye=>(0,A.aj)(Ye.map(Ie=>Ie.pipe((0,ue.q)(1),(0,ae.O)(an)))).pipe((0,H.R)((Ie,Ce)=>{let ot=!1;return Ce.reduce((Et,qt,Hn)=>Et!==an?Et:(qt===an&&(ot=!0),ot||!1!==qt&&Hn!==Ce.length-1&&!tt(qt)?Et:qt),Ie)},an),(0,se.h)(Ie=>Ie!==an),(0,K.U)(Ie=>tt(Ie)?Ie:!0===Ie),(0,ue.q)(1)))}let pi=(()=>{class Ye{}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)},Ye.\u0275cmp=u.Xpm({type:Ye,selectors:[["ng-component"]],decls:1,vars:0,template:function(Ce,ot){1&Ce&&u._UZ(0,"router-outlet")},directives:function(){return[ao]},encapsulation:2}),Ye})();function xi(Ye,Ie=""){for(let Ce=0;CeEo(ot)===Ie);return Ce.push(...Ye.filter(ot=>Eo(ot)!==Ie)),Ce}const sl={matched:!1,consumedSegments:[],lastChild:0,parameters:{},positionalParamSegments:{}};function tc(Ye,Ie,Ce){var ot;if(""===Ie.path)return"full"===Ie.pathMatch&&(Ye.hasChildren()||Ce.length>0)?Object.assign({},sl):{matched:!0,consumedSegments:[],lastChild:0,parameters:{},positionalParamSegments:{}};const qt=(Ie.matcher||Br)(Ce,Ye,Ie);if(!qt)return Object.assign({},sl);const Hn={};Wt(qt.posParams,(Ei,Yo)=>{Hn[Yo]=Ei.path});const Xn=qt.consumed.length>0?Object.assign(Object.assign({},Hn),qt.consumed[qt.consumed.length-1].parameters):Hn;return{matched:!0,consumedSegments:qt.consumed,lastChild:qt.consumed.length,parameters:Xn,positionalParamSegments:null!==(ot=qt.posParams)&&void 0!==ot?ot:{}}}function Nu(Ye,Ie,Ce,ot,Et="corrected"){if(Ce.length>0&&function(Ye,Ie,Ce){return Ce.some(ot=>Yl(Ye,Ie,ot)&&Eo(ot)!==Lr)}(Ye,Ce,ot)){const Hn=new Jt(Ie,function(Ye,Ie,Ce,ot){const Et={};Et[Lr]=ot,ot._sourceSegment=Ye,ot._segmentIndexShift=Ie.length;for(const qt of Ce)if(""===qt.path&&Eo(qt)!==Lr){const Hn=new Jt([],{});Hn._sourceSegment=Ye,Hn._segmentIndexShift=Ie.length,Et[Eo(qt)]=Hn}return Et}(Ye,Ie,ot,new Jt(Ce,Ye.children)));return Hn._sourceSegment=Ye,Hn._segmentIndexShift=Ie.length,{segmentGroup:Hn,slicedSegments:[]}}if(0===Ce.length&&function(Ye,Ie,Ce){return Ce.some(ot=>Yl(Ye,Ie,ot))}(Ye,Ce,ot)){const Hn=new Jt(Ye.segments,function(Ye,Ie,Ce,ot,Et,qt){const Hn={};for(const Xn of ot)if(Yl(Ye,Ce,Xn)&&!Et[Eo(Xn)]){const Ei=new Jt([],{});Ei._sourceSegment=Ye,Ei._segmentIndexShift="legacy"===qt?Ye.segments.length:Ie.length,Hn[Eo(Xn)]=Ei}return Object.assign(Object.assign({},Et),Hn)}(Ye,Ie,Ce,ot,Ye.children,Et));return Hn._sourceSegment=Ye,Hn._segmentIndexShift=Ie.length,{segmentGroup:Hn,slicedSegments:Ce}}const qt=new Jt(Ye.segments,Ye.children);return qt._sourceSegment=Ye,qt._segmentIndexShift=Ie.length,{segmentGroup:qt,slicedSegments:Ce}}function Yl(Ye,Ie,Ce){return(!(Ye.hasChildren()||Ie.length>0)||"full"!==Ce.pathMatch)&&""===Ce.path}function Fs(Ye,Ie,Ce,ot){return!!(Eo(Ye)===ot||ot!==Lr&&Yl(Ie,Ce,Ye))&&("**"===Ye.path||tc(Ie,Ye,Ce).matched)}function dc(Ye,Ie,Ce){return 0===Ie.length&&!Ye.children[Ce]}class iu{constructor(Ie){this.segmentGroup=Ie||null}}class tl{constructor(Ie){this.urlTree=Ie}}function Su(Ye){return new p.y(Ie=>Ie.error(new iu(Ye)))}function Zl(Ye){return new p.y(Ie=>Ie.error(new tl(Ye)))}function rt(Ye){return new p.y(Ie=>Ie.error(new Error(`Only absolute redirects can have named outlets. redirectTo: '${Ye}'`)))}class Te{constructor(Ie,Ce,ot,Et,qt){this.configLoader=Ce,this.urlSerializer=ot,this.urlTree=Et,this.config=qt,this.allowRedirects=!0,this.ngModule=Ie.get(u.h0i)}apply(){const Ie=Nu(this.urlTree.root,[],[],this.config).segmentGroup,Ce=new Jt(Ie.segments,Ie.children);return this.expandSegmentGroup(this.ngModule,this.config,Ce,Lr).pipe((0,K.U)(qt=>this.createUrlTree(xe(qt),this.urlTree.queryParams,this.urlTree.fragment))).pipe((0,Ee.K)(qt=>{if(qt instanceof tl)return this.allowRedirects=!1,this.match(qt.urlTree);throw qt instanceof iu?this.noMatchError(qt):qt}))}match(Ie){return this.expandSegmentGroup(this.ngModule,this.config,Ie.root,Lr).pipe((0,K.U)(Et=>this.createUrlTree(xe(Et),Ie.queryParams,Ie.fragment))).pipe((0,Ee.K)(Et=>{throw Et instanceof iu?this.noMatchError(Et):Et}))}noMatchError(Ie){return new Error(`Cannot match any routes. URL Segment: '${Ie.segmentGroup}'`)}createUrlTree(Ie,Ce,ot){const Et=Ie.segments.length>0?new Jt([],{[Lr]:Ie}):Ie;return new gr(Et,Ce,ot)}expandSegmentGroup(Ie,Ce,ot,Et){return 0===ot.segments.length&&ot.hasChildren()?this.expandChildren(Ie,Ce,ot).pipe((0,K.U)(qt=>new Jt([],qt))):this.expandSegment(Ie,ot,Ce,ot.segments,Et,!0)}expandChildren(Ie,Ce,ot){const Et=[];for(const qt of Object.keys(ot.children))"primary"===qt?Et.unshift(qt):Et.push(qt);return(0,d.D)(Et).pipe((0,ie.b)(qt=>{const Hn=ot.children[qt],Xn=ba(Ce,qt);return this.expandSegmentGroup(Ie,Xn,Hn,qt).pipe((0,K.U)(Ei=>({segment:Ei,outlet:qt})))}),(0,H.R)((qt,Hn)=>(qt[Hn.outlet]=Hn.segment,qt),{}),(0,he.Z)())}expandSegment(Ie,Ce,ot,Et,qt,Hn){return(0,d.D)(ot).pipe((0,ie.b)(Xn=>this.expandSegmentAgainstRoute(Ie,Ce,ot,Xn,Et,qt,Hn).pipe((0,Ee.K)(Yo=>{if(Yo instanceof iu)return(0,y.of)(null);throw Yo}))),(0,ge.P)(Xn=>!!Xn),(0,Ee.K)((Xn,Ei)=>{if(Xn instanceof N.K||"EmptyError"===Xn.name){if(dc(Ce,Et,qt))return(0,y.of)(new Jt([],{}));throw new iu(Ce)}throw Xn}))}expandSegmentAgainstRoute(Ie,Ce,ot,Et,qt,Hn,Xn){return Fs(Et,Ce,qt,Hn)?void 0===Et.redirectTo?this.matchSegmentAgainstRoute(Ie,Ce,Et,qt,Hn):Xn&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(Ie,Ce,ot,Et,qt,Hn):Su(Ce):Su(Ce)}expandSegmentAgainstRouteUsingRedirect(Ie,Ce,ot,Et,qt,Hn){return"**"===Et.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(Ie,ot,Et,Hn):this.expandRegularSegmentAgainstRouteUsingRedirect(Ie,Ce,ot,Et,qt,Hn)}expandWildCardWithParamsAgainstRouteUsingRedirect(Ie,Ce,ot,Et){const qt=this.applyRedirectCommands([],ot.redirectTo,{});return ot.redirectTo.startsWith("/")?Zl(qt):this.lineralizeSegments(ot,qt).pipe((0,De.zg)(Hn=>{const Xn=new Jt(Hn,{});return this.expandSegment(Ie,Xn,Ce,Hn,Et,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(Ie,Ce,ot,Et,qt,Hn){const{matched:Xn,consumedSegments:Ei,lastChild:Yo,positionalParamSegments:$a}=tc(Ce,Et,qt);if(!Xn)return Su(Ce);const ns=this.applyRedirectCommands(Ei,Et.redirectTo,$a);return Et.redirectTo.startsWith("/")?Zl(ns):this.lineralizeSegments(Et,ns).pipe((0,De.zg)(Oa=>this.expandSegment(Ie,Ce,ot,Oa.concat(qt.slice(Yo)),Hn,!1)))}matchSegmentAgainstRoute(Ie,Ce,ot,Et,qt){if("**"===ot.path)return ot.loadChildren?(ot._loadedConfig?(0,y.of)(ot._loadedConfig):this.configLoader.load(Ie.injector,ot)).pipe((0,K.U)(Oa=>(ot._loadedConfig=Oa,new Jt(Et,{})))):(0,y.of)(new Jt(Et,{}));const{matched:Hn,consumedSegments:Xn,lastChild:Ei}=tc(Ce,ot,Et);if(!Hn)return Su(Ce);const Yo=Et.slice(Ei);return this.getChildConfig(Ie,ot,Et).pipe((0,De.zg)(ns=>{const Oa=ns.module,Hs=ns.routes,{segmentGroup:fc,slicedSegments:ga}=Nu(Ce,Xn,Yo,Hs),Ol=new Jt(fc.segments,fc.children);if(0===ga.length&&Ol.hasChildren())return this.expandChildren(Oa,Hs,Ol).pipe((0,K.U)(ul=>new Jt(Xn,ul)));if(0===Hs.length&&0===ga.length)return(0,y.of)(new Jt(Xn,{}));const ll=Eo(ot)===qt;return this.expandSegment(Oa,Ol,Hs,ga,ll?Lr:qt,!0).pipe((0,K.U)(ja=>new Jt(Xn.concat(ja.segments),ja.children)))}))}getChildConfig(Ie,Ce,ot){return Ce.children?(0,y.of)(new So(Ce.children,Ie)):Ce.loadChildren?void 0!==Ce._loadedConfig?(0,y.of)(Ce._loadedConfig):this.runCanLoadGuards(Ie.injector,Ce,ot).pipe((0,De.zg)(Et=>{return Et?this.configLoader.load(Ie.injector,Ce).pipe((0,K.U)(qt=>(Ce._loadedConfig=qt,qt))):(Ye=Ce,new p.y(Ie=>Ie.error(Nn(`Cannot load children because the guard of the route "path: '${Ye.path}'" returned false`))));var Ye})):(0,y.of)(new So([],Ie))}runCanLoadGuards(Ie,Ce,ot){const Et=Ce.canLoad;if(!Et||0===Et.length)return(0,y.of)(!0);const qt=Et.map(Hn=>{const Xn=Ie.get(Hn);let Ei;if((Ye=Xn)&&$r(Ye.canLoad))Ei=Xn.canLoad(Ce,ot);else{if(!$r(Xn))throw new Error("Invalid CanLoad guard");Ei=Xn(Ce,ot)}var Ye;return zn(Ei)});return(0,y.of)(qt).pipe(ti(),(0,ce.b)(Hn=>{if(!tt(Hn))return;const Xn=Nn(`Redirecting to "${this.urlSerializer.serialize(Hn)}"`);throw Xn.url=Hn,Xn}),(0,K.U)(Hn=>!0===Hn))}lineralizeSegments(Ie,Ce){let ot=[],Et=Ce.root;for(;;){if(ot=ot.concat(Et.segments),0===Et.numberOfChildren)return(0,y.of)(ot);if(Et.numberOfChildren>1||!Et.children[Lr])return rt(Ie.redirectTo);Et=Et.children[Lr]}}applyRedirectCommands(Ie,Ce,ot){return this.applyRedirectCreatreUrlTree(Ce,this.urlSerializer.parse(Ce),Ie,ot)}applyRedirectCreatreUrlTree(Ie,Ce,ot,Et){const qt=this.createSegmentGroup(Ie,Ce.root,ot,Et);return new gr(qt,this.createQueryParams(Ce.queryParams,this.urlTree.queryParams),Ce.fragment)}createQueryParams(Ie,Ce){const ot={};return Wt(Ie,(Et,qt)=>{if("string"==typeof Et&&Et.startsWith(":")){const Xn=Et.substring(1);ot[qt]=Ce[Xn]}else ot[qt]=Et}),ot}createSegmentGroup(Ie,Ce,ot,Et){const qt=this.createSegments(Ie,Ce.segments,ot,Et);let Hn={};return Wt(Ce.children,(Xn,Ei)=>{Hn[Ei]=this.createSegmentGroup(Ie,Xn,ot,Et)}),new Jt(qt,Hn)}createSegments(Ie,Ce,ot,Et){return Ce.map(qt=>qt.path.startsWith(":")?this.findPosParam(Ie,qt,Et):this.findOrReturn(qt,ot))}findPosParam(Ie,Ce,ot){const Et=ot[Ce.path.substring(1)];if(!Et)throw new Error(`Cannot redirect to '${Ie}'. Cannot find '${Ce.path}'.`);return Et}findOrReturn(Ie,Ce){let ot=0;for(const Et of Ce){if(Et.path===Ie.path)return Ce.splice(ot),Et;ot++}return Ie}}function xe(Ye){const Ie={};for(const ot of Object.keys(Ye.children)){const qt=xe(Ye.children[ot]);(qt.segments.length>0||qt.hasChildren())&&(Ie[ot]=qt)}return function(Ye){if(1===Ye.numberOfChildren&&Ye.children[Lr]){const Ie=Ye.children[Lr];return new Jt(Ye.segments.concat(Ie.segments),Ie.children)}return Ye}(new Jt(Ye.segments,Ie))}class ur{constructor(Ie){this.path=Ie,this.route=this.path[this.path.length-1]}}class Qi{constructor(Ie,Ce){this.component=Ie,this.route=Ce}}function Go(Ye,Ie,Ce){const ot=Ye._root;return Ma(ot,Ie?Ie._root:null,Ce,[ot.value])}function hs(Ye,Ie,Ce){const ot=function(Ye){if(!Ye)return null;for(let Ie=Ye.parent;Ie;Ie=Ie.parent){const Ce=Ie.routeConfig;if(Ce&&Ce._loadedConfig)return Ce._loadedConfig}return null}(Ie);return(ot?ot.module.injector:Ce).get(Ye)}function Ma(Ye,Ie,Ce,ot,Et={canDeactivateChecks:[],canActivateChecks:[]}){const qt=ri(Ie);return Ye.children.forEach(Hn=>{(function(Ye,Ie,Ce,ot,Et={canDeactivateChecks:[],canActivateChecks:[]}){const qt=Ye.value,Hn=Ie?Ie.value:null,Xn=Ce?Ce.getContext(Ye.value.outlet):null;if(Hn&&qt.routeConfig===Hn.routeConfig){const Ei=function(Ye,Ie,Ce){if("function"==typeof Ce)return Ce(Ye,Ie);switch(Ce){case"pathParamsChange":return!Dn(Ye.url,Ie.url);case"pathParamsOrQueryParamsChange":return!Dn(Ye.url,Ie.url)||!fi(Ye.queryParams,Ie.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Vi(Ye,Ie)||!fi(Ye.queryParams,Ie.queryParams);case"paramsChange":default:return!Vi(Ye,Ie)}}(Hn,qt,qt.routeConfig.runGuardsAndResolvers);Ei?Et.canActivateChecks.push(new ur(ot)):(qt.data=Hn.data,qt._resolvedData=Hn._resolvedData),Ma(Ye,Ie,qt.component?Xn?Xn.children:null:Ce,ot,Et),Ei&&Xn&&Xn.outlet&&Xn.outlet.isActivated&&Et.canDeactivateChecks.push(new Qi(Xn.outlet.component,Hn))}else Hn&&Rl(Ie,Xn,Et),Et.canActivateChecks.push(new ur(ot)),Ma(Ye,null,qt.component?Xn?Xn.children:null:Ce,ot,Et)})(Hn,qt[Hn.value.outlet],Ce,ot.concat([Hn.value]),Et),delete qt[Hn.value.outlet]}),Wt(qt,(Hn,Xn)=>Rl(Hn,Ce.getContext(Xn),Et)),Et}function Rl(Ye,Ie,Ce){const ot=ri(Ye),Et=Ye.value;Wt(ot,(qt,Hn)=>{Rl(qt,Et.component?Ie?Ie.children.getContext(Hn):null:Ie,Ce)}),Ce.canDeactivateChecks.push(new Qi(Et.component&&Ie&&Ie.outlet&&Ie.outlet.isActivated?Ie.outlet.component:null,Et))}class gd{}function rc(Ye){return new p.y(Ie=>Ie.error(Ye))}class sa{constructor(Ie,Ce,ot,Et,qt,Hn){this.rootComponentType=Ie,this.config=Ce,this.urlTree=ot,this.url=Et,this.paramsInheritanceStrategy=qt,this.relativeLinkResolution=Hn}recognize(){const Ie=Nu(this.urlTree.root,[],[],this.config.filter(Hn=>void 0===Hn.redirectTo),this.relativeLinkResolution).segmentGroup,Ce=this.processSegmentGroup(this.config,Ie,Lr);if(null===Ce)return null;const ot=new _t([],Object.freeze({}),Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,{},Lr,this.rootComponentType,null,this.urlTree.root,-1,{}),Et=new er(ot,Ce),qt=new mt(this.url,Et);return this.inheritParamsAndData(qt._root),qt}inheritParamsAndData(Ie){const Ce=Ie.value,ot=Ar(Ce,this.paramsInheritanceStrategy);Ce.params=Object.freeze(ot.params),Ce.data=Object.freeze(ot.data),Ie.children.forEach(Et=>this.inheritParamsAndData(Et))}processSegmentGroup(Ie,Ce,ot){return 0===Ce.segments.length&&Ce.hasChildren()?this.processChildren(Ie,Ce):this.processSegment(Ie,Ce,Ce.segments,ot)}processChildren(Ie,Ce){const ot=[];for(const qt of Object.keys(Ce.children)){const Hn=Ce.children[qt],Xn=ba(Ie,qt),Ei=this.processSegmentGroup(Xn,Hn,qt);if(null===Ei)return null;ot.push(...Ei)}const Et=yl(ot);return Et.sort((Ie,Ce)=>Ie.value.outlet===Lr?-1:Ce.value.outlet===Lr?1:Ie.value.outlet.localeCompare(Ce.value.outlet)),Et}processSegment(Ie,Ce,ot,Et){for(const qt of Ie){const Hn=this.processSegmentAgainstRoute(qt,Ce,ot,Et);if(null!==Hn)return Hn}return dc(Ce,ot,Et)?[]:null}processSegmentAgainstRoute(Ie,Ce,ot,Et){if(Ie.redirectTo||!Fs(Ie,Ce,ot,Et))return null;let qt,Hn=[],Xn=[];if("**"===Ie.path){const Hs=ot.length>0?Zr(ot).parameters:{};qt=new _t(ot,Hs,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,js(Ie),Eo(Ie),Ie.component,Ie,yu(Ce),lu(Ce)+ot.length,Hu(Ie))}else{const Hs=tc(Ce,Ie,ot);if(!Hs.matched)return null;Hn=Hs.consumedSegments,Xn=ot.slice(Hs.lastChild),qt=new _t(Hn,Hs.parameters,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,js(Ie),Eo(Ie),Ie.component,Ie,yu(Ce),lu(Ce)+Hn.length,Hu(Ie))}const Ei=(Ye=Ie).children?Ye.children:Ye.loadChildren?Ye._loadedConfig.routes:[],{segmentGroup:Yo,slicedSegments:$a}=Nu(Ce,Hn,Xn,Ei.filter(Hs=>void 0===Hs.redirectTo),this.relativeLinkResolution);var Ye;if(0===$a.length&&Yo.hasChildren()){const Hs=this.processChildren(Ei,Yo);return null===Hs?null:[new er(qt,Hs)]}if(0===Ei.length&&0===$a.length)return[new er(qt,[])];const ns=Eo(Ie)===Et,Oa=this.processSegment(Ei,Yo,$a,ns?Lr:Et);return null===Oa?null:[new er(qt,Oa)]}}function $u(Ye){const Ie=Ye.value.routeConfig;return Ie&&""===Ie.path&&void 0===Ie.redirectTo}function yl(Ye){const Ie=[],Ce=new Set;for(const ot of Ye){if(!$u(ot)){Ie.push(ot);continue}const Et=Ie.find(qt=>ot.value.routeConfig===qt.value.routeConfig);void 0!==Et?(Et.children.push(...ot.children),Ce.add(Et)):Ie.push(ot)}for(const ot of Ce){const Et=yl(ot.children);Ie.push(new er(ot.value,Et))}return Ie.filter(ot=>!Ce.has(ot))}function yu(Ye){let Ie=Ye;for(;Ie._sourceSegment;)Ie=Ie._sourceSegment;return Ie}function lu(Ye){let Ie=Ye,Ce=Ie._segmentIndexShift?Ie._segmentIndexShift:0;for(;Ie._sourceSegment;)Ie=Ie._sourceSegment,Ce+=Ie._segmentIndexShift?Ie._segmentIndexShift:0;return Ce-1}function js(Ye){return Ye.data||{}}function Hu(Ye){return Ye.resolve||{}}function pu(Ye){return(0,ee.w)(Ie=>{const Ce=Ye(Ie);return Ce?(0,d.D)(Ce).pipe((0,K.U)(()=>Ie)):(0,y.of)(Ie)})}class bl extends class{shouldDetach(Ie){return!1}store(Ie,Ce){}shouldAttach(Ie){return!1}retrieve(Ie){return null}shouldReuseRoute(Ie,Ce){return Ie.routeConfig===Ce.routeConfig}}{}const El=new u.OlP("ROUTES");class Ul{constructor(Ie,Ce,ot,Et){this.loader=Ie,this.compiler=Ce,this.onLoadStartListener=ot,this.onLoadEndListener=Et}load(Ie,Ce){if(Ce._loader$)return Ce._loader$;this.onLoadStartListener&&this.onLoadStartListener(Ce);const Et=this.loadModuleFactory(Ce.loadChildren).pipe((0,K.U)(qt=>{this.onLoadEndListener&&this.onLoadEndListener(Ce);const Hn=qt.create(Ie);return new So(Hi(Hn.injector.get(El,void 0,u.XFs.Self|u.XFs.Optional)).map(ko),Hn)}),(0,Ee.K)(qt=>{throw Ce._loader$=void 0,qt}));return Ce._loader$=new Z.c(Et,()=>new J.xQ).pipe((0,Ve.x)()),Ce._loader$}loadModuleFactory(Ie){return"string"==typeof Ie?(0,d.D)(this.loader.load(Ie)):zn(Ie()).pipe((0,De.zg)(Ce=>Ce instanceof u.YKP?(0,y.of)(Ce):(0,d.D)(this.compiler.compileModuleAsync(Ce))))}}class ks{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.children=new V,this.attachRef=null}}class V{constructor(){this.contexts=new Map}onChildOutletCreated(Ie,Ce){const ot=this.getOrCreateContext(Ie);ot.outlet=Ce,this.contexts.set(Ie,ot)}onChildOutletDestroyed(Ie){const Ce=this.getContext(Ie);Ce&&(Ce.outlet=null,Ce.attachRef=null)}onOutletDeactivated(){const Ie=this.contexts;return this.contexts=new Map,Ie}onOutletReAttached(Ie){this.contexts=Ie}getOrCreateContext(Ie){let Ce=this.getContext(Ie);return Ce||(Ce=new ks,this.contexts.set(Ie,Ce)),Ce}getContext(Ie){return this.contexts.get(Ie)||null}}class st{shouldProcessUrl(Ie){return!0}extract(Ie){return Ie}merge(Ie,Ce){return Ie}}function vt(Ye){throw Ye}function ut(Ye,Ie,Ce){return Ie.parse("/")}function un(Ye,Ie){return(0,y.of)(null)}const mn={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},Or={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let zr=(()=>{class Ye{constructor(Ce,ot,Et,qt,Hn,Xn,Ei,Yo){this.rootComponentType=Ce,this.urlSerializer=ot,this.rootContexts=Et,this.location=qt,this.config=Yo,this.lastSuccessfulNavigation=null,this.currentNavigation=null,this.disposed=!1,this.lastLocationChangeInfo=null,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new J.xQ,this.errorHandler=vt,this.malformedUriErrorHandler=ut,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:un,afterPreactivation:un},this.urlHandlingStrategy=new st,this.routeReuseStrategy=new bl,this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.relativeLinkResolution="corrected",this.canceledNavigationResolution="replace",this.ngModule=Hn.get(u.h0i),this.console=Hn.get(u.c2e);const Oa=Hn.get(u.R0b);this.isNgZoneEnabled=Oa instanceof u.R0b&&u.R0b.isInAngularZone(),this.resetConfig(Yo),this.currentUrlTree=new gr(new Jt([],{}),{},null),this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.configLoader=new Ul(Xn,Ei,Hs=>this.triggerEvent(new bt(Hs)),Hs=>this.triggerEvent(new Gt(Hs))),this.routerState=Ci(this.currentUrlTree,this.rootComponentType),this.transitions=new S.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){var Ce;return null===(Ce=this.location.getState())||void 0===Ce?void 0:Ce.\u0275routerPageId}setupNavigations(Ce){const ot=this.events;return Ce.pipe((0,se.h)(Et=>0!==Et.id),(0,K.U)(Et=>Object.assign(Object.assign({},Et),{extractedUrl:this.urlHandlingStrategy.extract(Et.rawUrl)})),(0,ee.w)(Et=>{let qt=!1,Hn=!1;return(0,y.of)(Et).pipe((0,ce.b)(Xn=>{this.currentNavigation={id:Xn.id,initialUrl:Xn.currentRawUrl,extractedUrl:Xn.extractedUrl,trigger:Xn.source,extras:Xn.extras,previousNavigation:this.lastSuccessfulNavigation?Object.assign(Object.assign({},this.lastSuccessfulNavigation),{previousNavigation:null}):null}}),(0,ee.w)(Xn=>{const Ei=this.browserUrlTree.toString(),Yo=!this.navigated||Xn.extractedUrl.toString()!==Ei||Ei!==this.currentUrlTree.toString();if(("reload"===this.onSameUrlNavigation||Yo)&&this.urlHandlingStrategy.shouldProcessUrl(Xn.rawUrl))return ai(Xn.source)&&(this.browserUrlTree=Xn.extractedUrl),(0,y.of)(Xn).pipe((0,ee.w)(ns=>{const Oa=this.transitions.getValue();return ot.next(new je(ns.id,this.serializeUrl(ns.extractedUrl),ns.source,ns.restoredState)),Oa!==this.transitions.getValue()?e.E:Promise.resolve(ns)}),function(Ye,Ie,Ce,ot){return(0,ee.w)(Et=>function(Ye,Ie,Ce,ot,Et){return new Te(Ye,Ie,Ce,ot,Et).apply()}(Ye,Ie,Ce,Et.extractedUrl,ot).pipe((0,K.U)(qt=>Object.assign(Object.assign({},Et),{urlAfterRedirects:qt}))))}(this.ngModule.injector,this.configLoader,this.urlSerializer,this.config),(0,ce.b)(ns=>{this.currentNavigation=Object.assign(Object.assign({},this.currentNavigation),{finalUrl:ns.urlAfterRedirects})}),function(Ye,Ie,Ce,ot,Et){return(0,De.zg)(qt=>function(Ye,Ie,Ce,ot,Et="emptyOnly",qt="legacy"){try{const Hn=new sa(Ye,Ie,Ce,ot,Et,qt).recognize();return null===Hn?rc(new gd):(0,y.of)(Hn)}catch(Hn){return rc(Hn)}}(Ye,Ie,qt.urlAfterRedirects,Ce(qt.urlAfterRedirects),ot,Et).pipe((0,K.U)(Hn=>Object.assign(Object.assign({},qt),{targetSnapshot:Hn}))))}(this.rootComponentType,this.config,ns=>this.serializeUrl(ns),this.paramsInheritanceStrategy,this.relativeLinkResolution),(0,ce.b)(ns=>{"eager"===this.urlUpdateStrategy&&(ns.extras.skipLocationChange||this.setBrowserUrl(ns.urlAfterRedirects,ns),this.browserUrlTree=ns.urlAfterRedirects);const Oa=new tn(ns.id,this.serializeUrl(ns.extractedUrl),this.serializeUrl(ns.urlAfterRedirects),ns.targetSnapshot);ot.next(Oa)}));if(Yo&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)){const{id:Oa,extractedUrl:Hs,source:fc,restoredState:ga,extras:Ol}=Xn,ll=new je(Oa,this.serializeUrl(Hs),fc,ga);ot.next(ll);const Za=Ci(Hs,this.rootComponentType).snapshot;return(0,y.of)(Object.assign(Object.assign({},Xn),{targetSnapshot:Za,urlAfterRedirects:Hs,extras:Object.assign(Object.assign({},Ol),{skipLocationChange:!1,replaceUrl:!1})}))}return this.rawUrlTree=Xn.rawUrl,this.browserUrlTree=Xn.urlAfterRedirects,Xn.resolve(null),e.E}),pu(Xn=>{const{targetSnapshot:Ei,id:Yo,extractedUrl:$a,rawUrl:ns,extras:{skipLocationChange:Oa,replaceUrl:Hs}}=Xn;return this.hooks.beforePreactivation(Ei,{navigationId:Yo,appliedUrlTree:$a,rawUrlTree:ns,skipLocationChange:!!Oa,replaceUrl:!!Hs})}),(0,ce.b)(Xn=>{const Ei=new It(Xn.id,this.serializeUrl(Xn.extractedUrl),this.serializeUrl(Xn.urlAfterRedirects),Xn.targetSnapshot);this.triggerEvent(Ei)}),(0,K.U)(Xn=>Object.assign(Object.assign({},Xn),{guards:Go(Xn.targetSnapshot,Xn.currentSnapshot,this.rootContexts)})),function(Ye,Ie){return(0,De.zg)(Ce=>{const{targetSnapshot:ot,currentSnapshot:Et,guards:{canActivateChecks:qt,canDeactivateChecks:Hn}}=Ce;return 0===Hn.length&&0===qt.length?(0,y.of)(Object.assign(Object.assign({},Ce),{guardsResult:!0})):function(Ye,Ie,Ce,ot){return(0,d.D)(Ye).pipe((0,De.zg)(Et=>function(Ye,Ie,Ce,ot,Et){const qt=Ie&&Ie.routeConfig?Ie.routeConfig.canDeactivate:null;if(!qt||0===qt.length)return(0,y.of)(!0);const Hn=qt.map(Xn=>{const Ei=hs(Xn,Ie,Et);let Yo;if(function(Ye){return Ye&&$r(Ye.canDeactivate)}(Ei))Yo=zn(Ei.canDeactivate(Ye,Ie,Ce,ot));else{if(!$r(Ei))throw new Error("Invalid CanDeactivate guard");Yo=zn(Ei(Ye,Ie,Ce,ot))}return Yo.pipe((0,ge.P)())});return(0,y.of)(Hn).pipe(ti())}(Et.component,Et.route,Ce,Ie,ot)),(0,ge.P)(Et=>!0!==Et,!0))}(Hn,ot,Et,Ye).pipe((0,De.zg)(Xn=>Xn&&function(Ye){return"boolean"==typeof Ye}(Xn)?function(Ye,Ie,Ce,ot){return(0,d.D)(Ie).pipe((0,ie.b)(Et=>(0,L.z)(function(Ye,Ie){return null!==Ye&&Ie&&Ie(new xt(Ye)),(0,y.of)(!0)}(Et.route.parent,ot),function(Ye,Ie){return null!==Ye&&Ie&&Ie(new Zn(Ye)),(0,y.of)(!0)}(Et.route,ot),function(Ye,Ie,Ce){const ot=Ie[Ie.length-1],qt=Ie.slice(0,Ie.length-1).reverse().map(Hn=>function(Ye){const Ie=Ye.routeConfig?Ye.routeConfig.canActivateChild:null;return Ie&&0!==Ie.length?{node:Ye,guards:Ie}:null}(Hn)).filter(Hn=>null!==Hn).map(Hn=>_(()=>{const Xn=Hn.guards.map(Ei=>{const Yo=hs(Ei,Hn.node,Ce);let $a;if(function(Ye){return Ye&&$r(Ye.canActivateChild)}(Yo))$a=zn(Yo.canActivateChild(ot,Ye));else{if(!$r(Yo))throw new Error("Invalid CanActivateChild guard");$a=zn(Yo(ot,Ye))}return $a.pipe((0,ge.P)())});return(0,y.of)(Xn).pipe(ti())}));return(0,y.of)(qt).pipe(ti())}(Ye,Et.path,Ce),function(Ye,Ie,Ce){const ot=Ie.routeConfig?Ie.routeConfig.canActivate:null;if(!ot||0===ot.length)return(0,y.of)(!0);const Et=ot.map(qt=>_(()=>{const Hn=hs(qt,Ie,Ce);let Xn;if(function(Ye){return Ye&&$r(Ye.canActivate)}(Hn))Xn=zn(Hn.canActivate(Ie,Ye));else{if(!$r(Hn))throw new Error("Invalid CanActivate guard");Xn=zn(Hn(Ie,Ye))}return Xn.pipe((0,ge.P)())}));return(0,y.of)(Et).pipe(ti())}(Ye,Et.route,Ce))),(0,ge.P)(Et=>!0!==Et,!0))}(ot,qt,Ye,Ie):(0,y.of)(Xn)),(0,K.U)(Xn=>Object.assign(Object.assign({},Ce),{guardsResult:Xn})))})}(this.ngModule.injector,Xn=>this.triggerEvent(Xn)),(0,ce.b)(Xn=>{if(tt(Xn.guardsResult)){const Yo=Nn(`Redirecting to "${this.serializeUrl(Xn.guardsResult)}"`);throw Yo.url=Xn.guardsResult,Yo}const Ei=new Zt(Xn.id,this.serializeUrl(Xn.extractedUrl),this.serializeUrl(Xn.urlAfterRedirects),Xn.targetSnapshot,!!Xn.guardsResult);this.triggerEvent(Ei)}),(0,se.h)(Xn=>!!Xn.guardsResult||(this.restoreHistory(Xn),this.cancelNavigationTransition(Xn,""),!1)),pu(Xn=>{if(Xn.guards.canActivateChecks.length)return(0,y.of)(Xn).pipe((0,ce.b)(Ei=>{const Yo=new Ut(Ei.id,this.serializeUrl(Ei.extractedUrl),this.serializeUrl(Ei.urlAfterRedirects),Ei.targetSnapshot);this.triggerEvent(Yo)}),(0,ee.w)(Ei=>{let Yo=!1;return(0,y.of)(Ei).pipe(function(Ye,Ie){return(0,De.zg)(Ce=>{const{targetSnapshot:ot,guards:{canActivateChecks:Et}}=Ce;if(!Et.length)return(0,y.of)(Ce);let qt=0;return(0,d.D)(Et).pipe((0,ie.b)(Hn=>function(Ye,Ie,Ce,ot){return function(Ye,Ie,Ce,ot){const Et=Object.keys(Ye);if(0===Et.length)return(0,y.of)({});const qt={};return(0,d.D)(Et).pipe((0,De.zg)(Hn=>function(Ye,Ie,Ce,ot){const Et=hs(Ye,Ie,ot);return zn(Et.resolve?Et.resolve(Ie,Ce):Et(Ie,Ce))}(Ye[Hn],Ie,Ce,ot).pipe((0,ce.b)(Xn=>{qt[Hn]=Xn}))),(0,lt.h)(1),(0,De.zg)(()=>Object.keys(qt).length===Et.length?(0,y.of)(qt):e.E))}(Ye._resolve,Ye,Ie,ot).pipe((0,K.U)(qt=>(Ye._resolvedData=qt,Ye.data=Object.assign(Object.assign({},Ye.data),Ar(Ye,Ce).resolve),null)))}(Hn.route,ot,Ye,Ie)),(0,ce.b)(()=>qt++),(0,lt.h)(1),(0,De.zg)(Hn=>qt===Et.length?(0,y.of)(Ce):e.E))})}(this.paramsInheritanceStrategy,this.ngModule.injector),(0,ce.b)({next:()=>Yo=!0,complete:()=>{Yo||(this.restoreHistory(Ei),this.cancelNavigationTransition(Ei,"At least one route resolver didn't emit any value."))}}))}),(0,ce.b)(Ei=>{const Yo=new Bt(Ei.id,this.serializeUrl(Ei.extractedUrl),this.serializeUrl(Ei.urlAfterRedirects),Ei.targetSnapshot);this.triggerEvent(Yo)}))}),pu(Xn=>{const{targetSnapshot:Ei,id:Yo,extractedUrl:$a,rawUrl:ns,extras:{skipLocationChange:Oa,replaceUrl:Hs}}=Xn;return this.hooks.afterPreactivation(Ei,{navigationId:Yo,appliedUrlTree:$a,rawUrlTree:ns,skipLocationChange:!!Oa,replaceUrl:!!Hs})}),(0,K.U)(Xn=>{const Ei=function(Ye,Ie,Ce){const ot=co(Ye,Ie._root,Ce?Ce._root:void 0);return new uo(ot,Ie)}(this.routeReuseStrategy,Xn.targetSnapshot,Xn.currentRouterState);return Object.assign(Object.assign({},Xn),{targetRouterState:Ei})}),(0,ce.b)(Xn=>{this.currentUrlTree=Xn.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(Xn.urlAfterRedirects,Xn.rawUrl),this.routerState=Xn.targetRouterState,"deferred"===this.urlUpdateStrategy&&(Xn.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,Xn),this.browserUrlTree=Xn.urlAfterRedirects)}),((Ye,Ie,Ce)=>(0,K.U)(ot=>(new bo(Ie,ot.targetRouterState,ot.currentRouterState,Ce).activate(Ye),ot)))(this.rootContexts,this.routeReuseStrategy,Xn=>this.triggerEvent(Xn)),(0,ce.b)({next(){qt=!0},complete(){qt=!0}}),(0,ze.x)(()=>{var Xn;if(!qt&&!Hn){const Ei=`Navigation ID ${Et.id} is not equal to the current navigation id ${this.navigationId}`;"replace"===this.canceledNavigationResolution?(this.restoreHistory(Et),this.cancelNavigationTransition(Et,Ei)):this.cancelNavigationTransition(Et,Ei)}(null===(Xn=this.currentNavigation)||void 0===Xn?void 0:Xn.id)===Et.id&&(this.currentNavigation=null)}),(0,Ee.K)(Xn=>{if(Hn=!0,function(Ye){return Ye&&Ye[ei]}(Xn)){const Ei=tt(Xn.url);Ei||(this.navigated=!0,this.restoreHistory(Et,!0));const Yo=new Vt(Et.id,this.serializeUrl(Et.extractedUrl),Xn.message);ot.next(Yo),Ei?setTimeout(()=>{const $a=this.urlHandlingStrategy.merge(Xn.url,this.rawUrlTree),ns={skipLocationChange:Et.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||ai(Et.source)};this.scheduleNavigation($a,"imperative",null,ns,{resolve:Et.resolve,reject:Et.reject,promise:Et.promise})},0):Et.resolve(!1)}else{this.restoreHistory(Et,!0);const Ei=new it(Et.id,this.serializeUrl(Et.extractedUrl),Xn);ot.next(Ei);try{Et.resolve(this.errorHandler(Xn))}catch(Yo){Et.reject(Yo)}}return e.E}))}))}resetRootComponentType(Ce){this.rootComponentType=Ce,this.routerState.root.component=this.rootComponentType}getTransition(){const Ce=this.transitions.value;return Ce.urlAfterRedirects=this.browserUrlTree,Ce}setTransition(Ce){this.transitions.next(Object.assign(Object.assign({},this.getTransition()),Ce))}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(Ce=>{const ot=this.extractLocationChangeInfoFromEvent(Ce);this.shouldScheduleNavigation(this.lastLocationChangeInfo,ot)&&setTimeout(()=>{const{source:Et,state:qt,urlTree:Hn}=ot,Xn={replaceUrl:!0};if(qt){const Ei=Object.assign({},qt);delete Ei.navigationId,delete Ei.\u0275routerPageId,0!==Object.keys(Ei).length&&(Xn.state=Ei)}this.scheduleNavigation(Hn,Et,qt,Xn)},0),this.lastLocationChangeInfo=ot}))}extractLocationChangeInfoFromEvent(Ce){var ot;return{source:"popstate"===Ce.type?"popstate":"hashchange",urlTree:this.parseUrl(Ce.url),state:(null===(ot=Ce.state)||void 0===ot?void 0:ot.navigationId)?Ce.state:null,transitionId:this.getTransition().id}}shouldScheduleNavigation(Ce,ot){if(!Ce)return!0;const Et=ot.urlTree.toString()===Ce.urlTree.toString();return ot.transitionId!==Ce.transitionId||!Et||!("hashchange"===ot.source&&"popstate"===Ce.source||"popstate"===ot.source&&"hashchange"===Ce.source)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.currentNavigation}triggerEvent(Ce){this.events.next(Ce)}resetConfig(Ce){xi(Ce),this.config=Ce.map(ko),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(Ce,ot={}){const{relativeTo:Et,queryParams:qt,fragment:Hn,queryParamsHandling:Xn,preserveFragment:Ei}=ot,Yo=Et||this.routerState.root,$a=Ei?this.currentUrlTree.fragment:Hn;let ns=null;switch(Xn){case"merge":ns=Object.assign(Object.assign({},this.currentUrlTree.queryParams),qt);break;case"preserve":ns=this.currentUrlTree.queryParams;break;default:ns=qt||null}return null!==ns&&(ns=this.removeEmptyProps(ns)),function(Ye,Ie,Ce,ot,Et){if(0===Ce.length)return us(Ie.root,Ie.root,Ie,ot,Et);const qt=function(Ye){if("string"==typeof Ye[0]&&1===Ye.length&&"/"===Ye[0])return new el(!0,0,Ye);let Ie=0,Ce=!1;const ot=Ye.reduce((Et,qt,Hn)=>{if("object"==typeof qt&&null!=qt){if(qt.outlets){const Xn={};return Wt(qt.outlets,(Ei,Yo)=>{Xn[Yo]="string"==typeof Ei?Ei.split("/"):Ei}),[...Et,{outlets:Xn}]}if(qt.segmentPath)return[...Et,qt.segmentPath]}return"string"!=typeof qt?[...Et,qt]:0===Hn?(qt.split("/").forEach((Xn,Ei)=>{0==Ei&&"."===Xn||(0==Ei&&""===Xn?Ce=!0:".."===Xn?Ie++:""!=Xn&&Et.push(Xn))}),Et):[...Et,qt]},[]);return new el(Ce,Ie,ot)}(Ce);if(qt.toRoot())return us(Ie.root,new Jt([],{}),Ie,ot,Et);const Hn=function(Ye,Ie,Ce){if(Ye.isAbsolute)return new $s(Ie.root,!0,0);if(-1===Ce.snapshot._lastPathIndex){const qt=Ce.snapshot._urlSegment;return new $s(qt,qt===Ie.root,0)}const ot=ta(Ye.commands[0])?0:1;return function(Ye,Ie,Ce){let ot=Ye,Et=Ie,qt=Ce;for(;qt>Et;){if(qt-=Et,ot=ot.parent,!ot)throw new Error("Invalid number of '../'");Et=ot.segments.length}return new $s(ot,!1,Et-qt)}(Ce.snapshot._urlSegment,Ce.snapshot._lastPathIndex+ot,Ye.numberOfDoubleDots)}(qt,Ie,Ye),Xn=Hn.processChildren?Ao(Hn.segmentGroup,Hn.index,qt.commands):Ya(Hn.segmentGroup,Hn.index,qt.commands);return us(Hn.segmentGroup,Xn,Ie,ot,Et)}(Yo,this.currentUrlTree,Ce,ns,null!=$a?$a:null)}navigateByUrl(Ce,ot={skipLocationChange:!1}){const Et=tt(Ce)?Ce:this.parseUrl(Ce),qt=this.urlHandlingStrategy.merge(Et,this.rawUrlTree);return this.scheduleNavigation(qt,"imperative",null,ot)}navigate(Ce,ot={skipLocationChange:!1}){return function(Ye){for(let Ie=0;Ie{const qt=Ce[Et];return null!=qt&&(ot[Et]=qt),ot},{})}processNavigations(){this.navigations.subscribe(Ce=>{this.navigated=!0,this.lastSuccessfulId=Ce.id,this.currentPageId=Ce.targetPageId,this.events.next(new He(Ce.id,this.serializeUrl(Ce.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.currentNavigation,Ce.resolve(!0)},Ce=>{this.console.warn(`Unhandled Navigation Error: ${Ce}`)})}scheduleNavigation(Ce,ot,Et,qt,Hn){var Xn,Ei;if(this.disposed)return Promise.resolve(!1);const Yo=this.getTransition(),$a=ai(ot)&&Yo&&!ai(Yo.source),Hs=(this.lastSuccessfulId===Yo.id||this.currentNavigation?Yo.rawUrl:Yo.urlAfterRedirects).toString()===Ce.toString();if($a&&Hs)return Promise.resolve(!0);let fc,ga,Ol;Hn?(fc=Hn.resolve,ga=Hn.reject,Ol=Hn.promise):Ol=new Promise((ja,ul)=>{fc=ja,ga=ul});const ll=++this.navigationId;let Za;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(Et=this.location.getState()),Za=Et&&Et.\u0275routerPageId?Et.\u0275routerPageId:qt.replaceUrl||qt.skipLocationChange?null!==(Xn=this.browserPageId)&&void 0!==Xn?Xn:0:(null!==(Ei=this.browserPageId)&&void 0!==Ei?Ei:0)+1):Za=0,this.setTransition({id:ll,targetPageId:Za,source:ot,restoredState:Et,currentUrlTree:this.currentUrlTree,currentRawUrl:this.rawUrlTree,rawUrl:Ce,extras:qt,resolve:fc,reject:ga,promise:Ol,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),Ol.catch(ja=>Promise.reject(ja))}setBrowserUrl(Ce,ot){const Et=this.urlSerializer.serialize(Ce),qt=Object.assign(Object.assign({},ot.extras.state),this.generateNgRouterState(ot.id,ot.targetPageId));this.location.isCurrentPathEqualTo(Et)||ot.extras.replaceUrl?this.location.replaceState(Et,"",qt):this.location.go(Et,"",qt)}restoreHistory(Ce,ot=!1){var Et,qt;if("computed"===this.canceledNavigationResolution){const Hn=this.currentPageId-Ce.targetPageId;"popstate"!==Ce.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==(null===(Et=this.currentNavigation)||void 0===Et?void 0:Et.finalUrl)||0===Hn?this.currentUrlTree===(null===(qt=this.currentNavigation)||void 0===qt?void 0:qt.finalUrl)&&0===Hn&&(this.resetState(Ce),this.browserUrlTree=Ce.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(Hn)}else"replace"===this.canceledNavigationResolution&&(ot&&this.resetState(Ce),this.resetUrlToCurrentUrlTree())}resetState(Ce){this.routerState=Ce.currentRouterState,this.currentUrlTree=Ce.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,Ce.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(Ce,ot){const Et=new Vt(Ce.id,this.serializeUrl(Ce.extractedUrl),ot);this.triggerEvent(Et),Ce.resolve(!1)}generateNgRouterState(Ce,ot){return"computed"===this.canceledNavigationResolution?{navigationId:Ce,\u0275routerPageId:ot}:{navigationId:Ce}}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.LFG(u.DyG),u.LFG(Yt),u.LFG(V),u.LFG(r.Ye),u.LFG(u.zs3),u.LFG(u.v3s),u.LFG(u.Sil),u.LFG(void 0))},Ye.\u0275prov=u.Yz7({token:Ye,factory:Ye.\u0275fac}),Ye})();function ai(Ye){return"imperative"!==Ye}let Io=(()=>{class Ye{constructor(Ce,ot,Et,qt,Hn){this.router=Ce,this.route=ot,this.commands=[],this.onChanges=new J.xQ,null==Et&&qt.setAttribute(Hn.nativeElement,"tabindex","0")}ngOnChanges(Ce){this.onChanges.next(this)}set routerLink(Ce){this.commands=null!=Ce?Array.isArray(Ce)?Ce:[Ce]:[]}onClick(){const Ce={skipLocationChange:In(this.skipLocationChange),replaceUrl:In(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,Ce),!0}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:In(this.preserveFragment)})}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.Y36(zr),u.Y36(tr),u.$8M("tabindex"),u.Y36(u.Qsj),u.Y36(u.SBq))},Ye.\u0275dir=u.lG2({type:Ye,selectors:[["","routerLink","",5,"a",5,"area"]],hostBindings:function(Ce,ot){1&Ce&&u.NdJ("click",function(){return ot.onClick()})},inputs:{routerLink:"routerLink",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",state:"state",relativeTo:"relativeTo"},features:[u.TTD]}),Ye})(),Fo=(()=>{class Ye{constructor(Ce,ot,Et){this.router=Ce,this.route=ot,this.locationStrategy=Et,this.commands=[],this.onChanges=new J.xQ,this.subscription=Ce.events.subscribe(qt=>{qt instanceof He&&this.updateTargetUrlAndHref()})}set routerLink(Ce){this.commands=null!=Ce?Array.isArray(Ce)?Ce:[Ce]:[]}ngOnChanges(Ce){this.updateTargetUrlAndHref(),this.onChanges.next(this)}ngOnDestroy(){this.subscription.unsubscribe()}onClick(Ce,ot,Et,qt,Hn){if(0!==Ce||ot||Et||qt||Hn||"string"==typeof this.target&&"_self"!=this.target)return!0;const Xn={skipLocationChange:In(this.skipLocationChange),replaceUrl:In(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,Xn),!1}updateTargetUrlAndHref(){this.href=this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree))}get urlTree(){return this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:In(this.preserveFragment)})}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.Y36(zr),u.Y36(tr),u.Y36(r.S$))},Ye.\u0275dir=u.lG2({type:Ye,selectors:[["a","routerLink",""],["area","routerLink",""]],hostVars:2,hostBindings:function(Ce,ot){1&Ce&&u.NdJ("click",function(qt){return ot.onClick(qt.button,qt.ctrlKey,qt.shiftKey,qt.altKey,qt.metaKey)}),2&Ce&&(u.Ikx("href",ot.href,u.LSH),u.uIk("target",ot.target))},inputs:{routerLink:"routerLink",target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",state:"state",relativeTo:"relativeTo"},features:[u.TTD]}),Ye})();function In(Ye){return""===Ye||!!Ye}let Cr=(()=>{class Ye{constructor(Ce,ot,Et,qt,Hn,Xn){this.router=Ce,this.element=ot,this.renderer=Et,this.cdr=qt,this.link=Hn,this.linkWithHref=Xn,this.classes=[],this.isActive=!1,this.routerLinkActiveOptions={exact:!1},this.routerEventsSubscription=Ce.events.subscribe(Ei=>{Ei instanceof He&&this.update()})}ngAfterContentInit(){(0,y.of)(this.links.changes,this.linksWithHrefs.changes,(0,y.of)(null)).pipe((0,Be.J)()).subscribe(Ce=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){var Ce;null===(Ce=this.linkInputChangesSubscription)||void 0===Ce||Ce.unsubscribe();const ot=[...this.links.toArray(),...this.linksWithHrefs.toArray(),this.link,this.linkWithHref].filter(Et=>!!Et).map(Et=>Et.onChanges);this.linkInputChangesSubscription=(0,d.D)(ot).pipe((0,Be.J)()).subscribe(Et=>{this.isActive!==this.isLinkActive(this.router)(Et)&&this.update()})}set routerLinkActive(Ce){const ot=Array.isArray(Ce)?Ce:Ce.split(" ");this.classes=ot.filter(Et=>!!Et)}ngOnChanges(Ce){this.update()}ngOnDestroy(){var Ce;this.routerEventsSubscription.unsubscribe(),null===(Ce=this.linkInputChangesSubscription)||void 0===Ce||Ce.unsubscribe()}update(){!this.links||!this.linksWithHrefs||!this.router.navigated||Promise.resolve().then(()=>{const Ce=this.hasActiveLinks();this.isActive!==Ce&&(this.isActive=Ce,this.cdr.markForCheck(),this.classes.forEach(ot=>{Ce?this.renderer.addClass(this.element.nativeElement,ot):this.renderer.removeClass(this.element.nativeElement,ot)}))})}isLinkActive(Ce){const ot=function(Ye){return!!Ye.paths}(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return Et=>Ce.isActive(Et.urlTree,ot)}hasActiveLinks(){const Ce=this.isLinkActive(this.router);return this.link&&Ce(this.link)||this.linkWithHref&&Ce(this.linkWithHref)||this.links.some(Ce)||this.linksWithHrefs.some(Ce)}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.Y36(zr),u.Y36(u.SBq),u.Y36(u.Qsj),u.Y36(u.sBO),u.Y36(Io,8),u.Y36(Fo,8))},Ye.\u0275dir=u.lG2({type:Ye,selectors:[["","routerLinkActive",""]],contentQueries:function(Ce,ot,Et){if(1&Ce&&(u.Suo(Et,Io,5),u.Suo(Et,Fo,5)),2&Ce){let qt;u.iGM(qt=u.CRH())&&(ot.links=qt),u.iGM(qt=u.CRH())&&(ot.linksWithHrefs=qt)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",routerLinkActive:"routerLinkActive"},exportAs:["routerLinkActive"],features:[u.TTD]}),Ye})(),ao=(()=>{class Ye{constructor(Ce,ot,Et,qt,Hn){this.parentContexts=Ce,this.location=ot,this.resolver=Et,this.changeDetector=Hn,this.activated=null,this._activatedRoute=null,this.activateEvents=new u.vpe,this.deactivateEvents=new u.vpe,this.name=qt||Lr,Ce.onChildOutletCreated(this.name,this)}ngOnDestroy(){this.parentContexts.onChildOutletDestroyed(this.name)}ngOnInit(){if(!this.activated){const Ce=this.parentContexts.getContext(this.name);Ce&&Ce.route&&(Ce.attachRef?this.attach(Ce.attachRef,Ce.route):this.activateWith(Ce.route,Ce.resolver||null))}}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new Error("Outlet is not activated");this.location.detach();const Ce=this.activated;return this.activated=null,this._activatedRoute=null,Ce}attach(Ce,ot){this.activated=Ce,this._activatedRoute=ot,this.location.insert(Ce.hostView)}deactivate(){if(this.activated){const Ce=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(Ce)}}activateWith(Ce,ot){if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=Ce;const Hn=(ot=ot||this.resolver).resolveComponentFactory(Ce._futureSnapshot.routeConfig.component),Xn=this.parentContexts.getOrCreateContext(this.name).children,Ei=new ys(Ce,Xn,this.location.injector);this.activated=this.location.createComponent(Hn,this.location.length,Ei),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.Y36(V),u.Y36(u.s_b),u.Y36(u._Vd),u.$8M("name"),u.Y36(u.sBO))},Ye.\u0275dir=u.lG2({type:Ye,selectors:[["router-outlet"]],outputs:{activateEvents:"activate",deactivateEvents:"deactivate"},exportAs:["outlet"]}),Ye})();class ys{constructor(Ie,Ce,ot){this.route=Ie,this.childContexts=Ce,this.parent=ot}get(Ie,Ce){return Ie===tr?this.route:Ie===V?this.childContexts:this.parent.get(Ie,Ce)}}class Na{}class Tl{preload(Ie,Ce){return Ce().pipe((0,Ee.K)(()=>(0,y.of)(null)))}}class Qs{preload(Ie,Ce){return(0,y.of)(null)}}let ed=(()=>{class Ye{constructor(Ce,ot,Et,qt,Hn){this.router=Ce,this.injector=qt,this.preloadingStrategy=Hn,this.loader=new Ul(ot,Et,Yo=>Ce.triggerEvent(new bt(Yo)),Yo=>Ce.triggerEvent(new Gt(Yo)))}setUpPreloading(){this.subscription=this.router.events.pipe((0,se.h)(Ce=>Ce instanceof He),(0,ie.b)(()=>this.preload())).subscribe(()=>{})}preload(){const Ce=this.injector.get(u.h0i);return this.processRoutes(Ce,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(Ce,ot){const Et=[];for(const qt of ot)if(qt.loadChildren&&!qt.canLoad&&qt._loadedConfig){const Hn=qt._loadedConfig;Et.push(this.processRoutes(Hn.module,Hn.routes))}else qt.loadChildren&&!qt.canLoad?Et.push(this.preloadConfig(Ce,qt)):qt.children&&Et.push(this.processRoutes(Ce,qt.children));return(0,d.D)(Et).pipe((0,Be.J)(),(0,K.U)(qt=>{}))}preloadConfig(Ce,ot){return this.preloadingStrategy.preload(ot,()=>(ot._loadedConfig?(0,y.of)(ot._loadedConfig):this.loader.load(Ce.injector,ot)).pipe((0,De.zg)(qt=>(ot._loadedConfig=qt,this.processRoutes(qt.module,qt.routes)))))}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.LFG(zr),u.LFG(u.v3s),u.LFG(u.Sil),u.LFG(u.zs3),u.LFG(Na))},Ye.\u0275prov=u.Yz7({token:Ye,factory:Ye.\u0275fac}),Ye})(),$c=(()=>{class Ye{constructor(Ce,ot,Et={}){this.router=Ce,this.viewportScroller=ot,this.options=Et,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},Et.scrollPositionRestoration=Et.scrollPositionRestoration||"disabled",Et.anchorScrolling=Et.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(Ce=>{Ce instanceof je?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=Ce.navigationTrigger,this.restoredId=Ce.restoredState?Ce.restoredState.navigationId:0):Ce instanceof He&&(this.lastId=Ce.id,this.scheduleScrollEvent(Ce,this.router.parseUrl(Ce.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(Ce=>{Ce instanceof di&&(Ce.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(Ce.position):Ce.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(Ce.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(Ce,ot){this.router.triggerEvent(new di(Ce,"popstate"===this.lastSource?this.store[this.restoredId]:null,ot))}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.LFG(zr),u.LFG(r.EM),u.LFG(void 0))},Ye.\u0275prov=u.Yz7({token:Ye,factory:Ye.\u0275fac}),Ye})();const $i=new u.OlP("ROUTER_CONFIGURATION"),xo=new u.OlP("ROUTER_FORROOT_GUARD"),hl=[r.Ye,{provide:Yt,useClass:_n},{provide:zr,useFactory:function(Ye,Ie,Ce,ot,Et,qt,Hn,Xn={},Ei,Yo){const $a=new zr(null,Ye,Ie,Ce,ot,Et,qt,Hi(Hn));return Ei&&($a.urlHandlingStrategy=Ei),Yo&&($a.routeReuseStrategy=Yo),function(Ye,Ie){Ye.errorHandler&&(Ie.errorHandler=Ye.errorHandler),Ye.malformedUriErrorHandler&&(Ie.malformedUriErrorHandler=Ye.malformedUriErrorHandler),Ye.onSameUrlNavigation&&(Ie.onSameUrlNavigation=Ye.onSameUrlNavigation),Ye.paramsInheritanceStrategy&&(Ie.paramsInheritanceStrategy=Ye.paramsInheritanceStrategy),Ye.relativeLinkResolution&&(Ie.relativeLinkResolution=Ye.relativeLinkResolution),Ye.urlUpdateStrategy&&(Ie.urlUpdateStrategy=Ye.urlUpdateStrategy)}(Xn,$a),Xn.enableTracing&&$a.events.subscribe(ns=>{var Oa,Hs;null===(Oa=console.group)||void 0===Oa||Oa.call(console,`Router Event: ${ns.constructor.name}`),console.log(ns.toString()),console.log(ns),null===(Hs=console.groupEnd)||void 0===Hs||Hs.call(console)}),$a},deps:[Yt,V,r.Ye,u.zs3,u.v3s,u.Sil,El,$i,[class{},new u.FiY],[class{},new u.FiY]]},V,{provide:tr,useFactory:function(Ye){return Ye.routerState.root},deps:[zr]},{provide:u.v3s,useClass:u.EAV},ed,Qs,Tl,{provide:$i,useValue:{enableTracing:!1}}];function Bl(){return new u.PXZ("Router",zr)}let Js=(()=>{class Ye{constructor(Ce,ot){}static forRoot(Ce,ot){return{ngModule:Ye,providers:[hl,td(Ce),{provide:xo,useFactory:Nl,deps:[[zr,new u.FiY,new u.tp0]]},{provide:$i,useValue:ot||{}},{provide:r.S$,useFactory:Mn,deps:[r.lw,[new u.tBr(r.mr),new u.FiY],$i]},{provide:$c,useFactory:md,deps:[zr,r.EM,$i]},{provide:Na,useExisting:ot&&ot.preloadingStrategy?ot.preloadingStrategy:Qs},{provide:u.PXZ,multi:!0,useFactory:Bl},[Zc,{provide:u.ip1,multi:!0,useFactory:ic,deps:[Zc]},{provide:al,useFactory:df,deps:[Zc]},{provide:u.tb,multi:!0,useExisting:al}]]}}static forChild(Ce){return{ngModule:Ye,providers:[td(Ce)]}}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.LFG(xo,8),u.LFG(zr,8))},Ye.\u0275mod=u.oAB({type:Ye}),Ye.\u0275inj=u.cJS({}),Ye})();function md(Ye,Ie,Ce){return Ce.scrollOffset&&Ie.setOffset(Ce.scrollOffset),new $c(Ye,Ie,Ce)}function Mn(Ye,Ie,Ce={}){return Ce.useHash?new r.Do(Ye,Ie):new r.b0(Ye,Ie)}function Nl(Ye){return"guarded"}function td(Ye){return[{provide:u.deG,multi:!0,useValue:Ye},{provide:El,multi:!0,useValue:Ye}]}let Zc=(()=>{class Ye{constructor(Ce){this.injector=Ce,this.initNavigation=!1,this.destroyed=!1,this.resultOfPreactivationDone=new J.xQ}appInitializer(){return this.injector.get(r.V_,Promise.resolve(null)).then(()=>{if(this.destroyed)return Promise.resolve(!0);let ot=null;const Et=new Promise(Xn=>ot=Xn),qt=this.injector.get(zr),Hn=this.injector.get($i);return"disabled"===Hn.initialNavigation?(qt.setUpLocationChangeListener(),ot(!0)):"enabled"===Hn.initialNavigation||"enabledBlocking"===Hn.initialNavigation?(qt.hooks.afterPreactivation=()=>this.initNavigation?(0,y.of)(null):(this.initNavigation=!0,ot(!0),this.resultOfPreactivationDone),qt.initialNavigation()):ot(!0),Et})}bootstrapListener(Ce){const ot=this.injector.get($i),Et=this.injector.get(ed),qt=this.injector.get($c),Hn=this.injector.get(zr),Xn=this.injector.get(u.z2F);Ce===Xn.components[0]&&(("enabledNonBlocking"===ot.initialNavigation||void 0===ot.initialNavigation)&&Hn.initialNavigation(),Et.setUpPreloading(),qt.init(),Hn.resetRootComponentType(Xn.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())}ngOnDestroy(){this.destroyed=!0}}return Ye.\u0275fac=function(Ce){return new(Ce||Ye)(u.LFG(u.zs3))},Ye.\u0275prov=u.Yz7({token:Ye,factory:Ye.\u0275fac}),Ye})();function ic(Ye){return Ye.appInitializer.bind(Ye)}function df(Ye){return Ye.bootstrapListener.bind(Ye)}const al=new u.OlP("Router Initializer")},43155:(v,T)=>{"use strict";T.N=void 0;var r=/^([^\w]*)(javascript|data|vbscript)/im,u=/&#(\w+)(^\w|;)?/g,p=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,d=/^([^:]+):/gm,e=[".","/"];T.N=function(A){var N=function(A){return A.replace(u,function(N,L){return String.fromCharCode(L)})}(A||"").replace(p,"").trim();if(!N)return"about:blank";if(function(A){return e.indexOf(A[0])>-1}(N))return N;var L=N.match(d);return L&&r.test(L[0])?"about:blank":N}},19723:(v,T,i)=>{"use strict";i.d(T,{iM:()=>rp,qr:()=>Om,xc:()=>zg});var r=i(74788),u=i(12057),p=function(I,z){return(p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(B,be){B.__proto__=be}||function(B,be){for(var at in be)be.hasOwnProperty(at)&&(B[at]=be[at])})(I,z)};function d(I,z){function B(){this.constructor=I}p(I,z),I.prototype=null===z?Object.create(z):(B.prototype=z.prototype,new B)}var e=function(){return(e=Object.assign||function(z){for(var B,be=1,at=arguments.length;be0)&&!(at=be.next()).done;)$t.push(at.value)}catch(fr){jn={error:fr}}finally{try{at&&!at.done&&(B=be.return)&&B.call(be)}finally{if(jn)throw jn.error}}return $t}function y(){for(var I=[],z=0;z2&&Jt("box");var B=Gn(z);return new Ci(I,Jr(B),B.name,!0,B.equals)},shallowBox:function(I,z){return arguments.length>2&&Jt("shallowBox"),gr.box(I,{name:z,deep:!1})},array:function(I,z){arguments.length>2&&Jt("array");var B=Gn(z);return new Bo(I,Jr(B),B.name)},shallowArray:function(I,z){return arguments.length>2&&Jt("shallowArray"),gr.array(I,{name:z,deep:!1})},map:function(I,z){arguments.length>2&&Jt("map");var B=Gn(z);return new El(I,Jr(B),B.name)},shallowMap:function(I,z){return arguments.length>2&&Jt("shallowMap"),gr.map(I,{name:z,deep:!1})},set:function(I,z){arguments.length>2&&Jt("set");var B=Gn(z);return new Ae(I,Jr(B),B.name)},object:function(I,z,B){"string"==typeof arguments[1]&&Jt("object");var be=Gn(B);return bc({},I,z,be)},shallowObject:function(I,z){return"string"==typeof arguments[1]&&Jt("shallowObject"),gr.object(I,{},{name:z,deep:!1})},ref:br,shallow:wi,deep:_i,struct:Dr},gr=function(I,z,B){if("string"==typeof arguments[1])return _i.apply(null,arguments);if(xe(I))return I;var be=he(I)?gr.object(I,z,B):Array.isArray(I)?gr.array(I,z):He(I)?gr.map(I,z):Vt(I)?gr.set(I,z):I;if(be!==I)return be;K(!1)};function Jt(I){K("Expected one or two arguments to observable."+I+". Did you accidentally try to use observable."+I+" as decorator?")}Object.keys(yn).forEach(function(I){return gr[I]=yn[I]});var Vn=Yr(!1,function(I,z,B,be,at){!function(I,z,B){var be=ut(I);B.name=be.name+"."+z,B.context=I,be.values[z]=new tr(B),Object.defineProperty(I,z,function(I){return zr[I]||(zr[I]={configurable:on.computedConfigurable,enumerable:!1,get:function(){return ai(this).read(this,I)},set:function(z){ai(this).write(this,I,z)}})}(z))}(I,z,e({get:B.get,set:B.set},at[0]||{}))}),mr=Vn({equals:Kr.structural}),Dn=function(z,B,be){if("string"==typeof B||null!==z&&"object"==typeof z&&1===arguments.length)return Vn.apply(null,arguments);var at="object"==typeof B?B:{};return at.get=z,at.set="function"==typeof B?B:at.set,at.name=at.name||z.name||"",new tr(at)};Dn.struct=mr;var Pr=(()=>{return(I=Pr||(Pr={}))[I.NOT_TRACKING=-1]="NOT_TRACKING",I[I.UP_TO_DATE=0]="UP_TO_DATE",I[I.POSSIBLY_STALE=1]="POSSIBLY_STALE",I[I.STALE=2]="STALE",Pr;var I})(),Yt=(()=>{return(I=Yt||(Yt={}))[I.NONE=0]="NONE",I[I.LOG=1]="LOG",I[I.BREAK=2]="BREAK",Yt;var I})(),_n=function(z){this.cause=z};function Ge(I){return I instanceof _n}function kr(I){switch(I.dependenciesState){case Pr.UP_TO_DATE:return!1;case Pr.NOT_TRACKING:case Pr.STALE:return!0;case Pr.POSSIBLY_STALE:for(var z=lo(),B=I.observing,be=B.length,at=0;at0;on.computationDepth>0&&z&&K(!1),!on.allowStateChanges&&(z||"strict"===on.enforceActions)&&K(!1)}function Wr(I,z,B){var be=Co(!0);os(I),I.newObserving=new Array(I.observing.length+100),I.unboundDepsCount=0,I.runId=++on.runId;var $t,at=on.trackingDerivation;if(on.trackingDerivation=I,!0===on.disableErrorBoundaries)$t=z.call(B);else try{$t=z.call(B)}catch(jn){$t=new _n(jn)}return on.trackingDerivation=at,function(I){for(var z=I.observing,B=I.observing=I.newObserving,be=Pr.UP_TO_DATE,at=0,$t=I.unboundDepsCount,jn=0;jn<$t;jn++)0===(fr=B[jn]).diffValue&&(fr.diffValue=1,at!==jn&&(B[at]=fr),at++),fr.dependenciesState>be&&(be=fr.dependenciesState);for(B.length=at,I.newObserving=null,$t=z.length;$t--;)0===(fr=z[$t]).diffValue&&ls(fr,I),fr.diffValue=0;for(;at--;){var fr;1===(fr=B[at]).diffValue&&(fr.diffValue=0,Zs(fr,I))}be!==Pr.UP_TO_DATE&&(I.dependenciesState=be,I.onBecomeStale())}(I),Gi(be),$t}function ar(I){var z=I.observing;I.observing=[];for(var B=z.length;B--;)ls(z[B],I);I.dependenciesState=Pr.NOT_TRACKING}function Wi(I){var z=lo(),B=I();return vo(z),B}function lo(){var I=on.trackingDerivation;return on.trackingDerivation=null,I}function vo(I){on.trackingDerivation=I}function Co(I){var z=on.allowStateReads;return on.allowStateReads=I,z}function Gi(I){on.allowStateReads=I}function os(I){if(I.dependenciesState!==Pr.UP_TO_DATE){I.dependenciesState=Pr.UP_TO_DATE;for(var z=I.observing,B=z.length;B--;)z[B].lowestObserverState=Pr.UP_TO_DATE}}var jo=0,To=1;function Mi(I,z){var B=function(){return li(I,z,this,arguments)};return B.isMobxAction=!0,B}function li(I,z,B,be){var at=function(I,z,B){var be=Ws()&&!!I,at=0;if(be){at=Date.now();var $t=B&&B.length||0,jn=new Array($t);if($t>0)for(var fr=0;fr<$t;fr++)jn[fr]=B[fr];bo({type:"action",name:I,object:z,arguments:jn})}var ui=lo();ta();var Ms={prevDerivation:ui,prevAllowStateChanges:er(!0),prevAllowStateReads:Co(!0),notifySpy:be,startTime:at,actionId:To++,parentActionId:jo};return jo=Ms.actionId,Ms}(I,B,be);try{return z.apply(B,be)}catch($t){throw at.error=$t,$t}finally{!function(I){jo!==I.actionId&&K("invalid action stack. did you forget to finish an action?"),jo=I.parentActionId,void 0!==I.error&&(on.suppressReactionErrors=!0),ri(I.prevAllowStateChanges),Gi(I.prevAllowStateReads),Is(),vo(I.prevDerivation),I.notifySpy&&ps({time:Date.now()-I.startTime}),on.suppressReactionErrors=!1}(at)}}function er(I){var z=on.allowStateChanges;return on.allowStateChanges=I,z}function ri(I){on.allowStateChanges=I}var Ci=function(I){function z(B,be,at,$t,jn){void 0===at&&(at="ObservableValue@"+J()),void 0===$t&&($t=!0),void 0===jn&&(jn=Kr.default);var fr=I.call(this,at)||this;return fr.enhancer=be,fr.name=at,fr.equals=jn,fr.hasUnreportedChange=!1,fr.value=be(B,void 0,at),$t&&Ws()&&Po({type:"create",name:fr.name,newValue:""+fr.value}),fr}return d(z,I),z.prototype.dehanceValue=function(B){return void 0!==this.dehancer?this.dehancer(B):B},z.prototype.set=function(B){var be=this.value;if((B=this.prepareNewValue(B))!==on.UNCHANGED){var at=Ws();at&&bo({type:"update",name:this.name,newValue:B,oldValue:be}),this.setNewValue(B),at&&ps()}},z.prototype.prepareNewValue=function(B){if(An(this),Li(this)){var be=Aa(this,{object:this,type:"update",newValue:B});if(!be)return on.UNCHANGED;B=be.newValue}return B=this.enhancer(B,this.value,this.name),this.equals(this.value,B)?on.UNCHANGED:B},z.prototype.setNewValue=function(B){var be=this.value;this.value=B,this.reportChanged(),Ss(this)&&yl(this,{type:"update",object:this,newValue:B,oldValue:be})},z.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},z.prototype.intercept=function(B){return sa(this,B)},z.prototype.observe=function(B,be){return be&&B({object:this,type:"update",newValue:this.value,oldValue:void 0}),$u(this,B)},z.prototype.toJSON=function(){return this.get()},z.prototype.toString=function(){return this.name+"["+this.value+"]"},z.prototype.valueOf=function(){return It(this.get())},z}(xt);Ci.prototype[tn()]=Ci.prototype.valueOf,Be("ObservableValue",Ci);var tr=function(){function I(z){this.dependenciesState=Pr.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=Pr.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+J(),this.value=new _n(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=Yt.NONE,this.derivation=z.get,this.name=z.name||"ComputedValue@"+J(),z.set&&(this.setter=Mi(this.name+"-setter",z.set)),this.equals=z.equals||(z.compareStructural||z.struct?Kr.structural:Kr.default),this.scope=z.context,this.requiresReaction=!!z.requiresReaction,this.keepAlive=!!z.keepAlive}return I.prototype.onBecomeStale=function(){!function(I){if(I.lowestObserverState===Pr.UP_TO_DATE){I.lowestObserverState=Pr.POSSIBLY_STALE;for(var z=I.observers,B=z.length;B--;){var be=z[B];be.dependenciesState===Pr.UP_TO_DATE&&(be.dependenciesState=Pr.POSSIBLY_STALE,be.isTracing!==Yt.NONE&&$s(be,I),be.onBecomeStale())}}}(this)},I.prototype.onBecomeUnobserved=function(){},I.prototype.onBecomeObserved=function(){},I.prototype.get=function(){this.isComputing&&K("Cycle detected in computation "+this.name+": "+this.derivation),0!==on.inBatch||0!==this.observers.length||this.keepAlive?(us(this),kr(this)&&this.trackAndCompute()&&function(I){if(I.lowestObserverState!==Pr.STALE){I.lowestObserverState=Pr.STALE;for(var z=I.observers,B=z.length;B--;){var be=z[B];be.dependenciesState===Pr.POSSIBLY_STALE?be.dependenciesState=Pr.STALE:be.dependenciesState===Pr.UP_TO_DATE&&(I.lowestObserverState=Pr.UP_TO_DATE)}}}(this)):kr(this)&&(this.warnAboutUntrackedRead(),ta(),this.value=this.computeValue(!1),Is());var z=this.value;if(Ge(z))throw z.cause;return z},I.prototype.peek=function(){var z=this.computeValue(!1);if(Ge(z))throw z.cause;return z},I.prototype.set=function(z){if(this.setter){ee(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,z)}finally{this.isRunningSetter=!1}}else ee(!1,!1)},I.prototype.trackAndCompute=function(){Ws()&&Po({object:this.scope,type:"compute",name:this.name});var z=this.value,B=this.dependenciesState===Pr.NOT_TRACKING,be=this.computeValue(!0),at=B||Ge(z)||Ge(be)||!this.equals(z,be);return at&&(this.value=be),at},I.prototype.computeValue=function(z){var B;if(this.isComputing=!0,on.computationDepth++,z)B=Wr(this,this.derivation,this.scope);else if(!0===on.disableErrorBoundaries)B=this.derivation.call(this.scope);else try{B=this.derivation.call(this.scope)}catch(be){B=new _n(be)}return on.computationDepth--,this.isComputing=!1,B},I.prototype.suspend=function(){this.keepAlive||(ar(this),this.value=void 0)},I.prototype.observe=function(z,B){var be=this,at=!0,$t=void 0;return ti(function(){var jn=be.get();if(!at||B){var fr=lo();z({type:"update",object:be,newValue:jn,oldValue:$t}),vo(fr)}at=!1,$t=jn})},I.prototype.warnAboutUntrackedRead=function(){},I.prototype.toJSON=function(){return this.get()},I.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},I.prototype.valueOf=function(){return It(this.get())},I}();tr.prototype[tn()]=tr.prototype.valueOf;var I,Ar=Be("ComputedValue",tr),_t=function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1},mt=!0,on=((I=Z()).__mobxInstanceCount>0&&!I.__mobxGlobals&&(mt=!1),I.__mobxGlobals&&I.__mobxGlobals.version!==(new _t).version&&(mt=!1),mt?I.__mobxGlobals?(I.__mobxInstanceCount+=1,I.__mobxGlobals.UNCHANGED||(I.__mobxGlobals.UNCHANGED={}),I.__mobxGlobals):(I.__mobxInstanceCount=1,I.__mobxGlobals=new _t):(setTimeout(function(){K("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")},1),new _t));function Zs(I,z){var B=I.observers.length;B&&(I.observersIndexes[z.__mapid]=B),I.observers[B]=z,I.lowestObserverState>z.dependenciesState&&(I.lowestObserverState=z.dependenciesState)}function ls(I,z){if(1===I.observers.length)I.observers.length=0,La(I);else{var B=I.observers,be=I.observersIndexes,at=B.pop();if(at!==z){var $t=be[z.__mapid]||0;$t?be[at.__mapid]=$t:delete be[at.__mapid],B[$t]=at}delete be[z.__mapid]}}function La(I){!1===I.isPendingUnobservation&&(I.isPendingUnobservation=!0,on.pendingUnobservations.push(I))}function ta(){on.inBatch++}function Is(){if(0==--on.inBatch){fs();for(var I=on.pendingUnobservations,z=0;z0&&La(I),!1)}function $s(I,z){if(console.log("[mobx.trace] '"+I.name+"' is invalidated due to a change in: '"+z.name+"'"),I.isTracing===Yt.BREAK){var B=[];da(function(I,z){return qc(hr(I,void 0))}(I),B,1),new Function("debugger;\n/*\nTracing '"+I.name+"'\n\nYou are entering this break point because derivation '"+I.name+"' is being traced and '"+z.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(I instanceof tr?I.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+B.join("\n")+"\n*/\n ")()}}function da(I,z,B){z.length>=1e3?z.push("(and many more)"):(z.push(""+new Array(B).join("\t")+I.name),I.dependencies&&I.dependencies.forEach(function(be){return da(be,z,B+1)}))}var Il=function(){function I(z,B,be,at){void 0===z&&(z="Reaction@"+J()),void 0===at&&(at=!1),this.name=z,this.onInvalidate=B,this.errorHandler=be,this.requiresObservable=at,this.observing=[],this.newObserving=[],this.dependenciesState=Pr.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+J(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=Yt.NONE}return I.prototype.onBecomeStale=function(){this.schedule()},I.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,on.pendingReactions.push(this),fs())},I.prototype.isScheduled=function(){return this._isScheduled},I.prototype.runReaction=function(){if(!this.isDisposed){if(ta(),this._isScheduled=!1,kr(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending&&Ws()&&Po({name:this.name,type:"scheduled-reaction"})}catch(z){this.reportExceptionInDerivation(z)}}Is()}},I.prototype.track=function(z){ta();var be,B=Ws();B&&(be=Date.now(),bo({name:this.name,type:"reaction"})),this._isRunning=!0;var at=Wr(this,z,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&ar(this),Ge(at)&&this.reportExceptionInDerivation(at.cause),B&&ps({time:Date.now()-be}),Is()},I.prototype.reportExceptionInDerivation=function(z){var B=this;if(this.errorHandler)this.errorHandler(z,this);else{if(on.disableErrorBoundaries)throw z;var be="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";on.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(be,z),Ws()&&Po({type:"error",name:this.name,message:be,error:""+z}),on.globalReactionErrorHandlers.forEach(function(at){return at(z,B)})}},I.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(ta(),ar(this),Is()))},I.prototype.getDisposer=function(){var z=this.dispose.bind(this);return z.$mobx=this,z},I.prototype.toString=function(){return"Reaction["+this.name+"]"},I.prototype.trace=function(z){void 0===z&&(z=!1),function(){for(var I=[],z=0;z0||on.isRunningReactions||function(I){I()}(Ca)}function Ca(){on.isRunningReactions=!0;for(var I=on.pendingReactions,z=0;I.length>0;){100==++z&&(console.error("Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: "+I[0]),I.splice(0));for(var B=I.splice(0),be=0,at=B.length;be",z):2===arguments.length&&"function"==typeof B?Mi(z,B):1===arguments.length&&"string"==typeof z?to(z):!0!==at?to(B).apply(null,arguments):void(z[B]=Mi(z.name||B,be.value))};function an(I,z,B){ce(I,z,Mi(z,B.bind(I)))}function ti(I,z){void 0===z&&(z=N);var at,B=z&&z.name||I.name||"Autorun@"+J();if(z.scheduler||z.delay){var $t=xi(z),jn=!1;at=new Il(B,function(){jn||(jn=!0,$t(function(){jn=!1,at.isDisposed||at.track(fr)}))},z.onError,z.requiresObservable)}else at=new Il(B,function(){this.track(fr)},z.onError,z.requiresObservable);function fr(){I(at)}return at.schedule(),at.getDisposer()}ne.bound=function(I,z,B,be){return!0===be?(an(I,z,B.value),null):B?{configurable:!0,enumerable:!1,get:function(){return an(this,z,B.value||B.initializer.call(this)),this[z]},set:$r}:{enumerable:!1,configurable:!0,set:function(at){an(this,z,at)},get:function(){}}};var pi=function(I){return I()};function xi(I){return I.scheduler?I.scheduler:I.delay?function(z){return setTimeout(z,I.delay)}:pi}function ts(I,z,B){void 0===B&&(B=N),"boolean"==typeof B&&(B={fireImmediately:B});var Ro,be=B.name||"Reaction@"+J(),at=ne(be,B.onError?function(I,z){return function(){try{return z.apply(this,arguments)}catch(B){I.call(this,B)}}}(B.onError,z):z),$t=!B.scheduler&&!B.delay,jn=xi(B),fr=!0,ui=!1,Vo=B.compareStructural?Kr.structural:B.equals||Kr.default,Ms=new Il(be,function(){fr||$t?Dl():ui||(ui=!0,jn(Dl))},B.onError,B.requiresObservable);function Dl(){if(ui=!1,!Ms.isDisposed){var ql=!1;Ms.track(function(){var eu=I(Ms);ql=fr||!Vo(Ro,eu),Ro=eu}),fr&&B.fireImmediately&&at(Ro,Ms),!fr&&!0===ql&&at(Ro,Ms),fr&&(fr=!1)}}return Ms.schedule(),Ms.getDisposer()}function Eo(I,z,B){return ba("onBecomeUnobserved",I,z,B)}function ba(I,z,B,be){var at="function"==typeof be?hr(z,B):hr(z),$t="function"==typeof be?be:B,jn=at[I];return"function"!=typeof jn?K(!1):(at[I]=function(){jn.call(this),$t.call(this)},function(){at[I]=jn})}function bc(I,z,B,be){var $t=(be=Gn(be)).defaultDecorator||(!1===be.deep?br:_i);Br(I),ut(I,be.name,$t.enhancer),ta();try{for(var at in z){var jn=Object.getOwnPropertyDescriptor(z,at),ui=(B&&at in B?B[at]:jn.get?Vn:$t)(I,at,jn,!0);ui&&Object.defineProperty(I,at,ui)}}finally{Is()}return I}function qc(I){var z={name:I.name};return I.observing&&I.observing.length>0&&(z.dependencies=function(I){var z=[];return I.forEach(function(B){-1===z.indexOf(B)&&z.push(B)}),z}(I.observing).map(qc)),z}function Me(I,z){if(null==I)return!1;if(void 0!==z){if(Cr(I)){var B=I.$mobx;return B.values&&!!B.values[z]}return!1}return Cr(I)||!!I.$mobx||Xt(I)||Ra(I)||Ar(I)}function xe(I){return 1!==arguments.length&&K(!1),Me(I)}function Fc(I){switch(I.length){case 0:return on.trackingDerivation;case 1:return hr(I[0]);case 2:return hr(I[0],I[1])}}function Cu(I,z){void 0===z&&(z=void 0),ta();try{return I.apply(z)}finally{Is()}}function Li(I){return void 0!==I.interceptors&&I.interceptors.length>0}function sa(I,z){var B=I.interceptors||(I.interceptors=[]);return B.push(z),H(function(){var be=B.indexOf(z);-1!==be&&B.splice(be,1)})}function Aa(I,z){var B=lo();try{var be=I.interceptors;if(be)for(var at=0,$t=be.length;at<$t&&(ee(!(z=be[at](z))||z.type,"Intercept handlers should return nothing or a change object"),z);at++);return z}finally{vo(B)}}function Ss(I){return void 0!==I.changeListeners&&I.changeListeners.length>0}function $u(I,z){var B=I.changeListeners||(I.changeListeners=[]);return B.push(z),H(function(){var be=B.indexOf(z);-1!==be&&B.splice(be,1)})}function yl(I,z){var B=lo(),be=I.changeListeners;if(be){for(var at=0,$t=(be=be.slice()).length;at<$t;at++)be[at](z);vo(B)}}var yu=function(){var I=!1,z={};return Object.defineProperty(z,"0",{set:function(){I=!0}}),Object.create(z)[0]=1,!1===I}(),lu=0,js=function(){};(function(I,z){void 0!==Object.setPrototypeOf?Object.setPrototypeOf(I.prototype,z):void 0!==I.prototype.__proto__?I.prototype.__proto__=z:I.prototype=z})(js,Array.prototype),Object.isFrozen(Array)&&["constructor","push","shift","concat","pop","unshift","replace","find","findIndex","splice","reverse","sort"].forEach(function(I){Object.defineProperty(js.prototype,I,{configurable:!0,writable:!0,value:Array.prototype[I]})});var Uu=function(){function I(z,B,be,at){this.array=be,this.owned=at,this.values=[],this.lastKnownLength=0,this.atom=new xt(z||"ObservableArray@"+J()),this.enhancer=function($t,jn){return B($t,jn,z+"[..]")}}return I.prototype.dehanceValue=function(z){return void 0!==this.dehancer?this.dehancer(z):z},I.prototype.dehanceValues=function(z){return void 0!==this.dehancer&&z.length>0?z.map(this.dehancer):z},I.prototype.intercept=function(z){return sa(this,z)},I.prototype.observe=function(z,B){return void 0===B&&(B=!1),B&&z({object:this.array,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),$u(this,z)},I.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},I.prototype.setArrayLength=function(z){if("number"!=typeof z||z<0)throw new Error("[mobx.array] Out of range: "+z);var B=this.values.length;if(z!==B)if(z>B){for(var be=new Array(z-B),at=0;at0&&z+B+1>lu&&pu(z+B+1)},I.prototype.spliceWithArray=function(z,B,be){var at=this;An(this.atom);var $t=this.values.length;if(void 0===z?z=0:z>$t?z=$t:z<0&&(z=Math.max(0,$t+z)),B=1===arguments.length?$t-z:null==B?0:Math.max(0,Math.min(B,$t-z)),void 0===be&&(be=A),Li(this)){var jn=Aa(this,{object:this.array,type:"splice",index:z,removedCount:B,added:be});if(!jn)return A;B=jn.removedCount,be=jn.added}var fr=(be=0===be.length?be:be.map(function(Ro){return at.enhancer(Ro,void 0)})).length-B;this.updateArrayLength($t,fr);var ui=this.spliceItemsIntoValues(z,B,be);return(0!==B||0!==be.length)&&this.notifyArraySplice(z,be,ui),this.dehanceValues(ui)},I.prototype.spliceItemsIntoValues=function(z,B,be){var at;if(be.length<1e4)return(at=this.values).splice.apply(at,y([z,B],be));var $t=this.values.slice(z,z+B);return this.values=this.values.slice(0,z).concat(be,this.values.slice(z+B)),$t},I.prototype.notifyArrayChildUpdate=function(z,B,be){var at=!this.owned&&Ws(),$t=Ss(this),jn=$t||at?{object:this.array,type:"update",index:z,newValue:B,oldValue:be}:null;at&&bo(e({},jn,{name:this.atom.name})),this.atom.reportChanged(),$t&&yl(this,jn),at&&ps()},I.prototype.notifyArraySplice=function(z,B,be){var at=!this.owned&&Ws(),$t=Ss(this),jn=$t||at?{object:this.array,type:"splice",index:z,removed:be,added:B,removedCount:be.length,addedCount:B.length}:null;at&&bo(e({},jn,{name:this.atom.name})),this.atom.reportChanged(),$t&&yl(this,jn),at&&ps()},I}(),Bo=function(I){function z(B,be,at,$t){void 0===at&&(at="ObservableArray@"+J()),void 0===$t&&($t=!1);var jn=I.call(this)||this,fr=new Uu(at,be,jn,$t);if(lt(jn,"$mobx",fr),B&&B.length){var ui=er(!0);jn.spliceWithArray(0,0,B),ri(ui)}return yu&&Object.defineProperty(fr.array,"0",uu),jn}return d(z,I),z.prototype.intercept=function(B){return this.$mobx.intercept(B)},z.prototype.observe=function(B,be){return void 0===be&&(be=!1),this.$mobx.observe(B,be)},z.prototype.clear=function(){return this.splice(0)},z.prototype.concat=function(){for(var B=[],be=0;be-1&&(this.splice(be,1),!0)},z.prototype.move=function(B,be){function at(fr){if(fr<0)throw new Error("[mobx.array] Index out of bounds: "+fr+" is negative");var ui=this.$mobx.values.length;if(fr>=ui)throw new Error("[mobx.array] Index out of bounds: "+fr+" is not smaller than "+ui)}if(at.call(this,B),at.call(this,be),B!==be){var jn,$t=this.$mobx.values;jn=B0){if(++z>=800)return arguments[0]}else z=0;return I.apply(void 0,arguments)}}(ss.Z?function(I,z){return(0,ss.Z)(I,"toString",{configurable:!0,enumerable:!1,value:zd(z),writable:!0})}:Js),ot=function(I,z){return Ie(Nl(I,z,Js),I+"")};var Et=i(7475),qt=i(2951),Hn=i(66224);const Ei=function(I,z,B){(void 0!==B&&!(0,Hn.Z)(I[z],B)||void 0===B&&!(z in I))&&(0,qt.Z)(I,z,B)},Oa=function(z,B,be){for(var at=-1,$t=Object(z),jn=be(z),fr=jn.length;fr--;){var ui=jn[++at];if(!1===B($t[ui],ui,$t))break}return z};var Hs=i(27672),fc=i(1044),ga=i(36889),Ol=i(22595),ll=i(2172),Za=i(34654),ja=i(18402),ul=i(6539);var Qd=i(12434),Sc=i(58209),Wu=i(4214),Cc=i(46382),Xd=i(11595),Sl=Function.prototype.toString,wl=Object.prototype.hasOwnProperty,kl=Sl.call(Object);const Ja=function(I){if(!(0,ul.Z)(I)||"[object Object]"!=(0,Cc.Z)(I))return!1;var z=(0,Xd.Z)(I);if(null===z)return!0;var B=wl.call(z,"constructor")&&z.constructor;return"function"==typeof B&&B instanceof B&&Sl.call(B)==kl};var Qu=i(99436);const Oc=function(I,z){if(("constructor"!==z||"function"!=typeof I[z])&&"__proto__"!=z)return I[z]};var Au=i(57640),Iu=i(76212);const vd=function(I,z,B,be,at,$t,jn){var fr=Oc(I,B),ui=Oc(z,B),Ro=jn.get(ui);if(Ro)Ei(I,B,Ro);else{var Vo=$t?$t(fr,ui,B+"",I,z,jn):void 0,Ms=void 0===Vo;if(Ms){var Dl=(0,Za.Z)(ui),ql=!Dl&&(0,Qd.Z)(ui),eu=!Dl&&!ql&&(0,Qu.Z)(ui);Vo=ui,Dl||ql||eu?(0,Za.Z)(fr)?Vo=fr:function(I){return(0,ul.Z)(I)&&(0,ja.Z)(I)}(fr)?Vo=(0,ga.Z)(fr):ql?(Ms=!1,Vo=(0,Hs.Z)(ui,!0)):eu?(Ms=!1,Vo=(0,fc.Z)(ui,!0)):Vo=[]:Ja(ui)||(0,ll.Z)(ui)?(Vo=fr,(0,ll.Z)(fr)?Vo=function(I){return(0,Au.Z)(I,(0,Iu.Z)(I))}(fr):(!(0,Wu.Z)(fr)||(0,Sc.Z)(fr))&&(Vo=(0,Ol.Z)(ui))):Ms=!1}Ms&&(jn.set(ui,Vo),at(Vo,ui,be,$t,jn),jn.delete(ui)),Ei(I,B,Vo)}},Gc=function wc(I,z,B,be,at){I!==z&&Oa(z,function($t,jn){if(at||(at=new Et.Z),(0,Wu.Z)($t))vd(I,z,jn,B,wc,be,at);else{var fr=be?be(Oc(I,jn),$t,jn+"",I,z,at):void 0;void 0===fr&&(fr=$t),Ei(I,jn,fr)}},Iu.Z)},xc=function pf(I,z,B,be,at,$t){return(0,Wu.Z)(I)&&(0,Wu.Z)(z)&&($t.set(z,I),Gc(I,z,void 0,pf,$t),$t.delete(z)),I};var hf=i(28078);const hu=function(I,z,B){if(!(0,Wu.Z)(B))return!1;var be=typeof z;return!!("number"==be?(0,ja.Z)(B)&&(0,hf.Z)(z,B.length):"string"==be&&z in B)&&(0,Hn.Z)(B[z],I)},_f=function(I){return ot(function(z,B){var be=-1,at=B.length,$t=at>1?B[at-1]:void 0,jn=at>2?B[2]:void 0;for($t=I.length>3&&"function"==typeof $t?(at--,$t):void 0,jn&&hu(B[0],B[1],jn)&&($t=at<3?void 0:$t,at=1),z=Object(z);++beat?0:at+z),(B=B>at?at:B)<0&&(B+=at),at=z>B?0:B-z>>>0,z>>>=0;for(var $t=Array(at);++be0&&B(fr)?z>1?Pa(fr,z-1,B,be,at):(0,Xs.Z)(at,fr):be||(at[at.length]=fr)}return at},wa=function(I){return null!=I&&I.length?il(I,1):[]},gu=function(I){return Ie(Nl(I,void 0,wa),I+"")};var Nc=i(23359);const ve=gu(function(I,z){var B={};if(null==I)return B;var be=!1;z=Mc(z,function($t){return $t=R($t,I),be||(be=$t.length>1),$t}),(0,Au.Z)(I,(0,Nc.Z)(I),B),be&&(B=(0,gt.Z)(B,7,Gs));for(var at=z.length;at--;)Zo(B,z[at]);return B}),bi=function(I,z){for(var B=-1,be=null==I?0:I.length;++Bfr))return!1;var Ro=$t.get(I),Vo=$t.get(z);if(Ro&&Vo)return Ro==z&&Vo==I;var Ms=-1,Dl=!0,ql=2&B?new qf:void 0;for($t.set(I,z),$t.set(z,I);++Ms-1?at[$t?z[jn]:jn]:void 0},Rf=function(I){return"string"==typeof I||!(0,Za.Z)(I)&&(0,ul.Z)(I)&&"[object String]"==(0,Cc.Z)(I)};var ph=i(40309);const Bh=function(){return ph.Z.Date.now()};var ym=Math.max,bm=Math.min;const gg=function(I,z,B){var be=!0,at=!0;if("function"!=typeof I)throw new TypeError("Expected a function");return(0,Wu.Z)(B)&&(be="leading"in B?!!B.leading:be,at="trailing"in B?!!B.trailing:at),function(I,z,B){var be,at,$t,jn,fr,ui,Ro=0,Vo=!1,Ms=!1,Dl=!0;if("function"!=typeof I)throw new TypeError("Expected a function");function ql(Qc){var wp=be,ju=at;return be=at=void 0,Ro=Qc,jn=I.apply(ju,wp)}function eu(Qc){return Ro=Qc,fr=setTimeout(Cd,z),Vo?ql(Qc):jn}function Zd(Qc){var wp=Qc-ui;return void 0===ui||wp>=z||wp<0||Ms&&Qc-Ro>=$t}function Cd(){var Qc=Bh();if(Zd(Qc))return Op(Qc);fr=setTimeout(Cd,function(Qc){var Ic=z-(Qc-ui);return Ms?bm(Ic,$t-(Qc-Ro)):Ic}(Qc))}function Op(Qc){return fr=void 0,Dl&&be?ql(Qc):(be=at=void 0,jn)}function tf(){var Qc=Bh(),wp=Zd(Qc);if(be=arguments,at=this,ui=Qc,wp){if(void 0===fr)return eu(ui);if(Ms)return clearTimeout(fr),fr=setTimeout(Cd,z),ql(ui)}return void 0===fr&&(fr=setTimeout(Cd,z)),jn}return z=bp(z)||0,(0,Wu.Z)(B)&&(Vo=!!B.leading,$t=(Ms="maxWait"in B)?ym(bp(B.maxWait)||0,z):$t,Dl="trailing"in B?!!B.trailing:Dl),tf.cancel=function(){void 0!==fr&&clearTimeout(fr),Ro=0,be=ui=at=fr=void 0},tf.flush=function(){return void 0===fr?jn:Op(Bh())},tf}(I,z,{leading:be,maxWait:z,trailing:at})},mg=function(I){return I!=I},Em=function(I){return null==I?[]:function(I,z){return Mc(z,function(B){return I[B]})}(I,(0,ma.Z)(I))};var Yd=Math.max;const Yg=function(I,z,B,be){I=(0,ja.Z)(I)?I:Em(I),B=B&&!be?od(B):0;var at=I.length;return B<0&&(B=Yd(at+B,0)),Rf(I)?B<=at&&I.indexOf(z,B)>-1:!!at&&function(I,z,B){return z==z?function(I,z,B){for(var be=B-1,at=I.length;++be-1};var Sp=i(15427);const Jc=function(I,z,B,be){if(!(0,Wu.Z)(I))return I;for(var at=-1,$t=(z=R(z,I)).length,jn=$t-1,fr=I;null!=fr&&++at<$t;){var ui=de(z[at]),Ro=B;if("__proto__"===ui||"constructor"===ui||"prototype"===ui)return I;if(at!=jn){var Vo=fr[ui];void 0===(Ro=be?be(Vo,ui,fr):void 0)&&(Ro=(0,Wu.Z)(Vo)?Vo:(0,hf.Z)(z[at+1])?[]:{})}(0,Sp.Z)(fr,ui,Ro),fr=fr[ui]}return I},bg=function(I,z){return function(I,z,B){for(var be=-1,at=z.length,$t={};++be{class I{constructor(B,be){this.templateRef=B,this.viewContainer=be,this.templateBindings={}}ngOnInit(){this.view=this.viewContainer.createEmbeddedView(this.templateRef),this.dispose&&this.dispose(),this.shouldDetach()&&this.view.detach(),this.autoDetect(this.view)}shouldDetach(){return this.treeMobxAutorun&&this.treeMobxAutorun.detach}autoDetect(B){this.dispose=ti(()=>B.detectChanges())}ngOnDestroy(){this.dispose&&this.dispose()}}return I.\u0275fac=function(B){return new(B||I)(r.Y36(r.Rgc),r.Y36(r.s_b))},I.\u0275dir=r.lG2({type:I,selectors:[["","treeMobxAutorun",""]],inputs:{treeMobxAutorun:"treeMobxAutorun"}}),I})();const rp={TOGGLE_ACTIVE:(I,z,B)=>z&&z.toggleActivated(),TOGGLE_ACTIVE_MULTI:(I,z,B)=>z&&z.toggleActivated(!0),TOGGLE_SELECTED:(I,z,B)=>z&&z.toggleSelected(),ACTIVATE:(I,z,B)=>z.setIsActive(!0),DEACTIVATE:(I,z,B)=>z.setIsActive(!1),SELECT:(I,z,B)=>z.setIsSelected(!0),DESELECT:(I,z,B)=>z.setIsSelected(!1),FOCUS:(I,z,B)=>z.focus(),TOGGLE_EXPANDED:(I,z,B)=>z.hasChildren&&z.toggleExpanded(),EXPAND:(I,z,B)=>z.expand(),COLLAPSE:(I,z,B)=>z.collapse(),DRILL_DOWN:(I,z,B)=>I.focusDrillDown(),DRILL_UP:(I,z,B)=>I.focusDrillUp(),NEXT_NODE:(I,z,B)=>I.focusNextNode(),PREVIOUS_NODE:(I,z,B)=>I.focusPreviousNode(),MOVE_NODE:(I,z,B,{from:be,to:at})=>{B.ctrlKey?I.copyNode(be,at):I.moveNode(be,at)}},sv={mouse:{click:rp.TOGGLE_ACTIVE,dblClick:null,contextMenu:null,expanderClick:rp.TOGGLE_EXPANDED,checkboxClick:rp.TOGGLE_SELECTED,drop:rp.MOVE_NODE},keys:{39:rp.DRILL_DOWN,37:rp.DRILL_UP,40:rp.NEXT_NODE,38:rp.PREVIOUS_NODE,32:rp.TOGGLE_ACTIVE,13:rp.TOGGLE_ACTIVE}};class Mm{constructor(z={}){this.options=z,this.actionMapping=Ql({},this.options.actionMapping,sv),z.rtl&&(this.actionMapping.keys[39]=Xe(z,["actionMapping","keys",39])||rp.DRILL_UP,this.actionMapping.keys[37]=Xe(z,["actionMapping","keys",37])||rp.DRILL_DOWN)}get hasChildrenField(){return this.options.hasChildrenField||"hasChildren"}get childrenField(){return this.options.childrenField||"children"}get displayField(){return this.options.displayField||"name"}get idField(){return this.options.idField||"id"}get isExpandedField(){return this.options.isExpandedField||"isExpanded"}get getChildren(){return this.options.getChildren}get levelPadding(){return this.options.levelPadding||0}get useVirtualScroll(){return this.options.useVirtualScroll}get animateExpand(){return this.options.animateExpand}get animateSpeed(){return this.options.animateSpeed||1}get animateAcceleration(){return this.options.animateAcceleration||1.2}get scrollOnActivate(){return void 0===this.options.scrollOnActivate||this.options.scrollOnActivate}get rtl(){return!!this.options.rtl}get rootId(){return this.options.rootId}get useCheckbox(){return this.options.useCheckbox}get useTriState(){return void 0===this.options.useTriState||this.options.useTriState}get scrollContainer(){return this.options.scrollContainer}get allowDragoverStyling(){return void 0===this.options.allowDragoverStyling||this.options.allowDragoverStyling}getNodeClone(z){return this.options.getNodeClone?this.options.getNodeClone(z):ve(Object.assign({},z.data),["id"])}allowDrop(z,B,be){return this.options.allowDrop instanceof Function?this.options.allowDrop(z,B,be):void 0===this.options.allowDrop||this.options.allowDrop}allowDrag(z){return this.options.allowDrag instanceof Function?this.options.allowDrag(z):this.options.allowDrag}nodeClass(z){return this.options.nodeClass?this.options.nodeClass(z):""}nodeHeight(z){if(z.data.virtual)return 0;let B=this.options.nodeHeight||22;return"function"==typeof B&&(B=B(z)),B+(0===z.index?2:1)*this.dropSlotHeight}get dropSlotHeight(){return function(I){return"number"==typeof I||(0,ul.Z)(I)&&"[object Number]"==(0,Cc.Z)(I)}(this.options.dropSlotHeight)?this.options.dropSlotHeight:2}}const mc={toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",initialized:"initialized",updateData:"updateData",moveNode:"moveNode",copyNode:"copyNode",event:"event",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",stateChange:"stateChange"};var ef=function(I,z,B,be){var jn,at=arguments.length,$t=at<3?z:null===be?be=Object.getOwnPropertyDescriptor(z,B):be;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)$t=Reflect.decorate(I,z,B,be);else for(var fr=I.length-1;fr>=0;fr--)(jn=I[fr])&&($t=(at<3?jn($t):at>3?jn(z,B,$t):jn(z,B))||$t);return at>3&&$t&&Object.defineProperty(z,B,$t),$t},Fu=function(I,z){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(I,z)};let s1=(()=>{class I{constructor(B,be,at,$t){this.data=B,this.parent=be,this.treeModel=at,this.position=0,this.allowDrop=(jn,fr)=>this.options.allowDrop(jn,{parent:this,index:0},fr),this.allowDragoverStyling=()=>this.options.allowDragoverStyling,null==this.id&&(this.id=Math.floor(1e13*Math.random())),this.index=$t,this.getField("children")&&this._initChildren(),this.autoLoadChildren()}get isHidden(){return this.treeModel.isHidden(this)}get isExpanded(){return this.treeModel.isExpanded(this)}get isActive(){return this.treeModel.isActive(this)}get isFocused(){return this.treeModel.isNodeFocused(this)}get isSelected(){return this.isSelectable()?this.treeModel.isSelected(this):function(I,z,B){var be=(0,Za.Z)(I)?bi:Xu;return B&&hu(I,z,B)&&(z=void 0),be(I,rd(z))}(this.children,B=>B.isSelected)}get isAllSelected(){return this.isSelectable()?this.treeModel.isSelected(this):function(I,z,B){var be=(0,Za.Z)(I)?Zu:Yp;return B&&hu(I,z,B)&&(z=void 0),be(I,rd(z))}(this.children,B=>B.isAllSelected)}get isPartiallySelected(){return this.isSelected&&!this.isAllSelected}get level(){return this.parent?this.parent.level+1:0}get path(){return this.parent?[...this.parent.path,this.id]:[]}get elementRef(){throw"Element Ref is no longer supported since introducing virtual scroll\n\n You may use a template to obtain a reference to the element"}get originalNode(){return this._originalNode}get hasChildren(){return!!(this.getField("hasChildren")||this.children&&this.children.length>0)}get isCollapsed(){return!this.isExpanded}get isLeaf(){return!this.hasChildren}get isRoot(){return this.parent.data.virtual}get realParent(){return this.isRoot?null:this.parent}get options(){return this.treeModel.options}fireEvent(B){this.treeModel.fireEvent(B)}get displayField(){return this.getField("display")}get id(){return this.getField("id")}set id(B){this.setField("id",B)}getField(B){return this.data[this.options[`${B}Field`]]}setField(B,be){this.data[this.options[`${B}Field`]]=be}_findAdjacentSibling(B,be=!1){const at=this._getParentsChildren(be),$t=at.indexOf(this);return at.length>$t+B?at[$t+B]:null}findNextSibling(B=!1){return this._findAdjacentSibling(1,B)}findPreviousSibling(B=!1){return this._findAdjacentSibling(-1,B)}getVisibleChildren(){return this.visibleChildren}get visibleChildren(){return(this.children||[]).filter(B=>!B.isHidden)}getFirstChild(B=!1){return Z_((B?this.visibleChildren:this.children)||[])}getLastChild(B=!1){return nn((B?this.visibleChildren:this.children)||[])}findNextNode(B=!0,be=!1){return B&&this.isExpanded&&this.getFirstChild(be)||this.findNextSibling(be)||this.parent&&this.parent.findNextNode(!1,be)}findPreviousNode(B=!1){let be=this.findPreviousSibling(B);return be?be._getLastOpenDescendant(B):this.realParent}_getLastOpenDescendant(B=!1){const be=this.getLastChild(B);return this.isCollapsed||!be?this:be._getLastOpenDescendant(B)}_getParentsChildren(B=!1){return this.parent&&(B?this.parent.getVisibleChildren():this.parent.children)||[]}getIndexInParent(B=!1){return this._getParentsChildren(B).indexOf(this)}isDescendantOf(B){return this===B||this.parent&&this.parent.isDescendantOf(B)}getNodePadding(){return this.options.levelPadding*(this.level-1)+"px"}getClass(){return[this.options.nodeClass(this),`tree-node-level-${this.level}`].join(" ")}onDrop(B){this.mouseAction("drop",B.event,{from:B.element,to:{parent:this,index:0,dropOnNode:!0}})}allowDrag(){return this.options.allowDrag(this)}loadNodeChildren(){return this.options.getChildren?Promise.resolve(this.options.getChildren(this)).then(B=>{B&&(this.setField("children",B),this._initChildren(),this.options.useTriState&&this.treeModel.isSelected(this)&&this.setIsSelected(!0),this.children.forEach(be=>{be.getField("isExpanded")&&be.hasChildren&&be.expand()}))}).then(()=>{this.fireEvent({eventName:mc.loadNodeChildren,node:this})}):Promise.resolve()}expand(){return this.isExpanded||this.toggleExpanded(),this}collapse(){return this.isExpanded&&this.toggleExpanded(),this}doForAll(B){Promise.resolve(B(this)).then(()=>{this.children&&this.children.forEach(be=>be.doForAll(B))})}expandAll(){this.doForAll(B=>B.expand())}collapseAll(){this.doForAll(B=>B.collapse())}ensureVisible(){return this.realParent&&(this.realParent.expand(),this.realParent.ensureVisible()),this}toggleExpanded(){return this.setIsExpanded(!this.isExpanded),this}setIsExpanded(B){return this.hasChildren&&this.treeModel.setExpandedNode(this,B),this}autoLoadChildren(){this.handler=ts(()=>this.isExpanded,B=>{!this.children&&this.hasChildren&&B&&this.loadNodeChildren()},{fireImmediately:!0})}dispose(){this.children&&this.children.forEach(B=>B.dispose()),this.handler&&this.handler(),this.parent=null,this.children=null}setIsActive(B,be=!1){return this.treeModel.setActiveNode(this,B,be),B&&this.focus(this.options.scrollOnActivate),this}isSelectable(){return this.isLeaf||!this.children||!this.options.useTriState}setIsSelected(B){return this.isSelectable()?this.treeModel.setSelectedNode(this,B):this.visibleChildren.forEach(be=>be.setIsSelected(B)),this}toggleSelected(){return this.setIsSelected(!this.isSelected),this}toggleActivated(B=!1){return this.setIsActive(!this.isActive,B),this}setActiveAndVisible(B=!1){return this.setIsActive(!0,B).ensureVisible(),setTimeout(this.scrollIntoView.bind(this)),this}scrollIntoView(B=!1){this.treeModel.virtualScroll.scrollIntoView(this,B)}focus(B=!0){let be=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(this),B&&this.scrollIntoView(),be&&this.fireEvent({eventName:mc.blur,node:be}),this.fireEvent({eventName:mc.focus,node:this}),this}blur(){let B=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(null),B&&this.fireEvent({eventName:mc.blur,node:this}),this}setIsHidden(B){this.treeModel.setIsHidden(this,B)}hide(){this.setIsHidden(!0)}show(){this.setIsHidden(!1)}mouseAction(B,be,at=null){this.treeModel.setFocus(!0);const jn=this.options.actionMapping.mouse[B];jn&&jn(this.treeModel,this,be,at)}getSelfHeight(){return this.options.nodeHeight(this)}_initChildren(){this.children=this.getField("children").map((B,be)=>new I(B,this,this.treeModel,be))}}return ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"isHidden",null),ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"isExpanded",null),ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"isActive",null),ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"isFocused",null),ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"isSelected",null),ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"isAllSelected",null),ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"isPartiallySelected",null),ef([gr,Fu("design:type",Array)],I.prototype,"children",void 0),ef([gr,Fu("design:type",Number)],I.prototype,"index",void 0),ef([gr,Fu("design:type",Object)],I.prototype,"position",void 0),ef([gr,Fu("design:type",Number)],I.prototype,"height",void 0),ef([Dn,Fu("design:type",Number),Fu("design:paramtypes",[])],I.prototype,"level",null),ef([Dn,Fu("design:type",Array),Fu("design:paramtypes",[])],I.prototype,"path",null),ef([Dn,Fu("design:type",Object),Fu("design:paramtypes",[])],I.prototype,"visibleChildren",null),ef([ne,Fu("design:type",Function),Fu("design:paramtypes",[Object]),Fu("design:returntype",void 0)],I.prototype,"setIsSelected",null),ef([ne,Fu("design:type",Function),Fu("design:paramtypes",[]),Fu("design:returntype",void 0)],I.prototype,"_initChildren",null),I})();var mu=function(I,z,B,be){var jn,at=arguments.length,$t=at<3?z:null===be?be=Object.getOwnPropertyDescriptor(z,B):be;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)$t=Reflect.decorate(I,z,B,be);else for(var fr=I.length-1;fr>=0;fr--)(jn=I[fr])&&($t=(at<3?jn($t):at>3?jn(z,B,$t):jn(z,B))||$t);return at>3&&$t&&Object.defineProperty(z,B,$t),$t},Qo=function(I,z){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(I,z)};let Kl=(()=>{class I{constructor(){this.options=new Mm,this.eventNames=Object.keys(mc),this.expandedNodeIds={},this.selectedLeafNodeIds={},this.activeNodeIds={},this.hiddenNodeIds={},this.focusedNodeId=null,this.firstUpdate=!0,this.subscriptions=[]}fireEvent(B){B.treeModel=this,this.events[B.eventName].emit(B),this.events.event.emit(B)}subscribe(B,be){const at=this.events[B].subscribe(be);this.subscriptions.push(at)}getFocusedNode(){return this.focusedNode}getActiveNode(){return this.activeNodes[0]}getActiveNodes(){return this.activeNodes}getVisibleRoots(){return this.virtualRoot.visibleChildren}getFirstRoot(B=!1){return Z_(B?this.getVisibleRoots():this.roots)}getLastRoot(B=!1){return nn(B?this.getVisibleRoots():this.roots)}get isFocused(){return I.focusedTree===this}isNodeFocused(B){return this.focusedNode===B}isEmptyTree(){return this.roots&&0===this.roots.length}get focusedNode(){return this.focusedNodeId?this.getNodeById(this.focusedNodeId):null}get expandedNodes(){const B=Object.keys(this.expandedNodeIds).filter(be=>this.expandedNodeIds[be]).map(be=>this.getNodeById(be));return kh(B)}get activeNodes(){const B=Object.keys(this.activeNodeIds).filter(be=>this.activeNodeIds[be]).map(be=>this.getNodeById(be));return kh(B)}get hiddenNodes(){const B=Object.keys(this.hiddenNodeIds).filter(be=>this.hiddenNodeIds[be]).map(be=>this.getNodeById(be));return kh(B)}get selectedLeafNodes(){const B=Object.keys(this.selectedLeafNodeIds).filter(be=>this.selectedLeafNodeIds[be]).map(be=>this.getNodeById(be));return kh(B)}getNodeByPath(B,be=null){if(!B)return null;if(be=be||this.virtualRoot,0===B.length)return be;if(!be.children)return null;const at=B.shift(),$t=fh(be.children,{id:at});return $t?this.getNodeByPath(B,$t):null}getNodeById(B){const be=B.toString();return this.getNodeBy(at=>at.id.toString()===be)}getNodeBy(B,be=null){if(!(be=be||this.virtualRoot).children)return null;const at=fh(be.children,B);if(at)return at;for(let $t of be.children){const jn=this.getNodeBy(B,$t);if(jn)return jn}}isExpanded(B){return this.expandedNodeIds[B.id]}isHidden(B){return this.hiddenNodeIds[B.id]}isActive(B){return this.activeNodeIds[B.id]}isSelected(B){return this.selectedLeafNodeIds[B.id]}ngOnDestroy(){this.dispose(),this.unsubscribeAll()}dispose(){this.virtualRoot&&this.virtualRoot.dispose()}unsubscribeAll(){this.subscriptions.forEach(B=>B.unsubscribe()),this.subscriptions=[]}setData({nodes:B,options:be=null,events:at=null}){be&&(this.options=new Mm(be)),at&&(this.events=at),B&&(this.nodes=B),this.update()}update(){let B={id:this.options.rootId,virtual:!0,[this.options.childrenField]:this.nodes};this.dispose(),this.virtualRoot=new s1(B,null,this,0),this.roots=this.virtualRoot.children,this.firstUpdate?this.roots&&(this.firstUpdate=!1,this._calculateExpandedNodes()):this.fireEvent({eventName:mc.updateData})}setFocusedNode(B){this.focusedNodeId=B?B.id:null}setFocus(B){I.focusedTree=B?this:null}doForAll(B){this.roots.forEach(be=>be.doForAll(B))}focusNextNode(){let B=this.getFocusedNode(),be=B?B.findNextNode(!0,!0):this.getFirstRoot(!0);be&&be.focus()}focusPreviousNode(){let B=this.getFocusedNode(),be=B?B.findPreviousNode(!0):this.getLastRoot(!0);be&&be.focus()}focusDrillDown(){let B=this.getFocusedNode();if(B&&B.isCollapsed&&B.hasChildren)B.toggleExpanded();else{let be=B?B.getFirstChild(!0):this.getFirstRoot(!0);be&&be.focus()}}focusDrillUp(){let B=this.getFocusedNode();if(B)if(B.isExpanded)B.toggleExpanded();else{let be=B.realParent;be&&be.focus()}}setActiveNode(B,be,at=!1){at?this._setActiveNodeMulti(B,be):this._setActiveNodeSingle(B,be),be?(B.focus(this.options.scrollOnActivate),this.fireEvent({eventName:mc.activate,node:B}),this.fireEvent({eventName:mc.nodeActivate,node:B})):(this.fireEvent({eventName:mc.deactivate,node:B}),this.fireEvent({eventName:mc.nodeDeactivate,node:B}))}setSelectedNode(B,be){this.selectedLeafNodeIds=Object.assign({},this.selectedLeafNodeIds,{[B.id]:be}),be?(B.focus(),this.fireEvent({eventName:mc.select,node:B})):this.fireEvent({eventName:mc.deselect,node:B})}setExpandedNode(B,be){this.expandedNodeIds=Object.assign({},this.expandedNodeIds,{[B.id]:be}),this.fireEvent({eventName:mc.toggleExpanded,node:B,isExpanded:be})}expandAll(){this.roots.forEach(B=>B.expandAll())}collapseAll(){this.roots.forEach(B=>B.collapseAll())}setIsHidden(B,be){this.hiddenNodeIds=Object.assign({},this.hiddenNodeIds,{[B.id]:be})}setHiddenNodeIds(B){this.hiddenNodeIds=B.reduce((be,at)=>Object.assign(be,{[at]:!0}),{})}performKeyAction(B,be){const at=this.options.actionMapping.keys[be.keyCode];return!!at&&(be.preventDefault(),at(this,B,be),!0)}filterNodes(B,be=!0){let at;if(!B)return this.clearFilter();if(Rf(B))at=jn=>-1!==jn.displayField.toLowerCase().indexOf(B.toLowerCase());else{if(!(0,Sc.Z)(B))return console.error("Don't know what to do with filter",B),void console.error("Should be either a string or function");at=B}const $t={};this.roots.forEach(jn=>this._filterNode($t,jn,at,be)),this.hiddenNodeIds=$t,this.fireEvent({eventName:mc.changeFilter})}clearFilter(){this.hiddenNodeIds={},this.fireEvent({eventName:mc.changeFilter})}moveNode(B,be){const at=B.getIndexInParent(),$t=B.parent;if(!this.canMoveNode(B,be,at))return;const jn=$t.getField("children");be.parent.getField("children")||be.parent.setField("children",[]);const fr=be.parent.getField("children"),ui=jn.splice(at,1)[0];let Ro=$t===be.parent&&be.index>at?be.index-1:be.index;fr.splice(Ro,0,ui),$t.treeModel.update(),be.parent.treeModel!==$t.treeModel&&be.parent.treeModel.update(),this.fireEvent({eventName:mc.moveNode,node:ui,to:{parent:be.parent.data,index:Ro},from:{parent:$t.data,index:at}})}copyNode(B,be){const at=B.getIndexInParent();if(!this.canMoveNode(B,be,at))return;be.parent.getField("children")||be.parent.setField("children",[]);const $t=be.parent.getField("children"),jn=this.options.getNodeClone(B);$t.splice(be.index,0,jn),B.treeModel.update(),be.parent.treeModel!==B.treeModel&&be.parent.treeModel.update(),this.fireEvent({eventName:mc.copyNode,node:jn,to:{parent:be.parent.data,index:be.index}})}getState(){return{expandedNodeIds:this.expandedNodeIds,selectedLeafNodeIds:this.selectedLeafNodeIds,activeNodeIds:this.activeNodeIds,hiddenNodeIds:this.hiddenNodeIds,focusedNodeId:this.focusedNodeId}}setState(B){!B||Object.assign(this,{expandedNodeIds:B.expandedNodeIds||{},selectedLeafNodeIds:B.selectedLeafNodeIds||{},activeNodeIds:B.activeNodeIds||{},hiddenNodeIds:B.hiddenNodeIds||{},focusedNodeId:B.focusedNodeId})}subscribeToState(B){ti(()=>B(this.getState()))}canMoveNode(B,be,at){return at||B.getIndexInParent(),(B.parent!==be.parent||at!==be.index)&&!be.parent.isDescendantOf(B)}calculateExpandedNodes(){this._calculateExpandedNodes()}_filterNode(B,be,at,$t){let jn=at(be);return be.children&&be.children.forEach(fr=>{this._filterNode(B,fr,at,$t)&&(jn=!0)}),jn||(B[be.id]=!0),$t&&jn&&be.ensureVisible(),jn}_calculateExpandedNodes(B=null){(B=B||this.virtualRoot).data[this.options.isExpandedField]&&(this.expandedNodeIds=Object.assign({},this.expandedNodeIds,{[B.id]:!0})),B.children&&B.children.forEach(be=>this._calculateExpandedNodes(be))}_setActiveNodeSingle(B,be){this.activeNodes.filter(at=>at!==B).forEach(at=>{this.fireEvent({eventName:mc.deactivate,node:at}),this.fireEvent({eventName:mc.nodeDeactivate,node:at})}),this.activeNodeIds=be?{[B.id]:!0}:{}}_setActiveNodeMulti(B,be){this.activeNodeIds=Object.assign({},this.activeNodeIds,{[B.id]:be})}}return I.\u0275fac=function(B){return new(B||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I.focusedTree=null,I})();mu([gr,Qo("design:type",Array)],Kl.prototype,"roots",void 0),mu([gr,Qo("design:type",Object)],Kl.prototype,"expandedNodeIds",void 0),mu([gr,Qo("design:type",Object)],Kl.prototype,"selectedLeafNodeIds",void 0),mu([gr,Qo("design:type",Object)],Kl.prototype,"activeNodeIds",void 0),mu([gr,Qo("design:type",Object)],Kl.prototype,"hiddenNodeIds",void 0),mu([gr,Qo("design:type",Object)],Kl.prototype,"focusedNodeId",void 0),mu([gr,Qo("design:type",s1)],Kl.prototype,"virtualRoot",void 0),mu([Dn,Qo("design:type",Object),Qo("design:paramtypes",[])],Kl.prototype,"focusedNode",null),mu([Dn,Qo("design:type",Object),Qo("design:paramtypes",[])],Kl.prototype,"expandedNodes",null),mu([Dn,Qo("design:type",Object),Qo("design:paramtypes",[])],Kl.prototype,"activeNodes",null),mu([Dn,Qo("design:type",Object),Qo("design:paramtypes",[])],Kl.prototype,"hiddenNodes",null),mu([Dn,Qo("design:type",Object),Qo("design:paramtypes",[])],Kl.prototype,"selectedLeafNodes",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object]),Qo("design:returntype",void 0)],Kl.prototype,"setData",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"update",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object]),Qo("design:returntype",void 0)],Kl.prototype,"setFocusedNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object]),Qo("design:returntype",void 0)],Kl.prototype,"setFocus",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object]),Qo("design:returntype",void 0)],Kl.prototype,"doForAll",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"focusNextNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"focusPreviousNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"focusDrillDown",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"focusDrillUp",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object,Object,Object]),Qo("design:returntype",void 0)],Kl.prototype,"setActiveNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object,Object]),Qo("design:returntype",void 0)],Kl.prototype,"setSelectedNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object,Object]),Qo("design:returntype",void 0)],Kl.prototype,"setExpandedNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"expandAll",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"collapseAll",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object,Object]),Qo("design:returntype",void 0)],Kl.prototype,"setIsHidden",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object]),Qo("design:returntype",void 0)],Kl.prototype,"setHiddenNodeIds",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object,Object]),Qo("design:returntype",void 0)],Kl.prototype,"filterNodes",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[]),Qo("design:returntype",void 0)],Kl.prototype,"clearFilter",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object,Object]),Qo("design:returntype",void 0)],Kl.prototype,"moveNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object,Object]),Qo("design:returntype",void 0)],Kl.prototype,"copyNode",null),mu([ne,Qo("design:type",Function),Qo("design:paramtypes",[Object]),Qo("design:returntype",void 0)],Kl.prototype,"setState",null);let lv=(()=>{class I{constructor(){this._draggedElement=null}set(B){this._draggedElement=B}get(){return this._draggedElement}isDragging(){return!!this.get()}}return I.\u0275fac=function(B){return new(B||I)},I.\u0275prov=(0,r.Yz7)({factory:function(){return new I},token:I,providedIn:"root"}),I})();var Wh=function(I,z,B,be){var jn,at=arguments.length,$t=at<3?z:null===be?be=Object.getOwnPropertyDescriptor(z,B):be;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)$t=Reflect.decorate(I,z,B,be);else for(var fr=I.length-1;fr>=0;fr--)(jn=I[fr])&&($t=(at<3?jn($t):at>3?jn(z,B,$t):jn(z,B))||$t);return at>3&&$t&&Object.defineProperty(z,B,$t),$t},Sd=function(I,z){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(I,z)};let Wf=(()=>{class I{constructor(B){this.treeModel=B,this.yBlocks=0,this.x=0,this.viewportHeight=null,this.viewport=null,B.virtualScroll=this,this._dispose=[ti(()=>this.fixScroll())]}get y(){return 150*this.yBlocks}get totalHeight(){return this.treeModel.virtualRoot?this.treeModel.virtualRoot.height:0}fireEvent(B){this.treeModel.fireEvent(B)}init(){const B=this.recalcPositions.bind(this);B(),this._dispose=[...this._dispose,ts(()=>this.treeModel.roots,B),ts(()=>this.treeModel.expandedNodeIds,B),ts(()=>this.treeModel.hiddenNodeIds,B)],this.treeModel.subscribe(mc.loadNodeChildren,B)}isEnabled(){return this.treeModel.options.useVirtualScroll}_setYBlocks(B){this.yBlocks=B}recalcPositions(){this.treeModel.virtualRoot.height=this._getPositionAfter(this.treeModel.getVisibleRoots(),0)}_getPositionAfter(B,be){let at=be;return B.forEach($t=>{$t.position=at,at=this._getPositionAfterNode($t,at)}),at}_getPositionAfterNode(B,be){let at=B.getSelfHeight()+be;return B.children&&B.isExpanded&&(at=this._getPositionAfter(B.visibleChildren,at)),B.height=at-be,at}clear(){this._dispose.forEach(B=>B())}setViewport(B){Object.assign(this,{viewport:B,x:B.scrollLeft,yBlocks:Math.round(B.scrollTop/150),viewportHeight:B.getBoundingClientRect?B.getBoundingClientRect().height:0})}scrollIntoView(B,be,at=!0){if(B.options.scrollContainer){const $t=B.options.scrollContainer,jn=$t.getBoundingClientRect().height,fr=$t.getBoundingClientRect().top,ui=this.viewport.getBoundingClientRect().top+B.position-fr;(be||ui<$t.scrollTop||ui+B.getSelfHeight()>$t.scrollTop+jn)&&($t.scrollTop=at?ui-jn/2:ui)}else(be||B.positionthis.y+this.viewportHeight)&&this.viewport&&(this.viewport.scrollTop=at?B.position-this.viewportHeight/2:B.position,this._setYBlocks(Math.floor(this.viewport.scrollTop/150)))}getViewportNodes(B){if(!B)return[];const be=B.filter(Ro=>!Ro.isHidden);if(!this.isEnabled())return be;if(!this.viewportHeight||!be.length)return[];const at=cv(be,Ro=>Ro.position+500>this.y||Ro.position+Ro.height>this.y),$t=cv(be,Ro=>Ro.position-500>this.y+this.viewportHeight,at),jn=[];if($t-at>(1e3+this.viewportHeight)/be[0].treeModel.options.options.nodeHeight)return[];for(let Ro=at;Ro<=$t;Ro++)jn.push(be[Ro]);return jn}fixScroll(){const B=Math.max(0,this.totalHeight-this.viewportHeight);this.y<0&&this._setYBlocks(0),this.y>B&&this._setYBlocks(B/150)}}return I.\u0275fac=function(B){return new(B||I)(r.LFG(Kl))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})();function cv(I,z,B=0){let be=B,at=I.length-1;for(;be!==at;){let $t=Math.floor((be+at)/2);z(I[$t])?at=$t:be=be===$t?at:$t}return be}Wh([gr,Sd("design:type",Object)],Wf.prototype,"yBlocks",void 0),Wh([gr,Sd("design:type",Object)],Wf.prototype,"x",void 0),Wh([gr,Sd("design:type",Object)],Wf.prototype,"viewportHeight",void 0),Wh([Dn,Sd("design:type",Object),Sd("design:paramtypes",[])],Wf.prototype,"y",null),Wh([Dn,Sd("design:type",Object),Sd("design:paramtypes",[])],Wf.prototype,"totalHeight",null),Wh([ne,Sd("design:type",Function),Sd("design:paramtypes",[Object]),Sd("design:returntype",void 0)],Wf.prototype,"_setYBlocks",null),Wh([ne,Sd("design:type",Function),Sd("design:paramtypes",[]),Sd("design:returntype",void 0)],Wf.prototype,"recalcPositions",null),Wh([ne,Sd("design:type",Function),Sd("design:paramtypes",[Object]),Sd("design:returntype",void 0)],Wf.prototype,"setViewport",null),Wh([ne,Sd("design:type",Function),Sd("design:paramtypes",[Object,Object,Object]),Sd("design:returntype",void 0)],Wf.prototype,"scrollIntoView",null);let dv=(()=>{class I{}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-loading-component"]],inputs:{template:"template",node:"node"},decls:2,vars:5,consts:[[4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(B,be){1&B&&(r.YNc(0,b_,2,0,"span",0),r.GkF(1,1)),2&B&&(r.Q6J("ngIf",!be.template),r.xp6(1),r.Q6J("ngTemplateOutlet",be.template)("ngTemplateOutletContext",r.VKq(3,jh,be.node)))},directives:[u.O5,u.tP],encapsulation:2}),I})(),Q_=(()=>{class I{constructor(B,be,at){this.elementRef=B,this.ngZone=be,this.virtualScroll=at,this.setViewport=gg(()=>{this.virtualScroll.setViewport(this.elementRef.nativeElement)},17),this.scrollEventHandler=this.setViewport.bind(this)}ngOnInit(){this.virtualScroll.init()}ngAfterViewInit(){setTimeout(()=>{this.setViewport(),this.virtualScroll.fireEvent({eventName:mc.initialized})});let B=this.elementRef.nativeElement;this.ngZone.runOutsideAngular(()=>{B.addEventListener("scroll",this.scrollEventHandler)})}ngOnDestroy(){this.virtualScroll.clear(),this.elementRef.nativeElement.removeEventListener("scroll",this.scrollEventHandler)}getTotalHeight(){return this.virtualScroll.isEnabled()&&this.virtualScroll.totalHeight+"px"||"auto"}}return I.\u0275fac=function(B){return new(B||I)(r.Y36(r.SBq),r.Y36(r.R0b),r.Y36(Wf))},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-viewport"]],features:[r._Bn([Wf])],ngContentSelectors:Tg,decls:1,vars:2,consts:[[4,"treeMobxAutorun"]],template:function(B,be){1&B&&(r.F$t(),r.YNc(0,E_,3,2,"ng-container",0)),2&B&&r.Q6J("treeMobxAutorun",r.DdM(1,jp))},directives:[Qr],encapsulation:2}),I})(),Om=(()=>{class I{constructor(B,be){this.treeModel=B,this.treeDraggedElement=be,B.eventNames.forEach(at=>this[at]=new r.vpe),B.subscribeToState(at=>this.stateChange.emit(at))}set nodes(B){}set options(B){}set focused(B){this.treeModel.setFocus(B)}set state(B){this.treeModel.setState(B)}onKeydown(B){if(!this.treeModel.isFocused||Yg(["input","textarea"],document.activeElement.tagName.toLowerCase()))return;const be=this.treeModel.getFocusedNode();this.treeModel.performKeyAction(be,B)}onMousedown(B){(function be(at,$t){return!at||at.localName!==$t&&be(at.parentElement,$t)})(B.target,"tree-root")&&this.treeModel.setFocus(!1)}ngOnChanges(B){(B.options||B.nodes)&&this.treeModel.setData({options:B.options&&B.options.currentValue,nodes:B.nodes&&B.nodes.currentValue,events:y_(this,this.treeModel.eventNames)})}sizeChanged(){this.viewportComponent.setViewport()}}return I.\u0275fac=function(B){return new(B||I)(r.Y36(Kl),r.Y36(lv))},I.\u0275cmp=r.Xpm({type:I,selectors:[["Tree"],["tree-root"]],contentQueries:function(B,be,at){if(1&B&&(r.Suo(at,T_,5),r.Suo(at,Zg,5),r.Suo(at,Gh,5),r.Suo(at,Sg,5)),2&B){let $t;r.iGM($t=r.CRH())&&(be.loadingTemplate=$t.first),r.iGM($t=r.CRH())&&(be.treeNodeTemplate=$t.first),r.iGM($t=r.CRH())&&(be.treeNodeWrapperTemplate=$t.first),r.iGM($t=r.CRH())&&(be.treeNodeFullTemplate=$t.first)}},viewQuery:function(B,be){if(1&B&&r.Gf(rv,5),2&B){let at;r.iGM(at=r.CRH())&&(be.viewportComponent=at.first)}},hostBindings:function(B,be){1&B&&r.NdJ("keydown",function($t){return be.onKeydown($t)},!1,r.pYS)("mousedown",function($t){return be.onMousedown($t)},!1,r.pYS)},inputs:{nodes:"nodes",options:"options",focused:"focused",state:"state"},outputs:{toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",updateData:"updateData",initialized:"initialized",moveNode:"moveNode",copyNode:"copyNode",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",event:"event",stateChange:"stateChange"},features:[r._Bn([Kl]),r.TTD],decls:5,vars:6,consts:[["viewport",""],[1,"angular-tree-component"],[3,"nodes","treeModel","templates",4,"ngIf"],["class","empty-tree-drop-slot",3,"dropIndex","node",4,"ngIf"],[3,"nodes","treeModel","templates"],[1,"empty-tree-drop-slot",3,"dropIndex","node"]],template:function(B,be){1&B&&(r.TgZ(0,"tree-viewport",null,0),r.TgZ(2,"div",1),r.YNc(3,Tm,1,8,"tree-node-collection",2),r.YNc(4,S_,1,2,"tree-node-drop-slot",3),r.qZA(),r.qZA()),2&B&&(r.xp6(2),r.ekj("node-dragging",be.treeDraggedElement.isDragging())("angular-tree-component-rtl",be.treeModel.options.rtl),r.xp6(1),r.Q6J("ngIf",be.treeModel.roots),r.xp6(1),r.Q6J("ngIf",be.treeModel.isEmptyTree()))},directives:function(){return[Q_,u.O5,Jh,Mp]},encapsulation:2}),I})(),jg=(()=>{class I{}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["TreeNode"],["tree-node"]],inputs:{node:"node",index:"index",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"class","tree-node","tree-node-expanded","tree-node-collapsed","tree-node-leaf","tree-node-active","tree-node-focused",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"dropIndex","node",4,"ngIf"],[3,"node","index","templates"],[3,"node","templates"],[3,"dropIndex","node"]],template:function(B,be){1&B&&r.YNc(0,Se,3,8,"ng-container",0),2&B&&r.Q6J("treeMobxAutorun",r.DdM(1,jp))},directives:function(){return[Qr,u.O5,u.tP,Vp,pv,Mp]},encapsulation:2}),I})(),fv=(()=>{class I{}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-node-content"]],inputs:{node:"node",index:"index",template:"template"},decls:2,vars:7,consts:[[4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(B,be){1&B&&(r.YNc(0,We,2,1,"span",0),r.GkF(1,1)),2&B&&(r.Q6J("ngIf",!be.template),r.xp6(1),r.Q6J("ngTemplateOutlet",be.template)("ngTemplateOutletContext",r.kEZ(3,Nt,be.node,be.node,be.index)))},directives:[u.O5,u.tP],encapsulation:2}),I})(),Mp=(()=>{class I{onDrop(B){this.node.mouseAction("drop",B.event,{from:B.element,to:{parent:this.node,index:this.dropIndex}})}allowDrop(B,be){return this.node.options.allowDrop(B,{parent:this.node,index:this.dropIndex},be)}}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["TreeNodeDropSlot"],["tree-node-drop-slot"]],inputs:{node:"node",dropIndex:"dropIndex"},decls:1,vars:2,consts:[[1,"node-drop-slot",3,"treeAllowDrop","allowDragoverStyling","treeDrop"]],template:function(B,be){1&B&&(r.TgZ(0,"div",0),r.NdJ("treeDrop",function($t){return be.onDrop($t)}),r.qZA()),2&B&&r.Q6J("treeAllowDrop",be.allowDrop.bind(be))("allowDragoverStyling",!0)},directives:function(){return[Dm]},encapsulation:2}),I})(),wm=(()=>{class I{}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-node-expander"]],inputs:{node:"node"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],["class","toggle-children-wrapper",3,"toggle-children-wrapper-expanded","toggle-children-wrapper-collapsed","click",4,"ngIf"],["class","toggle-children-placeholder",4,"ngIf"],[1,"toggle-children-wrapper",3,"click"],[1,"toggle-children"],[1,"toggle-children-placeholder"]],template:function(B,be){1&B&&r.YNc(0,yr,3,2,"ng-container",0),2&B&&r.Q6J("treeMobxAutorun",r.DdM(1,jp))},directives:[Qr,u.O5],encapsulation:2}),I})(),pv=(()=>{class I{}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-node-children"]],inputs:{node:"node",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"tree-children","tree-children-no-padding",4,"treeAnimateOpen","treeAnimateOpenSpeed","treeAnimateOpenAcceleration","treeAnimateOpenEnabled"],[3,"nodes","templates","treeModel",4,"ngIf"],["class","tree-node-loading",3,"padding-left","template","node",4,"ngIf"],[3,"nodes","templates","treeModel"],[1,"tree-node-loading",3,"template","node"]],template:function(B,be){1&B&&r.YNc(0,go,2,4,"ng-container",0),2&B&&r.Q6J("treeMobxAutorun",r.DdM(1,jp))},directives:function(){return[Qr,_v,u.O5,Jh,dv]},encapsulation:2}),I})();const Gg=Object.assign(function(...I){return ne(...I)},ne),hv=Object.assign(function(...I){return Dn(...I)},Dn),Cg=Object.assign(function(...I){return gr(...I)},gr);var Ap=function(I,z,B,be){var jn,at=arguments.length,$t=at<3?z:null===be?be=Object.getOwnPropertyDescriptor(z,B):be;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)$t=Reflect.decorate(I,z,B,be);else for(var fr=I.length-1;fr>=0;fr--)(jn=I[fr])&&($t=(at<3?jn($t):at>3?jn(z,B,$t):jn(z,B))||$t);return at>3&&$t&&Object.defineProperty(z,B,$t),$t},ip=function(I,z){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(I,z)};let Jh=(()=>{class I{constructor(){this._dispose=[]}get nodes(){return this._nodes}set nodes(B){this.setNodes(B)}get marginTop(){const B=this.viewportNodes&&this.viewportNodes.length&&this.viewportNodes[0];return(B&&B.parent?B.position-B.parent.position-B.parent.getSelfHeight():0)+"px"}setNodes(B){this._nodes=B}ngOnInit(){this.virtualScroll=this.treeModel.virtualScroll,this._dispose=[ts(()=>this.virtualScroll.getViewportNodes(this.nodes).map(B=>B.index),B=>{this.viewportNodes=B.map(be=>this.nodes[be])},{compareStructural:!0,fireImmediately:!0}),ts(()=>this.nodes,B=>{this.viewportNodes=this.virtualScroll.getViewportNodes(B)})]}ngOnDestroy(){this._dispose.forEach(B=>B())}trackNode(B,be){return be.id}}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-node-collection"]],inputs:{nodes:"nodes",treeModel:"treeModel",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"node","index","templates",4,"ngFor","ngForOf","ngForTrackBy"],[3,"node","index","templates"]],template:function(B,be){1&B&&r.YNc(0,Fa,3,4,"ng-container",0),2&B&&r.Q6J("treeMobxAutorun",r.DdM(1,jp))},directives:[Qr,u.sg,jg],encapsulation:2}),I})();Ap([Cg,ip("design:type",Object)],Jh.prototype,"_nodes",void 0),Ap([Cg,ip("design:type",Array)],Jh.prototype,"viewportNodes",void 0),Ap([hv,ip("design:type",String),ip("design:paramtypes",[])],Jh.prototype,"marginTop",null),Ap([Gg,ip("design:type",Function),ip("design:paramtypes",[Object]),ip("design:returntype",void 0)],Jh.prototype,"setNodes",null);let Vp=(()=>{class I{constructor(){}}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-node-wrapper"]],inputs:{node:"node",index:"index",templates:"templates"},decls:2,vars:8,consts:[["class","node-wrapper",3,"padding-left",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"node-wrapper"],[3,"node",4,"ngIf"],[3,"node"],[1,"node-content-wrapper",3,"treeAllowDrop","allowDragoverStyling","treeDrag","treeDragEnabled","click","dblclick","mouseover","mouseout","contextmenu","treeDrop","treeDropDragOver","treeDropDragLeave","treeDropDragEnter"],[3,"node","index","template"]],template:function(B,be){1&B&&(r.YNc(0,ni,5,15,"div",0),r.GkF(1,1)),2&B&&(r.Q6J("ngIf",!be.templates.treeNodeWrapperTemplate),r.xp6(1),r.Q6J("ngTemplateOutlet",be.templates.treeNodeWrapperTemplate)("ngTemplateOutletContext",r.l5B(3,G,be.node,be.node,be.index,be.templates)))},directives:function(){return[u.O5,u.tP,wm,Rm,Dm,fv,X_]},encapsulation:2}),I})(),X_=(()=>{class I{}return I.\u0275fac=function(B){return new(B||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["tree-node-checkbox"]],inputs:{node:"node"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],["type","checkbox",1,"tree-node-checkbox",3,"checked","indeterminate","click"]],template:function(B,be){1&B&&r.YNc(0,Tr,2,2,"ng-container",0),2&B&&r.Q6J("treeMobxAutorun",r.DdM(1,jp))},directives:[Qr],encapsulation:2}),I})();const C_="is-dragging-over",xm="is-dragging-over-disabled";let Dm=(()=>{class I{constructor(B,be,at,$t){this.el=B,this.renderer=be,this.treeDraggedElement=at,this.ngZone=$t,this.allowDragoverStyling=!0,this.onDropCallback=new r.vpe,this.onDragOverCallback=new r.vpe,this.onDragLeaveCallback=new r.vpe,this.onDragEnterCallback=new r.vpe,this._allowDrop=(jn,fr)=>!0,this.dragOverEventHandler=this.onDragOver.bind(this),this.dragEnterEventHandler=this.onDragEnter.bind(this),this.dragLeaveEventHandler=this.onDragLeave.bind(this)}set treeAllowDrop(B){this._allowDrop=B instanceof Function?B:(be,at)=>B}allowDrop(B){return this._allowDrop(this.treeDraggedElement.get(),B)}ngAfterViewInit(){let B=this.el.nativeElement;this.ngZone.runOutsideAngular(()=>{B.addEventListener("dragover",this.dragOverEventHandler),B.addEventListener("dragenter",this.dragEnterEventHandler),B.addEventListener("dragleave",this.dragLeaveEventHandler)})}ngOnDestroy(){let B=this.el.nativeElement;B.removeEventListener("dragover",this.dragOverEventHandler),B.removeEventListener("dragenter",this.dragEnterEventHandler),B.removeEventListener("dragleave",this.dragLeaveEventHandler)}onDragOver(B){if(!this.allowDrop(B))return this.allowDragoverStyling?this.addDisabledClass():void 0;this.onDragOverCallback.emit({event:B,element:this.treeDraggedElement.get()}),B.preventDefault(),this.allowDragoverStyling&&this.addClass()}onDragEnter(B){!this.allowDrop(B)||(B.preventDefault(),this.onDragEnterCallback.emit({event:B,element:this.treeDraggedElement.get()}))}onDragLeave(B){if(!this.allowDrop(B))return this.allowDragoverStyling?this.removeDisabledClass():void 0;this.onDragLeaveCallback.emit({event:B,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass()}onDrop(B){!this.allowDrop(B)||(B.preventDefault(),this.onDropCallback.emit({event:B,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass(),this.treeDraggedElement.set(null))}addClass(){this.renderer.addClass(this.el.nativeElement,C_)}removeClass(){this.renderer.removeClass(this.el.nativeElement,C_)}addDisabledClass(){this.renderer.addClass(this.el.nativeElement,xm)}removeDisabledClass(){this.renderer.removeClass(this.el.nativeElement,xm)}}return I.\u0275fac=function(B){return new(B||I)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(lv),r.Y36(r.R0b))},I.\u0275dir=r.lG2({type:I,selectors:[["","treeDrop",""]],hostBindings:function(B,be){1&B&&r.NdJ("drop",function($t){return be.onDrop($t)})},inputs:{allowDragoverStyling:"allowDragoverStyling",treeAllowDrop:"treeAllowDrop"},outputs:{onDropCallback:"treeDrop",onDragOverCallback:"treeDropDragOver",onDragLeaveCallback:"treeDropDragLeave",onDragEnterCallback:"treeDropDragEnter"}}),I})(),Rm=(()=>{class I{constructor(B,be,at,$t){this.el=B,this.renderer=be,this.treeDraggedElement=at,this.ngZone=$t,this.dragEventHandler=this.onDrag.bind(this)}ngAfterViewInit(){let B=this.el.nativeElement;this.ngZone.runOutsideAngular(()=>{B.addEventListener("drag",this.dragEventHandler)})}ngDoCheck(){this.renderer.setAttribute(this.el.nativeElement,"draggable",this.treeDragEnabled?"true":"false")}ngOnDestroy(){this.el.nativeElement.removeEventListener("drag",this.dragEventHandler)}onDragStart(B){B.dataTransfer.setData("text",B.target.id),this.treeDraggedElement.set(this.draggedElement),this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragStart",B)}onDrag(B){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("drag",B)}onDragEnd(){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragEnd"),this.treeDraggedElement.set(null)}}return I.\u0275fac=function(B){return new(B||I)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(lv),r.Y36(r.R0b))},I.\u0275dir=r.lG2({type:I,selectors:[["","treeDrag",""]],hostBindings:function(B,be){1&B&&r.NdJ("dragstart",function($t){return be.onDragStart($t)})("dragend",function(){return be.onDragEnd()})},inputs:{draggedElement:["treeDrag","draggedElement"],treeDragEnabled:"treeDragEnabled"}}),I})(),_v=(()=>{class I{constructor(B,be,at){this.renderer=B,this.templateRef=be,this.viewContainerRef=at}set isOpen(B){B?(this._show(),this.isEnabled&&!1===this._isOpen&&this._animateOpen()):this.isEnabled?this._animateClose():this._hide(),this._isOpen=!!B}_show(){this.innerElement||(this.innerElement=this.viewContainerRef.createEmbeddedView(this.templateRef).rootNodes[0])}_hide(){this.viewContainerRef.clear(),this.innerElement=null}_animateOpen(){let B=this.animateSpeed,be=this.animateAcceleration,at=0;this.renderer.setStyle(this.innerElement,"max-height","0"),setTimeout(()=>{const $t=setInterval(()=>{if(!this._isOpen||!this.innerElement)return clearInterval($t);at+=B;const jn=Math.round(at);this.renderer.setStyle(this.innerElement,"max-height",`${jn}px`);const fr=this.innerElement.getBoundingClientRect?this.innerElement.getBoundingClientRect().height:0;B*=be,be*=1.005,fr{if(this._isOpen||!this.innerElement)return clearInterval($t);at-=B,this.renderer.setStyle(this.innerElement,"max-height",`${at}px`),B*=be,be*=1.005,at<=0&&(this.viewContainerRef.clear(),this.innerElement=null,clearInterval($t))},17)}}return I.\u0275fac=function(B){return new(B||I)(r.Y36(r.Qsj),r.Y36(r.Rgc),r.Y36(r.s_b))},I.\u0275dir=r.lG2({type:I,selectors:[["","treeAnimateOpen",""]],inputs:{isOpen:["treeAnimateOpen","isOpen"],animateSpeed:["treeAnimateOpenSpeed","animateSpeed"],animateAcceleration:["treeAnimateOpenAcceleration","animateAcceleration"],isEnabled:["treeAnimateOpenEnabled","isEnabled"]}}),I})(),zg=(()=>{class I{}return I.\u0275fac=function(B){return new(B||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({providers:[],imports:[[u.ez]]}),I})()},38549:(v,T,i)=>{"use strict";i.d(T,{Kz:()=>E,xm:()=>Rl,_A:()=>nc,vL:()=>Ul,_D:()=>fa,lQ:()=>pu,VL:()=>Gl,M:()=>Yu,jt:()=>hc,TH:()=>wf,Vi:()=>Vl,XC:()=>Mc,iD:()=>oc,J4:()=>qt,FF:()=>ye,Pz:()=>xn,uN:()=>nn,nv:()=>Pn,Vx:()=>ir,Oz:()=>Xs,tO:()=>Lo,M2:()=>Kd,o8:()=>na,AX:()=>bi,dT:()=>_l,Ly:()=>zc,ZQ:()=>qf,Pm:()=>kd,UL:()=>Yf,_L:()=>Ph,xI:()=>rh,HK:()=>Bp,dR:()=>ac,ZS:()=>oh});var r=i(74788),u=i(12057),p=i(59796),d=i(56693),e=i(55197),_=i(20509);function y(...Y){if(1===Y.length){if(!(0,p.k)(Y[0]))return Y[0];Y=Y[0]}return(0,d.n)(Y,void 0).lift(new S)}class S{call(fe,w){return w.subscribe(new A(fe))}}class A extends e.L{constructor(fe){super(fe),this.hasFirst=!1,this.observables=[],this.subscriptions=[]}_next(fe){this.observables.push(fe)}_complete(){const fe=this.observables,w=fe.length;if(0===w)this.destination.complete();else{for(let X=0;Xthis.index}hasCompleted(){return this.array.length===this.index}}class H extends Z.Ds{constructor(fe,w,X){super(fe),this.parent=w,this.observable=X,this.stillUnsubscribed=!0,this.buffer=[],this.isComplete=!1}[L.hZ](){return this}next(){const fe=this.buffer;return 0===fe.length&&this.isComplete?{value:null,done:!0}:{value:fe.shift(),done:!1}}hasValue(){return this.buffer.length>0}hasCompleted(){return 0===this.buffer.length&&this.isComplete}notifyComplete(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()}notifyNext(fe){this.buffer.push(fe),this.parent.checkIterators()}subscribe(){return(0,Z.ft)(this.observable,new Z.IY(this))}}var se=i(18891),Ee=i(59193),ie=i(25917),he=i(79765),ge=i(22759),De=i(46797),ce=i(26215),ze=(i(9112),i(17757),i(66682)),Be=i(58071);function je(...Y){return fe=>{let w;return"function"==typeof Y[Y.length-1]&&(w=Y.pop()),fe.lift(new He(Y,w))}}class He{constructor(fe,w){this.observables=fe,this.project=w}call(fe,w){return w.subscribe(new Vt(fe,this.observables,this.project))}}class Vt extends e.L{constructor(fe,w,X){super(fe),this.observables=w,this.project=X,this.toRespond=[];const ke=w.length;this.values=new Array(ke);for(let ct=0;ct0){const ct=ke.indexOf(X);-1!==ct&&ke.splice(ct,1)}}notifyComplete(){}_next(fe){if(0===this.toRespond.length){const w=[fe,...this.values];this.project?this._tryProject(w):this.destination.next(w)}}_tryProject(fe){let w;try{w=this.project.apply(this,fe)}catch(X){return void this.destination.error(X)}this.destination.next(w)}}class tn{constructor(fe){this.total=fe}call(fe,w){return w.subscribe(new It(fe,this.total))}}class It extends N.L{constructor(fe,w){super(fe),this.total=w,this.count=0}_next(fe){++this.count>this.total&&this.destination.next(fe)}}var Zt=i(46782),Ut=i(45435),Bt=i(15257),bt=i(88002),Gt=i(39761),xt=i(87519),Xt=i(43190),Zn=i(68307),Ur=i(71289),di=i(19773),Lr=i(18819),Mr=i(24751);function ki(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",1),r.NdJ("click",function(){return r.CHM(w),r.oxw().close()}),r.TgZ(1,"span",2),r._uU(2,"\xd7"),r.qZA(),r.qZA()}}const Hi=["*"],Fr=["defaultDayTemplate"],Gn=["content"];function Jr(Y,fe){if(1&Y&&r._UZ(0,"div",7),2&Y){const X=fe.currentMonth,ke=fe.selected,ct=fe.disabled,Jn=fe.focused;r.Q6J("date",fe.date)("currentMonth",X)("selected",ke)("disabled",ct)("focused",Jn)}}function _i(Y,fe){if(1&Y&&(r.TgZ(0,"div",12),r._uU(1),r.qZA()),2&Y){const w=r.oxw().$implicit,X=r.oxw(2);r.xp6(1),r.hij(" ",X.i18n.getMonthLabel(w.firstDate)," ")}}function wi(Y,fe){if(1&Y&&(r.TgZ(0,"div",9),r.YNc(1,_i,2,1,"div",10),r._UZ(2,"ngb-datepicker-month",11),r.qZA()),2&Y){const w=fe.$implicit,X=r.oxw(2);r.xp6(1),r.Q6J("ngIf","none"===X.navigation||X.displayMonths>1&&"select"===X.navigation),r.xp6(1),r.Q6J("month",w.firstDate)}}function br(Y,fe){if(1&Y&&r.YNc(0,wi,3,2,"div",8),2&Y){const w=r.oxw();r.Q6J("ngForOf",w.model.months)}}function Dr(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"ngb-datepicker-navigation",13),r.NdJ("navigate",function(ke){return r.CHM(w),r.oxw().onNavigateEvent(ke)})("select",function(ke){return r.CHM(w),r.oxw().onNavigateDateSelect(ke)}),r.qZA()}if(2&Y){const w=r.oxw();r.Q6J("date",w.model.firstDate)("months",w.model.months)("disabled",w.model.disabled)("showSelect","select"===w.model.navigation)("prevDisabled",w.model.prevDisabled)("nextDisabled",w.model.nextDisabled)("selectBoxes",w.model.selectBoxes)}}function gn(Y,fe){}function yn(Y,fe){}function gr(Y,fe){if(1&Y&&(r.TgZ(0,"div",5),r._uU(1),r.qZA()),2&Y){const w=r.oxw(2);r.xp6(1),r.Oqu(w.i18n.getWeekLabel())}}function Jt(Y,fe){if(1&Y&&(r.TgZ(0,"div",6),r._uU(1),r.qZA()),2&Y){const w=fe.$implicit;r.xp6(1),r.Oqu(w)}}function Vn(Y,fe){if(1&Y&&(r.TgZ(0,"div",2),r.YNc(1,gr,2,1,"div",3),r.YNc(2,Jt,2,1,"div",4),r.qZA()),2&Y){const w=r.oxw();r.xp6(1),r.Q6J("ngIf",w.datepicker.showWeekNumbers),r.xp6(1),r.Q6J("ngForOf",w.viewModel.weekdays)}}function mr(Y,fe){if(1&Y&&(r.TgZ(0,"div",11),r._uU(1),r.qZA()),2&Y){const w=r.oxw(2).$implicit,X=r.oxw();r.xp6(1),r.Oqu(X.i18n.getWeekNumerals(w.number))}}function Dn(Y,fe){}function Pr(Y,fe){if(1&Y&&r.YNc(0,Dn,0,0,"ng-template",14),2&Y){const w=r.oxw().$implicit,X=r.oxw(3);r.Q6J("ngTemplateOutlet",X.datepicker.dayTemplate)("ngTemplateOutletContext",w.context)}}function Yt(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"div",12),r.NdJ("click",function(ke){const Jn=r.CHM(w).$implicit;return r.oxw(3).doSelect(Jn),ke.preventDefault()}),r.YNc(1,Pr,1,2,"ng-template",13),r.qZA()}if(2&Y){const w=fe.$implicit;r.ekj("disabled",w.context.disabled)("hidden",w.hidden)("ngb-dp-today",w.context.today),r.Q6J("tabindex",w.tabindex),r.uIk("aria-label",w.ariaLabel),r.xp6(1),r.Q6J("ngIf",!w.hidden)}}function _n(Y,fe){if(1&Y&&(r.TgZ(0,"div",8),r.YNc(1,mr,2,1,"div",9),r.YNc(2,Yt,2,9,"div",10),r.qZA()),2&Y){const w=r.oxw().$implicit,X=r.oxw();r.xp6(1),r.Q6J("ngIf",X.datepicker.showWeekNumbers),r.xp6(1),r.Q6J("ngForOf",w.days)}}function Ge(Y,fe){1&Y&&r.YNc(0,_n,3,2,"div",7),2&Y&&r.Q6J("ngIf",!fe.$implicit.collapsed)}function kr(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"ngb-datepicker-navigation-select",7),r.NdJ("select",function(ke){return r.CHM(w),r.oxw().select.emit(ke)}),r.qZA()}if(2&Y){const w=r.oxw();r.Q6J("date",w.date)("disabled",w.disabled)("months",w.selectBoxes.months)("years",w.selectBoxes.years)}}function mi(Y,fe){1&Y&&r._UZ(0,"div",0)}function An(Y,fe){1&Y&&r._UZ(0,"div",0)}function Er(Y,fe){if(1&Y&&(r.YNc(0,mi,1,0,"div",9),r.TgZ(1,"div",10),r._uU(2),r.qZA(),r.YNc(3,An,1,0,"div",9)),2&Y){const w=fe.$implicit,X=fe.index,ke=r.oxw(2);r.Q6J("ngIf",X>0),r.xp6(2),r.hij(" ",ke.i18n.getMonthLabel(w.firstDate)," "),r.xp6(1),r.Q6J("ngIf",X!==ke.months.length-1)}}function Wr(Y,fe){if(1&Y&&r.YNc(0,Er,4,3,"ng-template",8),2&Y){const w=r.oxw();r.Q6J("ngForOf",w.months)}}const dr=["ngbDatepickerDayView",""],Fn=["month"],ar=["year"];function Wi(Y,fe){if(1&Y&&(r.TgZ(0,"option",5),r._uU(1),r.qZA()),2&Y){const w=fe.$implicit,X=r.oxw();r.Q6J("value",w),r.uIk("aria-label",X.i18n.getMonthFullName(w,null==X.date?null:X.date.year)),r.xp6(1),r.Oqu(X.i18n.getMonthShortName(w,null==X.date?null:X.date.year))}}function lo(Y,fe){if(1&Y&&(r.TgZ(0,"option",5),r._uU(1),r.qZA()),2&Y){const w=fe.$implicit,X=r.oxw();r.Q6J("value",w),r.xp6(1),r.Oqu(X.i18n.getYearNumerals(w))}}const vo=["dialog"],Co=["ngbNavOutlet",""];function Gi(Y,fe){}const os=function(Y){return{$implicit:Y}};function jo(Y,fe){if(1&Y&&(r.TgZ(0,"div",2),r.YNc(1,Gi,0,0,"ng-template",3),r.qZA()),2&Y){const w=r.oxw().$implicit,X=r.oxw();r.Q6J("item",w)("nav",X.nav)("role",X.paneRole),r.xp6(1),r.Q6J("ngTemplateOutlet",(null==w.contentTpl?null:w.contentTpl.templateRef)||null)("ngTemplateOutletContext",r.VKq(5,os,w.active||X.isPanelTransitioning(w)))}}function To(Y,fe){if(1&Y&&r.YNc(0,jo,2,7,"div",1),2&Y){const w=fe.$implicit,X=r.oxw();r.Q6J("ngIf",w.isPanelInDom()||X.isPanelTransitioning(w))}}function us(Y,fe){if(1&Y&&r._uU(0),2&Y){const w=r.oxw(2);r.Oqu(w.title)}}function ya(Y,fe){}function el(Y,fe){if(1&Y&&(r.TgZ(0,"h3",3),r.YNc(1,us,1,1,"ng-template",null,4,r.W1O),r.YNc(3,ya,0,0,"ng-template",5),r.qZA()),2&Y){const w=r.MAs(2),X=r.oxw();r.xp6(3),r.Q6J("ngTemplateOutlet",X.isTitleTemplate()?X.title:w)("ngTemplateOutletContext",X.context)}}function ca(Y,fe){if(1&Y&&(r.TgZ(0,"span"),r.SDv(1,2),r.ALo(2,"percent"),r.qZA()),2&Y){const w=r.oxw();r.xp6(2),r.pQV(r.lcZ(2,1,w.getValue()/w.max)),r.QtT(1)}}function fo(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(w);const ke=r.oxw();return ke.changeHour(ke.hourStep)}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,14),r.qZA(),r.qZA()}if(2&Y){const w=r.oxw();r.ekj("btn-sm",w.isSmallSize)("btn-lg",w.isLargeSize)("disabled",w.disabled),r.Q6J("disabled",w.disabled)}}function Ya(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(w);const ke=r.oxw();return ke.changeHour(-ke.hourStep)}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,16),r.qZA(),r.qZA()}if(2&Y){const w=r.oxw();r.ekj("btn-sm",w.isSmallSize)("btn-lg",w.isLargeSize)("disabled",w.disabled),r.Q6J("disabled",w.disabled)}}function Ao(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(w);const ke=r.oxw();return ke.changeMinute(ke.minuteStep)}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,17),r.qZA(),r.qZA()}if(2&Y){const w=r.oxw();r.ekj("btn-sm",w.isSmallSize)("btn-lg",w.isLargeSize)("disabled",w.disabled),r.Q6J("disabled",w.disabled)}}function fs(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(w);const ke=r.oxw();return ke.changeMinute(-ke.minuteStep)}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,18),r.qZA(),r.qZA()}if(2&Y){const w=r.oxw();r.ekj("btn-sm",w.isSmallSize)("btn-lg",w.isLargeSize)("disabled",w.disabled),r.Q6J("disabled",w.disabled)}}function Ca(Y,fe){1&Y&&(r.TgZ(0,"div",5),r._uU(1,":"),r.qZA())}function Ra(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(w);const ke=r.oxw(2);return ke.changeSecond(ke.secondStep)}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,21),r.qZA(),r.qZA()}if(2&Y){const w=r.oxw(2);r.ekj("btn-sm",w.isSmallSize)("btn-lg",w.isLargeSize)("disabled",w.disabled),r.Q6J("disabled",w.disabled)}}function pl(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(w);const ke=r.oxw(2);return ke.changeSecond(-ke.secondStep)}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,22),r.qZA(),r.qZA()}if(2&Y){const w=r.oxw(2);r.ekj("btn-sm",w.isSmallSize)("btn-lg",w.isLargeSize)("disabled",w.disabled),r.Q6J("disabled",w.disabled)}}function Ws(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"div",19),r.YNc(1,Ra,4,7,"button",3),r.TgZ(2,"input",20),r.NdJ("change",function(ke){return r.CHM(w),r.oxw().updateSecond(ke.target.value)})("blur",function(){return r.CHM(w),r.oxw().handleBlur()})("input",function(ke){return r.CHM(w),r.oxw().formatInput(ke.target)})("keydown.ArrowUp",function(ke){r.CHM(w);const ct=r.oxw();return ct.changeSecond(ct.secondStep),ke.preventDefault()})("keydown.ArrowDown",function(ke){r.CHM(w);const ct=r.oxw();return ct.changeSecond(-ct.secondStep),ke.preventDefault()}),r.qZA(),r.YNc(3,pl,4,7,"button",3),r.qZA()}if(2&Y){const w=r.oxw();r.xp6(1),r.Q6J("ngIf",w.spinners),r.xp6(1),r.ekj("form-control-sm",w.isSmallSize)("form-control-lg",w.isLargeSize),r.Q6J("value",w.formatMinSec(null==w.model?null:w.model.second))("readOnly",w.readonlyInputs)("disabled",w.disabled),r.xp6(1),r.Q6J("ngIf",w.spinners)}}function Po(Y,fe){1&Y&&r._UZ(0,"div",5)}function bo(Y,fe){if(1&Y&&(r.ynx(0),r.SDv(1,27),r.BQk()),2&Y){const w=r.oxw(2);r.xp6(1),r.pQV(w.i18n.getAfternoonPeriod()),r.QtT(1)}}function Ls(Y,fe){if(1&Y&&r.SDv(0,28),2&Y){const w=r.oxw(2);r.pQV(w.i18n.getMorningPeriod()),r.QtT(0)}}function ps(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"div",23),r.TgZ(1,"button",24),r.NdJ("click",function(){return r.CHM(w),r.oxw().toggleMeridian()}),r.YNc(2,bo,2,1,"ng-container",25),r.YNc(3,Ls,1,1,"ng-template",null,26,r.W1O),r.qZA(),r.qZA()}if(2&Y){const w=r.MAs(4),X=r.oxw();r.xp6(1),r.ekj("btn-sm",X.isSmallSize)("btn-lg",X.isLargeSize)("disabled",X.disabled),r.Q6J("disabled",X.disabled),r.xp6(1),r.Q6J("ngIf",X.model&&X.model.hour>=12)("ngIfElse",w)}}function tt(Y,fe){if(1&Y&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&Y){const w=r.oxw().$implicit,X=r.oxw();r.Tol(X.highlightClass),r.xp6(1),r.Oqu(w)}}function sn(Y,fe){if(1&Y&&r._uU(0),2&Y){const w=r.oxw().$implicit;r.Oqu(w)}}function ne(Y,fe){if(1&Y&&(r.YNc(0,tt,2,3,"span",1),r.YNc(1,sn,1,1,"ng-template",null,2,r.W1O)),2&Y){const w=fe.odd,X=r.MAs(2);r.Q6J("ngIf",w)("ngIfElse",X)}}function $e(Y,fe){if(1&Y&&r._UZ(0,"ngb-highlight",2),2&Y){const X=fe.term;r.Q6J("result",(0,fe.formatter)(fe.result))("term",X)}}function Lt(Y,fe){}const an=function(Y,fe,w){return{result:Y,term:fe,formatter:w}};function ti(Y,fe){if(1&Y){const w=r.EpF();r.TgZ(0,"button",3),r.NdJ("mouseenter",function(){const ct=r.CHM(w).index;return r.oxw().markActive(ct)})("click",function(){const ct=r.CHM(w).$implicit;return r.oxw().select(ct)}),r.YNc(1,Lt,0,0,"ng-template",4),r.qZA()}if(2&Y){const w=fe.$implicit,X=fe.index,ke=r.oxw(),ct=r.MAs(1);r.ekj("active",X===ke.activeIdx),r.Q6J("id",ke.id+"-"+X),r.xp6(1),r.Q6J("ngTemplateOutlet",ke.resultTemplate||ct)("ngTemplateOutletContext",r.kEZ(5,an,w,ke.term,ke.formatter))}}function pi(Y){return parseInt(`${Y}`,10)}function xi(Y){return null!=Y?`${Y}`:""}function wo(Y){return"string"==typeof Y}function ko(Y){return!isNaN(pi(Y))}function Eo(Y){return"number"==typeof Y&&isFinite(Y)&&Math.floor(Y)===Y}function ba(Y){return null!=Y}function sl(Y){return ko(Y)?`0${Y}`.slice(-2):""}function Nu(Y,fe){return Y&&Y.className&&Y.className.split&&Y.className.split(/\s+/).indexOf(fe)>=0}function Ec(Y){return(Y||document.body).getBoundingClientRect()}function Hl(Y){return Y.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}"undefined"!=typeof Element&&!Element.prototype.closest&&(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest=function(Y){let fe=this;if(!document.documentElement.contains(fe))return null;do{if(fe.matches(Y))return fe;fe=fe.parentElement||fe.parentNode}while(null!==fe&&1===fe.nodeType);return null});const Yl={animation:!0,transitionTimerDelayMs:5};let Fs=(()=>{class Y{constructor(){this.animation=Yl.animation}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})();const tl=()=>{},{transitionTimerDelayMs:Zl}=Yl,rt=new Map,Pt=(Y,fe,w,X)=>{let ke=X.context||{};const ct=rt.get(fe);if(ct)switch(X.runningTransition){case"continue":return Ee.E;case"stop":Y.run(()=>ct.transition$.complete()),ke=Object.assign(ct.context,ke),rt.delete(fe)}const Jn=w(fe,X.animation,ke)||tl;if(!X.animation||"none"===window.getComputedStyle(fe).transitionProperty)return Y.run(()=>Jn()),(0,ie.of)(void 0).pipe(function(Y){return fe=>new se.y(w=>fe.subscribe(Jn=>Y.run(()=>w.next(Jn)),Jn=>Y.run(()=>w.error(Jn)),()=>Y.run(()=>w.complete())))}(Y));const Ir=new he.xQ,vi=new he.xQ,zi=Ir.pipe(function(...Y){return fe=>(0,Be.z)(fe,(0,ie.of)(...Y))}(!0));rt.set(fe,{transition$:Ir,complete:()=>{vi.next(),vi.complete()},context:ke});const Do=function(Y){const{transitionDelay:fe,transitionDuration:w}=window.getComputedStyle(Y);return 1e3*(parseFloat(fe)+parseFloat(w))}(fe);return Y.runOutsideAngular(()=>{const xs=(0,ge.R)(fe,"transitionend").pipe((0,Zt.R)(zi),(0,Ut.h)(({target:Rs})=>Rs===fe));y((0,De.H)(Do+Zl).pipe((0,Zt.R)(zi)),xs,vi).pipe((0,Zt.R)(zi)).subscribe(()=>{rt.delete(fe),Y.run(()=>{Jn(),Ir.next(),Ir.complete()})})}),Ir.asObservable()},Me=(Y,fe,w)=>{let{direction:X,maxHeight:ke}=w;const{classList:ct}=Y;function Jn(){ct.add("collapse"),"show"===X?ct.add("show"):ct.remove("show")}if(fe)return ke||(ke=function(Y){if("undefined"==typeof navigator)return"0px";const{classList:fe}=Y,w=fe.contains("show");w||fe.add("show"),Y.style.height="";const X=Y.getBoundingClientRect().height+"px";return w||fe.remove("show"),X}(Y),w.maxHeight=ke,Y.style.height="show"!==X?ke:"0px",ct.remove("collapse"),ct.remove("collapsing"),ct.remove("show"),Ec(Y),ct.add("collapsing")),Y.style.height="show"===X?ke:"0px",()=>{Jn(),ct.remove("collapsing"),Y.style.height=""};Jn()};let au=(()=>{class Y{constructor(w){this._ngbConfig=w,this.dismissible=!0,this.type="warning"}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(w){this._animation=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(Fs))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(Fs))},token:Y,providedIn:"root"}),Y})();const Wa=({classList:Y})=>{Y.remove("show")};let Rl=(()=>{class Y{constructor(w,X,ke,ct){this._renderer=X,this._element=ke,this._zone=ct,this.closed=new r.vpe,this.dismissible=w.dismissible,this.type=w.type,this.animation=w.animation}close(){const w=Pt(this._zone,this._element.nativeElement,Wa,{animation:this.animation,runningTransition:"continue"});return w.subscribe(()=>this.closed.emit()),w}ngOnChanges(w){const X=w.type;X&&!X.firstChange&&(this._renderer.removeClass(this._element.nativeElement,`alert-${X.previousValue}`),this._renderer.addClass(this._element.nativeElement,`alert-${X.currentValue}`))}ngOnInit(){this._renderer.addClass(this._element.nativeElement,`alert-${this.type}`)}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(au),r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(r.R0b))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-alert"]],hostAttrs:["role","alert",1,"alert","show"],hostVars:4,hostBindings:function(w,X){2&w&&r.ekj("fade",X.animation)("alert-dismissible",X.dismissible)},inputs:{dismissible:"dismissible",type:"type",animation:"animation"},outputs:{closed:"closed"},exportAs:["ngbAlert"],features:[r.TTD],ngContentSelectors:Hi,decls:2,vars:1,consts:function(){let fe;return fe="Close",[["type","button","class","close","aria-label",fe,3,"click",4,"ngIf"],["type","button","aria-label",fe,1,"close",3,"click"],["aria-hidden","true"]]},template:function(w,X){1&w&&(r.F$t(),r.Hsn(0),r.YNc(1,ki,3,0,"button",0)),2&w&&(r.xp6(1),r.Q6J("ngIf",X.dismissible))},directives:[u.O5],styles:["ngb-alert{display:block}"],encapsulation:2,changeDetection:0}),Y})(),nc=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({imports:[[u.ez]]}),Y})(),wr=(()=>{class Y{constructor(w){this._ngbConfig=w}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(w){this._animation=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(Fs))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(Fs))},token:Y,providedIn:"root"}),Y})(),fa=(()=>{class Y{constructor(w,X,ke){this._element=w,this._zone=ke,this.collapsed=!1,this.ngbCollapseChange=new r.vpe,this.shown=new r.vpe,this.hidden=new r.vpe,this.animation=X.animation}ngOnInit(){this._runTransition(this.collapsed,!1)}ngOnChanges({collapsed:w}){w.firstChange||this._runTransitionWithEvents(this.collapsed,this.animation)}toggle(w=this.collapsed){this.collapsed=!w,this.ngbCollapseChange.next(this.collapsed),this._runTransitionWithEvents(this.collapsed,this.animation)}_runTransition(w,X){return Pt(this._zone,this._element.nativeElement,Me,{animation:X,runningTransition:"stop",context:{direction:w?"hide":"show"}})}_runTransitionWithEvents(w,X){this._runTransition(w,X).subscribe(()=>{w?this.hidden.emit():this.shown.emit()})}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.SBq),r.Y36(wr),r.Y36(r.R0b))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbCollapse",""]],inputs:{collapsed:["ngbCollapse","collapsed"],animation:"animation"},outputs:{ngbCollapseChange:"ngbCollapseChange",shown:"shown",hidden:"hidden"},exportAs:["ngbCollapse"],features:[r.TTD]}),Y})(),pu=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({}),Y})();class aa{constructor(fe,w,X){this.year=Eo(fe)?fe:null,this.month=Eo(w)?w:null,this.day=Eo(X)?X:null}static from(fe){return fe instanceof aa?fe:fe?new aa(fe.year,fe.month,fe.day):null}equals(fe){return null!=fe&&this.year===fe.year&&this.month===fe.month&&this.day===fe.day}before(fe){return!!fe&&(this.year===fe.year?this.month===fe.month?this.day!==fe.day&&this.dayfe.day:this.month>fe.month:this.year>fe.year)}}function jl(Y){return new aa(Y.getFullYear(),Y.getMonth()+1,Y.getDate())}function bl(Y){const fe=new Date(Y.year,Y.month-1,Y.day,12);return isNaN(fe.getTime())||fe.setFullYear(Y.year),fe}function El(){return new ks}let Ul=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:El,token:Y,providedIn:"root"}),Y})(),ks=(()=>{class Y extends Ul{getDaysPerWeek(){return 7}getMonths(){return[1,2,3,4,5,6,7,8,9,10,11,12]}getWeeksPerMonth(){return 6}getNext(w,X="d",ke=1){let ct=bl(w),Jn=!0,Ir=ct.getMonth();switch(X){case"y":ct.setFullYear(ct.getFullYear()+ke);break;case"m":Ir+=ke,ct.setMonth(Ir),Ir%=12,Ir<0&&(Ir+=12);break;case"d":ct.setDate(ct.getDate()+ke),Jn=!1;break;default:return w}return Jn&&ct.getMonth()!==Ir&&ct.setDate(0),jl(ct)}getPrev(w,X="d",ke=1){return this.getNext(w,X,-ke)}getWeekday(w){let ke=bl(w).getDay();return 0===ke?7:ke}getWeekNumber(w,X){7===X&&(X=0);const Jn=bl(w[(11-X)%7]);Jn.setDate(Jn.getDate()+4-(Jn.getDay()||7));const Ir=Jn.getTime();return Jn.setMonth(0),Jn.setDate(1),Math.floor(Math.round((Ir-Jn.getTime())/864e5)/7)+1}getToday(){return jl(new Date)}isValid(w){if(!(w&&Eo(w.year)&&Eo(w.month)&&Eo(w.day)&&0!==w.year))return!1;const X=bl(w);return!isNaN(X.getTime())&&X.getFullYear()===w.year&&X.getMonth()+1===w.month&&X.getDate()===w.day}}return Y.\u0275fac=function(){let fe;return function(X){return(fe||(fe=r.n5z(Y)))(X||Y)}}(),Y.\u0275prov=r.Yz7({token:Y,factory:Y.\u0275fac}),Y})();function V(Y,fe){return!function(Y,fe){return!Y&&!fe||!!Y&&!!fe&&Y.equals(fe)}(Y,fe)}function Ae(Y,fe){return!(!Y&&!fe||Y&&fe&&Y.year===fe.year&&Y.month===fe.month)}function ut(Y,fe,w){return Y&&fe&&Y.before(fe)?fe:Y&&w&&Y.after(w)?w:Y||null}function un(Y,fe){const{minDate:w,maxDate:X,disabled:ke,markDisabled:ct}=fe;return!(null==Y||ke||ct&&ct(Y,{year:Y.year,month:Y.month})||w&&Y.before(w)||X&&Y.after(X))}let Cr=(()=>{class Y{getMonthLabel(w){return`${this.getMonthFullName(w.month,w.year)} ${this.getYearNumerals(w.year)}`}getDayNumerals(w){return`${w.day}`}getWeekNumerals(w){return`${w}`}getYearNumerals(w){return`${w}`}getWeekLabel(){return""}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return function(Y){return new hr(Y)}(r.LFG(r.soG))},token:Y,providedIn:"root"}),Y})(),hr=(()=>{class Y extends Cr{constructor(w){super(),this._locale=w,this._monthsShort=(0,u.UT)(w,u.x.Standalone,u.Tn.Abbreviated),this._monthsFull=(0,u.UT)(w,u.x.Standalone,u.Tn.Wide)}getWeekdayLabel(w,X){const ke=(0,u.Mn)(this._locale,u.x.Standalone,void 0===X?u.Tn.Short:X);return ke.map((Jn,Ir)=>ke[(Ir+1)%7])[w-1]||""}getMonthShortName(w){return this._monthsShort[w-1]||""}getMonthFullName(w){return this._monthsFull[w-1]||""}getDayAriaLabel(w){const X=new Date(w.year,w.month-1,w.day);return(0,u.p6)(X,"fullDate",this._locale)}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(r.soG))},Y.\u0275prov=r.Yz7({token:Y,factory:Y.\u0275fac}),Y})(),ao=(()=>{class Y{constructor(w,X){this._calendar=w,this._i18n=X,this._VALIDATORS={dayTemplateData:ke=>{if(this._state.dayTemplateData!==ke)return{dayTemplateData:ke}},displayMonths:ke=>{if(Eo(ke=pi(ke))&&ke>0&&this._state.displayMonths!==ke)return{displayMonths:ke}},disabled:ke=>{if(this._state.disabled!==ke)return{disabled:ke}},firstDayOfWeek:ke=>{if(Eo(ke=pi(ke))&&ke>=0&&this._state.firstDayOfWeek!==ke)return{firstDayOfWeek:ke}},focusVisible:ke=>{if(this._state.focusVisible!==ke&&!this._state.disabled)return{focusVisible:ke}},markDisabled:ke=>{if(this._state.markDisabled!==ke)return{markDisabled:ke}},maxDate:ke=>{const ct=this.toValidDate(ke,null);if(V(this._state.maxDate,ct))return{maxDate:ct}},minDate:ke=>{const ct=this.toValidDate(ke,null);if(V(this._state.minDate,ct))return{minDate:ct}},navigation:ke=>{if(this._state.navigation!==ke)return{navigation:ke}},outsideDays:ke=>{if(this._state.outsideDays!==ke)return{outsideDays:ke}},weekdays:ke=>{const ct=!0===ke||!1===ke?u.Tn.Short:ke,Jn=!0!==ke&&!1!==ke||ke;if(this._state.weekdayWidth!==ct||this._state.weekdaysVisible!==Jn)return{weekdayWidth:ct,weekdaysVisible:Jn}}},this._model$=new he.xQ,this._dateSelect$=new he.xQ,this._state={dayTemplateData:null,markDisabled:null,maxDate:null,minDate:null,disabled:!1,displayMonths:1,firstDate:null,firstDayOfWeek:1,lastDate:null,focusDate:null,focusVisible:!1,months:[],navigation:"select",outsideDays:"visible",prevDisabled:!1,nextDisabled:!1,selectedDate:null,selectBoxes:{years:[],months:[]},weekdayWidth:u.Tn.Short,weekdaysVisible:!0}}get model$(){return this._model$.pipe((0,Ut.h)(w=>w.months.length>0))}get dateSelect$(){return this._dateSelect$.pipe((0,Ut.h)(w=>null!==w))}set(w){let X=Object.keys(w).map(ke=>this._VALIDATORS[ke](w[ke])).reduce((ke,ct)=>Object.assign(Object.assign({},ke),ct),{});Object.keys(X).length>0&&this._nextState(X)}focus(w){const X=this.toValidDate(w,null);null!=X&&!this._state.disabled&&V(this._state.focusDate,X)&&this._nextState({focusDate:w})}focusSelect(){un(this._state.focusDate,this._state)&&this.select(this._state.focusDate,{emitEvent:!0})}open(w){const X=this.toValidDate(w,this._calendar.getToday());null!=X&&!this._state.disabled&&(!this._state.firstDate||Ae(this._state.firstDate,X))&&this._nextState({firstDate:X})}select(w,X={}){const ke=this.toValidDate(w,null);null!=ke&&!this._state.disabled&&(V(this._state.selectedDate,ke)&&this._nextState({selectedDate:ke}),X.emitEvent&&un(ke,this._state)&&this._dateSelect$.next(ke))}toValidDate(w,X){const ke=aa.from(w);return void 0===X&&(X=this._calendar.getToday()),this._calendar.isValid(ke)?ke:X}getMonth(w){for(let X of this._state.months)if(w.month===X.number&&w.year===X.year)return X;throw new Error(`month ${w.month} of year ${w.year} not found`)}_nextState(w){const X=this._updateState(w);this._patchContexts(X),this._state=X,this._model$.next(this._state)}_patchContexts(w){const{months:X,displayMonths:ke,selectedDate:ct,focusDate:Jn,focusVisible:Ir,disabled:vi,outsideDays:zi}=w;w.months.forEach(Do=>{Do.weeks.forEach(xs=>{xs.days.forEach(Xo=>{Jn&&(Xo.context.focused=Jn.equals(Xo.date)&&Ir),Xo.tabindex=!vi&&Jn&&Xo.date.equals(Jn)&&Jn.month===Do.number?0:-1,!0===vi&&(Xo.context.disabled=!0),void 0!==ct&&(Xo.context.selected=null!==ct&&ct.equals(Xo.date)),Do.number!==Xo.date.month&&(Xo.hidden="hidden"===zi||"collapsed"===zi||ke>1&&Xo.date.after(X[0].firstDate)&&Xo.date.before(X[ke-1].lastDate))})})})}_updateState(w){const X=Object.assign({},this._state,w);let ke=X.firstDate;if(("minDate"in w||"maxDate"in w)&&(function(Y,fe){if(fe&&Y&&fe.before(Y))throw new Error(`'maxDate' ${fe} should be greater than 'minDate' ${Y}`)}(X.minDate,X.maxDate),X.focusDate=ut(X.focusDate,X.minDate,X.maxDate),X.firstDate=ut(X.firstDate,X.minDate,X.maxDate),ke=X.focusDate),"disabled"in w&&(X.focusVisible=!1),"selectedDate"in w&&0===this._state.months.length&&(ke=X.selectedDate),"focusVisible"in w||"focusDate"in w&&(X.focusDate=ut(X.focusDate,X.minDate,X.maxDate),ke=X.focusDate,0!==X.months.length&&X.focusDate&&!X.focusDate.before(X.firstDate)&&!X.focusDate.after(X.lastDate)))return X;if("firstDate"in w&&(X.firstDate=ut(X.firstDate,X.minDate,X.maxDate),ke=X.firstDate),ke){const Jn=function(Y,fe,w,X,ke){const{displayMonths:ct,months:Jn}=w,Ir=Jn.splice(0,Jn.length);return Array.from({length:ct},(zi,Do)=>{const xs=Object.assign(Y.getNext(fe,"m",Do),{day:1});if(Jn[Do]=null,!ke){const Xo=Ir.findIndex(Rs=>Rs.firstDate.equals(xs));-1!==Xo&&(Jn[Do]=Ir.splice(Xo,1)[0])}return xs}).forEach((zi,Do)=>{null===Jn[Do]&&(Jn[Do]=function(Y,fe,w,X,ke={}){const{dayTemplateData:ct,minDate:Jn,maxDate:Ir,firstDayOfWeek:vi,markDisabled:zi,outsideDays:Do,weekdayWidth:xs,weekdaysVisible:Xo}=w,Rs=Y.getToday();ke.firstDate=null,ke.lastDate=null,ke.number=fe.month,ke.year=fe.year,ke.weeks=ke.weeks||[],ke.weekdays=ke.weekdays||[],fe=function(Y,fe,w){const X=Y.getDaysPerWeek(),ke=new aa(fe.year,fe.month,1),ct=Y.getWeekday(ke)%X;return Y.getPrev(ke,"d",(X+ct-w)%X)}(Y,fe,vi),Xo||(ke.weekdays.length=0);for(let ma=0;mand.date),vi),Vs.collapsed="collapsed"===Do&&_c[0].date.month!==ke.number&&_c[_c.length-1].date.month!==ke.number}return ke}(Y,zi,w,X,Ir.shift()||{}))}),Jn}(this._calendar,ke,X,this._i18n,"dayTemplateData"in w||"firstDayOfWeek"in w||"markDisabled"in w||"minDate"in w||"maxDate"in w||"disabled"in w||"outsideDays"in w||"weekdaysVisible"in w);X.months=Jn,X.firstDate=Jn[0].firstDate,X.lastDate=Jn[Jn.length-1].lastDate,"selectedDate"in w&&!un(X.selectedDate,X)&&(X.selectedDate=null),"firstDate"in w&&(!X.focusDate||X.focusDate.before(X.firstDate)||X.focusDate.after(X.lastDate))&&(X.focusDate=ke);const Ir=!this._state.firstDate||this._state.firstDate.year!==X.firstDate.year,vi=!this._state.firstDate||this._state.firstDate.month!==X.firstDate.month;"select"===X.navigation?(("minDate"in w||"maxDate"in w||0===X.selectBoxes.years.length||Ir)&&(X.selectBoxes.years=function(Y,fe,w){if(!Y)return[];const X=fe?Math.max(fe.year,Y.year-500):Y.year-10,ct=(w?Math.min(w.year,Y.year+500):Y.year+10)-X+1,Jn=Array(ct);for(let Ir=0;IrJn===w.month);ke=ke.slice(ct)}if(X&&fe.year===X.year){const ct=ke.findIndex(Jn=>Jn===X.month);ke=ke.slice(0,ct+1)}return ke}(this._calendar,X.firstDate,X.minDate,X.maxDate))):X.selectBoxes={years:[],months:[]},("arrows"===X.navigation||"select"===X.navigation)&&(vi||Ir||"minDate"in w||"maxDate"in w||"disabled"in w)&&(X.prevDisabled=X.disabled||function(Y,fe,w){const X=Object.assign(Y.getPrev(fe,"m"),{day:1});return null!=w&&(X.year===w.year&&X.month{return(Y=ys||(ys={}))[Y.PREV=0]="PREV",Y[Y.NEXT=1]="NEXT",ys;var Y})();let Na=(()=>{class Y{constructor(){this.displayMonths=1,this.firstDayOfWeek=1,this.navigation="select",this.outsideDays="visible",this.showWeekNumbers=!1,this.weekdays=u.Tn.Short}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})();function Tl(){return new ed}let Qs=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:Tl,token:Y,providedIn:"root"}),Y})(),ed=(()=>{class Y extends Qs{fromModel(w){return w&&Eo(w.year)&&Eo(w.month)&&Eo(w.day)?{year:w.year,month:w.month,day:w.day}:null}toModel(w){return w&&Eo(w.year)&&Eo(w.month)&&Eo(w.day)?{year:w.year,month:w.month,day:w.day}:null}}return Y.\u0275fac=function(){let fe;return function(X){return(fe||(fe=r.n5z(Y)))(X||Y)}}(),Y.\u0275prov=r.Yz7({token:Y,factory:Y.\u0275fac}),Y})(),$c=(()=>{class Y{constructor(w){this.templateRef=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.Rgc))},Y.\u0275dir=r.lG2({type:Y,selectors:[["ng-template","ngbDatepickerContent",""]]}),Y})(),Gl=(()=>{class Y{constructor(w,X,ke,ct,Jn,Ir,vi,zi){this._service=w,this._calendar=X,this.i18n=ke,this._elementRef=Ir,this._ngbDateAdapter=vi,this._ngZone=zi,this._controlValue=null,this._destroyed$=new he.xQ,this._publicState={},this.navigate=new r.vpe,this.dateSelect=new r.vpe,this.onChange=Do=>{},this.onTouched=()=>{},["dayTemplate","dayTemplateData","displayMonths","firstDayOfWeek","footerTemplate","markDisabled","minDate","maxDate","navigation","outsideDays","showWeekNumbers","startDate","weekdays"].forEach(Do=>this[Do]=ct[Do]),w.dateSelect$.pipe((0,Zt.R)(this._destroyed$)).subscribe(Do=>{this.dateSelect.emit(Do)}),w.model$.pipe((0,Zt.R)(this._destroyed$)).subscribe(Do=>{const xs=Do.firstDate,Xo=this.model?this.model.firstDate:null;this._publicState={maxDate:Do.maxDate,minDate:Do.minDate,firstDate:Do.firstDate,lastDate:Do.lastDate,focusedDate:Do.focusDate,months:Do.months.map(nd=>nd.firstDate)};let Rs=!1;if(!xs.equals(Xo)&&(this.navigate.emit({current:Xo?{year:Xo.year,month:Xo.month}:null,next:{year:xs.year,month:xs.month},preventDefault:()=>Rs=!0}),Rs&&null!==Xo))return void this._service.open(Xo);const ma=Do.selectedDate,Vs=Do.focusDate,_c=this.model?this.model.focusDate:null;this.model=Do,V(ma,this._controlValue)&&(this._controlValue=ma,this.onTouched(),this.onChange(this._ngbDateAdapter.toModel(ma))),V(Vs,_c)&&_c&&Do.focusVisible&&this.focus(),Jn.markForCheck()})}get state(){return this._publicState}get calendar(){return this._calendar}focusDate(w){this._service.focus(aa.from(w))}focusSelect(){this._service.focusSelect()}focus(){this._ngZone.onStable.asObservable().pipe((0,Bt.q)(1)).subscribe(()=>{const w=this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]');w&&w.focus()})}navigateTo(w){this._service.open(aa.from(w?w.day?w:Object.assign(Object.assign({},w),{day:1}):null))}ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{const w=(0,ge.R)(this._contentEl.nativeElement,"focusin"),X=(0,ge.R)(this._contentEl.nativeElement,"focusout"),{nativeElement:ke}=this._elementRef;(0,ze.T)(w,X).pipe((0,Ut.h)(({target:ct,relatedTarget:Jn})=>!(Nu(ct,"ngb-dp-day")&&Nu(Jn,"ngb-dp-day")&&ke.contains(ct)&&ke.contains(Jn))),(0,Zt.R)(this._destroyed$)).subscribe(({type:ct})=>this._ngZone.run(()=>this._service.set({focusVisible:"focusin"===ct})))})}ngOnDestroy(){this._destroyed$.next()}ngOnInit(){if(void 0===this.model){const w={};["dayTemplateData","displayMonths","markDisabled","firstDayOfWeek","navigation","minDate","maxDate","outsideDays","weekdays"].forEach(X=>w[X]=this[X]),this._service.set(w),this.navigateTo(this.startDate)}this.dayTemplate||(this.dayTemplate=this._defaultDayTemplate)}ngOnChanges(w){const X={};if(["dayTemplateData","displayMonths","markDisabled","firstDayOfWeek","navigation","minDate","maxDate","outsideDays","weekdays"].filter(ke=>ke in w).forEach(ke=>X[ke]=this[ke]),this._service.set(X),"startDate"in w){const{currentValue:ke,previousValue:ct}=w.startDate;Ae(ct,ke)&&this.navigateTo(this.startDate)}}onDateSelect(w){this._service.focus(w),this._service.select(w,{emitEvent:!0})}onNavigateDateSelect(w){this._service.open(w)}onNavigateEvent(w){switch(w){case ys.PREV:this._service.open(this._calendar.getPrev(this.model.firstDate,"m",1));break;case ys.NEXT:this._service.open(this._calendar.getNext(this.model.firstDate,"m",1))}}registerOnChange(w){this.onChange=w}registerOnTouched(w){this.onTouched=w}setDisabledState(w){this._service.set({disabled:w})}writeValue(w){this._controlValue=aa.from(this._ngbDateAdapter.fromModel(w)),this._service.select(this._controlValue)}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(ao),r.Y36(Ul),r.Y36(Cr),r.Y36(Na),r.Y36(r.sBO),r.Y36(r.SBq),r.Y36(Qs),r.Y36(r.R0b))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-datepicker"]],contentQueries:function(w,X,ke){if(1&w&&r.Suo(ke,$c,7),2&w){let ct;r.iGM(ct=r.CRH())&&(X.contentTemplate=ct.first)}},viewQuery:function(w,X){if(1&w&&(r.Gf(Fr,7),r.Gf(Gn,7)),2&w){let ke;r.iGM(ke=r.CRH())&&(X._defaultDayTemplate=ke.first),r.iGM(ke=r.CRH())&&(X._contentEl=ke.first)}},inputs:{dayTemplate:"dayTemplate",dayTemplateData:"dayTemplateData",displayMonths:"displayMonths",firstDayOfWeek:"firstDayOfWeek",footerTemplate:"footerTemplate",markDisabled:"markDisabled",maxDate:"maxDate",minDate:"minDate",navigation:"navigation",outsideDays:"outsideDays",showWeekNumbers:"showWeekNumbers",startDate:"startDate",weekdays:"weekdays"},outputs:{navigate:"navigate",dateSelect:"dateSelect"},exportAs:["ngbDatepicker"],features:[r._Bn([{provide:Mr.JU,useExisting:(0,r.Gpc)(()=>Y),multi:!0},ao]),r.TTD],decls:10,vars:5,consts:[["defaultDayTemplate",""],["defaultContentTemplate",""],[1,"ngb-dp-header"],[3,"date","months","disabled","showSelect","prevDisabled","nextDisabled","selectBoxes","navigate","select",4,"ngIf"],[1,"ngb-dp-content"],["content",""],[3,"ngTemplateOutlet"],["ngbDatepickerDayView","",3,"date","currentMonth","selected","disabled","focused"],["class","ngb-dp-month",4,"ngFor","ngForOf"],[1,"ngb-dp-month"],["class","ngb-dp-month-name",4,"ngIf"],[3,"month"],[1,"ngb-dp-month-name"],[3,"date","months","disabled","showSelect","prevDisabled","nextDisabled","selectBoxes","navigate","select"]],template:function(w,X){if(1&w&&(r.YNc(0,Jr,1,5,"ng-template",null,0,r.W1O),r.YNc(2,br,1,1,"ng-template",null,1,r.W1O),r.TgZ(4,"div",2),r.YNc(5,Dr,1,7,"ngb-datepicker-navigation",3),r.qZA(),r.TgZ(6,"div",4,5),r.YNc(8,gn,0,0,"ng-template",6),r.qZA(),r.YNc(9,yn,0,0,"ng-template",6)),2&w){const ke=r.MAs(3);r.xp6(5),r.Q6J("ngIf","none"!==X.navigation),r.xp6(1),r.ekj("ngb-dp-months",!X.contentTemplate),r.xp6(2),r.Q6J("ngTemplateOutlet",(null==X.contentTemplate?null:X.contentTemplate.templateRef)||ke),r.xp6(1),r.Q6J("ngTemplateOutlet",X.footerTemplate)}},directives:function(){return[u.O5,u.tP,Hn,u.sg,pa,hl]},styles:["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1050}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}"],encapsulation:2,changeDetection:0}),Y})();var $i=(()=>{return(Y=$i||($i={}))[Y.Tab=9]="Tab",Y[Y.Enter=13]="Enter",Y[Y.Escape=27]="Escape",Y[Y.Space=32]="Space",Y[Y.PageUp=33]="PageUp",Y[Y.PageDown=34]="PageDown",Y[Y.End=35]="End",Y[Y.Home=36]="Home",Y[Y.ArrowLeft=37]="ArrowLeft",Y[Y.ArrowUp=38]="ArrowUp",Y[Y.ArrowRight=39]="ArrowRight",Y[Y.ArrowDown=40]="ArrowDown",$i;var Y})();let xo=(()=>{class Y{processKey(w,X){const{state:ke,calendar:ct}=X;switch(w.which){case $i.PageUp:X.focusDate(ct.getPrev(ke.focusedDate,w.shiftKey?"y":"m",1));break;case $i.PageDown:X.focusDate(ct.getNext(ke.focusedDate,w.shiftKey?"y":"m",1));break;case $i.End:X.focusDate(w.shiftKey?ke.maxDate:ke.lastDate);break;case $i.Home:X.focusDate(w.shiftKey?ke.minDate:ke.firstDate);break;case $i.ArrowLeft:X.focusDate(ct.getPrev(ke.focusedDate,"d",1));break;case $i.ArrowUp:X.focusDate(ct.getPrev(ke.focusedDate,"d",ct.getDaysPerWeek()));break;case $i.ArrowRight:X.focusDate(ct.getNext(ke.focusedDate,"d",1));break;case $i.ArrowDown:X.focusDate(ct.getNext(ke.focusedDate,"d",ct.getDaysPerWeek()));break;case $i.Enter:case $i.Space:X.focusSelect();break;default:return}w.preventDefault(),w.stopPropagation()}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})(),pa=(()=>{class Y{constructor(w,X,ke,ct){this.i18n=w,this.datepicker=X,this._keyboardService=ke,this._service=ct}set month(w){this.viewModel=this._service.getMonth(w)}onKeyDown(w){this._keyboardService.processKey(w,this.datepicker)}doSelect(w){!w.context.disabled&&!w.hidden&&this.datepicker.onDateSelect(w.date)}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(Cr),r.Y36(Gl),r.Y36(xo),r.Y36(ao))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-datepicker-month"]],hostAttrs:["role","grid"],hostBindings:function(w,X){1&w&&r.NdJ("keydown",function(ct){return X.onKeyDown(ct)})},inputs:{month:"month"},decls:2,vars:2,consts:[["class","ngb-dp-week ngb-dp-weekdays","role","row",4,"ngIf"],["ngFor","",3,"ngForOf"],["role","row",1,"ngb-dp-week","ngb-dp-weekdays"],["class","ngb-dp-weekday ngb-dp-showweek small",4,"ngIf"],["class","ngb-dp-weekday small","role","columnheader",4,"ngFor","ngForOf"],[1,"ngb-dp-weekday","ngb-dp-showweek","small"],["role","columnheader",1,"ngb-dp-weekday","small"],["class","ngb-dp-week","role","row",4,"ngIf"],["role","row",1,"ngb-dp-week"],["class","ngb-dp-week-number small text-muted",4,"ngIf"],["class","ngb-dp-day","role","gridcell",3,"disabled","tabindex","hidden","ngb-dp-today","click",4,"ngFor","ngForOf"],[1,"ngb-dp-week-number","small","text-muted"],["role","gridcell",1,"ngb-dp-day",3,"tabindex","click"],[3,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(w,X){1&w&&(r.YNc(0,Vn,3,2,"div",0),r.YNc(1,Ge,1,1,"ng-template",1)),2&w&&(r.Q6J("ngIf",X.viewModel.weekdays.length>0),r.xp6(1),r.Q6J("ngForOf",X.viewModel.weeks))},directives:[u.O5,u.sg,u.tP],styles:['ngb-datepicker-month{display:block}.ngb-dp-week-number,.ngb-dp-weekday{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#5bc0de;color:var(--info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0;background-color:#f8f9fa;background-color:var(--light)}.ngb-dp-day,.ngb-dp-week-number,.ngb-dp-weekday{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex="0"]{z-index:1}'],encapsulation:2}),Y})(),hl=(()=>{class Y{constructor(w){this.i18n=w,this.navigation=ys,this.months=[],this.navigate=new r.vpe,this.select=new r.vpe}onClickPrev(w){w.currentTarget.focus(),this.navigate.emit(this.navigation.PREV)}onClickNext(w){w.currentTarget.focus(),this.navigate.emit(this.navigation.NEXT)}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(Cr))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-datepicker-navigation"]],inputs:{months:"months",date:"date",disabled:"disabled",showSelect:"showSelect",prevDisabled:"prevDisabled",nextDisabled:"nextDisabled",selectBoxes:"selectBoxes"},outputs:{navigate:"navigate",select:"select"},decls:8,vars:4,consts:function(){let fe,w,X,ke;return fe="Previous month",w="Previous month",X="Next month",ke="Next month",[[1,"ngb-dp-arrow"],["type","button","aria-label",fe,"title",w,1,"btn","btn-link","ngb-dp-arrow-btn",3,"disabled","click"],[1,"ngb-dp-navigation-chevron"],["class","ngb-dp-navigation-select",3,"date","disabled","months","years","select",4,"ngIf"],[4,"ngIf"],[1,"ngb-dp-arrow","right"],["type","button","aria-label",X,"title",ke,1,"btn","btn-link","ngb-dp-arrow-btn",3,"disabled","click"],[1,"ngb-dp-navigation-select",3,"date","disabled","months","years","select"],["ngFor","",3,"ngForOf"],["class","ngb-dp-arrow",4,"ngIf"],[1,"ngb-dp-month-name"]]},template:function(w,X){1&w&&(r.TgZ(0,"div",0),r.TgZ(1,"button",1),r.NdJ("click",function(ct){return X.onClickPrev(ct)}),r._UZ(2,"span",2),r.qZA(),r.qZA(),r.YNc(3,kr,1,4,"ngb-datepicker-navigation-select",3),r.YNc(4,Wr,1,1,void 0,4),r.TgZ(5,"div",5),r.TgZ(6,"button",6),r.NdJ("click",function(ct){return X.onClickNext(ct)}),r._UZ(7,"span",2),r.qZA(),r.qZA()),2&w&&(r.xp6(1),r.Q6J("disabled",X.prevDisabled),r.xp6(2),r.Q6J("ngIf",X.showSelect),r.xp6(1),r.Q6J("ngIf",!X.showSelect),r.xp6(2),r.Q6J("disabled",X.nextDisabled))},directives:function(){return[u.O5,Xn,u.sg]},styles:["ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{justify-content:flex-end}.ngb-dp-arrow.right .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}"],encapsulation:2,changeDetection:0}),Y})();const Bl=(Y,fe)=>!!fe&&fe.some(w=>w.contains(Y)),md=(Y,fe)=>!fe||null!=function(Y,fe){return fe&&void 0!==Y.closest?Y.closest(fe):null}(Y,fe),td="undefined"!=typeof navigator&&!!navigator.userAgent&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||/Macintosh/.test(navigator.userAgent)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2||/Android/.test(navigator.userAgent));function la(Y,fe,w,X,ke,ct,Jn,Ir){w&&Y.runOutsideAngular((Y=>td?()=>setTimeout(()=>Y(),100):Y)(()=>{const zi=(0,ge.R)(fe,"keydown").pipe((0,Zt.R)(ke),(0,Ut.h)(Xo=>Xo.which===$i.Escape),(0,Zn.b)(Xo=>Xo.preventDefault())),Do=(0,ge.R)(fe,"mousedown").pipe((0,bt.U)(Xo=>{const Rs=Xo.target;return 2!==Xo.button&&!Bl(Rs,Jn)&&("inside"===w?Bl(Rs,ct)&&md(Rs,Ir):"outside"===w?!Bl(Rs,ct):md(Rs,Ir)||!Bl(Rs,ct))}),(0,Zt.R)(ke)),xs=(0,ge.R)(fe,"mouseup").pipe(je(Do),(0,Ut.h)(([Xo,Rs])=>Rs),(0,Ur.g)(0),(0,Zt.R)(ke));y([zi.pipe((0,bt.U)(Xo=>0)),xs.pipe((0,bt.U)(Xo=>1))]).subscribe(Xo=>Y.run(()=>X(Xo)))}))}const Zc=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","[contenteditable]",'[tabindex]:not([tabindex="-1"])'].join(", ");function ic(Y){const fe=Array.from(Y.querySelectorAll(Zc)).filter(w=>-1!==w.tabIndex);return[fe[0],fe[fe.length-1]]}const df=(Y,fe,w,X=!1)=>{Y.runOutsideAngular(()=>{const ke=(0,ge.R)(fe,"focusin").pipe((0,Zt.R)(w),(0,bt.U)(ct=>ct.target));(0,ge.R)(fe,"keydown").pipe((0,Zt.R)(w),(0,Ut.h)(ct=>ct.which===$i.Tab),je(ke)).subscribe(([ct,Jn])=>{const[Ir,vi]=ic(fe);(Jn===Ir||Jn===fe)&&ct.shiftKey&&(vi.focus(),ct.preventDefault()),Jn===vi&&!ct.shiftKey&&(Ir.focus(),ct.preventDefault())}),X&&(0,ge.R)(fe,"click").pipe((0,Zt.R)(w),je(ke),(0,bt.U)(ct=>ct[1])).subscribe(ct=>ct.focus())})},Wd=/\s+/,Jd=new class{getAllStyles(fe){return window.getComputedStyle(fe)}getStyle(fe,w){return this.getAllStyles(fe)[w]}isStaticPositioned(fe){return"static"===(this.getStyle(fe,"position")||"static")}offsetParent(fe){let w=fe.offsetParent||document.documentElement;for(;w&&w!==document.documentElement&&this.isStaticPositioned(w);)w=w.offsetParent;return w||document.documentElement}position(fe,w=!0){let X,ke={width:0,height:0,top:0,bottom:0,left:0,right:0};if("fixed"===this.getStyle(fe,"position"))X=fe.getBoundingClientRect(),X={top:X.top,bottom:X.bottom,left:X.left,right:X.right,height:X.height,width:X.width};else{const ct=this.offsetParent(fe);X=this.offset(fe,!1),ct!==document.documentElement&&(ke=this.offset(ct,!1)),ke.top+=ct.clientTop,ke.left+=ct.clientLeft}return X.top-=ke.top,X.bottom-=ke.top,X.left-=ke.left,X.right-=ke.left,w&&(X.top=Math.round(X.top),X.bottom=Math.round(X.bottom),X.left=Math.round(X.left),X.right=Math.round(X.right)),X}offset(fe,w=!0){const X=fe.getBoundingClientRect(),ke_top=window.pageYOffset-document.documentElement.clientTop,ke_left=window.pageXOffset-document.documentElement.clientLeft;let ct={height:X.height||fe.offsetHeight,width:X.width||fe.offsetWidth,top:X.top+ke_top,bottom:X.bottom+ke_top,left:X.left+ke_left,right:X.right+ke_left};return w&&(ct.height=Math.round(ct.height),ct.width=Math.round(ct.width),ct.top=Math.round(ct.top),ct.bottom=Math.round(ct.bottom),ct.left=Math.round(ct.left),ct.right=Math.round(ct.right)),ct}positionElements(fe,w,X,ke){const[ct="top",Jn="center"]=X.split("-"),Ir=ke?this.offset(fe,!1):this.position(fe,!1),vi=this.getAllStyles(w),zi=parseFloat(vi.marginTop),Do=parseFloat(vi.marginBottom),xs=parseFloat(vi.marginLeft),Xo=parseFloat(vi.marginRight);let Rs=0,ma=0;switch(ct){case"top":Rs=Ir.top-(w.offsetHeight+zi+Do);break;case"bottom":Rs=Ir.top+Ir.height;break;case"left":ma=Ir.left-(w.offsetWidth+xs+Xo);break;case"right":ma=Ir.left+Ir.width}switch(Jn){case"top":Rs=Ir.top;break;case"bottom":Rs=Ir.top+Ir.height-w.offsetHeight;break;case"left":ma=Ir.left;break;case"right":ma=Ir.left+Ir.width-w.offsetWidth;break;case"center":"top"===ct||"bottom"===ct?ma=Ir.left+Ir.width/2-w.offsetWidth/2:Rs=Ir.top+Ir.height/2-w.offsetHeight/2}w.style.transform=`translate(${Math.round(ma)}px, ${Math.round(Rs)}px)`;const Vs=w.getBoundingClientRect(),_c=document.documentElement,nd=window.innerHeight||_c.clientHeight,wu=window.innerWidth||_c.clientWidth;return Vs.left>=0&&Vs.top>=0&&Vs.right<=wu&&Vs.bottom<=nd}};function Ye(Y,fe,w,X,ke){let ct=Array.isArray(w)?w:w.split(Wd);const Jn=["top","bottom","left","right","top-left","top-right","bottom-left","bottom-right","left-top","left-bottom","right-top","right-bottom"],Ir=fe.classList,vi=Rs=>{const[ma,Vs]=Rs.split("-"),_c=[];return ke&&(_c.push(`${ke}-${ma}`),Vs&&_c.push(`${ke}-${ma}-${Vs}`),_c.forEach(nd=>{Ir.add(nd)})),_c};ke&&Jn.forEach(Rs=>{Ir.remove(`${ke}-${Rs}`)});let zi=ct.findIndex(Rs=>"auto"===Rs);zi>=0&&Jn.forEach(function(Rs){null==ct.find(ma=>-1!==ma.search("^"+Rs))&&ct.splice(zi++,1,Rs)});const Do=fe.style;Do.position="absolute",Do.top="0",Do.left="0",Do["will-change"]="transform";let xs=null,Xo=!1;for(xs of ct){let Rs=vi(xs);if(Jd.positionElements(Y,fe,xs,X)){Xo=!0;break}ke&&Rs.forEach(ma=>{Ir.remove(ma)})}return Xo||(xs=ct[0],vi(xs),Jd.positionElements(Y,fe,xs,X)),xs}function Ie(){return new ot}let Ce=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:Ie,token:Y,providedIn:"root"}),Y})(),ot=(()=>{class Y extends Ce{parse(w){if(null!=w){const X=w.trim().split("-");if(1===X.length&&ko(X[0]))return{year:pi(X[0]),month:null,day:null};if(2===X.length&&ko(X[0])&&ko(X[1]))return{year:pi(X[0]),month:pi(X[1]),day:null};if(3===X.length&&ko(X[0])&&ko(X[1])&&ko(X[2]))return{year:pi(X[0]),month:pi(X[1]),day:pi(X[2])}}return null}format(w){return w?`${w.year}-${ko(w.month)?sl(w.month):""}-${ko(w.day)?sl(w.day):""}`:""}}return Y.\u0275fac=function(){let fe;return function(X){return(fe||(fe=r.n5z(Y)))(X||Y)}}(),Y.\u0275prov=r.Yz7({token:Y,factory:Y.\u0275fac}),Y})(),Et=(()=>{class Y extends Na{constructor(){super(...arguments),this.autoClose=!0,this.placement=["bottom-left","bottom-right","top-left","top-right"],this.restoreFocus=!0}}return Y.\u0275fac=function(){let fe;return function(X){return(fe||(fe=r.n5z(Y)))(X||Y)}}(),Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})(),qt=(()=>{class Y{constructor(w,X,ke,ct,Jn,Ir,vi,zi,Do,xs,Xo){this._parserFormatter=w,this._elRef=X,this._vcRef=ke,this._renderer=ct,this._cfr=Jn,this._ngZone=Ir,this._calendar=vi,this._dateAdapter=zi,this._document=Do,this._changeDetector=xs,this._cRef=null,this._disabled=!1,this._elWithFocus=null,this._model=null,this.dateSelect=new r.vpe,this.navigate=new r.vpe,this.closed=new r.vpe,this._onChange=Rs=>{},this._onTouched=()=>{},this._validatorChange=()=>{},["autoClose","container","positionTarget","placement"].forEach(Rs=>this[Rs]=Xo[Rs]),this._zoneSubscription=Ir.onStable.subscribe(()=>this._updatePopupPosition())}get disabled(){return this._disabled}set disabled(w){this._disabled=""===w||w&&"false"!==w,this.isOpen()&&this._cRef.instance.setDisabledState(this._disabled)}registerOnChange(w){this._onChange=w}registerOnTouched(w){this._onTouched=w}registerOnValidatorChange(w){this._validatorChange=w}setDisabledState(w){this.disabled=w}validate(w){const{value:X}=w;if(null!=X){const ke=this._fromDateStruct(this._dateAdapter.fromModel(X));if(!ke)return{ngbDate:{invalid:X}};if(this.minDate&&ke.before(aa.from(this.minDate)))return{ngbDate:{minDate:{minDate:this.minDate,actual:X}}};if(this.maxDate&&ke.after(aa.from(this.maxDate)))return{ngbDate:{maxDate:{maxDate:this.maxDate,actual:X}}}}return null}writeValue(w){this._model=this._fromDateStruct(this._dateAdapter.fromModel(w)),this._writeModelValue(this._model)}manualDateChange(w,X=!1){const ke=w!==this._inputValue;ke&&(this._inputValue=w,this._model=this._fromDateStruct(this._parserFormatter.parse(w))),(ke||!X)&&this._onChange(this._model?this._dateAdapter.toModel(this._model):""===w?null:w),X&&this._model&&this._writeModelValue(this._model)}isOpen(){return!!this._cRef}open(){if(!this.isOpen()){const w=this._cfr.resolveComponentFactory(Gl);this._cRef=this._vcRef.createComponent(w),this._applyPopupStyling(this._cRef.location.nativeElement),this._applyDatepickerInputs(this._cRef.instance),this._subscribeForDatepickerOutputs(this._cRef.instance),this._cRef.instance.ngOnInit(),this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)),this._cRef.instance.registerOnChange(X=>{this.writeValue(X),this._onChange(X),this._onTouched()}),this._cRef.changeDetectorRef.detectChanges(),this._cRef.instance.setDisabledState(this.disabled),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._cRef.location.nativeElement),this._elWithFocus=this._document.activeElement,df(this._ngZone,this._cRef.location.nativeElement,this.closed,!0),this._cRef.instance.focus(),la(this._ngZone,this._document,this.autoClose,()=>this.close(),this.closed,[],[this._elRef.nativeElement,this._cRef.location.nativeElement])}}close(){if(this.isOpen()){this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)),this._cRef=null,this.closed.emit(),this._changeDetector.markForCheck();let w=this._elWithFocus;wo(this.restoreFocus)?w=this._document.querySelector(this.restoreFocus):void 0!==this.restoreFocus&&(w=this.restoreFocus),w&&w.focus?w.focus():this._document.body.focus()}}toggle(){this.isOpen()?this.close():this.open()}navigateTo(w){this.isOpen()&&this._cRef.instance.navigateTo(w)}onBlur(){this._onTouched()}onFocus(){this._elWithFocus=this._elRef.nativeElement}ngOnChanges(w){if((w.minDate||w.maxDate)&&(this._validatorChange(),this.isOpen()&&(w.minDate&&(this._cRef.instance.minDate=this.minDate),w.maxDate&&(this._cRef.instance.maxDate=this.maxDate),this._cRef.instance.ngOnChanges(w))),w.datepickerClass){const{currentValue:X,previousValue:ke}=w.datepickerClass;this._applyPopupClass(X,ke)}}ngOnDestroy(){this.close(),this._zoneSubscription.unsubscribe()}_applyDatepickerInputs(w){["dayTemplate","dayTemplateData","displayMonths","firstDayOfWeek","footerTemplate","markDisabled","minDate","maxDate","navigation","outsideDays","showNavigation","showWeekNumbers","weekdays"].forEach(X=>{void 0!==this[X]&&(w[X]=this[X])}),w.startDate=this.startDate||this._model}_applyPopupClass(w,X){var ke;const ct=null===(ke=this._cRef)||void 0===ke?void 0:ke.location.nativeElement;ct&&(w&&this._renderer.addClass(ct,w),X&&this._renderer.removeClass(ct,X))}_applyPopupStyling(w){this._renderer.addClass(w,"dropdown-menu"),this._renderer.addClass(w,"show"),"body"===this.container&&this._renderer.addClass(w,"ngb-dp-body"),this._applyPopupClass(this.datepickerClass)}_subscribeForDatepickerOutputs(w){w.navigate.subscribe(X=>this.navigate.emit(X)),w.dateSelect.subscribe(X=>{this.dateSelect.emit(X),(!0===this.autoClose||"inside"===this.autoClose)&&this.close()})}_writeModelValue(w){const X=this._parserFormatter.format(w);this._inputValue=X,this._renderer.setProperty(this._elRef.nativeElement,"value",X),this.isOpen()&&(this._cRef.instance.writeValue(this._dateAdapter.toModel(w)),this._onTouched())}_fromDateStruct(w){const X=w?new aa(w.year,w.month,w.day):null;return this._calendar.isValid(X)?X:null}_updatePopupPosition(){if(!this._cRef)return;let w;if(w=wo(this.positionTarget)?this._document.querySelector(this.positionTarget):this.positionTarget instanceof HTMLElement?this.positionTarget:this._elRef.nativeElement,this.positionTarget&&!w)throw new Error("ngbDatepicker could not find element declared in [positionTarget] to position against.");Ye(w,this._cRef.location.nativeElement,this.placement,"body"===this.container)}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(Ce),r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(r.Qsj),r.Y36(r._Vd),r.Y36(r.R0b),r.Y36(Ul),r.Y36(Qs),r.Y36(u.K0),r.Y36(r.sBO),r.Y36(Et))},Y.\u0275dir=r.lG2({type:Y,selectors:[["input","ngbDatepicker",""]],hostVars:1,hostBindings:function(w,X){1&w&&r.NdJ("input",function(ct){return X.manualDateChange(ct.target.value)})("change",function(ct){return X.manualDateChange(ct.target.value,!0)})("focus",function(){return X.onFocus()})("blur",function(){return X.onBlur()}),2&w&&r.Ikx("disabled",X.disabled)},inputs:{disabled:"disabled",autoClose:"autoClose",datepickerClass:"datepickerClass",dayTemplate:"dayTemplate",dayTemplateData:"dayTemplateData",displayMonths:"displayMonths",firstDayOfWeek:"firstDayOfWeek",footerTemplate:"footerTemplate",markDisabled:"markDisabled",minDate:"minDate",maxDate:"maxDate",navigation:"navigation",outsideDays:"outsideDays",placement:"placement",restoreFocus:"restoreFocus",showWeekNumbers:"showWeekNumbers",startDate:"startDate",container:"container",positionTarget:"positionTarget",weekdays:"weekdays"},outputs:{dateSelect:"dateSelect",navigate:"navigate",closed:"closed"},exportAs:["ngbDatepicker"],features:[r._Bn([{provide:Mr.JU,useExisting:(0,r.Gpc)(()=>Y),multi:!0},{provide:Mr.Cf,useExisting:(0,r.Gpc)(()=>Y),multi:!0},{provide:Na,useExisting:Et}]),r.TTD]}),Y})(),Hn=(()=>{class Y{constructor(w){this.i18n=w}isMuted(){return!this.selected&&(this.date.month!==this.currentMonth||this.disabled)}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(Cr))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["","ngbDatepickerDayView",""]],hostAttrs:[1,"btn-light"],hostVars:10,hostBindings:function(w,X){2&w&&r.ekj("bg-primary",X.selected)("text-white",X.selected)("text-muted",X.isMuted())("outside",X.isMuted())("active",X.focused)},inputs:{currentMonth:"currentMonth",date:"date",disabled:"disabled",focused:"focused",selected:"selected"},attrs:dr,decls:1,vars:1,template:function(w,X){1&w&&r._uU(0),2&w&&r.Oqu(X.i18n.getDayNumerals(X.date))},styles:["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView].outside{opacity:.5}"],encapsulation:2,changeDetection:0}),Y})(),Xn=(()=>{class Y{constructor(w,X){this.i18n=w,this._renderer=X,this.select=new r.vpe,this._month=-1,this._year=-1}changeMonth(w){this.select.emit(new aa(this.date.year,pi(w),1))}changeYear(w){this.select.emit(new aa(pi(w),this.date.month,1))}ngAfterViewChecked(){this.date&&(this.date.month!==this._month&&(this._month=this.date.month,this._renderer.setProperty(this.monthSelect.nativeElement,"value",this._month)),this.date.year!==this._year&&(this._year=this.date.year,this._renderer.setProperty(this.yearSelect.nativeElement,"value",this._year)))}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(Cr),r.Y36(r.Qsj))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-datepicker-navigation-select"]],viewQuery:function(w,X){if(1&w&&(r.Gf(Fn,7,r.SBq),r.Gf(ar,7,r.SBq)),2&w){let ke;r.iGM(ke=r.CRH())&&(X.monthSelect=ke.first),r.iGM(ke=r.CRH())&&(X.yearSelect=ke.first)}},inputs:{date:"date",disabled:"disabled",months:"months",years:"years"},outputs:{select:"select"},decls:6,vars:4,consts:function(){let fe,w,X,ke;return fe="Select month",w="Select month",X="Select year",ke="Select year",[["aria-label",fe,"title",w,1,"custom-select",3,"disabled","change"],["month",""],[3,"value",4,"ngFor","ngForOf"],["aria-label",X,"title",ke,1,"custom-select",3,"disabled","change"],["year",""],[3,"value"]]},template:function(w,X){1&w&&(r.TgZ(0,"select",0,1),r.NdJ("change",function(ct){return X.changeMonth(ct.target.value)}),r.YNc(2,Wi,2,3,"option",2),r.qZA(),r.TgZ(3,"select",3,4),r.NdJ("change",function(ct){return X.changeYear(ct.target.value)}),r.YNc(5,lo,2,2,"option",2),r.qZA()),2&w&&(r.Q6J("disabled",X.disabled),r.xp6(2),r.Q6J("ngForOf",X.months),r.xp6(1),r.Q6J("disabled",X.disabled),r.xp6(2),r.Q6J("ngForOf",X.years))},directives:[u.sg,Mr.YN,Mr.Kr],styles:["ngb-datepicker-navigation-select>.custom-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.custom-select:focus{z-index:1}ngb-datepicker-navigation-select>.custom-select::-ms-value{background-color:transparent!important}"],encapsulation:2,changeDetection:0}),Y})();new Date(1882,10,12),new Date(2174,10,25);let Yu=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({imports:[[u.ez,Mr.u5]]}),Y})(),pc=(()=>{class Y{constructor(){this.autoClose=!0,this.placement=["bottom-left","bottom-right","top-left","top-right"]}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})(),Kd=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275dir=r.lG2({type:Y,selectors:[["",8,"navbar"]]}),Y})(),wf=(()=>{class Y{constructor(w){this.elementRef=w,this._disabled=!1}set disabled(w){this._disabled=""===w||!0===w}get disabled(){return this._disabled}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.SBq))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbDropdownItem",""]],hostAttrs:[1,"dropdown-item"],hostVars:2,hostBindings:function(w,X){2&w&&r.ekj("disabled",X.disabled)},inputs:{disabled:"disabled"}}),Y})(),Vl=(()=>{class Y{constructor(w,X){this.dropdown=w,this.placement="bottom",this.isOpen=!1,this.nativeElement=X.nativeElement}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36((0,r.Gpc)(()=>hc)),r.Y36(r.SBq))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbDropdownMenu",""]],contentQueries:function(w,X,ke){if(1&w&&r.Suo(ke,wf,4),2&w){let ct;r.iGM(ct=r.CRH())&&(X.menuItems=ct)}},hostVars:5,hostBindings:function(w,X){1&w&&r.NdJ("keydown.ArrowUp",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.ArrowDown",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Home",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.End",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Enter",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Space",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Tab",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Shift.Tab",function(ct){return X.dropdown.onKeyDown(ct)}),2&w&&(r.uIk("x-placement",X.placement),r.ekj("dropdown-menu",!0)("show",X.dropdown.isOpen()))}}),Y})(),Id=(()=>{class Y{constructor(w,X){this.dropdown=w,this.nativeElement=X.nativeElement}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36((0,r.Gpc)(()=>hc)),r.Y36(r.SBq))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbDropdownAnchor",""]],hostAttrs:[1,"dropdown-toggle"],hostVars:1,hostBindings:function(w,X){2&w&&r.uIk("aria-expanded",X.dropdown.isOpen())}}),Y})(),oc=(()=>{class Y extends Id{constructor(w,X){super(w,X)}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36((0,r.Gpc)(()=>hc)),r.Y36(r.SBq))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbDropdownToggle",""]],hostAttrs:[1,"dropdown-toggle"],hostVars:1,hostBindings:function(w,X){1&w&&r.NdJ("click",function(){return X.dropdown.toggle()})("keydown.ArrowUp",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.ArrowDown",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Home",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.End",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Tab",function(ct){return X.dropdown.onKeyDown(ct)})("keydown.Shift.Tab",function(ct){return X.dropdown.onKeyDown(ct)}),2&w&&r.uIk("aria-expanded",X.dropdown.isOpen())},features:[r._Bn([{provide:Id,useExisting:(0,r.Gpc)(()=>Y)}]),r.qOj]}),Y})(),hc=(()=>{class Y{constructor(w,X,ke,ct,Jn,Ir,vi){this._changeDetector=w,this._document=ke,this._ngZone=ct,this._elementRef=Jn,this._renderer=Ir,this._closed$=new he.xQ,this._bodyContainer=null,this._open=!1,this.openChange=new r.vpe,this.placement=X.placement,this.container=X.container,this.autoClose=X.autoClose,this.display=vi?"static":"dynamic",this._zoneSubscription=ct.onStable.subscribe(()=>{this._positionMenu()})}ngAfterContentInit(){this._ngZone.onStable.pipe((0,Bt.q)(1)).subscribe(()=>{this._applyPlacementClasses(),this._open&&this._setCloseHandlers()})}ngOnChanges(w){if(w.container&&this._open&&this._applyContainer(this.container),w.placement&&!w.placement.isFirstChange&&this._applyPlacementClasses(),w.dropdownClass){const{currentValue:X,previousValue:ke}=w.dropdownClass;this._applyCustomDropdownClass(X,ke)}}isOpen(){return this._open}open(){this._open||(this._open=!0,this._applyContainer(this.container),this.openChange.emit(!0),this._setCloseHandlers(),this._anchor&&this._anchor.nativeElement.focus())}_setCloseHandlers(){la(this._ngZone,this._document,this.autoClose,w=>{this.close(),0===w&&this._anchor.nativeElement.focus()},this._closed$,this._menu?[this._menu.nativeElement]:[],this._anchor?[this._anchor.nativeElement]:[],".dropdown-item,.dropdown-divider")}close(){this._open&&(this._open=!1,this._resetContainer(),this._closed$.next(),this.openChange.emit(!1),this._changeDetector.markForCheck())}toggle(){this.isOpen()?this.close():this.open()}ngOnDestroy(){this._resetContainer(),this._closed$.next(),this._zoneSubscription.unsubscribe()}onKeyDown(w){const X=w.which,ke=this._getMenuElements();let ct=-1,Jn=null;const Ir=this._isEventFromToggle(w);if(!Ir&&ke.length&&ke.forEach((vi,zi)=>{vi.contains(w.target)&&(Jn=vi),vi===this._document.activeElement&&(ct=zi)}),X!==$i.Space&&X!==$i.Enter){if(X!==$i.Tab){if(Ir||Jn){if(this.open(),ke.length){switch(X){case $i.ArrowDown:ct=Math.min(ct+1,ke.length-1);break;case $i.ArrowUp:if(this._isDropup()&&-1===ct){ct=ke.length-1;break}ct=Math.max(ct-1,0);break;case $i.Home:ct=0;break;case $i.End:ct=ke.length-1}ke[ct].focus()}w.preventDefault()}}else if(w.target&&this.isOpen()&&this.autoClose){if(this._anchor.nativeElement===w.target)return void("body"!==this.container||w.shiftKey?w.shiftKey&&this.close():(this._renderer.setAttribute(this._menu.nativeElement,"tabindex","0"),this._menu.nativeElement.focus(),this._renderer.removeAttribute(this._menu.nativeElement,"tabindex")));if("body"===this.container){const vi=this._menu.nativeElement.querySelectorAll(Zc);w.shiftKey&&w.target===vi[0]?(this._anchor.nativeElement.focus(),w.preventDefault()):!w.shiftKey&&w.target===vi[vi.length-1]&&(this._anchor.nativeElement.focus(),this.close())}else(0,ge.R)(w.target,"focusout").pipe((0,Bt.q)(1)).subscribe(({relatedTarget:vi})=>{this._elementRef.nativeElement.contains(vi)||this.close()})}}else Jn&&(!0===this.autoClose||"inside"===this.autoClose)&&(0,ge.R)(Jn,"click").pipe((0,Bt.q)(1)).subscribe(()=>this.close())}_isDropup(){return this._elementRef.nativeElement.classList.contains("dropup")}_isEventFromToggle(w){return this._anchor.nativeElement.contains(w.target)}_getMenuElements(){const w=this._menu;return null==w?[]:w.menuItems.filter(X=>!X.disabled).map(X=>X.elementRef.nativeElement)}_positionMenu(){const w=this._menu;this.isOpen()&&w&&this._applyPlacementClasses("dynamic"===this.display?Ye(this._anchor.nativeElement,this._bodyContainer||this._menu.nativeElement,this.placement,"body"===this.container):this._getFirstPlacement(this.placement))}_getFirstPlacement(w){return Array.isArray(w)?w[0]:w.split(" ")[0]}_resetContainer(){const w=this._renderer;if(this._menu){const ke=this._menu.nativeElement;w.appendChild(this._elementRef.nativeElement,ke),w.removeStyle(ke,"position"),w.removeStyle(ke,"transform")}this._bodyContainer&&(w.removeChild(this._document.body,this._bodyContainer),this._bodyContainer=null)}_applyContainer(w=null){if(this._resetContainer(),"body"===w){const X=this._renderer,ke=this._menu.nativeElement,ct=this._bodyContainer=this._bodyContainer||X.createElement("div");X.setStyle(ct,"position","absolute"),X.setStyle(ke,"position","static"),X.setStyle(ct,"z-index","1050"),X.appendChild(ct,ke),X.appendChild(this._document.body,ct)}this._applyCustomDropdownClass(this.dropdownClass)}_applyCustomDropdownClass(w,X){const ke="body"===this.container?this._bodyContainer:this._elementRef.nativeElement;ke&&(X&&this._renderer.removeClass(ke,X),w&&this._renderer.addClass(ke,w))}_applyPlacementClasses(w){const X=this._menu;if(X){w||(w=this._getFirstPlacement(this.placement));const ke=this._renderer,ct=this._elementRef.nativeElement;ke.removeClass(ct,"dropup"),ke.removeClass(ct,"dropdown"),X.placement="static"===this.display?null:w;const Jn=-1!==w.search("^top")?"dropup":"dropdown";ke.addClass(ct,Jn);const Ir=this._bodyContainer;Ir&&(ke.removeClass(Ir,"dropup"),ke.removeClass(Ir,"dropdown"),ke.addClass(Ir,Jn))}}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.sBO),r.Y36(pc),r.Y36(u.K0),r.Y36(r.R0b),r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(Kd,8))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbDropdown",""]],contentQueries:function(w,X,ke){if(1&w&&(r.Suo(ke,Vl,5),r.Suo(ke,Id,5)),2&w){let ct;r.iGM(ct=r.CRH())&&(X._menu=ct.first),r.iGM(ct=r.CRH())&&(X._anchor=ct.first)}},hostVars:2,hostBindings:function(w,X){2&w&&r.ekj("show",X.isOpen())},inputs:{_open:["open","_open"],placement:"placement",container:"container",autoClose:"autoClose",display:"display",dropdownClass:"dropdownClass"},outputs:{openChange:"openChange"},exportAs:["ngbDropdown"],features:[r.TTD]}),Y})(),Mc=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({}),Y})(),Hc=(()=>{class Y{constructor(w){this._ngbConfig=w,this.backdrop=!0,this.keyboard=!0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(w){this._animation=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(Fs))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(Fs))},token:Y,providedIn:"root"}),Y})();class cu{constructor(fe,w,X){this.nodes=fe,this.viewRef=w,this.componentRef=X}}class Lu{constructor(fe,w,X,ke,ct,Jn,Ir){this._type=fe,this._injector=w,this._viewContainerRef=X,this._renderer=ke,this._ngZone=ct,this._componentFactoryResolver=Jn,this._applicationRef=Ir,this._windowRef=null,this._contentRef=null}open(fe,w,X=!1){this._windowRef||(this._contentRef=this._getContentRef(fe,w),this._windowRef=this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type),this._viewContainerRef.length,this._injector,this._contentRef.nodes));const{nativeElement:ke}=this._windowRef.location,ct=this._ngZone.onStable.pipe((0,Bt.q)(1),(0,di.zg)(()=>Pt(this._ngZone,ke,({classList:Jn})=>Jn.add("show"),{animation:X,runningTransition:"continue"})));return{windowRef:this._windowRef,transition$:ct}}close(fe=!1){return this._windowRef?Pt(this._ngZone,this._windowRef.location.nativeElement,({classList:w})=>w.remove("show"),{animation:fe,runningTransition:"stop"}).pipe((0,Zn.b)(()=>{var w;this._windowRef&&(this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)),this._windowRef=null),(null===(w=this._contentRef)||void 0===w?void 0:w.viewRef)&&(this._applicationRef.detachView(this._contentRef.viewRef),this._contentRef.viewRef.destroy(),this._contentRef=null)})):(0,ie.of)(void 0)}_getContentRef(fe,w){if(fe){if(fe instanceof r.Rgc){const X=fe.createEmbeddedView(w);return this._applicationRef.attachView(X),new cu([X.rootNodes],X)}return new cu([[this._renderer.createText(`${fe}`)]])}return new cu([])}}const Ou=()=>{};let bu=(()=>{class Y{constructor(w){this._document=w}compensate(){const w=this._getWidth();return this._isPresent(w)?this._adjustBody(w):Ou}_adjustBody(w){const X=this._document.body,ke=X.style.paddingRight,ct=parseFloat(window.getComputedStyle(X)["padding-right"]);return X.style["padding-right"]=`${ct+w}px`,()=>X.style["padding-right"]=ke}_isPresent(w){const X=this._document.body.getBoundingClientRect();return window.innerWidth-(X.left+X.right)>=w-.1*w}_getWidth(){const w=this._document.createElement("div");w.className="modal-scrollbar-measure";const X=this._document.body;X.appendChild(w);const ke=w.getBoundingClientRect().width-w.clientWidth;return X.removeChild(w),ke}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(u.K0))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(u.K0))},token:Y,providedIn:"root"}),Y})(),h=(()=>{class Y{constructor(w,X){this._el=w,this._zone=X}ngOnInit(){this._zone.onStable.asObservable().pipe((0,Bt.q)(1)).subscribe(()=>{Pt(this._zone,this._el.nativeElement,(w,X)=>{X&&Ec(w),w.classList.add("show")},{animation:this.animation,runningTransition:"continue"})})}hide(){return Pt(this._zone,this._el.nativeElement,({classList:w})=>w.remove("show"),{animation:this.animation,runningTransition:"stop"})}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.SBq),r.Y36(r.R0b))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-modal-backdrop"]],hostAttrs:[2,"z-index","1050"],hostVars:6,hostBindings:function(w,X){2&w&&(r.Tol("modal-backdrop"+(X.backdropClass?" "+X.backdropClass:"")),r.ekj("show",!X.animation)("fade",X.animation))},inputs:{animation:"animation",backdropClass:"backdropClass"},decls:0,vars:0,template:function(w,X){},encapsulation:2}),Y})();class E{close(fe){}dismiss(fe){}}class R{constructor(fe,w,X,ke){this._windowCmptRef=fe,this._contentRef=w,this._backdropCmptRef=X,this._beforeDismiss=ke,this._closed=new he.xQ,this._dismissed=new he.xQ,this._hidden=new he.xQ,fe.instance.dismissEvent.subscribe(ct=>{this.dismiss(ct)}),this.result=new Promise((ct,Jn)=>{this._resolve=ct,this._reject=Jn}),this.result.then(null,()=>{})}get componentInstance(){if(this._contentRef&&this._contentRef.componentRef)return this._contentRef.componentRef.instance}get closed(){return this._closed.asObservable().pipe((0,Zt.R)(this._hidden))}get dismissed(){return this._dismissed.asObservable().pipe((0,Zt.R)(this._hidden))}get hidden(){return this._hidden.asObservable()}get shown(){return this._windowCmptRef.instance.shown.asObservable()}close(fe){this._windowCmptRef&&(this._closed.next(fe),this._resolve(fe),this._removeModalElements())}_dismiss(fe){this._dismissed.next(fe),this._reject(fe),this._removeModalElements()}dismiss(fe){if(this._windowCmptRef)if(this._beforeDismiss){const w=this._beforeDismiss();w&&w.then?w.then(X=>{!1!==X&&this._dismiss(fe)},()=>{}):!1!==w&&this._dismiss(fe)}else this._dismiss(fe)}_removeModalElements(){const fe=this._windowCmptRef.instance.hide(),w=this._backdropCmptRef?this._backdropCmptRef.instance.hide():(0,ie.of)(void 0);fe.subscribe(()=>{const{nativeElement:X}=this._windowCmptRef.location;X.parentNode.removeChild(X),this._windowCmptRef.destroy(),this._contentRef&&this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._windowCmptRef=null,this._contentRef=null}),w.subscribe(()=>{if(this._backdropCmptRef){const{nativeElement:X}=this._backdropCmptRef.location;X.parentNode.removeChild(X),this._backdropCmptRef.destroy(),this._backdropCmptRef=null}}),J(fe,w).subscribe(()=>{this._hidden.next(),this._hidden.complete()})}}var F=(()=>{return(Y=F||(F={}))[Y.BACKDROP_CLICK=0]="BACKDROP_CLICK",Y[Y.ESC=1]="ESC",F;var Y})();let q=(()=>{class Y{constructor(w,X,ke){this._document=w,this._elRef=X,this._zone=ke,this._closed$=new he.xQ,this._elWithFocus=null,this.backdrop=!0,this.keyboard=!0,this.dismissEvent=new r.vpe,this.shown=new he.xQ,this.hidden=new he.xQ}dismiss(w){this.dismissEvent.emit(w)}ngOnInit(){this._elWithFocus=this._document.activeElement,this._zone.onStable.asObservable().pipe((0,Bt.q)(1)).subscribe(()=>{this._show()})}ngOnDestroy(){this._disableEventHandling()}hide(){const{nativeElement:w}=this._elRef,X={animation:this.animation,runningTransition:"stop"},Jn=J(Pt(this._zone,w,()=>w.classList.remove("show"),X),Pt(this._zone,this._dialogEl.nativeElement,()=>{},X));return Jn.subscribe(()=>{this.hidden.next(),this.hidden.complete()}),this._disableEventHandling(),this._restoreFocus(),Jn}_show(){const w={animation:this.animation,runningTransition:"continue"};J(Pt(this._zone,this._elRef.nativeElement,(ct,Jn)=>{Jn&&Ec(ct),ct.classList.add("show")},w),Pt(this._zone,this._dialogEl.nativeElement,()=>{},w)).subscribe(()=>{this.shown.next(),this.shown.complete()}),this._enableEventHandling(),this._setFocus()}_enableEventHandling(){const{nativeElement:w}=this._elRef;this._zone.runOutsideAngular(()=>{(0,ge.R)(w,"keydown").pipe((0,Zt.R)(this._closed$),(0,Ut.h)(ke=>ke.which===$i.Escape)).subscribe(ke=>{this.keyboard?requestAnimationFrame(()=>{ke.defaultPrevented||this._zone.run(()=>this.dismiss(F.ESC))}):"static"===this.backdrop&&this._bumpBackdrop()});let X=!1;(0,ge.R)(this._dialogEl.nativeElement,"mousedown").pipe((0,Zt.R)(this._closed$),(0,Zn.b)(()=>X=!1),(0,Xt.w)(()=>(0,ge.R)(w,"mouseup").pipe((0,Zt.R)(this._closed$),(0,Bt.q)(1))),(0,Ut.h)(({target:ke})=>w===ke)).subscribe(()=>{X=!0}),(0,ge.R)(w,"click").pipe((0,Zt.R)(this._closed$)).subscribe(({target:ke})=>{w===ke&&("static"===this.backdrop?this._bumpBackdrop():!0===this.backdrop&&!X&&this._zone.run(()=>this.dismiss(F.BACKDROP_CLICK))),X=!1})})}_disableEventHandling(){this._closed$.next()}_setFocus(){const{nativeElement:w}=this._elRef;if(!w.contains(document.activeElement)){const X=w.querySelector("[ngbAutofocus]"),ke=ic(w)[0];(X||ke||w).focus()}}_restoreFocus(){const w=this._document.body,X=this._elWithFocus;let ke;ke=X&&X.focus&&w.contains(X)?X:w,this._zone.runOutsideAngular(()=>{setTimeout(()=>ke.focus()),this._elWithFocus=null})}_bumpBackdrop(){"static"===this.backdrop&&Pt(this._zone,this._elRef.nativeElement,({classList:w})=>(w.add("modal-static"),()=>w.remove("modal-static")),{animation:this.animation,runningTransition:"continue"})}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(u.K0),r.Y36(r.SBq),r.Y36(r.R0b))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-modal-window"]],viewQuery:function(w,X){if(1&w&&r.Gf(vo,7),2&w){let ke;r.iGM(ke=r.CRH())&&(X._dialogEl=ke.first)}},hostAttrs:["role","dialog","tabindex","-1"],hostVars:7,hostBindings:function(w,X){2&w&&(r.uIk("aria-modal",!0)("aria-labelledby",X.ariaLabelledBy)("aria-describedby",X.ariaDescribedBy),r.Tol("modal d-block"+(X.windowClass?" "+X.windowClass:"")),r.ekj("fade",X.animation))},inputs:{backdrop:"backdrop",keyboard:"keyboard",animation:"animation",ariaLabelledBy:"ariaLabelledBy",ariaDescribedBy:"ariaDescribedBy",centered:"centered",scrollable:"scrollable",size:"size",windowClass:"windowClass",modalDialogClass:"modalDialogClass"},outputs:{dismissEvent:"dismiss"},ngContentSelectors:Hi,decls:4,vars:2,consts:[["role","document"],["dialog",""],[1,"modal-content"]],template:function(w,X){1&w&&(r.F$t(),r.TgZ(0,"div",0,1),r.TgZ(2,"div",2),r.Hsn(3),r.qZA(),r.qZA()),2&w&&r.Tol("modal-dialog"+(X.size?" modal-"+X.size:"")+(X.centered?" modal-dialog-centered":"")+(X.scrollable?" modal-dialog-scrollable":"")+(X.modalDialogClass?" "+X.modalDialogClass:""))},styles:["ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}"],encapsulation:2}),Y})(),de=(()=>{class Y{constructor(w,X,ke,ct,Jn,Ir){this._applicationRef=w,this._injector=X,this._document=ke,this._scrollBar=ct,this._rendererFactory=Jn,this._ngZone=Ir,this._activeWindowCmptHasChanged=new he.xQ,this._ariaHiddenValues=new Map,this._backdropAttributes=["animation","backdropClass"],this._modalRefs=[],this._windowAttributes=["animation","ariaLabelledBy","ariaDescribedBy","backdrop","centered","keyboard","scrollable","size","windowClass","modalDialogClass"],this._windowCmpts=[],this._activeInstances=new r.vpe,this._activeWindowCmptHasChanged.subscribe(()=>{if(this._windowCmpts.length){const vi=this._windowCmpts[this._windowCmpts.length-1];df(this._ngZone,vi.location.nativeElement,this._activeWindowCmptHasChanged),this._revertAriaHidden(),this._setAriaHidden(vi.location.nativeElement)}})}open(w,X,ke,ct){const Jn=ct.container instanceof HTMLElement?ct.container:ba(ct.container)?this._document.querySelector(ct.container):this._document.body,Ir=this._rendererFactory.createRenderer(null,null),vi=this._scrollBar.compensate(),zi=()=>{this._modalRefs.length||(Ir.removeClass(this._document.body,"modal-open"),this._revertAriaHidden())};if(!Jn)throw new Error(`The specified modal container "${ct.container||"body"}" was not found in the DOM.`);const Do=new E,xs=this._getContentRef(w,ct.injector||X,ke,Do,ct);let Xo=!1!==ct.backdrop?this._attachBackdrop(w,Jn):void 0,Rs=this._attachWindowComponent(w,Jn,xs),ma=new R(Rs,xs,Xo,ct.beforeDismiss);return this._registerModalRef(ma),this._registerWindowCmpt(Rs),ma.result.then(vi,vi),ma.result.then(zi,zi),Do.close=Vs=>{ma.close(Vs)},Do.dismiss=Vs=>{ma.dismiss(Vs)},this._applyWindowOptions(Rs.instance,ct),1===this._modalRefs.length&&Ir.addClass(this._document.body,"modal-open"),Xo&&Xo.instance&&(this._applyBackdropOptions(Xo.instance,ct),Xo.changeDetectorRef.detectChanges()),Rs.changeDetectorRef.detectChanges(),ma}get activeInstances(){return this._activeInstances}dismissAll(w){this._modalRefs.forEach(X=>X.dismiss(w))}hasOpenModals(){return this._modalRefs.length>0}_attachBackdrop(w,X){let ct=w.resolveComponentFactory(h).create(this._injector);return this._applicationRef.attachView(ct.hostView),X.appendChild(ct.location.nativeElement),ct}_attachWindowComponent(w,X,ke){let Jn=w.resolveComponentFactory(q).create(this._injector,ke.nodes);return this._applicationRef.attachView(Jn.hostView),X.appendChild(Jn.location.nativeElement),Jn}_applyWindowOptions(w,X){this._windowAttributes.forEach(ke=>{ba(X[ke])&&(w[ke]=X[ke])})}_applyBackdropOptions(w,X){this._backdropAttributes.forEach(ke=>{ba(X[ke])&&(w[ke]=X[ke])})}_getContentRef(w,X,ke,ct,Jn){return ke?ke instanceof r.Rgc?this._createFromTemplateRef(ke,ct):wo(ke)?this._createFromString(ke):this._createFromComponent(w,X,ke,ct,Jn):new cu([])}_createFromTemplateRef(w,X){const ct=w.createEmbeddedView({$implicit:X,close(Jn){X.close(Jn)},dismiss(Jn){X.dismiss(Jn)}});return this._applicationRef.attachView(ct),new cu([ct.rootNodes],ct)}_createFromString(w){const X=this._document.createTextNode(`${w}`);return new cu([[X]])}_createFromComponent(w,X,ke,ct,Jn){const Ir=w.resolveComponentFactory(ke),vi=r.zs3.create({providers:[{provide:E,useValue:ct}],parent:X}),zi=Ir.create(vi),Do=zi.location.nativeElement;return Jn.scrollable&&Do.classList.add("component-host-scrollable"),this._applicationRef.attachView(zi.hostView),new cu([[Do]],zi.hostView,zi)}_setAriaHidden(w){const X=w.parentElement;X&&w!==this._document.body&&(Array.from(X.children).forEach(ke=>{ke!==w&&"SCRIPT"!==ke.nodeName&&(this._ariaHiddenValues.set(ke,ke.getAttribute("aria-hidden")),ke.setAttribute("aria-hidden","true"))}),this._setAriaHidden(X))}_revertAriaHidden(){this._ariaHiddenValues.forEach((w,X)=>{w?X.setAttribute("aria-hidden",w):X.removeAttribute("aria-hidden")}),this._ariaHiddenValues.clear()}_registerModalRef(w){const X=()=>{const ke=this._modalRefs.indexOf(w);ke>-1&&(this._modalRefs.splice(ke,1),this._activeInstances.emit(this._modalRefs))};this._modalRefs.push(w),this._activeInstances.emit(this._modalRefs),w.result.then(X,X)}_registerWindowCmpt(w){this._windowCmpts.push(w),this._activeWindowCmptHasChanged.next(),w.onDestroy(()=>{const X=this._windowCmpts.indexOf(w);X>-1&&(this._windowCmpts.splice(X,1),this._activeWindowCmptHasChanged.next())})}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(r.z2F),r.LFG(r.zs3),r.LFG(u.K0),r.LFG(bu),r.LFG(r.FYo),r.LFG(r.R0b))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(r.z2F),r.LFG(r.gxx),r.LFG(u.K0),r.LFG(bu),r.LFG(r.FYo),r.LFG(r.R0b))},token:Y,providedIn:"root"}),Y})(),ye=(()=>{class Y{constructor(w,X,ke,ct){this._moduleCFR=w,this._injector=X,this._modalStack=ke,this._config=ct}open(w,X={}){const ke=Object.assign(Object.assign(Object.assign({},this._config),{animation:this._config.animation}),X);return this._modalStack.open(this._moduleCFR,this._injector,w,ke)}get activeInstances(){return this._modalStack.activeInstances}dismissAll(w){this._modalStack.dismissAll(w)}hasOpenModals(){return this._modalStack.hasOpenModals()}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(r._Vd),r.LFG(r.zs3),r.LFG(de),r.LFG(Hc))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(r._Vd),r.LFG(r.gxx),r.LFG(de),r.LFG(Hc))},token:Y,providedIn:"root"}),Y})(),Oe=(()=>{class Y{constructor(w){this._ngbConfig=w,this.destroyOnHide=!0,this.orientation="horizontal",this.roles="tablist",this.keyboard=!1}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(w){this._animation=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(Fs))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(Fs))},token:Y,providedIn:"root"}),Y})();const Xe=Y=>ba(Y)&&""!==Y;let yt=0,nn=(()=>{class Y{constructor(w){this.templateRef=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.Rgc))},Y.\u0275dir=r.lG2({type:Y,selectors:[["ng-template","ngbNavContent",""]]}),Y})(),Pn=(()=>{class Y{constructor(w,X){this.elementRef=X,this.disabled=!1,this.shown=new r.vpe,this.hidden=new r.vpe,this._nav=w}ngAfterContentChecked(){this.contentTpl=this.contentTpls.first}ngOnInit(){ba(this.domId)||(this.domId="ngb-nav-"+yt++)}get active(){return this._nav.activeId===this.id}get id(){return Xe(this._id)?this._id:this.domId}get panelDomId(){return`${this.domId}-panel`}isPanelInDom(){return(ba(this.destroyOnHide)?!this.destroyOnHide:!this._nav.destroyOnHide)||this.active}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36((0,r.Gpc)(()=>xn)),r.Y36(r.SBq))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbNavItem",""]],contentQueries:function(w,X,ke){if(1&w&&r.Suo(ke,nn,4),2&w){let ct;r.iGM(ct=r.CRH())&&(X.contentTpls=ct)}},hostVars:2,hostBindings:function(w,X){2&w&&r.ekj("nav-item",!0)},inputs:{disabled:"disabled",domId:"domId",destroyOnHide:"destroyOnHide",_id:["ngbNavItem","_id"]},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbNavItem"]}),Y})(),xn=(()=>{class Y{constructor(w,X,ke,ct){this.role=w,this._cd=ke,this._document=ct,this.activeIdChange=new r.vpe,this.shown=new r.vpe,this.hidden=new r.vpe,this.destroy$=new he.xQ,this.navItemChange$=new he.xQ,this.navChange=new r.vpe,this.animation=X.animation,this.destroyOnHide=X.destroyOnHide,this.orientation=X.orientation,this.roles=X.roles,this.keyboard=X.keyboard}click(w){w.disabled||this._updateActiveId(w.id)}onKeyDown(w){if("tablist"!==this.roles||!this.keyboard)return;const X=w.which,ke=this.links.filter(Ir=>!Ir.navItem.disabled),{length:ct}=ke;let Jn=-1;if(ke.forEach((Ir,vi)=>{Ir.elRef.nativeElement===this._document.activeElement&&(Jn=vi)}),ct){switch(X){case $i.ArrowLeft:if("vertical"===this.orientation)return;Jn=(Jn-1+ct)%ct;break;case $i.ArrowRight:if("vertical"===this.orientation)return;Jn=(Jn+1)%ct;break;case $i.ArrowDown:if("horizontal"===this.orientation)return;Jn=(Jn+1)%ct;break;case $i.ArrowUp:if("horizontal"===this.orientation)return;Jn=(Jn-1+ct)%ct;break;case $i.Home:Jn=0;break;case $i.End:Jn=ct-1}"changeWithArrows"===this.keyboard&&this.select(ke[Jn].navItem.id),ke[Jn].elRef.nativeElement.focus(),w.preventDefault()}}select(w){this._updateActiveId(w,!1)}ngAfterContentInit(){if(!ba(this.activeId)){const w=this.items.first?this.items.first.id:null;Xe(w)&&(this._updateActiveId(w,!1),this._cd.detectChanges())}this.items.changes.pipe((0,Zt.R)(this.destroy$)).subscribe(()=>this._notifyItemChanged(this.activeId))}ngOnChanges({activeId:w}){w&&!w.firstChange&&this._notifyItemChanged(w.currentValue)}ngOnDestroy(){this.destroy$.next()}_updateActiveId(w,X=!0){if(this.activeId!==w){let ke=!1;X&&this.navChange.emit({activeId:this.activeId,nextId:w,preventDefault:()=>{ke=!0}}),ke||(this.activeId=w,this.activeIdChange.emit(w),this._notifyItemChanged(w))}}_notifyItemChanged(w){this.navItemChange$.next(this._getItemById(w))}_getItemById(w){return this.items&&this.items.find(X=>X.id===w)||null}}return Y.\u0275fac=function(w){return new(w||Y)(r.$8M("role"),r.Y36(Oe),r.Y36(r.sBO),r.Y36(u.K0))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbNav",""]],contentQueries:function(w,X,ke){if(1&w&&(r.Suo(ke,Pn,4),r.Suo(ke,ir,5)),2&w){let ct;r.iGM(ct=r.CRH())&&(X.items=ct),r.iGM(ct=r.CRH())&&(X.links=ct)}},hostVars:6,hostBindings:function(w,X){1&w&&r.NdJ("keydown.arrowLeft",function(ct){return X.onKeyDown(ct)})("keydown.arrowRight",function(ct){return X.onKeyDown(ct)})("keydown.arrowDown",function(ct){return X.onKeyDown(ct)})("keydown.arrowUp",function(ct){return X.onKeyDown(ct)})("keydown.Home",function(ct){return X.onKeyDown(ct)})("keydown.End",function(ct){return X.onKeyDown(ct)}),2&w&&(r.uIk("aria-orientation","vertical"===X.orientation&&"tablist"===X.roles?"vertical":void 0)("role",X.role?X.role:X.roles?"tablist":void 0),r.ekj("nav",!0)("flex-column","vertical"===X.orientation))},inputs:{animation:"animation",destroyOnHide:"destroyOnHide",orientation:"orientation",roles:"roles",keyboard:"keyboard",activeId:"activeId"},outputs:{activeIdChange:"activeIdChange",shown:"shown",hidden:"hidden",navChange:"navChange"},exportAs:["ngbNav"],features:[r.TTD]}),Y})(),ir=(()=>{class Y{constructor(w,X,ke,ct){this.role=w,this.navItem=X,this.nav=ke,this.elRef=ct}hasNavItemClass(){return this.navItem.elementRef.nativeElement.nodeType===Node.COMMENT_NODE}}return Y.\u0275fac=function(w){return new(w||Y)(r.$8M("role"),r.Y36(Pn),r.Y36(xn),r.Y36(r.SBq))},Y.\u0275dir=r.lG2({type:Y,selectors:[["a","ngbNavLink",""]],hostAttrs:["href",""],hostVars:14,hostBindings:function(w,X){1&w&&r.NdJ("click",function(ct){return X.nav.click(X.navItem),ct.preventDefault()}),2&w&&(r.Ikx("id",X.navItem.domId),r.uIk("role",X.role?X.role:X.nav.roles?"tab":void 0)("tabindex",X.navItem.disabled?-1:void 0)("aria-controls",X.navItem.isPanelInDom()?X.navItem.panelDomId:null)("aria-selected",X.navItem.active)("aria-disabled",X.navItem.disabled),r.ekj("nav-link",!0)("nav-item",X.hasNavItemClass())("active",X.navItem.active)("disabled",X.navItem.disabled))}}),Y})();const Gr=({classList:Y})=>(Y.remove("show"),()=>Y.remove("active")),Pi=(Y,fe)=>{fe&&Ec(Y),Y.classList.add("show")};let Zo=(()=>{class Y{constructor(w){this.elRef=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.SBq))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbNavPane",""]],hostAttrs:[1,"tab-pane"],hostVars:5,hostBindings:function(w,X){2&w&&(r.Ikx("id",X.item.panelDomId),r.uIk("role",X.role?X.role:X.nav.roles?"tabpanel":void 0)("aria-labelledby",X.item.domId),r.ekj("fade",X.nav.animation))},inputs:{item:"item",nav:"nav",role:"role"}}),Y})(),Lo=(()=>{class Y{constructor(w,X){this._cd=w,this._ngZone=X,this._activePane=null}isPanelTransitioning(w){var X;return(null===(X=this._activePane)||void 0===X?void 0:X.item)===w}ngAfterViewInit(){var w;this._updateActivePane(),this.nav.navItemChange$.pipe((0,Zt.R)(this.nav.destroy$),(0,Gt.O)((null===(w=this._activePane)||void 0===w?void 0:w.item)||null),(0,xt.x)(),fe=>fe.lift(new tn(1))).subscribe(X=>{const ke={animation:this.nav.animation,runningTransition:"stop"};this._cd.detectChanges(),this._activePane?Pt(this._ngZone,this._activePane.elRef.nativeElement,Gr,ke).subscribe(()=>{var ct;const Jn=null===(ct=this._activePane)||void 0===ct?void 0:ct.item;this._activePane=this._getPaneForItem(X),this._cd.markForCheck(),this._activePane&&(this._activePane.elRef.nativeElement.classList.add("active"),Pt(this._ngZone,this._activePane.elRef.nativeElement,Pi,ke).subscribe(()=>{X&&(X.shown.emit(),this.nav.shown.emit(X.id))})),Jn&&(Jn.hidden.emit(),this.nav.hidden.emit(Jn.id))}):this._updateActivePane()})}_updateActivePane(){var w,X;this._activePane=this._getActivePane(),null===(w=this._activePane)||void 0===w||w.elRef.nativeElement.classList.add("show"),null===(X=this._activePane)||void 0===X||X.elRef.nativeElement.classList.add("active")}_getPaneForItem(w){return this._panes&&this._panes.find(X=>X.item===w)||null}_getActivePane(){return this._panes&&this._panes.find(w=>w.item.active)||null}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.sBO),r.Y36(r.R0b))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["","ngbNavOutlet",""]],viewQuery:function(w,X){if(1&w&&r.Gf(Zo,5),2&w){let ke;r.iGM(ke=r.CRH())&&(X._panes=ke)}},hostVars:2,hostBindings:function(w,X){2&w&&r.ekj("tab-content",!0)},inputs:{paneRole:"paneRole",nav:["ngbNavOutlet","nav"]},attrs:Co,decls:1,vars:1,consts:[["ngFor","",3,"ngForOf"],["ngbNavPane","",3,"item","nav","role",4,"ngIf"],["ngbNavPane","",3,"item","nav","role"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(w,X){1&w&&r.YNc(0,To,1,1,"ng-template",0),2&w&&r.Q6J("ngForOf",X.nav.items)},directives:[u.sg,u.O5,Zo,u.tP],encapsulation:2,changeDetection:0}),Y})(),Xs=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({imports:[[u.ez]]}),Y})();class gf{constructor(fe,w){this.open=fe,this.close=w,w||(this.close=fe)}isManual(){return"manual"===this.open||"manual"===this.close}}const Ga={hover:["mouseenter","mouseleave"],focus:["focusin","focusout"]},nt=Y=>Y>0?(0,Ur.g)(Y):fe=>fe;function cr(Y,fe,w,X,ke,ct,Jn=0,Ir=0){const vi=function(Y,fe=Ga){const w=(Y||"").trim();if(0===w.length)return[];const X=w.split(/\s+/).map(ct=>ct.split(":")).map(ct=>{let Jn=fe[ct[0]]||ct;return new gf(Jn[0],Jn[1])}),ke=X.filter(ct=>ct.isManual());if(ke.length>1)throw"Triggers parse error: only one manual trigger is allowed";if(1===ke.length&&X.length>1)throw"Triggers parse error: manual trigger can't be mixed with other triggers";return X}(w);if(1===vi.length&&vi[0].isManual())return()=>{};const zi=function(Y,fe,w,X){return new se.y(ke=>{const ct=[],Jn=()=>ke.next(!0),Ir=()=>ke.next(!1),vi=()=>ke.next(!X());return w.forEach(zi=>{zi.open===zi.close?ct.push(Y.listen(fe,zi.open,vi)):ct.push(Y.listen(fe,zi.open,Jn),Y.listen(fe,zi.close,Ir))}),()=>{ct.forEach(zi=>zi())}})}(Y,fe,vi,X).pipe(function(Y,fe,w){return X=>{let ke=null;const ct=X.pipe((0,bt.U)(vi=>({open:vi})),(0,Ut.h)(vi=>{const zi=w();return zi===vi.open||ke&&ke.open!==zi?(ke&&ke.open!==vi.open&&(ke=null),!1):(ke=vi,!0)}),(0,Lr.B)()),Jn=ct.pipe((0,Ut.h)(vi=>vi.open),nt(Y)),Ir=ct.pipe((0,Ut.h)(vi=>!vi.open),nt(fe));return(0,ze.T)(Jn,Ir).pipe((0,Ut.h)(vi=>vi===ke&&(ke=null,vi.open!==w())),(0,bt.U)(vi=>vi.open))}}(Jn,Ir,X)).subscribe(Do=>Do?ke():ct());return()=>zi.unsubscribe()}let bi=(()=>{class Y{constructor(w){this._ngbConfig=w,this.autoClose=!0,this.placement="auto",this.triggers="click",this.disablePopover=!1,this.openDelay=0,this.closeDelay=0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(w){this._animation=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(Fs))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(Fs))},token:Y,providedIn:"root"}),Y})(),cs=0,xa=(()=>{class Y{isTitleTemplate(){return this.title instanceof r.Rgc}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-popover-window"]],hostAttrs:["role","tooltip"],hostVars:5,hostBindings:function(w,X){2&w&&(r.Ikx("id",X.id),r.Tol("popover"+(X.popoverClass?" "+X.popoverClass:"")),r.ekj("fade",X.animation))},inputs:{animation:"animation",title:"title",id:"id",popoverClass:"popoverClass",context:"context"},ngContentSelectors:Hi,decls:4,vars:1,consts:[[1,"arrow"],["class","popover-header",4,"ngIf"],[1,"popover-body"],[1,"popover-header"],["simpleTitle",""],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(w,X){1&w&&(r.F$t(),r._UZ(0,"div",0),r.YNc(1,el,4,2,"h3",1),r.TgZ(2,"div",2),r.Hsn(3),r.qZA()),2&w&&(r.xp6(1),r.Q6J("ngIf",X.title))},directives:[u.O5,u.tP],styles:["ngb-popover-window.bs-popover-bottom>.arrow,ngb-popover-window.bs-popover-top>.arrow{left:50%;margin-left:-.5rem}ngb-popover-window.bs-popover-bottom-left>.arrow,ngb-popover-window.bs-popover-top-left>.arrow{left:2em}ngb-popover-window.bs-popover-bottom-right>.arrow,ngb-popover-window.bs-popover-top-right>.arrow{left:auto;right:2em}ngb-popover-window.bs-popover-left>.arrow,ngb-popover-window.bs-popover-right>.arrow{top:50%;margin-top:-.5rem}ngb-popover-window.bs-popover-left-top>.arrow,ngb-popover-window.bs-popover-right-top>.arrow{top:.7em}ngb-popover-window.bs-popover-left-bottom>.arrow,ngb-popover-window.bs-popover-right-bottom>.arrow{top:auto;bottom:.7em}"],encapsulation:2,changeDetection:0}),Y})(),na=(()=>{class Y{constructor(w,X,ke,ct,Jn,Ir,vi,zi,Do,xs){this._elementRef=w,this._renderer=X,this._ngZone=vi,this._document=zi,this._changeDetector=Do,this.shown=new r.vpe,this.hidden=new r.vpe,this._ngbPopoverWindowId="ngb-popover-"+cs++,this._windowRef=null,this.animation=Ir.animation,this.autoClose=Ir.autoClose,this.placement=Ir.placement,this.triggers=Ir.triggers,this.container=Ir.container,this.disablePopover=Ir.disablePopover,this.popoverClass=Ir.popoverClass,this.openDelay=Ir.openDelay,this.closeDelay=Ir.closeDelay,this._popupService=new Lu(xa,ke,Jn,X,this._ngZone,ct,xs),this._zoneSubscription=vi.onStable.subscribe(()=>{this._windowRef&&Ye(this._elementRef.nativeElement,this._windowRef.location.nativeElement,this.placement,"body"===this.container,"bs-popover")})}_isDisabled(){return!(!this.disablePopover&&(this.ngbPopover||this.popoverTitle))}open(w){if(!this._windowRef&&!this._isDisabled()){const{windowRef:X,transition$:ke}=this._popupService.open(this.ngbPopover,w,this.animation);this._windowRef=X,this._windowRef.instance.animation=this.animation,this._windowRef.instance.title=this.popoverTitle,this._windowRef.instance.context=w,this._windowRef.instance.popoverClass=this.popoverClass,this._windowRef.instance.id=this._ngbPopoverWindowId,this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ngbPopoverWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),la(this._ngZone,this._document,this.autoClose,()=>this.close(),this.hidden,[this._windowRef.location.nativeElement]),ke.subscribe(()=>this.shown.emit())}}close(){this._windowRef&&(this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby"),this._popupService.close(this.animation).subscribe(()=>{this._windowRef=null,this.hidden.emit(),this._changeDetector.markForCheck()}))}toggle(){this._windowRef?this.close():this.open()}isOpen(){return null!=this._windowRef}ngOnInit(){this._unregisterListenersFn=cr(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)}ngOnChanges({ngbPopover:w,popoverTitle:X,disablePopover:ke,popoverClass:ct}){ct&&this.isOpen()&&(this._windowRef.instance.popoverClass=ct.currentValue),(w||X||ke)&&this._isDisabled()&&this.close()}ngOnDestroy(){this.close(),this._unregisterListenersFn&&this._unregisterListenersFn(),this._zoneSubscription.unsubscribe()}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(r._Vd),r.Y36(r.s_b),r.Y36(bi),r.Y36(r.R0b),r.Y36(u.K0),r.Y36(r.sBO),r.Y36(r.z2F))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbPopover",""]],inputs:{animation:"animation",autoClose:"autoClose",placement:"placement",triggers:"triggers",container:"container",disablePopover:"disablePopover",popoverClass:"popoverClass",openDelay:"openDelay",closeDelay:"closeDelay",ngbPopover:"ngbPopover",popoverTitle:"popoverTitle"},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbPopover"],features:[r.TTD]}),Y})(),_l=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({imports:[[u.ez]]}),Y})(),zl=(()=>{class Y{constructor(){this.max=100,this.animated=!1,this.striped=!1,this.showValue=!1}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})(),zc=(()=>{class Y{constructor(w){this.value=0,this.max=w.max,this.animated=w.animated,this.striped=w.striped,this.textType=w.textType,this.type=w.type,this.showValue=w.showValue,this.height=w.height}set max(w){this._max=!ko(w)||w<=0?100:w}get max(){return this._max}getValue(){return function(Y,fe,w=0){return Math.max(Math.min(Y,fe),w)}(this.value,this.max)}getPercentValue(){return 100*this.getValue()/this.max}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(zl))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-progressbar"]],hostAttrs:[1,"progress"],hostVars:2,hostBindings:function(w,X){2&w&&r.Udp("height",X.height)},inputs:{value:"value",max:"max",animated:"animated",striped:"striped",textType:"textType",type:"type",showValue:"showValue",height:"height"},ngContentSelectors:Hi,decls:3,vars:11,consts:function(){let fe;return fe="" + "\ufffd0\ufffd" + "",[["role","progressbar","aria-valuemin","0"],[4,"ngIf"],fe]},template:function(w,X){1&w&&(r.F$t(),r.TgZ(0,"div",0),r.YNc(1,ca,3,3,"span",1),r.Hsn(2),r.qZA()),2&w&&(r.DjV("progress-bar",X.type?" bg-"+X.type:"","",X.textType?" text-"+X.textType:"","\n ",X.animated?" progress-bar-animated":"","",X.striped?" progress-bar-striped":"",""),r.Udp("width",X.getPercentValue(),"%"),r.uIk("aria-valuenow",X.getValue())("aria-valuemax",X.max),r.xp6(1),r.Q6J("ngIf",X.showValue))},directives:[u.O5],pipes:[u.Zx],encapsulation:2,changeDetection:0}),Y})(),qf=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({imports:[[u.ez]]}),Y})();class mf{constructor(fe,w,X){this.hour=pi(fe),this.minute=pi(w),this.second=pi(X)}changeHour(fe=1){this.updateHour((isNaN(this.hour)?0:this.hour)+fe)}updateHour(fe){this.hour=ko(fe)?(fe<0?24+fe:fe)%24:NaN}changeMinute(fe=1){this.updateMinute((isNaN(this.minute)?0:this.minute)+fe)}updateMinute(fe){ko(fe)?(this.minute=fe%60<0?60+fe%60:fe%60,this.changeHour(Math.floor(fe/60))):this.minute=NaN}changeSecond(fe=1){this.updateSecond((isNaN(this.second)?0:this.second)+fe)}updateSecond(fe){ko(fe)?(this.second=fe<0?60+fe%60:fe%60,this.changeMinute(Math.floor(fe/60))):this.second=NaN}isValid(fe=!0){return ko(this.hour)&&ko(this.minute)&&(!fe||ko(this.second))}toString(){return`${this.hour||0}:${this.minute||0}:${this.second||0}`}}let Uf=(()=>{class Y{constructor(){this.meridian=!1,this.spinners=!0,this.seconds=!1,this.hourStep=1,this.minuteStep=1,this.secondStep=1,this.disabled=!1,this.readonlyInputs=!1,this.size="medium"}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})();function dd(){return new pp}let Fd=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:dd,token:Y,providedIn:"root"}),Y})(),pp=(()=>{class Y extends Fd{fromModel(w){return w&&Eo(w.hour)&&Eo(w.minute)?{hour:w.hour,minute:w.minute,second:Eo(w.second)?w.second:null}:null}toModel(w){return w&&Eo(w.hour)&&Eo(w.minute)?{hour:w.hour,minute:w.minute,second:Eo(w.second)?w.second:null}:null}}return Y.\u0275fac=function(){let fe;return function(X){return(fe||(fe=r.n5z(Y)))(X||Y)}}(),Y.\u0275prov=r.Yz7({token:Y,factory:Y.\u0275fac}),Y})(),i_=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return function(Y){return new F_(Y)}(r.LFG(r.soG))},token:Y,providedIn:"root"}),Y})(),F_=(()=>{class Y extends i_{constructor(w){super(),this._periods=(0,u.ol)(w,u.x.Standalone,u.Tn.Narrow)}getMorningPeriod(){return this._periods[0]}getAfternoonPeriod(){return this._periods[1]}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(r.soG))},Y.\u0275prov=r.Yz7({token:Y,factory:Y.\u0275fac}),Y})();const Bf=/[^0-9]/g;let kd=(()=>{class Y{constructor(w,X,ke,ct){this._config=w,this._ngbTimeAdapter=X,this._cd=ke,this.i18n=ct,this.onChange=Jn=>{},this.onTouched=()=>{},this.meridian=w.meridian,this.spinners=w.spinners,this.seconds=w.seconds,this.hourStep=w.hourStep,this.minuteStep=w.minuteStep,this.secondStep=w.secondStep,this.disabled=w.disabled,this.readonlyInputs=w.readonlyInputs,this.size=w.size}set hourStep(w){this._hourStep=Eo(w)?w:this._config.hourStep}get hourStep(){return this._hourStep}set minuteStep(w){this._minuteStep=Eo(w)?w:this._config.minuteStep}get minuteStep(){return this._minuteStep}set secondStep(w){this._secondStep=Eo(w)?w:this._config.secondStep}get secondStep(){return this._secondStep}writeValue(w){const X=this._ngbTimeAdapter.fromModel(w);this.model=X?new mf(X.hour,X.minute,X.second):new mf,!this.seconds&&(!X||!ko(X.second))&&(this.model.second=0),this._cd.markForCheck()}registerOnChange(w){this.onChange=w}registerOnTouched(w){this.onTouched=w}setDisabledState(w){this.disabled=w}changeHour(w){this.model.changeHour(w),this.propagateModelChange()}changeMinute(w){this.model.changeMinute(w),this.propagateModelChange()}changeSecond(w){this.model.changeSecond(w),this.propagateModelChange()}updateHour(w){const X=this.model.hour>=12,ke=pi(w);this.model.updateHour(this.meridian&&(X&&ke<12||!X&&12===ke)?ke+12:ke),this.propagateModelChange()}updateMinute(w){this.model.updateMinute(pi(w)),this.propagateModelChange()}updateSecond(w){this.model.updateSecond(pi(w)),this.propagateModelChange()}toggleMeridian(){this.meridian&&this.changeHour(12)}formatInput(w){w.value=w.value.replace(Bf,"")}formatHour(w){return ko(w)?sl(this.meridian?w%12==0?12:w%12:w%24):sl(NaN)}formatMinSec(w){return sl(ko(w)?w:NaN)}handleBlur(){this.onTouched()}get isSmallSize(){return"small"===this.size}get isLargeSize(){return"large"===this.size}ngOnChanges(w){w.seconds&&!this.seconds&&this.model&&!ko(this.model.second)&&(this.model.second=0,this.propagateModelChange(!1))}propagateModelChange(w=!0){w&&this.onTouched(),this.model.isValid(this.seconds)?this.onChange(this._ngbTimeAdapter.toModel({hour:this.model.hour,minute:this.model.minute,second:this.model.second})):this.onChange(this._ngbTimeAdapter.toModel(null))}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(Uf),r.Y36(Fd),r.Y36(r.sBO),r.Y36(i_))},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-timepicker"]],inputs:{meridian:"meridian",spinners:"spinners",seconds:"seconds",hourStep:"hourStep",minuteStep:"minuteStep",secondStep:"secondStep",readonlyInputs:"readonlyInputs",size:"size"},features:[r._Bn([{provide:Mr.JU,useExisting:(0,r.Gpc)(()=>Y),multi:!0}]),r.TTD],decls:16,vars:25,consts:function(){let fe,w,X,ke,ct,Jn,Ir,vi,zi,Do,xs,Xo,Rs,ma;return fe="HH",w="Hours",X="MM",ke="Minutes",ct="Increment hours",Jn="Decrement hours",Ir="Increment minutes",vi="Decrement minutes",zi="SS",Do="Seconds",xs="Increment seconds",Xo="Decrement seconds",Rs="" + "\ufffd0\ufffd" + "",ma="" + "\ufffd0\ufffd" + "",[[3,"disabled"],[1,"ngb-tp"],[1,"ngb-tp-input-container","ngb-tp-hour"],["tabindex","-1","type","button","class","btn btn-link",3,"btn-sm","btn-lg","disabled","click",4,"ngIf"],["type","text","maxlength","2","inputmode","numeric","placeholder",fe,"aria-label",w,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],[1,"ngb-tp-spacer"],[1,"ngb-tp-input-container","ngb-tp-minute"],["type","text","maxlength","2","inputmode","numeric","placeholder",X,"aria-label",ke,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],["class","ngb-tp-spacer",4,"ngIf"],["class","ngb-tp-input-container ngb-tp-second",4,"ngIf"],["class","ngb-tp-meridian",4,"ngIf"],["tabindex","-1","type","button",1,"btn","btn-link",3,"disabled","click"],[1,"chevron","ngb-tp-chevron"],[1,"sr-only"],ct,[1,"chevron","ngb-tp-chevron","bottom"],Jn,Ir,vi,[1,"ngb-tp-input-container","ngb-tp-second"],["type","text","maxlength","2","inputmode","numeric","placeholder",zi,"aria-label",Do,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],xs,Xo,[1,"ngb-tp-meridian"],["type","button",1,"btn","btn-outline-primary",3,"disabled","click"],[4,"ngIf","ngIfElse"],["am",""],Rs,ma]},template:function(w,X){1&w&&(r.TgZ(0,"fieldset",0),r.TgZ(1,"div",1),r.TgZ(2,"div",2),r.YNc(3,fo,4,7,"button",3),r.TgZ(4,"input",4),r.NdJ("change",function(ct){return X.updateHour(ct.target.value)})("blur",function(){return X.handleBlur()})("input",function(ct){return X.formatInput(ct.target)})("keydown.ArrowUp",function(ct){return X.changeHour(X.hourStep),ct.preventDefault()})("keydown.ArrowDown",function(ct){return X.changeHour(-X.hourStep),ct.preventDefault()}),r.qZA(),r.YNc(5,Ya,4,7,"button",3),r.qZA(),r.TgZ(6,"div",5),r._uU(7,":"),r.qZA(),r.TgZ(8,"div",6),r.YNc(9,Ao,4,7,"button",3),r.TgZ(10,"input",7),r.NdJ("change",function(ct){return X.updateMinute(ct.target.value)})("blur",function(){return X.handleBlur()})("input",function(ct){return X.formatInput(ct.target)})("keydown.ArrowUp",function(ct){return X.changeMinute(X.minuteStep),ct.preventDefault()})("keydown.ArrowDown",function(ct){return X.changeMinute(-X.minuteStep),ct.preventDefault()}),r.qZA(),r.YNc(11,fs,4,7,"button",3),r.qZA(),r.YNc(12,Ca,2,0,"div",8),r.YNc(13,Ws,4,9,"div",9),r.YNc(14,Po,1,0,"div",8),r.YNc(15,ps,5,9,"div",10),r.qZA(),r.qZA()),2&w&&(r.ekj("disabled",X.disabled),r.Q6J("disabled",X.disabled),r.xp6(3),r.Q6J("ngIf",X.spinners),r.xp6(1),r.ekj("form-control-sm",X.isSmallSize)("form-control-lg",X.isLargeSize),r.Q6J("value",X.formatHour(null==X.model?null:X.model.hour))("readOnly",X.readonlyInputs)("disabled",X.disabled),r.xp6(1),r.Q6J("ngIf",X.spinners),r.xp6(4),r.Q6J("ngIf",X.spinners),r.xp6(1),r.ekj("form-control-sm",X.isSmallSize)("form-control-lg",X.isLargeSize),r.Q6J("value",X.formatMinSec(null==X.model?null:X.model.minute))("readOnly",X.readonlyInputs)("disabled",X.disabled),r.xp6(1),r.Q6J("ngIf",X.spinners),r.xp6(1),r.Q6J("ngIf",X.seconds),r.xp6(1),r.Q6J("ngIf",X.seconds),r.xp6(1),r.Q6J("ngIf",X.meridian),r.xp6(1),r.Q6J("ngIf",X.meridian))},directives:[u.O5],styles:['ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:"";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-meridian,.ngb-tp-minute,.ngb-tp-second{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}'],encapsulation:2}),Y})(),Yf=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({imports:[[u.ez]]}),Y})(),rh=(()=>{class Y{constructor(w){this._ngbConfig=w,this.autoClose=!0,this.placement="auto",this.triggers="hover focus",this.disableTooltip=!1,this.openDelay=0,this.closeDelay=0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(w){this._animation=w}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(Fs))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(Fs))},token:Y,providedIn:"root"}),Y})(),Ed=0,xf=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-tooltip-window"]],hostAttrs:["role","tooltip"],hostVars:5,hostBindings:function(w,X){2&w&&(r.Ikx("id",X.id),r.Tol("tooltip"+(X.tooltipClass?" "+X.tooltipClass:"")),r.ekj("fade",X.animation))},inputs:{animation:"animation",id:"id",tooltipClass:"tooltipClass"},ngContentSelectors:Hi,decls:3,vars:0,consts:[[1,"arrow"],[1,"tooltip-inner"]],template:function(w,X){1&w&&(r.F$t(),r._UZ(0,"div",0),r.TgZ(1,"div",1),r.Hsn(2),r.qZA())},styles:["ngb-tooltip-window{pointer-events:none}ngb-tooltip-window .tooltip-inner{pointer-events:auto}ngb-tooltip-window.bs-tooltip-bottom .arrow,ngb-tooltip-window.bs-tooltip-top .arrow{left:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-bottom-left .arrow,ngb-tooltip-window.bs-tooltip-top-left .arrow{left:1em}ngb-tooltip-window.bs-tooltip-bottom-right .arrow,ngb-tooltip-window.bs-tooltip-top-right .arrow{left:auto;right:.8rem}ngb-tooltip-window.bs-tooltip-left .arrow,ngb-tooltip-window.bs-tooltip-right .arrow{top:calc(50% - .4rem)}ngb-tooltip-window.bs-tooltip-left-top .arrow,ngb-tooltip-window.bs-tooltip-right-top .arrow{top:.4rem}ngb-tooltip-window.bs-tooltip-left-bottom .arrow,ngb-tooltip-window.bs-tooltip-right-bottom .arrow{top:auto;bottom:.4rem}"],encapsulation:2,changeDetection:0}),Y})(),Ph=(()=>{class Y{constructor(w,X,ke,ct,Jn,Ir,vi,zi,Do,xs){this._elementRef=w,this._renderer=X,this._ngZone=vi,this._document=zi,this._changeDetector=Do,this.shown=new r.vpe,this.hidden=new r.vpe,this._ngbTooltipWindowId="ngb-tooltip-"+Ed++,this._windowRef=null,this.animation=Ir.animation,this.autoClose=Ir.autoClose,this.placement=Ir.placement,this.triggers=Ir.triggers,this.container=Ir.container,this.disableTooltip=Ir.disableTooltip,this.tooltipClass=Ir.tooltipClass,this.openDelay=Ir.openDelay,this.closeDelay=Ir.closeDelay,this._popupService=new Lu(xf,ke,Jn,X,this._ngZone,ct,xs),this._zoneSubscription=vi.onStable.subscribe(()=>{this._windowRef&&Ye(this._elementRef.nativeElement,this._windowRef.location.nativeElement,this.placement,"body"===this.container,"bs-tooltip")})}set ngbTooltip(w){this._ngbTooltip=w,!w&&this._windowRef&&this.close()}get ngbTooltip(){return this._ngbTooltip}open(w){if(!this._windowRef&&this._ngbTooltip&&!this.disableTooltip){const{windowRef:X,transition$:ke}=this._popupService.open(this._ngbTooltip,w,this.animation);this._windowRef=X,this._windowRef.instance.animation=this.animation,this._windowRef.instance.tooltipClass=this.tooltipClass,this._windowRef.instance.id=this._ngbTooltipWindowId,this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ngbTooltipWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),la(this._ngZone,this._document,this.autoClose,()=>this.close(),this.hidden,[this._windowRef.location.nativeElement]),ke.subscribe(()=>this.shown.emit())}}close(){null!=this._windowRef&&(this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby"),this._popupService.close(this.animation).subscribe(()=>{this._windowRef=null,this.hidden.emit(),this._changeDetector.markForCheck()}))}toggle(){this._windowRef?this.close():this.open()}isOpen(){return null!=this._windowRef}ngOnInit(){this._unregisterListenersFn=cr(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)}ngOnChanges({tooltipClass:w}){w&&this.isOpen()&&(this._windowRef.instance.tooltipClass=w.currentValue)}ngOnDestroy(){this.close(),this._unregisterListenersFn&&this._unregisterListenersFn(),this._zoneSubscription.unsubscribe()}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(r._Vd),r.Y36(r.s_b),r.Y36(rh),r.Y36(r.R0b),r.Y36(u.K0),r.Y36(r.sBO),r.Y36(r.z2F))},Y.\u0275dir=r.lG2({type:Y,selectors:[["","ngbTooltip",""]],inputs:{animation:"animation",autoClose:"autoClose",placement:"placement",triggers:"triggers",container:"container",disableTooltip:"disableTooltip",tooltipClass:"tooltipClass",openDelay:"openDelay",closeDelay:"closeDelay",ngbTooltip:"ngbTooltip"},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbTooltip"],features:[r.TTD]}),Y})(),Bp=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({}),Y})(),ih=(()=>{class Y{constructor(){this.highlightClass="ngb-highlight",this.accentSensitive=!0}ngOnChanges(w){!this.accentSensitive&&!String.prototype.normalize&&(console.warn("The `accentSensitive` input in `ngb-highlight` cannot be set to `false` in a browser that does not implement the `String.normalize` function. You will have to include a polyfill in your application to use this feature in the current browser."),this.accentSensitive=!0);const X=xi(this.result),ke=Array.isArray(this.term)?this.term:[this.term],ct=zi=>this.accentSensitive?zi:Hl(zi),Jn=ke.map(zi=>function(Y){return Y.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}(ct(xi(zi)))).filter(zi=>zi),Ir=this.accentSensitive?X:Hl(X),vi=Jn.length?Ir.split(new RegExp(`(${Jn.join("|")})`,"gmi")):[X];if(this.accentSensitive)this.parts=vi;else{let zi=0;this.parts=vi.map(Do=>X.substring(zi,zi+=Do.length))}}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-highlight"]],inputs:{highlightClass:"highlightClass",accentSensitive:"accentSensitive",result:"result",term:"term"},features:[r.TTD],decls:1,vars:1,consts:[["ngFor","",3,"ngForOf"],[3,"class",4,"ngIf","ngIfElse"],["even",""]],template:function(w,X){1&w&&r.YNc(0,ne,3,2,"ng-template",0),2&w&&r.Q6J("ngForOf",X.parts)},directives:[u.sg,u.O5],styles:[".ngb-highlight{font-weight:700}"],encapsulation:2,changeDetection:0}),Y})(),Ih=(()=>{class Y{constructor(){this.activeIdx=0,this.focusFirst=!0,this.formatter=xi,this.selectEvent=new r.vpe,this.activeChangeEvent=new r.vpe}hasActive(){return this.activeIdx>-1&&this.activeIdx=0?this.id+"-"+this.activeIdx:void 0)}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275cmp=r.Xpm({type:Y,selectors:[["ngb-typeahead-window"]],hostAttrs:["role","listbox"],hostVars:3,hostBindings:function(w,X){1&w&&r.NdJ("mousedown",function(ct){return ct.preventDefault()}),2&w&&(r.Ikx("id",X.id),r.Tol("dropdown-menu show"+(X.popupClass?" "+X.popupClass:"")))},inputs:{focusFirst:"focusFirst",formatter:"formatter",id:"id",results:"results",term:"term",resultTemplate:"resultTemplate",popupClass:"popupClass"},outputs:{selectEvent:"select",activeChangeEvent:"activeChange"},exportAs:["ngbTypeaheadWindow"],decls:3,vars:1,consts:[["rt",""],["ngFor","",3,"ngForOf"],[3,"result","term"],["type","button","role","option",1,"dropdown-item",3,"id","mouseenter","click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(w,X){1&w&&(r.YNc(0,$e,1,2,"ng-template",null,0,r.W1O),r.YNc(2,ti,2,9,"ng-template",1)),2&w&&(r.xp6(2),r.Q6J("ngForOf",X.results))},directives:[u.sg,ih,u.tP],encapsulation:2}),Y})();const vf=new r.OlP("live announcer delay",{providedIn:"root",factory:function(){return 100}});function $d(Y,fe=!1){let w=Y.body.querySelector("#ngb-live");return null==w&&fe&&(w=Y.createElement("div"),w.setAttribute("id","ngb-live"),w.setAttribute("aria-live","polite"),w.setAttribute("aria-atomic","true"),w.classList.add("sr-only"),Y.body.appendChild(w)),w}let hp=(()=>{class Y{constructor(w,X){this._document=w,this._delay=X}ngOnDestroy(){const w=$d(this._document);w&&w.parentElement.removeChild(w)}say(w){const X=$d(this._document,!0),ke=this._delay;if(null!=X){X.textContent="";const ct=()=>X.textContent=w;null===ke?ct():setTimeout(ct,ke)}}}return Y.\u0275fac=function(w){return new(w||Y)(r.LFG(u.K0),r.LFG(vf))},Y.\u0275prov=r.Yz7({factory:function(){return new Y(r.LFG(u.K0),r.LFG(vf))},token:Y,providedIn:"root"}),Y})(),Zf=(()=>{class Y{constructor(){this.editable=!0,this.focusFirst=!0,this.showHint=!1,this.placement=["bottom-left","bottom-right","top-left","top-right"]}}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275prov=r.Yz7({factory:function(){return new Y},token:Y,providedIn:"root"}),Y})(),qd=0,ac=(()=>{class Y{constructor(w,X,ke,ct,Jn,Ir,vi,zi,Do,xs,Xo,Rs){this._elementRef=w,this._renderer=ke,this._live=zi,this._document=Do,this._ngZone=xs,this._changeDetector=Xo,this._subscription=null,this._closed$=new he.xQ,this._inputValueBackup=null,this._windowRef=null,this.autocomplete="off",this.placement="bottom-left",this.selectItem=new r.vpe,this.activeDescendant=null,this.popupId="ngb-typeahead-"+qd++,this._onTouched=()=>{},this._onChange=ma=>{},this.container=Ir.container,this.editable=Ir.editable,this.focusFirst=Ir.focusFirst,this.showHint=Ir.showHint,this.placement=Ir.placement,this._valueChanges=(0,ge.R)(w.nativeElement,"input").pipe((0,bt.U)(ma=>ma.target.value)),this._resubscribeTypeahead=new ce.X(null),this._popupService=new Lu(Ih,ct,X,ke,this._ngZone,Jn,Rs),this._zoneSubscription=vi.onStable.subscribe(()=>{this.isPopupOpen()&&Ye(this._elementRef.nativeElement,this._windowRef.location.nativeElement,this.placement,"body"===this.container)})}ngOnInit(){this._subscribeToUserInput()}ngOnChanges({ngbTypeahead:w}){w&&!w.firstChange&&(this._unsubscribeFromUserInput(),this._subscribeToUserInput())}ngOnDestroy(){this._closePopup(),this._unsubscribeFromUserInput(),this._zoneSubscription.unsubscribe()}registerOnChange(w){this._onChange=w}registerOnTouched(w){this._onTouched=w}writeValue(w){this._writeInputValue(this._formatItemForInput(w)),this.showHint&&(this._inputValueBackup=w)}setDisabledState(w){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",w)}dismissPopup(){this.isPopupOpen()&&(this._resubscribeTypeahead.next(null),this._closePopup(),this.showHint&&null!==this._inputValueBackup&&this._writeInputValue(this._inputValueBackup),this._changeDetector.markForCheck())}isPopupOpen(){return null!=this._windowRef}handleBlur(){this._resubscribeTypeahead.next(null),this._onTouched()}handleKeyDown(w){if(this.isPopupOpen())switch(w.which){case $i.ArrowDown:w.preventDefault(),this._windowRef.instance.next(),this._showHint();break;case $i.ArrowUp:w.preventDefault(),this._windowRef.instance.prev(),this._showHint();break;case $i.Enter:case $i.Tab:const X=this._windowRef.instance.getActive();ba(X)&&(w.preventDefault(),w.stopPropagation(),this._selectResult(X)),this._closePopup()}}_openPopup(){if(!this.isPopupOpen()){this._inputValueBackup=this._elementRef.nativeElement.value;const{windowRef:w}=this._popupService.open();this._windowRef=w,this._windowRef.instance.id=this.popupId,this._windowRef.instance.selectEvent.subscribe(X=>this._selectResultClosePopup(X)),this._windowRef.instance.activeChangeEvent.subscribe(X=>this.activeDescendant=X),this._windowRef.instance.popupClass=this.popupClass,"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._changeDetector.markForCheck(),la(this._ngZone,this._document,"outside",()=>this.dismissPopup(),this._closed$,[this._elementRef.nativeElement,this._windowRef.location.nativeElement])}}_closePopup(){this._popupService.close().subscribe(()=>{this._closed$.next(),this._windowRef=null,this.activeDescendant=null})}_selectResult(w){let X=!1;this.selectItem.emit({item:w,preventDefault:()=>{X=!0}}),this._resubscribeTypeahead.next(null),X||(this.writeValue(w),this._onChange(w))}_selectResultClosePopup(w){this._selectResult(w),this._closePopup()}_showHint(){var w;if(this.showHint&&(null===(w=this._windowRef)||void 0===w?void 0:w.instance.hasActive())&&null!=this._inputValueBackup){const X=this._inputValueBackup.toLowerCase(),ke=this._formatItemForInput(this._windowRef.instance.getActive());X===ke.substr(0,this._inputValueBackup.length).toLowerCase()?(this._writeInputValue(this._inputValueBackup+ke.substr(this._inputValueBackup.length)),this._elementRef.nativeElement.setSelectionRange.apply(this._elementRef.nativeElement,[this._inputValueBackup.length,ke.length])):this._writeInputValue(ke)}}_formatItemForInput(w){return null!=w&&this.inputFormatter?this.inputFormatter(w):xi(w)}_writeInputValue(w){this._renderer.setProperty(this._elementRef.nativeElement,"value",xi(w))}_subscribeToUserInput(){const w=this._valueChanges.pipe((0,Zn.b)(X=>{this._inputValueBackup=this.showHint?X:null,this._onChange(this.editable?X:void 0)}),this.ngbTypeahead?this.ngbTypeahead:()=>(0,ie.of)([]));this._subscription=this._resubscribeTypeahead.pipe((0,Xt.w)(()=>w)).subscribe(X=>{X&&0!==X.length?(this._openPopup(),this._windowRef.instance.focusFirst=this.focusFirst,this._windowRef.instance.results=X,this._windowRef.instance.term=this._elementRef.nativeElement.value,this.resultFormatter&&(this._windowRef.instance.formatter=this.resultFormatter),this.resultTemplate&&(this._windowRef.instance.resultTemplate=this.resultTemplate),this._windowRef.instance.resetActive(),this._windowRef.changeDetectorRef.detectChanges(),this._showHint()):this._closePopup();const ke=X?X.length:0;this._live.say(0===ke?"No results available":`${ke} result${1===ke?"":"s"} available`)})}_unsubscribeFromUserInput(){this._subscription&&this._subscription.unsubscribe(),this._subscription=null}}return Y.\u0275fac=function(w){return new(w||Y)(r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(r._Vd),r.Y36(Zf),r.Y36(r.R0b),r.Y36(hp),r.Y36(u.K0),r.Y36(r.R0b),r.Y36(r.sBO),r.Y36(r.z2F))},Y.\u0275dir=r.lG2({type:Y,selectors:[["input","ngbTypeahead",""]],hostAttrs:["autocapitalize","off","autocorrect","off","role","combobox","aria-multiline","false"],hostVars:7,hostBindings:function(w,X){1&w&&r.NdJ("blur",function(){return X.handleBlur()})("keydown",function(ct){return X.handleKeyDown(ct)}),2&w&&(r.Ikx("autocomplete",X.autocomplete),r.uIk("aria-autocomplete",X.showHint?"both":"list")("aria-activedescendant",X.activeDescendant)("aria-owns",X.isPopupOpen()?X.popupId:null)("aria-expanded",X.isPopupOpen()),r.ekj("open",X.isPopupOpen()))},inputs:{autocomplete:"autocomplete",placement:"placement",container:"container",editable:"editable",focusFirst:"focusFirst",showHint:"showHint",inputFormatter:"inputFormatter",ngbTypeahead:"ngbTypeahead",resultFormatter:"resultFormatter",resultTemplate:"resultTemplate",popupClass:"popupClass"},outputs:{selectItem:"selectItem"},exportAs:["ngbTypeahead"],features:[r._Bn([{provide:Mr.JU,useExisting:(0,r.Gpc)(()=>Y),multi:!0}]),r.TTD]}),Y})(),oh=(()=>{class Y{}return Y.\u0275fac=function(w){return new(w||Y)},Y.\u0275mod=r.oAB({type:Y}),Y.\u0275inj=r.cJS({imports:[[u.ez]]}),Y})()},84051:(v,T,i)=>{"use strict";i.d(T,{vq:()=>lo,ii:()=>rr,Ke:()=>fo,nE:()=>$s,dX:()=>jo,$7:()=>os,AR:()=>Gi,xD:()=>So,Sr:()=>us,Hg:()=>gr});var r=i(74788),u=i(12057),p=i(79765),d=i(22759),e=i(26215),_=i(46782),y=i(64762);const S=["*"];function A(tt,sn){1&tt&&r._UZ(0,"datatable-progress")}function N(tt,sn){if(1&tt&&r._UZ(0,"datatable-summary-row",9),2&tt){const ne=r.oxw(2);r.Q6J("rowHeight",ne.summaryHeight)("offsetX",ne.offsetX)("innerWidth",ne.innerWidth)("rows",ne.rows)("columns",ne.columns)}}function L(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-body-row",13),r.NdJ("treeAction",function(){r.CHM(ne);const Lt=r.oxw().$implicit;return r.oxw(2).onTreeAction(Lt)})("activate",function(Lt){r.CHM(ne);const an=r.oxw().index,ti=r.oxw(2);return r.MAs(2).onActivate(Lt,ti.indexes.first+an)}),r.qZA()}if(2&tt){const ne=r.oxw().$implicit,$e=r.oxw(2),Lt=r.MAs(2);r.Q6J("isSelected",Lt.getRowSelected(ne))("innerWidth",$e.innerWidth)("offsetX",$e.offsetX)("columns",$e.columns)("rowHeight",$e.getRowHeight(ne))("row",ne)("rowIndex",$e.getRowIndex(ne))("expanded",$e.getRowExpanded(ne))("rowClass",$e.rowClass)("displayCheck",$e.displayCheck)("treeStatus",ne&&ne.treeStatus)}}function Z(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-body-row",15),r.NdJ("activate",function(Lt){const ti=r.CHM(ne).index;return r.oxw(4),r.MAs(2).onActivate(Lt,ti)}),r.qZA()}if(2&tt){const ne=sn.$implicit,$e=r.oxw(2).$implicit,Lt=r.oxw(2),an=r.MAs(2);r.Q6J("isSelected",an.getRowSelected(ne))("innerWidth",Lt.innerWidth)("offsetX",Lt.offsetX)("columns",Lt.columns)("rowHeight",Lt.getRowHeight(ne))("row",ne)("group",$e.value)("rowIndex",Lt.getRowIndex(ne))("expanded",Lt.getRowExpanded(ne))("rowClass",Lt.rowClass)}}function J(tt,sn){if(1&tt&&r.YNc(0,Z,1,10,"datatable-body-row",14),2&tt){const ne=r.oxw().$implicit,$e=r.oxw(2);r.Q6J("ngForOf",ne.value)("ngForTrackBy",$e.rowTrackingFn)}}function K(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-row-wrapper",10),r.NdJ("rowContextmenu",function(Lt){return r.CHM(ne),r.oxw(2).rowContextmenu.emit(Lt)}),r.YNc(1,L,1,11,"datatable-body-row",11),r.YNc(2,J,1,2,"ng-template",null,12,r.W1O),r.qZA()}if(2&tt){const ne=sn.$implicit,$e=sn.index,Lt=r.MAs(3),an=r.oxw(2);r.Q6J("groupedRows",an.groupedRows)("innerWidth",an.innerWidth)("ngStyle",an.getRowsStyles(ne))("rowDetail",an.rowDetail)("groupHeader",an.groupHeader)("offsetX",an.offsetX)("detailRowHeight",an.getDetailRowHeight(ne&&ne[$e],$e))("row",ne)("expanded",an.getRowExpanded(ne))("rowIndex",an.getRowIndex(ne&&ne[$e])),r.xp6(1),r.Q6J("ngIf",!an.groupedRows)("ngIfElse",Lt)}}function ee(tt,sn){if(1&tt&&r._UZ(0,"datatable-summary-row",16),2&tt){const ne=r.oxw(2);r.Q6J("ngStyle",ne.getBottomSummaryRowStyles())("rowHeight",ne.summaryHeight)("offsetX",ne.offsetX)("innerWidth",ne.innerWidth)("rows",ne.rows)("columns",ne.columns)}}function ue(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-scroller",5),r.NdJ("scroll",function(Lt){return r.CHM(ne),r.oxw().onBodyScroll(Lt)}),r.YNc(1,N,1,5,"datatable-summary-row",6),r.YNc(2,K,4,12,"datatable-row-wrapper",7),r.YNc(3,ee,1,6,"datatable-summary-row",8),r.qZA()}if(2&tt){const ne=r.oxw();r.Q6J("scrollbarV",ne.scrollbarV)("scrollbarH",ne.scrollbarH)("scrollHeight",ne.scrollHeight)("scrollWidth",null==ne.columnGroupWidths?null:ne.columnGroupWidths.total),r.xp6(1),r.Q6J("ngIf",ne.summaryRow&&"top"===ne.summaryPosition),r.xp6(1),r.Q6J("ngForOf",ne.temp)("ngForTrackBy",ne.rowTrackingFn),r.xp6(1),r.Q6J("ngIf",ne.summaryRow&&"bottom"===ne.summaryPosition)}}function ae(tt,sn){if(1&tt&&r._UZ(0,"div",17),2&tt){const ne=r.oxw();r.Q6J("innerHTML",ne.emptyMessage,r.oJD)}}function H(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-header-cell",4),r.NdJ("resize",function(Lt){const ti=r.CHM(ne).$implicit;return r.oxw(2).onColumnResized(Lt,ti)})("longPressStart",function(Lt){return r.CHM(ne),r.oxw(2).onLongPressStart(Lt)})("longPressEnd",function(Lt){return r.CHM(ne),r.oxw(2).onLongPressEnd(Lt)})("sort",function(Lt){return r.CHM(ne),r.oxw(2).onSort(Lt)})("select",function(Lt){return r.CHM(ne),r.oxw(2).select.emit(Lt)})("columnContextmenu",function(Lt){return r.CHM(ne),r.oxw(2).columnContextmenu.emit(Lt)}),r.qZA()}if(2&tt){const ne=sn.$implicit,$e=r.oxw(2);r.Q6J("resizeEnabled",ne.resizeable)("pressModel",ne)("pressEnabled",$e.reorderable&&ne.draggable)("dragX",$e.reorderable&&ne.draggable&&ne.dragging)("dragY",!1)("dragModel",ne)("dragEventTarget",$e.dragEventTarget)("headerHeight",$e.headerHeight)("isTarget",ne.isTarget)("targetMarkerTemplate",$e.targetMarkerTemplate)("targetMarkerContext",ne.targetMarkerContext)("column",ne)("sortType",$e.sortType)("sorts",$e.sorts)("selectionType",$e.selectionType)("sortAscendingIcon",$e.sortAscendingIcon)("sortDescendingIcon",$e.sortDescendingIcon)("sortUnsetIcon",$e.sortUnsetIcon)("allRowsSelected",$e.allRowsSelected)}}function se(tt,sn){if(1&tt&&(r.TgZ(0,"div",2),r.YNc(1,H,1,19,"datatable-header-cell",3),r.qZA()),2&tt){const ne=sn.$implicit,$e=r.oxw();r.Tol("datatable-row-"+ne.type),r.Q6J("ngStyle",$e._styleByGroup[ne.type]),r.xp6(1),r.Q6J("ngForOf",ne.columns)("ngForTrackBy",$e.columnTrackingFn)}}function Ee(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-header",4),r.NdJ("sort",function(Lt){return r.CHM(ne),r.oxw().onColumnSort(Lt)})("resize",function(Lt){return r.CHM(ne),r.oxw().onColumnResize(Lt)})("reorder",function(Lt){return r.CHM(ne),r.oxw().onColumnReorder(Lt)})("select",function(Lt){return r.CHM(ne),r.oxw().onHeaderSelect(Lt)})("columnContextmenu",function(Lt){return r.CHM(ne),r.oxw().onColumnContextmenu(Lt)}),r.ALo(1,"async"),r.qZA()}if(2&tt){const ne=r.oxw();r.Q6J("sorts",ne.sorts)("sortType",ne.sortType)("scrollbarH",ne.scrollbarH)("innerWidth",ne._innerWidth)("offsetX",r.lcZ(1,15,ne._offsetX))("dealsWithGroup",void 0!==ne.groupedRows)("columns",ne._internalColumns)("headerHeight",ne.headerHeight)("reorderable",ne.reorderable)("targetMarkerTemplate",ne.targetMarkerTemplate)("sortAscendingIcon",ne.cssClasses.sortAscending)("sortDescendingIcon",ne.cssClasses.sortDescending)("sortUnsetIcon",ne.cssClasses.sortUnset)("allRowsSelected",ne.allRowsSelected)("selectionType",ne.selectionType)}}function ie(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-footer",5),r.NdJ("page",function(Lt){return r.CHM(ne),r.oxw().onFooterPage(Lt)}),r.qZA()}if(2&tt){const ne=r.oxw();r.Q6J("rowCount",ne.rowCount)("pageSize",ne.pageSize)("offset",ne.offset)("footerHeight",ne.footerHeight)("footerTemplate",ne.footer)("totalMessage",ne.messages.totalMessage)("pagerLeftArrowIcon",ne.cssClasses.pagerLeftArrow)("pagerRightArrowIcon",ne.cssClasses.pagerRightArrow)("pagerPreviousIcon",ne.cssClasses.pagerPrevious)("selectedCount",ne.selected.length)("selectedMessage",!!ne.selectionType&&ne.messages.selectedMessage)("pagerNextIcon",ne.cssClasses.pagerNext)}}function he(tt,sn){}function ge(tt,sn){if(1&tt&&r.YNc(0,he,0,0,"ng-template",5),2&tt){const ne=r.oxw();r.Q6J("ngTemplateOutlet",ne.targetMarkerTemplate)("ngTemplateOutletContext",ne.targetMarkerContext)}}function De(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"label",6),r.TgZ(1,"input",7),r.NdJ("change",function(){r.CHM(ne);const Lt=r.oxw();return Lt.select.emit(!Lt.allRowsSelected)}),r.qZA(),r.qZA()}if(2&tt){const ne=r.oxw();r.xp6(1),r.Q6J("checked",ne.allRowsSelected)}}function ce(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"span",8),r.TgZ(1,"span",9),r.NdJ("click",function(){return r.CHM(ne),r.oxw().onSort()}),r.qZA(),r.qZA()}if(2&tt){const ne=r.oxw();r.xp6(1),r.Q6J("innerHTML",ne.name,r.oJD)}}function lt(tt,sn){}function Ve(tt,sn){if(1&tt&&r.YNc(0,lt,0,0,"ng-template",5),2&tt){const ne=r.oxw();r.Q6J("ngTemplateOutlet",ne.column.headerTemplate)("ngTemplateOutletContext",ne.cellContext)}}function ze(tt,sn){}const Be=function(tt,sn,ne,$e,Lt){return{rowCount:tt,pageSize:sn,selectedCount:ne,curPage:$e,offset:Lt}};function Pe(tt,sn){if(1&tt&&r.YNc(0,ze,0,0,"ng-template",4),2&tt){const ne=r.oxw();r.Q6J("ngTemplateOutlet",ne.footerTemplate.template)("ngTemplateOutletContext",r.qbA(2,Be,ne.rowCount,ne.pageSize,ne.selectedCount,ne.curPage,ne.offset))}}function je(tt,sn){if(1&tt&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&tt){const ne=r.oxw(2);r.xp6(1),r.AsE(" ",null==ne.selectedCount?null:ne.selectedCount.toLocaleString()," ",ne.selectedMessage," / ")}}function He(tt,sn){if(1&tt&&(r.TgZ(0,"div",5),r.YNc(1,je,2,2,"span",1),r._uU(2),r.qZA()),2&tt){const ne=r.oxw();r.xp6(1),r.Q6J("ngIf",ne.selectedMessage),r.xp6(1),r.AsE(" ",null==ne.rowCount?null:ne.rowCount.toLocaleString()," ",ne.totalMessage," ")}}function Vt(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-pager",6),r.NdJ("change",function(Lt){return r.CHM(ne),r.oxw().page.emit(Lt)}),r.qZA()}if(2&tt){const ne=r.oxw();r.Q6J("pagerLeftArrowIcon",ne.pagerLeftArrowIcon)("pagerRightArrowIcon",ne.pagerRightArrowIcon)("pagerPreviousIcon",ne.pagerPreviousIcon)("pagerNextIcon",ne.pagerNextIcon)("page",ne.curPage)("size",ne.pageSize)("count",ne.rowCount)("hidden",!ne.isVisible)}}const it=function(tt){return{"selected-count":tt}};function tn(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"li",6),r.TgZ(1,"a",7),r.NdJ("click",function(){const an=r.CHM(ne).$implicit;return r.oxw().selectPage(an.number)}),r._uU(2),r.qZA(),r.qZA()}if(2&tt){const ne=sn.$implicit,$e=r.oxw();r.ekj("active",ne.number===$e.page),r.uIk("aria-label","page "+ne.number),r.xp6(2),r.hij(" ",ne.text," ")}}function It(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"datatable-body-cell",3),r.NdJ("activate",function(Lt){const ti=r.CHM(ne).index;return r.oxw(2).onActivate(Lt,ti)})("treeAction",function(){return r.CHM(ne),r.oxw(2).onTreeAction()}),r.qZA()}if(2&tt){const ne=sn.$implicit,$e=r.oxw(2);r.Q6J("row",$e.row)("group",$e.group)("expanded",$e.expanded)("isSelected",$e.isSelected)("rowIndex",$e.rowIndex)("column",ne)("rowHeight",$e.rowHeight)("displayCheck",$e.displayCheck)("treeStatus",$e.treeStatus)}}function Zt(tt,sn){if(1&tt&&(r.TgZ(0,"div",1),r.YNc(1,It,1,9,"datatable-body-cell",2),r.qZA()),2&tt){const ne=sn.$implicit,$e=r.oxw();r.Gre("datatable-row-",ne.type," datatable-row-group"),r.Q6J("ngStyle",$e._groupStyles[ne.type]),r.xp6(1),r.Q6J("ngForOf",ne.columns)("ngForTrackBy",$e.columnTrackingFn)}}function Ut(tt,sn){}function Bt(tt,sn){if(1&tt&&r.YNc(0,Ut,0,0,"ng-template",4),2&tt){const ne=r.oxw(2);r.Q6J("ngTemplateOutlet",ne.groupHeader.template)("ngTemplateOutletContext",ne.groupContext)}}function bt(tt,sn){if(1&tt&&(r.TgZ(0,"div",3),r.YNc(1,Bt,1,2,void 0,1),r.qZA()),2&tt){const ne=r.oxw();r.Q6J("ngStyle",ne.getGroupHeaderStyle()),r.xp6(1),r.Q6J("ngIf",ne.groupHeader&&ne.groupHeader.template)}}function Gt(tt,sn){1&tt&&r.Hsn(0,0,["*ngIf","(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template"])}function xt(tt,sn){}function Xt(tt,sn){if(1&tt&&r.YNc(0,xt,0,0,"ng-template",4),2&tt){const ne=r.oxw(2);r.Q6J("ngTemplateOutlet",ne.rowDetail.template)("ngTemplateOutletContext",ne.rowContext)}}function Zn(tt,sn){if(1&tt&&(r.TgZ(0,"div",5),r.YNc(1,Xt,1,2,void 0,1),r.qZA()),2&tt){const ne=r.oxw();r.Udp("height",ne.detailRowHeight,"px"),r.xp6(1),r.Q6J("ngIf",ne.rowDetail&&ne.rowDetail.template)}}const Ur=["cellTemplate"];function di(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"label",4),r.TgZ(1,"input",5),r.NdJ("click",function(Lt){return r.CHM(ne),r.oxw().onCheckboxChange(Lt)}),r.qZA(),r.qZA()}if(2&tt){const ne=r.oxw();r.xp6(1),r.Q6J("checked",ne.isSelected)}}function Lr(tt,sn){1&tt&&r._UZ(0,"i",11)}function Mr(tt,sn){1&tt&&r._UZ(0,"i",12)}function Kr(tt,sn){1&tt&&r._UZ(0,"i",13)}function ei(tt,sn){if(1&tt){const ne=r.EpF();r.TgZ(0,"button",7),r.NdJ("click",function(){return r.CHM(ne),r.oxw(2).onTreeAction()}),r.TgZ(1,"span"),r.YNc(2,Lr,1,0,"i",8),r.YNc(3,Mr,1,0,"i",9),r.YNc(4,Kr,1,0,"i",10),r.qZA(),r.qZA()}if(2&tt){const ne=r.oxw(2);r.Q6J("disabled","disabled"===ne.treeStatus),r.xp6(2),r.Q6J("ngIf","loading"===ne.treeStatus),r.xp6(1),r.Q6J("ngIf","collapsed"===ne.treeStatus),r.xp6(1),r.Q6J("ngIf","expanded"===ne.treeStatus||"disabled"===ne.treeStatus)}}function Nn(tt,sn){}const $n=function(tt){return{cellContext:tt}};function Br(tt,sn){if(1&tt&&r.YNc(0,Nn,0,0,"ng-template",14),2&tt){const ne=r.oxw(2);r.Q6J("ngTemplateOutlet",ne.column.treeToggleTemplate)("ngTemplateOutletContext",r.VKq(2,$n,ne.cellContext))}}function Yr(tt,sn){if(1&tt&&(r.ynx(0),r.YNc(1,ei,5,4,"button",6),r.YNc(2,Br,1,4,void 0,2),r.BQk()),2&tt){const ne=r.oxw();r.xp6(1),r.Q6J("ngIf",!ne.column.treeToggleTemplate),r.xp6(1),r.Q6J("ngIf",ne.column.treeToggleTemplate)}}function fi(tt,sn){if(1&tt&&r._UZ(0,"span",15),2&tt){const ne=r.oxw();r.Q6J("title",ne.sanitizedValue)("innerHTML",ne.value,r.oJD)}}function ki(tt,sn){}function Hi(tt,sn){if(1&tt&&r.YNc(0,ki,0,0,"ng-template",14,16,r.W1O),2&tt){const ne=r.oxw();r.Q6J("ngTemplateOutlet",ne.column.cellTemplate)("ngTemplateOutletContext",ne.cellContext)}}function Zr(tt,sn){if(1&tt&&r._UZ(0,"datatable-body-row",1),2&tt){const ne=r.oxw();r.Q6J("innerWidth",ne.innerWidth)("offsetX",ne.offsetX)("columns",ne._internalColumns)("rowHeight",ne.rowHeight)("row",ne.summaryRow)("rowIndex",-1)}}let Cn=(()=>{class tt{constructor(ne){this.document=ne,this.width=this.getWidth()}getWidth(){const ne=this.document.createElement("div");ne.style.visibility="hidden",ne.style.width="100px",ne.style.msOverflowStyle="scrollbar",this.document.body.appendChild(ne);const $e=ne.offsetWidth;ne.style.overflow="scroll";const Lt=this.document.createElement("div");Lt.style.width="100%",ne.appendChild(Lt);const an=Lt.offsetWidth;return ne.parentNode.removeChild(ne),$e-an}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.LFG(u.K0))},tt.\u0275prov=r.Yz7({token:tt,factory:tt.\u0275fac}),tt})(),Wt=(()=>{class tt{getDimensions(ne){return ne.getBoundingClientRect()}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275prov=r.Yz7({token:tt,factory:tt.\u0275fac}),tt})(),zn=(()=>{class tt{constructor(){this.columnInputChanges=new p.xQ}get columnInputChanges$(){return this.columnInputChanges.asObservable()}onInputChange(){this.columnInputChanges.next()}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275prov=r.Yz7({token:tt,factory:tt.\u0275fac}),tt})(),rr=(()=>{class tt{constructor(ne){this.template=ne}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.Rgc))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","ngx-datatable-footer-template",""]]}),tt})(),Fr=(()=>{class tt{constructor(ne,$e){this.element=ne,this.zone=$e,this.isVisible=!1,this.visible=new r.vpe}ngOnInit(){this.runCheck()}ngOnDestroy(){clearTimeout(this.timeout)}onVisibilityChange(){this.zone.run(()=>{this.isVisible=!0,this.visible.emit(!0)})}runCheck(){const ne=()=>{const{offsetHeight:$e,offsetWidth:Lt}=this.element.nativeElement;$e&&Lt?(clearTimeout(this.timeout),this.onVisibilityChange()):(clearTimeout(this.timeout),this.zone.runOutsideAngular(()=>{this.timeout=setTimeout(()=>ne(),50)}))};this.timeout=setTimeout(()=>ne())}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.SBq),r.Y36(r.R0b))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","visibilityObserver",""]],hostVars:2,hostBindings:function(ne,$e){2&ne&&r.ekj("visible",$e.isVisible)},outputs:{visible:"visible"}}),tt})(),Gn=(()=>{class tt{constructor(ne){this.dragX=!0,this.dragY=!0,this.dragStart=new r.vpe,this.dragging=new r.vpe,this.dragEnd=new r.vpe,this.isDragging=!1,this.element=ne.nativeElement}ngOnChanges(ne){ne.dragEventTarget&&ne.dragEventTarget.currentValue&&this.dragModel.dragging&&this.onMousedown(ne.dragEventTarget.currentValue)}ngOnDestroy(){this._destroySubscription()}onMouseup(ne){!this.isDragging||(this.isDragging=!1,this.element.classList.remove("dragging"),this.subscription&&(this._destroySubscription(),this.dragEnd.emit({event:ne,element:this.element,model:this.dragModel})))}onMousedown(ne){if(ne.target.classList.contains("draggable")&&(this.dragX||this.dragY)){ne.preventDefault(),this.isDragging=!0;const Lt={x:ne.clientX,y:ne.clientY},an=(0,d.R)(document,"mouseup");this.subscription=an.subscribe(pi=>this.onMouseup(pi));const ti=(0,d.R)(document,"mousemove").pipe((0,_.R)(an)).subscribe(pi=>this.move(pi,Lt));this.subscription.add(ti),this.dragStart.emit({event:ne,element:this.element,model:this.dragModel})}}move(ne,$e){if(!this.isDragging)return;const an=ne.clientY-$e.y;this.dragX&&(this.element.style.left=ne.clientX-$e.x+"px"),this.dragY&&(this.element.style.top=`${an}px`),this.element.classList.add("dragging"),this.dragging.emit({event:ne,element:this.element,model:this.dragModel})}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.SBq))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","draggable",""]],inputs:{dragX:"dragX",dragY:"dragY",dragEventTarget:"dragEventTarget",dragModel:"dragModel"},outputs:{dragStart:"dragStart",dragging:"dragging",dragEnd:"dragEnd"},features:[r.TTD]}),tt})(),Jr=(()=>{class tt{constructor(ne,$e){this.renderer=$e,this.resizeEnabled=!0,this.resize=new r.vpe,this.resizing=!1,this.element=ne.nativeElement}ngAfterViewInit(){const ne=this.renderer;this.resizeHandle=ne.createElement("span"),ne.addClass(this.resizeHandle,this.resizeEnabled?"resize-handle":"resize-handle--not-resizable"),ne.appendChild(this.element,this.resizeHandle)}ngOnDestroy(){this._destroySubscription(),this.renderer.destroyNode?this.renderer.destroyNode(this.resizeHandle):this.resizeHandle&&this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle),this.resizeHandle)}onMouseup(){this.resizing=!1,this.subscription&&!this.subscription.closed&&(this._destroySubscription(),this.resize.emit(this.element.clientWidth))}onMousedown(ne){const $e=ne.target.classList.contains("resize-handle"),Lt=this.element.clientWidth,an=ne.screenX;if($e){ne.stopPropagation(),this.resizing=!0;const ti=(0,d.R)(document,"mouseup");this.subscription=ti.subscribe(xi=>this.onMouseup());const pi=(0,d.R)(document,"mousemove").pipe((0,_.R)(ti)).subscribe(xi=>this.move(xi,Lt,an));this.subscription.add(pi)}}move(ne,$e,Lt){const ti=$e+(ne.screenX-Lt);(!this.minWidth||ti>=this.minWidth)&&(!this.maxWidth||ti<=this.maxWidth)&&(this.element.style.width=`${ti}px`)}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.SBq),r.Y36(r.Qsj))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","resizeable",""]],hostVars:2,hostBindings:function(ne,$e){1&ne&&r.NdJ("mousedown",function(an){return $e.onMousedown(an)}),2&ne&&r.ekj("resizeable",$e.resizeEnabled)},inputs:{resizeEnabled:"resizeEnabled",minWidth:"minWidth",maxWidth:"maxWidth"},outputs:{resize:"resize"}}),tt})(),_i=(()=>{class tt{constructor(ne,$e){this.document=$e,this.reorder=new r.vpe,this.targetChanged=new r.vpe,this.differ=ne.find({}).create()}ngAfterContentInit(){this.updateSubscriptions(),this.draggables.changes.subscribe(this.updateSubscriptions.bind(this))}ngOnDestroy(){this.draggables.forEach(ne=>{ne.dragStart.unsubscribe(),ne.dragging.unsubscribe(),ne.dragEnd.unsubscribe()})}updateSubscriptions(){const ne=this.differ.diff(this.createMapDiffs());if(ne){const $e=({currentValue:an,previousValue:ti})=>{Lt({previousValue:ti}),an&&(an.dragStart.subscribe(this.onDragStart.bind(this)),an.dragging.subscribe(this.onDragging.bind(this)),an.dragEnd.subscribe(this.onDragEnd.bind(this)))},Lt=({previousValue:an})=>{an&&(an.dragStart.unsubscribe(),an.dragging.unsubscribe(),an.dragEnd.unsubscribe())};ne.forEachAddedItem($e),ne.forEachRemovedItem(Lt)}}onDragStart(){this.positions={};let ne=0;for(const $e of this.draggables.toArray()){const Lt=$e.element,an=parseInt(Lt.offsetLeft.toString(),0);this.positions[$e.dragModel.prop]={left:an,right:an+parseInt(Lt.offsetWidth.toString(),0),index:ne++,element:Lt}}}onDragging({model:$e,event:Lt}){const an=this.positions[$e.prop],ti=this.isTarget($e,Lt);ti?this.lastDraggingIndex!==ti.i&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,newIndex:ti.i,initialIndex:an.index}),this.lastDraggingIndex=ti.i):this.lastDraggingIndex!==an.index&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,initialIndex:an.index}),this.lastDraggingIndex=an.index)}onDragEnd({element:ne,model:$e,event:Lt}){const an=this.positions[$e.prop],ti=this.isTarget($e,Lt);ti&&this.reorder.emit({prevIndex:an.index,newIndex:ti.i,model:$e}),this.lastDraggingIndex=void 0,ne.style.left="auto"}isTarget(ne,$e){let Lt=0;const pi=this.document.elementsFromPoint($e.x||$e.clientX,$e.y||$e.clientY);for(const xi in this.positions){const ts=this.positions[xi];if(ne.prop!==xi&&pi.find(wo=>wo===ts.element))return{pos:ts,i:Lt};Lt++}}createMapDiffs(){return this.draggables.toArray().reduce((ne,$e)=>(ne[$e.dragModel.$$id]=$e,ne),{})}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.aQg),r.Y36(u.K0))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","orderable",""]],contentQueries:function(ne,$e,Lt){if(1&ne&&r.Suo(Lt,Gn,5),2&ne){let an;r.iGM(an=r.CRH())&&($e.draggables=an)}},outputs:{reorder:"reorder",targetChanged:"targetChanged"}}),tt})(),wi=(()=>{class tt{constructor(){this.pressEnabled=!0,this.duration=500,this.longPressStart=new r.vpe,this.longPressing=new r.vpe,this.longPressEnd=new r.vpe,this.mouseX=0,this.mouseY=0}get press(){return this.pressing}get isLongPress(){return this.isLongPressing}onMouseDown(ne){if(1!==ne.which||!this.pressEnabled||ne.target.classList.contains("resize-handle"))return;this.mouseX=ne.clientX,this.mouseY=ne.clientY,this.pressing=!0,this.isLongPressing=!1;const Lt=(0,d.R)(document,"mouseup");this.subscription=Lt.subscribe(an=>this.onMouseup()),this.timeout=setTimeout(()=>{this.isLongPressing=!0,this.longPressStart.emit({event:ne,model:this.pressModel}),this.subscription.add((0,d.R)(document,"mousemove").pipe((0,_.R)(Lt)).subscribe(an=>this.onMouseMove(an))),this.loop(ne)},this.duration),this.loop(ne)}onMouseMove(ne){if(this.pressing&&!this.isLongPressing){const $e=Math.abs(ne.clientX-this.mouseX)>10,Lt=Math.abs(ne.clientY-this.mouseY)>10;($e||Lt)&&this.endPress()}}loop(ne){this.isLongPressing&&(this.timeout=setTimeout(()=>{this.longPressing.emit({event:ne,model:this.pressModel}),this.loop(ne)},50))}endPress(){clearTimeout(this.timeout),this.isLongPressing=!1,this.pressing=!1,this._destroySubscription(),this.longPressEnd.emit({model:this.pressModel})}onMouseup(){this.endPress()}ngOnDestroy(){this._destroySubscription()}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275dir=r.lG2({type:tt,selectors:[["","long-press",""]],hostVars:4,hostBindings:function(ne,$e){1&ne&&r.NdJ("mousedown",function(an){return $e.onMouseDown(an)}),2&ne&&r.ekj("press",$e.press)("longpress",$e.isLongPress)},inputs:{pressEnabled:"pressEnabled",duration:"duration",pressModel:"pressModel"},outputs:{longPressStart:"longPressStart",longPressing:"longPressing",longPressEnd:"longPressEnd"}}),tt})(),br=(()=>{class tt{constructor(ne,$e,Lt){this.ngZone=ne,this.renderer=Lt,this.scrollbarV=!1,this.scrollbarH=!1,this.scroll=new r.vpe,this.scrollYPos=0,this.scrollXPos=0,this.prevScrollYPos=0,this.prevScrollXPos=0,this._scrollEventListener=null,this.element=$e.nativeElement}ngOnInit(){if(this.scrollbarV||this.scrollbarH){const ne=this.renderer;this.parentElement=ne.parentNode(ne.parentNode(this.element)),this._scrollEventListener=this.onScrolled.bind(this),this.parentElement.addEventListener("scroll",this._scrollEventListener)}}ngOnDestroy(){this._scrollEventListener&&(this.parentElement.removeEventListener("scroll",this._scrollEventListener),this._scrollEventListener=null)}setOffset(ne){this.parentElement&&(this.parentElement.scrollTop=ne)}onScrolled(ne){const $e=ne.currentTarget;requestAnimationFrame(()=>{this.scrollYPos=$e.scrollTop,this.scrollXPos=$e.scrollLeft,this.updateOffset()})}updateOffset(){let ne;this.scrollYPosthis.prevScrollYPos&&(ne="up"),this.scroll.emit({direction:ne,scrollYPos:this.scrollYPos,scrollXPos:this.scrollXPos}),this.prevScrollYPos=this.scrollYPos,this.prevScrollXPos=this.scrollXPos}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.R0b),r.Y36(r.SBq),r.Y36(r.Qsj))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-scroller"]],hostAttrs:[1,"datatable-scroll"],hostVars:4,hostBindings:function(ne,$e){2&ne&&r.Udp("height",$e.scrollHeight,"px")("width",$e.scrollWidth,"px")},inputs:{scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",scrollHeight:"scrollHeight",scrollWidth:"scrollWidth"},outputs:{scroll:"scroll"},ngContentSelectors:S,decls:1,vars:0,template:function(ne,$e){1&ne&&(r.F$t(),r.Hsn(0))},encapsulation:2,changeDetection:0}),tt})(),Dr=(()=>{class tt{constructor(ne){this.template=ne}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.Rgc))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","ngx-datatable-group-header-template",""]]}),tt})(),gn=(()=>{class tt{constructor(){this.rowHeight=0,this.toggle=new r.vpe}get template(){return this._templateInput||this._templateQuery}toggleExpandGroup(ne){this.toggle.emit({type:"group",value:ne})}expandAllGroups(){this.toggle.emit({type:"all",value:!0})}collapseAllGroups(){this.toggle.emit({type:"all",value:!1})}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275dir=r.lG2({type:tt,selectors:[["ngx-datatable-group-header"]],contentQueries:function(ne,$e,Lt){if(1&ne&&r.Suo(Lt,Dr,7,r.Rgc),2&ne){let an;r.iGM(an=r.CRH())&&($e._templateQuery=an.first)}},inputs:{rowHeight:"rowHeight",_templateInput:["template","_templateInput"]},outputs:{toggle:"toggle"}}),tt})();function yn(){return""}function gr(tt){return null==tt?yn:"number"==typeof tt?Jt:-1!==tt.indexOf(".")?mr:Vn}function Jt(tt,sn){if(null==tt)return"";if(!tt||null==sn)return tt;const ne=tt[sn];return null==ne?"":ne}function Vn(tt,sn){if(null==tt)return"";if(!tt||!sn)return tt;const ne=tt[sn];return null==ne?"":ne}function mr(tt,sn){if(null==tt)return"";if(!tt||!sn)return tt;let ne=tt[sn];if(void 0!==ne)return ne;ne=tt;const $e=sn.split(".");if($e.length)for(let Lt=0;Lt<$e.length;Lt++)if(ne=ne[$e[Lt]],null==ne)return"";return ne}function Dn(tt){return tt&&(sn=>gr(tt)(sn,tt))}function Pr(tt,sn,ne){if(sn&&ne){const $e={},Lt=tt.length;let an=null;$e[0]=new Yt;const ti=tt.reduce((xi,ts)=>{const wo=ne(ts);return-1===xi.indexOf(wo)&&xi.push(wo),xi},[]);for(let xi=0;xi-1&&(ts=wo),an.parent=$e[ts],an.row.level=an.parent.row.level+1,an.parent.children.push(an)}let pi=[];return $e[0].flatten(function(){pi=[...pi,this.row]},!0),pi}return tt}class Yt{constructor(sn=null){sn||(sn={level:-1,treeStatus:"expanded"}),this.row=sn,this.parent=null,this.children=[]}flatten(sn,ne){if("expanded"===this.row.treeStatus)for(let $e=0,Lt=this.children.length;$e` ${sn}`).replace(/^./,sn=>sn.toUpperCase())}function mi(tt){if(!tt)return;let sn=!1;for(const ne of tt)ne.$$id||(ne.$$id=("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)),An(ne.prop)&&ne.name&&(ne.prop=_n(ne.name)),ne.$$valueGetter||(ne.$$valueGetter=gr(ne.prop)),!An(ne.prop)&&An(ne.name)&&(ne.name=Ge(String(ne.prop))),An(ne.prop)&&An(ne.name)&&(ne.name=""),ne.hasOwnProperty("resizeable")||(ne.resizeable=!0),ne.hasOwnProperty("sortable")||(ne.sortable=!0),ne.hasOwnProperty("draggable")||(ne.draggable=!0),ne.hasOwnProperty("canAutoResize")||(ne.canAutoResize=!0),ne.hasOwnProperty("width")||(ne.width=150),ne.hasOwnProperty("isTreeColumn")&&ne.isTreeColumn&&!sn?sn=!0:ne.isTreeColumn=!1}function An(tt){return null==tt}var Wr=(()=>{return(tt=Wr||(Wr={})).standard="standard",tt.flex="flex",tt.force="force",Wr;var tt})(),dr=(()=>{return(tt=dr||(dr={})).single="single",tt.multi="multi",tt.multiClick="multiClick",tt.cell="cell",tt.checkbox="checkbox",dr;var tt})(),Fn=(()=>{return(tt=Fn||(Fn={})).single="single",tt.multi="multi",Fn;var tt})(),ar=(()=>{return(tt=ar||(ar={})).header="header",tt.body="body",ar;var tt})();let Wi=(()=>{class tt{constructor(ne){this.template=ne}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.Rgc))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","ngx-datatable-header-template",""]]}),tt})(),lo=(()=>{class tt{constructor(ne){this.template=ne}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.Rgc))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","ngx-datatable-cell-template",""]]}),tt})(),vo=(()=>{class tt{constructor(ne){this.template=ne}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.Rgc))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","ngx-datatable-tree-toggle",""]]}),tt})(),Co=(()=>{class tt{constructor(ne){this.columnChangesService=ne,this.isFirstChange=!0}get cellTemplate(){return this._cellTemplateInput||this._cellTemplateQuery}get headerTemplate(){return this._headerTemplateInput||this._headerTemplateQuery}get treeToggleTemplate(){return this._treeToggleTemplateInput||this._treeToggleTemplateQuery}ngOnChanges(){this.isFirstChange?this.isFirstChange=!1:this.columnChangesService.onInputChange()}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(zn))},tt.\u0275dir=r.lG2({type:tt,selectors:[["ngx-datatable-column"]],contentQueries:function(ne,$e,Lt){if(1&ne&&(r.Suo(Lt,lo,7,r.Rgc),r.Suo(Lt,Wi,7,r.Rgc),r.Suo(Lt,vo,7,r.Rgc)),2&ne){let an;r.iGM(an=r.CRH())&&($e._cellTemplateQuery=an.first),r.iGM(an=r.CRH())&&($e._headerTemplateQuery=an.first),r.iGM(an=r.CRH())&&($e._treeToggleTemplateQuery=an.first)}},inputs:{name:"name",prop:"prop",frozenLeft:"frozenLeft",frozenRight:"frozenRight",flexGrow:"flexGrow",resizeable:"resizeable",comparator:"comparator",pipe:"pipe",sortable:"sortable",draggable:"draggable",canAutoResize:"canAutoResize",minWidth:"minWidth",width:"width",maxWidth:"maxWidth",checkboxable:"checkboxable",headerCheckboxable:"headerCheckboxable",headerClass:"headerClass",cellClass:"cellClass",isTreeColumn:"isTreeColumn",treeLevelIndent:"treeLevelIndent",summaryFunc:"summaryFunc",summaryTemplate:"summaryTemplate",_cellTemplateInput:["cellTemplate","_cellTemplateInput"],_headerTemplateInput:["headerTemplate","_headerTemplateInput"],_treeToggleTemplateInput:["treeToggleTemplate","_treeToggleTemplateInput"]},features:[r.TTD]}),tt})(),Gi=(()=>{class tt{constructor(ne){this.template=ne}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.Rgc))},tt.\u0275dir=r.lG2({type:tt,selectors:[["","ngx-datatable-row-detail-template",""]]}),tt})(),os=(()=>{class tt{constructor(){this.rowHeight=0,this.toggle=new r.vpe}get template(){return this._templateInput||this._templateQuery}toggleExpandRow(ne){this.toggle.emit({type:"row",value:ne})}expandAllRows(){this.toggle.emit({type:"all",value:!0})}collapseAllRows(){this.toggle.emit({type:"all",value:!1})}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275dir=r.lG2({type:tt,selectors:[["ngx-datatable-row-detail"]],contentQueries:function(ne,$e,Lt){if(1&ne&&r.Suo(Lt,Gi,7,r.Rgc),2&ne){let an;r.iGM(an=r.CRH())&&($e._templateQuery=an.first)}},inputs:{rowHeight:"rowHeight",_templateInput:["template","_templateInput"]},outputs:{toggle:"toggle"}}),tt})(),jo=(()=>{class tt{get template(){return this._templateInput||this._templateQuery}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275dir=r.lG2({type:tt,selectors:[["ngx-datatable-footer"]],contentQueries:function(ne,$e,Lt){if(1&ne&&r.Suo(Lt,rr,5,r.Rgc),2&ne){let an;r.iGM(an=r.CRH())&&($e._templateQuery=an.first)}},inputs:{footerHeight:"footerHeight",totalMessage:"totalMessage",selectedMessage:"selectedMessage",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon",_templateInput:["template","_templateInput"]}}),tt})();function To(tt){const sn={left:[],center:[],right:[]};if(tt)for(const ne of tt)ne.frozenLeft?sn.left.push(ne):ne.frozenRight?sn.right.push(ne):sn.center.push(ne);return sn}function Mi(tt,sn){return{left:li(tt.left),center:li(tt.center),right:li(tt.right),total:Math.floor(li(sn))}}function li(tt,sn){let ne=0;if(tt)for(const $e of tt)ne+=parseFloat(sn&&$e[sn]?$e[sn]:$e.width);return ne}function lr(tt){const sn=[],ne=To(tt);return sn.push({type:"left",columns:ne.left}),sn.push({type:"center",columns:ne.center}),sn.push({type:"right",columns:ne.right}),sn}class vr{constructor(){this.treeArray=[]}clearCache(){this.treeArray=[]}initCache(sn){const{rows:ne,rowHeight:$e,detailRowHeight:Lt,externalVirtual:an,rowCount:ti,rowIndexes:pi,rowExpansions:xi}=sn,ts="function"==typeof $e,wo="function"==typeof Lt;if(!ts&&isNaN($e))throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n valid number or function value: (${$e}) when 'scrollbarV' is enabled.`);if(!wo&&isNaN(Lt))throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n valid number or function value: (${Lt}) when 'scrollbarV' is enabled.`);const ko=an?ti:ne.length;this.treeArray=new Array(ko);for(let Eo=0;Eo=0;)ne+=this.treeArray[sn],sn=(sn&sn+1)-1;return ne}queryBetween(sn,ne){return this.query(ne)-this.query(sn-1)}calcRowIndex(sn){if(!this.treeArray.length)return 0;let ne=-1;const $e=this.treeArray.length;for(let an=Math.pow(2,$e.toString(2).length-1);0!==an;an>>=1){const ti=ne+an;ti<$e&&sn>=this.treeArray[ti]&&(sn-=this.treeArray[ti],ne=ti)}return ne+1}}const er={},ri="undefined"!=typeof document?document.createElement("div").style:void 0,Ci=function(){const tt="undefined"!=typeof window?window.getComputedStyle(document.documentElement,""):void 0,sn=void 0!==tt?Array.prototype.slice.call(tt).join("").match(/-(moz|webkit|ms)-/):null,ne=null!==sn?sn[1]:void 0,$e=void 0!==ne?"WebKit|Moz|MS|O".match(new RegExp("("+ne+")","i"))[1]:void 0;return $e?{dom:$e,lowercase:ne,css:`-${ne}-`,js:ne[0].toUpperCase()+ne.substr(1)}:void 0}();function $o(tt){const sn=_n(tt);return er[sn]||(void 0!==Ci&&void 0!==ri[Ci.css+tt]?er[sn]=Ci.css+tt:void 0!==ri[tt]&&(er[sn]=tt)),er[sn]}const tr="undefined"!=typeof window?$o("transform"):void 0,Ar="undefined"!=typeof window?$o("backfaceVisibility"):void 0,Rt="undefined"!=typeof window?!!$o("transform"):void 0,_t="undefined"!=typeof window?!!$o("perspective"):void 0,mt="undefined"!=typeof window?window.navigator.userAgent:"Chrome",jt=/Safari\//.test(mt)&&!/Chrome\//.test(mt);function on(tt,sn,ne){void 0!==tr&&Rt?!jt&&_t?(tt[tr]=`translate3d(${sn}px, ${ne}px, 0)`,tt[Ar]="hidden"):tt[_n(tr)]=`translate(${sn}px, ${ne}px)`:(tt.top=`${ne}px`,tt.left=`${sn}px`)}let si=(()=>{class tt{constructor(ne){this.cd=ne,this.selected=[],this.scroll=new r.vpe,this.page=new r.vpe,this.activate=new r.vpe,this.select=new r.vpe,this.detailToggle=new r.vpe,this.rowContextmenu=new r.vpe(!1),this.treeAction=new r.vpe,this.rowHeightsCache=new vr,this.temp=[],this.offsetY=0,this.indexes={},this.rowIndexes=new WeakMap,this.rowExpansions=[],this.getDetailRowHeight=($e,Lt)=>{if(!this.rowDetail)return 0;const an=this.rowDetail.rowHeight;return"function"==typeof an?an($e,Lt):an},this.rowTrackingFn=($e,Lt)=>{const an=this.getRowIndex(Lt);return this.trackByProp?Lt[this.trackByProp]:an}}set pageSize(ne){this._pageSize=ne,this.recalcLayout()}get pageSize(){return this._pageSize}set rows(ne){this._rows=ne,this.recalcLayout()}get rows(){return this._rows}set columns(ne){this._columns=ne;const $e=To(ne);this.columnGroupWidths=Mi($e,ne)}get columns(){return this._columns}set offset(ne){this._offset=ne,(!this.scrollbarV||this.scrollbarV&&!this.virtualization)&&this.recalcLayout()}get offset(){return this._offset}set rowCount(ne){this._rowCount=ne,this.recalcLayout()}get rowCount(){return this._rowCount}get bodyWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}set bodyHeight(ne){this._bodyHeight=this.scrollbarV?ne+"px":"auto",this.recalcLayout()}get bodyHeight(){return this._bodyHeight}get selectEnabled(){return!!this.selectionType}get scrollHeight(){if(this.scrollbarV&&this.virtualization&&this.rowCount)return this.rowHeightsCache.query(this.rowCount-1)}ngOnInit(){this.rowDetail&&(this.listener=this.rowDetail.toggle.subscribe(({type:ne,value:$e})=>{"row"===ne&&this.toggleRowExpansion($e),"all"===ne&&this.toggleAllRows($e),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()})),this.groupHeader&&(this.listener=this.groupHeader.toggle.subscribe(({type:ne,value:$e})=>{"group"===ne&&this.toggleRowExpansion($e),"all"===ne&&this.toggleAllRows($e),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()}))}ngOnDestroy(){(this.rowDetail||this.groupHeader)&&this.listener.unsubscribe()}updateOffsetY(ne){this.scroller&&(this.scrollbarV&&this.virtualization&&ne?ne=this.rowHeightsCache.query(this.pageSize*ne-1):this.scrollbarV&&!this.virtualization&&(ne=0),this.scroller.setOffset(ne||0))}onBodyScroll(ne){const $e=ne.scrollYPos,Lt=ne.scrollXPos;(this.offsetY!==$e||this.offsetX!==Lt)&&this.scroll.emit({offsetY:$e,offsetX:Lt}),this.offsetY=$e,this.offsetX=Lt,this.updateIndexes(),this.updatePage(ne.direction),this.updateRows()}updatePage(ne){let $e=this.indexes.first/this.pageSize;"up"===ne?$e=Math.ceil($e):"down"===ne&&($e=Math.floor($e)),void 0!==ne&&!isNaN($e)&&this.page.emit({offset:$e})}updateRows(){const{first:ne,last:$e}=this.indexes;let Lt=ne,an=0;const ti=[];if(this.groupedRows){let pi=3;for(1===this.groupedRows.length&&(pi=this.groupedRows[0].value.length);Lt<$e&&Lt{this.rowIndexes.set(ts,`${Lt}-${wo}`)}),ti[an]=xi,an++,Lt++}}else for(;Lt<$e&&Ltthis.loadingIndicator=!1,500)}updateIndexes(){let ne=0,$e=0;if(this.scrollbarV)if(this.virtualization){const Lt=parseInt(this.bodyHeight,0);ne=this.rowHeightsCache.getRowIndex(this.offsetY),$e=this.rowHeightsCache.getRowIndex(Lt+this.offsetY)+1}else ne=0,$e=this.rowCount;else this.externalPaging||(ne=Math.max(this.offset*this.pageSize,0)),$e=Math.min(ne+this.pageSize,this.rowCount);this.indexes={first:ne,last:$e}}refreshRowHeightCache(){if(this.scrollbarV&&(!this.scrollbarV||this.virtualization)&&(this.rowHeightsCache.clearCache(),this.rows&&this.rows.length)){const ne=new Set;for(const $e of this.rows)this.getRowExpanded($e)&&ne.add($e);this.rowHeightsCache.initCache({rows:this.rows,rowHeight:this.rowHeight,detailRowHeight:this.getDetailRowHeight,externalVirtual:this.scrollbarV&&this.externalPaging,rowCount:this.rowCount,rowIndexes:this.rowIndexes,rowExpansions:ne})}}getAdjustedViewPortIndex(){const ne=this.indexes.first;return this.scrollbarV&&this.virtualization&&this.rowHeightsCache.query(ne-1)<=this.offsetY?ne-1:ne}toggleRowExpansion(ne){const $e=this.getAdjustedViewPortIndex(),Lt=this.getRowExpandedIdx(ne,this.rowExpansions),an=Lt>-1;if(this.scrollbarV&&this.virtualization){const ti=this.getDetailRowHeight(ne)*(an?-1:1),pi=this.getRowIndex(ne);this.rowHeightsCache.update(pi,ti)}an?this.rowExpansions.splice(Lt,1):this.rowExpansions.push(ne),this.detailToggle.emit({rows:[ne],currentIndex:$e})}toggleAllRows(ne){this.rowExpansions=[];const $e=this.getAdjustedViewPortIndex();if(ne)for(const Lt of this.rows)this.rowExpansions.push(Lt);this.scrollbarV&&this.recalcLayout(),this.detailToggle.emit({rows:this.rows,currentIndex:$e})}recalcLayout(){this.refreshRowHeightCache(),this.updateIndexes(),this.updateRows()}columnTrackingFn(ne,$e){return $e.$$id}stylesByGroup(ne){const $e=this.columnGroupWidths,Lt=this.offsetX,an={width:`${$e[ne]}px`};if("left"===ne)on(an,Lt,0);else if("right"===ne){const ti=parseInt(this.innerWidth+"",0);on(an,-1*($e.total-ti-Lt),0)}return an}getRowExpanded(ne){if(0===this.rowExpansions.length&&this.groupExpansionDefault)for(const $e of this.groupedRows)this.rowExpansions.push($e);return this.getRowExpandedIdx(ne,this.rowExpansions)>-1}getRowExpandedIdx(ne,$e){if(!$e||!$e.length)return-1;const Lt=this.rowIdentity(ne);return $e.findIndex(an=>this.rowIdentity(an)===Lt)}getRowIndex(ne){return this.rowIndexes.get(ne)||0}onTreeAction(ne){this.treeAction.emit({row:ne})}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.sBO))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-body"]],viewQuery:function(ne,$e){if(1&ne&&r.Gf(br,5),2&ne){let Lt;r.iGM(Lt=r.CRH())&&($e.scroller=Lt.first)}},hostAttrs:[1,"datatable-body"],hostVars:4,hostBindings:function(ne,$e){2&ne&&r.Udp("width",$e.bodyWidth)("height",$e.bodyHeight)},inputs:{selected:"selected",pageSize:"pageSize",rows:"rows",columns:"columns",offset:"offset",rowCount:"rowCount",bodyHeight:"bodyHeight",offsetX:"offsetX",loadingIndicator:"loadingIndicator",scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",externalPaging:"externalPaging",rowHeight:"rowHeight",emptyMessage:"emptyMessage",selectionType:"selectionType",rowIdentity:"rowIdentity",rowDetail:"rowDetail",groupHeader:"groupHeader",selectCheck:"selectCheck",displayCheck:"displayCheck",trackByProp:"trackByProp",rowClass:"rowClass",groupedRows:"groupedRows",groupExpansionDefault:"groupExpansionDefault",innerWidth:"innerWidth",groupRowsBy:"groupRowsBy",virtualization:"virtualization",summaryRow:"summaryRow",summaryPosition:"summaryPosition",summaryHeight:"summaryHeight"},outputs:{scroll:"scroll",page:"page",activate:"activate",select:"select",detailToggle:"detailToggle",rowContextmenu:"rowContextmenu",treeAction:"treeAction"},decls:5,vars:9,consts:[[4,"ngIf"],[3,"selected","rows","selectCheck","selectEnabled","selectionType","rowIdentity","select","activate"],["selector",""],[3,"scrollbarV","scrollbarH","scrollHeight","scrollWidth","scroll",4,"ngIf"],["class","empty-row",3,"innerHTML",4,"ngIf"],[3,"scrollbarV","scrollbarH","scrollHeight","scrollWidth","scroll"],[3,"rowHeight","offsetX","innerWidth","rows","columns",4,"ngIf"],[3,"groupedRows","innerWidth","ngStyle","rowDetail","groupHeader","offsetX","detailRowHeight","row","expanded","rowIndex","rowContextmenu",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle","rowHeight","offsetX","innerWidth","rows","columns",4,"ngIf"],[3,"rowHeight","offsetX","innerWidth","rows","columns"],[3,"groupedRows","innerWidth","ngStyle","rowDetail","groupHeader","offsetX","detailRowHeight","row","expanded","rowIndex","rowContextmenu"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","rowIndex","expanded","rowClass","displayCheck","treeStatus","treeAction","activate",4,"ngIf","ngIfElse"],["groupedRowsTemplate",""],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","rowIndex","expanded","rowClass","displayCheck","treeStatus","treeAction","activate"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","group","rowIndex","expanded","rowClass","activate",4,"ngFor","ngForOf","ngForTrackBy"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","group","rowIndex","expanded","rowClass","activate"],[3,"ngStyle","rowHeight","offsetX","innerWidth","rows","columns"],[1,"empty-row",3,"innerHTML"]],template:function(ne,$e){1&ne&&(r.YNc(0,A,1,0,"datatable-progress",0),r.TgZ(1,"datatable-selection",1,2),r.NdJ("select",function(an){return $e.select.emit(an)})("activate",function(an){return $e.activate.emit(an)}),r.YNc(3,ue,4,8,"datatable-scroller",3),r.YNc(4,ae,1,1,"div",4),r.qZA()),2&ne&&(r.Q6J("ngIf",$e.loadingIndicator),r.xp6(1),r.Q6J("selected",$e.selected)("rows",$e.rows)("selectCheck",$e.selectCheck)("selectEnabled",$e.selectEnabled)("selectionType",$e.selectionType)("rowIdentity",$e.rowIdentity),r.xp6(2),r.Q6J("ngIf",null==$e.rows?null:$e.rows.length),r.xp6(1),r.Q6J("ngIf",!(null!=$e.rows&&$e.rows.length||$e.loadingIndicator)))},directives:function(){return[u.O5,Po,Ya,br,u.sg,ps,Ca,u.PC,fs]},encapsulation:2,changeDetection:0}),tt})(),Vi=(()=>{class tt{constructor(ne){this.cd=ne,this.sort=new r.vpe,this.reorder=new r.vpe,this.resize=new r.vpe,this.select=new r.vpe,this.columnContextmenu=new r.vpe(!1),this._columnGroupWidths={total:100},this._styleByGroup={left:{},center:{},right:{}},this.destroyed=!1}set innerWidth(ne){this._innerWidth=ne,setTimeout(()=>{if(this._columns){const $e=To(this._columns);this._columnGroupWidths=Mi($e,this._columns),this.setStylesByGroup()}})}get innerWidth(){return this._innerWidth}set headerHeight(ne){this._headerHeight="auto"!==ne?`${ne}px`:ne}get headerHeight(){return this._headerHeight}set columns(ne){this._columns=ne;const $e=To(ne);this._columnsByPin=lr(ne),setTimeout(()=>{this._columnGroupWidths=Mi($e,ne),this.setStylesByGroup()})}get columns(){return this._columns}set offsetX(ne){this._offsetX=ne,this.setStylesByGroup()}get offsetX(){return this._offsetX}ngOnDestroy(){this.destroyed=!0}onLongPressStart({event:ne,model:$e}){$e.dragging=!0,this.dragEventTarget=ne}onLongPressEnd({event:ne,model:$e}){this.dragEventTarget=ne,setTimeout(()=>{const Lt=this._columns.find(an=>an.$$id===$e.$$id);Lt&&(Lt.dragging=!1)},5)}get headerWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}trackByGroups(ne,$e){return $e.type}columnTrackingFn(ne,$e){return $e.$$id}onColumnResized(ne,$e){ne<=$e.minWidth?ne=$e.minWidth:ne>=$e.maxWidth&&(ne=$e.maxWidth),this.resize.emit({column:$e,prevValue:$e.width,newValue:ne})}onColumnReordered({prevIndex:ne,newIndex:$e,model:Lt}){const an=this.getColumn($e);an.isTarget=!1,an.targetMarkerContext=void 0,this.reorder.emit({column:Lt,prevValue:ne,newValue:$e})}onTargetChanged({prevIndex:ne,newIndex:$e,initialIndex:Lt}){if(ne||0===ne){const an=this.getColumn(ne);an.isTarget=!1,an.targetMarkerContext=void 0}if($e||0===$e){const an=this.getColumn($e);an.isTarget=!0,Lt!==$e&&(an.targetMarkerContext={class:"targetMarker ".concat(Lt>$e?"dragFromRight":"dragFromLeft")})}}getColumn(ne){const $e=this._columnsByPin[0].columns.length;if(ne<$e)return this._columnsByPin[0].columns[ne];const Lt=this._columnsByPin[1].columns.length;return ne<$e+Lt?this._columnsByPin[1].columns[ne-$e]:this._columnsByPin[2].columns[ne-$e-Lt]}onSort({column:ne,prevValue:$e,newValue:Lt}){if(ne.dragging)return;const an=this.calcNewSorts(ne,$e,Lt);this.sort.emit({sorts:an,column:ne,prevValue:$e,newValue:Lt})}calcNewSorts(ne,$e,Lt){let an=0;this.sorts||(this.sorts=[]);const ti=this.sorts.map((pi,xi)=>((pi=Object.assign({},pi)).prop===ne.prop&&(an=xi),pi));return void 0===Lt?ti.splice(an,1):$e?ti[an].dir=Lt:(this.sortType===Fn.single&&ti.splice(0,this.sorts.length),ti.push({dir:Lt,prop:ne.prop})),ti}setStylesByGroup(){this._styleByGroup.left=this.calcStylesByGroup("left"),this._styleByGroup.center=this.calcStylesByGroup("center"),this._styleByGroup.right=this.calcStylesByGroup("right"),this.destroyed||this.cd.detectChanges()}calcStylesByGroup(ne){const $e=this._columnGroupWidths,an={width:`${$e[ne]}px`};return"center"===ne?on(an,-1*this.offsetX,0):"right"===ne&&on(an,-1*($e.total-this.innerWidth),0),an}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.sBO))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-header"]],hostAttrs:[1,"datatable-header"],hostVars:4,hostBindings:function(ne,$e){2&ne&&r.Udp("height",$e.headerHeight)("width",$e.headerWidth)},inputs:{innerWidth:"innerWidth",headerHeight:"headerHeight",columns:"columns",offsetX:"offsetX",sorts:"sorts",sortAscendingIcon:"sortAscendingIcon",sortDescendingIcon:"sortDescendingIcon",sortUnsetIcon:"sortUnsetIcon",scrollbarH:"scrollbarH",dealsWithGroup:"dealsWithGroup",targetMarkerTemplate:"targetMarkerTemplate",sortType:"sortType",allRowsSelected:"allRowsSelected",selectionType:"selectionType",reorderable:"reorderable"},outputs:{sort:"sort",reorder:"reorder",resize:"resize",select:"select",columnContextmenu:"columnContextmenu"},decls:2,vars:4,consts:[["orderable","",1,"datatable-header-inner",3,"reorder","targetChanged"],[3,"class","ngStyle",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle"],["resizeable","","long-press","","draggable","",3,"resizeEnabled","pressModel","pressEnabled","dragX","dragY","dragModel","dragEventTarget","headerHeight","isTarget","targetMarkerTemplate","targetMarkerContext","column","sortType","sorts","selectionType","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","resize","longPressStart","longPressEnd","sort","select","columnContextmenu",4,"ngFor","ngForOf","ngForTrackBy"],["resizeable","","long-press","","draggable","",3,"resizeEnabled","pressModel","pressEnabled","dragX","dragY","dragModel","dragEventTarget","headerHeight","isTarget","targetMarkerTemplate","targetMarkerContext","column","sortType","sorts","selectionType","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","resize","longPressStart","longPressEnd","sort","select","columnContextmenu"]],template:function(ne,$e){1&ne&&(r.TgZ(0,"div",0),r.NdJ("reorder",function(an){return $e.onColumnReordered(an)})("targetChanged",function(an){return $e.onTargetChanged(an)}),r.YNc(1,se,2,5,"div",1),r.qZA()),2&ne&&(r.Udp("width",$e._columnGroupWidths.total,"px"),r.xp6(1),r.Q6J("ngForOf",$e._columnsByPin)("ngForTrackBy",$e.trackByGroups))},directives:function(){return[_i,u.sg,u.PC,da,Jr,wi,Gn]},encapsulation:2,changeDetection:0}),tt})();function _o(tt,sn,ne){ne=ne||{};let $e,Lt,an,ti=null,pi=0;function xi(){pi=!1===ne.leading?0:+new Date,ti=null,an=tt.apply($e,Lt)}return function(){const ts=+new Date;!pi&&!1===ne.leading&&(pi=ts);const wo=sn-(ts-pi);return $e=this,Lt=arguments,wo<=0?(clearTimeout(ti),ti=null,pi=ts,an=tt.apply($e,Lt)):!ti&&!1!==ne.trailing&&(ti=setTimeout(xi,wo)),an}}function co(tt,sn){return function($e,Lt,an){return{configurable:!0,enumerable:an.enumerable,get:function(){return Object.defineProperty(this,Lt,{configurable:!0,enumerable:an.enumerable,value:_o(an.value,tt,sn)}),this[Lt]}}}}function ta(tt,sn){for(const ne of sn){const $e=tt.indexOf(ne);tt.splice($e,1)}}function Is(tt,sn=300){let ne=0;for(const $e of tt)ne+=$e.width||sn;return ne}var us=(()=>{return(tt=us||(us={})).asc="asc",tt.desc="desc",us;var tt})();function el(tt,sn){if(null==tt&&(tt=0),null==sn&&(sn=0),tt instanceof Date&&sn instanceof Date){if(ttsn)return 1}else if(isNaN(parseFloat(tt))||!isFinite(tt)||isNaN(parseFloat(sn))||!isFinite(sn)){if(tt=String(tt),sn=String(sn),tt.toLowerCase()sn.toLowerCase())return 1}else{if(parseFloat(tt)parseFloat(sn))return 1}return 0}let $s=(()=>{class tt{constructor(ne,$e,Lt,an,ti,pi,xi){this.scrollbarHelper=ne,this.dimensionsHelper=$e,this.cd=Lt,this.columnChangesService=pi,this.configuration=xi,this.selected=[],this.scrollbarV=!1,this.scrollbarH=!1,this.rowHeight=30,this.columnMode=Wr.standard,this.headerHeight=30,this.footerHeight=0,this.externalPaging=!1,this.externalSorting=!1,this.loadingIndicator=!1,this.reorderable=!0,this.swapColumns=!0,this.sortType=Fn.single,this.sorts=[],this.cssClasses={sortAscending:"datatable-icon-up",sortDescending:"datatable-icon-down",sortUnset:"datatable-icon-sort-unset",pagerLeftArrow:"datatable-icon-left",pagerRightArrow:"datatable-icon-right",pagerPrevious:"datatable-icon-prev",pagerNext:"datatable-icon-skip"},this.messages={emptyMessage:"No data to display",totalMessage:"total",selectedMessage:"selected"},this.groupExpansionDefault=!1,this.selectAllRowsOnPage=!1,this.virtualization=!0,this.summaryRow=!1,this.summaryHeight=30,this.summaryPosition="top",this.scroll=new r.vpe,this.activate=new r.vpe,this.select=new r.vpe,this.sort=new r.vpe,this.page=new r.vpe,this.reorder=new r.vpe,this.resize=new r.vpe,this.tableContextmenu=new r.vpe(!1),this.treeAction=new r.vpe,this.rowCount=0,this._offsetX=new e.X(0),this._count=0,this._offset=0,this._subscriptions=[],this.rowIdentity=ts=>this._groupRowsBy?ts.key:ts,this.element=an.nativeElement,this.rowDiffer=ti.find({}).create(),this.configuration&&this.configuration.messages&&(this.messages=Object.assign({},this.configuration.messages))}set rows(ne){this._rows=ne,ne&&(this._internalRows=[...ne]),this.externalSorting||this.sortInternalRows(),this._internalRows=Pr(this._internalRows,Dn(this.treeFromRelation),Dn(this.treeToRelation)),this.recalculate(),this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)),this.cd.markForCheck()}get rows(){return this._rows}set groupRowsBy(ne){ne&&(this._groupRowsBy=ne,this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)))}get groupRowsBy(){return this._groupRowsBy}set columns(ne){ne&&(this._internalColumns=[...ne],mi(this._internalColumns),this.recalculateColumns()),this._columns=ne}get columns(){return this._columns}set limit(ne){this._limit=ne,this.recalculate()}get limit(){return this._limit}set count(ne){this._count=ne,this.recalculate()}get count(){return this._count}set offset(ne){this._offset=ne}get offset(){return Math.max(Math.min(this._offset,Math.ceil(this.rowCount/this.pageSize)-1),0)}get isFixedHeader(){const ne=this.headerHeight;return"string"!=typeof ne||"auto"!==ne}get isFixedRow(){return"auto"!==this.rowHeight}get isVertScroll(){return this.scrollbarV}get isVirtualized(){return this.virtualization}get isHorScroll(){return this.scrollbarH}get isSelectable(){return void 0!==this.selectionType}get isCheckboxSelection(){return this.selectionType===dr.checkbox}get isCellSelection(){return this.selectionType===dr.cell}get isSingleSelection(){return this.selectionType===dr.single}get isMultiSelection(){return this.selectionType===dr.multi}get isMultiClickSelection(){return this.selectionType===dr.multiClick}set columnTemplates(ne){this._columnTemplates=ne,this.translateColumns(ne)}get columnTemplates(){return this._columnTemplates}get allRowsSelected(){let ne=this.rows&&this.selected&&this.selected.length===this.rows.length;if(this.bodyComponent&&this.selectAllRowsOnPage){const $e=this.bodyComponent.indexes;ne=this.selected.length===$e.last-$e.first}return this.selected&&this.rows&&0!==this.rows.length&&ne}ngOnInit(){this.recalculate()}ngAfterViewInit(){this.externalSorting||this.sortInternalRows(),"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{this.recalculate(),this.externalPaging&&this.scrollbarV&&this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:0})})}ngAfterContentInit(){this.columnTemplates.changes.subscribe(ne=>this.translateColumns(ne)),this.listenForColumnInputChanges()}translateColumns(ne){if(ne){const $e=ne.toArray();$e.length&&(this._internalColumns=function(tt){const sn=[];for(const ne of tt){const $e={},Lt=Object.getOwnPropertyNames(ne);for(const an of Lt)$e[an]=ne[an];ne.headerTemplate&&($e.headerTemplate=ne.headerTemplate),ne.cellTemplate&&($e.cellTemplate=ne.cellTemplate),ne.summaryFunc&&($e.summaryFunc=ne.summaryFunc),ne.summaryTemplate&&($e.summaryTemplate=ne.summaryTemplate),sn.push($e)}return sn}($e),mi(this._internalColumns),this.recalculateColumns(),this.sortInternalRows(),this.cd.markForCheck())}}groupArrayBy(ne,$e){const Lt=new Map;return ne.forEach(pi=>{const xi=pi[$e];Lt.has(xi)?Lt.get(xi).push(pi):Lt.set(xi,[pi])}),Array.from(Lt,pi=>((pi,xi)=>({key:pi,value:xi}))(pi[0],pi[1]))}ngDoCheck(){this.rowDiffer.diff(this.rows)&&(this.externalSorting?this._internalRows=[...this.rows]:this.sortInternalRows(),this._internalRows=Pr(this._internalRows,Dn(this.treeFromRelation),Dn(this.treeToRelation)),this.recalculatePages(),this.cd.markForCheck())}recalculate(){this.recalculateDims(),this.recalculateColumns(),this.cd.markForCheck()}onWindowResize(){this.recalculate()}recalculateColumns(ne=this._internalColumns,$e=-1,Lt=this.scrollbarH){if(!ne)return;let an=this._innerWidth;return this.scrollbarV&&(an-=this.scrollbarHelper.width),this.columnMode===Wr.force?function(tt,sn,ne,$e,Lt=300){const an=tt.slice(ne+1,tt.length).filter(Eo=>!1!==Eo.canAutoResize);for(const Eo of an)Eo.$$oldWidth||(Eo.$$oldWidth=Eo.width);let ti=0,pi=!1,xi=Is(tt,Lt),ts=sn-xi;const wo=[];do{ti=ts/an.length,pi=xi>=sn;for(const Eo of an){if(pi&&$e)Eo.width=Eo.$$oldWidth||Eo.width||Lt;else{const ba=(Eo.width||Lt)+ti;Eo.minWidth&&baEo.maxWidth?(Eo.width=Eo.maxWidth,wo.push(Eo)):Eo.width=ba}Eo.width=Math.max(0,Eo.width)}xi=Is(tt),ts=sn-xi,ta(an,wo)}while(ts>1&&0!==an.length)}(ne,an,$e,Lt):this.columnMode===Wr.flex&&function(tt,sn){const ne=function(tt,sn){let ne=0;for(const $e of tt)ne+=$e.width;return ne}(tt),$e=function(tt){let sn=0;for(const ne of tt)sn+=ne.flexGrow||0;return sn}(tt),Lt=To(tt);ne!==sn&&function(tt,sn,ne){for(const an in tt)for(const ti of tt[an])ti.canAutoResize?ti.width=0:(sn-=ti.width,ne-=ti.flexGrow?ti.flexGrow:0);const $e={};let Lt=sn;do{const an=Lt/ne;Lt=0;for(const ti in tt)for(const pi of tt[ti])if(pi.canAutoResize&&!$e[pi.prop]){const xi=pi.width+pi.flexGrow*an;void 0!==pi.minWidth&&xi((ti=Object.assign({},ti)).$$id===ne.$$id&&(Lt=pi,ti.width=$e,ti.$$oldWidth=$e),ti));this.recalculateColumns(an,Lt),this._internalColumns=an,this.resize.emit({column:ne,newValue:$e})}onColumnReorder({column:ne,newValue:$e,prevValue:Lt}){const an=this._internalColumns.map(ti=>Object.assign({},ti));if(this.swapColumns){const ti=an[$e];an[$e]=ne,an[Lt]=ti}else if($e>Lt){const ti=an[Lt];for(let pi=Lt;pi<$e;pi++)an[pi]=an[pi+1];an[$e]=ti}else{const ti=an[Lt];for(let pi=Lt;pi>$e;pi--)an[pi]=an[pi-1];an[$e]=ti}this._internalColumns=an,this.reorder.emit({column:ne,newValue:$e,prevValue:Lt})}onColumnSort(ne){this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected})),this.sorts=ne.sorts,!1===this.externalSorting&&this.sortInternalRows(),this._internalRows=Pr(this._internalRows,Dn(this.treeFromRelation),Dn(this.treeToRelation)),this.offset=0,this.bodyComponent.updateOffsetY(this.offset),this.sort.emit(ne)}onHeaderSelect(ne){if(this.bodyComponent&&this.selectAllRowsOnPage){const $e=this.bodyComponent.indexes.first,Lt=this.bodyComponent.indexes.last,an=this.selected.length===Lt-$e;this.selected=[],an||this.selected.push(...this._internalRows.slice($e,Lt))}else{const $e=this.selected.length===this.rows.length;this.selected=[],$e||this.selected.push(...this.rows)}this.select.emit({selected:this.selected})}onBodySelect(ne){this.select.emit(ne)}onTreeAction(ne){const $e=ne.row,Lt=this._rows.findIndex(an=>an[this.treeToRelation]===ne.row[this.treeToRelation]);this.treeAction.emit({row:$e,rowIndex:Lt})}ngOnDestroy(){this._subscriptions.forEach(ne=>ne.unsubscribe())}listenForColumnInputChanges(){this._subscriptions.push(this.columnChangesService.columnInputChanges$.subscribe(()=>{this.columnTemplates&&this.columnTemplates.notifyOnChanges()}))}sortInternalRows(){this._internalRows=function(tt,sn,ne){if(!tt)return[];if(!ne||!ne.length||!sn)return[...tt];const $e=new Map;tt.forEach((pi,xi)=>$e.set(pi,xi));const Lt=[...tt],an=sn.reduce((pi,xi)=>(xi.comparator&&"function"==typeof xi.comparator&&(pi[xi.prop]=xi.comparator),pi),{}),ti=ne.map(pi=>{const xi=pi.prop;return{prop:xi,dir:pi.dir,valueGetter:gr(xi),compareFn:an[xi]||el}});return Lt.sort(function(pi,xi){for(const ts of ti){const{prop:wo,valueGetter:ko}=ts,Eo=ko(pi,wo),ba=ko(xi,wo),sl=ts.dir!==us.desc?ts.compareFn(Eo,ba,pi,xi,ts.dir):-ts.compareFn(Eo,ba,pi,xi,ts.dir);if(0!==sl)return sl}return $e.has(pi)&&$e.has(xi)?$e.get(pi)<$e.get(xi)?-1:1:0})}(this._internalRows,this._internalColumns,this.sorts)}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(Cn,4),r.Y36(Wt,4),r.Y36(r.sBO),r.Y36(r.SBq),r.Y36(r.aQg),r.Y36(zn),r.Y36("configuration",8))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["ngx-datatable"]],contentQueries:function(ne,$e,Lt){if(1&ne&&(r.Suo(Lt,os,5),r.Suo(Lt,gn,5),r.Suo(Lt,jo,5),r.Suo(Lt,Co,4)),2&ne){let an;r.iGM(an=r.CRH())&&($e.rowDetail=an.first),r.iGM(an=r.CRH())&&($e.groupHeader=an.first),r.iGM(an=r.CRH())&&($e.footer=an.first),r.iGM(an=r.CRH())&&($e.columnTemplates=an)}},viewQuery:function(ne,$e){if(1&ne&&(r.Gf(si,5),r.Gf(Vi,5)),2&ne){let Lt;r.iGM(Lt=r.CRH())&&($e.bodyComponent=Lt.first),r.iGM(Lt=r.CRH())&&($e.headerComponent=Lt.first)}},hostAttrs:[1,"ngx-datatable"],hostVars:22,hostBindings:function(ne,$e){1&ne&&r.NdJ("resize",function(){return $e.onWindowResize()},!1,r.Jf7),2&ne&&r.ekj("fixed-header",$e.isFixedHeader)("fixed-row",$e.isFixedRow)("scroll-vertical",$e.isVertScroll)("virtualized",$e.isVirtualized)("scroll-horz",$e.isHorScroll)("selectable",$e.isSelectable)("checkbox-selection",$e.isCheckboxSelection)("cell-selection",$e.isCellSelection)("single-selection",$e.isSingleSelection)("multi-selection",$e.isMultiSelection)("multi-click-selection",$e.isMultiClickSelection)},inputs:{selected:"selected",scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",rowHeight:"rowHeight",columnMode:"columnMode",headerHeight:"headerHeight",footerHeight:"footerHeight",externalPaging:"externalPaging",externalSorting:"externalSorting",loadingIndicator:"loadingIndicator",reorderable:"reorderable",swapColumns:"swapColumns",sortType:"sortType",sorts:"sorts",cssClasses:"cssClasses",messages:"messages",groupExpansionDefault:"groupExpansionDefault",selectAllRowsOnPage:"selectAllRowsOnPage",virtualization:"virtualization",summaryRow:"summaryRow",summaryHeight:"summaryHeight",summaryPosition:"summaryPosition",rowIdentity:"rowIdentity",rows:"rows",groupedRows:"groupedRows",groupRowsBy:"groupRowsBy",columns:"columns",limit:"limit",count:"count",offset:"offset",targetMarkerTemplate:"targetMarkerTemplate",selectionType:"selectionType",rowClass:"rowClass",selectCheck:"selectCheck",displayCheck:"displayCheck",trackByProp:"trackByProp",treeFromRelation:"treeFromRelation",treeToRelation:"treeToRelation"},outputs:{scroll:"scroll",activate:"activate",select:"select",sort:"sort",page:"page",reorder:"reorder",resize:"resize",tableContextmenu:"tableContextmenu",treeAction:"treeAction"},decls:5,vars:34,consts:[["visibilityObserver","",3,"visible"],[3,"sorts","sortType","scrollbarH","innerWidth","offsetX","dealsWithGroup","columns","headerHeight","reorderable","targetMarkerTemplate","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","selectionType","sort","resize","reorder","select","columnContextmenu",4,"ngIf"],[3,"groupRowsBy","groupedRows","rows","groupExpansionDefault","scrollbarV","scrollbarH","virtualization","loadingIndicator","externalPaging","rowHeight","rowCount","offset","trackByProp","columns","pageSize","offsetX","rowDetail","groupHeader","selected","innerWidth","bodyHeight","selectionType","emptyMessage","rowIdentity","rowClass","selectCheck","displayCheck","summaryRow","summaryHeight","summaryPosition","page","activate","rowContextmenu","select","scroll","treeAction"],[3,"rowCount","pageSize","offset","footerHeight","footerTemplate","totalMessage","pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","selectedCount","selectedMessage","pagerNextIcon","page",4,"ngIf"],[3,"sorts","sortType","scrollbarH","innerWidth","offsetX","dealsWithGroup","columns","headerHeight","reorderable","targetMarkerTemplate","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","selectionType","sort","resize","reorder","select","columnContextmenu"],[3,"rowCount","pageSize","offset","footerHeight","footerTemplate","totalMessage","pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","selectedCount","selectedMessage","pagerNextIcon","page"]],template:function(ne,$e){1&ne&&(r.TgZ(0,"div",0),r.NdJ("visible",function(){return $e.recalculate()}),r.YNc(1,Ee,2,17,"datatable-header",1),r.TgZ(2,"datatable-body",2),r.NdJ("page",function(an){return $e.onBodyPage(an)})("activate",function(an){return $e.activate.emit(an)})("rowContextmenu",function(an){return $e.onRowContextmenu(an)})("select",function(an){return $e.onBodySelect(an)})("scroll",function(an){return $e.onBodyScroll(an)})("treeAction",function(an){return $e.onTreeAction(an)}),r.ALo(3,"async"),r.qZA(),r.YNc(4,ie,1,12,"datatable-footer",3),r.qZA()),2&ne&&(r.xp6(1),r.Q6J("ngIf",$e.headerHeight),r.xp6(1),r.Q6J("groupRowsBy",$e.groupRowsBy)("groupedRows",$e.groupedRows)("rows",$e._internalRows)("groupExpansionDefault",$e.groupExpansionDefault)("scrollbarV",$e.scrollbarV)("scrollbarH",$e.scrollbarH)("virtualization",$e.virtualization)("loadingIndicator",$e.loadingIndicator)("externalPaging",$e.externalPaging)("rowHeight",$e.rowHeight)("rowCount",$e.rowCount)("offset",$e.offset)("trackByProp",$e.trackByProp)("columns",$e._internalColumns)("pageSize",$e.pageSize)("offsetX",r.lcZ(3,32,$e._offsetX))("rowDetail",$e.rowDetail)("groupHeader",$e.groupHeader)("selected",$e.selected)("innerWidth",$e._innerWidth)("bodyHeight",$e.bodyHeight)("selectionType",$e.selectionType)("emptyMessage",$e.messages.emptyMessage)("rowIdentity",$e.rowIdentity)("rowClass",$e.rowClass)("selectCheck",$e.selectCheck)("displayCheck",$e.displayCheck)("summaryRow",$e.summaryRow)("summaryHeight",$e.summaryHeight)("summaryPosition",$e.summaryPosition),r.xp6(2),r.Q6J("ngIf",$e.footerHeight))},directives:function(){return[Fr,u.O5,si,Vi,Il]},pipes:function(){return[u.Ov]},styles:[".ngx-datatable{display:block;justify-content:center;overflow:hidden;position:relative;transform:translateZ(0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{-webkit-overflow-scrolling:touch;overflow-x:auto}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{-o-flex-flow:row;display:flex;flex-direction:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{display:inline-block;line-height:1.625;overflow-x:hidden;vertical-align:top}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:none}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{-webkit-align-items:stretch;align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{display:inline-block;position:relative}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{cursor:pointer;display:inline-block;line-height:100%;vertical-align:middle}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{bottom:0;display:inline-block;padding:0 4px;position:absolute;right:0;top:0;visibility:hidden;width:5px}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{bottom:0;position:absolute;top:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{display:block;position:relative;z-index:10}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:none}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;overflow:auto;width:100%}.ngx-datatable .datatable-footer .datatable-footer-inner{align-items:center;display:flex;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{display:inline-block;list-style:none;margin:0;padding:0}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:none}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"],encapsulation:2,changeDetection:0}),(0,y.gn)([co(5)],tt.prototype,"onWindowResize",null),tt})(),da=(()=>{class tt{constructor(ne){this.cd=ne,this.sort=new r.vpe,this.select=new r.vpe,this.columnContextmenu=new r.vpe(!1),this.sortFn=this.onSort.bind(this),this.selectFn=this.select.emit.bind(this.select),this.cellContext={column:this.column,sortDir:this.sortDir,sortFn:this.sortFn,allRowsSelected:this.allRowsSelected,selectFn:this.selectFn}}set allRowsSelected(ne){this._allRowsSelected=ne,this.cellContext.allRowsSelected=ne}get allRowsSelected(){return this._allRowsSelected}set column(ne){this._column=ne,this.cellContext.column=ne,this.cd.markForCheck()}get column(){return this._column}set sorts(ne){this._sorts=ne,this.sortDir=this.calcSortDir(ne),this.cellContext.sortDir=this.sortDir,this.sortClass=this.calcSortClass(this.sortDir),this.cd.markForCheck()}get sorts(){return this._sorts}get columnCssClasses(){let ne="datatable-header-cell";if(this.column.sortable&&(ne+=" sortable"),this.column.resizeable&&(ne+=" resizeable"),this.column.headerClass)if("string"==typeof this.column.headerClass)ne+=" "+this.column.headerClass;else if("function"==typeof this.column.headerClass){const Lt=this.column.headerClass({column:this.column});if("string"==typeof Lt)ne+=Lt;else if("object"==typeof Lt){const an=Object.keys(Lt);for(const ti of an)!0===Lt[ti]&&(ne+=` ${ti}`)}}const $e=this.sortDir;return $e&&(ne+=` sort-active sort-${$e}`),ne}get name(){return void 0===this.column.headerTemplate?this.column.name:void 0}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get width(){return this.column.width}get isCheckboxable(){return this.column.checkboxable&&this.column.headerCheckboxable&&this.selectionType===dr.checkbox}onContextmenu(ne){this.columnContextmenu.emit({event:ne,column:this.column})}ngOnInit(){this.sortClass=this.calcSortClass(this.sortDir)}calcSortDir(ne){if(ne&&this.column){const $e=ne.find(Lt=>Lt.prop===this.column.prop);if($e)return $e.dir}}onSort(){if(!this.column.sortable)return;const ne=function(tt,sn){return tt===Fn.single?sn===us.asc?us.desc:us.asc:sn?sn===us.asc?us.desc:void 0:us.asc}(this.sortType,this.sortDir);this.sort.emit({column:this.column,prevValue:this.sortDir,newValue:ne})}calcSortClass(ne){if(this.cellContext.column.sortable)return ne===us.asc?`sort-btn sort-asc ${this.sortAscendingIcon}`:ne===us.desc?`sort-btn sort-desc ${this.sortDescendingIcon}`:`sort-btn ${this.sortUnsetIcon}`}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.sBO))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-header-cell"]],hostAttrs:[1,"datatable-header-cell"],hostVars:11,hostBindings:function(ne,$e){1&ne&&r.NdJ("contextmenu",function(an){return $e.onContextmenu(an)}),2&ne&&(r.uIk("title",$e.name),r.Tol($e.columnCssClasses),r.Udp("min-width",$e.minWidth,"px")("max-width",$e.maxWidth,"px")("width",$e.width,"px")("height",$e.headerHeight,"px"))},inputs:{allRowsSelected:"allRowsSelected",column:"column",sorts:"sorts",sortType:"sortType",sortAscendingIcon:"sortAscendingIcon",sortDescendingIcon:"sortDescendingIcon",sortUnsetIcon:"sortUnsetIcon",isTarget:"isTarget",targetMarkerTemplate:"targetMarkerTemplate",targetMarkerContext:"targetMarkerContext",selectionType:"selectionType",headerHeight:"headerHeight"},outputs:{sort:"sort",select:"select",columnContextmenu:"columnContextmenu"},decls:6,vars:6,consts:[[1,"datatable-header-cell-template-wrap"],[4,"ngIf"],["class","datatable-checkbox",4,"ngIf"],["class","datatable-header-cell-wrapper",4,"ngIf"],[3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"datatable-checkbox"],["type","checkbox",3,"checked","change"],[1,"datatable-header-cell-wrapper"],[1,"datatable-header-cell-label","draggable",3,"innerHTML","click"]],template:function(ne,$e){1&ne&&(r.TgZ(0,"div",0),r.YNc(1,ge,1,2,void 0,1),r.YNc(2,De,2,1,"label",2),r.YNc(3,ce,2,1,"span",3),r.YNc(4,Ve,1,2,void 0,1),r.TgZ(5,"span",4),r.NdJ("click",function(){return $e.onSort()}),r.qZA(),r.qZA()),2&ne&&(r.xp6(1),r.Q6J("ngIf",$e.isTarget),r.xp6(1),r.Q6J("ngIf",$e.isCheckboxable),r.xp6(1),r.Q6J("ngIf",!$e.column.headerTemplate),r.xp6(1),r.Q6J("ngIf",$e.column.headerTemplate),r.xp6(1),r.Tol($e.sortClass))},directives:[u.O5,u.tP],encapsulation:2,changeDetection:0}),tt})(),Il=(()=>{class tt{constructor(){this.selectedCount=0,this.page=new r.vpe}get isVisible(){return this.rowCount/this.pageSize>1}get curPage(){return this.offset+1}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-footer"]],hostAttrs:[1,"datatable-footer"],inputs:{selectedCount:"selectedCount",footerHeight:"footerHeight",rowCount:"rowCount",pageSize:"pageSize",offset:"offset",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon",totalMessage:"totalMessage",footerTemplate:"footerTemplate",selectedMessage:"selectedMessage"},outputs:{page:"page"},decls:4,vars:8,consts:[[1,"datatable-footer-inner",3,"ngClass"],[4,"ngIf"],["class","page-count",4,"ngIf"],[3,"pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","pagerNextIcon","page","size","count","hidden","change",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"page-count"],[3,"pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","pagerNextIcon","page","size","count","hidden","change"]],template:function(ne,$e){1&ne&&(r.TgZ(0,"div",0),r.YNc(1,Pe,1,8,void 0,1),r.YNc(2,He,3,3,"div",2),r.YNc(3,Vt,1,8,"datatable-pager",3),r.qZA()),2&ne&&(r.Udp("height",$e.footerHeight,"px"),r.Q6J("ngClass",r.VKq(6,it,$e.selectedMessage)),r.xp6(1),r.Q6J("ngIf",$e.footerTemplate),r.xp6(1),r.Q6J("ngIf",!$e.footerTemplate),r.xp6(1),r.Q6J("ngIf",!$e.footerTemplate))},directives:function(){return[u.mk,u.O5,u.tP,fo]},encapsulation:2,changeDetection:0}),tt})(),fo=(()=>{class tt{constructor(){this.change=new r.vpe,this._count=0,this._page=1,this._size=0}set size(ne){this._size=ne,this.pages=this.calcPages()}get size(){return this._size}set count(ne){this._count=ne,this.pages=this.calcPages()}get count(){return this._count}set page(ne){this._page=ne,this.pages=this.calcPages()}get page(){return this._page}get totalPages(){const ne=this.size<1?1:Math.ceil(this.count/this.size);return Math.max(ne||0,1)}canPrevious(){return this.page>1}canNext(){return this.page0&&ne<=this.totalPages&&ne!==this.page&&(this.page=ne,this.change.emit({page:ne}))}calcPages(ne){const $e=[];let Lt=1,an=this.totalPages;ne=ne||this.page,5this.totalPages&&(Lt=Math.max(this.totalPages-5+1,1),an=this.totalPages));for(let xi=Lt;xi<=an;xi++)$e.push({number:xi,text:xi});return $e}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-pager"]],hostAttrs:[1,"datatable-pager"],inputs:{size:"size",count:"count",page:"page",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon"},outputs:{change:"change"},decls:14,vars:21,consts:[[1,"pager"],["role","button","aria-label","go to first page","href","javascript:void(0)",3,"click"],["role","button","aria-label","go to previous page","href","javascript:void(0)",3,"click"],["role","button","class","pages",3,"active",4,"ngFor","ngForOf"],["role","button","aria-label","go to next page","href","javascript:void(0)",3,"click"],["role","button","aria-label","go to last page","href","javascript:void(0)",3,"click"],["role","button",1,"pages"],["href","javascript:void(0)",3,"click"]],template:function(ne,$e){1&ne&&(r.TgZ(0,"ul",0),r.TgZ(1,"li"),r.TgZ(2,"a",1),r.NdJ("click",function(){return $e.selectPage(1)}),r._UZ(3,"i"),r.qZA(),r.qZA(),r.TgZ(4,"li"),r.TgZ(5,"a",2),r.NdJ("click",function(){return $e.prevPage()}),r._UZ(6,"i"),r.qZA(),r.qZA(),r.YNc(7,tn,3,4,"li",3),r.TgZ(8,"li"),r.TgZ(9,"a",4),r.NdJ("click",function(){return $e.nextPage()}),r._UZ(10,"i"),r.qZA(),r.qZA(),r.TgZ(11,"li"),r.TgZ(12,"a",5),r.NdJ("click",function(){return $e.selectPage($e.totalPages)}),r._UZ(13,"i"),r.qZA(),r.qZA(),r.qZA()),2&ne&&(r.xp6(1),r.ekj("disabled",!$e.canPrevious()),r.xp6(2),r.Tol($e.pagerPreviousIcon),r.xp6(1),r.ekj("disabled",!$e.canPrevious()),r.xp6(2),r.Tol($e.pagerLeftArrowIcon),r.xp6(1),r.Q6J("ngForOf",$e.pages),r.xp6(1),r.ekj("disabled",!$e.canNext()),r.xp6(2),r.Tol($e.pagerRightArrowIcon),r.xp6(1),r.ekj("disabled",!$e.canNext()),r.xp6(2),r.Tol($e.pagerNextIcon))},directives:[u.sg],encapsulation:2,changeDetection:0}),tt})(),Ya=(()=>{class tt{}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-progress"]],decls:3,vars:0,consts:[["role","progressbar",1,"progress-linear"],[1,"container"],[1,"bar"]],template:function(ne,$e){1&ne&&(r.TgZ(0,"div",0),r.TgZ(1,"div",1),r._UZ(2,"div",2),r.qZA(),r.qZA())},encapsulation:2,changeDetection:0}),tt})();var Ao=(()=>{return(tt=Ao||(Ao={}))[tt.up=38]="up",tt[tt.down=40]="down",tt[tt.return=13]="return",tt[tt.escape=27]="escape",tt[tt.left=37]="left",tt[tt.right=39]="right",Ao;var tt})();let fs=(()=>{class tt{constructor(ne,$e,Lt,an){this.differs=ne,this.scrollbarHelper=$e,this.cd=Lt,this.treeStatus="collapsed",this.activate=new r.vpe,this.treeAction=new r.vpe,this._groupStyles={left:{},center:{},right:{}},this._element=an.nativeElement,this._rowDiffer=ne.find({}).create()}set columns(ne){this._columns=ne,this.recalculateColumns(ne),this.buildStylesByGroup()}get columns(){return this._columns}set innerWidth(ne){if(this._columns){const $e=To(this._columns);this._columnGroupWidths=Mi($e,this._columns)}this._innerWidth=ne,this.recalculateColumns(),this.buildStylesByGroup()}get innerWidth(){return this._innerWidth}set offsetX(ne){this._offsetX=ne,this.buildStylesByGroup()}get offsetX(){return this._offsetX}get cssClass(){let ne="datatable-body-row";if(this.isSelected&&(ne+=" active"),this.rowIndex%2!=0&&(ne+=" datatable-row-odd"),this.rowIndex%2==0&&(ne+=" datatable-row-even"),this.rowClass){const $e=this.rowClass(this.row);if("string"==typeof $e)ne+=` ${$e}`;else if("object"==typeof $e){const Lt=Object.keys($e);for(const an of Lt)!0===$e[an]&&(ne+=` ${an}`)}}return ne}get columnsTotalWidths(){return this._columnGroupWidths.total}ngDoCheck(){this._rowDiffer.diff(this.row)&&this.cd.markForCheck()}trackByGroups(ne,$e){return $e.type}columnTrackingFn(ne,$e){return $e.$$id}buildStylesByGroup(){this._groupStyles.left=this.calcStylesByGroup("left"),this._groupStyles.center=this.calcStylesByGroup("center"),this._groupStyles.right=this.calcStylesByGroup("right"),this.cd.markForCheck()}calcStylesByGroup(ne){const $e=this._columnGroupWidths,Lt=this.offsetX,an={width:`${$e[ne]}px`};if("left"===ne)on(an,Lt,0);else if("right"===ne){const ti=parseInt(this.innerWidth+"",0);on(an,-1*($e.total-ti-Lt+this.scrollbarHelper.width),0)}return an}onActivate(ne,$e){ne.cellIndex=$e,ne.rowElement=this._element,this.activate.emit(ne)}onKeyDown(ne){const $e=ne.keyCode;($e===Ao.return||$e===Ao.down||$e===Ao.up||$e===Ao.left||$e===Ao.right)&&ne.target===this._element&&(ne.preventDefault(),ne.stopPropagation(),this.activate.emit({type:"keydown",event:ne,row:this.row,rowElement:this._element}))}onMouseenter(ne){this.activate.emit({type:"mouseenter",event:ne,row:this.row,rowElement:this._element})}recalculateColumns(ne=this.columns){this._columns=ne;const $e=To(this._columns);this._columnsByPin=lr(this._columns),this._columnGroupWidths=Mi($e,this._columns)}onTreeAction(){this.treeAction.emit()}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.aQg),r.Y36(Cn,4),r.Y36(r.sBO),r.Y36(r.SBq))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-body-row"]],hostVars:6,hostBindings:function(ne,$e){1&ne&&r.NdJ("keydown",function(an){return $e.onKeyDown(an)})("mouseenter",function(an){return $e.onMouseenter(an)}),2&ne&&(r.Tol($e.cssClass),r.Udp("width",$e.columnsTotalWidths,"px")("height",$e.rowHeight,"px"))},inputs:{treeStatus:"treeStatus",columns:"columns",innerWidth:"innerWidth",offsetX:"offsetX",expanded:"expanded",rowClass:"rowClass",row:"row",group:"group",isSelected:"isSelected",rowIndex:"rowIndex",displayCheck:"displayCheck",rowHeight:"rowHeight"},outputs:{activate:"activate",treeAction:"treeAction"},decls:1,vars:2,consts:[[3,"class","ngStyle",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle"],["tabindex","-1",3,"row","group","expanded","isSelected","rowIndex","column","rowHeight","displayCheck","treeStatus","activate","treeAction",4,"ngFor","ngForOf","ngForTrackBy"],["tabindex","-1",3,"row","group","expanded","isSelected","rowIndex","column","rowHeight","displayCheck","treeStatus","activate","treeAction"]],template:function(ne,$e){1&ne&&r.YNc(0,Zt,2,6,"div",0),2&ne&&r.Q6J("ngForOf",$e._columnsByPin)("ngForTrackBy",$e.trackByGroups)},directives:function(){return[u.sg,u.PC,Ra]},encapsulation:2,changeDetection:0}),tt})(),Ca=(()=>{class tt{constructor(ne,$e){this.cd=ne,this.differs=$e,this.rowContextmenu=new r.vpe(!1),this.groupContext={group:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this.rowContext={row:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this._expanded=!1,this.rowDiffer=$e.find({}).create()}set rowIndex(ne){this._rowIndex=ne,this.rowContext.rowIndex=ne,this.groupContext.rowIndex=ne,this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set expanded(ne){this._expanded=ne,this.groupContext.expanded=ne,this.rowContext.expanded=ne,this.cd.markForCheck()}get expanded(){return this._expanded}ngDoCheck(){this.rowDiffer.diff(this.row)&&(this.rowContext.row=this.row,this.groupContext.group=this.row,this.cd.markForCheck())}onContextmenu(ne){this.rowContextmenu.emit({event:ne,row:this.row})}getGroupHeaderStyle(){const ne={};return ne.transform="translate3d("+this.offsetX+"px, 0px, 0px)",ne["backface-visibility"]="hidden",ne.width=this.innerWidth,ne}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.sBO),r.Y36(r.aQg))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-row-wrapper"]],hostAttrs:[1,"datatable-row-wrapper"],hostBindings:function(ne,$e){1&ne&&r.NdJ("contextmenu",function(an){return $e.onContextmenu(an)})},inputs:{rowIndex:"rowIndex",expanded:"expanded",innerWidth:"innerWidth",rowDetail:"rowDetail",groupHeader:"groupHeader",offsetX:"offsetX",detailRowHeight:"detailRowHeight",row:"row",groupedRows:"groupedRows"},outputs:{rowContextmenu:"rowContextmenu"},ngContentSelectors:S,decls:3,vars:3,consts:[["class","datatable-group-header",3,"ngStyle",4,"ngIf"],[4,"ngIf"],["class","datatable-row-detail",3,"height",4,"ngIf"],[1,"datatable-group-header",3,"ngStyle"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"datatable-row-detail"]],template:function(ne,$e){1&ne&&(r.F$t(),r.YNc(0,bt,2,2,"div",0),r.YNc(1,Gt,1,0,"ng-content",1),r.YNc(2,Zn,2,3,"div",2)),2&ne&&(r.Q6J("ngIf",$e.groupHeader&&$e.groupHeader.template),r.xp6(1),r.Q6J("ngIf",$e.groupHeader&&$e.groupHeader.template&&$e.expanded||!$e.groupHeader||!$e.groupHeader.template),r.xp6(1),r.Q6J("ngIf",$e.rowDetail&&$e.rowDetail.template&&$e.expanded))},directives:[u.O5,u.PC,u.tP],encapsulation:2,changeDetection:0}),tt})(),Ra=(()=>{class tt{constructor(ne,$e){this.cd=$e,this.activate=new r.vpe,this.treeAction=new r.vpe,this.isFocused=!1,this.onCheckboxChangeFn=this.onCheckboxChange.bind(this),this.activateFn=this.activate.emit.bind(this.activate),this.cellContext={onCheckboxChangeFn:this.onCheckboxChangeFn,activateFn:this.activateFn,row:this.row,group:this.group,value:this.value,column:this.column,rowHeight:this.rowHeight,isSelected:this.isSelected,rowIndex:this.rowIndex,treeStatus:this.treeStatus,onTreeAction:this.onTreeAction.bind(this)},this._element=ne.nativeElement}set group(ne){this._group=ne,this.cellContext.group=ne,this.checkValueUpdates(),this.cd.markForCheck()}get group(){return this._group}set rowHeight(ne){this._rowHeight=ne,this.cellContext.rowHeight=ne,this.checkValueUpdates(),this.cd.markForCheck()}get rowHeight(){return this._rowHeight}set isSelected(ne){this._isSelected=ne,this.cellContext.isSelected=ne,this.cd.markForCheck()}get isSelected(){return this._isSelected}set expanded(ne){this._expanded=ne,this.cellContext.expanded=ne,this.cd.markForCheck()}get expanded(){return this._expanded}set rowIndex(ne){this._rowIndex=ne,this.cellContext.rowIndex=ne,this.checkValueUpdates(),this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set column(ne){this._column=ne,this.cellContext.column=ne,this.checkValueUpdates(),this.cd.markForCheck()}get column(){return this._column}set row(ne){this._row=ne,this.cellContext.row=ne,this.checkValueUpdates(),this.cd.markForCheck()}get row(){return this._row}set sorts(ne){this._sorts=ne,this.calcSortDir=this.calcSortDir(ne)}get sorts(){return this._sorts}set treeStatus(ne){this._treeStatus="collapsed"!==ne&&"expanded"!==ne&&"loading"!==ne&&"disabled"!==ne?"collapsed":ne,this.cellContext.treeStatus=this._treeStatus,this.checkValueUpdates(),this.cd.markForCheck()}get treeStatus(){return this._treeStatus}get columnCssClasses(){let ne="datatable-body-cell";if(this.column.cellClass)if("string"==typeof this.column.cellClass)ne+=" "+this.column.cellClass;else if("function"==typeof this.column.cellClass){const $e=this.column.cellClass({row:this.row,group:this.group,column:this.column,value:this.value,rowHeight:this.rowHeight});if("string"==typeof $e)ne+=" "+$e;else if("object"==typeof $e){const Lt=Object.keys($e);for(const an of Lt)!0===$e[an]&&(ne+=` ${an}`)}}return this.sortDir||(ne+=" sort-active"),this.isFocused&&(ne+=" active"),this.sortDir===us.asc&&(ne+=" sort-asc"),this.sortDir===us.desc&&(ne+=" sort-desc"),ne}get width(){return this.column.width}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get height(){const ne=this.rowHeight;return isNaN(ne)?ne:ne+"px"}ngDoCheck(){this.checkValueUpdates()}ngOnDestroy(){this.cellTemplate&&this.cellTemplate.clear()}checkValueUpdates(){let ne="";if(this.row&&this.column){const $e=this.column.$$valueGetter(this.row,this.column.prop),Lt=this.column.pipe;Lt?ne=Lt.transform($e):void 0!==ne&&(ne=$e)}else ne="";this.value!==ne&&(this.value=ne,this.cellContext.value=ne,this.sanitizedValue=null!=ne?this.stripHtml(ne):ne,this.cd.markForCheck())}onFocus(){this.isFocused=!0}onBlur(){this.isFocused=!1}onClick(ne){this.activate.emit({type:"click",event:ne,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onDblClick(ne){this.activate.emit({type:"dblclick",event:ne,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onKeyDown(ne){const $e=ne.keyCode;($e===Ao.return||$e===Ao.down||$e===Ao.up||$e===Ao.left||$e===Ao.right)&&ne.target===this._element&&(ne.preventDefault(),ne.stopPropagation(),this.activate.emit({type:"keydown",event:ne,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element}))}onCheckboxChange(ne){this.activate.emit({type:"checkbox",event:ne,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element,treeStatus:"collapsed"})}calcSortDir(ne){if(!ne)return;const $e=ne.find(Lt=>Lt.prop===this.column.prop);return $e?$e.dir:void 0}stripHtml(ne){return ne.replace?ne.replace(/<\/?[^>]+(>|$)/g,""):ne}onTreeAction(){this.treeAction.emit(this.row)}calcLeftMargin(ne,$e){return ne.isTreeColumn?$e.level*(null!=ne.treeLevelIndent?ne.treeLevelIndent:50):0}}return tt.\u0275fac=function(ne){return new(ne||tt)(r.Y36(r.SBq),r.Y36(r.sBO))},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-body-cell"]],viewQuery:function(ne,$e){if(1&ne&&r.Gf(Ur,7,r.s_b),2&ne){let Lt;r.iGM(Lt=r.CRH())&&($e.cellTemplate=Lt.first)}},hostVars:10,hostBindings:function(ne,$e){1&ne&&r.NdJ("focus",function(){return $e.onFocus()})("blur",function(){return $e.onBlur()})("click",function(an){return $e.onClick(an)})("dblclick",function(an){return $e.onDblClick(an)})("keydown",function(an){return $e.onKeyDown(an)}),2&ne&&(r.Tol($e.columnCssClasses),r.Udp("width",$e.width,"px")("min-width",$e.minWidth,"px")("max-width",$e.maxWidth,"px")("height",$e.height))},inputs:{group:"group",rowHeight:"rowHeight",isSelected:"isSelected",expanded:"expanded",rowIndex:"rowIndex",column:"column",row:"row",sorts:"sorts",treeStatus:"treeStatus",displayCheck:"displayCheck"},outputs:{activate:"activate",treeAction:"treeAction"},decls:5,vars:6,consts:[[1,"datatable-body-cell-label"],["class","datatable-checkbox",4,"ngIf"],[4,"ngIf"],[3,"title","innerHTML",4,"ngIf"],[1,"datatable-checkbox"],["type","checkbox",3,"checked","click"],["class","datatable-tree-button",3,"disabled","click",4,"ngIf"],[1,"datatable-tree-button",3,"disabled","click"],["class","icon datatable-icon-collapse",4,"ngIf"],["class","icon datatable-icon-up",4,"ngIf"],["class","icon datatable-icon-down",4,"ngIf"],[1,"icon","datatable-icon-collapse"],[1,"icon","datatable-icon-up"],[1,"icon","datatable-icon-down"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"title","innerHTML"],["cellTemplate",""]],template:function(ne,$e){1&ne&&(r.TgZ(0,"div",0),r.YNc(1,di,2,1,"label",1),r.YNc(2,Yr,3,2,"ng-container",2),r.YNc(3,fi,1,2,"span",3),r.YNc(4,Hi,2,2,void 0,2),r.qZA()),2&ne&&(r.Udp("margin-left",$e.calcLeftMargin($e.column,$e.row),"px"),r.xp6(1),r.Q6J("ngIf",$e.column.checkboxable&&(!$e.displayCheck||$e.displayCheck($e.row,$e.column,$e.value))),r.xp6(1),r.Q6J("ngIf",$e.column.isTreeColumn),r.xp6(1),r.Q6J("ngIf",!$e.column.cellTemplate),r.xp6(1),r.Q6J("ngIf",$e.column.cellTemplate))},directives:[u.O5,u.tP],encapsulation:2,changeDetection:0}),tt})();function pl(tt,sn,ne){const $e=ne(sn,tt);return $e>-1?tt.splice($e,1):tt.push(sn),tt}let Po=(()=>{class tt{constructor(){this.activate=new r.vpe,this.select=new r.vpe}selectRow(ne,$e,Lt){if(!this.selectEnabled)return;const an=this.selectionType===dr.checkbox,pi=this.selectionType===dr.multiClick;let xi=[];xi=this.selectionType===dr.multi||an||pi?ne.shiftKey?function(tt,sn,ne,$e,Lt){const an=ne<$e;for(let ti=0;ti=$e&&ti<=ne,ts=ti<=$e&&ti>=ne;let wo={start:0,end:0};wo=an?{start:ne,end:$e}:{start:$e,end:ne+1},(an&&ts||!an&&xi)&&ti>=wo.start&&ti<=wo.end&&tt.push(pi)}return tt}([],this.rows,$e,this.prevIndex,this.getRowSelectedIdx.bind(this)):pl(ne.ctrlKey||ne.metaKey||pi||an?[...this.selected]:[],Lt,this.getRowSelectedIdx.bind(this)):pl([],Lt,this.getRowSelectedIdx.bind(this)),"function"==typeof this.selectCheck&&(xi=xi.filter(this.selectCheck.bind(this))),this.selected.splice(0,this.selected.length),this.selected.push(...xi),this.prevIndex=$e,this.select.emit({selected:xi})}onActivate(ne,$e){const{type:Lt,event:an,row:ti}=ne,pi=this.selectionType===dr.checkbox;!pi&&("click"===Lt||"dblclick"===Lt)||pi&&"checkbox"===Lt?this.selectRow(an,$e,ti):"keydown"===Lt&&(an.keyCode===Ao.return?this.selectRow(an,$e,ti):this.onKeyboardFocus(ne)),this.activate.emit(ne)}onKeyboardFocus(ne){const{keyCode:$e}=ne.event;if($e===Ao.up||$e===Ao.down||$e===Ao.right||$e===Ao.left){const an=this.selectionType===dr.cell;ne.cellElement&&an?an&&this.focusCell(ne.cellElement,ne.rowElement,$e,ne.cellIndex):this.focusRow(ne.rowElement,$e)}}focusRow(ne,$e){const Lt=this.getPrevNextRow(ne,$e);Lt&&Lt.focus()}getPrevNextRow(ne,$e){const Lt=ne.parentElement;if(Lt){let an;if($e===Ao.up?an=Lt.previousElementSibling:$e===Ao.down&&(an=Lt.nextElementSibling),an&&an.children.length)return an.children[0]}}focusCell(ne,$e,Lt,an){let ti;if(Lt===Ao.left)ti=ne.previousElementSibling;else if(Lt===Ao.right)ti=ne.nextElementSibling;else if(Lt===Ao.up||Lt===Ao.down){const pi=this.getPrevNextRow($e,Lt);if(pi){const xi=pi.getElementsByClassName("datatable-body-cell");xi.length&&(ti=xi[an])}}ti&&ti.focus()}getRowSelected(ne){return this.getRowSelectedIdx(ne,this.selected)>-1}getRowSelectedIdx(ne,$e){if(!$e||!$e.length)return-1;const Lt=this.rowIdentity(ne);return $e.findIndex(an=>this.rowIdentity(an)===Lt)}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-selection"]],inputs:{rows:"rows",selected:"selected",selectEnabled:"selectEnabled",selectionType:"selectionType",rowIdentity:"rowIdentity",selectCheck:"selectCheck"},outputs:{activate:"activate",select:"select"},ngContentSelectors:S,decls:1,vars:0,template:function(ne,$e){1&ne&&(r.F$t(),r.Hsn(0))},encapsulation:2,changeDetection:0}),tt})();function bo(tt){const sn=tt.filter(ne=>!!ne);return!sn.length||sn.some(ne=>"number"!=typeof ne)?null:sn.reduce((ne,$e)=>ne+$e)}function Ls(tt){return null}let ps=(()=>{class tt{constructor(){this.summaryRow={}}ngOnChanges(){!this.columns||!this.rows||(this.updateInternalColumns(),this.updateValues())}updateInternalColumns(){this._internalColumns=this.columns.map(ne=>Object.assign(Object.assign({},ne),{cellTemplate:ne.summaryTemplate}))}updateValues(){this.summaryRow={},this.columns.filter(ne=>!ne.summaryTemplate).forEach(ne=>{const $e=this.rows.map(an=>an[ne.prop]),Lt=this.getSummaryFunction(ne);this.summaryRow[ne.prop]=ne.pipe?ne.pipe.transform(Lt($e)):Lt($e)})}getSummaryFunction(ne){return void 0===ne.summaryFunc?bo:null===ne.summaryFunc?Ls:ne.summaryFunc}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275cmp=r.Xpm({type:tt,selectors:[["datatable-summary-row"]],hostAttrs:[1,"datatable-summary-row"],inputs:{rows:"rows",columns:"columns",rowHeight:"rowHeight",offsetX:"offsetX",innerWidth:"innerWidth"},features:[r.TTD],decls:1,vars:1,consts:[["tabindex","-1",3,"innerWidth","offsetX","columns","rowHeight","row","rowIndex",4,"ngIf"],["tabindex","-1",3,"innerWidth","offsetX","columns","rowHeight","row","rowIndex"]],template:function(ne,$e){1&ne&&r.YNc(0,Zr,1,6,"datatable-body-row",0),2&ne&&r.Q6J("ngIf",$e.summaryRow&&$e._internalColumns)},directives:[u.O5,fs],encapsulation:2}),tt})(),So=(()=>{class tt{static forRoot(ne){return{ngModule:tt,providers:[{provide:"configuration",useValue:ne}]}}}return tt.\u0275fac=function(ne){return new(ne||tt)},tt.\u0275mod=r.oAB({type:tt}),tt.\u0275inj=r.cJS({providers:[Cn,Wt,zn],imports:[[u.ez]]}),tt})();"undefined"!=typeof document&&!document.elementsFromPoint&&(document.elementsFromPoint=function(tt,sn){const ne=[],$e=[];let Lt,an,ti;for(;(Lt=document.elementFromPoint(tt,sn))&&-1===ne.indexOf(Lt)&&null!=Lt;)ne.push(Lt),$e.push({value:Lt.style.getPropertyValue("pointer-events"),priority:Lt.style.getPropertyPriority("pointer-events")}),Lt.style.setProperty("pointer-events","none","important");for(an=$e.length;ti=$e[--an];)ne[an].style.setProperty("pointer-events",ti.value?ti.value:"",ti.priority);return ne})},67506:v=>{"use strict";function T(u,p,d){u instanceof RegExp&&(u=i(u,d)),p instanceof RegExp&&(p=i(p,d));var e=r(u,p,d);return e&&{start:e[0],end:e[1],pre:d.slice(0,e[0]),body:d.slice(e[0]+u.length,e[1]),post:d.slice(e[1]+p.length)}}function i(u,p){var d=p.match(u);return d?d[0]:null}function r(u,p,d){var e,_,y,S,A,N=d.indexOf(u),L=d.indexOf(p,N+1),Z=N;if(N>=0&&L>0){if(u===p)return[N,L];for(e=[],y=d.length;Z>=0&&!A;)Z==N?(e.push(Z),N=d.indexOf(u,Z+1)):1==e.length?A=[e.pop(),L]:((_=e.pop())=0?N:L;e.length&&(A=[y,S])}return A}v.exports=T,T.range=r},96434:(v,T)=>{"use strict";T.byteLength=function(J){var K=_(J),ue=K[1];return 3*(K[0]+ue)/4-ue},T.toByteArray=function(J){var K,ie,ee=_(J),ue=ee[0],ae=ee[1],H=new u(function(J,K,ee){return 3*(K+ee)/4-ee}(0,ue,ae)),se=0,Ee=ae>0?ue-4:ue;for(ie=0;ie>16&255,H[se++]=K>>8&255,H[se++]=255&K;return 2===ae&&(K=r[J.charCodeAt(ie)]<<2|r[J.charCodeAt(ie+1)]>>4,H[se++]=255&K),1===ae&&(K=r[J.charCodeAt(ie)]<<10|r[J.charCodeAt(ie+1)]<<4|r[J.charCodeAt(ie+2)]>>2,H[se++]=K>>8&255,H[se++]=255&K),H},T.fromByteArray=function(J){for(var K,ee=J.length,ue=ee%3,ae=[],H=16383,se=0,Ee=ee-ue;seEe?Ee:se+H));return 1===ue?ae.push(i[(K=J[ee-1])>>2]+i[K<<4&63]+"=="):2===ue&&ae.push(i[(K=(J[ee-2]<<8)+J[ee-1])>>10]+i[K>>4&63]+i[K<<2&63]+"="),ae.join("")};for(var i=[],r=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,e=p.length;d0)throw new Error("Invalid string. Length must be a multiple of 4");var ee=J.indexOf("=");return-1===ee&&(ee=K),[ee,ee===K?0:4-ee%4]}function N(J){return i[J>>18&63]+i[J>>12&63]+i[J>>6&63]+i[63&J]}function L(J,K,ee){for(var ae=[],H=K;H{var r=i(2665),u=i(67506);v.exports=function(se){return se?("{}"===se.substr(0,2)&&(se="\\{\\}"+se.substr(2)),H(function(se){return se.split("\\\\").join(p).split("\\{").join(d).split("\\}").join(e).split("\\,").join(_).split("\\.").join(y)}(se),!0).map(N)):[]};var p="\0SLASH"+Math.random()+"\0",d="\0OPEN"+Math.random()+"\0",e="\0CLOSE"+Math.random()+"\0",_="\0COMMA"+Math.random()+"\0",y="\0PERIOD"+Math.random()+"\0";function S(se){return parseInt(se,10)==se?parseInt(se,10):se.charCodeAt(0)}function N(se){return se.split(p).join("\\").split(d).join("{").split(e).join("}").split(_).join(",").split(y).join(".")}function L(se){if(!se)return[""];var Ee=[],ie=u("{","}",se);if(!ie)return se.split(",");var ge=ie.body,De=ie.post,ce=ie.pre.split(",");ce[ce.length-1]+="{"+ge+"}";var lt=L(De);return De.length&&(ce[ce.length-1]+=lt.shift(),ce.push.apply(ce,lt)),Ee.push.apply(Ee,ce),Ee}function K(se){return"{"+se+"}"}function ee(se){return/^-?0\d/.test(se)}function ue(se,Ee){return se<=Ee}function ae(se,Ee){return se>=Ee}function H(se,Ee){var ie=[],he=u("{","}",se);if(!he||/\$$/.test(he.pre))return[se];var Ve,ge=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(he.body),De=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(he.body),ce=ge||De,lt=he.body.indexOf(",")>=0;if(!ce&&!lt)return he.post.match(/,.*\}/)?H(se=he.pre+"{"+he.body+e+he.post):[se];if(ce)Ve=he.body.split(/\.\./);else if(1===(Ve=L(he.body)).length&&1===(Ve=H(Ve[0],!1).map(K)).length)return(Be=he.post.length?H(he.post,!1):[""]).map(function(di){return he.pre+Ve[0]+di});var Pe,ze=he.pre,Be=he.post.length?H(he.post,!1):[""];if(ce){var je=S(Ve[0]),He=S(Ve[1]),Vt=Math.max(Ve[0].length,Ve[1].length),it=3==Ve.length?Math.abs(S(Ve[2])):1,tn=ue;He0){var Gt=new Array(bt+1).join("0");Bt=Ut<0?"-"+Gt+Bt.slice(1):Gt+Bt}}Pe.push(Bt)}}else Pe=r(Ve,function(Ur){return H(Ur,!1)});for(var xt=0;xt{"use strict";var r=i(18540),u=i(60044),p=u(r("String.prototype.indexOf"));v.exports=function(e,_){var y=r(e,!!_);return"function"==typeof y&&p(e,".prototype.")>-1?u(y):y}},60044:(v,T,i)=>{"use strict";var r=i(75396),u=i(18540),p=u("%Function.prototype.apply%"),d=u("%Function.prototype.call%"),e=u("%Reflect.apply%",!0)||r.call(d,p),_=u("%Object.getOwnPropertyDescriptor%",!0),y=u("%Object.defineProperty%",!0),S=u("%Math.max%");if(y)try{y({},"a",{value:1})}catch(N){y=null}v.exports=function(L){var Z=e(r,d,arguments);if(_&&y){var J=_(Z,"length");J.configurable&&y(Z,"length",{value:1+S(0,L.length-(arguments.length-1))})}return Z};var A=function(){return e(r,p,arguments)};y?y(v.exports,"apply",{value:A}):v.exports.apply=A},72318:v=>{var T=!("undefined"==typeof window||!window.document||!window.document.createElement);v.exports=T},6823:function(v,T,i){v.exports=function(r){"use strict";r=r&&r.hasOwnProperty("default")?r.default:r;var d={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},e=function(h,E){return h(E={exports:{}},E.exports),E.exports}(function(h){var E={};for(var R in d)d.hasOwnProperty(R)&&(E[d[R]]=R);var F=h.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var q in F)if(F.hasOwnProperty(q)){if(!("channels"in F[q]))throw new Error("missing channels property: "+q);if(!("labels"in F[q]))throw new Error("missing channel labels property: "+q);if(F[q].labels.length!==F[q].channels)throw new Error("channel and label counts mismatch: "+q);var de=F[q].channels,ye=F[q].labels;delete F[q].channels,delete F[q].labels,Object.defineProperty(F[q],"channels",{value:de}),Object.defineProperty(F[q],"labels",{value:ye})}function Ue(Oe,Xe){return Math.pow(Oe[0]-Xe[0],2)+Math.pow(Oe[1]-Xe[1],2)+Math.pow(Oe[2]-Xe[2],2)}F.rgb.hsl=function(Oe){var ir,Pi,Xe=Oe[0]/255,gt=Oe[1]/255,yt=Oe[2]/255,nn=Math.min(Xe,gt,yt),Pn=Math.max(Xe,gt,yt),xn=Pn-nn;return Pn===nn?ir=0:Xe===Pn?ir=(gt-yt)/xn:gt===Pn?ir=2+(yt-Xe)/xn:yt===Pn&&(ir=4+(Xe-gt)/xn),(ir=Math.min(60*ir,360))<0&&(ir+=360),Pi=(nn+Pn)/2,[ir,100*(Pn===nn?0:Pi<=.5?xn/(Pn+nn):xn/(2-Pn-nn)),100*Pi]},F.rgb.hsv=function(Oe){var Xe,gt,yt,nn,Pn,xn=Oe[0]/255,ir=Oe[1]/255,Gr=Oe[2]/255,Pi=Math.max(xn,ir,Gr),Zo=Pi-Math.min(xn,ir,Gr),Lo=function(Gs){return(Pi-Gs)/6/Zo+.5};return 0===Zo?nn=Pn=0:(Pn=Zo/Pi,Xe=Lo(xn),gt=Lo(ir),yt=Lo(Gr),xn===Pi?nn=yt-gt:ir===Pi?nn=1/3+Xe-yt:Gr===Pi&&(nn=2/3+gt-Xe),nn<0?nn+=1:nn>1&&(nn-=1)),[360*nn,100*Pn,100*Pi]},F.rgb.hwb=function(Oe){var Xe=Oe[0],gt=Oe[1],yt=Oe[2];return[F.rgb.hsl(Oe)[0],1/255*Math.min(Xe,Math.min(gt,yt))*100,100*(yt=1-1/255*Math.max(Xe,Math.max(gt,yt)))]},F.rgb.cmyk=function(Oe){var ir,Xe=Oe[0]/255,gt=Oe[1]/255,yt=Oe[2]/255;return[100*((1-Xe-(ir=Math.min(1-Xe,1-gt,1-yt)))/(1-ir)||0),100*((1-gt-ir)/(1-ir)||0),100*((1-yt-ir)/(1-ir)||0),100*ir]},F.rgb.keyword=function(Oe){var Xe=E[Oe];if(Xe)return Xe;var yt,gt=1/0;for(var nn in d)if(d.hasOwnProperty(nn)){var xn=Ue(Oe,d[nn]);xn.04045?Math.pow((Xe+.055)/1.055,2.4):Xe/12.92)+.3576*(gt=gt>.04045?Math.pow((gt+.055)/1.055,2.4):gt/12.92)+.1805*(yt=yt>.04045?Math.pow((yt+.055)/1.055,2.4):yt/12.92)),100*(.2126*Xe+.7152*gt+.0722*yt),100*(.0193*Xe+.1192*gt+.9505*yt)]},F.rgb.lab=function(Oe){var Xe=F.rgb.xyz(Oe),gt=Xe[0],yt=Xe[1],nn=Xe[2];return yt/=100,nn/=108.883,gt=(gt/=95.047)>.008856?Math.pow(gt,1/3):7.787*gt+16/116,[116*(yt=yt>.008856?Math.pow(yt,1/3):7.787*yt+16/116)-16,500*(gt-yt),200*(yt-(nn=nn>.008856?Math.pow(nn,1/3):7.787*nn+16/116))]},F.hsl.rgb=function(Oe){var nn,Pn,xn,ir,Gr,Xe=Oe[0]/360,gt=Oe[1]/100,yt=Oe[2]/100;if(0===gt)return[Gr=255*yt,Gr,Gr];nn=2*yt-(Pn=yt<.5?yt*(1+gt):yt+gt-yt*gt),ir=[0,0,0];for(var Pi=0;Pi<3;Pi++)(xn=Xe+1/3*-(Pi-1))<0&&xn++,xn>1&&xn--,ir[Pi]=255*(Gr=6*xn<1?nn+6*(Pn-nn)*xn:2*xn<1?Pn:3*xn<2?nn+(Pn-nn)*(2/3-xn)*6:nn);return ir},F.hsl.hsv=function(Oe){var Xe=Oe[0],gt=Oe[1]/100,yt=Oe[2]/100,nn=gt,Pn=Math.max(yt,.01);return gt*=(yt*=2)<=1?yt:2-yt,nn*=Pn<=1?Pn:2-Pn,[Xe,100*(0===yt?2*nn/(Pn+nn):2*gt/(yt+gt)),(yt+gt)/2*100]},F.hsv.rgb=function(Oe){var Xe=Oe[0]/60,gt=Oe[1]/100,yt=Oe[2]/100,nn=Math.floor(Xe)%6,Pn=Xe-Math.floor(Xe),xn=255*yt*(1-gt),ir=255*yt*(1-gt*Pn),Gr=255*yt*(1-gt*(1-Pn));switch(yt*=255,nn){case 0:return[yt,Gr,xn];case 1:return[ir,yt,xn];case 2:return[xn,yt,Gr];case 3:return[xn,ir,yt];case 4:return[Gr,xn,yt];case 5:return[yt,xn,ir]}},F.hsv.hsl=function(Oe){var Pn,xn,ir,Xe=Oe[0],gt=Oe[1]/100,yt=Oe[2]/100,nn=Math.max(yt,.01);return ir=(2-gt)*yt,xn=gt*nn,[Xe,100*(xn=(xn/=(Pn=(2-gt)*nn)<=1?Pn:2-Pn)||0),100*(ir/=2)]},F.hwb.rgb=function(Oe){var Pn,xn,ir,Gr,Pi,Zo,Lo,Xe=Oe[0]/360,gt=Oe[1]/100,yt=Oe[2]/100,nn=gt+yt;switch(nn>1&&(gt/=nn,yt/=nn),ir=6*Xe-(Pn=Math.floor(6*Xe)),0!=(1&Pn)&&(ir=1-ir),Gr=gt+ir*((xn=1-yt)-gt),Pn){default:case 6:case 0:Pi=xn,Zo=Gr,Lo=gt;break;case 1:Pi=Gr,Zo=xn,Lo=gt;break;case 2:Pi=gt,Zo=xn,Lo=Gr;break;case 3:Pi=gt,Zo=Gr,Lo=xn;break;case 4:Pi=Gr,Zo=gt,Lo=xn;break;case 5:Pi=xn,Zo=gt,Lo=Gr}return[255*Pi,255*Zo,255*Lo]},F.cmyk.rgb=function(Oe){var gt=Oe[1]/100,yt=Oe[2]/100,nn=Oe[3]/100;return[255*(1-Math.min(1,Oe[0]/100*(1-nn)+nn)),255*(1-Math.min(1,gt*(1-nn)+nn)),255*(1-Math.min(1,yt*(1-nn)+nn))]},F.xyz.rgb=function(Oe){var nn,Pn,xn,Xe=Oe[0]/100,gt=Oe[1]/100,yt=Oe[2]/100;return Pn=-.9689*Xe+1.8758*gt+.0415*yt,xn=.0557*Xe+-.204*gt+1.057*yt,nn=(nn=3.2406*Xe+-1.5372*gt+-.4986*yt)>.0031308?1.055*Math.pow(nn,1/2.4)-.055:12.92*nn,Pn=Pn>.0031308?1.055*Math.pow(Pn,1/2.4)-.055:12.92*Pn,xn=xn>.0031308?1.055*Math.pow(xn,1/2.4)-.055:12.92*xn,[255*(nn=Math.min(Math.max(0,nn),1)),255*(Pn=Math.min(Math.max(0,Pn),1)),255*(xn=Math.min(Math.max(0,xn),1))]},F.xyz.lab=function(Oe){var Xe=Oe[0],gt=Oe[1],yt=Oe[2];return gt/=100,yt/=108.883,Xe=(Xe/=95.047)>.008856?Math.pow(Xe,1/3):7.787*Xe+16/116,[116*(gt=gt>.008856?Math.pow(gt,1/3):7.787*gt+16/116)-16,500*(Xe-gt),200*(gt-(yt=yt>.008856?Math.pow(yt,1/3):7.787*yt+16/116))]},F.lab.xyz=function(Oe){var nn,Pn,xn;nn=Oe[1]/500+(Pn=(Oe[0]+16)/116),xn=Pn-Oe[2]/200;var ir=Math.pow(Pn,3),Gr=Math.pow(nn,3),Pi=Math.pow(xn,3);return Pn=ir>.008856?ir:(Pn-16/116)/7.787,nn=Gr>.008856?Gr:(nn-16/116)/7.787,xn=Pi>.008856?Pi:(xn-16/116)/7.787,[nn*=95.047,Pn*=100,xn*=108.883]},F.lab.lch=function(Oe){var Pn,Xe=Oe[0],gt=Oe[1],yt=Oe[2];return(Pn=360*Math.atan2(yt,gt)/2/Math.PI)<0&&(Pn+=360),[Xe,Math.sqrt(gt*gt+yt*yt),Pn]},F.lch.lab=function(Oe){var xn,gt=Oe[1];return xn=Oe[2]/360*2*Math.PI,[Oe[0],gt*Math.cos(xn),gt*Math.sin(xn)]},F.rgb.ansi16=function(Oe){var Xe=Oe[0],gt=Oe[1],yt=Oe[2],nn=1 in arguments?arguments[1]:F.rgb.hsv(Oe)[2];if(0===(nn=Math.round(nn/50)))return 30;var Pn=30+(Math.round(yt/255)<<2|Math.round(gt/255)<<1|Math.round(Xe/255));return 2===nn&&(Pn+=60),Pn},F.hsv.ansi16=function(Oe){return F.rgb.ansi16(F.hsv.rgb(Oe),Oe[2])},F.rgb.ansi256=function(Oe){var Xe=Oe[0],gt=Oe[1],yt=Oe[2];return Xe===gt&>===yt?Xe<8?16:Xe>248?231:Math.round((Xe-8)/247*24)+232:16+36*Math.round(Xe/255*5)+6*Math.round(gt/255*5)+Math.round(yt/255*5)},F.ansi16.rgb=function(Oe){var Xe=Oe%10;if(0===Xe||7===Xe)return Oe>50&&(Xe+=3.5),[Xe=Xe/10.5*255,Xe,Xe];var gt=.5*(1+~~(Oe>50));return[(1&Xe)*gt*255,(Xe>>1&1)*gt*255,(Xe>>2&1)*gt*255]},F.ansi256.rgb=function(Oe){if(Oe>=232){var Xe=10*(Oe-232)+8;return[Xe,Xe,Xe]}var gt;return Oe-=16,[Math.floor(Oe/36)/5*255,Math.floor((gt=Oe%36)/6)/5*255,gt%6/5*255]},F.rgb.hex=function(Oe){var gt=(((255&Math.round(Oe[0]))<<16)+((255&Math.round(Oe[1]))<<8)+(255&Math.round(Oe[2]))).toString(16).toUpperCase();return"000000".substring(gt.length)+gt},F.hex.rgb=function(Oe){var Xe=Oe.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!Xe)return[0,0,0];var gt=Xe[0];3===Xe[0].length&&(gt=gt.split("").map(function(ir){return ir+ir}).join(""));var yt=parseInt(gt,16);return[yt>>16&255,yt>>8&255,255&yt]},F.rgb.hcg=function(Oe){var Gr,Xe=Oe[0]/255,gt=Oe[1]/255,yt=Oe[2]/255,nn=Math.max(Math.max(Xe,gt),yt),Pn=Math.min(Math.min(Xe,gt),yt),xn=nn-Pn;return Gr=xn<=0?0:nn===Xe?(gt-yt)/xn%6:nn===gt?2+(yt-Xe)/xn:4+(Xe-gt)/xn+4,Gr/=6,[360*(Gr%=1),100*xn,100*(xn<1?Pn/(1-xn):0)]},F.hsl.hcg=function(Oe){var yt,Xe=Oe[1]/100,gt=Oe[2]/100,nn=0;return(yt=gt<.5?2*Xe*gt:2*Xe*(1-gt))<1&&(nn=(gt-.5*yt)/(1-yt)),[Oe[0],100*yt,100*nn]},F.hsv.hcg=function(Oe){var gt=Oe[2]/100,yt=Oe[1]/100*gt,nn=0;return yt<1&&(nn=(gt-yt)/(1-yt)),[Oe[0],100*yt,100*nn]},F.hcg.rgb=function(Oe){var gt=Oe[1]/100,yt=Oe[2]/100;if(0===gt)return[255*yt,255*yt,255*yt];var Gr,nn=[0,0,0],Pn=Oe[0]/360%1*6,xn=Pn%1,ir=1-xn;switch(Math.floor(Pn)){case 0:nn[0]=1,nn[1]=xn,nn[2]=0;break;case 1:nn[0]=ir,nn[1]=1,nn[2]=0;break;case 2:nn[0]=0,nn[1]=1,nn[2]=xn;break;case 3:nn[0]=0,nn[1]=ir,nn[2]=1;break;case 4:nn[0]=xn,nn[1]=0,nn[2]=1;break;default:nn[0]=1,nn[1]=0,nn[2]=ir}return[255*(gt*nn[0]+(Gr=(1-gt)*yt)),255*(gt*nn[1]+Gr),255*(gt*nn[2]+Gr)]},F.hcg.hsv=function(Oe){var Xe=Oe[1]/100,yt=Xe+Oe[2]/100*(1-Xe),nn=0;return yt>0&&(nn=Xe/yt),[Oe[0],100*nn,100*yt]},F.hcg.hsl=function(Oe){var Xe=Oe[1]/100,yt=Oe[2]/100*(1-Xe)+.5*Xe,nn=0;return yt>0&&yt<.5?nn=Xe/(2*yt):yt>=.5&&yt<1&&(nn=Xe/(2*(1-yt))),[Oe[0],100*nn,100*yt]},F.hcg.hwb=function(Oe){var Xe=Oe[1]/100,yt=Xe+Oe[2]/100*(1-Xe);return[Oe[0],100*(yt-Xe),100*(1-yt)]},F.hwb.hcg=function(Oe){var yt=1-Oe[2]/100,nn=yt-Oe[1]/100,Pn=0;return nn<1&&(Pn=(yt-nn)/(1-nn)),[Oe[0],100*nn,100*Pn]},F.apple.rgb=function(Oe){return[Oe[0]/65535*255,Oe[1]/65535*255,Oe[2]/65535*255]},F.rgb.apple=function(Oe){return[Oe[0]/255*65535,Oe[1]/255*65535,Oe[2]/255*65535]},F.gray.rgb=function(Oe){return[Oe[0]/100*255,Oe[0]/100*255,Oe[0]/100*255]},F.gray.hsl=F.gray.hsv=function(Oe){return[0,0,Oe[0]]},F.gray.hwb=function(Oe){return[0,100,Oe[0]]},F.gray.cmyk=function(Oe){return[0,0,0,Oe[0]]},F.gray.lab=function(Oe){return[Oe[0],0,0]},F.gray.hex=function(Oe){var Xe=255&Math.round(Oe[0]/100*255),yt=((Xe<<16)+(Xe<<8)+Xe).toString(16).toUpperCase();return"000000".substring(yt.length)+yt},F.rgb.gray=function(Oe){return[(Oe[0]+Oe[1]+Oe[2])/3/255*100]}});function he(h){var E=function(){for(var h={},E=Object.keys(e),R=E.length,F=0;F1&&(R=Array.prototype.slice.call(arguments));var F=h(R);if("object"==typeof F)for(var q=F.length,de=0;de1&&(R=Array.prototype.slice.call(arguments)),h(R))};return"conversion"in h&&(E.conversion=h.conversion),E}(q)})});var Pe=lt,je={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},He={getRgba:Vt,getHsla:it,getRgb:function(h){var E=Vt(h);return E&&E.slice(0,3)},getHsl:function(h){var E=it(h);return E&&E.slice(0,3)},getHwb:tn,getAlpha:function(h){var E=Vt(h);return E||(E=it(h))||(E=tn(h))?E[3]:void 0},hexString:function(h,E){return E=void 0!==E&&3===h.length?E:h[3],"#"+Kr(h[0])+Kr(h[1])+Kr(h[2])+(E>=0&&E<1?Kr(Math.round(255*E)):"")},rgbString:function(h,E){return E<1||h[3]&&h[3]<1?Gt(h,E):"rgb("+h[0]+", "+h[1]+", "+h[2]+")"},rgbaString:Gt,percentString:function(h,E){return E<1||h[3]&&h[3]<1?Xt(h,E):"rgb("+Math.round(h[0]/255*100)+"%, "+Math.round(h[1]/255*100)+"%, "+Math.round(h[2]/255*100)+"%)"},percentaString:Xt,hslString:function(h,E){return E<1||h[3]&&h[3]<1?Ur(h,E):"hsl("+h[0]+", "+h[1]+"%, "+h[2]+"%)"},hslaString:Ur,hwbString:function(h,E){return void 0===E&&(E=void 0!==h[3]?h[3]:1),"hwb("+h[0]+", "+h[1]+"%, "+h[2]+"%"+(void 0!==E&&1!==E?", "+E:"")+")"},keyword:function(h){return ei[h.slice(0,3)]}};function Vt(h){if(h){var ye=[0,0,0],Ue=1,Oe=h.match(/^#([a-fA-F0-9]{3,4})$/i),Xe="";if(Oe){Xe=(Oe=Oe[1])[3];for(var gt=0;gtR?(E+.05)/(R+.05):(R+.05)/(E+.05)},level:function(h){var E=this.contrast(h);return E>=7.1?"AAA":E>=4.5?"AA":""},dark:function(){var h=this.values.rgb;return(299*h[0]+587*h[1]+114*h[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var h=[],E=0;E<3;E++)h[E]=255-this.values.rgb[E];return this.setValues("rgb",h),this},lighten:function(h){var E=this.values.hsl;return E[2]+=E[2]*h,this.setValues("hsl",E),this},darken:function(h){var E=this.values.hsl;return E[2]-=E[2]*h,this.setValues("hsl",E),this},saturate:function(h){var E=this.values.hsl;return E[1]+=E[1]*h,this.setValues("hsl",E),this},desaturate:function(h){var E=this.values.hsl;return E[1]-=E[1]*h,this.setValues("hsl",E),this},whiten:function(h){var E=this.values.hwb;return E[1]+=E[1]*h,this.setValues("hwb",E),this},blacken:function(h){var E=this.values.hwb;return E[2]+=E[2]*h,this.setValues("hwb",E),this},greyscale:function(){var h=this.values.rgb,E=.3*h[0]+.59*h[1]+.11*h[2];return this.setValues("rgb",[E,E,E]),this},clearer:function(h){var E=this.values.alpha;return this.setValues("alpha",E-E*h),this},opaquer:function(h){var E=this.values.alpha;return this.setValues("alpha",E+E*h),this},rotate:function(h){var E=this.values.hsl,R=(E[0]+h)%360;return E[0]=R<0?360+R:R,this.setValues("hsl",E),this},mix:function(h,E){var R=this,F=h,q=void 0===E?.5:E,de=2*q-1,ye=R.alpha()-F.alpha(),Ue=((de*ye==-1?de:(de+ye)/(1+de*ye))+1)/2,Oe=1-Ue;return this.rgb(Ue*R.red()+Oe*F.red(),Ue*R.green()+Oe*F.green(),Ue*R.blue()+Oe*F.blue()).alpha(R.alpha()*q+F.alpha()*(1-q))},toJSON:function(){return this.rgb()},clone:function(){var F,q,h=new $n,E=this.values,R=h.values;for(var de in E)E.hasOwnProperty(de)&&("[object Array]"===(q={}.toString.call(F=E[de]))?R[de]=F.slice(0):"[object Number]"===q?R[de]=F:console.error("unexpected color value:",F));return h}},$n.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},$n.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},$n.prototype.getValues=function(h){for(var E=this.values,R={},F=0;F=0;q--)E.call(R,h[q],q);else for(q=0;q=1?h:-(Math.sqrt(1-h*h)-1)},easeOutCirc:function(h){return Math.sqrt(1-(h-=1)*h)},easeInOutCirc:function(h){return(h/=.5)<1?-.5*(Math.sqrt(1-h*h)-1):.5*(Math.sqrt(1-(h-=2)*h)+1)},easeInElastic:function(h){var E=1.70158,R=0,F=1;return 0===h?0:1===h?1:(R||(R=.3),F<1?(F=1,E=R/4):E=R/(2*Math.PI)*Math.asin(1/F),-F*Math.pow(2,10*(h-=1))*Math.sin((h-E)*(2*Math.PI)/R))},easeOutElastic:function(h){var E=1.70158,R=0,F=1;return 0===h?0:1===h?1:(R||(R=.3),F<1?(F=1,E=R/4):E=R/(2*Math.PI)*Math.asin(1/F),F*Math.pow(2,-10*h)*Math.sin((h-E)*(2*Math.PI)/R)+1)},easeInOutElastic:function(h){var E=1.70158,R=0,F=1;return 0===h?0:2==(h/=.5)?1:(R||(R=.45),F<1?(F=1,E=R/4):E=R/(2*Math.PI)*Math.asin(1/F),h<1?F*Math.pow(2,10*(h-=1))*Math.sin((h-E)*(2*Math.PI)/R)*-.5:F*Math.pow(2,-10*(h-=1))*Math.sin((h-E)*(2*Math.PI)/R)*.5+1)},easeInBack:function(h){var E=1.70158;return h*h*((E+1)*h-E)},easeOutBack:function(h){var E=1.70158;return(h-=1)*h*((E+1)*h+E)+1},easeInOutBack:function(h){var E=1.70158;return(h/=.5)<1?h*h*((1+(E*=1.525))*h-E)*.5:.5*((h-=2)*h*((1+(E*=1.525))*h+E)+2)},easeInBounce:function(h){return 1-Hi.easeOutBounce(1-h)},easeOutBounce:function(h){return h<1/2.75?7.5625*h*h:h<2/2.75?7.5625*(h-=1.5/2.75)*h+.75:h<2.5/2.75?7.5625*(h-=2.25/2.75)*h+.9375:7.5625*(h-=2.625/2.75)*h+.984375},easeInOutBounce:function(h){return h<.5?.5*Hi.easeInBounce(2*h):.5*Hi.easeOutBounce(2*h-1)+.5}},Zr={effects:Hi};ki.easingEffects=Hi;var Cn=Math.PI,Wt=Cn/180,zn=2*Cn,rr=Cn/2,Fr=Cn/4,Gn=2*Cn/3,Jr={clear:function(h){h.ctx.clearRect(0,0,h.width,h.height)},roundedRect:function(h,E,R,F,q,de){if(de){var ye=Math.min(de,q/2,F/2),Ue=E+ye,Oe=R+ye,Xe=E+F-ye,gt=R+q-ye;h.moveTo(E,Oe),UeE.left-R&&h.xE.top-R&&h.y0&&h.requestAnimationFrame()},advance:function(){for(var E,R,F,q,h=this.animations,de=0;de=F?(Ge.callback(E.onAnimationComplete,[E],R),R.animating=!1,h.splice(de,1)):++de}},Co=Ge.options.resolve,Gi=["push","pop","shift","splice","unshift"];function jo(h,E){var R=h._chartjs;if(R){var F=R.listeners,q=F.indexOf(E);-1!==q&&F.splice(q,1),!(F.length>0)&&(Gi.forEach(function(de){delete h[de]}),delete h._chartjs)}}var To=function(h,E){this.initialize(h,E)};Ge.extend(To.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(h,E){var R=this;R.chart=h,R.index=E,R.linkScales(),R.addElements(),R._type=R.getMeta().type},updateIndex:function(h){this.index=h},linkScales:function(){var h=this,E=h.getMeta(),R=h.chart,F=R.scales,q=h.getDataset(),de=R.options.scales;(null===E.xAxisID||!(E.xAxisID in F)||q.xAxisID)&&(E.xAxisID=q.xAxisID||de.xAxes[0].id),(null===E.yAxisID||!(E.yAxisID in F)||q.yAxisID)&&(E.yAxisID=q.yAxisID||de.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(h){return this.chart.scales[h]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&jo(this._data,this)},createMetaDataset:function(){var h=this,E=h.datasetElementType;return E&&new E({_chart:h.chart,_datasetIndex:h.index})},createMetaData:function(h){var E=this,R=E.dataElementType;return R&&new R({_chart:E.chart,_datasetIndex:E.index,_index:h})},addElements:function(){var q,de,h=this,E=h.getMeta(),R=h.getDataset().data||[],F=E.data;for(q=0,de=R.length;qF&&h.insertElements(F,q-F)},insertElements:function(h,E){for(var R=0;Rq?h.arc(ye,Ue,E.innerRadius-q,F+(de=q/E.innerRadius),R-de,!0):h.arc(ye,Ue,q,F+Math.PI/2,R-Math.PI/2),h.closePath(),h.clip()}function vr(h,E,R){var F="inner"===E.borderAlign;F?(h.lineWidth=2*E.borderWidth,h.lineJoin="round"):(h.lineWidth=E.borderWidth,h.lineJoin="bevel"),R.fullCircles&&function(h,E,R,F){var de,q=R.endAngle;for(F&&(R.endAngle=R.startAngle+li,Bn(h,R),R.endAngle=q,R.endAngle===R.startAngle&&R.fullCircles&&(R.endAngle+=li,R.fullCircles--)),h.beginPath(),h.arc(R.x,R.y,R.innerRadius,R.startAngle+li,R.startAngle,!0),de=0;deUe;)q-=li;for(;q=ye&&q<=Ue&&de>=R.innerRadius&&de<=R.outerRadius}return!1},getCenterPoint:function(){var h=this._view,E=(h.startAngle+h.endAngle)/2,R=(h.innerRadius+h.outerRadius)/2;return{x:h.x+Math.cos(E)*R,y:h.y+Math.sin(E)*R}},getArea:function(){var h=this._view;return Math.PI*((h.endAngle-h.startAngle)/(2*Math.PI))*(Math.pow(h.outerRadius,2)-Math.pow(h.innerRadius,2))},tooltipPosition:function(){var h=this._view,E=h.startAngle+(h.endAngle-h.startAngle)/2,R=(h.outerRadius-h.innerRadius)/2+h.innerRadius;return{x:h.x+Math.cos(E)*R,y:h.y+Math.sin(E)*R}},draw:function(){var q,h=this._chart.ctx,E=this._view,R="inner"===E.borderAlign?.33:0,F={x:E.x,y:E.y,innerRadius:E.innerRadius,outerRadius:Math.max(E.outerRadius-R,0),pixelMargin:R,startAngle:E.startAngle,endAngle:E.endAngle,fullCircles:Math.floor(E.circumference/li)};if(h.save(),h.fillStyle=E.backgroundColor,h.strokeStyle=E.borderColor,F.fullCircles){for(F.endAngle=F.startAngle+li,h.beginPath(),h.arc(F.x,F.y,F.outerRadius,F.startAngle,F.endAngle),h.arc(F.x,F.y,F.innerRadius,F.endAngle,F.startAngle,!0),h.closePath(),q=0;qh.x&&(E=si(E,"left","right")):h.baseR?R:de,r:q.right||ye<0?0:ye>E?E:ye,b:q.bottom||Ue<0?0:Ue>R?R:Ue,l:q.left||Oe<0?0:Oe>E?E:Oe}}function Es(h,E,R){var F=null===E,q=null===R,de=!(!h||F&&q)&&on(h);return de&&(F||E>=de.left&&E<=de.right)&&(q||R>=de.top&&R<=de.bottom)}br._set("global",{elements:{rectangle:{backgroundColor:mt,borderColor:mt,borderSkipped:"bottom",borderWidth:0}}});var Zs=ar.extend({_type:"rectangle",draw:function(){var h=this._chart.ctx,E=this._view,R=function(h){var E=on(h),R=E.right-E.left,F=E.bottom-E.top,q=_o(h,R/2,F/2);return{outer:{x:E.left,y:E.top,w:R,h:F},inner:{x:E.left+q.l,y:E.top+q.t,w:R-q.l-q.r,h:F-q.t-q.b}}}(E),F=R.outer,q=R.inner;h.fillStyle=E.backgroundColor,h.fillRect(F.x,F.y,F.w,F.h),(F.w!==q.w||F.h!==q.h)&&(h.save(),h.beginPath(),h.rect(F.x,F.y,F.w,F.h),h.clip(),h.fillStyle=E.borderColor,h.rect(q.x,q.y,q.w,q.h),h.fill("evenodd"),h.restore())},height:function(){var h=this._view;return h.base-h.y},inRange:function(h,E){return Es(this._view,h,E)},inLabelRange:function(h,E){var R=this._view;return jt(R)?Es(R,h,null):Es(R,null,E)},inXRange:function(h){return Es(this._view,h,null)},inYRange:function(h){return Es(this._view,null,h)},getCenterPoint:function(){var E,R,h=this._view;return jt(h)?(E=h.x,R=(h.y+h.base)/2):(E=(h.x+h.base)/2,R=h.y),{x:E,y:R}},getArea:function(){var h=this._view;return jt(h)?h.width*Math.abs(h.y-h.base):h.height*Math.abs(h.x-h.base)},tooltipPosition:function(){var h=this._view;return{x:h.x,y:h.y}}}),ls={},ta=Ci,Is=_t,us=Zs;ls.Arc=er,ls.Line=ta,ls.Point=Is,ls.Rectangle=us;var ya=Ge._deprecated,el=Ge.valueOrDefault;function $s(h,E,R){var Ue,Oe,F=R.barThickness,q=E.stackCount,de=E.pixels[h],ye=Ge.isNullOrUndef(F)?function(h,E){var F,q,de,ye,R=h._length;for(de=1,ye=E.length;de0?Math.min(R,Math.abs(q-F)):R,F=q;return R}(E.scale,E.pixels):-1;return Ge.isNullOrUndef(F)?(Ue=ye*R.categoryPercentage,Oe=R.barPercentage):(Ue=F*q,Oe=1),{chunk:Ue/q,ratio:Oe,start:de-Ue/2}}br._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),br._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Il=Mi.extend({dataElementType:ls.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var E,R,h=this;Mi.prototype.initialize.apply(h,arguments),(E=h.getMeta()).stack=h.getDataset().stack,E.bar=!0,R=h._getIndexScale().options,ya("bar chart",R.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),ya("bar chart",R.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),ya("bar chart",R.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),ya("bar chart",h._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),ya("bar chart",R.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(h){var F,q,E=this,R=E.getMeta().data;for(E._ruler=E.getRuler(),F=0,q=R.length;F=0&&Xe.min>=0?Xe.min:Xe.max,xn=void 0===Xe.start?Xe.end:Xe.max>=0&&Xe.min>=0?Xe.max-Xe.min:Xe.min-Xe.max,ir=Oe.length;if(yt||void 0===yt&&void 0!==nn)for(Gr=0;Gr=0&&dl.max>=0?dl.max:dl.min,(Xe.min<0&&Zo<0||Xe.max>=0&&Zo>0)&&(Pn+=Zo));return Lo=de.getPixelForValue(Pn),Xs=(Gs=de.getPixelForValue(Pn+xn))-Lo,void 0!==gt&&Math.abs(Xs)=0&&!ye||xn<0&&ye?Lo-gt:Lo+gt),{size:Xs,base:Lo,head:Gs,center:Gs+Xs/2}},calculateBarIndexPixels:function(h,E,R,F){var de="flex"===F.barThickness?function(h,E,R){var Oe,F=E.pixels,q=F[h],de=h>0?F[h-1]:null,ye=h=Ca?-Ra:Zo<-Ca?Ra:0)+nn,Gs=Math.cos(Zo),Xs=Math.sin(Zo),dl=Math.cos(Lo),ha=Math.sin(Lo),ia=Zo<=0&&Lo>=0||Lo>=Ra,Pa=Zo<=pl&&Lo>=pl||Lo>=Ra+pl,Eu=Zo<=-pl&&Lo>=-pl||Lo>=Ca+pl,wa=Zo===-Ca||Lo>=Ca?-1:Math.min(Gs,Gs*yt,dl,dl*yt),ou=Eu?-1:Math.min(Xs,Xs*yt,ha,ha*yt),gu=ia?1:Math.max(Gs,Gs*yt,dl,dl*yt),Nc=Pa?1:Math.max(Xs,Xs*yt,ha,ha*yt);de=(gu-wa)/2,ye=(Nc-ou)/2,Ue=-(gu+wa)/2,Oe=-(Nc+ou)/2}for(Gr=0,Pi=gt.length;Gr0&&!isNaN(h)?Ra*(Math.abs(h)/E):0},getMaxBorderWidth:function(h){var q,de,ye,Ue,Oe,Xe,gt,yt,R=0,F=this.chart;if(!h)for(q=0,de=F.data.datasets.length;q(R=(gt=Xe.borderWidth)>R?gt:R)?yt:R);return R},setHoverStyle:function(h){var E=h._model,R=h._options,F=Ge.getHoverColor;h.$previousStyle={backgroundColor:E.backgroundColor,borderColor:E.borderColor,borderWidth:E.borderWidth},E.backgroundColor=fs(R.hoverBackgroundColor,F(R.backgroundColor)),E.borderColor=fs(R.hoverBorderColor,F(R.borderColor)),E.borderWidth=fs(R.hoverBorderWidth,R.borderWidth)},_getRingWeightOffset:function(h){for(var E=0,R=0;R0&&ps(de[ye-1]._model,q)&&(Oe.controlPointPreviousX=gt(Oe.controlPointPreviousX,q.left,q.right),Oe.controlPointPreviousY=gt(Oe.controlPointPreviousY,q.top,q.bottom)),ye0&&(de=h.getDatasetMeta(de[0]._datasetIndex).data),de},"x-axis":function(h,E){return ba(h,E,{intersect:!1})},point:function(h,E){return wo(h,xi(E,h))},nearest:function(h,E,R){var F=xi(E,h);R.axis=R.axis||"xy";var q=Eo(R.axis);return ko(h,F,R.intersect,q)},x:function(h,E,R){var F=xi(E,h),q=[],de=!1;return ts(h,function(ye){ye.inXRange(F.x)&&q.push(ye),ye.inRange(F.x,F.y)&&(de=!0)}),R.intersect&&!de&&(q=[]),q},y:function(h,E,R){var F=xi(E,h),q=[],de=!1;return ts(h,function(ye){ye.inYRange(F.y)&&q.push(ye),ye.inRange(F.x,F.y)&&(de=!0)}),R.intersect&&!de&&(q=[]),q}}},tc=Ge.extend;function Nu(h,E){return Ge.where(h,function(R){return R.pos===E})}function bc(h,E){return h.sort(function(R,F){var q=E?F:R,de=E?R:F;return q.weight===de.weight?q.index-de.index:q.weight-de.weight})}function Yl(h,E,R,F){return Math.max(h[R],E[R])+Math.max(h[F],E[F])}function Fs(h,E,R){var de,ye,F=R.box,q=h.maxPadding;if(R.size&&(h[R.pos]-=R.size),R.size=R.horizontal?F.height:F.width,h[R.pos]+=R.size,F.getPadding){var Ue=F.getPadding();q.top=Math.max(q.top,Ue.top),q.left=Math.max(q.left,Ue.left),q.bottom=Math.max(q.bottom,Ue.bottom),q.right=Math.max(q.right,Ue.right)}if(de=E.outerWidth-Yl(q,h,"left","right"),ye=E.outerHeight-Yl(q,h,"top","bottom"),de!==h.w||ye!==h.h){h.w=de,h.h=ye;var Oe=R.horizontal?[de,h.w]:[ye,h.h];return!(Oe[0]===Oe[1]||isNaN(Oe[0])&&isNaN(Oe[1]))}}function iu(h,E){var de,R=E.maxPadding;return de={left:0,top:0,right:0,bottom:0},(h?["left","right"]:["top","bottom"]).forEach(function(ye){de[ye]=Math.max(E[ye],R[ye])}),de}function tl(h,E,R){var q,de,ye,Ue,Oe,Xe,F=[];for(q=0,de=h.length;q div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n"})),Me="$chartjs",xe="chartjs-",Ct=xe+"size-monitor",ur=xe+"render-monitor",Go=["animationstart","webkitAnimationStart"],ms={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function hs(h,E){var R=Ge.getStyle(h,E),F=R&&R.match(/^(\d+)(\.\d+)?px$/);return F?Number(F[1]):void 0}var au=!!function(){var h=!1;try{var E=Object.defineProperty({},"passive",{get:function(){h=!0}});window.addEventListener("e",null,E)}catch(R){}return h}()&&{passive:!0};function Wa(h,E,R){h.addEventListener(E,R,au)}function Rl(h,E,R){h.removeEventListener(E,R,au)}function nc(h,E,R,F,q){return{type:h,chart:E,native:q||null,x:void 0!==R?R:null,y:void 0!==F?F:null}}function Lc(h){var E=document.createElement("div");return E.className=h||"",E}function kc(h,E,R){var F=h[Me]||(h[Me]={}),q=F.resizer=function(h){var E=1e6,R=Lc(Ct),F=Lc(Ct+"-expand"),q=Lc(Ct+"-shrink");F.appendChild(Lc()),q.appendChild(Lc()),R.appendChild(F),R.appendChild(q),R._reset=function(){F.scrollLeft=E,F.scrollTop=E,q.scrollLeft=E,q.scrollTop=E};var de=function(){R._reset(),h()};return Wa(F,"scroll",de.bind(F,"expand")),Wa(q,"scroll",de.bind(q,"shrink")),R}(function(h,E){var R=!1,F=[];return function(){F=Array.prototype.slice.call(arguments),E=E||this,R||(R=!0,Ge.requestAnimFrame.call(window,function(){R=!1,h.apply(E,F)}))}}(function(){if(F.resizer){var de=R.options.maintainAspectRatio&&h.parentNode,ye=de?de.clientWidth:0;E(nc("resize",R)),de&&de.clientWidth0){var de=h[0];de.label?R=de.label:de.xLabel?R=de.xLabel:q>0&&de.index-1?h.split("\n"):h}function Hu(h){var E=h._xScale,R=h._yScale||h._scale,F=h._index,q=h._datasetIndex,de=h._chart.getDatasetMeta(q).controller,ye=de._getIndexScale(),Ue=de._getValueScale();return{xLabel:E?E.getLabelForIndex(F,q):"",yLabel:R?R.getLabelForIndex(F,q):"",label:ye?""+ye.getLabelForIndex(F,q):"",value:Ue?""+Ue.getLabelForIndex(F,q):"",index:F,datasetIndex:q,x:h._model.x,y:h._model.y}}function Uu(h){var E=br.global;return{xPadding:h.xPadding,yPadding:h.yPadding,xAlign:h.xAlign,yAlign:h.yAlign,rtl:h.rtl,textDirection:h.textDirection,bodyFontColor:h.bodyFontColor,_bodyFontFamily:yl(h.bodyFontFamily,E.defaultFontFamily),_bodyFontStyle:yl(h.bodyFontStyle,E.defaultFontStyle),_bodyAlign:h.bodyAlign,bodyFontSize:yl(h.bodyFontSize,E.defaultFontSize),bodySpacing:h.bodySpacing,titleFontColor:h.titleFontColor,_titleFontFamily:yl(h.titleFontFamily,E.defaultFontFamily),_titleFontStyle:yl(h.titleFontStyle,E.defaultFontStyle),titleFontSize:yl(h.titleFontSize,E.defaultFontSize),_titleAlign:h.titleAlign,titleSpacing:h.titleSpacing,titleMarginBottom:h.titleMarginBottom,footerFontColor:h.footerFontColor,_footerFontFamily:yl(h.footerFontFamily,E.defaultFontFamily),_footerFontStyle:yl(h.footerFontStyle,E.defaultFontStyle),footerFontSize:yl(h.footerFontSize,E.defaultFontSize),_footerAlign:h.footerAlign,footerSpacing:h.footerSpacing,footerMarginTop:h.footerMarginTop,caretSize:h.caretSize,cornerRadius:h.cornerRadius,backgroundColor:h.backgroundColor,opacity:0,legendColorBackground:h.multiKeyBackground,displayColors:h.displayColors,borderColor:h.borderColor,borderWidth:h.borderWidth}}function fa(h,E){return"center"===E?h.x+h.width/2:"right"===E?h.x+h.width-h.xPadding:h.x+h.xPadding}function pu(h){return lu([],js(h))}var bl=ar.extend({initialize:function(){this._model=Uu(this._options),this._lastActive=[]},getTitle:function(){var h=this,R=h._options.callbacks,F=R.beforeTitle.apply(h,arguments),q=R.title.apply(h,arguments),de=R.afterTitle.apply(h,arguments),ye=[];return ye=lu(ye,js(F)),ye=lu(ye,js(q)),lu(ye,js(de))},getBeforeBody:function(){return pu(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(h,E){var R=this,F=R._options.callbacks,q=[];return Ge.each(h,function(de){var ye={before:[],lines:[],after:[]};lu(ye.before,js(F.beforeLabel.call(R,de,E))),lu(ye.lines,F.label.call(R,de,E)),lu(ye.after,js(F.afterLabel.call(R,de,E))),q.push(ye)}),q},getAfterBody:function(){return pu(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var h=this,E=h._options.callbacks,R=E.beforeFooter.apply(h,arguments),F=E.footer.apply(h,arguments),q=E.afterFooter.apply(h,arguments),de=[];return de=lu(de,js(R)),de=lu(de,js(F)),lu(de,js(q))},update:function(h){var yt,nn,E=this,R=E._options,F=E._model,q=E._model=Uu(R),de=E._active,ye=E._data,Ue={xAlign:F.xAlign,yAlign:F.yAlign},Oe={x:F.x,y:F.y},Xe={width:F.width,height:F.height},gt={x:F.caretX,y:F.caretY};if(de.length){q.opacity=1;var Pn=[],xn=[];gt=yu[R.position].call(E,de,E._eventPosition);var ir=[];for(yt=0,nn=de.length;ytF.width&&(q=F.width-E.width),q<0&&(q=0)),"top"===gt?de+=yt:de-="bottom"===gt?E.height+yt:E.height/2,"center"===gt?"left"===Xe?q+=yt:"right"===Xe&&(q-=yt):"left"===Xe?q-=nn:"right"===Xe&&(q+=nn),{x:q,y:de}}(q,Xe=function(h,E){var R=h._chart.ctx,F=2*E.yPadding,q=0,de=E.body,ye=de.reduce(function(xn,ir){return xn+ir.before.length+ir.lines.length+ir.after.length},0),Ue=E.title.length,Oe=E.footer.length,Xe=E.titleFontSize,gt=E.bodyFontSize,yt=E.footerFontSize;F+=Ue*Xe,F+=Ue?(Ue-1)*E.titleSpacing:0,F+=Ue?E.titleMarginBottom:0,F+=(ye+=E.beforeBody.length+E.afterBody.length)*gt,F+=ye?(ye-1)*E.bodySpacing:0,F+=Oe?E.footerMarginTop:0,F+=Oe*yt,F+=Oe?(Oe-1)*E.footerSpacing:0;var nn=0,Pn=function(xn){q=Math.max(q,R.measureText(xn).width+nn)};return R.font=Ge.fontString(Xe,E._titleFontStyle,E._titleFontFamily),Ge.each(E.title,Pn),R.font=Ge.fontString(gt,E._bodyFontStyle,E._bodyFontFamily),Ge.each(E.beforeBody.concat(E.afterBody),Pn),nn=E.displayColors?gt+2:0,Ge.each(de,function(xn){Ge.each(xn.before,Pn),Ge.each(xn.lines,Pn),Ge.each(xn.after,Pn)}),nn=0,R.font=Ge.fontString(yt,E._footerFontStyle,E._footerFontFamily),Ge.each(E.footer,Pn),{width:q+=2*E.xPadding,height:F}}(this,q),Ue=function(h,E){var R=h._model,F=h._chart,q=h._chart.chartArea,de="center",ye="center";R.yF.height-E.height&&(ye="bottom");var Ue,Oe,Xe,gt,yt,nn=(q.left+q.right)/2,Pn=(q.top+q.bottom)/2;"center"===ye?(Ue=function(ir){return ir<=nn},Oe=function(ir){return ir>nn}):(Ue=function(ir){return ir<=E.width/2},Oe=function(ir){return ir>=F.width-E.width/2}),Xe=function(ir){return ir+E.width+R.caretSize+R.caretPadding>F.width},gt=function(ir){return ir-E.width-R.caretSize-R.caretPadding<0},yt=function(ir){return ir<=Pn?"top":"bottom"},Ue(R.x)?(de="left",Xe(R.x)&&(de="center",ye=yt(R.y))):Oe(R.x)&&(de="right",gt(R.x)&&(de="center",ye=yt(R.y)));var xn=h._options;return{xAlign:xn.xAlign?xn.xAlign:de,yAlign:xn.yAlign?xn.yAlign:ye}}(this,Xe),E._chart)}else q.opacity=0;return q.xAlign=Ue.xAlign,q.yAlign=Ue.yAlign,q.x=Oe.x,q.y=Oe.y,q.width=Xe.width,q.height=Xe.height,q.caretX=gt.x,q.caretY=gt.y,E._model=q,h&&R.custom&&R.custom.call(E,q),E},drawCaret:function(h,E){var R=this._chart.ctx,q=this.getCaretPosition(h,E,this._view);R.lineTo(q.x1,q.y1),R.lineTo(q.x2,q.y2),R.lineTo(q.x3,q.y3)},getCaretPosition:function(h,E,R){var F,q,de,ye,Ue,Oe,Xe=R.caretSize,gt=R.cornerRadius,yt=R.xAlign,nn=R.yAlign,Pn=h.x,xn=h.y,ir=E.width,Gr=E.height;if("center"===nn)Ue=xn+Gr/2,"left"===yt?(q=(F=Pn)-Xe,de=F,ye=Ue+Xe,Oe=Ue-Xe):(q=(F=Pn+ir)+Xe,de=F,ye=Ue-Xe,Oe=Ue+Xe);else if("left"===yt?(F=(q=Pn+gt+Xe)-Xe,de=q+Xe):"right"===yt?(F=(q=Pn+ir-gt-Xe)-Xe,de=q+Xe):(F=(q=R.caretX)-Xe,de=q+Xe),"top"===nn)Ue=(ye=xn)-Xe,Oe=ye;else{Ue=(ye=xn+Gr)+Xe,Oe=ye;var Pi=de;de=F,F=Pi}return{x1:F,x2:q,x3:de,y1:ye,y2:Ue,y3:Oe}},drawTitle:function(h,E,R){var de,ye,Ue,F=E.title,q=F.length;if(q){var Oe=Mu(E.rtl,E.x,E.width);for(h.x=fa(E,E._titleAlign),R.textAlign=Oe.textAlign(E._titleAlign),R.textBaseline="middle",de=E.titleFontSize,ye=E.titleSpacing,R.fillStyle=E.titleFontColor,R.font=Ge.fontString(de,E._titleFontStyle,E._titleFontFamily),Ue=0;Ue0&&R.stroke()},draw:function(){var h=this._chart.ctx,E=this._view;if(0!==E.opacity){var R={width:E.width,height:E.height},F={x:E.x,y:E.y},q=Math.abs(E.opacity<.001)?0:E.opacity;this._options.enabled&&(E.title.length||E.beforeBody.length||E.body.length||E.afterBody.length||E.footer.length)&&(h.save(),h.globalAlpha=q,this.drawBackground(F,E,h,R),F.y+=E.yPadding,Ge.rtl.overrideTextDirection(h,E.textDirection),this.drawTitle(F,E,h),this.drawBody(F,E,h),this.drawFooter(F,E,h),Ge.rtl.restoreTextDirection(h,E.textDirection),h.restore())}},handleEvent:function(h){var F,E=this,R=E._options;return E._lastActive=E._lastActive||[],"mouseout"===h.type?E._active=[]:(E._active=E._chart.getElementsAtEventForMode(h,R.mode,R),R.reverse&&E._active.reverse()),(F=!Ge.arrayEquals(E._active,E._lastActive))&&(E._lastActive=E._active,(R.enabled||R.custom)&&(E._eventPosition={x:h.x,y:h.y},E.update(!0),E.pivot())),F}});bl.positioners=yu;var El=Ge.valueOrDefault;function Ul(){return Ge.merge(Object.create(null),[].slice.call(arguments),{merger:function(h,E,R,F){if("xAxes"===h||"yAxes"===h){var de,ye,Ue,q=R[h].length;for(E[h]||(E[h]=[]),de=0;de=E[h].length&&E[h].push({}),Ge.merge(E[h][de],!E[h][de].type||Ue.type&&Ue.type!==E[h][de].type?[$u.getScaleDefaults(ye),Ue]:Ue)}else Ge._merger(h,E,R,F)}})}function ks(){return Ge.merge(Object.create(null),[].slice.call(arguments),{merger:function(h,E,R,F){var q=E[h]||Object.create(null),de=R[h];"scales"===h?E[h]=Ul(q,de):"scale"===h?E[h]=Ge.merge(q,[$u.getScaleDefaults(de.type),de]):Ge._merger(h,E,R,F)}})}function Ae(h){var E=h.options;Ge.each(h.scales,function(R){Zl.removeBox(h,R)}),E=ks(br.global,br[h.config.type],E),h.options=h.config.options=E,h.ensureScalesHaveIDs(),h.buildOrUpdateScales(),h.tooltip._options=E.tooltips,h.tooltip.initialize()}function st(h,E,R){var F,q=function(de){return de.id===F};do{F=E+R++}while(Ge.findIndex(h,q)>=0);return F}function vt(h){return"top"===h||"bottom"===h}function ut(h,E){return function(R,F){return R[h]===F[h]?R[E]-F[E]:R[h]-F[h]}}br._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var un=function(h,E){return this.construct(h,E),this};Ge.extend(un.prototype,{construct:function(h,E){var R=this;E=function(h){var E=(h=h||Object.create(null)).data=h.data||{};return E.datasets=E.datasets||[],E.labels=E.labels||[],h.options=ks(br.global,br[h.type],h.options||{}),h}(E);var F=Aa.acquireContext(h,E),q=F&&F.canvas,de=q&&q.height,ye=q&&q.width;R.id=Ge.uid(),R.ctx=F,R.canvas=q,R.config=E,R.width=ye,R.height=de,R.aspectRatio=de?ye/de:null,R.options=E.options,R._bufferedRender=!1,R._layers=[],R.chart=R,R.controller=R,un.instances[R.id]=R,Object.defineProperty(R,"data",{get:function(){return R.config.data},set:function(Ue){R.config.data=Ue}}),F&&q?(R.initialize(),R.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var h=this;return Ss.notify(h,"beforeInit"),Ge.retinaScale(h,h.options.devicePixelRatio),h.bindEvents(),h.options.responsive&&h.resize(!0),h.initToolTip(),Ss.notify(h,"afterInit"),h},clear:function(){return Ge.canvas.clear(this),this},stop:function(){return vo.cancelAnimation(this),this},resize:function(h){var E=this,R=E.options,F=E.canvas,q=R.maintainAspectRatio&&E.aspectRatio||null,de=Math.max(0,Math.floor(Ge.getMaximumWidth(F))),ye=Math.max(0,Math.floor(q?de/q:Ge.getMaximumHeight(F)));if((E.width!==de||E.height!==ye)&&(F.width=E.width=de,F.height=E.height=ye,F.style.width=de+"px",F.style.height=ye+"px",Ge.retinaScale(E,R.devicePixelRatio),!h)){var Ue={width:de,height:ye};Ss.notify(E,"resize",[Ue]),R.onResize&&R.onResize(E,Ue),E.stop(),E.update({duration:R.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var h=this.options,E=h.scales||{},R=h.scale;Ge.each(E.xAxes,function(F,q){F.id||(F.id=st(E.xAxes,"x-axis-",q))}),Ge.each(E.yAxes,function(F,q){F.id||(F.id=st(E.yAxes,"y-axis-",q))}),R&&(R.id=R.id||"scale")},buildOrUpdateScales:function(){var h=this,E=h.options,R=h.scales||{},F=[],q=Object.keys(R).reduce(function(de,ye){return de[ye]=!1,de},{});E.scales&&(F=F.concat((E.scales.xAxes||[]).map(function(de){return{options:de,dtype:"category",dposition:"bottom"}}),(E.scales.yAxes||[]).map(function(de){return{options:de,dtype:"linear",dposition:"left"}}))),E.scale&&F.push({options:E.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),Ge.each(F,function(de){var ye=de.options,Ue=ye.id,Oe=El(ye.type,de.dtype);vt(ye.position)!==vt(de.dposition)&&(ye.position=de.dposition),q[Ue]=!0;var Xe=null;if(Ue in R&&R[Ue].type===Oe)(Xe=R[Ue]).options=ye,Xe.ctx=h.ctx,Xe.chart=h;else{var gt=$u.getScaleConstructor(Oe);if(!gt)return;Xe=new gt({id:Ue,type:Oe,options:ye,ctx:h.ctx,chart:h}),R[Xe.id]=Xe}Xe.mergeTicksOptions(),de.isDefault&&(h.scale=Xe)}),Ge.each(q,function(de,ye){de||delete R[ye]}),h.scales=R,$u.addScalesToLayout(this)},buildOrUpdateControllers:function(){var F,q,h=this,E=[],R=h.data.datasets;for(F=0,q=R.length;F=0;--F)E.drawDataset(R[F],h);Ss.notify(E,"afterDatasetsDraw",[h])}},drawDataset:function(h,E){var F={meta:h,index:h.index,easingValue:E};!1!==Ss.notify(this,"beforeDatasetDraw",[F])&&(h.controller.draw(E),Ss.notify(this,"afterDatasetDraw",[F]))},_drawTooltip:function(h){var E=this,R=E.tooltip,F={tooltip:R,easingValue:h};!1!==Ss.notify(E,"beforeTooltipDraw",[F])&&(R.draw(),Ss.notify(E,"afterTooltipDraw",[F]))},getElementAtEvent:function(h){return sl.modes.single(this,h)},getElementsAtEvent:function(h){return sl.modes.label(this,h,{intersect:!0})},getElementsAtXAxis:function(h){return sl.modes["x-axis"](this,h,{intersect:!0})},getElementsAtEventForMode:function(h,E,R){var F=sl.modes[E];return"function"==typeof F?F(this,h,R):[]},getDatasetAtEvent:function(h){return sl.modes.dataset(this,h,{intersect:!0})},getDatasetMeta:function(h){var E=this,R=E.data.datasets[h];R._meta||(R._meta={});var F=R._meta[E.id];return F||(F=R._meta[E.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:R.order||0,index:h}),F},getVisibleDatasetCount:function(){for(var h=0,E=0,R=this.data.datasets.length;E3?R[2]-R[1]:R[1]-R[0];Math.abs(F)>1&&h!==Math.floor(h)&&(F=h-Math.floor(h));var q=Ge.log10(Math.abs(F)),de="";if(0!==h)if(Math.max(Math.abs(R[0]),Math.abs(R[R.length-1]))<1e-4){var Ue=Ge.log10(Math.abs(h)),Oe=Math.floor(Ue)-Math.floor(q);Oe=Math.max(Math.min(Oe,20),0),de=h.toExponential(Oe)}else{var Xe=-1*Math.floor(q);Xe=Math.max(Math.min(Xe,20),0),de=h.toFixed(Xe)}else de="0";return de},logarithmic:function(h,E,R){var F=h/Math.pow(10,Math.floor(Ge.log10(h)));return 0===h?"0":1===F||2===F||5===F||0===E||E===R.length-1?h.toExponential():""}}},In=Ge.isArray,Cr=Ge.isNullOrUndef,hr=Ge.valueOrDefault,ao=Ge.valueAtIndexOrDefault;function Na(h,E,R){var Xe,F=h.getTicks().length,q=Math.min(E,F-1),de=h.getPixelForTick(q),ye=h._startPixel,Ue=h._endPixel;if(!(R&&(Xe=1===F?Math.max(de-ye,Ue-de):0===E?(h.getPixelForTick(1)-de)/2:(de-h.getPixelForTick(q-1))/2,de+=qUe+1e-6)))return de}function Qs(h,E,R,F){var gt,yt,nn,Pn,xn,ir,Gr,Pi,Zo,Lo,Gs,Xs,dl,q=R.length,de=[],ye=[],Ue=[],Oe=0,Xe=0;for(gt=0;gtE){for(de=0;de=de||F<=1||!h.isHorizontal()?h.labelRotation=q:(Oe=(Ue=h._getLabelSizes()).widest.width,Xe=Ue.highest.height-Ue.highest.offset,gt=Math.min(h.maxWidth,h.chart.width-Oe),Oe+6>(yt=E.offset?h.maxWidth/F:gt/(F-1))&&(yt=gt/(F-(E.offset?.5:1)),nn=h.maxHeight-ed(E.gridLines)-R.padding-$c(E.scaleLabel),Pn=Math.sqrt(Oe*Oe+Xe*Xe),ye=Ge.toDegrees(Math.min(Math.asin(Math.min((Ue.highest.height+6)/yt,1)),Math.asin(Math.min(nn/Pn,1))-Math.asin(Xe/Pn))),ye=Math.max(q,Math.min(de,ye))),h.labelRotation=ye)},afterCalculateTickRotation:function(){Ge.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){Ge.callback(this.options.beforeFit,[this])},fit:function(){var h=this,E=h.minSize={width:0,height:0},R=h.chart,F=h.options,q=F.ticks,de=F.scaleLabel,ye=F.gridLines,Ue=h._isVisible(),Oe="bottom"===F.position,Xe=h.isHorizontal();if(Xe?E.width=h.maxWidth:Ue&&(E.width=ed(ye)+$c(de)),Xe?Ue&&(E.height=ed(ye)+$c(de)):E.height=h.maxHeight,q.display&&Ue){var gt=$i(q),yt=h._getLabelSizes(),nn=yt.first,Pn=yt.last,xn=yt.widest,ir=yt.highest,Gr=.4*gt.minor.lineHeight,Pi=q.padding;if(Xe){var Zo=0!==h.labelRotation,Lo=Ge.toRadians(h.labelRotation),Gs=Math.cos(Lo),Xs=Math.sin(Lo);E.height=Math.min(h.maxHeight,E.height+(Xs*xn.width+Gs*(ir.height-(Zo?ir.offset:0))+(Zo?0:Gr))+Pi);var Pa,il,ha=h.getPixelForTick(0)-h.left,ia=h.right-h.getPixelForTick(h.getTicks().length-1);Zo?(Pa=Oe?Gs*nn.width+Xs*nn.offset:Xs*(nn.height-nn.offset),il=Oe?Xs*(Pn.height-Pn.offset):Gs*Pn.width+Xs*Pn.offset):(Pa=nn.width/2,il=Pn.width/2),h.paddingLeft=Math.max((Pa-ha)*h.width/(h.width-ha),0)+3,h.paddingRight=Math.max((il-ia)*h.width/(h.width-ia),0)+3}else E.width=Math.min(h.maxWidth,E.width+(q.mirror?0:xn.width+Pi+Gr)),h.paddingTop=nn.height/2,h.paddingBottom=Pn.height/2}h.handleMargins(),Xe?(h.width=h._length=R.width-h.margins.left-h.margins.right,h.height=E.height):(h.width=E.width,h.height=h._length=R.height-h.margins.top-h.margins.bottom)},handleMargins:function(){var h=this;h.margins&&(h.margins.left=Math.max(h.paddingLeft,h.margins.left),h.margins.top=Math.max(h.paddingTop,h.margins.top),h.margins.right=Math.max(h.paddingRight,h.margins.right),h.margins.bottom=Math.max(h.paddingBottom,h.margins.bottom))},afterFit:function(){Ge.callback(this.options.afterFit,[this])},isHorizontal:function(){var h=this.options.position;return"top"===h||"bottom"===h},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(h){if(Cr(h))return NaN;if(("number"==typeof h||h instanceof Number)&&!isFinite(h))return NaN;if(h)if(this.isHorizontal()){if(void 0!==h.x)return this.getRightValue(h.x)}else if(void 0!==h.y)return this.getRightValue(h.y);return h},_convertTicksToLabels:function(h){var R,F,q,E=this;for(E.ticks=h.map(function(de){return de.value}),E.beforeTickToLabelConversion(),R=E.convertTicksToLabels(h)||E.ticks,E.afterTickToLabelConversion(),F=0,q=h.length;FF-1?null:E.getPixelForDecimal(h*q+(R?q/2:0))},getPixelForDecimal:function(h){var E=this;return E._reversePixels&&(h=1-h),E._startPixel+h*E._length},getDecimalForPixel:function(h){var E=(h-this._startPixel)/this._length;return this._reversePixels?1-E:E},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var h=this,E=h.min,R=h.max;return h.beginAtZero?0:E<0&&R<0?R:E>0&&R>0?E:0},_autoSkip:function(h){var Xe,gt,yt,nn,E=this,R=E.options.ticks,F=E._length,q=R.maxTicksLimit||F/E._tickSize()+1,de=R.major.enabled?function(h){var R,F,E=[];for(R=0,F=h.length;Rq)return function(h,E,R){var de,ye,F=0,q=E[0];for(R=Math.ceil(R),de=0;dede)return Ue;return Math.max(de,1)}(de,h,0,q),ye>0){for(Xe=0,gt=ye-1;Xe1?(Oe-Ue)/(ye-1):null)?0:Ue-nn,Ue),md(h,yt,Oe,Ge.isNullOrUndef(nn)?h.length:Oe+nn),xo(h)}return md(h,yt),xo(h)},_tickSize:function(){var h=this,E=h.options.ticks,R=Ge.toRadians(h.labelRotation),F=Math.abs(Math.cos(R)),q=Math.abs(Math.sin(R)),de=h._getLabelSizes(),ye=E.autoSkipPadding||0,Ue=de?de.widest.width+ye:0,Oe=de?de.highest.height+ye:0;return h.isHorizontal()?Oe*F>Ue*q?Ue/F:Oe/q:Oe*q=0&&(de=Ue),void 0!==q&&(Ue=E.indexOf(q))>=0&&(ye=Ue),h.minIndex=de,h.maxIndex=ye,h.min=E[de],h.max=E[ye]},buildTicks:function(){var h=this,E=h._getLabels(),R=h.minIndex,F=h.maxIndex;h.ticks=0===R&&F===E.length-1?E:E.slice(R,F+1)},getLabelForIndex:function(h,E){var R=this,F=R.chart;return F.getDatasetMeta(E).controller._getValueScaleId()===R.id?R.getRightValue(F.data.datasets[E].data[h]):R._getLabels()[h]},_configure:function(){var h=this,E=h.options.offset,R=h.ticks;Nl.prototype._configure.call(h),h.isHorizontal()||(h._reversePixels=!h._reversePixels),R&&(h._startValue=h.minIndex-(E?.5:0),h._valueRange=Math.max(R.length-(E?0:1),1))},getPixelForValue:function(h,E,R){var q,de,ye,F=this;return!td(E)&&!td(R)&&(h=F.chart.data.datasets[R].data[E]),td(h)||(q=F.isHorizontal()?h.x:h.y),(void 0!==q||void 0!==h&&isNaN(E))&&(de=F._getLabels(),h=Ge.valueOrDefault(q,h),E=-1!==(ye=de.indexOf(h))?ye:E,isNaN(E)&&(E=h)),F.getPixelForDecimal((E-F._startValue)/F._valueRange)},getPixelForTick:function(h){var E=this.ticks;return h<0||h>E.length-1?null:this.getPixelForValue(E[h],h+this.minIndex)},getValueForPixel:function(h){var E=this,R=Math.round(E._startValue+E.getDecimalForPixel(h)*E._valueRange);return Math.min(Math.max(R,0),E.ticks.length-1)},getBasePixel:function(){return this.bottom}});ss._defaults={position:"bottom"};var ic=Ge.isNullOrUndef;var al=Nl.extend({getRightValue:function(h){return"string"==typeof h?+h:Nl.prototype.getRightValue.call(this,h)},handleTickRangeOptions:function(){var h=this,R=h.options.ticks;if(R.beginAtZero){var F=Ge.sign(h.min),q=Ge.sign(h.max);F<0&&q<0?h.max=0:F>0&&q>0&&(h.min=0)}var de=void 0!==R.min||void 0!==R.suggestedMin,ye=void 0!==R.max||void 0!==R.suggestedMax;void 0!==R.min?h.min=R.min:void 0!==R.suggestedMin&&(h.min=null===h.min?R.suggestedMin:Math.min(h.min,R.suggestedMin)),void 0!==R.max?h.max=R.max:void 0!==R.suggestedMax&&(h.max=null===h.max?R.suggestedMax:Math.max(h.max,R.suggestedMax)),de!==ye&&h.min>=h.max&&(de?h.max=h.min+1:h.min=h.max-1),h.min===h.max&&(h.max++,R.beginAtZero||h.min--)},getTickLimit:function(){var q,h=this,E=h.options.ticks,R=E.stepSize,F=E.maxTicksLimit;return R?q=Math.ceil(h.max/R)-Math.floor(h.min/R)+1:(q=h._computeTickLimit(),F=F||11),F&&(q=Math.min(F,q)),q},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Ge.noop,buildTicks:function(){var h=this,R=h.options.ticks,F=h.getTickLimit(),q={maxTicks:F=Math.max(2,F),min:R.min,max:R.max,precision:R.precision,stepSize:Ge.valueOrDefault(R.fixedStepSize,R.stepSize)},de=h.ticks=function(h,E){var Pn,xn,ir,Gr,R=[],q=h.stepSize,de=q||1,ye=h.maxTicks-1,Ue=h.min,Oe=h.max,Xe=h.precision,gt=E.min,yt=E.max,nn=Ge.niceNum((yt-gt)/ye/de)*de;if(nn<1e-14&&ic(Ue)&&ic(Oe))return[gt,yt];(Gr=Math.ceil(yt/nn)-Math.floor(gt/nn))>ye&&(nn=Ge.niceNum(Gr*nn/ye/de)*de),q||ic(Xe)?Pn=Math.pow(10,Ge._decimalPlaces(nn)):(Pn=Math.pow(10,Xe),nn=Math.ceil(nn*Pn)/Pn),xn=Math.floor(gt/nn)*nn,ir=Math.ceil(yt/nn)*nn,q&&(!ic(Ue)&&Ge.almostWhole(Ue/nn,nn/1e3)&&(xn=Ue),!ic(Oe)&&Ge.almostWhole(Oe/nn,nn/1e3)&&(ir=Oe)),Gr=Ge.almostEquals(Gr=(ir-xn)/nn,Math.round(Gr),nn/1e3)?Math.round(Gr):Math.ceil(Gr),xn=Math.round(xn*Pn)/Pn,ir=Math.round(ir*Pn)/Pn,R.push(ic(Ue)?xn:Ue);for(var Pi=1;PiE.length-1?null:this.getPixelForValue(E[h])}});Et._defaults=Wd;var Hn=Ge.valueOrDefault,Xn=Ge.math.log10;var Yo={position:"left",ticks:{callback:Fo.formatters.logarithmic}};function $a(h,E){return Ge.isFinite(h)&&h>=0?h:E}var ns=Nl.extend({determineDataLimits:function(){var ye,Ue,Oe,Xe,gt,yt,h=this,E=h.options,R=h.chart,F=R.data.datasets,q=h.isHorizontal();function de(Gr){return q?Gr.xAxisID===h.id:Gr.yAxisID===h.id}h.min=Number.POSITIVE_INFINITY,h.max=Number.NEGATIVE_INFINITY,h.minNotZero=Number.POSITIVE_INFINITY;var nn=E.stacked;if(void 0===nn)for(ye=0;ye0){var Pi=Ge.min(Gr),Zo=Ge.max(Gr);h.min=Math.min(h.min,Pi),h.max=Math.max(h.max,Zo)}})}else for(ye=0;ye0?h.min:h.max<1?Math.pow(10,Math.floor(Xn(h.max))):1)},buildTicks:function(){var h=this,E=h.options.ticks,R=!h.isHorizontal(),F={min:$a(E.min),max:$a(E.max)},q=h.ticks=function(h,E){var ye,Ue,R=[],F=Hn(h.min,Math.pow(10,Math.floor(Xn(E.min)))),q=Math.floor(Xn(E.max)),de=Math.ceil(E.max/Math.pow(10,q));0===F?(ye=Math.floor(Xn(E.minNotZero)),Ue=Math.floor(E.minNotZero/Math.pow(10,ye)),R.push(F),F=Ue*Math.pow(10,ye)):(ye=Math.floor(Xn(F)),Ue=Math.floor(F/Math.pow(10,ye)));var Oe=ye<0?Math.pow(10,Math.abs(ye)):1;do{R.push(F),10==++Ue&&(Ue=1,Oe=++ye>=0?1:Oe),F=Math.round(Ue*Math.pow(10,ye)*Oe)/Oe}while(yeE.length-1?null:this.getPixelForValue(E[h])},_getFirstTickValue:function(h){var E=Math.floor(Xn(h));return Math.floor(h/Math.pow(10,E))*Math.pow(10,E)},_configure:function(){var h=this,E=h.min,R=0;Nl.prototype._configure.call(h),0===E&&(E=h._getFirstTickValue(h.minNotZero),R=Hn(h.options.ticks.fontSize,br.global.defaultFontSize)/h._length),h._startValue=Xn(E),h._valueOffset=R,h._valueRange=(Xn(h.max)-Xn(E))/(1-R)},getPixelForValue:function(h){var E=this,R=0;return(h=+E.getRightValue(h))>E.min&&h>0&&(R=(Xn(h)-E._startValue)/E._valueRange+E._valueOffset),E.getPixelForDecimal(R)},getValueForPixel:function(h){var E=this,R=E.getDecimalForPixel(h);return 0===R&&0===E.min?0:Math.pow(10,E._startValue+(R-E._valueOffset)*E._valueRange)}});ns._defaults=Yo;var Hs=Ge.valueOrDefault,fc=Ge.valueAtIndexOrDefault,ga=Ge.options.resolve,Ol={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Fo.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(h){return h}}};function ll(h){var E=h.ticks;return E.display&&h.display?Hs(E.fontSize,br.global.defaultFontSize)+2*E.backdropPaddingY:0}function Za(h,E,R){return Ge.isArray(R)?{w:Ge.longestText(h,h.font,R),h:R.length*E}:{w:h.measureText(R).width,h:E}}function ja(h,E,R,F,q){return h===F||h===q?{start:E-R/2,end:E+R/2}:hq?{start:E-R,end:E}:{start:E,end:E+R}}function Of(h){return 0===h||180===h?"center":h<180?"left":"right"}function Rd(h,E,R,F){var de,ye,q=R.y+F/2;if(Ge.isArray(E))for(de=0,ye=E.length;de270||h<90)&&(R.y-=E.h)}function Cc(h){return Ge.isNumber(h)?h:0}var Xd=al.extend({setDimensions:function(){var h=this;h.width=h.maxWidth,h.height=h.maxHeight,h.paddingTop=ll(h.options)/2,h.xCenter=Math.floor(h.width/2),h.yCenter=Math.floor((h.height-h.paddingTop)/2),h.drawingArea=Math.min(h.height-h.paddingTop,h.width)/2},determineDataLimits:function(){var h=this,E=h.chart,R=Number.POSITIVE_INFINITY,F=Number.NEGATIVE_INFINITY;Ge.each(E.data.datasets,function(q,de){if(E.isDatasetVisible(de)){var ye=E.getDatasetMeta(de);Ge.each(q.data,function(Ue,Oe){var Xe=+h.getRightValue(Ue);isNaN(Xe)||ye.data[Oe].hidden||(R=Math.min(Xe,R),F=Math.max(Xe,F))})}}),h.min=R===Number.POSITIVE_INFINITY?0:R,h.max=F===Number.NEGATIVE_INFINITY?0:F,h.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/ll(this.options))},convertTicksToLabels:function(){var h=this;al.prototype.convertTicksToLabels.call(h),h.pointLabels=h.chart.data.labels.map(function(){var E=Ge.callback(h.options.pointLabels.callback,arguments,h);return E||0===E?E:""})},getLabelForIndex:function(h,E){return+this.getRightValue(this.chart.data.datasets[E].data[h])},fit:function(){var h=this,E=h.options;E.display&&E.pointLabels.display?function(h){var q,de,ye,E=Ge.options._parseFont(h.options.pointLabels),R={l:0,r:h.width,t:0,b:h.height-h.paddingTop},F={};h.ctx.font=E.string,h._pointLabelSizes=[];var Ue=h.chart.data.labels.length;for(q=0;qR.r&&(R.r=gt.end,F.r=Oe),yt.startR.b&&(R.b=yt.end,F.b=Oe)}h.setReductions(h.drawingArea,R,F)}(h):h.setCenterPoint(0,0,0,0)},setReductions:function(h,E,R){var F=this,q=E.l/Math.sin(R.l),de=Math.max(E.r-F.width,0)/Math.sin(R.r),ye=-E.t/Math.cos(R.t),Ue=-Math.max(E.b-(F.height-F.paddingTop),0)/Math.cos(R.b);q=Cc(q),de=Cc(de),ye=Cc(ye),Ue=Cc(Ue),F.drawingArea=Math.min(Math.floor(h-(q+de)/2),Math.floor(h-(ye+Ue)/2)),F.setCenterPoint(q,de,ye,Ue)},setCenterPoint:function(h,E,R,F){var q=this,Ue=R+q.drawingArea,Oe=q.height-q.paddingTop-F-q.drawingArea;q.xCenter=Math.floor((h+q.drawingArea+(q.width-E-q.drawingArea))/2+q.left),q.yCenter=Math.floor((Ue+Oe)/2+q.top+q.paddingTop)},getIndexAngle:function(h){var E=this.chart,de=(h*(360/E.data.labels.length)+((E.options||{}).startAngle||0))%360;return(de<0?de+360:de)*Math.PI*2/360},getDistanceFromCenterForValue:function(h){var E=this;if(Ge.isNullOrUndef(h))return NaN;var R=E.drawingArea/(E.max-E.min);return E.options.ticks.reverse?(E.max-h)*R:(h-E.min)*R},getPointPosition:function(h,E){var R=this,F=R.getIndexAngle(h)-Math.PI/2;return{x:Math.cos(F)*E+R.xCenter,y:Math.sin(F)*E+R.yCenter}},getPointPositionForValue:function(h,E){return this.getPointPosition(h,this.getDistanceFromCenterForValue(E))},getBasePosition:function(h){var E=this,R=E.min,F=E.max;return E.getPointPositionForValue(h||0,E.beginAtZero?0:R<0&&F<0?F:R>0&&F>0?R:0)},_drawGrid:function(){var Ue,Oe,Xe,h=this,E=h.ctx,R=h.options,F=R.gridLines,q=R.angleLines,de=Hs(q.lineWidth,F.lineWidth),ye=Hs(q.color,F.color);if(R.pointLabels.display&&function(h){var E=h.ctx,R=h.options,F=R.pointLabels,q=ll(R),de=h.getDistanceFromCenterForValue(R.ticks.reverse?h.min:h.max),ye=Ge.options._parseFont(F);E.save(),E.font=ye.string,E.textBaseline="middle";for(var Ue=h.chart.data.labels.length-1;Ue>=0;Ue--){var Xe=h.getPointPosition(Ue,de+(0===Ue?q/2:0)+5),gt=fc(F.fontColor,Ue,br.global.defaultFontColor);E.fillStyle=gt;var yt=h.getIndexAngle(Ue),nn=Ge.toDegrees(yt);E.textAlign=Of(nn),Qd(nn,h._pointLabelSizes[Ue],Xe),Rd(E,h.pointLabels[Ue],Xe,ye.lineHeight)}E.restore()}(h),F.display&&Ge.each(h.ticks,function(gt,yt){0!==yt&&(Oe=h.getDistanceFromCenterForValue(h.ticksAsNumbers[yt]),function(h,E,R,F){var Xe,q=h.ctx,de=E.circular,ye=h.chart.data.labels.length,Ue=fc(E.color,F-1),Oe=fc(E.lineWidth,F-1);if((de||ye)&&Ue&&Oe){if(q.save(),q.strokeStyle=Ue,q.lineWidth=Oe,q.setLineDash&&(q.setLineDash(E.borderDash||[]),q.lineDashOffset=E.borderDashOffset||0),q.beginPath(),de)q.arc(h.xCenter,h.yCenter,R,0,2*Math.PI);else{Xe=h.getPointPosition(0,R),q.moveTo(Xe.x,Xe.y);for(var gt=1;gt=0;Ue--)Oe=h.getDistanceFromCenterForValue(R.ticks.reverse?h.min:h.max),Xe=h.getPointPosition(Ue,Oe),E.beginPath(),E.moveTo(h.xCenter,h.yCenter),E.lineTo(Xe.x,Xe.y),E.stroke();E.restore()}},_drawLabels:function(){var h=this,E=h.ctx,F=h.options.ticks;if(F.display){var Ue,Oe,q=h.getIndexAngle(0),de=Ge.options._parseFont(F),ye=Hs(F.fontColor,br.global.defaultFontColor);E.save(),E.font=de.string,E.translate(h.xCenter,h.yCenter),E.rotate(q),E.textAlign="center",E.textBaseline="middle",Ge.each(h.ticks,function(Xe,gt){0===gt&&!F.reverse||(Ue=h.getDistanceFromCenterForValue(h.ticksAsNumbers[gt]),F.showLabelBackdrop&&(Oe=E.measureText(Xe).width,E.fillStyle=F.backdropColor,E.fillRect(-Oe/2-F.backdropPaddingX,-Ue-de.size/2-F.backdropPaddingY,Oe+2*F.backdropPaddingX,de.size+2*F.backdropPaddingY)),E.fillStyle=ye,E.fillText(Xe,0,-Ue))}),E.restore()}},_drawTitle:Ge.noop});Xd._defaults=Ol;var $f=Ge._deprecated,Ju=Ge.options.resolve,Sl=Ge.valueOrDefault,wl=Number.MIN_SAFE_INTEGER||-9007199254740991,kl=Number.MAX_SAFE_INTEGER||9007199254740991,Pu={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Ja=Object.keys(Pu);function Qu(h,E){return h-E}function Oc(h){return Ge.valueOrDefault(h.time.min,h.ticks.min)}function Au(h){return Ge.valueOrDefault(h.time.max,h.ticks.max)}function ff(h,E,R,F){var q=function(h,E,R){for(var de,ye,Ue,F=0,q=h.length-1;F>=0&&F<=q;){if(Ue=h[de=F+q>>1],!(ye=h[de-1]||null))return{lo:null,hi:Ue};if(Ue[E]R))return{lo:ye,hi:Ue};q=de-1}}return{lo:Ue,hi:null}}(h,E,R),de=q.lo?q.hi?q.lo:h[h.length-2]:h[0],ye=q.lo?q.hi?q.hi:h[h.length-1]:h[1],Ue=ye[E]-de[E];return de[F]+(ye[F]-de[F])*(Ue?(R-de[E])/Ue:0)}function Jl(h,E){var R=h._adapter,F=h.options.time,q=F.parser,de=q||F.format,ye=E;return"function"==typeof q&&(ye=q(ye)),Ge.isFinite(ye)||(ye="string"==typeof de?R.parse(ye,de):R.parse(ye)),null!==ye?+ye:(!q&&"function"==typeof de&&(ye=de(E),Ge.isFinite(ye)||(ye=R.parse(ye))),ye)}function vd(h,E){if(Ge.isNullOrUndef(E))return null;var R=h.options.time,F=Jl(h,h.getRightValue(E));return null===F||R.round&&(F=+h._adapter.startOf(F,R.round)),F}function wc(h,E,R,F){var de,ye,q=Ja.length;for(de=Ja.indexOf(h);de=0&&(E[Oe].major=!0);return E}(h,F,q,R):F}var $p=Nl.extend({initialize:function(){this.mergeTicksOptions(),Nl.prototype.initialize.call(this)},update:function(){var h=this,E=h.options,R=E.time||(E.time={}),F=h._adapter=new Io._date(E.adapters.date);return $f("time scale",R.format,"time.format","time.parser"),$f("time scale",R.min,"time.min","ticks.min"),$f("time scale",R.max,"time.max","ticks.max"),Ge.mergeIf(R.displayFormats,F.formats()),Nl.prototype.update.apply(h,arguments)},getRightValue:function(h){return h&&void 0!==h.t&&(h=h.t),Nl.prototype.getRightValue.call(this,h)},determineDataLimits:function(){var gt,yt,nn,Pn,xn,ir,Gr,h=this,E=h.chart,R=h._adapter,F=h.options,q=F.time.unit||"day",de=kl,ye=wl,Ue=[],Oe=[],Xe=[],Pi=h._getLabels();for(gt=0,nn=Pi.length;gt1?function(h){var F,q,de,E={},R=[];for(F=0,q=h.length;F1e5*Oe)throw E+" and "+R+" are too far apart with stepSize of "+Oe+" "+Ue;for(nn=gt;nn=E&&Pn<=R&&Ue.push(Pn);return h.min=E,h.max=R,h._unit=de.unit||(q.autoSkip?wc(de.minUnit,h.min,h.max,Oe):function(h,E,R,F,q){var de,ye;for(de=Ja.length-1;de>=Ja.indexOf(R);de--)if(Pu[ye=Ja[de]].common&&h._adapter.diff(q,F,ye)>=E-1)return ye;return Ja[R?Ja.indexOf(R):0]}(h,Ue.length,de.minUnit,h.min,h.max)),h._majorUnit=q.major.enabled&&"year"!==h._unit?function(h){for(var E=Ja.indexOf(h)+1,R=Ja.length;EE&&Xe=0&&h0?Ue:1}});$p._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var _f={category:ss,linear:Et,logarithmic:ns,radialLinear:Xd,time:$p},Dh={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Io._date.override("function"==typeof r?{_id:"moment",formats:function(){return Dh},parse:function(h,E){return"string"==typeof h&&"string"==typeof E?h=r(h,E):h instanceof r||(h=r(h)),h.isValid()?h.valueOf():null},format:function(h,E){return r(h).format(E)},add:function(h,E,R){return r(h).add(E,R).valueOf()},diff:function(h,E,R){return r(h).diff(r(E),R)},startOf:function(h,E,R){return h=r(h),"isoWeek"===E?h.isoWeekday(R).valueOf():h.startOf(E).valueOf()},endOf:function(h,E){return r(h).endOf(E).valueOf()},_create:function(h){return r(h)}}:{}),br._set("global",{plugins:{filler:{propagate:!0}}});var Ql={dataset:function(h){var E=h.fill,R=h.chart,F=R.getDatasetMeta(E),de=F&&R.isDatasetVisible(E)&&F.dataset._children||[],ye=de.length||0;return ye?function(Ue,Oe){return Oe=R)&&de;switch(q){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return q;default:return!1}}function Nd(h){return(h.el._scale||{}).getPointPositionForValue?function(h){var ye,Ue,Oe,Xe,gt,E=h.el._scale,R=E.options,F=E.chart.data.labels.length,q=h.fill,de=[];if(!F)return null;for(Ue=R.ticks.reverse?E.min:E.max,Oe=E.getPointPositionForValue(0,ye=R.ticks.reverse?E.max:E.min),Xe=0;Xe0;--de)h.arc(ye,Ue,Oe,R[de].angle,R[de-1].angle,!0);return}for(h.lineTo(R[q-1].x,R[q-1].y),de=q-1;de>0;--de)Ge.canvas.lineTo(h,R[de],R[de-1],!0)}}function Ll(h,E,R,F,q,de){var nn,Pn,xn,ir,Gr,Pi,Zo,Lo,ye=E.length,Ue=F.spanGaps,Oe=[],Xe=[],gt=0,yt=0;for(h.beginPath(),nn=0,Pn=ye;nn=0;--q)(F=E[q].$filler)&&F.visible&&(Ue=(de=F.el)._children||[],Xe=(ye=de._view).backgroundColor||br.global.defaultColor,(Oe=F.mapper)&&Xe&&Ue.length&&(Ge.canvas.clipArea(R,h.chartArea),Ll(R,Ue,Oe,ye,Xe,de._loop),Ge.canvas.unclipArea(R)))}},rl=Ge.rtl.getRtlAdapter,Yu=Ge.noop,pc=Ge.valueOrDefault;function Kd(h,E){return h.usePointStyle&&h.boxWidth>E?E:h.boxWidth}br._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(h,E){var R=E.datasetIndex,F=this.chart,q=F.getDatasetMeta(R);q.hidden=null===q.hidden?!F.data.datasets[R].hidden:null,F.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(h){var E=h.data.datasets,R=h.options.legend||{},F=R.labels&&R.labels.usePointStyle;return h._getSortedDatasetMetas().map(function(q){var de=q.controller.getStyle(F?0:void 0);return{text:E[q.index].label,fillStyle:de.backgroundColor,hidden:!h.isDatasetVisible(q.index),lineCap:de.borderCapStyle,lineDash:de.borderDash,lineDashOffset:de.borderDashOffset,lineJoin:de.borderJoinStyle,lineWidth:de.borderWidth,strokeStyle:de.borderColor,pointStyle:de.pointStyle,rotation:de.rotation,datasetIndex:q.index}},this)}}},legendCallback:function(h){var F,q,de,E=document.createElement("ul"),R=h.data.datasets;for(E.setAttribute("class",h.id+"-legend"),F=0,q=R.length;FOe.width)&&(yt+=ye+R.padding,gt[gt.length-(Lo>0?0:1)]=0),Ue[Lo]={left:0,top:0,width:Xs,height:ye},gt[gt.length-1]+=Xs+R.padding}),Oe.height+=yt}else{var nn=R.padding,Pn=h.columnWidths=[],xn=h.columnHeights=[],ir=R.padding,Gr=0,Pi=0;Ge.each(h.legendItems,function(Zo,Lo){var Xs=Kd(R,ye)+ye/2+q.measureText(Zo.text).width;Lo>0&&Pi+ye+2*nn>Oe.height&&(ir+=Gr+R.padding,Pn.push(Gr),xn.push(Pi),Gr=0,Pi=0),Gr=Math.max(Gr,Xs),Pi+=ye+nn,Ue[Lo]={left:0,top:0,width:Xs,height:ye}}),ir+=Gr,Pn.push(Gr),xn.push(Pi),Oe.width+=ir}h.width=Oe.width,h.height=Oe.height}else h.width=Oe.width=h.height=Oe.height=0},afterFit:Yu,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var h=this,E=h.options,R=E.labels,F=br.global,q=F.defaultColor,de=F.elements.line,ye=h.height,Ue=h.columnHeights,Oe=h.width,Xe=h.lineWidths;if(E.display){var ir,gt=rl(E.rtl,h.left,h.minSize.width),yt=h.ctx,nn=pc(R.fontColor,F.defaultFontColor),Pn=Ge.options._parseFont(R),xn=Pn.size;yt.textAlign=gt.textAlign("left"),yt.textBaseline="middle",yt.lineWidth=.5,yt.strokeStyle=nn,yt.fillStyle=nn,yt.font=Pn.string;var Gr=Kd(R,xn),Pi=h.legendHitBoxes,Gs=function(ha,ia){switch(E.align){case"start":return R.padding;case"end":return ha-ia;default:return(ha-ia+R.padding)/2}},Xs=h.isHorizontal();ir=Xs?{x:h.left+Gs(Oe,Xe[0]),y:h.top+R.padding,line:0}:{x:h.left+R.padding,y:h.top+Gs(ye,Ue[0]),line:0},Ge.rtl.overrideTextDirection(h.ctx,E.textDirection);var dl=xn+R.padding;Ge.each(h.legendItems,function(ha,ia){var Pa=yt.measureText(ha.text).width,il=Gr+xn/2+Pa,Eu=ir.x,wa=ir.y;gt.setWidth(h.minSize.width),Xs?ia>0&&Eu+il+R.padding>h.left+h.minSize.width&&(wa=ir.y+=dl,ir.line++,Eu=ir.x=h.left+Gs(Oe,Xe[ir.line])):ia>0&&wa+dl>h.top+h.minSize.height&&(Eu=ir.x=Eu+h.columnWidths[ir.line]+R.padding,ir.line++,wa=ir.y=h.top+Gs(ye,Ue[ir.line]));var ou=gt.x(Eu);(function(ha,ia,Pa){if(!(isNaN(Gr)||Gr<=0)){yt.save();var il=pc(Pa.lineWidth,de.borderWidth);if(yt.fillStyle=pc(Pa.fillStyle,q),yt.lineCap=pc(Pa.lineCap,de.borderCapStyle),yt.lineDashOffset=pc(Pa.lineDashOffset,de.borderDashOffset),yt.lineJoin=pc(Pa.lineJoin,de.borderJoinStyle),yt.lineWidth=il,yt.strokeStyle=pc(Pa.strokeStyle,q),yt.setLineDash&&yt.setLineDash(pc(Pa.lineDash,de.borderDash)),R&&R.usePointStyle){var Eu=Gr*Math.SQRT2/2,wa=gt.xPlus(ha,Gr/2);Ge.canvas.drawPoint(yt,Pa.pointStyle,Eu,wa,ia+xn/2,Pa.rotation)}else yt.fillRect(gt.leftForLtr(ha,Gr),ia,Gr,xn),0!==il&&yt.strokeRect(gt.leftForLtr(ha,Gr),ia,Gr,xn);yt.restore()}})(ou,wa,ha),Pi[ia].left=gt.leftForLtr(ou,Pi[ia].width),Pi[ia].top=wa,function(ha,ia,Pa,il){var Eu=xn/2,wa=gt.xPlus(ha,Gr+Eu),ou=ia+Eu;yt.fillText(Pa.text,wa,ou),Pa.hidden&&(yt.beginPath(),yt.lineWidth=2,yt.moveTo(wa,ou),yt.lineTo(gt.xPlus(wa,il),ou),yt.stroke())}(ou,wa,ha,Pa),Xs?ir.x+=il+R.padding:ir.y+=dl}),Ge.rtl.restoreTextDirection(h.ctx,E.textDirection)}},_getLegendItemAt:function(h,E){var F,q,de,R=this;if(h>=R.left&&h<=R.right&&E>=R.top&&E<=R.bottom)for(de=R.legendHitBoxes,F=0;F=(q=de[F]).left&&h<=q.left+q.width&&E>=q.top&&E<=q.top+q.height)return R.legendItems[F];return null},handleEvent:function(h){var q,E=this,R=E.options,F="mouseup"===h.type?"click":h.type;if("mousemove"===F){if(!R.onHover&&!R.onLeave)return}else{if("click"!==F)return;if(!R.onClick)return}q=E._getLegendItemAt(h.x,h.y),"click"===F?q&&R.onClick&&R.onClick.call(E,h.native,q):(R.onLeave&&q!==E._hoveredItem&&(E._hoveredItem&&R.onLeave.call(E,h.native,E._hoveredItem),E._hoveredItem=q),R.onHover&&q&&R.onHover.call(E,h.native,q))}});function Vl(h,E){var R=new wf({ctx:h.ctx,options:E,chart:h});Zl.configure(h,R,E),Zl.addBox(h,R),h.legend=R}var Id={id:"legend",_element:wf,beforeInit:function(h){var E=h.options.legend;E&&Vl(h,E)},beforeUpdate:function(h){var E=h.options.legend,R=h.legend;E?(Ge.mergeIf(E,br.global.legend),R?(Zl.configure(h,R,E),R.options=E):Vl(h,E)):R&&(Zl.removeBox(h,R),delete h.legend)},afterEvent:function(h,E){var R=h.legend;R&&R.handleEvent(E)}},oc=Ge.noop;br._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var hc=ar.extend({initialize:function(h){Ge.extend(this,h),this.legendHitBoxes=[]},beforeUpdate:oc,update:function(h,E,R){var F=this;return F.beforeUpdate(),F.maxWidth=h,F.maxHeight=E,F.margins=R,F.beforeSetDimensions(),F.setDimensions(),F.afterSetDimensions(),F.beforeBuildLabels(),F.buildLabels(),F.afterBuildLabels(),F.beforeFit(),F.fit(),F.afterFit(),F.afterUpdate(),F.minSize},afterUpdate:oc,beforeSetDimensions:oc,setDimensions:function(){var h=this;h.isHorizontal()?(h.width=h.maxWidth,h.left=0,h.right=h.width):(h.height=h.maxHeight,h.top=0,h.bottom=h.height),h.paddingLeft=0,h.paddingTop=0,h.paddingRight=0,h.paddingBottom=0,h.minSize={width:0,height:0}},afterSetDimensions:oc,beforeBuildLabels:oc,buildLabels:oc,afterBuildLabels:oc,beforeFit:oc,fit:function(){var de,h=this,E=h.options,R=h.minSize={},F=h.isHorizontal();E.display?(de=(Ge.isArray(E.text)?E.text.length:1)*Ge.options._parseFont(E).lineHeight+2*E.padding,h.width=R.width=F?h.maxWidth:de,h.height=R.height=F?de:h.maxHeight):h.width=R.width=h.height=R.height=0},afterFit:oc,isHorizontal:function(){var h=this.options.position;return"top"===h||"bottom"===h},draw:function(){var h=this,E=h.ctx,R=h.options;if(R.display){var yt,nn,Pn,F=Ge.options._parseFont(R),q=F.lineHeight,de=q/2+R.padding,ye=0,Ue=h.top,Oe=h.left,Xe=h.bottom,gt=h.right;E.fillStyle=Ge.valueOrDefault(R.fontColor,br.global.defaultFontColor),E.font=F.string,h.isHorizontal()?(nn=Oe+(gt-Oe)/2,Pn=Ue+de,yt=gt-Oe):(nn="left"===R.position?Oe+de:gt-de,Pn=Ue+(Xe-Ue)/2,yt=Xe-Ue,ye=Math.PI*("left"===R.position?-.5:.5)),E.save(),E.translate(nn,Pn),E.rotate(ye),E.textAlign="center",E.textBaseline="middle";var xn=R.text;if(Ge.isArray(xn))for(var ir=0,Gr=0;Gr=0;ye--){var Ue=F[ye];if(q(Ue))return Ue}},Ge.isNumber=function(F){return!isNaN(parseFloat(F))&&isFinite(F)},Ge.almostEquals=function(F,q,de){return Math.abs(F-q)=F},Ge.max=function(F){return F.reduce(function(q,de){return isNaN(de)?q:Math.max(q,de)},Number.NEGATIVE_INFINITY)},Ge.min=function(F){return F.reduce(function(q,de){return isNaN(de)?q:Math.min(q,de)},Number.POSITIVE_INFINITY)},Ge.sign=Math.sign?function(F){return Math.sign(F)}:function(F){return 0==(F=+F)||isNaN(F)?F:F>0?1:-1},Ge.toRadians=function(F){return F*(Math.PI/180)},Ge.toDegrees=function(F){return F*(180/Math.PI)},Ge._decimalPlaces=function(F){if(Ge.isFinite(F)){for(var q=1,de=0;Math.round(F*q)/q!==F;)q*=10,de++;return de}},Ge.getAngleFromPoint=function(F,q){var de=q.x-F.x,ye=q.y-F.y,Ue=Math.sqrt(de*de+ye*ye),Oe=Math.atan2(ye,de);return Oe<-.5*Math.PI&&(Oe+=2*Math.PI),{angle:Oe,distance:Ue}},Ge.distanceBetweenPoints=function(F,q){return Math.sqrt(Math.pow(q.x-F.x,2)+Math.pow(q.y-F.y,2))},Ge.aliasPixel=function(F){return F%2==0?0:.5},Ge._alignPixel=function(F,q,de){var ye=F.currentDevicePixelRatio,Ue=de/2;return Math.round((q-Ue)*ye)/ye+Ue},Ge.splineCurve=function(F,q,de,ye){var Ue=F.skip?q:F,Oe=q,Xe=de.skip?q:de,gt=Math.sqrt(Math.pow(Oe.x-Ue.x,2)+Math.pow(Oe.y-Ue.y,2)),yt=Math.sqrt(Math.pow(Xe.x-Oe.x,2)+Math.pow(Xe.y-Oe.y,2)),nn=gt/(gt+yt),Pn=yt/(gt+yt),xn=ye*(nn=isNaN(nn)?0:nn),ir=ye*(Pn=isNaN(Pn)?0:Pn);return{previous:{x:Oe.x-xn*(Xe.x-Ue.x),y:Oe.y-xn*(Xe.y-Ue.y)},next:{x:Oe.x+ir*(Xe.x-Ue.x),y:Oe.y+ir*(Xe.y-Ue.y)}}},Ge.EPSILON=Number.EPSILON||1e-14,Ge.splineCurveMonotone=function(F){var ye,Ue,Oe,Xe,yt,nn,Pn,xn,ir,q=(F||[]).map(function(Gr){return{model:Gr._model,deltaK:0,mK:0}}),de=q.length;for(ye=0;ye0?q[ye-1]:null,(Xe=ye0?q[ye-1]:null)&&!Ue.model.skip&&(Oe.model.controlPointPreviousX=Oe.model.x-(ir=(Oe.model.x-Ue.model.x)/3),Oe.model.controlPointPreviousY=Oe.model.y-ir*Oe.mK),Xe&&!Xe.model.skip&&(Oe.model.controlPointNextX=Oe.model.x+(ir=(Xe.model.x-Oe.model.x)/3),Oe.model.controlPointNextY=Oe.model.y+ir*Oe.mK))},Ge.nextItem=function(F,q,de){return de?q>=F.length-1?F[0]:F[q+1]:q>=F.length-1?F[F.length-1]:F[q+1]},Ge.previousItem=function(F,q,de){return de?q<=0?F[F.length-1]:F[q-1]:q<=0?F[0]:F[q-1]},Ge.niceNum=function(F,q){var de=Math.floor(Ge.log10(F)),ye=F/Math.pow(10,de);return(q?ye<1.5?1:ye<3?2:ye<7?5:10:ye<=1?1:ye<=2?2:ye<=5?5:10)*Math.pow(10,de)},Ge.requestAnimFrame="undefined"==typeof window?function(F){F()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(F){return window.setTimeout(F,1e3/60)},Ge.getRelativePosition=function(F,q){var de,ye,Ue=F.originalEvent||F,Oe=F.target||F.srcElement,Xe=Oe.getBoundingClientRect(),gt=Ue.touches;gt&>.length>0?(de=gt[0].clientX,ye=gt[0].clientY):(de=Ue.clientX,ye=Ue.clientY);var yt=parseFloat(Ge.getStyle(Oe,"padding-left")),nn=parseFloat(Ge.getStyle(Oe,"padding-top")),Pn=parseFloat(Ge.getStyle(Oe,"padding-right")),xn=parseFloat(Ge.getStyle(Oe,"padding-bottom")),Gr=Xe.bottom-Xe.top-nn-xn;return{x:de=Math.round((de-Xe.left-yt)/(Xe.right-Xe.left-yt-Pn)*Oe.width/q.currentDevicePixelRatio),y:ye=Math.round((ye-Xe.top-nn)/Gr*Oe.height/q.currentDevicePixelRatio)}},Ge.getConstraintWidth=function(F){return R(F,"max-width","clientWidth")},Ge.getConstraintHeight=function(F){return R(F,"max-height","clientHeight")},Ge._calculatePadding=function(F,q,de){return(q=Ge.getStyle(F,q)).indexOf("%")>-1?de*parseInt(q,10)/100:parseInt(q,10)},Ge._getParentNode=function(F){var q=F.parentNode;return q&&"[object ShadowRoot]"===q.toString()&&(q=q.host),q},Ge.getMaximumWidth=function(F){var q=Ge._getParentNode(F);if(!q)return F.clientWidth;var de=q.clientWidth,Oe=de-Ge._calculatePadding(q,"padding-left",de)-Ge._calculatePadding(q,"padding-right",de),Xe=Ge.getConstraintWidth(F);return isNaN(Xe)?Oe:Math.min(Oe,Xe)},Ge.getMaximumHeight=function(F){var q=Ge._getParentNode(F);if(!q)return F.clientHeight;var de=q.clientHeight,Oe=de-Ge._calculatePadding(q,"padding-top",de)-Ge._calculatePadding(q,"padding-bottom",de),Xe=Ge.getConstraintHeight(F);return isNaN(Xe)?Oe:Math.min(Oe,Xe)},Ge.getStyle=function(F,q){return F.currentStyle?F.currentStyle[q]:document.defaultView.getComputedStyle(F,null).getPropertyValue(q)},Ge.retinaScale=function(F,q){var de=F.currentDevicePixelRatio=q||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==de){var ye=F.canvas,Ue=F.height,Oe=F.width;ye.height=Ue*de,ye.width=Oe*de,F.ctx.scale(de,de),!ye.style.height&&!ye.style.width&&(ye.style.height=Ue+"px",ye.style.width=Oe+"px")}},Ge.fontString=function(F,q,de){return q+" "+F+"px "+de},Ge.longestText=function(F,q,de,ye){var Ue=(ye=ye||{}).data=ye.data||{},Oe=ye.garbageCollect=ye.garbageCollect||[];ye.font!==q&&(Ue=ye.data={},Oe=ye.garbageCollect=[],ye.font=q),F.font=q;var yt,nn,Pn,xn,ir,Xe=0,gt=de.length;for(yt=0;ytde.length){for(yt=0;ytye&&(ye=Oe),ye},Ge.numberOfLabelLines=function(F){var q=1;return Ge.each(F,function(de){Ge.isArray(de)&&de.length>q&&(q=de.length)}),q},Ge.color=Br?function(F){return F instanceof CanvasGradient&&(F=br.global.defaultColor),Br(F)}:function(F){return console.error("Color.js not found!"),F},Ge.getHoverColor=function(F){return F instanceof CanvasPattern||F instanceof CanvasGradient?F:Ge.color(F).saturate(.5).darken(.1).rgbString()}}(),mn._adapters=Io,mn.Animation=lo,mn.animationService=vo,mn.controllers=pi,mn.DatasetController=Mi,mn.defaults=br,mn.Element=ar,mn.elements=ls,mn.Interaction=sl,mn.layouts=Zl,mn.platform=Aa,mn.plugins=Ss,mn.Scale=Nl,mn.scaleService=$u,mn.Ticks=Fo,mn.Tooltip=bl,mn.helpers.each(_f,function(h,E){mn.scaleService.registerScaleType(E,h,h._defaults)}),Hc)Hc.hasOwnProperty(Rc)&&mn.plugins.register(Hc[Rc]);mn.platform.initialize();var bu=mn;return"undefined"!=typeof window&&(window.Chart=mn),mn.Chart=mn,mn.Legend=Hc.legend._element,mn.Title=Hc.title._element,mn.pluginService=mn.plugins,mn.PluginBase=mn.Element.extend({}),mn.canvasHelpers=mn.helpers.canvas,mn.layoutService=mn.layouts,mn.LinearScaleBase=al,mn.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(h){mn[h]=function(E,R){return new mn(E,mn.helpers.merge(R||{},{type:h.charAt(0).toLowerCase()+h.slice(1)}))}}),bu}(function(){try{return i(16738)}catch(p){}}())},82885:(v,T)=>{var r;!function(){"use strict";var u={}.hasOwnProperty;function p(){for(var d=[],e=0;e{v.exports=function(i,r){for(var u=[],p=0;p{"use strict";T.parse=function(S,A){if("string"!=typeof S)throw new TypeError("argument str must be a string");for(var N={},Z=(A||{}).decode||d,J=0;J{"use strict";var r=i(35311),u={"text/plain":"Text","text/html":"Url",default:"Text"};v.exports=function(_,y){var S,A,N,L,Z,J,K=!1;y||(y={}),S=y.debug||!1;try{if(N=r(),L=document.createRange(),Z=document.getSelection(),(J=document.createElement("span")).textContent=_,J.ariaHidden="true",J.style.all="unset",J.style.position="fixed",J.style.top=0,J.style.clip="rect(0, 0, 0, 0)",J.style.whiteSpace="pre",J.style.webkitUserSelect="text",J.style.MozUserSelect="text",J.style.msUserSelect="text",J.style.userSelect="text",J.addEventListener("copy",function(ue){ue.stopPropagation(),y.format&&(ue.preventDefault(),void 0===ue.clipboardData?(S&&console.warn("unable to use e.clipboardData"),S&&console.warn("trying IE specific stuff"),window.clipboardData.clearData(),window.clipboardData.setData(u[y.format]||u.default,_)):(ue.clipboardData.clearData(),ue.clipboardData.setData(y.format,_))),y.onCopy&&(ue.preventDefault(),y.onCopy(ue.clipboardData))}),document.body.appendChild(J),L.selectNodeContents(J),Z.addRange(L),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");K=!0}catch(ue){S&&console.error("unable to copy using execCommand: ",ue),S&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(y.format||"text",_),y.onCopy&&y.onCopy(window.clipboardData),K=!0}catch(ae){S&&console.error("unable to copy using clipboardData: ",ae),S&&console.error("falling back to prompt"),A=function(_){var y=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return _.replace(/#{\s*key\s*}/g,y)}("message"in y?y.message:"Copy to clipboard: #{key}, Enter"),window.prompt(A,_)}}finally{Z&&("function"==typeof Z.removeRange?Z.removeRange(L):Z.removeAllRanges()),J&&document.body.removeChild(J),N()}return K}},43987:(v,T,i)=>{var r=i(75242);v.exports=r},99556:(v,T,i)=>{var r=i(10323);v.exports=r},39287:(v,T,i)=>{var r=i(8748);v.exports=r},52964:(v,T,i)=>{var r=i(47506);v.exports=r},25272:(v,T,i)=>{var r=i(71873);v.exports=r},54450:(v,T,i)=>{var r=i(19095);v.exports=r},39557:(v,T,i)=>{var r=i(52049);v.exports=r},61611:(v,T,i)=>{var r=i(87054);v.exports=r},22549:(v,T,i)=>{var r=i(45284);v.exports=r},47646:(v,T,i)=>{var r=i(70157);v.exports=r},78663:(v,T,i)=>{var r=i(640);v.exports=r},48498:(v,T,i)=>{var r=i(50320);v.exports=r},4922:(v,T,i)=>{var r=i(93006);v.exports=r},95190:(v,T,i)=>{var r=i(36226);v.exports=r},78525:(v,T,i)=>{var r=i(21968);v.exports=r},21064:(v,T,i)=>{var r=i(87259);v.exports=r},65641:(v,T,i)=>{var r=i(62021);v.exports=r},21693:(v,T,i)=>{var r=i(57682);v.exports=r},88907:(v,T,i)=>{var r=i(94222);v.exports=r},41432:(v,T,i)=>{var r=i(1162);v.exports=r},7398:(v,T,i)=>{var r=i(82805);v.exports=r},67221:(v,T,i)=>{var r=i(26498);v.exports=r},67447:(v,T,i)=>{var r=i(44850);v.exports=r},58811:(v,T,i)=>{var r=i(9634);v.exports=r},19573:(v,T,i)=>{var r=i(96551);v.exports=r},10226:(v,T,i)=>{var r=i(98908);v.exports=r},74771:(v,T,i)=>{i(3934),i(261);var r=i(13544);v.exports=r.Array.from},8412:(v,T,i)=>{i(2862);var r=i(13544);v.exports=r.Array.isArray},77377:(v,T,i)=>{i(1625);var r=i(97911);v.exports=r("Array").concat},399:(v,T,i)=>{i(1285),i(17221);var r=i(97911);v.exports=r("Array").entries},66933:(v,T,i)=>{i(70466);var r=i(97911);v.exports=r("Array").every},9504:(v,T,i)=>{i(24990);var r=i(97911);v.exports=r("Array").fill},82168:(v,T,i)=>{i(56534);var r=i(97911);v.exports=r("Array").filter},65618:(v,T,i)=>{i(12773);var r=i(97911);v.exports=r("Array").findIndex},9186:(v,T,i)=>{i(60326);var r=i(97911);v.exports=r("Array").find},98812:(v,T,i)=>{i(98792);var r=i(97911);v.exports=r("Array").forEach},58479:(v,T,i)=>{i(77059);var r=i(97911);v.exports=r("Array").includes},43207:(v,T,i)=>{i(2795);var r=i(97911);v.exports=r("Array").indexOf},33195:(v,T,i)=>{i(1285),i(17221);var r=i(97911);v.exports=r("Array").keys},63033:(v,T,i)=>{i(74926);var r=i(97911);v.exports=r("Array").lastIndexOf},5736:(v,T,i)=>{i(88119);var r=i(97911);v.exports=r("Array").map},7198:(v,T,i)=>{i(46250);var r=i(97911);v.exports=r("Array").reduce},84302:(v,T,i)=>{i(32836);var r=i(97911);v.exports=r("Array").reverse},86693:(v,T,i)=>{i(72999);var r=i(97911);v.exports=r("Array").slice},24273:(v,T,i)=>{i(50733);var r=i(97911);v.exports=r("Array").some},45974:(v,T,i)=>{i(93639);var r=i(97911);v.exports=r("Array").sort},68012:(v,T,i)=>{i(63117);var r=i(97911);v.exports=r("Array").splice},46332:(v,T,i)=>{i(1285),i(17221);var r=i(97911);v.exports=r("Array").values},42618:(v,T,i)=>{i(34699);var r=i(13544);v.exports=r.Date.now},97724:(v,T,i)=>{i(33379);var r=i(97911);v.exports=r("Function").bind},63791:(v,T,i)=>{i(1285),i(3934);var r=i(34014);v.exports=r},27959:(v,T,i)=>{i(87404),v.exports=i(70009)},69029:(v,T,i)=>{var r=i(23336),u=i(97724),p=Function.prototype;v.exports=function(d){var e=d.bind;return d===p||r(p,d)&&e===p.bind?u:e}},28924:(v,T,i)=>{var r=i(23336),u=i(77377),p=Array.prototype;v.exports=function(d){var e=d.concat;return d===p||r(p,d)&&e===p.concat?u:e}},98709:(v,T,i)=>{var r=i(23336),u=i(66933),p=Array.prototype;v.exports=function(d){var e=d.every;return d===p||r(p,d)&&e===p.every?u:e}},65991:(v,T,i)=>{var r=i(23336),u=i(9504),p=Array.prototype;v.exports=function(d){var e=d.fill;return d===p||r(p,d)&&e===p.fill?u:e}},64158:(v,T,i)=>{var r=i(23336),u=i(82168),p=Array.prototype;v.exports=function(d){var e=d.filter;return d===p||r(p,d)&&e===p.filter?u:e}},91799:(v,T,i)=>{var r=i(23336),u=i(65618),p=Array.prototype;v.exports=function(d){var e=d.findIndex;return d===p||r(p,d)&&e===p.findIndex?u:e}},26155:(v,T,i)=>{var r=i(23336),u=i(9186),p=Array.prototype;v.exports=function(d){var e=d.find;return d===p||r(p,d)&&e===p.find?u:e}},33758:(v,T,i)=>{var r=i(23336),u=i(58479),p=i(85136),d=Array.prototype,e=String.prototype;v.exports=function(_){var y=_.includes;return _===d||r(d,_)&&y===d.includes?u:"string"==typeof _||_===e||r(e,_)&&y===e.includes?p:y}},7592:(v,T,i)=>{var r=i(23336),u=i(43207),p=Array.prototype;v.exports=function(d){var e=d.indexOf;return d===p||r(p,d)&&e===p.indexOf?u:e}},17480:(v,T,i)=>{var r=i(23336),u=i(63033),p=Array.prototype;v.exports=function(d){var e=d.lastIndexOf;return d===p||r(p,d)&&e===p.lastIndexOf?u:e}},20681:(v,T,i)=>{var r=i(23336),u=i(5736),p=Array.prototype;v.exports=function(d){var e=d.map;return d===p||r(p,d)&&e===p.map?u:e}},90949:(v,T,i)=>{var r=i(23336),u=i(7198),p=Array.prototype;v.exports=function(d){var e=d.reduce;return d===p||r(p,d)&&e===p.reduce?u:e}},99316:(v,T,i)=>{var r=i(23336),u=i(96302),p=String.prototype;v.exports=function(d){var e=d.repeat;return"string"==typeof d||d===p||r(p,d)&&e===p.repeat?u:e}},62212:(v,T,i)=>{var r=i(23336),u=i(84302),p=Array.prototype;v.exports=function(d){var e=d.reverse;return d===p||r(p,d)&&e===p.reverse?u:e}},49073:(v,T,i)=>{var r=i(23336),u=i(86693),p=Array.prototype;v.exports=function(d){var e=d.slice;return d===p||r(p,d)&&e===p.slice?u:e}},24146:(v,T,i)=>{var r=i(23336),u=i(24273),p=Array.prototype;v.exports=function(d){var e=d.some;return d===p||r(p,d)&&e===p.some?u:e}},40104:(v,T,i)=>{var r=i(23336),u=i(45974),p=Array.prototype;v.exports=function(d){var e=d.sort;return d===p||r(p,d)&&e===p.sort?u:e}},3555:(v,T,i)=>{var r=i(23336),u=i(68012),p=Array.prototype;v.exports=function(d){var e=d.splice;return d===p||r(p,d)&&e===p.splice?u:e}},68333:(v,T,i)=>{var r=i(23336),u=i(98720),p=String.prototype;v.exports=function(d){var e=d.startsWith;return"string"==typeof d||d===p||r(p,d)&&e===p.startsWith?u:e}},65786:(v,T,i)=>{var r=i(23336),u=i(75998),p=String.prototype;v.exports=function(d){var e=d.trim;return"string"==typeof d||d===p||r(p,d)&&e===p.trim?u:e}},66306:(v,T,i)=>{i(75071);var r=i(13544),u=i(2543);r.JSON||(r.JSON={stringify:JSON.stringify}),v.exports=function(d,e,_){return u(r.JSON.stringify,null,arguments)}},31845:(v,T,i)=>{i(1285),i(85140),i(17221),i(3934);var r=i(13544);v.exports=r.Map},44168:(v,T,i)=>{i(67234);var r=i(13544);v.exports=r.Object.assign},25852:(v,T,i)=>{i(86516);var u=i(13544).Object;v.exports=function(d,e){return u.create(d,e)}},24457:(v,T,i)=>{i(36255);var u=i(13544).Object,p=v.exports=function(e,_){return u.defineProperties(e,_)};u.defineProperties.sham&&(p.sham=!0)},99671:(v,T,i)=>{i(84468);var u=i(13544).Object,p=v.exports=function(e,_,y){return u.defineProperty(e,_,y)};u.defineProperty.sham&&(p.sham=!0)},35161:(v,T,i)=>{i(54989);var r=i(13544);v.exports=r.Object.entries},38007:(v,T,i)=>{i(86627);var u=i(13544).Object,p=v.exports=function(e,_){return u.getOwnPropertyDescriptor(e,_)};u.getOwnPropertyDescriptor.sham&&(p.sham=!0)},57432:(v,T,i)=>{i(78275);var r=i(13544);v.exports=r.Object.getOwnPropertyDescriptors},36541:(v,T,i)=>{i(56728);var r=i(13544);v.exports=r.Object.getOwnPropertySymbols},17303:(v,T,i)=>{i(31193);var r=i(13544);v.exports=r.Object.getPrototypeOf},62149:(v,T,i)=>{i(56557);var r=i(13544);v.exports=r.Object.keys},86537:(v,T,i)=>{i(17971);var r=i(13544);v.exports=r.Object.setPrototypeOf},79553:(v,T,i)=>{i(88923);var r=i(13544);v.exports=r.Object.values},80092:(v,T,i)=>{i(10901),i(1285),i(17221),i(66793),i(84798),i(98857),i(30185),i(3934);var r=i(13544);v.exports=r.Promise},472:(v,T,i)=>{i(19539);var r=i(13544);v.exports=r.Reflect.construct},4678:(v,T,i)=>{i(60851);var r=i(13544);v.exports=r.Reflect.get},85136:(v,T,i)=>{i(97764);var r=i(97911);v.exports=r("String").includes},96302:(v,T,i)=>{i(3588);var r=i(97911);v.exports=r("String").repeat},98720:(v,T,i)=>{i(24655);var r=i(97911);v.exports=r("String").startsWith},75998:(v,T,i)=>{i(90451);var r=i(97911);v.exports=r("String").trim},61697:(v,T,i)=>{i(1625),i(17221),i(56728),i(16426),i(1172),i(99579),i(41258),i(2383),i(44339),i(64776),i(88215),i(65389),i(12733),i(97977),i(59792),i(60242),i(26291),i(32300),i(63603),i(44864);var r=i(13544);v.exports=r.Symbol},42497:(v,T,i)=>{i(1285),i(17221),i(3934),i(2383);var r=i(89734);v.exports=r.f("iterator")},58255:(v,T,i)=>{i(1285),i(17221),i(90770);var r=i(13544);v.exports=r.WeakMap},56286:(v,T,i)=>{v.exports=i(73875)},54153:(v,T,i)=>{v.exports=i(91700)},90755:(v,T,i)=>{v.exports=i(70589)},60833:(v,T,i)=>{v.exports=i(6324)},98235:(v,T,i)=>{v.exports=i(71432)},78096:(v,T,i)=>{v.exports=i(73712)},31236:(v,T,i)=>{v.exports=i(58044)},15819:(v,T,i)=>{v.exports=i(55451)},44948:(v,T,i)=>{v.exports=i(61483)},96471:(v,T,i)=>{v.exports=i(46815)},5228:(v,T,i)=>{v.exports=i(28296)},50182:(v,T,i)=>{v.exports=i(96973)},41171:(v,T,i)=>{v.exports=i(47194)},54585:(v,T,i)=>{v.exports=i(56805)},62005:(v,T,i)=>{v.exports=i(32944)},39964:(v,T,i)=>{v.exports=i(70729)},70326:(v,T,i)=>{v.exports=i(48299)},98162:(v,T,i)=>{v.exports=i(33969)},42346:(v,T,i)=>{v.exports=i(26421)},4204:(v,T,i)=>{v.exports=i(37785)},24329:(v,T,i)=>{v.exports=i(15123)},2793:(v,T,i)=>{v.exports=i(49745)},42700:(v,T,i)=>{v.exports=i(29044)},70269:(v,T,i)=>{v.exports=i(20611)},88819:(v,T,i)=>{v.exports=i(65861)},55912:(v,T,i)=>{v.exports=i(63816)},73875:(v,T,i)=>{var r=i(43987);v.exports=r},91700:(v,T,i)=>{var r=i(99556);v.exports=r},70589:(v,T,i)=>{var r=i(39287);v.exports=r},6324:(v,T,i)=>{i(65237);var r=i(52964);v.exports=r},71432:(v,T,i)=>{var r=i(25272);v.exports=r},73712:(v,T,i)=>{var r=i(54450);v.exports=r},58044:(v,T,i)=>{var r=i(39557);v.exports=r},55451:(v,T,i)=>{var r=i(61611);v.exports=r},61483:(v,T,i)=>{var r=i(22549);v.exports=r},46815:(v,T,i)=>{var r=i(47646);v.exports=r},28296:(v,T,i)=>{var r=i(78663);i(78271),i(60854),i(10509),i(30887),i(54547),i(68996),i(1530),i(60176),i(41554),i(41688),i(92847),i(17316),i(58786),i(35517),i(12783),i(69773),i(22337),i(40199),i(69046),i(84131),v.exports=r},96973:(v,T,i)=>{var r=i(48498);v.exports=r},47194:(v,T,i)=>{var r=i(4922);v.exports=r},56805:(v,T,i)=>{var r=i(95190);v.exports=r},32944:(v,T,i)=>{var r=i(78525);v.exports=r},70729:(v,T,i)=>{var r=i(21064);v.exports=r},48299:(v,T,i)=>{var r=i(65641);v.exports=r},33969:(v,T,i)=>{var r=i(21693);v.exports=r},26421:(v,T,i)=>{var r=i(88907);v.exports=r},37785:(v,T,i)=>{var r=i(41432);v.exports=r},15123:(v,T,i)=>{var r=i(7398);v.exports=r},49745:(v,T,i)=>{var r=i(67221);i(67670),i(61127),i(93114),i(45975),v.exports=r},29044:(v,T,i)=>{var r=i(67447);v.exports=r},20611:(v,T,i)=>{var r=i(58811);v.exports=r},65861:(v,T,i)=>{var r=i(19573);i(55461),i(5737),i(87097),i(29559),i(90212),i(71985),i(93770),i(47743),v.exports=r},63816:(v,T,i)=>{var r=i(10226);v.exports=r},61812:(v,T,i)=>{var r=i(52208),u=i(7378),p=TypeError;v.exports=function(d){if(r(d))return d;throw p(u(d)+" is not a function")}},54356:(v,T,i)=>{var r=i(81177),u=i(7378),p=TypeError;v.exports=function(d){if(r(d))return d;throw p(u(d)+" is not a constructor")}},93221:(v,T,i)=>{var r=i(52208),u=String,p=TypeError;v.exports=function(d){if("object"==typeof d||r(d))return d;throw p("Can't set "+u(d)+" as a prototype")}},82196:v=>{v.exports=function(){}},54849:(v,T,i)=>{var r=i(23336),u=TypeError;v.exports=function(p,d){if(r(d,p))return p;throw u("Incorrect invocation")}},64562:(v,T,i)=>{var r=i(77293),u=String,p=TypeError;v.exports=function(d){if(r(d))return d;throw p(u(d)+" is not an object")}},76318:(v,T,i)=>{var r=i(55756);v.exports=r(function(){if("function"==typeof ArrayBuffer){var u=new ArrayBuffer(8);Object.isExtensible(u)&&Object.defineProperty(u,"a",{value:8})}})},35277:(v,T,i)=>{"use strict";var r=i(70267),u=i(19401),p=i(6381);v.exports=function(e){for(var _=r(this),y=p(_),S=arguments.length,A=u(S>1?arguments[1]:void 0,y),N=S>2?arguments[2]:void 0,L=void 0===N?y:u(N,y);L>A;)_[A++]=e;return _}},8366:(v,T,i)=>{"use strict";var r=i(68607).forEach,p=i(33620)("forEach");v.exports=p?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},51923:(v,T,i)=>{"use strict";var r=i(76781),u=i(25401),p=i(70267),d=i(93463),e=i(39918),_=i(81177),y=i(6381),S=i(46751),A=i(88055),N=i(34014),L=Array;v.exports=function(J){var K=p(J),ee=_(this),ue=arguments.length,ae=ue>1?arguments[1]:void 0,H=void 0!==ae;H&&(ae=r(ae,ue>2?arguments[2]:void 0));var ie,he,ge,De,ce,lt,se=N(K),Ee=0;if(!se||this===L&&e(se))for(ie=y(K),he=ee?new this(ie):L(ie);ie>Ee;Ee++)lt=H?ae(K[Ee],Ee):K[Ee],S(he,Ee,lt);else for(ce=(De=A(K,se)).next,he=ee?new this:[];!(ge=u(ce,De)).done;Ee++)lt=H?d(De,ae,[ge.value,Ee],!0):ge.value,S(he,Ee,lt);return he.length=Ee,he}},95171:(v,T,i)=>{var r=i(81010),u=i(19401),p=i(6381),d=function(e){return function(_,y,S){var Z,A=r(_),N=p(A),L=u(S,N);if(e&&y!=y){for(;N>L;)if((Z=A[L++])!=Z)return!0}else for(;N>L;L++)if((e||L in A)&&A[L]===y)return e||L||0;return!e&&-1}};v.exports={includes:d(!0),indexOf:d(!1)}},68607:(v,T,i)=>{var r=i(76781),u=i(23634),p=i(20973),d=i(70267),e=i(6381),_=i(2103),y=u([].push),S=function(A){var N=1==A,L=2==A,Z=3==A,J=4==A,K=6==A,ee=7==A,ue=5==A||K;return function(ae,H,se,Ee){for(var ze,Be,ie=d(ae),he=p(ie),ge=r(H,se),De=e(he),ce=0,lt=Ee||_,Ve=N?lt(ae,De):L||ee?lt(ae,0):void 0;De>ce;ce++)if((ue||ce in he)&&(Be=ge(ze=he[ce],ce,ie),A))if(N)Ve[ce]=Be;else if(Be)switch(A){case 3:return!0;case 5:return ze;case 6:return ce;case 2:y(Ve,ze)}else switch(A){case 4:return!1;case 7:y(Ve,ze)}return K?-1:Z||J?J:Ve}};v.exports={forEach:S(0),map:S(1),filter:S(2),some:S(3),every:S(4),find:S(5),findIndex:S(6),filterReject:S(7)}},78375:(v,T,i)=>{"use strict";var r=i(2543),u=i(81010),p=i(33912),d=i(6381),e=i(33620),_=Math.min,y=[].lastIndexOf,S=!!y&&1/[1].lastIndexOf(1,-0)<0,A=e("lastIndexOf");v.exports=S||!A?function(Z){if(S)return r(y,this,arguments)||0;var J=u(this),K=d(J),ee=K-1;for(arguments.length>1&&(ee=_(ee,p(arguments[1]))),ee<0&&(ee=K+ee);ee>=0;ee--)if(ee in J&&J[ee]===Z)return ee||0;return-1}:y},95913:(v,T,i)=>{var r=i(55756),u=i(91840),p=i(63556),d=u("species");v.exports=function(e){return p>=51||!r(function(){var _=[];return(_.constructor={})[d]=function(){return{foo:1}},1!==_[e](Boolean).foo})}},33620:(v,T,i)=>{"use strict";var r=i(55756);v.exports=function(u,p){var d=[][u];return!!d&&r(function(){d.call(null,p||function(){return 1},1)})}},88908:(v,T,i)=>{var r=i(61812),u=i(70267),p=i(20973),d=i(6381),e=TypeError,_=function(y){return function(S,A,N,L){r(A);var Z=u(S),J=p(Z),K=d(Z),ee=y?K-1:0,ue=y?-1:1;if(N<2)for(;;){if(ee in J){L=J[ee],ee+=ue;break}if(ee+=ue,y?ee<0:K<=ee)throw e("Reduce of empty array with no initial value")}for(;y?ee>=0:K>ee;ee+=ue)ee in J&&(L=A(L,J[ee],ee,Z));return L}};v.exports={left:_(!1),right:_(!0)}},54716:(v,T,i)=>{"use strict";var r=i(49642),u=i(89735),p=TypeError,d=Object.getOwnPropertyDescriptor,e=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(_){return _ instanceof TypeError}}();v.exports=e?function(_,y){if(u(_)&&!d(_,"length").writable)throw p("Cannot set read only .length");return _.length=y}:function(_,y){return _.length=y}},8681:(v,T,i)=>{var r=i(19401),u=i(6381),p=i(46751),d=Array,e=Math.max;v.exports=function(_,y,S){for(var A=u(_),N=r(y,A),L=r(void 0===S?A:S,A),Z=d(e(L-N,0)),J=0;N{var r=i(23634);v.exports=r([].slice)},84865:(v,T,i)=>{var r=i(8681),u=Math.floor,p=function(_,y){var S=_.length,A=u(S/2);return S<8?d(_,y):e(_,p(r(_,0,A),y),p(r(_,A),y),y)},d=function(_,y){for(var N,L,S=_.length,A=1;A0;)_[L]=_[--L];L!==A++&&(_[L]=N)}return _},e=function(_,y,S,A){for(var N=y.length,L=S.length,Z=0,J=0;Z{var r=i(89735),u=i(81177),p=i(77293),e=i(91840)("species"),_=Array;v.exports=function(y){var S;return r(y)&&(u(S=y.constructor)&&(S===_||r(S.prototype))||p(S)&&null===(S=S[e]))&&(S=void 0),void 0===S?_:S}},2103:(v,T,i)=>{var r=i(48045);v.exports=function(u,p){return new(r(u))(0===p?0:p)}},93463:(v,T,i)=>{var r=i(64562),u=i(40798);v.exports=function(p,d,e,_){try{return _?d(r(e)[0],e[1]):d(e)}catch(y){u(p,"throw",y)}}},5253:(v,T,i)=>{var u=i(91840)("iterator"),p=!1;try{var d=0,e={next:function(){return{done:!!d++}},return:function(){p=!0}};e[u]=function(){return this},Array.from(e,function(){throw 2})}catch(_){}v.exports=function(_,y){if(!y&&!p)return!1;var S=!1;try{var A={};A[u]=function(){return{next:function(){return{done:S=!0}}}},_(A)}catch(N){}return S}},49806:(v,T,i)=>{var r=i(23634),u=r({}.toString),p=r("".slice);v.exports=function(d){return p(u(d),8,-1)}},35329:(v,T,i)=>{var r=i(25014),u=i(52208),p=i(49806),e=i(91840)("toStringTag"),_=Object,y="Arguments"==p(function(){return arguments}());v.exports=r?p:function(A){var N,L,Z;return void 0===A?"Undefined":null===A?"Null":"string"==typeof(L=function(A,N){try{return A[N]}catch(L){}}(N=_(A),e))?L:y?p(N):"Object"==(Z=p(N))&&u(N.callee)?"Arguments":Z}},37353:(v,T,i)=>{"use strict";var r=i(25401),u=i(61812),p=i(64562);v.exports=function(){for(var S,e=p(this),_=u(e.delete),y=!0,A=0,N=arguments.length;A{"use strict";var r=i(76781),u=i(25401),p=i(61812),d=i(54356),e=i(43550),_=i(41605),y=[].push;v.exports=function(A){var Z,J,K,ee,N=arguments.length,L=N>1?arguments[1]:void 0;return d(this),(Z=void 0!==L)&&p(L),e(A)?new this:(J=[],Z?(K=0,ee=r(L,N>2?arguments[2]:void 0),_(A,function(ue){u(y,J,ee(ue,K++))})):_(A,y,{that:J}),new this(J))}},13067:(v,T,i)=>{"use strict";var r=i(37591);v.exports=function(){return new this(r(arguments))}},26650:(v,T,i)=>{"use strict";var r=i(48011).f,u=i(83272),p=i(84604),d=i(76781),e=i(54849),_=i(43550),y=i(41605),S=i(79077),A=i(28738),N=i(58014),L=i(49642),Z=i(57867).fastKey,J=i(91093),K=J.set,ee=J.getterFor;v.exports={getConstructor:function(ue,ae,H,se){var Ee=ue(function(ce,lt){e(ce,ie),K(ce,{type:ae,index:u(null),first:void 0,last:void 0,size:0}),L||(ce.size=0),_(lt)||y(lt,ce[se],{that:ce,AS_ENTRIES:H})}),ie=Ee.prototype,he=ee(ae),ge=function(ce,lt,Ve){var Pe,je,ze=he(ce),Be=De(ce,lt);return Be?Be.value=Ve:(ze.last=Be={index:je=Z(lt,!0),key:lt,value:Ve,previous:Pe=ze.last,next:void 0,removed:!1},ze.first||(ze.first=Be),Pe&&(Pe.next=Be),L?ze.size++:ce.size++,"F"!==je&&(ze.index[je]=Be)),ce},De=function(ce,lt){var Be,Ve=he(ce),ze=Z(lt);if("F"!==ze)return Ve.index[ze];for(Be=Ve.first;Be;Be=Be.next)if(Be.key==lt)return Be};return p(ie,{clear:function(){for(var Ve=he(this),ze=Ve.index,Be=Ve.first;Be;)Be.removed=!0,Be.previous&&(Be.previous=Be.previous.next=void 0),delete ze[Be.index],Be=Be.next;Ve.first=Ve.last=void 0,L?Ve.size=0:this.size=0},delete:function(ce){var Ve=he(this),ze=De(this,ce);if(ze){var Be=ze.next,Pe=ze.previous;delete Ve.index[ze.index],ze.removed=!0,Pe&&(Pe.next=Be),Be&&(Be.previous=Pe),Ve.first==ze&&(Ve.first=Be),Ve.last==ze&&(Ve.last=Pe),L?Ve.size--:this.size--}return!!ze},forEach:function(lt){for(var Be,Ve=he(this),ze=d(lt,arguments.length>1?arguments[1]:void 0);Be=Be?Be.next:Ve.first;)for(ze(Be.value,Be.key,this);Be&&Be.removed;)Be=Be.previous},has:function(lt){return!!De(this,lt)}}),p(ie,H?{get:function(lt){var Ve=De(this,lt);return Ve&&Ve.value},set:function(lt,Ve){return ge(this,0===lt?0:lt,Ve)}}:{add:function(lt){return ge(this,lt=0===lt?0:lt,lt)}}),L&&r(ie,"size",{get:function(){return he(this).size}}),Ee},setStrong:function(ue,ae,H){var se=ae+" Iterator",Ee=ee(ae),ie=ee(se);S(ue,ae,function(he,ge){K(this,{type:se,target:he,state:Ee(he),kind:ge,last:void 0})},function(){for(var he=ie(this),ge=he.kind,De=he.last;De&&De.removed;)De=De.previous;return he.target&&(he.last=De=De?De.next:he.state.first)?A("keys"==ge?De.key:"values"==ge?De.value:[De.key,De.value],!1):(he.target=void 0,A(void 0,!0))},H?"entries":"values",!H,!0),N(ae)}}},84049:(v,T,i)=>{"use strict";var r=i(23634),u=i(84604),p=i(57867).getWeakData,d=i(54849),e=i(64562),_=i(43550),y=i(77293),S=i(41605),A=i(68607),N=i(80112),L=i(91093),Z=L.set,J=L.getterFor,K=A.find,ee=A.findIndex,ue=r([].splice),ae=0,H=function(ie){return ie.frozen||(ie.frozen=new se)},se=function(){this.entries=[]},Ee=function(ie,he){return K(ie.entries,function(ge){return ge[0]===he})};se.prototype={get:function(ie){var he=Ee(this,ie);if(he)return he[1]},has:function(ie){return!!Ee(this,ie)},set:function(ie,he){var ge=Ee(this,ie);ge?ge[1]=he:this.entries.push([ie,he])},delete:function(ie){var he=ee(this.entries,function(ge){return ge[0]===ie});return~he&&ue(this.entries,he,1),!!~he}},v.exports={getConstructor:function(ie,he,ge,De){var ce=ie(function(Be,Pe){d(Be,lt),Z(Be,{type:he,id:ae++,frozen:void 0}),_(Pe)||S(Pe,Be[De],{that:Be,AS_ENTRIES:ge})}),lt=ce.prototype,Ve=J(he),ze=function(Be,Pe,je){var He=Ve(Be),Vt=p(e(Pe),!0);return!0===Vt?H(He).set(Pe,je):Vt[He.id]=je,Be};return u(lt,{delete:function(Be){var Pe=Ve(this);if(!y(Be))return!1;var je=p(Be);return!0===je?H(Pe).delete(Be):je&&N(je,Pe.id)&&delete je[Pe.id]},has:function(Pe){var je=Ve(this);if(!y(Pe))return!1;var He=p(Pe);return!0===He?H(je).has(Pe):He&&N(He,je.id)}}),u(lt,ge?{get:function(Pe){var je=Ve(this);if(y(Pe)){var He=p(Pe);return!0===He?H(je).get(Pe):He?He[je.id]:void 0}},set:function(Pe,je){return ze(this,Pe,je)}}:{add:function(Pe){return ze(this,Pe,!0)}}),ce}}},85116:(v,T,i)=>{"use strict";var r=i(90513),u=i(70009),p=i(57867),d=i(55756),e=i(65162),_=i(41605),y=i(54849),S=i(52208),A=i(77293),N=i(85681),L=i(48011).f,Z=i(68607).forEach,J=i(49642),K=i(91093),ee=K.set,ue=K.getterFor;v.exports=function(ae,H,se){var lt,Ee=-1!==ae.indexOf("Map"),ie=-1!==ae.indexOf("Weak"),he=Ee?"set":"add",ge=u[ae],De=ge&&ge.prototype,ce={};if(J&&S(ge)&&(ie||De.forEach&&!d(function(){(new ge).entries().next()}))){var Ve=(lt=H(function(Be,Pe){ee(y(Be,Ve),{type:ae,collection:new ge}),null!=Pe&&_(Pe,Be[he],{that:Be,AS_ENTRIES:Ee})})).prototype,ze=ue(ae);Z(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(Be){var Pe="add"==Be||"set"==Be;Be in De&&(!ie||"clear"!=Be)&&e(Ve,Be,function(je,He){var Vt=ze(this).collection;if(!Pe&&ie&&!A(je))return"get"==Be&&void 0;var it=Vt[Be](0===je?0:je,He);return Pe?this:it})}),ie||L(Ve,"size",{configurable:!0,get:function(){return ze(this).collection.size}})}else lt=se.getConstructor(H,ae,Ee,he),p.enable();return N(lt,ae,!1,!0),ce[ae]=lt,r({global:!0,forced:!0},ce),ie||se.setStrong(lt,ae,Ee),lt}},65031:(v,T,i)=>{var r=i(80112),u=i(59823),p=i(25525),d=i(48011);v.exports=function(e,_,y){for(var S=u(_),A=d.f,N=p.f,L=0;L{var u=i(91840)("match");v.exports=function(p){var d=/./;try{"/./"[p](d)}catch(e){try{return d[u]=!1,"/./"[p](d)}catch(_){}}return!1}},37112:(v,T,i)=>{var r=i(55756);v.exports=!r(function(){function u(){}return u.prototype.constructor=null,Object.getPrototypeOf(new u)!==u.prototype})},28738:v=>{v.exports=function(T,i){return{value:T,done:i}}},65162:(v,T,i)=>{var r=i(49642),u=i(48011),p=i(51361);v.exports=r?function(d,e,_){return u.f(d,e,p(1,_))}:function(d,e,_){return d[e]=_,d}},51361:v=>{v.exports=function(T,i){return{enumerable:!(1&T),configurable:!(2&T),writable:!(4&T),value:i}}},46751:(v,T,i)=>{"use strict";var r=i(62939),u=i(48011),p=i(51361);v.exports=function(d,e,_){var y=r(e);y in d?u.f(d,y,p(0,_)):d[y]=_}},1707:(v,T,i)=>{var r=i(48011);v.exports=function(u,p,d){return r.f(u,p,d)}},42915:(v,T,i)=>{var r=i(65162);v.exports=function(u,p,d,e){return e&&e.enumerable?u[p]=d:r(u,p,d),u}},84604:(v,T,i)=>{var r=i(42915);v.exports=function(u,p,d){for(var e in p)d&&d.unsafe&&u[e]?u[e]=p[e]:r(u,e,p[e],d);return u}},34056:(v,T,i)=>{var r=i(70009),u=Object.defineProperty;v.exports=function(p,d){try{u(r,p,{value:d,configurable:!0,writable:!0})}catch(e){r[p]=d}return d}},67236:(v,T,i)=>{"use strict";var r=i(7378),u=TypeError;v.exports=function(p,d){if(!delete p[d])throw u("Cannot delete property "+r(d)+" of "+r(p))}},49642:(v,T,i)=>{var r=i(55756);v.exports=!r(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},96682:(v,T,i)=>{var r=i(70009),u=i(77293),p=r.document,d=u(p)&&u(p.createElement);v.exports=function(e){return d?p.createElement(e):{}}},11594:v=>{var T=TypeError;v.exports=function(r){if(r>9007199254740991)throw T("Maximum allowed index exceeded");return r}},44125:v=>{v.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},36410:(v,T,i)=>{var u=i(86053).match(/firefox\/(\d+)/i);v.exports=!!u&&+u[1]},34008:(v,T,i)=>{var r=i(31813),u=i(3787);v.exports=!r&&!u&&"object"==typeof window&&"object"==typeof document},31813:v=>{v.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},5329:(v,T,i)=>{var r=i(86053);v.exports=/MSIE|Trident/.test(r)},16137:(v,T,i)=>{var r=i(86053),u=i(70009);v.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==u.Pebble},3877:(v,T,i)=>{var r=i(86053);v.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},3787:(v,T,i)=>{var r=i(49806),u=i(70009);v.exports="process"==r(u.process)},85308:(v,T,i)=>{var r=i(86053);v.exports=/web0s(?!.*chrome)/i.test(r)},86053:(v,T,i)=>{var r=i(7365);v.exports=r("navigator","userAgent")||""},63556:(v,T,i)=>{var y,S,r=i(70009),u=i(86053),p=r.process,d=r.Deno,e=p&&p.versions||d&&d.version,_=e&&e.v8;_&&(S=(y=_.split("."))[0]>0&&y[0]<4?1:+(y[0]+y[1])),!S&&u&&(!(y=u.match(/Edge\/(\d+)/))||y[1]>=74)&&(y=u.match(/Chrome\/(\d+)/))&&(S=+y[1]),v.exports=S},34545:(v,T,i)=>{var u=i(86053).match(/AppleWebKit\/(\d+)\./);v.exports=!!u&&+u[1]},97911:(v,T,i)=>{var r=i(13544);v.exports=function(u){return r[u+"Prototype"]}},44939:v=>{v.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},40039:(v,T,i)=>{var r=i(23634),u=Error,p=r("".replace),d=String(u("zxcasd").stack),e=/\n\s*at [^:]*:[^\n]*/,_=e.test(d);v.exports=function(y,S){if(_&&"string"==typeof y&&!u.prepareStackTrace)for(;S--;)y=p(y,e,"");return y}},50499:(v,T,i)=>{var r=i(55756),u=i(51361);v.exports=!r(function(){var p=Error("a");return!("stack"in p)||(Object.defineProperty(p,"stack",u(1,7)),7!==p.stack)})},90513:(v,T,i)=>{"use strict";var r=i(70009),u=i(2543),p=i(23634),d=i(52208),e=i(25525).f,_=i(79482),y=i(13544),S=i(76781),A=i(65162),N=i(80112),L=function(Z){var J=function(K,ee,ue){if(this instanceof J){switch(arguments.length){case 0:return new Z;case 1:return new Z(K);case 2:return new Z(K,ee)}return new Z(K,ee,ue)}return u(Z,this,arguments)};return J.prototype=Z.prototype,J};v.exports=function(Z,J){var he,ge,De,ce,lt,Ve,ze,Be,K=Z.target,ee=Z.global,ue=Z.stat,ae=Z.proto,H=ee?r:ue?r[K]:(r[K]||{}).prototype,se=ee?y:y[K]||A(y,K,{})[K],Ee=se.prototype;for(De in J)he=!_(ee?De:K+(ue?".":"#")+De,Z.forced)&&H&&N(H,De),lt=se[De],he&&(Ve=Z.dontCallGetSet?(Be=e(H,De))&&Be.value:H[De]),ce=he&&Ve?Ve:J[De],(!he||typeof lt!=typeof ce)&&(ze=Z.bind&&he?S(ce,r):Z.wrap&&he?L(ce):ae&&d(ce)?p(ce):ce,(Z.sham||ce&&ce.sham||lt&<.sham)&&A(ze,"sham",!0),A(se,De,ze),ae&&(N(y,ge=K+"Prototype")||A(y,ge,{}),A(y[ge],De,ce),Z.real&&Ee&&!Ee[De]&&A(Ee,De,ce)))}},55756:v=>{v.exports=function(T){try{return!!T()}catch(i){return!0}}},3124:(v,T,i)=>{var r=i(55756);v.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},2543:(v,T,i)=>{var r=i(29046),u=Function.prototype,p=u.apply,d=u.call;v.exports="object"==typeof Reflect&&Reflect.apply||(r?d.bind(p):function(){return d.apply(p,arguments)})},76781:(v,T,i)=>{var r=i(23634),u=i(61812),p=i(29046),d=r(r.bind);v.exports=function(e,_){return u(e),void 0===_?e:p?d(e,_):function(){return e.apply(_,arguments)}}},29046:(v,T,i)=>{var r=i(55756);v.exports=!r(function(){var u=function(){}.bind();return"function"!=typeof u||u.hasOwnProperty("prototype")})},44197:(v,T,i)=>{"use strict";var r=i(23634),u=i(61812),p=i(77293),d=i(80112),e=i(37591),_=i(29046),y=Function,S=r([].concat),A=r([].join),N={},L=function(Z,J,K){if(!d(N,J)){for(var ee=[],ue=0;ue{var r=i(29046),u=Function.prototype.call;v.exports=r?u.bind(u):function(){return u.apply(u,arguments)}},29862:(v,T,i)=>{var r=i(49642),u=i(80112),p=Function.prototype,d=r&&Object.getOwnPropertyDescriptor,e=u(p,"name"),_=e&&"something"===function(){}.name,y=e&&(!r||r&&d(p,"name").configurable);v.exports={EXISTS:e,PROPER:_,CONFIGURABLE:y}},23634:(v,T,i)=>{var r=i(29046),u=Function.prototype,d=u.call,e=r&&u.bind.bind(d,d);v.exports=r?function(_){return _&&e(_)}:function(_){return _&&function(){return d.apply(_,arguments)}}},7365:(v,T,i)=>{var r=i(13544),u=i(70009),p=i(52208),d=function(e){return p(e)?e:void 0};v.exports=function(e,_){return arguments.length<2?d(r[e])||d(u[e]):r[e]&&r[e][_]||u[e]&&u[e][_]}},34014:(v,T,i)=>{var r=i(35329),u=i(34778),p=i(43550),d=i(84394),_=i(91840)("iterator");v.exports=function(y){if(!p(y))return u(y,_)||u(y,"@@iterator")||d[r(y)]}},88055:(v,T,i)=>{var r=i(25401),u=i(61812),p=i(64562),d=i(7378),e=i(34014),_=TypeError;v.exports=function(y,S){var A=arguments.length<2?e(y):S;if(u(A))return p(r(A,y));throw _(d(y)+" is not iterable")}},37444:(v,T,i)=>{var r=i(88055);v.exports=r},34778:(v,T,i)=>{var r=i(61812),u=i(43550);v.exports=function(p,d){var e=p[d];return u(e)?void 0:r(e)}},70009:v=>{var T=function(i){return i&&i.Math==Math&&i};v.exports=T("object"==typeof globalThis&&globalThis)||T("object"==typeof window&&window)||T("object"==typeof self&&self)||T("object"==typeof global&&global)||function(){return this}()||Function("return this")()},80112:(v,T,i)=>{var r=i(23634),u=i(70267),p=r({}.hasOwnProperty);v.exports=Object.hasOwn||function(e,_){return p(u(e),_)}},45599:v=>{v.exports={}},52912:(v,T,i)=>{var r=i(70009);v.exports=function(u,p){var d=r.console;d&&d.error&&(1==arguments.length?d.error(u):d.error(u,p))}},55690:(v,T,i)=>{var r=i(7365);v.exports=r("document","documentElement")},50495:(v,T,i)=>{var r=i(49642),u=i(55756),p=i(96682);v.exports=!r&&!u(function(){return 7!=Object.defineProperty(p("div"),"a",{get:function(){return 7}}).a})},20973:(v,T,i)=>{var r=i(23634),u=i(55756),p=i(49806),d=Object,e=r("".split);v.exports=u(function(){return!d("z").propertyIsEnumerable(0)})?function(_){return"String"==p(_)?e(_,""):d(_)}:d},26699:(v,T,i)=>{var r=i(23634),u=i(52208),p=i(24766),d=r(Function.toString);u(p.inspectSource)||(p.inspectSource=function(e){return d(e)}),v.exports=p.inspectSource},33411:(v,T,i)=>{var r=i(77293),u=i(65162);v.exports=function(p,d){r(d)&&"cause"in d&&u(p,"cause",d.cause)}},57867:(v,T,i)=>{var r=i(90513),u=i(23634),p=i(45599),d=i(77293),e=i(80112),_=i(48011).f,y=i(51518),S=i(62469),A=i(46401),N=i(13708),L=i(3124),Z=!1,J=N("meta"),K=0,ee=function(ie){_(ie,J,{value:{objectID:"O"+K++,weakData:{}}})},Ee=v.exports={enable:function(){Ee.enable=function(){},Z=!0;var ie=y.f,he=u([].splice),ge={};ge[J]=1,ie(ge).length&&(y.f=function(De){for(var ce=ie(De),lt=0,Ve=ce.length;lt{var J,K,ee,r=i(81101),u=i(70009),p=i(23634),d=i(77293),e=i(65162),_=i(80112),y=i(24766),S=i(86066),A=i(45599),N="Object already initialized",L=u.TypeError;if(r||y.state){var H=y.state||(y.state=new(0,u.WeakMap)),se=p(H.get),Ee=p(H.has),ie=p(H.set);J=function(ge,De){if(Ee(H,ge))throw L(N);return De.facade=ge,ie(H,ge,De),De},K=function(ge){return se(H,ge)||{}},ee=function(ge){return Ee(H,ge)}}else{var he=S("state");A[he]=!0,J=function(ge,De){if(_(ge,he))throw L(N);return De.facade=ge,e(ge,he,De),De},K=function(ge){return _(ge,he)?ge[he]:{}},ee=function(ge){return _(ge,he)}}v.exports={set:J,get:K,has:ee,enforce:function(ge){return ee(ge)?K(ge):J(ge,{})},getterFor:function(ge){return function(De){var ce;if(!d(De)||(ce=K(De)).type!==ge)throw L("Incompatible receiver, "+ge+" required");return ce}}}},39918:(v,T,i)=>{var r=i(91840),u=i(84394),p=r("iterator"),d=Array.prototype;v.exports=function(e){return void 0!==e&&(u.Array===e||d[p]===e)}},89735:(v,T,i)=>{var r=i(49806);v.exports=Array.isArray||function(p){return"Array"==r(p)}},52208:v=>{v.exports=function(T){return"function"==typeof T}},81177:(v,T,i)=>{var r=i(23634),u=i(55756),p=i(52208),d=i(35329),e=i(7365),_=i(26699),y=function(){},S=[],A=e("Reflect","construct"),N=/^\s*(?:class|function)\b/,L=r(N.exec),Z=!N.exec(y),J=function(ue){if(!p(ue))return!1;try{return A(y,S,ue),!0}catch(ae){return!1}},K=function(ue){if(!p(ue))return!1;switch(d(ue)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Z||!!L(N,_(ue))}catch(ae){return!0}};K.sham=!0,v.exports=!A||u(function(){var ee;return J(J.call)||!J(Object)||!J(function(){ee=!0})||ee})?K:J},27029:(v,T,i)=>{var r=i(80112);v.exports=function(u){return void 0!==u&&(r(u,"value")||r(u,"writable"))}},79482:(v,T,i)=>{var r=i(55756),u=i(52208),p=/#|\.prototype\./,d=function(A,N){var L=_[e(A)];return L==S||L!=y&&(u(N)?r(N):!!N)},e=d.normalize=function(A){return String(A).replace(p,".").toLowerCase()},_=d.data={},y=d.NATIVE="N",S=d.POLYFILL="P";v.exports=d},43550:v=>{v.exports=function(T){return null==T}},77293:(v,T,i)=>{var r=i(52208),u="object"==typeof document&&document.all;v.exports=void 0===u&&void 0!==u?function(d){return"object"==typeof d?null!==d:r(d)||d===u}:function(d){return"object"==typeof d?null!==d:r(d)}},81124:v=>{v.exports=!0},60373:(v,T,i)=>{var r=i(77293),u=i(49806),d=i(91840)("match");v.exports=function(e){var _;return r(e)&&(void 0!==(_=e[d])?!!_:"RegExp"==u(e))}},74717:(v,T,i)=>{var r=i(7365),u=i(52208),p=i(23336),d=i(99554),e=Object;v.exports=d?function(_){return"symbol"==typeof _}:function(_){var y=r("Symbol");return u(y)&&p(y.prototype,e(_))}},41605:(v,T,i)=>{var r=i(76781),u=i(25401),p=i(64562),d=i(7378),e=i(39918),_=i(6381),y=i(23336),S=i(88055),A=i(34014),N=i(40798),L=TypeError,Z=function(K,ee){this.stopped=K,this.result=ee},J=Z.prototype;v.exports=function(K,ee,ue){var ge,De,ce,lt,Ve,ze,Be,H=!(!ue||!ue.AS_ENTRIES),se=!(!ue||!ue.IS_RECORD),Ee=!(!ue||!ue.IS_ITERATOR),ie=!(!ue||!ue.INTERRUPTED),he=r(ee,ue&&ue.that),Pe=function(He){return ge&&N(ge,"normal",He),new Z(!0,He)},je=function(He){return H?(p(He),ie?he(He[0],He[1],Pe):he(He[0],He[1])):ie?he(He,Pe):he(He)};if(se)ge=K.iterator;else if(Ee)ge=K;else{if(!(De=A(K)))throw L(d(K)+" is not iterable");if(e(De)){for(ce=0,lt=_(K);lt>ce;ce++)if((Ve=je(K[ce]))&&y(J,Ve))return Ve;return new Z(!1)}ge=S(K,De)}for(ze=se?K.next:ge.next;!(Be=u(ze,ge)).done;){try{Ve=je(Be.value)}catch(He){N(ge,"throw",He)}if("object"==typeof Ve&&Ve&&y(J,Ve))return Ve}return new Z(!1)}},40798:(v,T,i)=>{var r=i(25401),u=i(64562),p=i(34778);v.exports=function(d,e,_){var y,S;u(d);try{if(!(y=p(d,"return"))){if("throw"===e)throw _;return _}y=r(y,d)}catch(A){S=!0,y=A}if("throw"===e)throw _;if(S)throw y;return u(y),_}},14554:(v,T,i)=>{"use strict";var r=i(38432).IteratorPrototype,u=i(83272),p=i(51361),d=i(85681),e=i(84394),_=function(){return this};v.exports=function(y,S,A,N){var L=S+" Iterator";return y.prototype=u(r,{next:p(+!N,A)}),d(y,L,!1,!0),e[L]=_,y}},79077:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(81124),d=i(29862),e=i(52208),_=i(14554),y=i(31426),S=i(54945),A=i(85681),N=i(65162),L=i(42915),Z=i(91840),J=i(84394),K=i(38432),ee=d.PROPER,ue=d.CONFIGURABLE,ae=K.IteratorPrototype,H=K.BUGGY_SAFARI_ITERATORS,se=Z("iterator"),ie="values",he="entries",ge=function(){return this};v.exports=function(De,ce,lt,Ve,ze,Be,Pe){_(lt,ce,Ve);var Ut,Bt,bt,je=function(Gt){if(Gt===ze&&It)return It;if(!H&&Gt in it)return it[Gt];switch(Gt){case"keys":case ie:case he:return function(){return new lt(this,Gt)}}return function(){return new lt(this)}},He=ce+" Iterator",Vt=!1,it=De.prototype,tn=it[se]||it["@@iterator"]||ze&&it[ze],It=!H&&tn||je(ze),Zt="Array"==ce&&it.entries||tn;if(Zt&&(Ut=y(Zt.call(new De)))!==Object.prototype&&Ut.next&&(!p&&y(Ut)!==ae&&(S?S(Ut,ae):e(Ut[se])||L(Ut,se,ge)),A(Ut,He,!0,!0),p&&(J[He]=ge)),ee&&ze==ie&&tn&&tn.name!==ie&&(!p&&ue?N(it,"name",ie):(Vt=!0,It=function(){return u(tn,this)})),ze)if(Bt={values:je(ie),keys:Be?It:je("keys"),entries:je(he)},Pe)for(bt in Bt)(H||Vt||!(bt in it))&&L(it,bt,Bt[bt]);else r({target:ce,proto:!0,forced:H||Vt},Bt);return(!p||Pe)&&it[se]!==It&&L(it,se,It,{name:ze}),J[ce]=It,Bt}},38432:(v,T,i)=>{"use strict";var L,Z,J,r=i(55756),u=i(52208),p=i(77293),d=i(83272),e=i(31426),_=i(42915),y=i(91840),S=i(81124),A=y("iterator"),N=!1;[].keys&&("next"in(J=[].keys())?(Z=e(e(J)))!==Object.prototype&&(L=Z):N=!0),!p(L)||r(function(){var ee={};return L[A].call(ee)!==ee})?L={}:S&&(L=d(L)),u(L[A])||_(L,A,function(){return this}),v.exports={IteratorPrototype:L,BUGGY_SAFARI_ITERATORS:N}},84394:v=>{v.exports={}},6381:(v,T,i)=>{var r=i(48869);v.exports=function(u){return r(u.length)}},12864:(v,T,i)=>{"use strict";var r=i(25401),u=i(61812),p=i(64562);v.exports=function(e,_){var L,Z,y=p(this),S=u(y.get),A=u(y.has),N=u(y.set);return r(A,y,e)?(L=r(S,y,e),"update"in _&&(L=_.update(L,e,y),r(N,y,e,L)),L):(Z=_.insert(e,y),r(N,y,e,Z),Z)}},57729:(v,T,i)=>{"use strict";var r=i(25401),u=i(61812),p=i(52208),d=i(64562),e=TypeError;v.exports=function(y,S){var K,A=d(this),N=u(A.get),L=u(A.has),Z=u(A.set),J=arguments.length>2?arguments[2]:void 0;if(!p(S)&&!p(J))throw e("At least one callback required");return r(L,A,y)?(K=r(N,A,y),p(S)&&(K=S(K),r(Z,A,y,K))):p(J)&&(K=J(),r(Z,A,y,K)),K}},8651:v=>{var T=Math.ceil,i=Math.floor;v.exports=Math.trunc||function(u){var p=+u;return(p>0?i:T)(p)}},58991:(v,T,i)=>{var ee,ue,ae,H,se,Ee,ie,he,r=i(70009),u=i(76781),p=i(25525).f,d=i(37352).set,e=i(3877),_=i(16137),y=i(85308),S=i(3787),A=r.MutationObserver||r.WebKitMutationObserver,N=r.document,L=r.process,Z=r.Promise,J=p(r,"queueMicrotask"),K=J&&J.value;K||(ee=function(){var ge,De;for(S&&(ge=L.domain)&&ge.exit();ue;){De=ue.fn,ue=ue.next;try{De()}catch(ce){throw ue?H():ae=void 0,ce}}ae=void 0,ge&&ge.enter()},e||S||y||!A||!N?!_&&Z&&Z.resolve?((ie=Z.resolve(void 0)).constructor=Z,he=u(ie.then,ie),H=function(){he(ee)}):S?H=function(){L.nextTick(ee)}:(d=u(d,r),H=function(){d(ee)}):(se=!0,Ee=N.createTextNode(""),new A(ee).observe(Ee,{characterData:!0}),H=function(){Ee.data=se=!se})),v.exports=K||function(ge){var De={fn:ge,next:void 0};ae&&(ae.next=De),ue||(ue=De,H()),ae=De}},54256:(v,T,i)=>{"use strict";var r=i(61812),u=TypeError,p=function(d){var e,_;this.promise=new d(function(y,S){if(void 0!==e||void 0!==_)throw u("Bad Promise constructor");e=y,_=S}),this.resolve=r(e),this.reject=r(_)};v.exports.f=function(d){return new p(d)}},63313:(v,T,i)=>{var r=i(41433);v.exports=function(u,p){return void 0===u?arguments.length<2?"":p:r(u)}},56421:(v,T,i)=>{var r=i(60373),u=TypeError;v.exports=function(p){if(r(p))throw u("The method doesn't accept regular expressions");return p}},75791:(v,T,i)=>{"use strict";var r=i(49642),u=i(23634),p=i(25401),d=i(55756),e=i(28474),_=i(47238),y=i(25558),S=i(70267),A=i(20973),N=Object.assign,L=Object.defineProperty,Z=u([].concat);v.exports=!N||d(function(){if(r&&1!==N({b:1},N(L({},"a",{enumerable:!0,get:function(){L(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var J={},K={},ee=Symbol(),ue="abcdefghijklmnopqrst";return J[ee]=7,ue.split("").forEach(function(ae){K[ae]=ae}),7!=N({},J)[ee]||e(N({},K)).join("")!=ue})?function(K,ee){for(var ue=S(K),ae=arguments.length,H=1,se=_.f,Ee=y.f;ae>H;)for(var ce,ie=A(arguments[H++]),he=se?Z(e(ie),se(ie)):e(ie),ge=he.length,De=0;ge>De;)ce=he[De++],(!r||p(Ee,ie,ce))&&(ue[ce]=ie[ce]);return ue}:N},83272:(v,T,i)=>{var ae,r=i(64562),u=i(25913),p=i(44939),d=i(45599),e=i(55690),_=i(96682),y=i(86066),N="prototype",L="script",Z=y("IE_PROTO"),J=function(){},K=function(se){return"<"+L+">"+se+""},ee=function(se){se.write(K("")),se.close();var Ee=se.parentWindow.Object;return se=null,Ee},H=function(){try{ae=new ActiveXObject("htmlfile")}catch(Ee){}H="undefined"!=typeof document?document.domain&&ae?ee(ae):function(){var ie,se=_("iframe");return se.style.display="none",e.appendChild(se),se.src=String("javascript:"),(ie=se.contentWindow.document).open(),ie.write(K("document.F=Object")),ie.close(),ie.F}():ee(ae);for(var se=p.length;se--;)delete H[N][p[se]];return H()};d[Z]=!0,v.exports=Object.create||function(Ee,ie){var he;return null!==Ee?(J[N]=r(Ee),he=new J,J[N]=null,he[Z]=Ee):he=H(),void 0===ie?he:u.f(he,ie)}},25913:(v,T,i)=>{var r=i(49642),u=i(47960),p=i(48011),d=i(64562),e=i(81010),_=i(28474);T.f=r&&!u?Object.defineProperties:function(S,A){d(S);for(var K,N=e(A),L=_(A),Z=L.length,J=0;Z>J;)p.f(S,K=L[J++],N[K]);return S}},48011:(v,T,i)=>{var r=i(49642),u=i(50495),p=i(47960),d=i(64562),e=i(62939),_=TypeError,y=Object.defineProperty,S=Object.getOwnPropertyDescriptor,A="enumerable",N="configurable",L="writable";T.f=r?p?function(J,K,ee){if(d(J),K=e(K),d(ee),"function"==typeof J&&"prototype"===K&&"value"in ee&&L in ee&&!ee[L]){var ue=S(J,K);ue&&ue[L]&&(J[K]=ee.value,ee={configurable:N in ee?ee[N]:ue[N],enumerable:A in ee?ee[A]:ue[A],writable:!1})}return y(J,K,ee)}:y:function(J,K,ee){if(d(J),K=e(K),d(ee),u)try{return y(J,K,ee)}catch(ue){}if("get"in ee||"set"in ee)throw _("Accessors not supported");return"value"in ee&&(J[K]=ee.value),J}},25525:(v,T,i)=>{var r=i(49642),u=i(25401),p=i(25558),d=i(51361),e=i(81010),_=i(62939),y=i(80112),S=i(50495),A=Object.getOwnPropertyDescriptor;T.f=r?A:function(L,Z){if(L=e(L),Z=_(Z),S)try{return A(L,Z)}catch(J){}if(y(L,Z))return d(!u(p.f,L,Z),L[Z])}},62469:(v,T,i)=>{var r=i(49806),u=i(81010),p=i(51518).f,d=i(8681),e="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];v.exports.f=function(S){return e&&"Window"==r(S)?function(y){try{return p(y)}catch(S){return d(e)}}(S):p(u(S))}},51518:(v,T,i)=>{var r=i(66250),p=i(44939).concat("length","prototype");T.f=Object.getOwnPropertyNames||function(e){return r(e,p)}},47238:(v,T)=>{T.f=Object.getOwnPropertySymbols},31426:(v,T,i)=>{var r=i(80112),u=i(52208),p=i(70267),d=i(86066),e=i(37112),_=d("IE_PROTO"),y=Object,S=y.prototype;v.exports=e?y.getPrototypeOf:function(A){var N=p(A);if(r(N,_))return N[_];var L=N.constructor;return u(L)&&N instanceof L?L.prototype:N instanceof y?S:null}},46401:(v,T,i)=>{var r=i(55756),u=i(77293),p=i(49806),d=i(76318),e=Object.isExtensible,_=r(function(){e(1)});v.exports=_||d?function(S){return!(!u(S)||d&&"ArrayBuffer"==p(S))&&(!e||e(S))}:e},23336:(v,T,i)=>{var r=i(23634);v.exports=r({}.isPrototypeOf)},66250:(v,T,i)=>{var r=i(23634),u=i(80112),p=i(81010),d=i(95171).indexOf,e=i(45599),_=r([].push);v.exports=function(y,S){var Z,A=p(y),N=0,L=[];for(Z in A)!u(e,Z)&&u(A,Z)&&_(L,Z);for(;S.length>N;)u(A,Z=S[N++])&&(~d(L,Z)||_(L,Z));return L}},28474:(v,T,i)=>{var r=i(66250),u=i(44939);v.exports=Object.keys||function(d){return r(d,u)}},25558:(v,T)=>{"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,u=r&&!i.call({1:2},1);T.f=u?function(d){var e=r(this,d);return!!e&&e.enumerable}:i},54945:(v,T,i)=>{var r=i(23634),u=i(64562),p=i(93221);v.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var _,d=!1,e={};try{(_=r(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(e,[]),d=e instanceof Array}catch(y){}return function(S,A){return u(S),p(A),d?_(S,A):S.__proto__=A,S}}():void 0)},36805:(v,T,i)=>{var r=i(49642),u=i(23634),p=i(28474),d=i(81010),_=u(i(25558).f),y=u([].push),S=function(A){return function(N){for(var ue,L=d(N),Z=p(L),J=Z.length,K=0,ee=[];J>K;)ue=Z[K++],(!r||_(L,ue))&&y(ee,A?[ue,L[ue]]:L[ue]);return ee}};v.exports={entries:S(!0),values:S(!1)}},97686:(v,T,i)=>{"use strict";var r=i(25014),u=i(35329);v.exports=r?{}.toString:function(){return"[object "+u(this)+"]"}},71689:(v,T,i)=>{var r=i(25401),u=i(52208),p=i(77293),d=TypeError;v.exports=function(e,_){var y,S;if("string"===_&&u(y=e.toString)&&!p(S=r(y,e))||u(y=e.valueOf)&&!p(S=r(y,e))||"string"!==_&&u(y=e.toString)&&!p(S=r(y,e)))return S;throw d("Can't convert object to primitive value")}},59823:(v,T,i)=>{var r=i(7365),u=i(23634),p=i(51518),d=i(47238),e=i(64562),_=u([].concat);v.exports=r("Reflect","ownKeys")||function(S){var A=p.f(e(S)),N=d.f;return N?_(A,N(S)):A}},13544:v=>{v.exports={}},26975:v=>{v.exports=function(T){try{return{error:!1,value:T()}}catch(i){return{error:!0,value:i}}}},9936:(v,T,i)=>{var r=i(70009),u=i(46456),p=i(52208),d=i(79482),e=i(26699),_=i(91840),y=i(34008),S=i(31813),A=i(81124),N=i(63556),L=u&&u.prototype,Z=_("species"),J=!1,K=p(r.PromiseRejectionEvent),ee=d("Promise",function(){var ue=e(u),ae=ue!==String(u);if(!ae&&66===N||A&&(!L.catch||!L.finally))return!0;if(!N||N<51||!/native code/.test(ue)){var H=new u(function(ie){ie(1)}),se=function(ie){ie(function(){},function(){})};if((H.constructor={})[Z]=se,!(J=H.then(function(){})instanceof se))return!0}return!ae&&(y||S)&&!K});v.exports={CONSTRUCTOR:ee,REJECTION_EVENT:K,SUBCLASSING:J}},46456:(v,T,i)=>{var r=i(70009);v.exports=r.Promise},25524:(v,T,i)=>{var r=i(64562),u=i(77293),p=i(54256);v.exports=function(d,e){if(r(d),u(e)&&e.constructor===d)return e;var _=p.f(d);return(0,_.resolve)(e),_.promise}},95758:(v,T,i)=>{var r=i(46456),u=i(5253),p=i(9936).CONSTRUCTOR;v.exports=p||!u(function(d){r.all(d).then(void 0,function(){})})},70918:v=>{var T=function(){this.head=null,this.tail=null};T.prototype={add:function(i){var r={item:i,next:null};this.head?this.tail.next=r:this.head=r,this.tail=r},get:function(){var i=this.head;if(i)return this.head=i.next,this.tail===i&&(this.tail=null),i.item}},v.exports=T},67917:(v,T,i)=>{var r=i(43550),u=TypeError;v.exports=function(p){if(r(p))throw u("Can't call method on "+p);return p}},29627:v=>{v.exports=function(T,i){return T===i||T!=T&&i!=i}},53814:(v,T,i)=>{var r=i(70009),u=i(2543),p=i(52208),d=i(86053),e=i(37591),_=i(15086),y=/MSIE .\./.test(d),S=r.Function,A=function(N){return y?function(L,Z){var J=_(arguments.length,1)>2,K=p(L)?L:S(L),ee=J?e(arguments,2):void 0;return N(J?function(){u(K,this,ee)}:K,Z)}:N};v.exports={setTimeout:A(r.setTimeout),setInterval:A(r.setInterval)}},58014:(v,T,i)=>{"use strict";var r=i(7365),u=i(48011),p=i(91840),d=i(49642),e=p("species");v.exports=function(_){var y=r(_);d&&y&&!y[e]&&(0,u.f)(y,e,{configurable:!0,get:function(){return this}})}},85681:(v,T,i)=>{var r=i(25014),u=i(48011).f,p=i(65162),d=i(80112),e=i(97686),y=i(91840)("toStringTag");v.exports=function(S,A,N,L){if(S){var Z=N?S:S.prototype;d(Z,y)||u(Z,y,{configurable:!0,value:A}),L&&!r&&p(Z,"toString",e)}}},86066:(v,T,i)=>{var r=i(64579),u=i(13708),p=r("keys");v.exports=function(d){return p[d]||(p[d]=u(d))}},24766:(v,T,i)=>{var r=i(70009),u=i(34056),p="__core-js_shared__",d=r[p]||u(p,{});v.exports=d},64579:(v,T,i)=>{var r=i(81124),u=i(24766);(v.exports=function(p,d){return u[p]||(u[p]=void 0!==d?d:{})})("versions",[]).push({version:"3.25.1",mode:r?"pure":"global",copyright:"\xa9 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.25.1/LICENSE",source:"https://github.com/zloirock/core-js"})},95869:(v,T,i)=>{var r=i(64562),u=i(54356),p=i(43550),e=i(91840)("species");v.exports=function(_,y){var A,S=r(_).constructor;return void 0===S||p(A=r(S)[e])?y:u(A)}},61557:(v,T,i)=>{var r=i(23634),u=i(33912),p=i(41433),d=i(67917),e=r("".charAt),_=r("".charCodeAt),y=r("".slice),S=function(A){return function(N,L){var ee,ue,Z=p(d(N)),J=u(L),K=Z.length;return J<0||J>=K?A?"":void 0:(ee=_(Z,J))<55296||ee>56319||J+1===K||(ue=_(Z,J+1))<56320||ue>57343?A?e(Z,J):ee:A?y(Z,J,J+2):ue-56320+(ee-55296<<10)+65536}};v.exports={codeAt:S(!1),charAt:S(!0)}},26662:(v,T,i)=>{"use strict";var r=i(23634),u=2147483647,L=/[^\0-\u007E]/,Z=/[.\u3002\uFF0E\uFF61]/g,J="Overflow: input needs wider integers to process",ee=RangeError,ue=r(Z.exec),ae=Math.floor,H=String.fromCharCode,se=r("".charCodeAt),Ee=r([].join),ie=r([].push),he=r("".replace),ge=r("".split),De=r("".toLowerCase),lt=function(Be){return Be+22+75*(Be<26)},Ve=function(Be,Pe,je){var He=0;for(Be=je?ae(Be/700):Be>>1,Be+=ae(Be/Pe);Be>455;)Be=ae(Be/35),He+=36;return ae(He+36*Be/(Be+38))},ze=function(Be){var tn,It,Pe=[],je=(Be=function(Be){for(var Pe=[],je=0,He=Be.length;je=55296&&Vt<=56319&&je=He&&Itae((u-Vt)/bt))throw ee(J);for(Vt+=(Bt-He)*bt,He=Bt,tn=0;tnu)throw ee(J);if(It==He){for(var Gt=Vt,xt=36;;){var Xt=xt<=it?1:xt>=it+26?26:xt-it;if(Gt{"use strict";var r=i(33912),u=i(41433),p=i(67917),d=RangeError;v.exports=function(_){var y=u(p(this)),S="",A=r(_);if(A<0||A==1/0)throw d("Wrong number of repetitions");for(;A>0;(A>>>=1)&&(y+=y))1&A&&(S+=y);return S}},85462:(v,T,i)=>{var r=i(29862).PROPER,u=i(55756),p=i(88185);v.exports=function(e){return u(function(){return!!p[e]()||"\u200b\x85\u180e"!=="\u200b\x85\u180e"[e]()||r&&p[e].name!==e})}},89858:(v,T,i)=>{var r=i(23634),u=i(67917),p=i(41433),d=i(88185),e=r("".replace),_="["+d+"]",y=RegExp("^"+_+_+"*"),S=RegExp(_+_+"*$"),A=function(N){return function(L){var Z=p(u(L));return 1&N&&(Z=e(Z,y,"")),2&N&&(Z=e(Z,S,"")),Z}};v.exports={start:A(1),end:A(2),trim:A(3)}},98535:(v,T,i)=>{var r=i(63556),u=i(55756);v.exports=!!Object.getOwnPropertySymbols&&!u(function(){var p=Symbol();return!String(p)||!(Object(p)instanceof Symbol)||!Symbol.sham&&r&&r<41})},56992:(v,T,i)=>{var r=i(25401),u=i(7365),p=i(91840),d=i(42915);v.exports=function(){var e=u("Symbol"),_=e&&e.prototype,y=_&&_.valueOf,S=p("toPrimitive");_&&!_[S]&&d(_,S,function(A){return r(y,this)},{arity:1})}},56709:(v,T,i)=>{var r=i(98535);v.exports=r&&!!Symbol.for&&!!Symbol.keyFor},37352:(v,T,i)=>{var ge,De,ce,lt,r=i(70009),u=i(2543),p=i(76781),d=i(52208),e=i(80112),_=i(55756),y=i(55690),S=i(37591),A=i(96682),N=i(15086),L=i(3877),Z=i(3787),J=r.setImmediate,K=r.clearImmediate,ee=r.process,ue=r.Dispatch,ae=r.Function,H=r.MessageChannel,se=r.String,Ee=0,ie={},he="onreadystatechange";try{ge=r.location}catch(je){}var Ve=function(je){if(e(ie,je)){var He=ie[je];delete ie[je],He()}},ze=function(je){return function(){Ve(je)}},Be=function(je){Ve(je.data)},Pe=function(je){r.postMessage(se(je),ge.protocol+"//"+ge.host)};(!J||!K)&&(J=function(He){N(arguments.length,1);var Vt=d(He)?He:ae(He),it=S(arguments,1);return ie[++Ee]=function(){u(Vt,void 0,it)},De(Ee),Ee},K=function(He){delete ie[He]},Z?De=function(je){ee.nextTick(ze(je))}:ue&&ue.now?De=function(je){ue.now(ze(je))}:H&&!L?(lt=(ce=new H).port2,ce.port1.onmessage=Be,De=p(lt.postMessage,lt)):r.addEventListener&&d(r.postMessage)&&!r.importScripts&&ge&&"file:"!==ge.protocol&&!_(Pe)?(De=Pe,r.addEventListener("message",Be,!1)):De=he in A("script")?function(je){y.appendChild(A("script"))[he]=function(){y.removeChild(this),Ve(je)}}:function(je){setTimeout(ze(je),0)}),v.exports={set:J,clear:K}},19401:(v,T,i)=>{var r=i(33912),u=Math.max,p=Math.min;v.exports=function(d,e){var _=r(d);return _<0?u(_+e,0):p(_,e)}},81010:(v,T,i)=>{var r=i(20973),u=i(67917);v.exports=function(p){return r(u(p))}},33912:(v,T,i)=>{var r=i(8651);v.exports=function(u){var p=+u;return p!=p||0===p?0:r(p)}},48869:(v,T,i)=>{var r=i(33912),u=Math.min;v.exports=function(p){return p>0?u(r(p),9007199254740991):0}},70267:(v,T,i)=>{var r=i(67917),u=Object;v.exports=function(p){return u(r(p))}},1645:(v,T,i)=>{var r=i(25401),u=i(77293),p=i(74717),d=i(34778),e=i(71689),_=i(91840),y=TypeError,S=_("toPrimitive");v.exports=function(A,N){if(!u(A)||p(A))return A;var Z,L=d(A,S);if(L){if(void 0===N&&(N="default"),Z=r(L,A,N),!u(Z)||p(Z))return Z;throw y("Can't convert object to primitive value")}return void 0===N&&(N="number"),e(A,N)}},62939:(v,T,i)=>{var r=i(1645),u=i(74717);v.exports=function(p){var d=r(p,"string");return u(d)?d:d+""}},25014:(v,T,i)=>{var p={};p[i(91840)("toStringTag")]="z",v.exports="[object z]"===String(p)},41433:(v,T,i)=>{var r=i(35329),u=String;v.exports=function(p){if("Symbol"===r(p))throw TypeError("Cannot convert a Symbol value to a string");return u(p)}},7378:v=>{var T=String;v.exports=function(i){try{return T(i)}catch(r){return"Object"}}},13708:(v,T,i)=>{var r=i(23634),u=0,p=Math.random(),d=r(1..toString);v.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+d(++u+p,36)}},54933:(v,T,i)=>{var r=i(55756),u=i(91840),p=i(81124),d=u("iterator");v.exports=!r(function(){var e=new URL("b?a=1&b=2&c=3","http://a"),_=e.searchParams,y="";return e.pathname="c%20d",_.forEach(function(S,A){_.delete("b"),y+=A+S}),p&&!e.toJSON||!_.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==_.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!_[d]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://\u0442\u0435\u0441\u0442").host||"#%D0%B1"!==new URL("http://a#\u0431").hash||"a1c3"!==y||"x"!==new URL("http://x",void 0).host})},99554:(v,T,i)=>{var r=i(98535);v.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},47960:(v,T,i)=>{var r=i(49642),u=i(55756);v.exports=r&&u(function(){return 42!=Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},15086:v=>{var T=TypeError;v.exports=function(i,r){if(i{var r=i(70009),u=i(52208),p=r.WeakMap;v.exports=u(p)&&/native code/.test(String(p))},25374:(v,T,i)=>{var r=i(13544),u=i(80112),p=i(89734),d=i(48011).f;v.exports=function(e){var _=r.Symbol||(r.Symbol={});u(_,e)||d(_,e,{value:p.f(e)})}},89734:(v,T,i)=>{var r=i(91840);T.f=r},91840:(v,T,i)=>{var r=i(70009),u=i(64579),p=i(80112),d=i(13708),e=i(98535),_=i(99554),y=u("wks"),S=r.Symbol,A=S&&S.for,N=_?S:S&&S.withoutSetter||d;v.exports=function(L){if(!p(y,L)||!e&&"string"!=typeof y[L]){var Z="Symbol."+L;y[L]=e&&p(S,L)?S[L]:_&&A?A(Z):N(Z)}return y[L]}},88185:v=>{v.exports="\t\n\v\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},70210:(v,T,i)=>{"use strict";var r=i(90513),u=i(23336),p=i(31426),d=i(54945),e=i(65031),_=i(83272),y=i(65162),S=i(51361),A=i(40039),N=i(33411),L=i(41605),Z=i(63313),J=i(91840),K=i(50499),ee=J("toStringTag"),ue=Error,ae=[].push,H=function(ie,he){var ce,ge=arguments.length>2?arguments[2]:void 0,De=u(se,this);d?ce=d(ue(),De?p(this):se):(ce=De?this:_(se),y(ce,ee,"Error")),void 0!==he&&y(ce,"message",Z(he)),K&&y(ce,"stack",A(ce.stack,1)),N(ce,ge);var lt=[];return L(ie,ae,{that:lt}),y(ce,"errors",lt),ce};d?d(H,ue):e(H,ue,{name:!0});var se=H.prototype=_(ue.prototype,{constructor:S(1,H),message:S(1,""),name:S(1,"AggregateError")});r({global:!0,constructor:!0,arity:2},{AggregateError:H})},10901:(v,T,i)=>{i(70210)},1625:(v,T,i)=>{"use strict";var r=i(90513),u=i(55756),p=i(89735),d=i(77293),e=i(70267),_=i(6381),y=i(11594),S=i(46751),A=i(2103),N=i(95913),L=i(91840),Z=i(63556),J=L("isConcatSpreadable"),K=Z>=51||!u(function(){var H=[];return H[J]=!1,H.concat()[0]!==H}),ee=N("concat"),ue=function(H){if(!d(H))return!1;var se=H[J];return void 0!==se?!!se:p(H)};r({target:"Array",proto:!0,arity:1,forced:!K||!ee},{concat:function(se){var ge,De,ce,lt,Ve,Ee=e(this),ie=A(Ee,0),he=0;for(ge=-1,ce=arguments.length;ge{"use strict";var r=i(90513),u=i(68607).every;r({target:"Array",proto:!0,forced:!i(33620)("every")},{every:function(_){return u(this,_,arguments.length>1?arguments[1]:void 0)}})},24990:(v,T,i)=>{var r=i(90513),u=i(35277),p=i(82196);r({target:"Array",proto:!0},{fill:u}),p("fill")},56534:(v,T,i)=>{"use strict";var r=i(90513),u=i(68607).filter;r({target:"Array",proto:!0,forced:!i(95913)("filter")},{filter:function(_){return u(this,_,arguments.length>1?arguments[1]:void 0)}})},12773:(v,T,i)=>{"use strict";var r=i(90513),u=i(68607).findIndex,p=i(82196),d="findIndex",e=!0;d in[]&&Array(1)[d](function(){e=!1}),r({target:"Array",proto:!0,forced:e},{findIndex:function(y){return u(this,y,arguments.length>1?arguments[1]:void 0)}}),p(d)},60326:(v,T,i)=>{"use strict";var r=i(90513),u=i(68607).find,p=i(82196),d="find",e=!0;d in[]&&Array(1)[d](function(){e=!1}),r({target:"Array",proto:!0,forced:e},{find:function(y){return u(this,y,arguments.length>1?arguments[1]:void 0)}}),p(d)},98792:(v,T,i)=>{"use strict";var r=i(90513),u=i(8366);r({target:"Array",proto:!0,forced:[].forEach!=u},{forEach:u})},261:(v,T,i)=>{var r=i(90513),u=i(51923);r({target:"Array",stat:!0,forced:!i(5253)(function(e){Array.from(e)})},{from:u})},77059:(v,T,i)=>{"use strict";var r=i(90513),u=i(95171).includes,p=i(55756),d=i(82196);r({target:"Array",proto:!0,forced:p(function(){return!Array(1).includes()})},{includes:function(y){return u(this,y,arguments.length>1?arguments[1]:void 0)}}),d("includes")},2795:(v,T,i)=>{"use strict";var r=i(90513),u=i(23634),p=i(95171).indexOf,d=i(33620),e=u([].indexOf),_=!!e&&1/e([1],1,-0)<0,y=d("indexOf");r({target:"Array",proto:!0,forced:_||!y},{indexOf:function(A){var N=arguments.length>1?arguments[1]:void 0;return _?e(this,A,N)||0:p(this,A,N)}})},2862:(v,T,i)=>{i(90513)({target:"Array",stat:!0},{isArray:i(89735)})},1285:(v,T,i)=>{"use strict";var r=i(81010),u=i(82196),p=i(84394),d=i(91093),e=i(48011).f,_=i(79077),y=i(28738),S=i(81124),A=i(49642),N="Array Iterator",L=d.set,Z=d.getterFor(N);v.exports=_(Array,"Array",function(K,ee){L(this,{type:N,target:r(K),index:0,kind:ee})},function(){var K=Z(this),ee=K.target,ue=K.kind,ae=K.index++;return!ee||ae>=ee.length?(K.target=void 0,y(void 0,!0)):y("keys"==ue?ae:"values"==ue?ee[ae]:[ae,ee[ae]],!1)},"values");var J=p.Arguments=p.Array;if(u("keys"),u("values"),u("entries"),!S&&A&&"values"!==J.name)try{e(J,"name",{value:"values"})}catch(K){}},74926:(v,T,i)=>{var r=i(90513),u=i(78375);r({target:"Array",proto:!0,forced:u!==[].lastIndexOf},{lastIndexOf:u})},88119:(v,T,i)=>{"use strict";var r=i(90513),u=i(68607).map;r({target:"Array",proto:!0,forced:!i(95913)("map")},{map:function(_){return u(this,_,arguments.length>1?arguments[1]:void 0)}})},46250:(v,T,i)=>{"use strict";var r=i(90513),u=i(88908).left,p=i(33620),d=i(63556),e=i(3787);r({target:"Array",proto:!0,forced:!p("reduce")||!e&&d>79&&d<83},{reduce:function(A){var N=arguments.length;return u(this,A,N,N>1?arguments[1]:void 0)}})},32836:(v,T,i)=>{"use strict";var r=i(90513),u=i(23634),p=i(89735),d=u([].reverse),e=[1,2];r({target:"Array",proto:!0,forced:String(e)===String(e.reverse())},{reverse:function(){return p(this)&&(this.length=this.length),d(this)}})},72999:(v,T,i)=>{"use strict";var r=i(90513),u=i(89735),p=i(81177),d=i(77293),e=i(19401),_=i(6381),y=i(81010),S=i(46751),A=i(91840),N=i(95913),L=i(37591),Z=N("slice"),J=A("species"),K=Array,ee=Math.max;r({target:"Array",proto:!0,forced:!Z},{slice:function(ae,H){var ge,De,ce,se=y(this),Ee=_(se),ie=e(ae,Ee),he=e(void 0===H?Ee:H,Ee);if(u(se)&&((p(ge=se.constructor)&&(ge===K||u(ge.prototype))||d(ge)&&null===(ge=ge[J]))&&(ge=void 0),ge===K||void 0===ge))return L(se,ie,he);for(De=new(void 0===ge?K:ge)(ee(he-ie,0)),ce=0;ie{"use strict";var r=i(90513),u=i(68607).some;r({target:"Array",proto:!0,forced:!i(33620)("some")},{some:function(_){return u(this,_,arguments.length>1?arguments[1]:void 0)}})},93639:(v,T,i)=>{"use strict";var r=i(90513),u=i(23634),p=i(61812),d=i(70267),e=i(6381),_=i(67236),y=i(41433),S=i(55756),A=i(84865),N=i(33620),L=i(36410),Z=i(5329),J=i(63556),K=i(34545),ee=[],ue=u(ee.sort),ae=u(ee.push),H=S(function(){ee.sort(void 0)}),se=S(function(){ee.sort(null)}),Ee=N("sort"),ie=!S(function(){if(J)return J<70;if(!(L&&L>3)){if(Z)return!0;if(K)return K<603;var ce,lt,Ve,ze,De="";for(ce=65;ce<76;ce++){switch(lt=String.fromCharCode(ce),ce){case 66:case 69:case 70:case 72:Ve=3;break;case 68:case 71:Ve=4;break;default:Ve=2}for(ze=0;ze<47;ze++)ee.push({k:lt+ze,v:Ve})}for(ee.sort(function(Be,Pe){return Pe.v-Be.v}),ze=0;zey(lt)?1:-1}}(ce)),Be=e(Ve),Pe=0;Pe{"use strict";var r=i(90513),u=i(70267),p=i(19401),d=i(33912),e=i(6381),_=i(54716),y=i(11594),S=i(2103),A=i(46751),N=i(67236),Z=i(95913)("splice"),J=Math.max,K=Math.min;r({target:"Array",proto:!0,forced:!Z},{splice:function(ue,ae){var he,ge,De,ce,lt,Ve,H=u(this),se=e(H),Ee=p(ue,se),ie=arguments.length;for(0===ie?he=ge=0:1===ie?(he=0,ge=se-Ee):(he=ie-2,ge=K(J(d(ae),0),se-Ee)),y(se+he-ge),De=S(H,ge),ce=0;cese-ge+he;ce--)N(H,ce-1)}else if(he>ge)for(ce=se-ge;ce>Ee;ce--)Ve=ce+he-1,(lt=ce+ge-1)in H?H[Ve]=H[lt]:N(H,Ve);for(ce=0;ce{var r=i(90513),u=i(23634),p=Date,d=u(p.prototype.getTime);r({target:"Date",stat:!0},{now:function(){return d(new p)}})},33379:(v,T,i)=>{var r=i(90513),u=i(44197);r({target:"Function",proto:!0,forced:Function.bind!==u},{bind:u})},87404:(v,T,i)=>{var r=i(90513),u=i(70009);r({global:!0,forced:u.globalThis!==u},{globalThis:u})},75071:(v,T,i)=>{var r=i(90513),u=i(7365),p=i(2543),d=i(25401),e=i(23634),_=i(55756),y=i(89735),S=i(52208),A=i(77293),N=i(74717),L=i(37591),Z=i(98535),J=u("JSON","stringify"),K=e(/./.exec),ee=e("".charAt),ue=e("".charCodeAt),ae=e("".replace),H=e(1..toString),se=/[\uD800-\uDFFF]/g,Ee=/^[\uD800-\uDBFF]$/,ie=/^[\uDC00-\uDFFF]$/,he=!Z||_(function(){var lt=u("Symbol")();return"[null]"!=J([lt])||"{}"!=J({a:lt})||"{}"!=J(Object(lt))}),ge=_(function(){return'"\\udf06\\ud834"'!==J("\udf06\ud834")||'"\\udead"'!==J("\udead")}),De=function(lt,Ve){var ze=L(arguments),Be=Ve;if((A(Ve)||void 0!==lt)&&!N(lt))return y(Ve)||(Ve=function(Pe,je){if(S(Be)&&(je=d(Be,this,Pe,je)),!N(je))return je}),ze[1]=Ve,p(J,null,ze)},ce=function(lt,Ve,ze){var Be=ee(ze,Ve-1),Pe=ee(ze,Ve+1);return K(Ee,lt)&&!K(ie,Pe)||K(ie,lt)&&!K(Ee,Be)?"\\u"+H(ue(lt,0),16):lt};J&&r({target:"JSON",stat:!0,arity:3,forced:he||ge},{stringify:function(Ve,ze,Be){var Pe=L(arguments),je=p(he?De:J,null,Pe);return ge&&"string"==typeof je?ae(je,se,ce):je}})},32300:(v,T,i)=>{var r=i(70009);i(85681)(r.JSON,"JSON",!0)},83616:(v,T,i)=>{"use strict";i(85116)("Map",function(p){return function(){return p(this,arguments.length?arguments[0]:void 0)}},i(26650))},85140:(v,T,i)=>{i(83616)},63603:()=>{},67234:(v,T,i)=>{var r=i(90513),u=i(75791);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==u},{assign:u})},86516:(v,T,i)=>{i(90513)({target:"Object",stat:!0,sham:!i(49642)},{create:i(83272)})},36255:(v,T,i)=>{var r=i(90513),u=i(49642),p=i(25913).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==p,sham:!u},{defineProperties:p})},84468:(v,T,i)=>{var r=i(90513),u=i(49642),p=i(48011).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==p,sham:!u},{defineProperty:p})},54989:(v,T,i)=>{var r=i(90513),u=i(36805).entries;r({target:"Object",stat:!0},{entries:function(d){return u(d)}})},86627:(v,T,i)=>{var r=i(90513),u=i(55756),p=i(81010),d=i(25525).f,e=i(49642),_=u(function(){d(1)});r({target:"Object",stat:!0,forced:!e||_,sham:!e},{getOwnPropertyDescriptor:function(A,N){return d(p(A),N)}})},78275:(v,T,i)=>{var r=i(90513),u=i(49642),p=i(59823),d=i(81010),e=i(25525),_=i(46751);r({target:"Object",stat:!0,sham:!u},{getOwnPropertyDescriptors:function(S){for(var K,ee,A=d(S),N=e.f,L=p(A),Z={},J=0;L.length>J;)void 0!==(ee=N(A,K=L[J++]))&&_(Z,K,ee);return Z}})},37764:(v,T,i)=>{var r=i(90513),u=i(98535),p=i(55756),d=i(47238),e=i(70267);r({target:"Object",stat:!0,forced:!u||p(function(){d.f(1)})},{getOwnPropertySymbols:function(S){var A=d.f;return A?A(e(S)):[]}})},31193:(v,T,i)=>{var r=i(90513),u=i(55756),p=i(70267),d=i(31426),e=i(37112);r({target:"Object",stat:!0,forced:u(function(){d(1)}),sham:!e},{getPrototypeOf:function(S){return d(p(S))}})},56557:(v,T,i)=>{var r=i(90513),u=i(70267),p=i(28474);r({target:"Object",stat:!0,forced:i(55756)(function(){p(1)})},{keys:function(y){return p(u(y))}})},17971:(v,T,i)=>{i(90513)({target:"Object",stat:!0},{setPrototypeOf:i(54945)})},17221:()=>{},88923:(v,T,i)=>{var r=i(90513),u=i(36805).values;r({target:"Object",stat:!0},{values:function(d){return u(d)}})},84798:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(61812),d=i(54256),e=i(26975),_=i(41605);r({target:"Promise",stat:!0},{allSettled:function(S){var A=this,N=d.f(A),L=N.resolve,Z=N.reject,J=e(function(){var K=p(A.resolve),ee=[],ue=0,ae=1;_(S,function(H){var se=ue++,Ee=!1;ae++,u(K,A,H).then(function(ie){Ee||(Ee=!0,ee[se]={status:"fulfilled",value:ie},--ae||L(ee))},function(ie){Ee||(Ee=!0,ee[se]={status:"rejected",reason:ie},--ae||L(ee))})}),--ae||L(ee)});return J.error&&Z(J.value),N.promise}})},58085:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(61812),d=i(54256),e=i(26975),_=i(41605);r({target:"Promise",stat:!0,forced:i(95758)},{all:function(A){var N=this,L=d.f(N),Z=L.resolve,J=L.reject,K=e(function(){var ee=p(N.resolve),ue=[],ae=0,H=1;_(A,function(se){var Ee=ae++,ie=!1;H++,u(ee,N,se).then(function(he){ie||(ie=!0,ue[Ee]=he,--H||Z(ue))},J)}),--H||Z(ue)});return K.error&&J(K.value),L.promise}})},98857:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(61812),d=i(7365),e=i(54256),_=i(26975),y=i(41605),S="No one promise resolved";r({target:"Promise",stat:!0},{any:function(N){var L=this,Z=d("AggregateError"),J=e.f(L),K=J.resolve,ee=J.reject,ue=_(function(){var ae=p(L.resolve),H=[],se=0,Ee=1,ie=!1;y(N,function(he){var ge=se++,De=!1;Ee++,u(ae,L,he).then(function(ce){De||ie||(ie=!0,K(ce))},function(ce){De||ie||(De=!0,H[ge]=ce,--Ee||ee(new Z(H,S)))})}),--Ee||ee(new Z(H,S))});return ue.error&&ee(ue.value),J.promise}})},5846:(v,T,i)=>{"use strict";var r=i(90513),u=i(81124),p=i(9936).CONSTRUCTOR,d=i(46456),e=i(7365),_=i(52208),y=i(42915),S=d&&d.prototype;if(r({target:"Promise",proto:!0,forced:p,real:!0},{catch:function(N){return this.then(void 0,N)}}),!u&&_(d)){var A=e("Promise").prototype.catch;S.catch!==A&&y(S,"catch",A,{unsafe:!0})}},38206:(v,T,i)=>{"use strict";var di,Lr,Kr,r=i(90513),u=i(81124),p=i(3787),d=i(70009),e=i(25401),_=i(42915),y=i(54945),S=i(85681),A=i(58014),N=i(61812),L=i(52208),Z=i(77293),J=i(54849),K=i(95869),ee=i(37352).set,ue=i(58991),ae=i(52912),H=i(26975),se=i(70918),Ee=i(91093),ie=i(46456),he=i(9936),ge=i(54256),De="Promise",ce=he.CONSTRUCTOR,lt=he.REJECTION_EVENT,Ve=he.SUBCLASSING,ze=Ee.getterFor(De),Be=Ee.set,Pe=ie&&ie.prototype,je=ie,He=Pe,Vt=d.TypeError,it=d.document,tn=d.process,It=ge.f,Zt=It,Ut=!!(it&&it.createEvent&&d.dispatchEvent),Bt="unhandledrejection",ei=function(Wt){var zn;return!(!Z(Wt)||!L(zn=Wt.then))&&zn},Nn=function(Wt,zn){var br,Dr,gn,rr=zn.value,Fr=1==zn.state,Gn=Fr?Wt.ok:Wt.fail,Jr=Wt.resolve,_i=Wt.reject,wi=Wt.domain;try{Gn?(Fr||(2===zn.rejection&&ki(zn),zn.rejection=1),!0===Gn?br=rr:(wi&&wi.enter(),br=Gn(rr),wi&&(wi.exit(),gn=!0)),br===Wt.promise?_i(Vt("Promise-chain cycle")):(Dr=ei(br))?e(Dr,br,Jr,_i):Jr(br)):_i(rr)}catch(yn){wi&&!gn&&wi.exit(),_i(yn)}},$n=function(Wt,zn){Wt.notified||(Wt.notified=!0,ue(function(){for(var Fr,rr=Wt.reactions;Fr=rr.get();)Nn(Fr,Wt);Wt.notified=!1,zn&&!Wt.rejection&&Yr(Wt)}))},Br=function(Wt,zn,rr){var Fr,Gn;Ut?((Fr=it.createEvent("Event")).promise=zn,Fr.reason=rr,Fr.initEvent(Wt,!1,!0),d.dispatchEvent(Fr)):Fr={promise:zn,reason:rr},!lt&&(Gn=d["on"+Wt])?Gn(Fr):Wt===Bt&&ae("Unhandled promise rejection",rr)},Yr=function(Wt){e(ee,d,function(){var Gn,zn=Wt.facade,rr=Wt.value;if(fi(Wt)&&(Gn=H(function(){p?tn.emit("unhandledRejection",rr,zn):Br(Bt,zn,rr)}),Wt.rejection=p||fi(Wt)?2:1,Gn.error))throw Gn.value})},fi=function(Wt){return 1!==Wt.rejection&&!Wt.parent},ki=function(Wt){e(ee,d,function(){var zn=Wt.facade;p?tn.emit("rejectionHandled",zn):Br("rejectionhandled",zn,Wt.value)})},Hi=function(Wt,zn,rr){return function(Fr){Wt(zn,Fr,rr)}},Zr=function(Wt,zn,rr){Wt.done||(Wt.done=!0,rr&&(Wt=rr),Wt.value=zn,Wt.state=2,$n(Wt,!0))},Cn=function(Wt,zn,rr){if(!Wt.done){Wt.done=!0,rr&&(Wt=rr);try{if(Wt.facade===zn)throw Vt("Promise can't be resolved itself");var Fr=ei(zn);Fr?ue(function(){var Gn={done:!1};try{e(Fr,zn,Hi(Cn,Gn,Wt),Hi(Zr,Gn,Wt))}catch(Jr){Zr(Gn,Jr,Wt)}}):(Wt.value=zn,Wt.state=1,$n(Wt,!1))}catch(Gn){Zr({done:!1},Gn,Wt)}}};if(ce&&(je=function(zn){J(this,He),N(zn),e(di,this);var rr=ze(this);try{zn(Hi(Cn,rr),Hi(Zr,rr))}catch(Fr){Zr(rr,Fr)}},(di=function(zn){Be(this,{type:De,done:!1,notified:!1,parent:!1,reactions:new se,rejection:!1,state:0,value:void 0})}).prototype=_(He=je.prototype,"then",function(zn,rr){var Fr=ze(this),Gn=It(K(this,je));return Fr.parent=!0,Gn.ok=!L(zn)||zn,Gn.fail=L(rr)&&rr,Gn.domain=p?tn.domain:void 0,0==Fr.state?Fr.reactions.add(Gn):ue(function(){Nn(Gn,Fr)}),Gn.promise}),Lr=function(){var Wt=new di,zn=ze(Wt);this.promise=Wt,this.resolve=Hi(Cn,zn),this.reject=Hi(Zr,zn)},ge.f=It=function(Wt){return Wt===je||void 0===Wt?new Lr(Wt):Zt(Wt)},!u&&L(ie)&&Pe!==Object.prototype)){Kr=Pe.then,Ve||_(Pe,"then",function(zn,rr){var Fr=this;return new je(function(Gn,Jr){e(Kr,Fr,Gn,Jr)}).then(zn,rr)},{unsafe:!0});try{delete Pe.constructor}catch(Wt){}y&&y(Pe,He)}r({global:!0,constructor:!0,wrap:!0,forced:ce},{Promise:je}),S(je,De,!1,!0),A(De)},30185:(v,T,i)=>{"use strict";var r=i(90513),u=i(81124),p=i(46456),d=i(55756),e=i(7365),_=i(52208),y=i(95869),S=i(25524),A=i(42915),N=p&&p.prototype;if(r({target:"Promise",proto:!0,real:!0,forced:!!p&&d(function(){N.finally.call({then:function(){}},function(){})})},{finally:function(J){var K=y(this,e("Promise")),ee=_(J);return this.then(ee?function(ue){return S(K,J()).then(function(){return ue})}:J,ee?function(ue){return S(K,J()).then(function(){throw ue})}:J)}}),!u&&_(p)){var Z=e("Promise").prototype.finally;N.finally!==Z&&A(N,"finally",Z,{unsafe:!0})}},66793:(v,T,i)=>{i(38206),i(58085),i(5846),i(44738),i(74767),i(4991)},44738:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(61812),d=i(54256),e=i(26975),_=i(41605);r({target:"Promise",stat:!0,forced:i(95758)},{race:function(A){var N=this,L=d.f(N),Z=L.reject,J=e(function(){var K=p(N.resolve);_(A,function(ee){u(K,N,ee).then(L.resolve,Z)})});return J.error&&Z(J.value),L.promise}})},74767:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(54256);r({target:"Promise",stat:!0,forced:i(9936).CONSTRUCTOR},{reject:function(_){var y=p.f(this);return u(y.reject,void 0,_),y.promise}})},4991:(v,T,i)=>{"use strict";var r=i(90513),u=i(7365),p=i(81124),d=i(46456),e=i(9936).CONSTRUCTOR,_=i(25524),y=u("Promise"),S=p&&!e;r({target:"Promise",stat:!0,forced:p||e},{resolve:function(N){return _(S&&this===y?d:this,N)}})},19539:(v,T,i)=>{var r=i(90513),u=i(7365),p=i(2543),d=i(44197),e=i(54356),_=i(64562),y=i(77293),S=i(83272),A=i(55756),N=u("Reflect","construct"),L=Object.prototype,Z=[].push,J=A(function(){function ue(){}return!(N(function(){},[],ue)instanceof ue)}),K=!A(function(){N(function(){})}),ee=J||K;r({target:"Reflect",stat:!0,forced:ee,sham:ee},{construct:function(ae,H){e(ae),_(H);var se=arguments.length<3?ae:e(arguments[2]);if(K&&!J)return N(ae,H,se);if(ae==se){switch(H.length){case 0:return new ae;case 1:return new ae(H[0]);case 2:return new ae(H[0],H[1]);case 3:return new ae(H[0],H[1],H[2]);case 4:return new ae(H[0],H[1],H[2],H[3])}var Ee=[null];return p(Z,Ee,H),new(p(d,ae,Ee))}var ie=se.prototype,he=S(y(ie)?ie:L),ge=p(ae,he,H);return y(ge)?ge:he}})},60851:(v,T,i)=>{var r=i(90513),u=i(25401),p=i(77293),d=i(64562),e=i(27029),_=i(25525),y=i(31426);r({target:"Reflect",stat:!0},{get:function S(A,N){var Z,J,L=arguments.length<3?A:arguments[2];return d(A)===L?A[N]:(Z=_.f(A,N))?e(Z)?Z.value:void 0===Z.get?void 0:u(Z.get,L):p(J=y(A))?S(J,N,L):void 0}})},44864:()=>{},97764:(v,T,i)=>{"use strict";var r=i(90513),u=i(23634),p=i(56421),d=i(67917),e=i(41433),_=i(79668),y=u("".indexOf);r({target:"String",proto:!0,forced:!_("includes")},{includes:function(A){return!!~y(e(d(this)),e(p(A)),arguments.length>1?arguments[1]:void 0)}})},3934:(v,T,i)=>{"use strict";var r=i(61557).charAt,u=i(41433),p=i(91093),d=i(79077),e=i(28738),_="String Iterator",y=p.set,S=p.getterFor(_);d(String,"String",function(A){y(this,{type:_,string:u(A),index:0})},function(){var J,N=S(this),L=N.string,Z=N.index;return Z>=L.length?e(void 0,!0):(J=r(L,Z),N.index+=J.length,e(J,!1))})},3588:(v,T,i)=>{i(90513)({target:"String",proto:!0},{repeat:i(53411)})},24655:(v,T,i)=>{"use strict";var ee,r=i(90513),u=i(23634),p=i(25525).f,d=i(48869),e=i(41433),_=i(56421),y=i(67917),S=i(79668),A=i(81124),N=u("".startsWith),L=u("".slice),Z=Math.min,J=S("startsWith");r({target:"String",proto:!0,forced:!(!A&&!J&&(ee=p(String.prototype,"startsWith"),ee&&!ee.writable)||J)},{startsWith:function(ue){var ae=e(y(this));_(ue);var H=d(Z(arguments.length>1?arguments[1]:void 0,ae.length)),se=e(ue);return N?N(ae,se,H):L(ae,H,H+se.length)===se}})},90451:(v,T,i)=>{"use strict";var r=i(90513),u=i(89858).trim;r({target:"String",proto:!0,forced:i(85462)("trim")},{trim:function(){return u(this)}})},16426:(v,T,i)=>{i(25374)("asyncIterator")},17858:(v,T,i)=>{"use strict";var r=i(90513),u=i(70009),p=i(25401),d=i(23634),e=i(81124),_=i(49642),y=i(98535),S=i(55756),A=i(80112),N=i(23336),L=i(64562),Z=i(81010),J=i(62939),K=i(41433),ee=i(51361),ue=i(83272),ae=i(28474),H=i(51518),se=i(62469),Ee=i(47238),ie=i(25525),he=i(48011),ge=i(25913),De=i(25558),ce=i(42915),lt=i(64579),Ve=i(86066),ze=i(45599),Be=i(13708),Pe=i(91840),je=i(89734),He=i(25374),Vt=i(56992),it=i(85681),tn=i(91093),It=i(68607).forEach,Zt=Ve("hidden"),Ut="Symbol",Bt="prototype",bt=tn.set,Gt=tn.getterFor(Ut),xt=Object[Bt],Xt=u.Symbol,Zn=Xt&&Xt[Bt],Ur=u.TypeError,di=u.QObject,Lr=ie.f,Mr=he.f,Kr=se.f,ei=De.f,Nn=d([].push),$n=lt("symbols"),Br=lt("op-symbols"),Yr=lt("wks"),fi=!di||!di[Bt]||!di[Bt].findChild,ki=_&&S(function(){return 7!=ue(Mr({},"a",{get:function(){return Mr(this,"a",{value:7}).a}})).a})?function(Jr,_i,wi){var br=Lr(xt,_i);br&&delete xt[_i],Mr(Jr,_i,wi),br&&Jr!==xt&&Mr(xt,_i,br)}:Mr,Hi=function(Jr,_i){var wi=$n[Jr]=ue(Zn);return bt(wi,{type:Ut,tag:Jr,description:_i}),_||(wi.description=_i),wi},Zr=function(_i,wi,br){_i===xt&&Zr(Br,wi,br),L(_i);var Dr=J(wi);return L(br),A($n,Dr)?(br.enumerable?(A(_i,Zt)&&_i[Zt][Dr]&&(_i[Zt][Dr]=!1),br=ue(br,{enumerable:ee(0,!1)})):(A(_i,Zt)||Mr(_i,Zt,ee(1,{})),_i[Zt][Dr]=!0),ki(_i,Dr,br)):Mr(_i,Dr,br)},Cn=function(_i,wi){L(_i);var br=Z(wi),Dr=ae(br).concat(Gn(br));return It(Dr,function(gn){(!_||p(zn,br,gn))&&Zr(_i,gn,br[gn])}),_i},zn=function(_i){var wi=J(_i),br=p(ei,this,wi);return!(this===xt&&A($n,wi)&&!A(Br,wi))&&(!(br||!A(this,wi)||!A($n,wi)||A(this,Zt)&&this[Zt][wi])||br)},rr=function(_i,wi){var br=Z(_i),Dr=J(wi);if(br!==xt||!A($n,Dr)||A(Br,Dr)){var gn=Lr(br,Dr);return gn&&A($n,Dr)&&!(A(br,Zt)&&br[Zt][Dr])&&(gn.enumerable=!0),gn}},Fr=function(_i){var wi=Kr(Z(_i)),br=[];return It(wi,function(Dr){!A($n,Dr)&&!A(ze,Dr)&&Nn(br,Dr)}),br},Gn=function(Jr){var _i=Jr===xt,wi=Kr(_i?Br:Z(Jr)),br=[];return It(wi,function(Dr){A($n,Dr)&&(!_i||A(xt,Dr))&&Nn(br,$n[Dr])}),br};y||(ce(Zn=(Xt=function(){if(N(Zn,this))throw Ur("Symbol is not a constructor");var _i=arguments.length&&void 0!==arguments[0]?K(arguments[0]):void 0,wi=Be(_i),br=function(Dr){this===xt&&p(br,Br,Dr),A(this,Zt)&&A(this[Zt],wi)&&(this[Zt][wi]=!1),ki(this,wi,ee(1,Dr))};return _&&fi&&ki(xt,wi,{configurable:!0,set:br}),Hi(wi,_i)})[Bt],"toString",function(){return Gt(this).tag}),ce(Xt,"withoutSetter",function(Jr){return Hi(Be(Jr),Jr)}),De.f=zn,he.f=Zr,ge.f=Cn,ie.f=rr,H.f=se.f=Fr,Ee.f=Gn,je.f=function(Jr){return Hi(Pe(Jr),Jr)},_&&(Mr(Zn,"description",{configurable:!0,get:function(){return Gt(this).description}}),e||ce(xt,"propertyIsEnumerable",zn,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!y,sham:!y},{Symbol:Xt}),It(ae(Yr),function(Jr){He(Jr)}),r({target:Ut,stat:!0,forced:!y},{useSetter:function(){fi=!0},useSimple:function(){fi=!1}}),r({target:"Object",stat:!0,forced:!y,sham:!_},{create:function(_i,wi){return void 0===wi?ue(_i):Cn(ue(_i),wi)},defineProperty:Zr,defineProperties:Cn,getOwnPropertyDescriptor:rr}),r({target:"Object",stat:!0,forced:!y},{getOwnPropertyNames:Fr}),Vt(),it(Xt,Ut),ze[Zt]=!0},1172:()=>{},12353:(v,T,i)=>{var r=i(90513),u=i(7365),p=i(80112),d=i(41433),e=i(64579),_=i(56709),y=e("string-to-symbol-registry"),S=e("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!_},{for:function(A){var N=d(A);if(p(y,N))return y[N];var L=u("Symbol")(N);return y[N]=L,S[L]=N,L}})},99579:(v,T,i)=>{i(25374)("hasInstance")},41258:(v,T,i)=>{i(25374)("isConcatSpreadable")},2383:(v,T,i)=>{i(25374)("iterator")},56728:(v,T,i)=>{i(17858),i(12353),i(27632),i(75071),i(37764)},27632:(v,T,i)=>{var r=i(90513),u=i(80112),p=i(74717),d=i(7378),e=i(64579),_=i(56709),y=e("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!_},{keyFor:function(A){if(!p(A))throw TypeError(d(A)+" is not a symbol");if(u(y,A))return y[A]}})},64776:(v,T,i)=>{i(25374)("matchAll")},44339:(v,T,i)=>{i(25374)("match")},88215:(v,T,i)=>{i(25374)("replace")},65389:(v,T,i)=>{i(25374)("search")},12733:(v,T,i)=>{i(25374)("species")},97977:(v,T,i)=>{i(25374)("split")},59792:(v,T,i)=>{var r=i(25374),u=i(56992);r("toPrimitive"),u()},60242:(v,T,i)=>{var r=i(7365),u=i(25374),p=i(85681);u("toStringTag"),p(r("Symbol"),"Symbol")},26291:(v,T,i)=>{i(25374)("unscopables")},3119:(v,T,i)=>{"use strict";var Z,r=i(70009),u=i(23634),p=i(84604),d=i(57867),e=i(85116),_=i(84049),y=i(77293),S=i(46401),A=i(91093).enforce,N=i(81101),L=!r.ActiveXObject&&"ActiveXObject"in r,J=function(Ee){return function(){return Ee(this,arguments.length?arguments[0]:void 0)}},K=e("WeakMap",J,_);if(N&&L){Z=_.getConstructor(J,"WeakMap",!0),d.enable();var ee=K.prototype,ue=u(ee.delete),ae=u(ee.has),H=u(ee.get),se=u(ee.set);p(ee,{delete:function(Ee){if(y(Ee)&&!S(Ee)){var ie=A(this);return ie.frozen||(ie.frozen=new Z),ue(this,Ee)||ie.frozen.delete(Ee)}return ue(this,Ee)},has:function(ie){if(y(ie)&&!S(ie)){var he=A(this);return he.frozen||(he.frozen=new Z),ae(this,ie)||he.frozen.has(ie)}return ae(this,ie)},get:function(ie){if(y(ie)&&!S(ie)){var he=A(this);return he.frozen||(he.frozen=new Z),ae(this,ie)?H(this,ie):he.frozen.get(ie)}return H(this,ie)},set:function(ie,he){if(y(ie)&&!S(ie)){var ge=A(this);ge.frozen||(ge.frozen=new Z),ae(this,ie)?se(this,ie,he):ge.frozen.set(ie,he)}else se(this,ie,he);return this}})}},90770:(v,T,i)=>{i(3119)},67670:(v,T,i)=>{i(10901)},65237:(v,T,i)=>{i(87404)},10509:(v,T,i)=>{"use strict";i(90513)({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:i(37353)})},30887:(v,T,i)=>{"use strict";i(90513)({target:"Map",proto:!0,real:!0,forced:!0},{emplace:i(12864)})},54547:(v,T,i)=>{"use strict";var r=i(90513),u=i(64562),p=i(76781),d=i(37444),e=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{every:function(y){var S=u(this),A=d(S),N=p(y,arguments.length>1?arguments[1]:void 0);return!e(A,function(L,Z,J){if(!N(Z,L,S))return J()},{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},68996:(v,T,i)=>{"use strict";var r=i(90513),u=i(7365),p=i(76781),d=i(25401),e=i(61812),_=i(64562),y=i(95869),S=i(37444),A=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(L){var Z=_(this),J=S(Z),K=p(L,arguments.length>1?arguments[1]:void 0),ee=new(y(Z,u("Map"))),ue=e(ee.set);return A(J,function(ae,H){K(H,ae,Z)&&d(ue,ee,ae,H)},{AS_ENTRIES:!0,IS_ITERATOR:!0}),ee}})},60176:(v,T,i)=>{"use strict";var r=i(90513),u=i(64562),p=i(76781),d=i(37444),e=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(y){var S=u(this),A=d(S),N=p(y,arguments.length>1?arguments[1]:void 0);return e(A,function(L,Z,J){if(N(Z,L,S))return J(L)},{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},1530:(v,T,i)=>{"use strict";var r=i(90513),u=i(64562),p=i(76781),d=i(37444),e=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{find:function(y){var S=u(this),A=d(S),N=p(y,arguments.length>1?arguments[1]:void 0);return e(A,function(L,Z,J){if(N(Z,L,S))return J(Z)},{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},78271:(v,T,i)=>{i(90513)({target:"Map",stat:!0,forced:!0},{from:i(83483)})},41554:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(23634),d=i(61812),e=i(88055),_=i(41605),y=p([].push);r({target:"Map",stat:!0,forced:!0},{groupBy:function(A,N){d(N);var L=e(A),Z=new this,J=d(Z.has),K=d(Z.get),ee=d(Z.set);return _(L,function(ue){var ae=N(ue);u(J,Z,ae)?y(u(K,Z,ae),ue):u(ee,Z,ae,[ue])},{IS_ITERATOR:!0}),Z}})},41688:(v,T,i)=>{"use strict";var r=i(90513),u=i(64562),p=i(37444),d=i(29627),e=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(y){return e(p(u(this)),function(S,A,N){if(d(A,y))return N()},{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},92847:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(41605),d=i(61812);r({target:"Map",stat:!0,forced:!0},{keyBy:function(_,y){var S=new this;d(y);var A=d(S.set);return p(_,function(N){u(A,S,y(N),N)}),S}})},17316:(v,T,i)=>{"use strict";var r=i(90513),u=i(64562),p=i(37444),d=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(_){return d(p(u(this)),function(y,S,A){if(S===_)return A(y)},{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).result}})},58786:(v,T,i)=>{"use strict";var r=i(90513),u=i(7365),p=i(76781),d=i(25401),e=i(61812),_=i(64562),y=i(95869),S=i(37444),A=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(L){var Z=_(this),J=S(Z),K=p(L,arguments.length>1?arguments[1]:void 0),ee=new(y(Z,u("Map"))),ue=e(ee.set);return A(J,function(ae,H){d(ue,ee,K(H,ae,Z),H)},{AS_ENTRIES:!0,IS_ITERATOR:!0}),ee}})},35517:(v,T,i)=>{"use strict";var r=i(90513),u=i(7365),p=i(76781),d=i(25401),e=i(61812),_=i(64562),y=i(95869),S=i(37444),A=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(L){var Z=_(this),J=S(Z),K=p(L,arguments.length>1?arguments[1]:void 0),ee=new(y(Z,u("Map"))),ue=e(ee.set);return A(J,function(ae,H){d(ue,ee,ae,K(H,ae,Z))},{AS_ENTRIES:!0,IS_ITERATOR:!0}),ee}})},12783:(v,T,i)=>{"use strict";var r=i(90513),u=i(61812),p=i(64562),d=i(41605);r({target:"Map",proto:!0,real:!0,arity:1,forced:!0},{merge:function(_){for(var y=p(this),S=u(y.set),A=arguments.length,N=0;N{i(90513)({target:"Map",stat:!0,forced:!0},{of:i(13067)})},69773:(v,T,i)=>{"use strict";var r=i(90513),u=i(64562),p=i(61812),d=i(37444),e=i(41605),_=TypeError;r({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(S){var A=u(this),N=d(A),L=arguments.length<2,Z=L?void 0:arguments[1];if(p(S),e(N,function(J,K){L?(L=!1,Z=K):Z=S(Z,K,J,A)},{AS_ENTRIES:!0,IS_ITERATOR:!0}),L)throw _("Reduce of empty map with no initial value");return Z}})},22337:(v,T,i)=>{"use strict";var r=i(90513),u=i(64562),p=i(76781),d=i(37444),e=i(41605);r({target:"Map",proto:!0,real:!0,forced:!0},{some:function(y){var S=u(this),A=d(S),N=p(y,arguments.length>1?arguments[1]:void 0);return e(A,function(L,Z,J){if(N(Z,L,S))return J()},{AS_ENTRIES:!0,IS_ITERATOR:!0,INTERRUPTED:!0}).stopped}})},84131:(v,T,i)=>{"use strict";i(90513)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:i(57729)})},40199:(v,T,i)=>{"use strict";var r=i(90513),u=i(25401),p=i(64562),d=i(61812),e=TypeError;r({target:"Map",proto:!0,real:!0,forced:!0},{update:function(y,S){var A=p(this),N=d(A.get),L=d(A.has),Z=d(A.set),J=arguments.length;d(S);var K=u(L,A,y);if(!K&&J<3)throw e("Updating absent value");var ee=K?u(N,A,y):d(J>2?arguments[2]:void 0)(y,A);return u(Z,A,y,S(ee,y,A)),A}})},69046:(v,T,i)=>{"use strict";i(90513)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:i(57729)})},61127:(v,T,i)=>{i(84798)},45975:(v,T,i)=>{i(98857)},93114:(v,T,i)=>{"use strict";var r=i(90513),u=i(54256),p=i(26975);r({target:"Promise",stat:!0,forced:!0},{try:function(d){var e=u.f(this),_=p(d);return(_.error?e.reject:e.resolve)(_.value),e.promise}})},55461:(v,T,i)=>{i(25374)("asyncDispose")},5737:(v,T,i)=>{i(25374)("dispose")},87097:(v,T,i)=>{i(25374)("matcher")},29559:(v,T,i)=>{i(25374)("metadataKey")},71985:(v,T,i)=>{i(25374)("metadata")},90212:(v,T,i)=>{i(25374)("observable")},93770:(v,T,i)=>{i(25374)("patternMatch")},47743:(v,T,i)=>{i(25374)("replaceAll")},33089:(v,T,i)=>{i(1285);var r=i(44125),u=i(70009),p=i(35329),d=i(65162),e=i(84394),y=i(91840)("toStringTag");for(var S in r){var A=u[S],N=A&&A.prototype;N&&p(N)!==y&&d(N,y,S),e[S]=e.Array}},94784:(v,T,i)=>{var r=i(90513),u=i(70009),p=i(53814).setInterval;r({global:!0,bind:!0,forced:u.setInterval!==p},{setInterval:p})},36445:(v,T,i)=>{var r=i(90513),u=i(70009),p=i(53814).setTimeout;r({global:!0,bind:!0,forced:u.setTimeout!==p},{setTimeout:p})},69280:(v,T,i)=>{i(94784),i(36445)},73842:(v,T,i)=>{"use strict";i(1285);var r=i(90513),u=i(70009),p=i(25401),d=i(23634),e=i(49642),_=i(54933),y=i(42915),S=i(84604),A=i(85681),N=i(14554),L=i(91093),Z=i(54849),J=i(52208),K=i(80112),ee=i(76781),ue=i(35329),ae=i(64562),H=i(77293),se=i(41433),Ee=i(83272),ie=i(51361),he=i(88055),ge=i(34014),De=i(15086),ce=i(91840),lt=i(84865),Ve=ce("iterator"),ze="URLSearchParams",Be=ze+"Iterator",Pe=L.set,je=L.getterFor(ze),He=L.getterFor(Be),Vt=Object.getOwnPropertyDescriptor,it=function(Dr){if(!e)return u[Dr];var gn=Vt(u,Dr);return gn&&gn.value},tn=it("fetch"),It=it("Request"),Zt=it("Headers"),Ut=It&&It.prototype,Bt=Zt&&Zt.prototype,bt=u.RegExp,Gt=u.TypeError,xt=u.decodeURIComponent,Xt=u.encodeURIComponent,Zn=d("".charAt),Ur=d([].join),di=d([].push),Lr=d("".replace),Mr=d([].shift),Kr=d([].splice),ei=d("".split),Nn=d("".slice),$n=/\+/g,Br=Array(4),Yr=function(Dr){return Br[Dr-1]||(Br[Dr-1]=bt("((?:%[\\da-f]{2}){"+Dr+"})","gi"))},fi=function(Dr){try{return xt(Dr)}catch(gn){return Dr}},ki=function(Dr){var gn=Lr(Dr,$n," "),yn=4;try{return xt(gn)}catch(gr){for(;yn;)gn=Lr(gn,Yr(yn--),fi);return gn}},Hi=/[!'()~]|%20/g,Zr={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},Cn=function(Dr){return Zr[Dr]},Wt=function(Dr){return Lr(Xt(Dr),Hi,Cn)},zn=N(function(gn,yn){Pe(this,{type:Be,iterator:he(je(gn).entries),kind:yn})},"Iterator",function(){var gn=He(this),yn=gn.kind,gr=gn.iterator.next(),Jt=gr.value;return gr.done||(gr.value="keys"===yn?Jt.key:"values"===yn?Jt.value:[Jt.key,Jt.value]),gr},!0),rr=function(Dr){this.entries=[],this.url=null,void 0!==Dr&&(H(Dr)?this.parseObject(Dr):this.parseQuery("string"==typeof Dr?"?"===Zn(Dr,0)?Nn(Dr,1):Dr:se(Dr)))};rr.prototype={type:ze,bindURL:function(Dr){this.url=Dr,this.update()},parseObject:function(Dr){var yn,gr,Jt,Vn,mr,Dn,Pr,gn=ge(Dr);if(gn)for(gr=(yn=he(Dr,gn)).next;!(Jt=p(gr,yn)).done;){if(Vn=he(ae(Jt.value)),(Dn=p(mr=Vn.next,Vn)).done||(Pr=p(mr,Vn)).done||!p(mr,Vn).done)throw Gt("Expected sequence with length 2");di(this.entries,{key:se(Dn.value),value:se(Pr.value)})}else for(var Yt in Dr)K(Dr,Yt)&&di(this.entries,{key:Yt,value:se(Dr[Yt])})},parseQuery:function(Dr){if(Dr)for(var gr,Jt,gn=ei(Dr,"&"),yn=0;yn0?arguments[0]:void 0;Pe(this,new rr(gn))},Gn=Fr.prototype;if(S(Gn,{append:function(gn,yn){De(arguments.length,2);var gr=je(this);di(gr.entries,{key:se(gn),value:se(yn)}),gr.updateURL()},delete:function(Dr){De(arguments.length,1);for(var gn=je(this),yn=gn.entries,gr=se(Dr),Jt=0;Jtgr.key?1:-1}),gn.updateURL()},forEach:function(gn){for(var Vn,yn=je(this).entries,gr=ee(gn,arguments.length>1?arguments[1]:void 0),Jt=0;Jt1?wi(arguments[1]):{})}}),J(It)){var br=function(gn){return Z(this,Ut),new It(gn,arguments.length>1?wi(arguments[1]):{})};Ut.constructor=br,br.prototype=Ut,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:br})}}v.exports={URLSearchParams:Fr,getState:je}},26953:(v,T,i)=>{i(73842)},80504:(v,T,i)=>{"use strict";i(3934);var Hi,r=i(90513),u=i(49642),p=i(54933),d=i(70009),e=i(76781),_=i(23634),y=i(42915),S=i(1707),A=i(54849),N=i(80112),L=i(75791),Z=i(51923),J=i(8681),K=i(61557).codeAt,ee=i(26662),ue=i(41433),ae=i(85681),H=i(15086),se=i(73842),Ee=i(91093),ie=Ee.set,he=Ee.getterFor("URL"),ge=se.URLSearchParams,De=se.getState,ce=d.URL,lt=d.TypeError,Ve=d.parseInt,ze=Math.floor,Be=Math.pow,Pe=_("".charAt),je=_(/./.exec),He=_([].join),Vt=_(1..toString),it=_([].pop),tn=_([].push),It=_("".replace),Zt=_([].shift),Ut=_("".split),Bt=_("".slice),bt=_("".toLowerCase),Gt=_([].unshift),Xt="Invalid scheme",Zn="Invalid host",Ur="Invalid port",di=/[a-z]/i,Lr=/[\d+-.a-z]/i,Mr=/\d/,Kr=/^0x/i,ei=/^[0-7]+$/,Nn=/^\d+$/,$n=/^[\da-f]+$/i,Br=/[\0\t\n\r #%/:<>?@[\\\]^|]/,Yr=/[\0\t\n\r #/:<>?@[\\\]^|]/,fi=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,ki=/[\t\n\r]/g,zn=function(Bn){var lr,vr,er,ri;if("number"==typeof Bn){for(lr=[],vr=0;vr<4;vr++)Gt(lr,Bn%256),Bn=ze(Bn/256);return He(lr,".")}if("object"==typeof Bn){for(lr="",er=function(Bn){for(var lr=null,vr=1,er=null,ri=0,uo=0;uo<8;uo++)0!==Bn[uo]?(ri>vr&&(lr=er,vr=ri),er=null,ri=0):(null===er&&(er=uo),++ri);return ri>vr&&(lr=er,vr=ri),lr}(Bn),vr=0;vr<8;vr++)ri&&0===Bn[vr]||(ri&&(ri=!1),er===vr?(lr+=vr?":":"::",ri=!0):(lr+=Vt(Bn[vr],16),vr<7&&(lr+=":")));return"["+lr+"]"}return Bn},rr={},Fr=L({},rr,{" ":1,'"':1,"<":1,">":1,"`":1}),Gn=L({},Fr,{"#":1,"?":1,"{":1,"}":1}),Jr=L({},Gn,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),_i=function(Bn,lr){var vr=K(Bn,0);return vr>32&&vr<127&&!N(lr,Bn)?Bn:encodeURIComponent(Bn)},wi={ftp:21,file:null,http:80,https:443,ws:80,wss:443},br=function(Bn,lr){var vr;return 2==Bn.length&&je(di,Pe(Bn,0))&&(":"==(vr=Pe(Bn,1))||!lr&&"|"==vr)},Dr=function(Bn){var lr;return Bn.length>1&&br(Bt(Bn,0,2))&&(2==Bn.length||"/"===(lr=Pe(Bn,2))||"\\"===lr||"?"===lr||"#"===lr)},gn=function(Bn){return"."===Bn||"%2e"===bt(Bn)},yn=function(Bn){return".."===(Bn=bt(Bn))||"%2e."===Bn||".%2e"===Bn||"%2e%2e"===Bn},gr={},Jt={},Vn={},mr={},Dn={},Pr={},Yt={},_n={},Ge={},kr={},mi={},An={},Er={},Wr={},dr={},Fn={},ar={},Wi={},lo={},vo={},Co={},Gi=function(Bn,lr,vr){var ri,uo,Ci,er=ue(Bn);if(lr){if(uo=this.parse(er))throw lt(uo);this.searchParams=null}else{if(void 0!==vr&&(ri=new Gi(vr,!0)),uo=this.parse(er,null,ri))throw lt(uo);(Ci=De(new ge)).bindURL(this),this.searchParams=Ci}};Gi.prototype={type:"URL",parse:function(Bn,lr,vr){var Rt,_t,mt,jt,er=this,ri=lr||gr,uo=0,Ci="",$o=!1,tr=!1,Ar=!1;for(Bn=ue(Bn),lr||(er.scheme="",er.username="",er.password="",er.host=null,er.port=null,er.path=[],er.query=null,er.fragment=null,er.cannotBeABaseURL=!1,Bn=It(Bn,fi,"")),Bn=It(Bn,ki,""),Rt=Z(Bn);uo<=Rt.length;){switch(_t=Rt[uo],ri){case gr:if(!_t||!je(di,_t)){if(lr)return Xt;ri=Vn;continue}Ci+=bt(_t),ri=Jt;break;case Jt:if(_t&&(je(Lr,_t)||"+"==_t||"-"==_t||"."==_t))Ci+=bt(_t);else{if(":"!=_t){if(lr)return Xt;Ci="",ri=Vn,uo=0;continue}if(lr&&(er.isSpecial()!=N(wi,Ci)||"file"==Ci&&(er.includesCredentials()||null!==er.port)||"file"==er.scheme&&!er.host))return;if(er.scheme=Ci,lr)return void(er.isSpecial()&&wi[er.scheme]==er.port&&(er.port=null));Ci="","file"==er.scheme?ri=Wr:er.isSpecial()&&vr&&vr.scheme==er.scheme?ri=mr:er.isSpecial()?ri=_n:"/"==Rt[uo+1]?(ri=Dn,uo++):(er.cannotBeABaseURL=!0,tn(er.path,""),ri=lo)}break;case Vn:if(!vr||vr.cannotBeABaseURL&&"#"!=_t)return Xt;if(vr.cannotBeABaseURL&&"#"==_t){er.scheme=vr.scheme,er.path=J(vr.path),er.query=vr.query,er.fragment="",er.cannotBeABaseURL=!0,ri=Co;break}ri="file"==vr.scheme?Wr:Pr;continue;case mr:if("/"!=_t||"/"!=Rt[uo+1]){ri=Pr;continue}ri=Ge,uo++;break;case Dn:if("/"==_t){ri=kr;break}ri=Wi;continue;case Pr:if(er.scheme=vr.scheme,_t==Hi)er.username=vr.username,er.password=vr.password,er.host=vr.host,er.port=vr.port,er.path=J(vr.path),er.query=vr.query;else if("/"==_t||"\\"==_t&&er.isSpecial())ri=Yt;else if("?"==_t)er.username=vr.username,er.password=vr.password,er.host=vr.host,er.port=vr.port,er.path=J(vr.path),er.query="",ri=vo;else{if("#"!=_t){er.username=vr.username,er.password=vr.password,er.host=vr.host,er.port=vr.port,er.path=J(vr.path),er.path.length--,ri=Wi;continue}er.username=vr.username,er.password=vr.password,er.host=vr.host,er.port=vr.port,er.path=J(vr.path),er.query=vr.query,er.fragment="",ri=Co}break;case Yt:if(!er.isSpecial()||"/"!=_t&&"\\"!=_t){if("/"!=_t){er.username=vr.username,er.password=vr.password,er.host=vr.host,er.port=vr.port,ri=Wi;continue}ri=kr}else ri=Ge;break;case _n:if(ri=Ge,"/"!=_t||"/"!=Pe(Ci,uo+1))continue;uo++;break;case Ge:if("/"!=_t&&"\\"!=_t){ri=kr;continue}break;case kr:if("@"==_t){$o&&(Ci="%40"+Ci),$o=!0,mt=Z(Ci);for(var on=0;on65535)return Ur;er.port=er.isSpecial()&&_o===wi[er.scheme]?null:_o,Ci=""}if(lr)return;ri=ar;continue}return Ur}Ci+=_t;break;case Wr:if(er.scheme="file","/"==_t||"\\"==_t)ri=dr;else{if(!vr||"file"!=vr.scheme){ri=Wi;continue}if(_t==Hi)er.host=vr.host,er.path=J(vr.path),er.query=vr.query;else if("?"==_t)er.host=vr.host,er.path=J(vr.path),er.query="",ri=vo;else{if("#"!=_t){Dr(He(J(Rt,uo),""))||(er.host=vr.host,er.path=J(vr.path),er.shortenPath()),ri=Wi;continue}er.host=vr.host,er.path=J(vr.path),er.query=vr.query,er.fragment="",ri=Co}}break;case dr:if("/"==_t||"\\"==_t){ri=Fn;break}vr&&"file"==vr.scheme&&!Dr(He(J(Rt,uo),""))&&(br(vr.path[0],!0)?tn(er.path,vr.path[0]):er.host=vr.host),ri=Wi;continue;case Fn:if(_t==Hi||"/"==_t||"\\"==_t||"?"==_t||"#"==_t){if(!lr&&br(Ci))ri=Wi;else if(""==Ci){if(er.host="",lr)return;ri=ar}else{if(jt=er.parseHost(Ci))return jt;if("localhost"==er.host&&(er.host=""),lr)return;Ci="",ri=ar}continue}Ci+=_t;break;case ar:if(er.isSpecial()){if(ri=Wi,"/"!=_t&&"\\"!=_t)continue}else if(lr||"?"!=_t)if(lr||"#"!=_t){if(_t!=Hi&&(ri=Wi,"/"!=_t))continue}else er.fragment="",ri=Co;else er.query="",ri=vo;break;case Wi:if(_t==Hi||"/"==_t||"\\"==_t&&er.isSpecial()||!lr&&("?"==_t||"#"==_t)){if(yn(Ci)?(er.shortenPath(),"/"!=_t&&!("\\"==_t&&er.isSpecial())&&tn(er.path,"")):gn(Ci)?"/"!=_t&&!("\\"==_t&&er.isSpecial())&&tn(er.path,""):("file"==er.scheme&&!er.path.length&&br(Ci)&&(er.host&&(er.host=""),Ci=Pe(Ci,0)+":"),tn(er.path,Ci)),Ci="","file"==er.scheme&&(_t==Hi||"?"==_t||"#"==_t))for(;er.path.length>1&&""===er.path[0];)Zt(er.path);"?"==_t?(er.query="",ri=vo):"#"==_t&&(er.fragment="",ri=Co)}else Ci+=_i(_t,Gn);break;case lo:"?"==_t?(er.query="",ri=vo):"#"==_t?(er.fragment="",ri=Co):_t!=Hi&&(er.path[0]+=_i(_t,rr));break;case vo:lr||"#"!=_t?_t!=Hi&&("'"==_t&&er.isSpecial()?er.query+="%27":er.query+="#"==_t?"%23":_i(_t,rr)):(er.fragment="",ri=Co);break;case Co:_t!=Hi&&(er.fragment+=_i(_t,Fr))}uo++}},parseHost:function(Bn){var lr,vr,er;if("["==Pe(Bn,0)){if("]"!=Pe(Bn,Bn.length-1)||!(lr=function(Bn){var uo,Ci,$o,tr,Ar,Rt,_t,lr=[0,0,0,0,0,0,0,0],vr=0,er=null,ri=0,mt=function(){return Pe(Bn,ri)};if(":"==mt()){if(":"!=Pe(Bn,1))return;ri+=2,er=++vr}for(;mt();){if(8==vr)return;if(":"!=mt()){for(uo=Ci=0;Ci<4&&je($n,mt());)uo=16*uo+Ve(mt(),16),ri++,Ci++;if("."==mt()){if(0==Ci||(ri-=Ci,vr>6))return;for($o=0;mt();){if(tr=null,$o>0){if(!("."==mt()&&$o<4))return;ri++}if(!je(Mr,mt()))return;for(;je(Mr,mt());){if(Ar=Ve(mt(),10),null===tr)tr=Ar;else{if(0==tr)return;tr=10*tr+Ar}if(tr>255)return;ri++}lr[vr]=256*lr[vr]+tr,(2==++$o||4==$o)&&vr++}if(4!=$o)return;break}if(":"==mt()){if(ri++,!mt())return}else if(mt())return;lr[vr++]=uo}else{if(null!==er)return;ri++,er=++vr}}if(null!==er)for(Rt=vr-er,vr=7;0!=vr&&Rt>0;)_t=lr[vr],lr[vr--]=lr[er+Rt-1],lr[er+--Rt]=_t;else if(8!=vr)return;return lr}(Bt(Bn,1,-1))))return Zn;this.host=lr}else if(this.isSpecial()){if(Bn=ee(Bn),je(Br,Bn)||null===(lr=function(Bn){var vr,er,ri,uo,Ci,$o,tr,lr=Ut(Bn,".");if(lr.length&&""==lr[lr.length-1]&&lr.length--,(vr=lr.length)>4)return Bn;for(er=[],ri=0;ri1&&"0"==Pe(uo,0)&&(Ci=je(Kr,uo)?16:8,uo=Bt(uo,8==Ci?1:2)),""===uo)$o=0;else{if(!je(10==Ci?Nn:8==Ci?ei:$n,uo))return Bn;$o=Ve(uo,Ci)}tn(er,$o)}for(ri=0;ri=Be(256,5-vr))return null}else if($o>255)return null;for(tr=it(er),ri=0;ri1?arguments[1]:void 0,ri=ie(vr,new Gi(lr,!1,er));u||(vr.href=ri.serialize(),vr.origin=ri.getOrigin(),vr.protocol=ri.getProtocol(),vr.username=ri.getUsername(),vr.password=ri.getPassword(),vr.host=ri.getHost(),vr.hostname=ri.getHostname(),vr.port=ri.getPort(),vr.pathname=ri.getPathname(),vr.search=ri.getSearch(),vr.searchParams=ri.getSearchParams(),vr.hash=ri.getHash())},jo=os.prototype,To=function(Bn,lr){return{get:function(){return he(this)[Bn]()},set:lr&&function(vr){return he(this)[lr](vr)},configurable:!0,enumerable:!0}};if(u&&(S(jo,"href",To("serialize","setHref")),S(jo,"origin",To("getOrigin")),S(jo,"protocol",To("getProtocol","setProtocol")),S(jo,"username",To("getUsername","setUsername")),S(jo,"password",To("getPassword","setPassword")),S(jo,"host",To("getHost","setHost")),S(jo,"hostname",To("getHostname","setHostname")),S(jo,"port",To("getPort","setPort")),S(jo,"pathname",To("getPathname","setPathname")),S(jo,"search",To("getSearch","setSearch")),S(jo,"searchParams",To("getSearchParams")),S(jo,"hash",To("getHash","setHash"))),y(jo,"toJSON",function(){return he(this).serialize()},{enumerable:!0}),y(jo,"toString",function(){return he(this).serialize()},{enumerable:!0}),ce){var Mi=ce.createObjectURL,li=ce.revokeObjectURL;Mi&&y(os,"createObjectURL",e(Mi,ce)),li&&y(os,"revokeObjectURL",e(li,ce))}ae(os,"URL"),r({global:!0,constructor:!0,forced:!p,sham:!u},{URL:os})},95981:(v,T,i)=>{i(80504)},71324:()=>{},75242:(v,T,i)=>{var r=i(74771);v.exports=r},10323:(v,T,i)=>{var r=i(8412);v.exports=r},99940:(v,T,i)=>{var r=i(399);v.exports=r},89919:(v,T,i)=>{var r=i(98812);v.exports=r},14869:(v,T,i)=>{var r=i(33195);v.exports=r},4475:(v,T,i)=>{var r=i(46332);v.exports=r},38762:(v,T,i)=>{var r=i(42618);v.exports=r},8748:(v,T,i)=>{var r=i(63791);i(33089),v.exports=r},47506:(v,T,i)=>{var r=i(27959);v.exports=r},71873:(v,T,i)=>{var r=i(69029);v.exports=r},61599:(v,T,i)=>{var r=i(28924);v.exports=r},34097:(v,T,i)=>{i(33089);var r=i(35329),u=i(80112),p=i(23336),d=i(99940),e=Array.prototype,_={DOMTokenList:!0,NodeList:!0};v.exports=function(y){var S=y.entries;return y===e||p(e,y)&&S===e.entries||u(_,r(y))?d:S}},15149:(v,T,i)=>{var r=i(98709);v.exports=r},83361:(v,T,i)=>{var r=i(65991);v.exports=r},19095:(v,T,i)=>{var r=i(64158);v.exports=r},71420:(v,T,i)=>{var r=i(91799);v.exports=r},13178:(v,T,i)=>{var r=i(26155);v.exports=r},52049:(v,T,i)=>{i(33089);var r=i(35329),u=i(80112),p=i(23336),d=i(89919),e=Array.prototype,_={DOMTokenList:!0,NodeList:!0};v.exports=function(y){var S=y.forEach;return y===e||p(e,y)&&S===e.forEach||u(_,r(y))?d:S}},83655:(v,T,i)=>{var r=i(33758);v.exports=r},87054:(v,T,i)=>{var r=i(7592);v.exports=r},51946:(v,T,i)=>{i(33089);var r=i(35329),u=i(80112),p=i(23336),d=i(14869),e=Array.prototype,_={DOMTokenList:!0,NodeList:!0};v.exports=function(y){var S=y.keys;return y===e||p(e,y)&&S===e.keys||u(_,r(y))?d:S}},40764:(v,T,i)=>{var r=i(17480);v.exports=r},81214:(v,T,i)=>{var r=i(20681);v.exports=r},50881:(v,T,i)=>{var r=i(90949);v.exports=r},38813:(v,T,i)=>{var r=i(99316);v.exports=r},45284:(v,T,i)=>{var r=i(62212);v.exports=r},70157:(v,T,i)=>{var r=i(49073);v.exports=r},3502:(v,T,i)=>{var r=i(24146);v.exports=r},81610:(v,T,i)=>{var r=i(40104);v.exports=r},19543:(v,T,i)=>{var r=i(3555);v.exports=r},74046:(v,T,i)=>{var r=i(68333);v.exports=r},13731:(v,T,i)=>{var r=i(65786);v.exports=r},80129:(v,T,i)=>{i(33089);var r=i(35329),u=i(80112),p=i(23336),d=i(4475),e=Array.prototype,_={DOMTokenList:!0,NodeList:!0};v.exports=function(y){var S=y.values;return y===e||p(e,y)&&S===e.values||u(_,r(y))?d:S}},43720:(v,T,i)=>{var r=i(66306);v.exports=r},640:(v,T,i)=>{var r=i(31845);i(33089),v.exports=r},50320:(v,T,i)=>{var r=i(44168);v.exports=r},93006:(v,T,i)=>{var r=i(25852);v.exports=r},36226:(v,T,i)=>{var r=i(24457);v.exports=r},21968:(v,T,i)=>{var r=i(99671);v.exports=r},15554:(v,T,i)=>{var r=i(35161);v.exports=r},87259:(v,T,i)=>{var r=i(38007);v.exports=r},62021:(v,T,i)=>{var r=i(57432);v.exports=r},57682:(v,T,i)=>{var r=i(36541);v.exports=r},94222:(v,T,i)=>{var r=i(17303);v.exports=r},1162:(v,T,i)=>{var r=i(62149);v.exports=r},82805:(v,T,i)=>{var r=i(86537);v.exports=r},70809:(v,T,i)=>{var r=i(79553);v.exports=r},26498:(v,T,i)=>{var r=i(80092);i(33089),v.exports=r},44850:(v,T,i)=>{var r=i(472);v.exports=r},9634:(v,T,i)=>{var r=i(4678);v.exports=r},12118:(v,T,i)=>{i(69280);var r=i(13544);v.exports=r.setTimeout},96551:(v,T,i)=>{var r=i(61697);i(33089),v.exports=r},98908:(v,T,i)=>{var r=i(42497);i(33089),v.exports=r},44675:(v,T,i)=>{var r=i(41530);i(33089),v.exports=r},70906:(v,T,i)=>{var r=i(75081);v.exports=r},95050:(v,T,i)=>{var r=i(58255);i(33089),v.exports=r},41530:(v,T,i)=>{i(26953);var r=i(13544);v.exports=r.URLSearchParams},75081:(v,T,i)=>{i(95981),i(71324),i(26953);var r=i(13544);v.exports=r.URL},71577:function(){var v;v="undefined"!=typeof self?self:this,function(i){var r_searchParams="URLSearchParams"in v,r_iterable="Symbol"in v&&"iterator"in Symbol,r_blob="FileReader"in v&&"Blob"in v&&function(){try{return new Blob,!0}catch(De){return!1}}(),r_formData="FormData"in v,r_arrayBuffer="ArrayBuffer"in v;if(r_arrayBuffer)var p=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],d=ArrayBuffer.isView||function(De){return De&&p.indexOf(Object.prototype.toString.call(De))>-1};function e(De){if("string"!=typeof De&&(De=String(De)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(De))throw new TypeError("Invalid character in header field name");return De.toLowerCase()}function _(De){return"string"!=typeof De&&(De=String(De)),De}function y(De){var ce={next:function(){var lt=De.shift();return{done:void 0===lt,value:lt}}};return r_iterable&&(ce[Symbol.iterator]=function(){return ce}),ce}function S(De){this.map={},De instanceof S?De.forEach(function(ce,lt){this.append(lt,ce)},this):Array.isArray(De)?De.forEach(function(ce){this.append(ce[0],ce[1])},this):De&&Object.getOwnPropertyNames(De).forEach(function(ce){this.append(ce,De[ce])},this)}function A(De){if(De.bodyUsed)return Promise.reject(new TypeError("Already read"));De.bodyUsed=!0}function N(De){return new Promise(function(ce,lt){De.onload=function(){ce(De.result)},De.onerror=function(){lt(De.error)}})}function L(De){var ce=new FileReader,lt=N(ce);return ce.readAsArrayBuffer(De),lt}function K(De){if(De.slice)return De.slice(0);var ce=new Uint8Array(De.byteLength);return ce.set(new Uint8Array(De)),ce.buffer}function ee(){return this.bodyUsed=!1,this._initBody=function(De){this._bodyInit=De,De?"string"==typeof De?this._bodyText=De:r_blob&&Blob.prototype.isPrototypeOf(De)?this._bodyBlob=De:r_formData&&FormData.prototype.isPrototypeOf(De)?this._bodyFormData=De:r_searchParams&&URLSearchParams.prototype.isPrototypeOf(De)?this._bodyText=De.toString():r_arrayBuffer&&r_blob&&function(De){return De&&DataView.prototype.isPrototypeOf(De)}(De)?(this._bodyArrayBuffer=K(De.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):r_arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(De)||d(De))?this._bodyArrayBuffer=K(De):this._bodyText=De=Object.prototype.toString.call(De):this._bodyText="",this.headers.get("content-type")||("string"==typeof De?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r_searchParams&&URLSearchParams.prototype.isPrototypeOf(De)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},r_blob&&(this.blob=function(){var De=A(this);if(De)return De;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?A(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(L)}),this.text=function(){var De=A(this);if(De)return De;if(this._bodyBlob)return function(De){var ce=new FileReader,lt=N(ce);return ce.readAsText(De),lt}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function(De){for(var ce=new Uint8Array(De),lt=new Array(ce.length),Ve=0;Ve-1?ce:De}(ce.method||this.method||"GET"),this.mode=ce.mode||this.mode||null,this.signal=ce.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&<)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(lt)}function se(De){var ce=new FormData;return De.trim().split("&").forEach(function(lt){if(lt){var Ve=lt.split("="),ze=Ve.shift().replace(/\+/g," "),Be=Ve.join("=").replace(/\+/g," ");ce.append(decodeURIComponent(ze),decodeURIComponent(Be))}}),ce}function Ee(De){var ce=new S;return De.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(Ve){var ze=Ve.split(":"),Be=ze.shift().trim();if(Be){var Pe=ze.join(":").trim();ce.append(Be,Pe)}}),ce}function ie(De,ce){ce||(ce={}),this.type="default",this.status=void 0===ce.status?200:ce.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in ce?ce.statusText:"OK",this.headers=new S(ce.headers),this.url=ce.url||"",this._initBody(De)}H.prototype.clone=function(){return new H(this,{body:this._bodyInit})},ee.call(H.prototype),ee.call(ie.prototype),ie.prototype.clone=function(){return new ie(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new S(this.headers),url:this.url})},ie.error=function(){var De=new ie(null,{status:0,statusText:""});return De.type="error",De};var he=[301,302,303,307,308];ie.redirect=function(De,ce){if(-1===he.indexOf(ce))throw new RangeError("Invalid status code");return new ie(null,{status:ce,headers:{location:De}})},i.DOMException=v.DOMException;try{new i.DOMException}catch(De){i.DOMException=function(ce,lt){this.message=ce,this.name=lt;var Ve=Error(ce);this.stack=Ve.stack},i.DOMException.prototype=Object.create(Error.prototype),i.DOMException.prototype.constructor=i.DOMException}function ge(De,ce){return new Promise(function(lt,Ve){var ze=new H(De,ce);if(ze.signal&&ze.signal.aborted)return Ve(new i.DOMException("Aborted","AbortError"));var Be=new XMLHttpRequest;function Pe(){Be.abort()}Be.onload=function(){var je={status:Be.status,statusText:Be.statusText,headers:Ee(Be.getAllResponseHeaders()||"")};je.url="responseURL"in Be?Be.responseURL:je.headers.get("X-Request-URL"),lt(new ie("response"in Be?Be.response:Be.responseText,je))},Be.onerror=function(){Ve(new TypeError("Network request failed"))},Be.ontimeout=function(){Ve(new TypeError("Network request failed"))},Be.onabort=function(){Ve(new i.DOMException("Aborted","AbortError"))},Be.open(ze.method,ze.url,!0),"include"===ze.credentials?Be.withCredentials=!0:"omit"===ze.credentials&&(Be.withCredentials=!1),"responseType"in Be&&r_blob&&(Be.responseType="blob"),ze.headers.forEach(function(je,He){Be.setRequestHeader(He,je)}),ze.signal&&(ze.signal.addEventListener("abort",Pe),Be.onreadystatechange=function(){4===Be.readyState&&ze.signal.removeEventListener("abort",Pe)}),Be.send(void 0===ze._bodyInit?null:ze._bodyInit)})}ge.polyfill=!0,v.fetch||(v.fetch=ge,v.Headers=S,v.Request=H,v.Response=ie),i.Headers=S,i.Request=H,i.Response=ie,i.fetch=ge,Object.defineProperty(i,"__esModule",{value:!0})}({})},52243:function(v){var T;T="undefined"!=typeof global?global:this,v.exports=function(T){if(T.CSS&&T.CSS.escape)return T.CSS.escape;var i=function(r){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var e,u=String(r),p=u.length,d=-1,_="",y=u.charCodeAt(0);++d=1&&e<=31||127==e||0==d&&e>=48&&e<=57||1==d&&e>=48&&e<=57&&45==y?"\\"+e.toString(16)+" ":0==d&&1==p&&45==e||!(e>=128||45==e||95==e||e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122)?"\\"+u.charAt(d):u.charAt(d):_+="\ufffd";return _};return T.CSS||(T.CSS={}),T.CSS.escape=i,i}(T)},89225:v=>{"use strict";var T=function(ae){return!(!(ue=ae)||"object"!=typeof ue||function(ue){var ae=Object.prototype.toString.call(ue);return"[object RegExp]"===ae||"[object Date]"===ae||function(ue){return ue.$$typeof===p}(ue)}(ae));var ue},p="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function _(ue,ae){return!1!==ae.clone&&ae.isMergeableObject(ue)?K(function(ue){return Array.isArray(ue)?[]:{}}(ue),ue,ae):ue}function y(ue,ae,H){return ue.concat(ae).map(function(se){return _(se,H)})}function N(ue){return Object.keys(ue).concat(function(ue){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(ue).filter(function(ae){return ue.propertyIsEnumerable(ae)}):[]}(ue))}function L(ue,ae){try{return ae in ue}catch(H){return!1}}function K(ue,ae,H){(H=H||{}).arrayMerge=H.arrayMerge||y,H.isMergeableObject=H.isMergeableObject||T,H.cloneUnlessOtherwiseSpecified=_;var se=Array.isArray(ae);return se===Array.isArray(ue)?se?H.arrayMerge(ue,ae,H):function(ue,ae,H){var se={};return H.isMergeableObject(ue)&&N(ue).forEach(function(Ee){se[Ee]=_(ue[Ee],H)}),N(ae).forEach(function(Ee){(function(ue,ae){return L(ue,ae)&&!(Object.hasOwnProperty.call(ue,ae)&&Object.propertyIsEnumerable.call(ue,ae))})(ue,Ee)||(se[Ee]=L(ue,Ee)&&H.isMergeableObject(ae[Ee])?function(ue,ae){if(!ae.customMerge)return K;var H=ae.customMerge(ue);return"function"==typeof H?H:K}(Ee,H)(ue[Ee],ae[Ee],H):_(ae[Ee],H))}),se}(ue,ae,H):_(ae,H)}K.all=function(ae,H){if(!Array.isArray(ae))throw new Error("first argument should be an array");return ae.reduce(function(se,Ee){return K(se,Ee,H)},{})},v.exports=K},97057:(v,T,i)=>{"use strict";i.d(T,{qY:()=>Z});var u=function(Ee,ie,he){this.name=Ee,this.version=ie,this.os=he,this.type="browser"},p=function(Ee){this.version=Ee,this.type="node",this.name="node",this.os=process.platform},d=function(Ee,ie,he,ge){this.name=Ee,this.version=ie,this.os=he,this.bot=ge,this.type="bot-device"},e=function(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null},_=function(){this.type="react-native",this.name="react-native",this.version=null,this.os=null},S=/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,N=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],L=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function Z(se){return se?ee(se):"undefined"==typeof document&&"undefined"!=typeof navigator&&"ReactNative"===navigator.product?new _:"undefined"!=typeof navigator?ee(navigator.userAgent):"undefined"!=typeof process&&process.version?new p(process.version.slice(1)):null}function ee(se){var Ee=function(se){return""!==se&&N.reduce(function(Ee,ie){var he=ie[0];if(Ee)return Ee;var De=ie[1].exec(se);return!!De&&[he,De]},!1)}(se);if(!Ee)return null;var ie=Ee[0],he=Ee[1];if("searchbot"===ie)return new e;var ge=he[1]&&he[1].split(/[._]/).slice(0,3);ge?ge.length<3&&(ge=function(){for(var se=0,Ee=0,ie=arguments.length;Ee1?$n-1:0),Yr=1;Yr<$n;Yr++)Br[Yr-1]=arguments[Yr];return A(ei,Nn,Br)}}function ge(ei,Nn){r&&r(ei,null);for(var $n=Nn.length;$n--;){var Br=Nn[$n];if("string"==typeof Br){var Yr=K(Br);Yr!==Br&&(u(Nn)||(Nn[$n]=Yr),Br=Yr)}ei[Br]=!0}return ei}function De(ei){var Nn=y(null),$n=void 0;for($n in ei)A(i,ei,[$n])&&(Nn[$n]=ei[$n]);return Nn}function ce(ei,Nn){for(;null!==ei;){var $n=d(ei,Nn);if($n){if($n.get)return ie($n.get);if("function"==typeof $n.value)return ie($n.value)}ei=p(ei)}return function(Yr){return console.warn("fallback value for",Yr),null}}var lt=e(["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"]),Ve=e(["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"]),ze=e(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Be=e(["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"]),Pe=e(["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"]),je=e(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),He=e(["#text"]),Vt=e(["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"]),it=e(["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"]),tn=e(["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"]),It=e(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Zt=_(/\{\{[\s\S]*|[\s\S]*\}\}/gm),Ut=_(/<%[\s\S]*|[\s\S]*%>/gm),Bt=_(/^data-[\-\w.\u00B7-\uFFFF]/),bt=_(/^aria-[\-\w]+$/),Gt=_(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),xt=_(/^(?:\w+script|data):/i),Xt=_(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Zn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(ei){return typeof ei}:function(ei){return ei&&"function"==typeof Symbol&&ei.constructor===Symbol&&ei!==Symbol.prototype?"symbol":typeof ei};function Ur(ei){if(Array.isArray(ei)){for(var Nn=0,$n=Array(ei.length);Nn0&&void 0!==arguments[0]?arguments[0]:di(),Nn=function($r){return Mr($r)};if(Nn.version="2.3.3",Nn.removed=[],!ei||!ei.document||9!==ei.document.nodeType)return Nn.isSupported=!1,Nn;var $n=ei.document,Br=ei.document,Yr=ei.DocumentFragment,fi=ei.HTMLTemplateElement,ki=ei.Node,Hi=ei.Element,Zr=ei.NodeFilter,Cn=ei.NamedNodeMap,Wt=void 0===Cn?ei.NamedNodeMap||ei.MozNamedAttrMap:Cn,zn=ei.Text,rr=ei.Comment,Fr=ei.DOMParser,Gn=ei.trustedTypes,Jr=Hi.prototype,_i=ce(Jr,"cloneNode"),wi=ce(Jr,"nextSibling"),br=ce(Jr,"childNodes"),Dr=ce(Jr,"parentNode");if("function"==typeof fi){var gn=Br.createElement("template");gn.content&&gn.content.ownerDocument&&(Br=gn.content.ownerDocument)}var yn=Lr(Gn,$n),gr=yn&&uo?yn.createHTML(""):"",Vn=Br.implementation,mr=Br.createNodeIterator,Dn=Br.createDocumentFragment,Pr=Br.getElementsByTagName,Yt=$n.importNode,_n={};try{_n=De(Br).documentMode?Br.documentMode:{}}catch(So){}var Ge={};Nn.isSupported="function"==typeof Dr&&Vn&&void 0!==Vn.createHTMLDocument&&9!==_n;var kr=Zt,mi=Ut,An=Bt,Er=bt,Wr=xt,dr=Xt,Fn=Gt,ar=null,Wi=ge({},[].concat(Ur(lt),Ur(Ve),Ur(ze),Ur(Pe),Ur(He))),lo=null,vo=ge({},[].concat(Ur(Vt),Ur(it),Ur(tn),Ur(It))),Co=null,Gi=null,os=!0,jo=!0,To=!1,Mi=!1,li=!1,Bn=!1,lr=!1,vr=!1,er=!1,ri=!0,uo=!1,Ci=!0,$o=!0,tr=!1,Ar={},Rt=null,_t=ge({},["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"]),mt=null,jt=ge({},["audio","video","img","source","image","track"]),on=null,si=ge({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Vi="http://www.w3.org/1998/Math/MathML",_o="http://www.w3.org/2000/svg",co="http://www.w3.org/1999/xhtml",Es=co,Zs=!1,ls=void 0,La=["application/xhtml+xml","text/html"],ta="text/html",Is=void 0,us=null,ya=Br.createElement("form"),el=function($r){us&&us===$r||((!$r||"object"!==(void 0===$r?"undefined":Zn($r)))&&($r={}),$r=De($r),ar="ALLOWED_TAGS"in $r?ge({},$r.ALLOWED_TAGS):Wi,lo="ALLOWED_ATTR"in $r?ge({},$r.ALLOWED_ATTR):vo,on="ADD_URI_SAFE_ATTR"in $r?ge(De(si),$r.ADD_URI_SAFE_ATTR):si,mt="ADD_DATA_URI_TAGS"in $r?ge(De(jt),$r.ADD_DATA_URI_TAGS):jt,Rt="FORBID_CONTENTS"in $r?ge({},$r.FORBID_CONTENTS):_t,Co="FORBID_TAGS"in $r?ge({},$r.FORBID_TAGS):{},Gi="FORBID_ATTR"in $r?ge({},$r.FORBID_ATTR):{},Ar="USE_PROFILES"in $r&&$r.USE_PROFILES,os=!1!==$r.ALLOW_ARIA_ATTR,jo=!1!==$r.ALLOW_DATA_ATTR,To=$r.ALLOW_UNKNOWN_PROTOCOLS||!1,Mi=$r.SAFE_FOR_TEMPLATES||!1,li=$r.WHOLE_DOCUMENT||!1,vr=$r.RETURN_DOM||!1,er=$r.RETURN_DOM_FRAGMENT||!1,ri=!1!==$r.RETURN_DOM_IMPORT,uo=$r.RETURN_TRUSTED_TYPE||!1,lr=$r.FORCE_BODY||!1,Ci=!1!==$r.SANITIZE_DOM,$o=!1!==$r.KEEP_CONTENT,tr=$r.IN_PLACE||!1,Fn=$r.ALLOWED_URI_REGEXP||Fn,Es=$r.NAMESPACE||co,ls=ls=-1===La.indexOf($r.PARSER_MEDIA_TYPE)?ta:$r.PARSER_MEDIA_TYPE,Is="application/xhtml+xml"===ls?function(to){return to}:K,Mi&&(jo=!1),er&&(vr=!0),Ar&&(ar=ge({},[].concat(Ur(He))),lo=[],!0===Ar.html&&(ge(ar,lt),ge(lo,Vt)),!0===Ar.svg&&(ge(ar,Ve),ge(lo,it),ge(lo,It)),!0===Ar.svgFilters&&(ge(ar,ze),ge(lo,it),ge(lo,It)),!0===Ar.mathMl&&(ge(ar,Pe),ge(lo,tn),ge(lo,It))),$r.ADD_TAGS&&(ar===Wi&&(ar=De(ar)),ge(ar,$r.ADD_TAGS)),$r.ADD_ATTR&&(lo===vo&&(lo=De(lo)),ge(lo,$r.ADD_ATTR)),$r.ADD_URI_SAFE_ATTR&&ge(on,$r.ADD_URI_SAFE_ATTR),$r.FORBID_CONTENTS&&(Rt===_t&&(Rt=De(Rt)),ge(Rt,$r.FORBID_CONTENTS)),$o&&(ar["#text"]=!0),li&&ge(ar,["html","head","body"]),ar.table&&(ge(ar,["tbody"]),delete Co.tbody),e&&e($r),us=$r)},ca=ge({},["mi","mo","mn","ms","mtext"]),$s=ge({},["foreignobject","desc","title","annotation-xml"]),da=ge({},Ve);ge(da,ze),ge(da,Be);var Il=ge({},Pe);ge(Il,je);var fo=function($r){var to=Dr($r);(!to||!to.tagName)&&(to={namespaceURI:co,tagName:"template"});var tt=K($r.tagName),sn=K(to.tagName);if($r.namespaceURI===_o)return to.namespaceURI===co?"svg"===tt:to.namespaceURI===Vi?"svg"===tt&&("annotation-xml"===sn||ca[sn]):Boolean(da[tt]);if($r.namespaceURI===Vi)return to.namespaceURI===co?"math"===tt:to.namespaceURI===_o?"math"===tt&&$s[sn]:Boolean(Il[tt]);if($r.namespaceURI===co){if(to.namespaceURI===_o&&!$s[sn]||to.namespaceURI===Vi&&!ca[sn])return!1;var ne=ge({},["title","style","font","a","script"]);return!Il[tt]&&(ne[tt]||!da[tt])}return!1},Ya=function($r){J(Nn.removed,{element:$r});try{$r.parentNode.removeChild($r)}catch(to){try{$r.outerHTML=gr}catch(tt){$r.remove()}}},Ao=function($r,to){try{J(Nn.removed,{attribute:to.getAttributeNode($r),from:to})}catch(tt){J(Nn.removed,{attribute:null,from:to})}if(to.removeAttribute($r),"is"===$r&&!lo[$r])if(vr||er)try{Ya(to)}catch(tt){}else try{to.setAttribute($r,"")}catch(tt){}},fs=function($r){var to=void 0,tt=void 0;if(lr)$r=""+$r;else{var sn=ee($r,/^[\r\n\t ]+/);tt=sn&&sn[0]}"application/xhtml+xml"===ls&&($r=''+$r+"");var ne=yn?yn.createHTML($r):$r;if(Es===co)try{to=(new Fr).parseFromString(ne,ls)}catch(Lt){}if(!to||!to.documentElement){to=Vn.createDocument(Es,"template",null);try{to.documentElement.innerHTML=Zs?"":ne}catch(Lt){}}var $e=to.body||to.documentElement;return $r&&tt&&$e.insertBefore(Br.createTextNode(tt),$e.childNodes[0]||null),Es===co?Pr.call(to,li?"html":"body")[0]:li?to.documentElement:$e},Ca=function($r){return mr.call($r.ownerDocument||$r,$r,Zr.SHOW_ELEMENT|Zr.SHOW_COMMENT|Zr.SHOW_TEXT,null,!1)},Ra=function($r){return!($r instanceof zn||$r instanceof rr||"string"==typeof $r.nodeName&&"string"==typeof $r.textContent&&"function"==typeof $r.removeChild&&$r.attributes instanceof Wt&&"function"==typeof $r.removeAttribute&&"function"==typeof $r.setAttribute&&"string"==typeof $r.namespaceURI&&"function"==typeof $r.insertBefore)},pl=function($r){return"object"===(void 0===ki?"undefined":Zn(ki))?$r instanceof ki:$r&&"object"===(void 0===$r?"undefined":Zn($r))&&"number"==typeof $r.nodeType&&"string"==typeof $r.nodeName},Ws=function($r,to,tt){!Ge[$r]||L(Ge[$r],function(sn){sn.call(Nn,to,tt,us)})},Po=function($r){var to=void 0;if(Ws("beforeSanitizeElements",$r,null),Ra($r)||ee($r.nodeName,/[\u0080-\uFFFF]/))return Ya($r),!0;var tt=Is($r.nodeName);if(Ws("uponSanitizeElement",$r,{tagName:tt,allowedTags:ar}),!pl($r.firstElementChild)&&(!pl($r.content)||!pl($r.content.firstElementChild))&&se(/<[/\w]/g,$r.innerHTML)&&se(/<[/\w]/g,$r.textContent)||"select"===tt&&se(/