@dnncommunity/dnn-elements 0.14.1 → 0.15.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +24 -24
- package/dist/.storybook/utilities.js +16 -0
- package/dist/.storybook/utilities.js.map +1 -0
- package/dist/cjs/{css-shim-3bfdba4f.js → css-shim-aaf4fec9.js} +3 -3
- package/dist/cjs/css-shim-aaf4fec9.js.map +1 -0
- package/dist/cjs/{debounce-1de79bc7.js → debounce-901e1f0c.js} +18 -18
- package/dist/cjs/{debounce-1de79bc7.js.map → debounce-901e1f0c.js.map} +1 -1
- package/dist/cjs/dnn-button.cjs.entry.js +80 -76
- package/dist/cjs/dnn-button.cjs.entry.js.map +1 -1
- package/dist/cjs/{dnn-button_16.cjs.entry.js → dnn-button_17.cjs.entry.js} +2024 -1710
- package/dist/cjs/dnn-button_17.cjs.entry.js.map +1 -0
- package/dist/cjs/dnn-checkbox.cjs.entry.js +47 -47
- package/dist/cjs/dnn-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-chevron.cjs.entry.js +22 -22
- package/dist/cjs/dnn-chevron.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-collapsible.cjs.entry.js +57 -54
- package/dist/cjs/dnn-collapsible.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-color-picker.cjs.entry.js +494 -494
- package/dist/cjs/dnn-color-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-dropzone.cjs.entry.js +141 -141
- package/dist/cjs/dnn-dropzone.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-image-cropper.cjs.entry.js +394 -394
- package/dist/cjs/dnn-image-cropper.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-modal.cjs.entry.js +53 -50
- package/dist/cjs/dnn-modal.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-permissions-grid.cjs.entry.js +320 -0
- package/dist/cjs/dnn-permissions-grid.cjs.entry.js.map +1 -0
- package/dist/cjs/dnn-searchbox.cjs.entry.js +54 -54
- package/dist/cjs/dnn-searchbox.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-sort-icon.cjs.entry.js +32 -32
- package/dist/cjs/dnn-sort-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-tab.cjs.entry.js +19 -19
- package/dist/cjs/dnn-tab.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-tabs.cjs.entry.js +40 -40
- package/dist/cjs/dnn-tabs.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-toggle.cjs.entry.js +26 -26
- package/dist/cjs/dnn-toggle.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-treeview-item.cjs.entry.js +56 -56
- package/dist/cjs/dnn-treeview-item.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-vertical-overflow-menu.cjs.entry.js +113 -111
- package/dist/cjs/dnn-vertical-overflow-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn-vertical-splitview.cjs.entry.js +121 -121
- package/dist/cjs/dnn-vertical-splitview.cjs.entry.js.map +1 -1
- package/dist/cjs/dnn.cjs.js +8 -4
- package/dist/cjs/dnn.cjs.js.map +1 -1
- package/dist/cjs/{dom-8ac1ad03.js → dom-14886762.js} +2 -2
- package/dist/cjs/{dom-8ac1ad03.js.map → dom-14886762.js.map} +1 -1
- package/dist/cjs/{index-7505bd72.js → index-514ef6dd.js} +32 -2
- package/dist/cjs/index-514ef6dd.js.map +1 -0
- package/dist/cjs/{index-aff4d89a.js → index-d53702a3.js} +30 -4
- package/dist/cjs/index-d53702a3.js.map +1 -0
- package/dist/cjs/index.cjs.js +41 -41
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/loader.cjs.js.map +1 -1
- package/dist/cjs/{mouseUtilities-75be531a.js → mouseUtilities-ecd5ecf7.js} +19 -19
- package/dist/cjs/{mouseUtilities-75be531a.js.map → mouseUtilities-ecd5ecf7.js.map} +1 -1
- package/dist/cjs/{shadow-css-41d9783d.js → shadow-css-c44ea13a.js} +2 -2
- package/dist/cjs/{shadow-css-41d9783d.js.map → shadow-css-c44ea13a.js.map} +1 -1
- package/dist/collection/collection-manifest.json +3 -2
- package/dist/collection/components/dnn-button/dnn-button.js +275 -271
- package/dist/collection/components/dnn-button/dnn-button.js.map +1 -1
- package/dist/collection/components/dnn-button/dnn-button.stories.js +72 -0
- package/dist/collection/components/dnn-button/dnn-button.stories.js.map +1 -0
- package/dist/collection/components/dnn-checkbox/dnn-checkbox.css +6 -0
- package/dist/collection/components/dnn-checkbox/dnn-checkbox.js +151 -139
- package/dist/collection/components/dnn-checkbox/dnn-checkbox.js.map +1 -1
- package/dist/collection/components/dnn-checkbox/dnn-checkbox.stories.js +39 -0
- package/dist/collection/components/dnn-checkbox/dnn-checkbox.stories.js.map +1 -0
- package/dist/collection/components/dnn-chevron/dnn-chevron.js +106 -106
- package/dist/collection/components/dnn-chevron/dnn-chevron.js.map +1 -1
- package/dist/collection/components/dnn-chevron/dnn-chevron.stories.js +38 -0
- package/dist/collection/components/dnn-chevron/dnn-chevron.stories.js.map +1 -0
- package/dist/collection/components/dnn-collapsible/dnn-collapsible.js +145 -142
- package/dist/collection/components/dnn-collapsible/dnn-collapsible.js.map +1 -1
- package/dist/collection/components/dnn-collapsible/dnn-collapsible.stories.js +39 -0
- package/dist/collection/components/dnn-collapsible/dnn-collapsible.stories.js.map +1 -0
- package/dist/collection/components/dnn-color-picker/dnn-color-picker.js +433 -433
- package/dist/collection/components/dnn-color-picker/dnn-color-picker.js.map +1 -1
- package/dist/collection/components/dnn-color-picker/dnn-color-picker.stories.js +33 -0
- package/dist/collection/components/dnn-color-picker/dnn-color-picker.stories.js.map +1 -0
- package/dist/collection/components/dnn-dropzone/dnn-dropzone.js +265 -265
- package/dist/collection/components/dnn-dropzone/dnn-dropzone.js.map +1 -1
- package/dist/collection/components/dnn-dropzone/dnn-dropzone.stories.js +48 -0
- package/dist/collection/components/dnn-dropzone/dnn-dropzone.stories.js.map +1 -0
- package/dist/collection/components/dnn-image-cropper/CornerType.js +8 -8
- package/dist/collection/components/dnn-image-cropper/CornerType.js.map +1 -1
- package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.js +522 -522
- package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.js.map +1 -1
- package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.stories.js +60 -0
- package/dist/collection/components/dnn-image-cropper/dnn-image-cropper.stories.js.map +1 -0
- package/dist/collection/components/dnn-modal/dnn-modal.js +190 -172
- package/dist/collection/components/dnn-modal/dnn-modal.js.map +1 -1
- package/dist/collection/components/dnn-modal/dnn-modal.stories.js +47 -0
- package/dist/collection/components/dnn-modal/dnn-modal.stories.js.map +1 -0
- package/dist/collection/components/dnn-permissions-grid/dnn-permissions-grid.css +83 -0
- package/dist/collection/components/dnn-permissions-grid/dnn-permissions-grid.js +531 -0
- package/dist/collection/components/dnn-permissions-grid/dnn-permissions-grid.js.map +1 -0
- package/dist/collection/components/dnn-permissions-grid/dnn-permissions-grid.stories.js +273 -0
- package/dist/collection/components/dnn-permissions-grid/dnn-permissions-grid.stories.js.map +1 -0
- package/dist/collection/components/dnn-permissions-grid/localization-interface.js +3 -0
- package/dist/collection/components/dnn-permissions-grid/localization-interface.js.map +1 -0
- package/dist/collection/components/dnn-permissions-grid/permissions-interface.js +3 -0
- package/dist/collection/components/dnn-permissions-grid/permissions-interface.js.map +1 -0
- package/dist/collection/components/dnn-permissions-grid/role-group-interface.js +2 -0
- package/dist/collection/components/dnn-permissions-grid/role-group-interface.js.map +1 -0
- package/dist/collection/components/dnn-permissions-grid/role-interface.js +2 -0
- package/dist/collection/components/dnn-permissions-grid/role-interface.js.map +1 -0
- package/dist/collection/components/dnn-permissions-grid/searched-user-interface.js +2 -0
- package/dist/collection/components/dnn-permissions-grid/searched-user-interface.js.map +1 -0
- package/dist/collection/components/dnn-searchbox/dnn-searchbox.js +136 -136
- package/dist/collection/components/dnn-searchbox/dnn-searchbox.js.map +1 -1
- package/dist/collection/components/dnn-searchbox/dnn-searchbox.stories.js +26 -0
- package/dist/collection/components/dnn-searchbox/dnn-searchbox.stories.js.map +1 -0
- package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.css +6 -3
- package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.js +80 -80
- package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.js.map +1 -1
- package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.stories.js +58 -0
- package/dist/collection/components/dnn-sort-icon/dnn-sort-icon.stories.js.map +1 -0
- package/dist/collection/components/dnn-tab/dnn-tab.js +83 -83
- package/dist/collection/components/dnn-tab/dnn-tab.js.map +1 -1
- package/dist/collection/components/dnn-tab/dnn-tab.stories.js +25 -0
- package/dist/collection/components/dnn-tab/dnn-tab.stories.js.map +1 -0
- package/dist/collection/components/dnn-tabs/dnn-tabs.js +54 -54
- package/dist/collection/components/dnn-tabs/dnn-tabs.js.map +1 -1
- package/dist/collection/components/dnn-tabs/dnn-tabs.stories.js +48 -0
- package/dist/collection/components/dnn-tabs/dnn-tabs.stories.js.map +1 -0
- package/dist/collection/components/dnn-toggle/dnn-toggle.css +1 -1
- package/dist/collection/components/dnn-toggle/dnn-toggle.js +93 -93
- package/dist/collection/components/dnn-toggle/dnn-toggle.js.map +1 -1
- package/dist/collection/components/dnn-toggle/dnn-toggle.stories.js +53 -0
- package/dist/collection/components/dnn-toggle/dnn-toggle.stories.js.map +1 -0
- package/dist/collection/components/dnn-toggle/toggle-interface.js +1 -1
- package/dist/collection/components/dnn-toggle/toggle-interface.js.map +1 -1
- package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.js +130 -126
- package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.js.map +1 -1
- package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.stories.js +36 -0
- package/dist/collection/components/dnn-treeview-item/dnn-treeview-item.stories.js.map +1 -0
- package/dist/collection/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.css +6 -7
- package/dist/collection/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.js +133 -131
- package/dist/collection/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.js.map +1 -1
- package/dist/collection/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.stories.js +60 -0
- package/dist/collection/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.stories.js.map +1 -0
- package/dist/collection/components/dnn-vertical-splitview/dnn-vertical-splitview.css +4 -2
- package/dist/collection/components/dnn-vertical-splitview/dnn-vertical-splitview.js +233 -233
- package/dist/collection/components/dnn-vertical-splitview/dnn-vertical-splitview.js.map +1 -1
- package/dist/collection/components/dnn-vertical-splitview/dnn-vertical-splitview.stories.js +75 -0
- package/dist/collection/components/dnn-vertical-splitview/dnn-vertical-splitview.stories.js.map +1 -0
- package/dist/collection/index.js +2 -2
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/utilities/colorInfo.js +190 -190
- package/dist/collection/utilities/colorInfo.js.map +1 -1
- package/dist/collection/utilities/debounce.js +18 -18
- package/dist/collection/utilities/debounce.js.map +1 -1
- package/dist/collection/utilities/dnnServicesFramework.js +41 -41
- package/dist/collection/utilities/dnnServicesFramework.js.map +1 -1
- package/dist/collection/utilities/mouseUtilities.js +19 -19
- package/dist/collection/utilities/mouseUtilities.js.map +1 -1
- package/dist/{esm/css-shim-20dbffa5.js → dnn/css-shim-091f949f.js} +3 -3
- package/dist/dnn/css-shim-091f949f.js.map +1 -0
- package/dist/dnn/{css-shim-856c55de.system.js → css-shim-c5bffe6b.system.js} +2 -2
- package/dist/dnn/css-shim-c5bffe6b.system.js.map +1 -0
- package/dist/{esm/debounce-06f55268.js → dnn/debounce-6be67abd.js} +18 -18
- package/dist/dnn/{debounce-06f55268.js.map → debounce-6be67abd.js.map} +1 -1
- package/dist/dnn/{debounce-eef81bf7.system.js → debounce-db438a09.system.js} +1 -1
- package/dist/dnn/{debounce-eef81bf7.system.js.map → debounce-db438a09.system.js.map} +0 -0
- package/dist/dnn/dnn-button.entry.js +80 -76
- package/dist/dnn/dnn-button.entry.js.map +1 -1
- package/dist/dnn/dnn-button.system.entry.js +1 -1
- package/dist/dnn/dnn-button.system.entry.js.map +1 -1
- package/dist/dnn/dnn-checkbox.entry.js +47 -47
- package/dist/dnn/dnn-checkbox.entry.js.map +1 -1
- package/dist/dnn/dnn-checkbox.system.entry.js +1 -1
- package/dist/dnn/dnn-checkbox.system.entry.js.map +1 -1
- package/dist/dnn/dnn-chevron.entry.js +22 -22
- package/dist/dnn/dnn-chevron.entry.js.map +1 -1
- package/dist/dnn/dnn-chevron.system.entry.js +1 -1
- package/dist/dnn/dnn-chevron.system.entry.js.map +1 -1
- package/dist/dnn/dnn-collapsible.entry.js +57 -54
- package/dist/dnn/dnn-collapsible.entry.js.map +1 -1
- package/dist/dnn/dnn-collapsible.system.entry.js +1 -1
- package/dist/dnn/dnn-collapsible.system.entry.js.map +1 -1
- package/dist/dnn/dnn-color-picker.entry.js +494 -494
- package/dist/dnn/dnn-color-picker.entry.js.map +1 -1
- package/dist/dnn/dnn-color-picker.system.entry.js +2 -2
- package/dist/dnn/dnn-color-picker.system.entry.js.map +1 -1
- package/dist/dnn/dnn-dropzone.entry.js +141 -141
- package/dist/dnn/dnn-dropzone.entry.js.map +1 -1
- package/dist/dnn/dnn-dropzone.system.entry.js +1 -1
- package/dist/dnn/dnn-dropzone.system.entry.js.map +1 -1
- package/dist/dnn/dnn-image-cropper.entry.js +394 -394
- package/dist/dnn/dnn-image-cropper.entry.js.map +1 -1
- package/dist/dnn/dnn-image-cropper.system.entry.js +1 -1
- package/dist/dnn/dnn-image-cropper.system.entry.js.map +1 -1
- package/dist/dnn/dnn-modal.entry.js +53 -50
- package/dist/dnn/dnn-modal.entry.js.map +1 -1
- package/dist/dnn/dnn-modal.system.entry.js +1 -1
- package/dist/dnn/dnn-modal.system.entry.js.map +1 -1
- package/dist/dnn/dnn-permissions-grid.entry.js +316 -0
- package/dist/dnn/dnn-permissions-grid.entry.js.map +1 -0
- package/dist/dnn/dnn-permissions-grid.system.entry.js +2 -0
- package/dist/dnn/dnn-permissions-grid.system.entry.js.map +1 -0
- package/dist/dnn/dnn-searchbox.entry.js +54 -54
- package/dist/dnn/dnn-searchbox.entry.js.map +1 -1
- package/dist/dnn/dnn-searchbox.system.entry.js +1 -1
- package/dist/dnn/dnn-searchbox.system.entry.js.map +1 -1
- package/dist/dnn/dnn-sort-icon.entry.js +32 -32
- package/dist/dnn/dnn-sort-icon.entry.js.map +1 -1
- package/dist/dnn/dnn-sort-icon.system.entry.js +1 -1
- package/dist/dnn/dnn-sort-icon.system.entry.js.map +1 -1
- package/dist/dnn/dnn-tab.entry.js +19 -19
- package/dist/dnn/dnn-tab.entry.js.map +1 -1
- package/dist/dnn/dnn-tab.system.entry.js +1 -1
- package/dist/dnn/dnn-tabs.entry.js +40 -40
- package/dist/dnn/dnn-tabs.entry.js.map +1 -1
- package/dist/dnn/dnn-tabs.system.entry.js +1 -1
- package/dist/dnn/dnn-tabs.system.entry.js.map +1 -1
- package/dist/dnn/dnn-toggle.entry.js +26 -26
- package/dist/dnn/dnn-toggle.entry.js.map +1 -1
- package/dist/dnn/dnn-toggle.system.entry.js +1 -1
- package/dist/dnn/dnn-toggle.system.entry.js.map +1 -1
- package/dist/dnn/dnn-treeview-item.entry.js +56 -56
- package/dist/dnn/dnn-treeview-item.entry.js.map +1 -1
- package/dist/dnn/dnn-treeview-item.system.entry.js +1 -1
- package/dist/dnn/dnn-treeview-item.system.entry.js.map +1 -1
- package/dist/dnn/dnn-vertical-overflow-menu.entry.js +113 -111
- package/dist/dnn/dnn-vertical-overflow-menu.entry.js.map +1 -1
- package/dist/dnn/dnn-vertical-overflow-menu.system.entry.js +1 -1
- package/dist/dnn/dnn-vertical-overflow-menu.system.entry.js.map +1 -1
- package/dist/dnn/dnn-vertical-splitview.entry.js +121 -121
- package/dist/dnn/dnn-vertical-splitview.entry.js.map +1 -1
- package/dist/dnn/dnn-vertical-splitview.system.entry.js +1 -1
- package/dist/dnn/dnn-vertical-splitview.system.entry.js.map +1 -1
- package/dist/dnn/dnn.esm.js +8 -4
- package/dist/dnn/dnn.esm.js.map +1 -1
- package/dist/dnn/dnn.system.js +1 -1
- package/dist/dnn/dnn.system.js.map +1 -1
- package/dist/dnn/{dom-938307ec.system.js → dom-99eb7b76.system.js} +1 -1
- package/dist/dnn/{dom-938307ec.system.js.map → dom-99eb7b76.system.js.map} +1 -1
- package/dist/dnn/{dom-c5ed0ba5.js → dom-a385e381.js} +2 -2
- package/dist/{esm/dom-c5ed0ba5.js.map → dnn/dom-a385e381.js.map} +1 -1
- package/dist/dnn/{index-b5a28c1d.js → index-20e42ad7.js} +30 -4
- package/dist/dnn/index-20e42ad7.js.map +1 -0
- package/dist/dnn/index-c3cc3b5b.system.js +2 -0
- package/dist/dnn/index-c3cc3b5b.system.js.map +1 -0
- package/dist/dnn/index.esm.js +41 -41
- package/dist/dnn/index.system.js +1 -1
- package/dist/dnn/{mouseUtilities-e7e4e78f.system.js → mouseUtilities-233ad7e3.system.js} +1 -1
- package/dist/dnn/{mouseUtilities-e7e4e78f.system.js.map → mouseUtilities-233ad7e3.system.js.map} +0 -0
- package/dist/{esm/mouseUtilities-817973b4.js → dnn/mouseUtilities-b261ca4f.js} +19 -19
- package/dist/dnn/{mouseUtilities-817973b4.js.map → mouseUtilities-b261ca4f.js.map} +1 -1
- package/dist/dnn/{p-646cfb1b.system.js → p-1e26a4e1.system.js} +1 -1
- package/dist/dnn/{p-646cfb1b.system.js.map → p-1e26a4e1.system.js.map} +0 -0
- package/dist/dnn/p-31dc68a7.system.entry.js +11 -0
- package/dist/dnn/p-31dc68a7.system.entry.js.map +1 -0
- package/dist/dnn/p-5bcf3629.system.js +2 -0
- package/dist/dnn/p-5bcf3629.system.js.map +1 -0
- package/dist/dnn/{p-fb637662.system.js → p-78561bb1.system.js} +2 -2
- package/dist/dnn/{p-fb637662.system.js.map → p-78561bb1.system.js.map} +0 -0
- package/dist/dnn/p-7ffdbed1.js +2 -0
- package/dist/dnn/p-7ffdbed1.js.map +1 -0
- package/dist/dnn/{p-0e94f5ee.js → p-9b8731a9.js} +1 -1
- package/dist/dnn/{p-0e94f5ee.js.map → p-9b8731a9.js.map} +0 -0
- package/dist/dnn/p-b8064287.system.js +2 -0
- package/dist/dnn/p-b8064287.system.js.map +1 -0
- package/dist/dnn/p-c222c8b7.entry.js +11 -0
- package/dist/dnn/p-c222c8b7.entry.js.map +1 -0
- package/dist/dnn/shadow-css-27708fdd.system.js +14 -0
- package/dist/dnn/shadow-css-27708fdd.system.js.map +1 -0
- package/dist/dnn/{shadow-css-8c625855.js → shadow-css-ef431969.js} +2 -2
- package/dist/{esm/shadow-css-8c625855.js.map → dnn/shadow-css-ef431969.js.map} +1 -1
- package/dist/{dnn/css-shim-20dbffa5.js → esm/css-shim-091f949f.js} +3 -3
- package/dist/esm/css-shim-091f949f.js.map +1 -0
- package/dist/{dnn/debounce-06f55268.js → esm/debounce-6be67abd.js} +18 -18
- package/dist/esm/{debounce-06f55268.js.map → debounce-6be67abd.js.map} +1 -1
- package/dist/esm/dnn-button.entry.js +80 -76
- package/dist/esm/dnn-button.entry.js.map +1 -1
- package/dist/esm/{dnn-button_16.entry.js → dnn-button_17.entry.js} +2024 -1711
- package/dist/esm/dnn-button_17.entry.js.map +1 -0
- package/dist/esm/dnn-checkbox.entry.js +47 -47
- package/dist/esm/dnn-checkbox.entry.js.map +1 -1
- package/dist/esm/dnn-chevron.entry.js +22 -22
- package/dist/esm/dnn-chevron.entry.js.map +1 -1
- package/dist/esm/dnn-collapsible.entry.js +57 -54
- package/dist/esm/dnn-collapsible.entry.js.map +1 -1
- package/dist/esm/dnn-color-picker.entry.js +494 -494
- package/dist/esm/dnn-color-picker.entry.js.map +1 -1
- package/dist/esm/dnn-dropzone.entry.js +141 -141
- package/dist/esm/dnn-dropzone.entry.js.map +1 -1
- package/dist/esm/dnn-image-cropper.entry.js +394 -394
- package/dist/esm/dnn-image-cropper.entry.js.map +1 -1
- package/dist/esm/dnn-modal.entry.js +53 -50
- package/dist/esm/dnn-modal.entry.js.map +1 -1
- package/dist/esm/dnn-permissions-grid.entry.js +316 -0
- package/dist/esm/dnn-permissions-grid.entry.js.map +1 -0
- package/dist/esm/dnn-searchbox.entry.js +54 -54
- package/dist/esm/dnn-searchbox.entry.js.map +1 -1
- package/dist/esm/dnn-sort-icon.entry.js +32 -32
- package/dist/esm/dnn-sort-icon.entry.js.map +1 -1
- package/dist/esm/dnn-tab.entry.js +19 -19
- package/dist/esm/dnn-tab.entry.js.map +1 -1
- package/dist/esm/dnn-tabs.entry.js +40 -40
- package/dist/esm/dnn-tabs.entry.js.map +1 -1
- package/dist/esm/dnn-toggle.entry.js +26 -26
- package/dist/esm/dnn-toggle.entry.js.map +1 -1
- package/dist/esm/dnn-treeview-item.entry.js +56 -56
- package/dist/esm/dnn-treeview-item.entry.js.map +1 -1
- package/dist/esm/dnn-vertical-overflow-menu.entry.js +113 -111
- package/dist/esm/dnn-vertical-overflow-menu.entry.js.map +1 -1
- package/dist/esm/dnn-vertical-splitview.entry.js +121 -121
- package/dist/esm/dnn-vertical-splitview.entry.js.map +1 -1
- package/dist/esm/dnn.js +8 -4
- package/dist/esm/dnn.js.map +1 -1
- package/dist/esm/{dom-c5ed0ba5.js → dom-a385e381.js} +2 -2
- package/dist/{dnn/dom-c5ed0ba5.js.map → esm/dom-a385e381.js.map} +1 -1
- package/dist/esm/{index-b5a28c1d.js → index-20e42ad7.js} +30 -4
- package/dist/esm/index-20e42ad7.js.map +1 -0
- package/dist/esm/{index-cdbad319.js → index-59e0950f.js} +32 -2
- package/dist/esm/index-59e0950f.js.map +1 -0
- package/dist/esm/index.js +41 -41
- package/dist/esm/loader.js +4 -4
- package/dist/esm/loader.js.map +1 -1
- package/dist/{dnn/mouseUtilities-817973b4.js → esm/mouseUtilities-b261ca4f.js} +19 -19
- package/dist/esm/{mouseUtilities-817973b4.js.map → mouseUtilities-b261ca4f.js.map} +1 -1
- package/dist/esm/polyfills/core-js.js +0 -0
- package/dist/esm/polyfills/css-shim.js +1 -1
- package/dist/esm/polyfills/dom.js +0 -0
- package/dist/esm/polyfills/es5-html-element.js +0 -0
- package/dist/esm/polyfills/index.js +0 -0
- package/dist/esm/polyfills/system.js +0 -0
- package/dist/esm/{shadow-css-8c625855.js → shadow-css-ef431969.js} +2 -2
- package/dist/{dnn/shadow-css-8c625855.js.map → esm/shadow-css-ef431969.js.map} +1 -1
- package/dist/esm-es5/{debounce-06f55268.js → debounce-6be67abd.js} +1 -1
- package/dist/esm-es5/{debounce-06f55268.js.map → debounce-6be67abd.js.map} +0 -0
- package/dist/esm-es5/dnn-button_17.entry.js +11 -0
- package/dist/esm-es5/dnn-button_17.entry.js.map +1 -0
- package/dist/esm-es5/dnn.js +1 -1
- package/dist/esm-es5/dnn.js.map +1 -1
- package/dist/esm-es5/index-59e0950f.js +2 -0
- package/dist/esm-es5/index-59e0950f.js.map +1 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/types/components/dnn-button/dnn-button.d.ts +56 -55
- package/dist/types/components/dnn-button/dnn-button.stories.d.ts +4 -0
- package/dist/types/components/dnn-checkbox/dnn-checkbox.d.ts +20 -16
- package/dist/types/components/dnn-checkbox/dnn-checkbox.stories.d.ts +4 -0
- package/dist/types/components/dnn-chevron/dnn-chevron.d.ts +13 -13
- package/dist/types/components/dnn-chevron/dnn-chevron.stories.d.ts +4 -0
- package/dist/types/components/dnn-collapsible/dnn-collapsible.d.ts +19 -18
- package/dist/types/components/dnn-collapsible/dnn-collapsible.stories.d.ts +4 -0
- package/dist/types/components/dnn-color-picker/dnn-color-picker.d.ts +46 -46
- package/dist/types/components/dnn-color-picker/dnn-color-picker.stories.d.ts +4 -0
- package/dist/types/components/dnn-dropzone/dnn-dropzone.d.ts +45 -45
- package/dist/types/components/dnn-dropzone/dnn-dropzone.stories.d.ts +4 -0
- package/dist/types/components/dnn-image-cropper/CornerType.d.ts +6 -6
- package/dist/types/components/dnn-image-cropper/dnn-image-cropper.d.ts +61 -61
- package/dist/types/components/dnn-image-cropper/dnn-image-cropper.stories.d.ts +4 -0
- package/dist/types/components/dnn-modal/dnn-modal.d.ts +38 -35
- package/dist/types/components/dnn-modal/dnn-modal.stories.d.ts +4 -0
- package/dist/types/components/dnn-permissions-grid/dnn-permissions-grid.d.ts +47 -0
- package/dist/types/components/dnn-permissions-grid/dnn-permissions-grid.stories.d.ts +4 -0
- package/dist/types/components/dnn-permissions-grid/localization-interface.d.ts +11 -0
- package/dist/types/components/dnn-permissions-grid/permissions-interface.d.ts +26 -0
- package/dist/types/components/dnn-permissions-grid/role-group-interface.d.ts +6 -0
- package/dist/types/components/dnn-permissions-grid/role-interface.d.ts +6 -0
- package/dist/types/components/dnn-permissions-grid/searched-user-interface.d.ts +4 -0
- package/dist/types/components/dnn-searchbox/dnn-searchbox.d.ts +22 -22
- package/dist/types/components/dnn-searchbox/dnn-searchbox.stories.d.ts +4 -0
- package/dist/types/components/dnn-sort-icon/dnn-sort-icon.d.ts +9 -9
- package/dist/types/components/dnn-sort-icon/dnn-sort-icon.stories.d.ts +4 -0
- package/dist/types/components/dnn-tab/dnn-tab.d.ts +11 -11
- package/dist/types/components/dnn-tab/dnn-tab.stories.d.ts +4 -0
- package/dist/types/components/dnn-tabs/dnn-tabs.d.ts +11 -11
- package/dist/types/components/dnn-tabs/dnn-tabs.stories.d.ts +4 -0
- package/dist/types/components/dnn-toggle/dnn-toggle.d.ts +13 -13
- package/dist/types/components/dnn-toggle/dnn-toggle.stories.d.ts +4 -0
- package/dist/types/components/dnn-toggle/toggle-interface.d.ts +3 -3
- package/dist/types/components/dnn-treeview-item/dnn-treeview-item.d.ts +28 -24
- package/dist/types/components/dnn-treeview-item/dnn-treeview-item.stories.d.ts +4 -0
- package/dist/types/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.d.ts +16 -16
- package/dist/types/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.stories.d.ts +4 -0
- package/dist/types/components/dnn-vertical-splitview/dnn-vertical-splitview.d.ts +28 -28
- package/dist/types/components/dnn-vertical-splitview/dnn-vertical-splitview.stories.d.ts +4 -0
- package/dist/types/components.d.ts +108 -34
- package/dist/types/global.d.ts +1 -0
- package/dist/types/home/runner/work/dnn-elements/dnn-elements/.stencil/.storybook/utilities.d.ts +1 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/utilities/colorInfo.d.ts +52 -52
- package/dist/types/utilities/debounce.d.ts +5 -5
- package/dist/types/utilities/dnnServicesFramework.d.ts +19 -19
- package/dist/types/utilities/mouseUtilities.d.ts +4 -4
- package/package.json +63 -48
- package/dist/cjs/css-shim-3bfdba4f.js.map +0 -1
- package/dist/cjs/dnn-button_16.cjs.entry.js.map +0 -1
- package/dist/cjs/index-7505bd72.js.map +0 -1
- package/dist/cjs/index-aff4d89a.js.map +0 -1
- package/dist/dnn/css-shim-20dbffa5.js.map +0 -1
- package/dist/dnn/css-shim-856c55de.system.js.map +0 -1
- package/dist/dnn/index-a3a55419.system.js +0 -2
- package/dist/dnn/index-a3a55419.system.js.map +0 -1
- package/dist/dnn/index-b5a28c1d.js.map +0 -1
- package/dist/dnn/p-058ba146.system.js +0 -2
- package/dist/dnn/p-058ba146.system.js.map +0 -1
- package/dist/dnn/p-45ce2139.js +0 -2
- package/dist/dnn/p-45ce2139.js.map +0 -1
- package/dist/dnn/p-755d047d.system.entry.js +0 -11
- package/dist/dnn/p-755d047d.system.entry.js.map +0 -1
- package/dist/dnn/p-8ec1f3a8.entry.js +0 -11
- package/dist/dnn/p-8ec1f3a8.entry.js.map +0 -1
- package/dist/dnn/p-f91193e2.system.js +0 -2
- package/dist/dnn/p-f91193e2.system.js.map +0 -1
- package/dist/dnn/shadow-css-d573707f.system.js +0 -14
- package/dist/dnn/shadow-css-d573707f.system.js.map +0 -1
- package/dist/esm/css-shim-20dbffa5.js.map +0 -1
- package/dist/esm/dnn-button_16.entry.js.map +0 -1
- package/dist/esm/index-b5a28c1d.js.map +0 -1
- package/dist/esm/index-cdbad319.js.map +0 -1
- package/dist/esm-es5/dnn-button_16.entry.js +0 -11
- package/dist/esm-es5/dnn-button_16.entry.js.map +0 -1
- package/dist/esm-es5/index-cdbad319.js +0 -2
- package/dist/esm-es5/index-cdbad319.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["src/components/dnn-button/dnn-button.scss?tag=dnn-button&encapsulation=shadow","src/components/dnn-button/dnn-button.tsx","src/components/dnn-checkbox/dnn-checkbox.scss?tag=dnn-checkbox&encapsulation=shadow","src/components/dnn-checkbox/dnn-checkbox.tsx","src/components/dnn-chevron/dnn-chevron.scss?tag=dnn-chevron&encapsulation=shadow","src/components/dnn-chevron/dnn-chevron.tsx","src/components/dnn-collapsible/dnn-collapsible.scss?tag=dnn-collapsible&encapsulation=shadow","src/components/dnn-collapsible/dnn-collapsible.tsx","src/utilities/colorInfo.ts","src/components/dnn-color-picker/dnn-color-picker.scss?tag=dnn-color-picker&encapsulation=shadow","src/components/dnn-color-picker/dnn-color-picker.tsx","src/components/dnn-dropzone/dnn-dropzone.scss?tag=dnn-dropzone&encapsulation=shadow","src/components/dnn-dropzone/dnn-dropzone.tsx","src/components/dnn-image-cropper/CornerType.ts","src/utilities/mouseUtilities.ts","src/components/dnn-image-cropper/dnn-image-cropper.scss?tag=dnn-image-cropper&encapsulation=shadow","src/components/dnn-image-cropper/dnn-image-cropper.tsx","src/components/dnn-modal/dnn-modal.scss?tag=dnn-modal&encapsulation=shadow","src/components/dnn-modal/dnn-modal.tsx","src/components/dnn-searchbox/dnn-searchbox.scss?tag=dnn-searchbox&encapsulation=shadow","src/components/dnn-searchbox/dnn-searchbox.tsx","src/components/dnn-sort-icon/dnn-sort-icon.scss?tag=dnn-sort-icon&encapsulation=shadow","src/components/dnn-sort-icon/dnn-sort-icon.tsx","src/components/dnn-tab/dnn-tab.scss?tag=dnn-tab&encapsulation=shadow","src/components/dnn-tab/dnn-tab.tsx","src/components/dnn-tabs/dnn-tabs.scss?tag=dnn-tabs&encapsulation=shadow","src/components/dnn-tabs/dnn-tabs.tsx","src/components/dnn-toggle/dnn-toggle.scss?tag=dnn-toggle&encapsulation=shadow","src/components/dnn-toggle/dnn-toggle.tsx","src/components/dnn-treeview-item/dnn-treeview-item.scss?tag=dnn-treeview-item&encapsulation=shadow","src/components/dnn-treeview-item/dnn-treeview-item.tsx","src/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.scss?tag=dnn-vertical-overflow-menu&encapsulation=shadow","src/components/dnn-vertical-overflow-menu/dnn-vertical-overflow-menu.tsx","src/components/dnn-vertical-splitview/dnn-vertical-splitview.scss?tag=dnn-vertical-splitview&encapsulation=shadow","src/components/dnn-vertical-splitview/dnn-vertical-splitview.tsx"],"names":["dnnButtonCss","DnnButton","[object Object]","hostRef","this","type","reversed","size","confirm","confirmYesText","confirmNoText","confirmMessage","disabled","modalVisible","el","classList","add","modal","shadowRoot","querySelector","hide","confirmed","emit","canceled","show","h","Host","style","pointer-events","class","onClick","handleClick","showCloseButton","backdropDismiss","display","justifyContent","margin","handleConfirm","handleCancel","dnnCheckboxCss","DnnCheckbox","checked","useIntermediate","emitEvents","button","remove","undefined","checkedchange","changeState","ref","xmlns","height","viewBox","width","fill","d","enable-background","htmlFor","id","dnnChevronCss","DnnChevron","expandText","collapseText","expanded","newValue","changed","aria-label","dnnCollapsibleCss","DnnCollapsible","transitionDuration","requestAnimationFrame","updateSize","container","maxHeight","scrollHeight","setTimeout","dnnCollapsibleHeightChanged","ColorInfo","_hue","_saturation","_lightness","hue","value","saturation","lightness","red","getRGB","setHSL","green","blue","hex","r","getHex","g","b","parseInt","substr","contrastColor","brightness","chroma","Math","abs","quadrant","offset","bias","round","min","max","diff","s","l","toString","length","dnnColorPickerCss","DnnColorPicker","color","colorBoxHeight","rgbDisplay","hslDisplay","hexDisplay","handleSaturationLightnessMouseDown","e","preventDefault","handleDragLightnessSaturation","window","addEventListener","handleSaturationLightnessMouseUp","rect","saturationLightnessBox","getBoundingClientRect","x","clientX","left","y","clientY","top","newColor","currentColor","removeEventListener","handleHueMouseDown","handleDragHue","handleHueMouseUp","hueRange","handleComponentValueChange","channel","target","isNaN","handleHSLChange","component","handleSaturationLightnessKeyDown","shiftKey","key","handleHueKeyDown","colorChanged","colorChangedHandler","handleHexChange","setProperty","getDoublet","valueString","toUpperCase","match","element","backgroundColor","onMouseDown","bind","role","aria-valuemin","aria-valuemax","aria-valuetext","bottom","onKeyDown","boxShadow","getContrast","aria-valuenow","step","onChange","switchColorMode","__decorate","Debounce","dnnDropzoneCss","DnnDropzone","resx","dragAndDropFile","capture","or","takePicture","uploadFile","allowCameraMode","captureQuality","canTakeSnapshots","takingPicture","handleDragOver","event","stopPropagation","dataTransfer","dropEffect","dropzone","handleDrop","dropEvent","files","hasInvalidExtensions","fileList","getFilesFromFileList","filesSelected","checkIfBrowserCanTakeSnapshots","then","result","allowedExtensions","extensionsWithDots","map","extensionsList","join","fileInput","accept","Promise","resolve","mediaDevices","navigator","enumerateDevices","devices","some","device","kind","index","file","push","hasInvalid","fileIndex","regex","fileExtension","exec","name","includes","getUserMedia","video","audio","stream","videoPreview","srcObject","play","videoSettings","getVideoTracks","getSettings","catch","error","alert","canvas","document","createElement","context","getContext","drawImage","toBlob","blob","File","onDragOver","onDrop","onDragLeave","_a","_b","handleUploadButton","_c","_d","takeSnapshot","cx","cy","_e","applySnapshot","_f","CornerType","getMovementFromEvent","previousTouch","movementX","movementY","MouseEvent","TouchEvent","touch","touches","pageX","pageY","dnnImageCropperCss","DnnImageCropper","imageTooSmall","modalCloseText","quality","preventUndersized","handleCropMouseDown","className","handleImageCropFinished","handleCropDrag","handleNwMouseMove","handleNeMouseMove","handleSeMouseMove","handleSwMouseMove","_ev","emitImage","handleCornerDrag","nw","ne","se","sw","corner","isMouseStillInTarget","getCornerLeftTop","newWidth","newHeight","orientation","wantedRatio","cropRect","crop","imageRect","image","topOffset","offsetTop","leftOffset","offsetLeft","zoomRatio","naturalWidth","ev","newLeft","newTop","setView","newView","views","host","querySelectorAll","forEach","v","noPictureView","hasPictureView","view","imageRatio","wantedHeight","wantedWidth","initCrop","src","toDataURL","split","reader","FileReader","onload","readerLoadEvent","img","Image","imageTooSmallModal","ctx","setImage","readAsDataURL","naturalHeight","dataUrl","generateCroppedImage","imageCropChanged","desiredWidth","desiredHeight","clearRect","inside","mouseX","mouseY","corners","cornerRect","onTouchStart","onFilesSelected","handleNewFile","detail","close-text","replace","dnnModalCss","DnnModal","closeText","visible","dismissed","handleDismiss","handleBackdropClick","dnnSearchboxCss","DnnSearchbox","placeholder","debounced","query","debouncedHandleQueryChanged","handleQueryChanged","queryChanged","onInput","dnnSortIconCss","DnnSortIcon","sortDirection","sortChanged","active","changeSort","dnnTabCss","DnnTab","dnnTabsCss","DnnTabs","tabTitles","selectedTabTitle","updateTitles","showFirstTab","assignedElements","tabs","getTabs","tab","tabTitle","showTab","dnnToggleCss","DnnToggle","isChecked","checkChanged","dnnTreeviewItemCss","DnnTreeviewItem","hasChildren","expander","collapsible","child","childElement","children","count","userExpanded","userCollapsed","toggleCollapse","dnnVerticalOverflowMenuCss","DnnVerticalOverflowMenu","showDropdownButton","showDropdownMenu","previousMenuWidth","moveItemsToDropDownIfNecessery","resizeObserver","ResizeObserver","entries","entry","contentRect","moveItemsToMenuIfPossible","observe","menuItems","Array","from","menu","availableWidth","neededWidth","parseFloat","getComputedStyle","fontSize","item","getFullWidth","lastItem","dropdown","slot","hasChildNodes","firstItem","styles","marginLeft","marginRight","paddingLeft","paddingRight","contentHeight","items","emHeight","additionalHeight","dismissMenu","buttonRect","right","toggleOverflowMenu","dnnVerticalSplitviewCss","DnnVerticalSplitview","splitterWidth","splitWidthPercentage","leftWidth","rightWidth","panes","pane","splitter","fullWidth","widthChanged","handleDrag","handleDragFinished","newPercentage","handleMouseDown","handleKeyDown","minWidth"],"mappings":"oGAAA,MAAMA,EAAe,sgECURC,EAAS,MALtBC,YAAAC,qFAWUC,KAAAC,KAA6C,UAK7CD,KAAAE,SAAoB,MAKpBF,KAAAG,KAAsC,SAKtCH,KAAAI,QAAoB,MAKpBJ,KAAAK,eAA0B,MAK1BL,KAAAM,cAAyB,KAKzBN,KAAAO,eAA0B,iBAK1BP,KAAAQ,SAAoB,MAEnBR,KAAAS,aAAwB,MAqBjCX,mBACEE,KAAKU,GAAGC,UAAUC,IAAIZ,KAAKC,MAE3B,GAAID,KAAKE,SAAS,CAChBF,KAAKU,GAAGC,UAAUC,IAAI,YAGxB,GAAIZ,KAAKG,OAAS,SAAS,CACzBH,KAAKU,GAAGC,UAAUC,IAAIZ,KAAKG,MAG7BH,KAAKa,MAAQb,KAAKU,GAAGI,WAAWC,cAAc,aAGxCjB,gBACNE,KAAKa,MAAMG,OACXhB,KAAKS,aAAe,MACpBT,KAAKiB,UAAUC,OAGTpB,eACNE,KAAKa,MAAMG,OACXhB,KAAKS,aAAe,MACpBT,KAAKmB,SAASD,OAGRpB,cACN,GAAIE,KAAKI,UAAYJ,KAAKS,aAAa,CACrCT,KAAKa,MAAMO,OACXpB,KAAKS,aAAe,MAIxBX,SACE,OACEuB,EAACC,EAAI,CAACd,SAAUR,KAAKQ,SAAUe,MAAO,CAACC,iBAAkBxB,KAAKQ,SAAW,OAAS,QAChFa,EAAA,SAAA,CAAQI,MAAM,SAASC,QAAS,IAAM1B,KAAK2B,cAAenB,SAAUR,KAAKQ,UACvEa,EAAA,OAAA,OAEDrB,KAAKI,SACFiB,EAAA,YAAA,CAAWO,gBAAiB,MAAOC,gBAAiB,OAClDR,EAAA,IAAA,KAAIrB,KAAKO,gBACTc,EAAA,MAAA,CAAKE,MACH,CACEO,QAAS,OACTC,eAAgB,aAGlBV,EAAA,aAAA,CAAYpB,KAAK,UAAUsB,MAAO,CAACS,OAAQ,OAAQN,QAAS,IAAM1B,KAAKiC,iBAAkBjC,KAAKK,gBAC9FgB,EAAA,aAAA,CAAYpB,KAAK,YAAYsB,MAAO,CAACS,OAAQ,OAAQN,QAAS,IAAM1B,KAAKkC,gBAAiBlC,KAAKM,sDC3H/G,MAAM6B,EAAiB,0fCOVC,EAAW,MALxBtC,YAAAC,0DASyBC,KAAAqC,QAA+B,MAG9CrC,KAAAsC,gBAA2B,MAU3BxC,cACN,IAAKE,KAAKsC,gBAAgB,CACxBtC,KAAKqC,SAAWrC,KAAKqC,QACrBrC,KAAKuC,aACL,OAEF,GAAIvC,KAAKqC,UAAY,KAAK,CACxBrC,KAAKqC,QAAU,MACfrC,KAAKwC,OAAO7B,UAAU8B,OAAO,aAC7BzC,KAAKuC,aACL,OAEF,GAAIvC,KAAKqC,UAAYK,UAAU,CAC7B1C,KAAKqC,QAAU,KACfrC,KAAKwC,OAAO7B,UAAU8B,OAAO,aAC7BzC,KAAKuC,aACL,OAEF,GAAIvC,KAAKqC,UAAY,MAAM,CACzBrC,KAAKqC,QAAUK,UACf1C,KAAKwC,OAAO7B,UAAUC,IAAI,aAC1BZ,KAAKuC,aACL,QAIIzC,aACNE,KAAK2C,cAAczB,KAAKlB,KAAKqC,SAG/BvC,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,SAAA,CAAQI,MAAM,OAAOC,QAAS,IAAM1B,KAAK4C,cAAeC,IAAKnC,GAAMV,KAAKwC,OAAS9B,GAC9EV,KAAKqC,UAAY,OAChBhB,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,gGAEpJnD,KAAKqC,UAAY,MAChBhB,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,yIAEpJnD,KAAKqC,UAAYK,WAChBrB,EAAA,MAAA,CAAKI,MAAM,YAAYqB,MAAM,6BAA4BM,oBAAmB,gBAAgBL,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,IAAA,KAAGA,EAAA,OAAA,CAAM6B,KAAK,OAAOH,OAAO,KAAKE,MAAM,QAAU5B,EAAA,IAAA,KAAGA,EAAA,IAAA,KAAGA,EAAA,IAAA,KAAGA,EAAA,OAAA,CAAM8B,EAAE,gHAGhO9B,EAAA,QAAA,CAAOgC,QAASrD,KAAKU,GAAG4C,GAAI5B,QAAS,IAAM1B,KAAK4C,eAAevB,EAAA,OAAA,4CCpEvE,MAAMkC,EAAgB,6fCSTC,EAAU,MALvB1D,YAAAC,8CAQUC,KAAAyD,WAAsB,SAGtBzD,KAAA0D,aAAwB,WAGM1D,KAAA2D,SAAqB,MAM3D7D,sBAAsB8D,GACpB5D,KAAK6D,QAAQ3C,KAAK0C,GAGpB9D,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,SAAA,CAAAyC,aAAoB9D,KAAK2D,SAAW3D,KAAK0D,aAAe1D,KAAKyD,WAC3D/B,QAAS,IAAM1B,KAAK2D,UAAY3D,KAAK2D,UAErCtC,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,mIClC7J,MAAMY,EAAoB,2JCObC,EAAc,MAL3BlE,YAAAC,sFAUyBC,KAAA2D,SAAoB,MAGnC3D,KAAAiE,mBAA8B,IAMtCnE,sBACEoE,uBAAsB,KACpBlE,KAAKmE,gBAQTrE,mBACE,GAAIE,KAAK2D,SAAS,CACdO,uBAAsB,KACpBlE,KAAKoE,UAAU7C,MAAM8C,UAAY,GAAGrE,KAAKoE,UAAUE,oBAErDC,YAAW,KACTvE,KAAKoE,UAAU7C,MAAM8C,UAAY,SAChCrE,KAAKiE,qBAKdnE,uBAAuB6D,GACrB,GAAIA,EAAS,CACX3D,KAAKmE,iBAEH,CACFD,uBAAsB,KACpBlE,KAAKoE,UAAU7C,MAAM8C,UAAY,GAAGrE,KAAKoE,UAAUE,iBACnDJ,uBAAsB,KACpBlE,KAAKoE,UAAU7C,MAAM8C,UAAY,YAIvCE,YAAW,KACTL,uBAAsB,KACpBlE,KAAKwE,4BAA4BtD,YAElClB,KAAKiE,oBAKVnE,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,MAAA,CAAKiC,GAAG,YAAY7B,MAAOzB,KAAK2D,UAAY,WAAYd,IAAKnC,GAAMV,KAAKoE,UAAY1D,GAChFW,EAAA,OAAA;;;;;SC9DCoD,EAAb3E,cAEYE,KAAA0E,KAAe,EAWf1E,KAAA2E,YAAsB,EAWtB3E,KAAA4E,WAAqB,EAlB7BC,UAAY,OAAO7E,KAAK0E,KACxBG,QAAQC,GACJ,GAAIA,EAAQ,EAAG,CAAEA,EAAQ,EACzB,GAAIA,EAAQ,IAAK,CAAEA,EAAQ,IAC3B9E,KAAK0E,KAAOI,EAOhBC,iBAAmB,OAAO/E,KAAK2E,YAC/BI,eAAeD,GACX,GAAIA,EAAQ,EAAG,CAAEA,EAAQ,EACzB,GAAIA,EAAQ,EAAG,CAAEA,EAAQ,EACzB9E,KAAK2E,YAAcG,EAOvBE,gBAAkB,OAAOhF,KAAK4E,WAC9BI,cAAcF,GACV,GAAIA,EAAQ,EAAG,CAAEA,EAAQ,EACzB,GAAIA,EAAQ,EAAG,CAAEA,EAAQ,EACzB9E,KAAK4E,WAAaE,EAMtBG,UACI,OAAOjF,KAAKkF,SAASD,IAEzBA,QAAQH,GACJ9E,KAAKmF,OAAOL,EAAO9E,KAAKoF,MAAOpF,KAAKqF,MAMxCD,YACI,OAAOpF,KAAKkF,SAASE,MAEzBA,UAAUN,GACN9E,KAAKmF,OAAOnF,KAAKiF,IAAKH,EAAO9E,KAAKqF,MAMtCA,WACI,OAAOrF,KAAKkF,SAASG,KAEzBA,SAASP,GACL9E,KAAKmF,OAAOnF,KAAKiF,IAAKjF,KAAKoF,MAAON,GAMtCQ,UACI,IAAIC,EAAIvF,KAAKwF,OAAOxF,KAAKiF,KACzB,IAAIQ,EAAIzF,KAAKwF,OAAOxF,KAAKoF,OACzB,IAAIM,EAAI1F,KAAKwF,OAAOxF,KAAKqF,MACzB,OAAOE,EAAIE,EAAIC,EAEnBJ,QAAQR,GACJ9E,KAAKiF,IAAMU,SAASb,EAAMc,OAAO,EAAE,IACnC5F,KAAKoF,MAAQO,SAASb,EAAMc,OAAO,EAAE,IACrC5F,KAAKqF,KAAOM,SAASb,EAAMc,OAAO,EAAE,IAMxCC,oBACI,MAAMC,GAAc9F,KAAKiF,IAAI,IAAMjF,KAAKoF,MAAM,IAAMpF,KAAKqF,KAAK,KAAO,IACrE,GAAIS,EAAa,IAAI,CACjB,MAAO,SAEX,MAAO,SAGHhG,SACJ,MAAMiG,GAAU,EAAIC,KAAKC,IAAK,EAAIjG,KAAK4E,WAAc,IAAM5E,KAAK+E,WAEhE,MAAMmB,EAAWlG,KAAK0E,KAAO,GAE7B,MAAMyB,EAASJ,GAAU,EAAIC,KAAKC,IAAIC,EAAW,EAAI,IAGrD,IAAIX,EAAI,EAAGE,EAAI,EAAGC,EAAI,EACtB,GAAI,GAAKQ,GAAYA,GAAY,EAAG,CAChCX,EAAIQ,EAAQN,EAAIU,OACb,GAAI,GAAKD,GAAYA,GAAY,EAAG,CACvCT,EAAIM,EAAQR,EAAIY,OACb,GAAI,GAAKD,GAAYA,GAAY,EAAG,CACvCT,EAAIM,EAAQL,EAAIS,OACb,GAAI,GAAKD,GAAYA,GAAY,EAAG,CACvCR,EAAIK,EAAQN,EAAIU,OACb,GAAI,GAAKD,GAAYA,GAAY,EAAG,CACvCR,EAAIK,EAAQR,EAAIY,OACb,GAAI,GAAKD,GAAYA,GAAY,EAAG,CACvCX,EAAIQ,EAAQL,EAAIS,EAGpB,MAAMC,EAAOpG,KAAK4E,WAAcmB,EAAS,EAEzC,MAAO,CACHd,IAAKe,KAAKK,OAAOd,EAAIa,GAAQ,KAC7BhB,MAAOY,KAAKK,OAAOZ,EAAIW,GAAQ,KAC/Bf,KAAMW,KAAKK,OAAOX,EAAIU,GAAQ,MAI9BtG,OAAOmF,EAAaG,EAAeC,GAGvC,MAAME,EAAIN,EAAI,IAAKQ,EAAIL,EAAM,IAAKM,EAAIL,EAAK,IAE3C,MAAMiB,EAAMN,KAAKM,IAAIf,EAAGE,EAAGC,GAC3B,MAAMa,EAAMP,KAAKO,IAAIhB,EAAGE,EAAGC,GAC3B,MAAMc,EAAOD,EAAMD,EACnB,IAAIjF,EAAI,EAAGoF,EAAI,EAAGC,EAAI,EAGtB,GAAIF,IAAS,EAAG,CACZnF,EAAI,OACD,GAAIkF,IAAQhB,EAAG,CAClBlE,EAAI,KAAOoE,EAAIC,GAAKc,QACjB,GAAID,IAAQd,EAAG,CAClBpE,EAAI,IAAM,GAAMqE,EAAIH,GAAKiB,QACtB,GAAID,IAAQb,EAAG,CAClBrE,EAAI,IAAM,GAAMkE,EAAIE,GAAKe,GAE7B,GAAInF,EAAI,EAAG,CAAEA,EAAIA,EAAI,IACrB,GAAIA,EAAI,IAAK,CAAEA,EAAI,IAGnBqF,GAAKH,EAAMD,GAAO,EAGlB,GAAIC,IAAQ,GAAKD,IAAQ,EAAG,CACxBG,EAAI,MACD,CACHA,GAAKF,EAAMG,GAAMV,KAAKM,IAAII,EAAG,EAAIA,GAGrC1G,KAAK0E,KAAOrD,EACZrB,KAAK2E,YAAc8B,EACnBzG,KAAK4E,WAAa8B,EAGd5G,OAAOgF,GACX,IAAIQ,EAAMR,EAAM6B,SAAS,IACzB,GAAIrB,EAAIsB,OAAS,EAAE,CACftB,EAAM,IAAMA,EAEhB,OAAOA,GC5Kf,MAAMuB,EAAoB;;;;kXCebC,EAAc,MAL3BhH,YAAAC,wDAUYC,KAAA+G,MAAgB,SAKhB/G,KAAAgH,eAAyB,MAGxBhH,KAAAiH,WAAqB,OACrBjH,KAAAkH,WAAqB,OACrBlH,KAAAmH,WAAqB,OA6CtBnH,KAAAoH,mCAAsCC,IAC1CA,EAAEC,iBACFtH,KAAKuH,8BAA8BF,GACnCG,OAAOC,iBAAiB,YAAazH,KAAKuH,+BAC1CC,OAAOC,iBAAiB,UAAWzH,KAAK0H,mCAGpC1H,KAAAuH,8BAAiCF,IACrC,MAAMM,EAAO3H,KAAK4H,uBAAuBC,wBAEzC,IAAIC,EAAIT,EAAEU,QAAUJ,EAAKK,KACzB,GAAIF,EAAI,EAAG,CAAEA,EAAI,EACjB,GAAIA,EAAIH,EAAK1E,MAAO,CAAE6E,EAAIH,EAAK1E,MAC/B6E,EAAIA,EAAEH,EAAK1E,MAEX,IAAIgF,EAAIZ,EAAEa,QAAUP,EAAKQ,IACzB,GAAIF,EAAI,EAAG,CAAEA,EAAI,EACjB,GAAIA,EAAIN,EAAK5E,OAAQ,CAAEkF,EAAIN,EAAK5E,OAChCkF,EAAI,EAAKA,EAAEN,EAAK5E,OAEhB,MAAMqF,EAAW,IAAI3D,EACrB2D,EAASvD,IAAM7E,KAAKqI,aAAaxD,IACjCuD,EAASrD,WAAa+C,EACtBM,EAASpD,UAAYiD,EACrBjI,KAAKqI,aAAeD,GAGhBpI,KAAA0H,iCAAmC,KACvCF,OAAOc,oBAAoB,YAAatI,KAAKuH,+BAC7CC,OAAOc,oBAAoB,UAAWtI,KAAK0H,mCAGvC1H,KAAAuI,mBAAsBlB,IAC1BA,EAAEC,iBACFtH,KAAKwI,cAAcnB,GACnBG,OAAOC,iBAAiB,YAAazH,KAAKwI,eAC1ChB,OAAOC,iBAAiB,UAAWzH,KAAKyI,mBAGpCzI,KAAAyI,iBAAmB,KACvBjB,OAAOc,oBAAoB,YAAatI,KAAKwI,eAC7ChB,OAAOc,oBAAoB,UAAWtI,KAAKyI,mBAGvCzI,KAAAwI,cAAiBnB,IACrB,MAAMM,EAAO3H,KAAK0I,SAASb,wBAE3B,IAAIC,EAAIT,EAAEU,QAAUJ,EAAKK,KACzB,GAAIF,EAAI,EAAG,CAAEA,EAAI,EACjB,GAAIA,EAAIH,EAAK1E,MAAO,CAAE6E,EAAIH,EAAK1E,MAC/B6E,EAAIA,EAAEH,EAAK1E,MAAM,IAEjB,MAAMmF,EAAW,IAAI3D,EACrB2D,EAASvD,IAAMiD,EACfM,EAASrD,WAAa/E,KAAKqI,aAAatD,WACxCqD,EAASpD,UAAYhF,KAAKqI,aAAarD,UACvChF,KAAKqI,aAAeD,GAGhBpI,KAAA2I,2BAA6B,CAACtB,EAAGuB,KACrC,IAAI9D,EAAQa,SAAS0B,EAAEwB,OAAO/D,OAC9B,GAAIgE,MAAMhE,GAAQ,CAAE,OACpB,MAAMsD,EAAW,IAAI3D,EACrB,GAAIK,EAAQ,EAAG,CAAEA,EAAQ,EACzB,GAAIA,EAAQ,IAAK,CAAEA,EAAQ,IAC3B,IAAIS,EAAIvF,KAAKqI,aAAapD,IAC1B,IAAIQ,EAAIzF,KAAKqI,aAAajD,MAC1B,IAAIM,EAAI1F,KAAKqI,aAAahD,KAC1B,OAAQuD,GACJ,IAAK,MACDrD,EAAIT,EACJ,MACJ,IAAK,QACDW,EAAIX,EACJ,MACJ,IAAK,OACDY,EAAIZ,EACJ,MAIRsD,EAAShD,MAAQK,EACjB2C,EAASnD,IAAMM,EACf6C,EAAS/C,KAAOK,EAChB1F,KAAKqI,aAAeD,GAGhBpI,KAAA+I,gBAAkB,CAAC1B,EAAG2B,KAC1B,IAAIlE,EAAQa,SAAS0B,EAAEwB,OAAO/D,OAC9B,GAAIgE,MAAMhE,GAAQ,CAAC,OACnB,MAAMsD,EAAW,IAAI3D,EACrB,GAAIK,GAAS,KAAM,CACf,IAAIzD,EAAIrB,KAAKqI,aAAaxD,IAC1B,IAAI4B,EAAIzG,KAAKqI,aAAatD,WAC1B,IAAI2B,EAAI1G,KAAKqI,aAAarD,UAC1B,OAAQgE,GACJ,IAAK,MACD,GAAIlE,EAAQ,EAAG,CAAEA,EAAQ,EACzB,GAAIA,EAAQ,IAAK,CAAEA,EAAQ,EAC3BzD,EAAIyD,EACJ,MACJ,IAAK,aACD,GAAIA,EAAQ,EAAG,CAAEA,EAAQ,EACzB,GAAIA,EAAQ,IAAK,CAAEA,EAAQ,IAC3B2B,EAAI3B,EAAQ,IACZ,MACJ,IAAK,YACD,GAAIA,EAAQ,EAAG,CAAEA,EAAQ,EACzB,GAAIA,EAAQ,IAAK,CAAEA,EAAQ,IAC3B4B,EAAI5B,EAAQ,IACZ,MAIRsD,EAASvD,IAAMxD,EACf+G,EAASrD,WAAa0B,EACtB2B,EAASpD,UAAY0B,EACrB1G,KAAKqI,aAAeD,IA+CpBpI,KAAAiJ,iCAAoC5B,IACxC,IAAIe,EAAW,IAAI3D,EACnB2D,EAASvD,IAAM7E,KAAKqI,aAAaxD,IACjCuD,EAASrD,WAAa/E,KAAKqI,aAAatD,WACxCqD,EAASpD,UAAYhF,KAAKqI,aAAarD,UAEvC,IAAIF,EAAQ,IACZ,GAAIuC,EAAE6B,SAAU,CAAEpE,EAAQ,GAE1B,OAAQuC,EAAE8B,KACN,IAAK,UACDf,EAASpD,WAAaF,EACtB,MACJ,IAAK,YACDsD,EAASpD,WAAaF,EACtB,MACJ,IAAK,YACDsD,EAASrD,YAAcD,EACvB,MACJ,IAAK,aACDsD,EAASrD,YAAcD,EAI/B9E,KAAKqI,aAAeD,GAGhBpI,KAAAoJ,iBAAoB/B,IACxB,IAAIe,EAAW,IAAI3D,EACnB2D,EAASvD,IAAM7E,KAAKqI,aAAaxD,IACjCuD,EAASrD,WAAa/E,KAAKqI,aAAatD,WACxCqD,EAASpD,UAAYhF,KAAKqI,aAAarD,UAEvC,IAAIF,EAAQ,EACZ,GAAIuC,EAAE6B,SAAU,CAAEpE,EAAQ,GAE1B,OAAQuC,EAAE8B,KACN,IAAK,YACDf,EAASvD,KAAOC,EAChB,MACJ,IAAK,aACDsD,EAASvD,KAAOC,EAIxB9E,KAAKqI,aAAeD,GAtPhBtI,oBAAoBiH,GACxB/G,KAAKqJ,aAAanI,KAAK6F,GAI3BjH,yBAAyB8D,GACrB5D,KAAKsJ,oBAAoB1F,GAO7B9D,oBACIE,KAAKuJ,gBAAgBvJ,KAAK+G,OAG9BjH,mBACKE,KAAKU,GAA8Ba,MAAMiI,YAAY,qBAAsBxJ,KAAKgH,eAAeL,YAG5F7G,SACL,OAAOE,KAAKyJ,WAAWzJ,KAAKqI,aAAapD,KAAOjF,KAAKyJ,WAAWzJ,KAAKqI,aAAajD,OAASpF,KAAKyJ,WAAWzJ,KAAKqI,aAAahD,MAGxHvF,cACJ,OAAOE,KAAKqI,aAAaxC,cAGrB/F,WAAWgF,GACf,MAAM4E,EAAc5E,EAAM6B,SAAS,IAAIgD,cACvC,GAAID,EAAY9C,SAAW,EAAE,CACzB,MAAO,IAAM8C,EAEjB,OAAOA,EA4HH5J,gBAAgBgF,GACpB,MAAMsD,EAAW,IAAI3D,EACrB,GAAIK,EAAM8E,MAAM,gCAAgChD,OAAS,EAAG,CACxD,GAAI9B,EAAM8B,SAAW,EAAE,CACnB,IAAIjD,EAAWmB,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAO,GAC7EA,EAAQnB,EAEZyE,EAASnD,IAAMU,SAASb,EAAMc,OAAO,EAAE,GAAI,IAC3CwC,EAAShD,MAAQO,SAASb,EAAMc,OAAO,EAAE,GAAI,IAC7CwC,EAAS/C,KAAOM,SAASb,EAAMc,OAAO,EAAE,GAAI,QAE5C,CACAwC,EAASnD,IAAMjF,KAAKqI,aAAapD,IACjCmD,EAAShD,MAAQpF,KAAKqI,aAAajD,MACnCgD,EAAS/C,KAAOrF,KAAKqI,aAAahD,KAEtCrF,KAAKqI,aAAeD,EAGhBtI,gBAAgBuH,GACpB,OAAOA,EAAEwB,OAAOvF,IACZ,IAAK,aACDtD,KAAKiH,WAAa,OAClBjH,KAAKkH,WAAa,OAClBlH,KAAKmH,WAAa,OAClB,MACJ,IAAK,aACDnH,KAAKiH,WAAa,OAClBjH,KAAKkH,WAAa,OAClBlH,KAAKmH,WAAa,OAClB,MACJ,IAAK,aACDnH,KAAKiH,WAAa,OAClBjH,KAAKkH,WAAa,OAClBlH,KAAKmH,WAAa,OAClB,MACJ,QACInH,KAAKiH,WAAa,OAClBjH,KAAKkH,WAAa,OAClBlH,KAAKmH,WAAa,QAoD9BrH,SACI,MAAM+E,EAAM7E,KAAKqI,aAAaxD,IAC9B,MAAME,EAAa/E,KAAKqI,aAAatD,WACrC,MAAMC,EAAYhF,KAAKqI,aAAarD,UACpC,MAAMC,EAAMjF,KAAKqI,aAAapD,IAC9B,MAAMG,EAAQpF,KAAKqI,aAAajD,MAChC,MAAMC,EAAOrF,KAAKqI,aAAahD,KAE/B,OACIhE,EAAA,MAAA,CAAKI,MAAM,oBACPJ,EAAA,MAAA,CAAKI,MAAM,qBACPJ,EAAA,MAAA,CAAKI,MAAM,gBAAgBoB,IAAMgH,GAAY7J,KAAK4H,uBAAyBiC,EACvEtI,MAAO,CAACuI,gBAAiB,OAAOjF,eAChCkF,YAAa/J,KAAKoH,mCAAmC4C,KAAKhK,OAE1DqB,EAAA,SAAA,CAAQI,MAAM,iBAAgBqC,aACf,sGACXmG,KAAK,SAAQC,gBACC,IAAGC,gBACH,MAAKC,iBACH,eAAepE,KAAKK,MAAMrG,KAAKqI,aAAatD,WAAW,qBAAqBiB,KAAKK,MAAMrG,KAAKqI,aAAarD,UAAU,QACnIzD,MAAO,CACHyG,KAAMhC,KAAKK,MAAMtB,EAAa,KAAQ,IACtCsF,OAAQrE,KAAKK,MAAMrB,EAAY,KAAQ,KAE3CsF,UAAYjD,GAAMrH,KAAKiJ,iCAAiC5B,MAGhEhG,EAAA,MAAA,CAAKI,MAAM,iBACPJ,EAAA,MAAA,CAAKI,MAAM,mBAAmBF,MAAO,CACjCuI,gBAAiB,IAAM9J,KAAKwF,SAC5B+E,UAAW,eAAiB,IAAMvK,KAAKwK,iBAG3CnJ,EAAA,MAAA,CAAKI,MAAM,gBACPoB,IAAMgH,GAAY7J,KAAK0I,SAAWmB,EAClCE,YAAa/J,KAAKuI,mBAAmByB,KAAKhK,OAE1CqB,EAAA,SAAA,CAAQI,MAAM,iBAAgBqC,aACf,sEACXmG,KAAK,SAAQC,gBACC,IAAGC,gBACH,MAAKM,gBACJzE,KAAKK,MAAMxB,GAC1BtD,MAAO,CAACyG,MAAOnD,EAAI,IAAI,KAAK8B,WAAa,KACzC2D,UAAYjD,GAAMrH,KAAKoJ,iBAAiB/B,QAKxDhG,EAAA,MAAA,CAAKI,MAAM,oBACPJ,EAAA,MAAA,CAAKI,MAAM,uBAAuBF,MAAO,CAACO,QAAS9B,KAAKiH,aACpD5F,EAAA,MAAA,CAAKI,MAAM,uBACPJ,EAAA,QAAA,KAAA,KACAA,EAAA,QAAA,CAAOpB,KAAK,SAASqG,IAAI,IAAIC,IAAI,MAAMmE,KAAK,IAAIjJ,MAAM,MAAMqD,MAAOG,EAAGnB,aAAa,YAC/E6G,SAAWtD,GAAMrH,KAAK2I,2BAA2BtB,EAAG,UAG5DhG,EAAA,MAAA,CAAKI,MAAM,uBACPJ,EAAA,QAAA,KAAA,KACAA,EAAA,QAAA,CAAOpB,KAAK,SAASqG,IAAI,IAAIC,IAAI,MAAM9E,MAAM,QAAQqD,MAAOM,EAAKtB,aAAa,cAC1E6G,SAAWtD,GAAMrH,KAAK2I,2BAA2BtB,EAAG,YAG5DhG,EAAA,MAAA,CAAKI,MAAM,uBACPJ,EAAA,QAAA,KAAA,KACAA,EAAA,QAAA,CAAOpB,KAAK,SAASqG,IAAI,IAAIC,IAAI,MAAM9E,MAAM,OAAOqD,MAAOO,EAAIvB,aAAa,aACxE6G,SAAWtD,GAAMrH,KAAK2I,2BAA2BtB,EAAG,WAG5DhG,EAAA,MAAA,CAAKI,MAAM,yBACPJ,EAAA,SAAA,CACIiC,GAAG,aACH5B,QAAS1B,KAAK4K,gBAAgBZ,KAAKhK,MAAK8D,aAC7B,qCAEXzC,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,wEAI/J9B,EAAA,MAAA,CAAKI,MAAM,uBAAuBF,MAAO,CAACO,QAAS9B,KAAKkH,aACpD7F,EAAA,MAAA,CAAKI,MAAM,uBACPJ,EAAA,QAAA,KAAA,KACAA,EAAA,QAAA,CAAOpB,KAAK,SAASqG,IAAI,IAAIC,IAAI,MAAMmE,KAAM,EAAG5F,MAAOkB,KAAKK,MAAMxB,GAAIf,aAAa,MAC/E6G,SAAWtD,GAAMrH,KAAK+I,gBAAgB1B,EAAG,UAGjDhG,EAAA,MAAA,CAAKI,MAAM,uBACPJ,EAAA,QAAA,KAAA,KACAA,EAAA,QAAA,CAAOpB,KAAK,SAASqG,IAAI,IAAIC,IAAI,MAAMmE,KAAM,EAAG5F,MAAOkB,KAAKK,MAAMtB,EAAW,KAAIjB,aAAa,aAC1F6G,SAAWtD,GAAMrH,KAAK+I,gBAAgB1B,EAAG,iBAGjDhG,EAAA,MAAA,CAAKI,MAAM,uBACPJ,EAAA,QAAA,KAAA,KACAA,EAAA,QAAA,CAAOpB,KAAK,SAASqG,IAAI,IAAIC,IAAI,MAAMmE,KAAM,EAAG5F,MAAOkB,KAAKK,MAAMrB,EAAU,KAAIlB,aAAa,YACzF6G,SAAWtD,GAAMrH,KAAK+I,gBAAgB1B,EAAG,gBAGjDhG,EAAA,MAAA,CAAKI,MAAM,yBACPJ,EAAA,SAAA,CACIiC,GAAG,aACH5B,QAAS1B,KAAK4K,gBAAgBZ,KAAKhK,MAAK8D,aAC7B,yCAEXzC,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,wEAI/J9B,EAAA,MAAA,CAAKI,MAAM,uBAAuBF,MAAO,CAACO,QAAS9B,KAAKmH,aACpD9F,EAAA,MAAA,CAAKI,MAAM,uBACPJ,EAAA,QAAA,KAAA,OACAA,EAAA,MAAA,CAAKI,MAAM,aACPJ,EAAA,QAAA,CAAOpB,KAAK,OAAM6D,aAAY,oBAC1BgB,MAAO9E,KAAKwF,SACZmF,SAAUtD,GAAKrH,KAAKuJ,gBAAiBlC,EAAEwB,OAA4B/D,SAEvEzD,EAAA,SAAA,CACII,MAAM,OAAMqC,aACD,cAEXzC,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,wIAI/J9B,EAAA,MAAA,CAAKI,MAAM,yBACPJ,EAAA,SAAA,CACIiC,GAAG,aACH5B,QAAS1B,KAAK4K,gBAAgBZ,KAAKhK,MAAK8D,aAC7B,6CAEXzC,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,4KA5X/K0H,EAAAA,CADCC,EAAS,wDCrCd,MAAMC,EAAiB,inCCOVC,EAAW,MALxBlL,YAAAC,0DAOUC,KAAAiL,KAMJ,CACFC,gBAAiB,uBACjBC,QAAS,UACTC,GAAI,KACJC,YAAa,iBACbC,WAAY,iBAaNtL,KAAAuL,gBAA2B,MAO3BvL,KAAAwL,eAAyB,GAKxBxL,KAAAyL,iBAA4B,MAE5BzL,KAAA0L,cAAyB,MAkD1B1L,KAAA2L,eAAkBC,IAExBA,EAAMC,kBACND,EAAMtE,iBACNsE,EAAME,aAAaC,WAAa,OAChC/L,KAAKgM,SAASrL,UAAUC,IAAI,aAqBtBZ,KAAAiM,WAAcC,IACpBA,EAAUL,kBACVK,EAAU5E,iBACV,MAAM6E,EAAQD,EAAUJ,aAAaK,MAErC,GAAInM,KAAKoM,qBAAqBD,GAAO,CACnC,OAEF,IAAIE,EAAWrM,KAAKsM,qBAAqBH,GACzCnM,KAAKuM,cAAcrL,KAAKmL,IA7E1BvM,mBACE,GAAIE,KAAKuL,gBAAgB,CACvBvL,KAAKwM,iCACJC,MAAKC,GAAU1M,KAAKyL,iBAAmBiB,IAE1C,GAAI1M,KAAK2M,mBAAqBjK,WAAa1C,KAAK2M,kBAAkB/F,OAAS,EAAE,CAC3E,IAAIgG,EAAqB5M,KAAK2M,kBAAkBE,KAAIxF,GAAK,IAAIA,MAC7D,IAAIyF,EAAiBF,EAAmBG,KAAK,KAC7C/M,KAAKgN,UAAUC,OAASH,GAIpBhN,iCACN,OAAO,IAAIoN,SAASC,IAClB,MAAMC,EAAeC,UAAUD,aAC/B,GAAIA,GAAgB1K,WAAa0K,EAAaE,kBAAoB5K,UAAW,CAC3EyK,EAAQ,OAEVC,EAAaE,mBACVb,MAAKc,IACJ,IAAIb,EAASa,EAAQC,MAAKC,GAAUA,EAAOC,MAAQ,eACnDP,EAAQT,SAKR5M,qBAAqBqM,GAC3B,IAAIE,EAAmB,GACvB,IAAK,IAAIsB,EAAQ,EAAGA,EAAQxB,EAAMvF,OAAQ+G,IAAS,CACjD,MAAMC,EAAOzB,EAAMwB,GACnBtB,EAASwB,KAAKD,GAGhB,OAAOvB,EAGDvM,mBAAmB+J,GACzB,IAAIsC,EAAQnM,KAAKsM,qBAAqBzC,EAAQsC,OAE9CnM,KAAKuM,cAAcrL,KAAKiL,GAWlBrM,qBAAqBqM,GAC3B,IAAI2B,EAAa,MACjB,IAAK,IAAIC,EAAY,EAAGA,EAAY5B,EAAMvF,OAAQmH,IAAa,CAC7D,MAAMH,EAAOzB,EAAM4B,GACnB,IAAIC,EAAQ,kBACZ,MAAMC,EAAgBD,EAAME,KAAKN,EAAKO,MAAM,GAC5C,GAAIF,GAAiBvL,UAAU,CAC7BoL,EAAa,KAGf,GAAI9N,KAAK2M,mBAAqBjK,YAAc1C,KAAK2M,kBAAkByB,SAASH,GAAe,CACzFH,EAAa,KAGf,OAAOA,GAgBHhO,eACNE,KAAK0L,cAAgB,KACrB2B,UAAUD,aAAaiB,aAAa,CAACC,MAAO,KAAMC,MAAO,QACxD9B,MAAK+B,IAEJxO,KAAKyO,aAAaC,UAAYF,EAC9BxO,KAAKyO,aAAaE,OACjBlC,MAAK,KACJzM,KAAK4O,cAAgBJ,EAAOK,iBAAiB,GAAGC,oBAGnDC,OAAMC,GAASC,MAAMD,KAGhBlP,gBACN,IAAIoP,EAASC,SAASC,cAAc,UACpC,MAAMC,EAAUH,EAAOI,WAAW,MAClCJ,EAAOjM,MAAQjD,KAAK4O,cAAc3L,MAClCiM,EAAOnM,OAAS/C,KAAK4O,cAAc7L,OACnCsM,EAAQE,UAAUvP,KAAKyO,aAAc,EAAG,GACxCS,EAAOM,QAAOC,IACZ,IAAI7B,EAAO,IAAI8B,KAAK,CAACD,GAAO,aAAc,CAACxP,KAAK,eAChDD,KAAK0L,cAAgB,MAErB,IAAIW,EAAW,CAACuB,GAChB5N,KAAKuM,cAAcrL,KAAKmL,KACvB,aAAcrM,KAAKwL,gBAGxB1L,yBACE,OACEuB,EAACC,EAAI,CACHuB,IAAKwE,GAAKrH,KAAKgM,SAAW3E,EAC1B5F,MAAM,WACNkO,WAAY3P,KAAK2L,eACjBiE,OAAQ5P,KAAKiM,WACb4D,YAAa,IAAM7P,KAAKgM,SAASrL,UAAU8B,OAAO,cAEhDzC,KAAK0L,eACL,CACErK,EAAA,IAAA,MAAIyO,EAAA9P,KAAKiL,QAAI,MAAA6E,SAAA,OAAA,EAAAA,EAAE5E,iBAEf7J,EAAA,IAAA,KAAA,MAAM0O,EAAA/P,KAAKiL,QAAI,MAAA8E,SAAA,OAAA,IAAE3E,GAAE,MAEnB/J,EAAA,QAAA,CAAOI,MAAM,eACXJ,EAAA,QAAA,CACEpB,KAAK,OACL4C,IAAKnC,GAAMV,KAAKgN,UAAYtM,EAC5BiK,SAAUtD,GAAKrH,KAAKgQ,mBAAmB3I,EAAEwB,UAG3CxH,EAAA,OAAA,KACEA,EAAA,MAAA,CAAKyB,MAAM,6BAA4BM,oBAAmB,gBAAgBL,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,IAAA,KAAGA,EAAA,OAAA,CAAM6B,KAAK,OAAOH,OAAO,KAAKE,MAAM,QAAU5B,EAAA,IAAA,KAAGA,EAAA,OAAA,CAAM8B,EAAE,qDAC/L,KAEN8M,EAAAjQ,KAAKiL,QAAI,MAAAgF,SAAA,OAAA,IAAE3E,YAGdtL,KAAKyL,kBACH,CACEpK,EAAA,IAAA,KAAA,MAAM6O,EAAAlQ,KAAKiL,QAAI,MAAAiF,SAAA,OAAA,IAAE9E,GAAE,MAEnB/J,EAAA,SAAA,CACEK,QAAS,IAAM1B,KAAKmQ,gBAEpB9O,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,SAAA,CAAQ+O,GAAG,KAAKC,GAAG,KAAK9K,EAAE,QAAOlE,EAAA,OAAA,CAAM8B,EAAE,gKACnLmN,EAAAtQ,KAAKiL,QAAI,MAAAqF,SAAA,OAAA,IAAEjF,eAKrBrL,KAAK0L,eACJrK,EAAA,MAAA,CAAKI,MAAM,iBACTJ,EAAA,QAAA,CAAOwB,IAAKwE,GAAKrH,KAAKyO,aAAepH,IACrChG,EAAA,SAAA,CACEK,QAAS,IAAM1B,KAAKuQ,iBAEpBlP,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,SAAA,CAAQ+O,GAAG,KAAKC,GAAG,KAAK9K,EAAE,QAAOlE,EAAA,OAAA,CAAM8B,EAAE,+JAAmK,KACtVqN,EAAAxQ,KAAKiL,QAAI,MAAAuF,SAAA,OAAA,IAAErF,uBCrN1B,IAAYsF,GAAZ,SAAYA,GACRA,EAAAA,EAAA,MAAA,GAAA,KACAA,EAAAA,EAAA,MAAA,GAAA,KACAA,EAAAA,EAAA,MAAA,GAAA,KACAA,EAAAA,EAAA,MAAA,GAAA,MAJJ,CAAYA,IAAAA,EAAU,cCANC,EACZ9E,EACA+E,GAEA,IAAIC,EAAY,EAChB,IAAIC,EAAY,EAChB,GAAIjF,aAAiBkF,WAAY,CAC/BF,EAAYhF,EAAMgF,UAClBC,EAAYjF,EAAMiF,UAEpB,UAAWE,aAAe,YAAY,CACpC,GAAInF,aAAiBmF,WAAY,CAC/B,IAAIC,EAAQpF,EAAMqF,QAAQ,GAC1B,GAAIN,GAAiBjO,UAAW,CAC9BkO,EAAYI,EAAME,MAAQlR,KAAK2Q,cAAcO,MAC7CL,EAAYG,EAAMG,MAAQnR,KAAK2Q,cAAcQ,MAE/CR,EAAgBK,GAGpB,MAAO,CAAEJ,UAAAA,EAAWC,UAAAA,GCpBxB,MAAMO,EAAqB,m7CCcdC,EAAe,MAL5BvR,YAAAC,gEAOUC,KAAAiD,MAAgB,IAGhBjD,KAAA+C,OAAiB,IAKjB/C,KAAAiL,KAQJ,CACFE,QAAS,UACTD,gBAAiB,yBACjBE,GAAI,KACJC,YAAa,iBACbC,WAAY,kBACZgG,cAAe,wJACfC,eAAgB,SAIVvR,KAAAwR,QAAkB,GAGlBxR,KAAAyR,kBAA6B,MA2F7BzR,KAAA0R,oBAAuB9F,IAC7BA,EAAMC,kBACND,EAAMtE,iBACN,MAAMuC,EAAU+B,EAAM/C,OACtB,MAAM8I,EAAY9H,EAAQlJ,UAAU,GAEpCwO,SAAS1H,iBAAiB,UAAWzH,KAAK4R,wBAAyB,OACnEzC,SAAS1H,iBAAiB,WAAYzH,KAAK4R,wBAAyB,OACpE,OAAQD,GACN,IAAK,OACHxC,SAAS1H,iBAAiB,YAAazH,KAAK6R,eAAgB,OAC5D1C,SAAS1H,iBAAiB,YAAazH,KAAK6R,eAAgB,OAC5D1C,SAAS1H,iBAAiB,WAAW,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAK6R,kBAC1F1C,SAAS1H,iBAAiB,YAAY,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAK6R,kBAC3F,MACF,IAAK,KACH1C,SAAS1H,iBAAiB,YAAazH,KAAK8R,kBAAmB,OAC/D3C,SAAS1H,iBAAiB,YAAazH,KAAK8R,kBAAmB,OAC/D3C,SAAS1H,iBAAiB,WAAW,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAK8R,qBAC1F3C,SAAS1H,iBAAiB,YAAY,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAK8R,qBAC3F,MACF,IAAK,KACH3C,SAAS1H,iBAAiB,YAAazH,KAAK+R,kBAAmB,OAC/D5C,SAAS1H,iBAAiB,YAAazH,KAAK+R,kBAAmB,OAC/D5C,SAAS1H,iBAAiB,WAAW,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAK+R,qBAC1F5C,SAAS1H,iBAAiB,YAAY,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAK+R,qBAC3F,MACF,IAAK,KACH5C,SAAS1H,iBAAiB,YAAazH,KAAKgS,kBAAmB,OAC/D7C,SAAS1H,iBAAiB,YAAazH,KAAKgS,kBAAmB,OAC/D7C,SAAS1H,iBAAiB,WAAW,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAKgS,qBAC1F7C,SAAS1H,iBAAiB,YAAY,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAKgS,qBAC3F,MACF,IAAK,KACH7C,SAAS1H,iBAAiB,YAAazH,KAAKiS,kBAAmB,OAC/D9C,SAAS1H,iBAAiB,YAAazH,KAAKiS,kBAAmB,OAC/D9C,SAAS1H,iBAAiB,WAAW,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAKiS,qBAC1F9C,SAAS1H,iBAAiB,YAAY,IAAM0H,SAAS7G,oBAAoB,YAAatI,KAAKiS,qBAC3F,QAMEjS,KAAA4R,wBAA2BM,IACjClS,KAAKmS,YACLhD,SAAS7G,oBAAoB,UAAWtI,KAAK4R,yBAC7C5R,KAAK2Q,cAAgBjO,WAsCf1C,KAAA8R,kBAAqBlG,IAC3B5L,KAAKoS,iBAAiBxG,EAAO6E,EAAW4B,KAGlCrS,KAAA+R,kBAAqBnG,IAC3B5L,KAAKoS,iBAAiBxG,EAAO6E,EAAW6B,KAGlCtS,KAAAgS,kBAAqBpG,IAC3B5L,KAAKoS,iBAAiBxG,EAAO6E,EAAW8B,KAGlCvS,KAAAiS,kBAAqBrG,IAC3B5L,KAAKoS,iBAAiBxG,EAAO6E,EAAW+B,KAGlCxS,KAAAoS,iBAAmB,CAACxG,EAAgC6G,KAC1D,IAAKzS,KAAK0S,qBAAqB9G,GAAO,CACpC,OAGF,IAAI5D,KAACA,EAAIG,IAAEA,GAAOnI,KAAK2S,iBAAiBF,GACxC,IAAIG,EAAW,EACf,IAAIC,EAAY,EAChB,IAAIC,EAAyC,aAC7C,MAAMC,EAAc/S,KAAKiD,MAAQjD,KAAK+C,OACtC,MAAMiQ,EAAWhT,KAAKiT,KAAKpL,wBAC3B,MAAMqL,EAAYlT,KAAKmT,MAAMtL,wBAC7B,IAAI+I,UAAEA,EAASC,UAAEA,GAAcH,EAAqB9E,EAAO5L,KAAK2Q,eAChE,GAAI3K,KAAKC,IAAI2K,GAAa5K,KAAKC,IAAI4K,GAAW,CAC5CiC,EAAc,WAGhB,GAAIA,GAAe,aAAa,CAC9B,OAAQL,GACN,KAAKhC,EAAW4B,GAChB,KAAK5B,EAAW+B,GACdI,EAAWI,EAAS/P,MAAQ2N,EAC5BiC,EAAYD,EAAWG,EACvB,MACF,KAAKtC,EAAW6B,GAChB,KAAK7B,EAAW8B,GACdK,EAAWI,EAAS/P,MAAQ2N,EAC5BiC,EAAYD,EAAWG,EACvB,WAIA,CACJ,OAAQN,GACN,KAAKhC,EAAW4B,GAChB,KAAK5B,EAAW6B,GACdO,EAAYG,EAASjQ,OAAS8N,EAC9B+B,EAAWC,EAAYE,EACvB,MACF,KAAKtC,EAAW8B,GAChB,KAAK9B,EAAW+B,GACdK,EAAYG,EAASjQ,OAAS8N,EAC9B+B,EAAWC,EAAYE,EACvB,OAMN,OAAQN,GACN,KAAKhC,EAAW6B,GAChB,KAAK7B,EAAW4B,GACd,MAAMe,EAAYJ,EAASjQ,OAAS8P,EACpC1K,EAAMnI,KAAKiT,KAAKI,UAAYD,EAKhC,OAAQX,GACN,KAAKhC,EAAW4B,GAChB,KAAK5B,EAAW+B,GACd,MAAMc,EAAaN,EAAS/P,MAAQ2P,EACpC5K,EAAOhI,KAAKiT,KAAKM,WAAaD,EAC9B,GAAItL,EAAO,EAAGA,EAAO,EACrB,GAAIA,EAAOkL,EAAUjQ,MAAO+E,EAAOkL,EAAUjQ,MAC7C,GAAIkF,EAAM,EAAGA,EAAM,EACnB,GAAIA,EAAM+K,EAAUnQ,OAAQoF,EAAM+K,EAAUnQ,OAC5C,GAAIiF,EAAO4K,EAAWM,EAAUjQ,MAAO2P,EAAWM,EAAUjQ,MAAQ+E,EACpE,GAAIG,EAAM0K,EAAYK,EAAUnQ,OAAQ8P,EAAYK,EAAUnQ,OAASoF,EACvE,MACF,KAAKsI,EAAW6B,GAChB,KAAK7B,EAAW8B,GACd,GAAIpK,EAAM,EAAGA,EAAM,EACnB,GAAIA,EAAM+K,EAAUnQ,OAAQoF,EAAM+K,EAAUnQ,OAC5C,GAAIiF,EAAO4K,EAAWM,EAAUjQ,MAAO2P,EAAWM,EAAUjQ,MAAQ+E,EACpE,GAAIG,EAAM0K,EAAYK,EAAUnQ,OAAQ8P,EAAYK,EAAUnQ,OAASoF,EACvE,MAKJ,GAAIyK,EAAWC,GAAaE,EAAY,CACtC,OAGF,GAAI/S,KAAKyR,kBAAkB,CACzB,MAAM+B,EAAYxT,KAAKmT,MAAMlQ,MAAQjD,KAAKmT,MAAMM,aAChD,GAAIb,EAAWY,EAAYxT,KAAKiD,OAAS4P,EAAYW,EAAYxT,KAAK+C,OAAO,CAC3E,QAIJ,OAAQ0P,GACN,KAAKhC,EAAW6B,GACdtS,KAAKiT,KAAK1R,MAAM4G,IAAM,GAAGA,MACzBnI,KAAKiT,KAAK1R,MAAM0B,MAAQ,GAAG2P,MAC3B5S,KAAKiT,KAAK1R,MAAMwB,OAAS,GAAG8P,MAC5B,MACF,KAAKpC,EAAW4B,GACdrS,KAAKiT,KAAK1R,MAAMyG,KAAO,GAAGA,MAC1BhI,KAAKiT,KAAK1R,MAAM4G,IAAM,GAAGA,MACzBnI,KAAKiT,KAAK1R,MAAM0B,MAAQ,GAAG2P,MAC3B5S,KAAKiT,KAAK1R,MAAMwB,OAAS,GAAG8P,MAC5B,MACF,KAAKpC,EAAW8B,GACdvS,KAAKiT,KAAK1R,MAAM0B,MAAQ,GAAG2P,MAC3B5S,KAAKiT,KAAK1R,MAAMwB,OAAS,GAAG8P,MAC5B,MACF,KAAKpC,EAAW+B,GACdxS,KAAKiT,KAAK1R,MAAMyG,KAAO,GAAGA,MAC1BhI,KAAKiT,KAAK1R,MAAM0B,MAAQ,GAAG2P,MAC3B5S,KAAKiT,KAAK1R,MAAMwB,OAAS,GAAG8P,MAC5B,QAuBE7S,KAAA6R,eAAkB6B,IACxB,IAAK1T,KAAK0S,qBAAqBgB,GAAI,CACjC,OAEF,IAAI9C,UAACA,EAASC,UAAEA,GAAaH,EAAqBgD,EAAI1T,KAAK2Q,eAC3D,IAAIgD,EAAU3T,KAAKiT,KAAKM,WAAa3C,EACrC,IAAIgD,EAAS5T,KAAKiT,KAAKI,UAAYxC,EACnC,IAAIqC,EAAYlT,KAAKmT,MAAMtL,wBAC3B,IAAImL,EAAWhT,KAAKiT,KAAKpL,wBACzB,GAAI8L,EAAU,EAAE,CACdA,EAAU,EAEZ,GAAIC,EAAS,EAAE,CACbA,EAAS,EAEX,GAAID,EAAUX,EAAS/P,MAAQiQ,EAAUjQ,MAAM,CAC7C0Q,EAAU3T,KAAKiT,KAAKM,WAEtB,GAAIK,EAASZ,EAASjQ,OAASmQ,EAAUnQ,OAAO,CAC9C6Q,EAAS5T,KAAKiT,KAAKI,UAErBrT,KAAKiT,KAAK1R,MAAMyG,KAAO2L,EAAU,KACjC3T,KAAKiT,KAAK1R,MAAM4G,IAAMyL,EAAS,MA7UjC9T,mBACEoE,uBAAsB,KACpBlE,KAAK6T,QAAQ,oBAIT/T,QAAQgU,GACd,MAAMC,EAAQ/T,KAAKgU,KAAKlT,WAAWmT,iBAAiB,SACpDF,EAAMG,SAAQC,GACZA,EAAExT,UAAU8B,OAAO,aACrB,OAAQqR,GACN,IAAK,gBACH9T,KAAKoU,cAAczT,UAAUC,IAAI,WACjC,MACF,IAAK,iBACHZ,KAAKqU,eAAe1T,UAAUC,IAAI,WAClC,MAIJZ,KAAKsU,KAAOR,EAGNhU,WACN,IAAIiT,EAAc/S,KAAKiD,MAAQjD,KAAK+C,OACpC,IAAImQ,EAAYlT,KAAKmT,MAAMtL,wBAC3B,IAAI0M,EAAarB,EAAUjQ,MAAQiQ,EAAUnQ,OAE7C,GAAIgQ,EAAcwB,EAAW,CACzB,IAAIC,EAAetB,EAAUjQ,MAAQ8P,EACrC,IAAIvM,EAAO0M,EAAUnQ,OAASyR,EAC9BxU,KAAKiT,KAAK1R,MAAM4G,IAAMnC,KAAKK,MAAMG,EAAK,GAAGG,WAAa,KACtD3G,KAAKiT,KAAK1R,MAAMwB,OAASiD,KAAKK,MAAMmO,GAAc7N,WAAa,SAE/D,CACF,IAAI8N,EAAcvB,EAAUnQ,OAASgQ,EACrC,IAAIvM,EAAO0M,EAAUjQ,MAAQwR,EAC3BzU,KAAKiT,KAAK1R,MAAMyG,KAAOhC,KAAKK,MAAMG,EAAK,GAAGG,WAAa,KACvD3G,KAAKiT,KAAK1R,MAAM0B,MAAQ+C,KAAKK,MAAMoO,GAAa9N,WAAa,MAI3D7G,WACNE,KAAKmT,MAAM1L,iBAAiB,QAAQ,KAClCzH,KAAK0U,WACL1U,KAAKmS,eAEPnS,KAAKmT,MAAMwB,IAAM3U,KAAKkP,OAAO0F,YAGvB9U,cAAc8N,GACpB,GAAIA,EAAK3N,KAAK4U,MAAM,KAAK,IAAM,QAAQ,CACrC,OAGF,IAAIC,EAAS,IAAIC,WACjBD,EAAOE,OAASC,IACd,IAAIC,EAAM,IAAIC,MACdD,EAAIF,OAAS,KACXhV,KAAKkP,OAAOjM,MAAQiS,EAAIjS,MACxBjD,KAAKkP,OAAOnM,OAASmS,EAAInS,OACzB,GAAI/C,KAAKyR,oBAAsByD,EAAIjS,MAAQjD,KAAKiD,OAASiS,EAAInS,OAAQ/C,KAAK+C,QAAQ,CAChF/C,KAAKoV,mBAAmBhU,OACxB,OAEF,IAAIiU,EAAMrV,KAAKkP,OAAOI,WAAW,MACjC+F,EAAI9F,UAAU2F,EAAI,EAAE,GACpBlV,KAAK6T,QAAQ,kBACb7T,KAAKsV,YAEPJ,EAAIP,IAAMM,EAAgBpM,OAAO6D,OAAO/F,YAE1CmO,EAAOS,cAAc3H,GAqDf9N,YACN,IAAIgI,EAAI9H,KAAKiT,KAAKM,WAAavT,KAAKmT,MAAMlQ,MAAQjD,KAAKmT,MAAMM,aAC7D,IAAIxL,EAAIjI,KAAKiT,KAAKI,UAAYrT,KAAKmT,MAAMpQ,OAAS/C,KAAKmT,MAAMqC,cAE7D,IAAIxC,EAAWhT,KAAKiT,KAAKpL,wBACzB,IAAI5E,EAAQ+P,EAAS/P,MAAQjD,KAAKmT,MAAMlQ,MAAQjD,KAAKmT,MAAMM,aAC3D,IAAI1Q,EAASiQ,EAASjQ,OAAS/C,KAAKmT,MAAMpQ,OAAS/C,KAAKmT,MAAMqC,cAE9D,GAAI1N,EAAI,EACNA,EAAI,EACN,GAAIA,EAAI9H,KAAKmT,MAAMM,aACjB3L,EAAI9H,KAAKmT,MAAMM,aACjB,GAAIxL,EAAI,EACNA,EAAI,EACN,GAAIA,EAAIjI,KAAKmT,MAAMM,aACjBxL,EAAIjI,KAAKmT,MAAMM,aACjB,GAAIxQ,EAAQjD,KAAKmT,MAAMM,aACrBxQ,EAAQjD,KAAKmT,MAAMM,aACrB,GAAI1Q,EAAS/C,KAAKmT,MAAMqC,cACtBzS,EAAS/C,KAAKmT,MAAMqC,cAEtB,IAAIC,EAAUzV,KAAK0V,qBAAqB5N,EAAGG,EAAGhF,EAAOF,EAAQ/C,KAAKiD,MAAOjD,KAAK+C,QAC9E/C,KAAK2V,iBAAiBzU,KAAKuU,GAGrB3V,qBAAqBgI,EAAWG,EAAWhF,EAAeF,EAAgB6S,EAAsBC,GACtG7V,KAAKkP,OAAOjM,MAAQ2S,EACpB5V,KAAKkP,OAAOnM,OAAS8S,EACrB,MAAMxG,EAAUrP,KAAKkP,OAAOI,WAAW,MACvCD,EAAQyG,UAAU,EAAG,EAAGF,EAAcC,GACtCxG,EAAQE,UAAUvP,KAAKmT,MAAOrL,EAAGG,EAAGhF,EAAOF,EAAQ,EAAG,EAAG6S,EAAcC,GAEvE,OAAO7V,KAAKkP,OAAO0F,UAAU,aAAc5U,KAAKwR,SAyI1C1R,iBAAiB2S,GACvB,IAAIzK,EAAO,EACX,IAAIG,EAAM,EACV,OAAQsK,GACN,KAAKhC,EAAW8B,GACdvK,EAAOhI,KAAKiT,KAAKM,WACjBpL,EAAMnI,KAAKiT,KAAKI,UAChB,MACF,KAAK5C,EAAW+B,GACdrK,EAAMnI,KAAKiT,KAAKI,UAChB,MAIJ,MAAO,CAAClL,IAAAA,EAAKH,KAAAA,GA4BPlI,qBAAqB8L,GAC3B,IAAImK,EAAS,MACb,IAAIC,EACJ,IAAIC,EACJ,MAAM/C,EAAYlT,KAAKmT,MAAMtL,wBAE7B,GAAI+D,aAAiBkF,WAAW,CAC9BkF,EAASpK,EAAM7D,QACfkO,EAASrK,EAAM1D,QAGjB,UAAW6I,aAAe,YAAY,CACpC,GAAInF,aAAiBmF,WAAW,CAC9B,IAAIC,EAAQpF,EAAMqF,QAAQ,GAC1B+E,EAAShF,EAAMjJ,QACfkO,EAASjF,EAAM9I,SAInB,GACE8N,GAAU9C,EAAUpL,GACpBmO,GAAU/C,EAAUjL,GACpB+N,GAAU9C,EAAUlL,KAAOkL,EAAUjQ,OACrCgT,GAAU/C,EAAU/K,IAAM+K,EAAUnQ,OACtC,CACEgT,EAAS,KAGX,IAAIG,EAAUlW,KAAKiT,KAAKgB,iBAAiB,OACzCiC,EAAQhC,SAAQzB,IACd,IAAI0D,EAAa1D,EAAO5K,wBACxB,GACEmO,GAAUG,EAAWrO,GACrBmO,GAAUE,EAAWlO,GACrB+N,GAAUG,EAAWnO,KAAOmO,EAAWlT,OACvCgT,GAAUE,EAAWhO,IAAMgO,EAAWpT,OACtC,CACEgT,EAAS,SAIf,OAAOA,EAGTjW,SACE,OACEuB,EAACC,EAAI,CAACuB,IAAKnC,GAAMV,KAAKgU,KAAOtT,GAC3BW,EAAA,SAAA,CAAQwB,IAAKnC,GAAMV,KAAKkP,OAASxO,IACjCW,EAAA,MAAA,CACEI,MAAM,OACNoB,IAAKnC,GAAMV,KAAKqU,eAAiB3T,GAEjCW,EAAA,MAAA,CAAKI,MAAM,WACTJ,EAAA,MAAA,CAAKwB,IAAKnC,GAAMV,KAAKmT,MAAQzS,IAC7BW,EAAA,MAAA,CAAKI,MAAM,aACXJ,EAAA,MAAA,CACEI,MAAM,OACNoB,IAAKwE,GAAKrH,KAAKiT,KAAO5L,EACtB0C,YAAa/J,KAAK0R,oBAClB0E,aAAcpW,KAAK0R,qBAEnBrQ,EAAA,MAAA,CAAKI,MAAM,OACXJ,EAAA,MAAA,CAAKI,MAAM,OACXJ,EAAA,MAAA,CAAKI,MAAM,OACXJ,EAAA,MAAA,CAAKI,MAAM,UAIjBJ,EAAA,MAAA,CACEI,MAAM,OACNoB,IAAKnC,GAAMV,KAAKoU,cAAgB1T,GAC9BW,EAAA,eAAA,CACEkK,gBAAe,KACf8K,gBAAiBhP,GAAKrH,KAAKsW,cAAcjP,EAAEkP,OAAO,IAClDtL,KACE,CACEE,QAASnL,KAAKiL,KAAKE,QACnBD,gBAAiBlL,KAAKiL,KAAKC,gBAC3BE,GAAIpL,KAAKiL,KAAKG,GACdC,YAAarL,KAAKiL,KAAKI,YACvBC,WAAYtL,KAAKiL,KAAKK,eAKhCjK,EAAA,YAAA,CAAWwB,IAAKnC,GAAMV,KAAKoV,mBAAqB1U,EAAE8V,aAAcxW,KAAKiL,KAAKsG,gBACxElQ,EAAA,IAAA,KAAIrB,KAAKiL,KAAKqG,cAAcmF,QAAQ,UAAWzW,KAAKiD,MAAM0D,YAAY8P,QAAQ,WAAYzW,KAAK+C,OAAO4D,2BCpehH,MAAM+P,EAAc,4lDCOPC,EAAQ,MALrB7W,YAAAC,kDAYUC,KAAA6B,gBAA2B,KAM3B7B,KAAA4W,UAAqB,cAOrB5W,KAAA4B,gBAA4B,KAE3B5B,KAAA6W,QAAmB,MAM5B/W,aACEE,KAAK6W,QAAU,KAOjB/W,aACEE,KAAK6W,QAAU,MAQT/W,gBACNE,KAAK6W,QAAU,MACf7W,KAAK8W,UAAU5V,OAGTpB,oBAAoBuH,GAC1B,MAAMwC,EAAWxC,EAAEwB,OACnB,GAAIgB,EAAQvG,KAAO,YAActD,KAAK6B,gBAAgB,CACpD7B,KAAK+W,iBAITjX,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,MAAA,CAAKiC,GAAG,WACN7B,MAAOzB,KAAK6W,QAAU,kBAAoB,UAC1CnV,QAAS2F,GAAKrH,KAAKgX,oBAAoB3P,IAEvChG,EAAA,MAAA,CAAKI,MAAM,SACRzB,KAAK4B,iBACJP,EAAA,SAAA,CACEI,MAAM,QAAOqC,aACD9D,KAAK4W,UACjBlV,QAAS,IAAM1B,KAAK+W,iBAEpB1V,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,sLAGvJ9B,EAAA,OAAA,6CCjFZ,MAAM4V,EAAkB,u/CCOXC,EAAY,MALzBpX,YAAAC,wDAUUC,KAAAmX,YAAuB,GAKvBnX,KAAAoX,UAAqB,KAGNpX,KAAAqX,MAAgB,GASvCvX,mBACE,GAAIE,KAAKoX,UAAU,CACjBpX,KAAKsX,kCAEH,CACFtX,KAAKuX,sBAIDzX,qBACNE,KAAKwX,aAAatW,KAAKlB,KAAKqX,OAItBvX,8BACNE,KAAKuX,qBAIPzX,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,QAAA,CAAOpB,KAAK,OAAO6E,MAAO9E,KAAKqX,MAC7BF,YAAanX,KAAKmX,YAClBM,QAASpQ,GAAKrH,KAAKqX,MAAShQ,EAAEwB,OAA4B/D,QAE3D9E,KAAKqX,QAAU,GACdhW,EAAA,SAAA,CAAQI,MAAM,YACZC,QAAS,IAAM1B,KAAKqX,MAAQ,IAE5BhW,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,sLAGvJ9B,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,4SAnBzJ0H,EAAA,CADCC,EAAS,gEC1CZ,MAAM4M,EAAiB,6aCOVC,EAAW,MALxB7X,YAAAC,sDAOUC,KAAA4X,cAAyC,OAKzC9X,aACN,OAAQE,KAAK4X,eACX,IAAK,MACH5X,KAAK4X,cAAgB,OACrB,MACF,IAAK,OACH5X,KAAK4X,cAAgB,MACrB,MACF,IAAK,OACH5X,KAAK4X,cAAgB,MACrB,MAKJ5X,KAAK6X,YAAY3W,KAAKlB,KAAK4X,eAG7B9X,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,SAAA,CACEI,MAAO,CAACqW,OAAU9X,KAAK4X,eAAiB,QACxClW,QAAS,IAAM1B,KAAK+X,cAEnB/X,KAAK4X,eAAiB,QACrBvW,EAAA,MAAA,CAAKyB,MAAM,6BAA6BE,QAAQ,aAAY3B,EAAA,OAAA,CAAM8B,EAAE,4CAErEnD,KAAK4X,eAAiB,OACrBvW,EAAA,MAAA,CAAKyB,MAAM,6BAA6BE,QAAQ,aAAY3B,EAAA,OAAA,CAAM8B,EAAE,wBAErEnD,KAAK4X,eAAiB,QACrBvW,EAAA,MAAA,CAAKyB,MAAM,6BAA6BE,QAAQ,aAAY3B,EAAA,OAAA,CAAM8B,EAAE,uCC9ChF,MAAM6U,EAAY,OCQLC,EAAM,MALnBnY,YAAAC,aASaC,KAAA6W,QAAmB,MAI5B/W,aACIE,KAAK6W,QAAU,KAKnB/W,aACIE,KAAK6W,QAAU,MAGnB/W,SACI,OACIuB,EAACC,EAAI,KACAtB,KAAK6W,SACFxV,EAAA,OAAA,mBC9BpB,MAAM6W,EAAa,4yBCONC,EAAO,MALpBrY,YAAAC,aAQaC,KAAAoY,UAAsB,GACtBpY,KAAAqY,iBAA2B,GAEpCvY,mBACIoE,uBAAsB,KAClBlE,KAAKsY,eACLtY,KAAKuY,kBAILzY,UACJ,OAAOE,KAAKgJ,UAAUlI,WAAWC,cAAc,QAAQyX,mBAGnD1Y,eACJ,MAAM2Y,EAAOzY,KAAK0Y,UAClBD,EAAKvE,SAAQyE,GAAO3Y,KAAKoY,UAAY,IAAIpY,KAAKoY,UAAWO,EAAIC,YAGzD9Y,eACJ,MAAM6Y,EAAM3Y,KAAK0Y,UAAU,GAC3BC,EAAIvX,OACJpB,KAAKqY,iBAAmBM,EAAIC,SAGxB9Y,QAAQ8Y,GACZ,MAAMH,EAAOzY,KAAK0Y,UAClBD,EAAKvE,SAAQyE,IACT,GAAIA,EAAIC,UAAYA,EAAS,CACzBD,EAAIvX,OACJ,OAGJuX,EAAI3X,UAERhB,KAAKqY,iBAAmBO,EAG5B9Y,SACI,OACIuB,EAACC,EAAI,CAACuB,IAAKnC,GAAMV,KAAKgJ,UAAYtI,GAC9BW,EAAA,MAAA,CAAKI,MAAM,aACNzB,KAAKoY,UAAUvL,KAAI+L,GAChBvX,EAAA,SAAA,CACII,MAAOzB,KAAKqY,kBAAoBO,EAAW,UAAW,GACtDlX,QAAS,IAAM1B,KAAK6Y,QAAQD,IAE3BA,MAIbvX,EAAA,MAAA,CAAKI,MAAM,cACPJ,EAAA,OAAA,oBC9DpB,MAAMyX,EAAe,q9BCSRC,EAAS,MALtBjZ,YAAAC,wDAU2BC,KAAAqC,QAAU,MAGzBrC,KAAAQ,SAAW,MAMnBV,eAAekZ,GACXhZ,KAAKiZ,aAAa/X,KAAK,CAACmB,QAAS2W,IAGrClZ,SACI,OACIuB,EAACC,EAAI,KACDD,EAAA,SAAA,CAAQb,SAAUR,KAAKQ,SAAUiB,MAAO,CAACY,QAAWrC,KAAKqC,SACrDX,QAAS,KACL,IAAK1B,KAAKQ,SAAU,CAChBR,KAAKqC,SAAWrC,KAAKqC,WAI7BhB,EAAA,MAAA,CAAKI,MAAM,+GCrC/B,MAAMyX,EAAqB,46BCOdC,EAAe,MAL5BrZ,YAAAC,qGAYwCC,KAAA2D,SAAoB,MASjD3D,KAAAoZ,YAAuB,MAIhCtZ,cAAc6D,GACZ,GAAIA,EAAU,CACZ3D,KAAKqZ,SAAS1Y,UAAUC,IAAI,YAC5BZ,KAAKsZ,YAAY3V,SAAW,KAC5B,OAGF3D,KAAKqZ,SAAS1Y,UAAU8B,OAAO,YAC/BzC,KAAKsZ,YAAY3V,SAAW,MAO9B7D,mBACEoE,uBAAsB,KACpB,MAAMqV,EAAQvZ,KAAKwZ,aAAaC,SAAS,GACzC,MAAMC,EAAQH,EAAMf,mBAAmB5R,OACvC,GAAI8S,EAAQ,EAAE,CACZ1Z,KAAKoZ,YAAc,KAErB,GAAIpZ,KAAK2D,SAAS,CAChB3D,KAAKqZ,SAAS1Y,UAAUC,IAAI,YAC5BZ,KAAKsZ,YAAY3V,SAAW,MAC5BY,YAAW,KACTvE,KAAKsZ,YAAY3V,SAAW,OAC3B,SAKD7D,iBACNE,KAAK2D,UAAY3D,KAAK2D,SACtB,GAAI3D,KAAK2D,SAAS,CAChB3D,KAAKqZ,SAAS1Y,UAAUC,IAAI,YAC5BZ,KAAK2Z,aAAazY,OAClB,OAGFlB,KAAKqZ,SAAS1Y,UAAU8B,OAAO,YAC/BzC,KAAK4Z,cAAc1Y,OAGrBpB,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,MAAA,CAAKI,MAAM,WAAWoB,IAAKnC,GAAMV,KAAKqZ,SAAW3Y,GAC9CV,KAAKoZ,aACJ/X,EAAA,SAAA,CACEK,QAAS,IAAM1B,KAAK6Z,kBAEpBxY,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,uBAAsB9B,EAAA,OAAA,CAAM8B,EAAE,mBAAmBD,KAAK,YAI1K7B,EAAA,MAAA,CAAKI,MAAM,QACTJ,EAAA,MAAA,CAAKI,MAAM,aACTJ,EAAA,OAAA,OAEFA,EAAA,kBAAA,CAAiBwB,IAAKnC,GAAMV,KAAKsZ,YAAc5Y,EAAIiD,SAAU3D,KAAK2D,UAChEtC,EAAA,MAAA,CAAKwB,IAAKnC,GAAMV,KAAKwZ,aAAe9Y,GAClCW,EAAA,OAAA,CAAM8M,KAAK,8GCzFzB,MAAM2L,EAA6B,stCCOtBC,EAAuB,MALpCja,YAAAC,aASWC,KAAAga,mBAAqB,MACrBha,KAAAia,iBAAmB,MAMpBja,KAAAka,kBAAoB,EAE5Bpa,qBACEoE,uBAAsB,KACpBlE,KAAKma,iCACLna,KAAKoa,eAAiB,IAAIC,gBAAeC,IACvC,IAAK,IAAIC,KAASD,EAAQ,CACxB,GAAIC,EAAMC,YAAYvX,MAAQjD,KAAKka,kBAAkB,CACnDla,KAAKma,iCAEP,GAAIna,KAAKka,kBAAoB,GAAKK,EAAMC,YAAYvX,MAAQjD,KAAKka,kBAAkB,CACjFla,KAAKya,4BAEPza,KAAKka,kBAAoBK,EAAMC,YAAYvX,UAG/CjD,KAAKoa,eAAeM,QAAQ1a,KAAK6J,YAI7B/J,iCACN,MAAM6a,EAAYC,MAAMC,KAAK7a,KAAK8a,KAAK/Z,cAAc,QAAQyX,oBAC7D,MAAMuC,EAAiB/a,KAAK8a,KAAKjT,wBAAwB5E,MACzD,IAAI+X,EAAcC,WAAWC,iBAAiBlb,KAAK6J,SAASsR,UAAU,EACtER,EAAUzG,SAAQkH,GAAQJ,GAAehb,KAAKqb,aAAaD,KAC3DJ,IAAgBL,EAAU/T,OAAS,GAAKqU,WAAWC,iBAAiBlb,KAAK6J,SAASsR,UAClF,GAAIH,EAAcD,EAAe,CAC/B/a,KAAKga,mBAAqB,KAC1B,IAAIsB,EAAWX,EAAUA,EAAU/T,OAAQ,GAC3C,GAAI5G,KAAKub,UAAY7Y,UAAU,CAC7B,OAEF4Y,EAASE,KAAO,WAChBxb,KAAKma,kCAIDra,4BACN,GAAIE,KAAKub,UAAY7Y,YAAc1C,KAAKub,SAASE,gBAAgB,CAC/D,OAEF,MAAMd,EAAYC,MAAMC,KAAK7a,KAAK8a,KAAK/Z,cAAc,QAAQyX,oBAC7D,MAAMuC,EAAiB/a,KAAK8a,KAAKjT,wBAAwB5E,MACzD,IAAI+X,EAAcC,WAAWC,iBAAiBlb,KAAK6J,SAASsR,UAAU,EACtEH,IAAgBL,EAAU/T,OAAS,GAAKqU,WAAWC,iBAAiBlb,KAAK6J,SAASsR,UAClFR,EAAUzG,SAAQkH,GAAQJ,GAAehb,KAAKqb,aAAaD,KAC3D,MAAMM,EAAY1b,KAAKub,SAASxa,cAAc,QAAQyX,mBAAmB,GACzE,GAAIkD,GAAahZ,UAAU,CACzBsY,GAAehb,KAAKqb,aAAaK,GAGnC,GAAIV,EAAcD,EAAe,CAC/B,GAAIW,GAAahZ,UAAU,CACzBgZ,EAAUF,KAAO,GAEnB,GAAGE,GAAahZ,UAAU,CACxB1C,KAAKub,SAAS5a,UAAU8B,OAAO,WAC/BzC,KAAKia,iBAAmB,MACxBja,KAAKga,mBAAqB,QAKxBla,aAAasb,GACnB,IAAInY,EAAQmY,EAAKvT,wBAAwB5E,MACzC,IAAI0Y,EAAST,iBAAiBE,GAC9BnY,GAASgY,WAAWU,EAAOC,YAC3B3Y,GAASgY,WAAWU,EAAOE,aAC3B5Y,GAASgY,WAAWU,EAAOG,aAC3B7Y,GAASgY,WAAWU,EAAOI,cAC3B,OAAO9Y,EAGDnD,qBACNE,KAAKia,kBAAoBja,KAAKia,iBAC9B,GAAIja,KAAKia,iBAAiB,CACxBja,KAAKub,SAAS5a,UAAUC,IAAI,WAC5B,IAAIob,EAAgB,EACpB,MAAMC,EAAQrB,MAAMC,KAAK7a,KAAKub,SAASxa,cAAc,QAAQyX,oBAC7DyD,EAAM/H,SAAQkH,GAAQY,GAAiBZ,EAAKvT,wBAAwB9E,SACpE,IAAImZ,EAAWjB,WAAWC,iBAAiBlb,KAAKub,UAAUJ,UAAY,GACtE,IAAIgB,EAAmBD,GAAYlc,KAAKub,SAAS9B,SAAS7S,OAAS,GACnEoV,GAAiBG,EACjBnc,KAAKub,SAASha,MAAMwB,OAAS,GAAGiZ,MAChC,MAAMI,EAAe/U,IACnB,MAAMgV,EAAarc,KAAKwC,OAAOqF,wBAC/B,GACER,EAAEU,QAAUsU,EAAWrU,MACvBX,EAAEU,QAAUsU,EAAWC,OACvBjV,EAAEa,QAAUmU,EAAWlU,KACvBd,EAAEa,QAAUmU,EAAWhS,OAAO,CAC5BrK,KAAKuc,qBAEPpN,SAAS7G,oBAAoB,QAAS8T,IAE1C7X,YAAW,KACT4K,SAAS1H,iBAAiB,QAAS2U,EAAa,SAC/C,SAED,CACFpc,KAAKub,SAAS5a,UAAU8B,OAAO,WAC/BzC,KAAKub,SAASha,MAAMwB,OAAS,OAIjCjD,SACE,OACEuB,EAACC,EAAI,KACHD,EAAA,MAAA,CAAKI,MAAM,kBACTJ,EAAA,MAAA,CAAKI,MAAM,OAAOoB,IAAKnC,GAAMV,KAAK8a,KAAOpa,GACvCW,EAAA,OAAA,OAECrB,KAAKga,oBACJ3Y,EAAA,MAAA,CAAKI,MAAM,YACTJ,EAAA,SAAA,CACEwB,IAAKnC,GAAMV,KAAKwC,OAAS9B,EACzBe,MAAM,OACNC,QAAS,IAAM1B,KAAKuc,sBACpBlb,EAAA,MAAA,CAAKyB,MAAM,6BAA6BC,OAAO,OAAOC,QAAQ,YAAYC,MAAM,OAAOC,KAAK,WAAU7B,EAAA,OAAA,CAAM8B,EAAE,gBAAgBD,KAAK,SAAQ7B,EAAA,OAAA,CAAM8B,EAAE,wJAErJ9B,EAAA,MAAA,CAAKI,MAAM,WAAWoB,IAAKnC,GAAMV,KAAKub,SAAW7a,GAC/CW,EAAA,OAAA,CAAM8M,KAAK,0DC3I7B,MAAMqO,EAA0B,yqBCanBC,EAAoB,MALjC3c,YAAAC,wDAQUC,KAAA0c,cAAgB,GAGD1c,KAAA2c,qBAAuB,GA0CrC3c,KAAA4c,UAAY,EACZ5c,KAAA6c,WAAa,EAnCtB/c,8BAA8B8S,GAC5B,MAAMkK,EAAQ9c,KAAK6J,QAAQ/I,WAAWmT,iBAAiB,SACvD/P,uBAAsB,KACpB4Y,EAAM5I,SAAQ6I,GAAQA,EAAKpc,UAAUC,IAAI,gBACzCZ,KAAKgd,SAASrc,UAAUC,IAAI,cAC5BsD,uBAAsB,KACpB,MAAM+Y,EAAYjd,KAAK6J,QAAQhC,wBAAwB5E,MACvD,IAAI0Q,EAAUsJ,EAAYrK,EAAW,IACrC,GAAIe,EAAU,EAAE,CACdA,EAAU,EAEZ,GAAIA,EAAUsJ,EAAU,CACtBtJ,EAAUsJ,EAEZjd,KAAK4c,UAAYjJ,EACjB3T,KAAK6c,WAAaI,EAAYtJ,EAC9BpP,YAAW,KACTuY,EAAM5I,SAAQ6I,GAAQA,EAAKpc,UAAU8B,OAAO,gBAC5CzC,KAAKgd,SAASrc,UAAU8B,OAAO,gBAC9B,WAOT3C,gCACE,MAAMmd,EAAYjd,KAAK6J,QAAQhC,wBAAwB5E,MACvD,OAAOjD,KAAK4c,UAAYK,EAW1Bnd,mBACEoE,uBAAsB,KACpBlE,KAAKoa,eAAiB,IAAIC,gBAAe,KACvC,MAAM4C,EAAYjd,KAAK6J,QAAQhC,wBAAwB5E,MACvDjD,KAAK4c,UAAYK,EAAYjd,KAAK2c,qBAAuB,IACzD3c,KAAK6c,WAAaI,EAAYjd,KAAK4c,UACnC5c,KAAKkd,aAAahc,KAAKlB,KAAK2c,yBAE9B3c,KAAKoa,eAAeM,QAAQ1a,KAAK6J,YAM7B/J,gBAAgB8L,GACtBA,EAAMtE,iBACN,MAAM6V,EAAczJ,IAClBxP,uBAAsB,KACpB,IAAI+Y,EAAYjd,KAAK6J,QAAQhC,wBAAwB5E,MACrD,IAAI2N,UAACA,GAAaF,EAAqBgD,EAAI1T,KAAK2Q,eAChD,IAAIgD,EAAU3T,KAAK4c,UAAYhM,EAC/B,GAAI+C,EAAU,EAAE,CACdA,EAAU,EAEZ,GAAIA,EAAUsJ,EAAU,CACtBtJ,EAAUsJ,EAEZjd,KAAK4c,UAAYjJ,EACjB3T,KAAK6c,WAAaI,EAAYtJ,EAC9B3T,KAAK2c,qBAAuB3c,KAAK4c,UAAYK,EAAY,QAG7D,MAAMG,EAAqB,KACzBjO,SAAS7G,oBAAoB,YAAa6U,GAC1ChO,SAAS7G,oBAAoB,YAAa6U,GAC1C,MAAMF,EAAYjd,KAAK6J,QAAQhC,wBAAwB5E,MACvD,MAAMoa,EAAgBrd,KAAK4c,UAAYK,EAAY,IACnDjd,KAAKkd,aAAahc,KAAKmc,IAEzBlO,SAAS1H,iBAAiB,UAAW2V,GACrCjO,SAAS1H,iBAAiB,WAAY2V,GACtCjO,SAAS1H,iBAAiB,YAAa0V,GACvChO,SAAS1H,iBAAiB,YAAa0V,GAGjCrd,cAAcuH,GACpB,IAAIuJ,EAAY,EAChB,OAAQvJ,EAAE8B,KACR,IAAK,YACHyH,GAAa,GACb,MACF,IAAK,aACHA,EAAY,GACZ,MACF,QACE,OAEJ,GAAIvJ,EAAE6B,SAAS,CACb0H,EAAYA,EAAY,GAE1B,MAAMqM,EAAYjd,KAAK6J,QAAQhC,wBAAwB5E,MACvD,IAAI0Q,EAAU3T,KAAK4c,UAAYhM,EAC/B,GAAI+C,EAAU,EAAE,CACdA,EAAU,EAEZ,GAAIA,EAAUsJ,EAAU,CACtBtJ,EAAUsJ,EAEZjd,KAAK4c,UAAYjJ,EACjB3T,KAAK6c,WAAaI,EAAYjd,KAAK4c,UAGrC9c,SACE,OACEuB,EAACC,EAAI,KACDD,EAAA,MAAA,CAAKI,MAAM,YAAYF,MAAO,CAC1B0B,MAAO,GAAGjD,KAAK4c,gBAEjBvb,EAAA,OAAA,CAAM8M,KAAK,UAEb9M,EAAA,SAAA,CACE0I,YAAa1C,GAAKrH,KAAKsd,gBAAgBjW,GACvC+O,aAAc/O,GAAKrH,KAAKsd,gBAAgBjW,GACxCiD,UAAWjD,GAAKrH,KAAKud,cAAclW,GACnCxE,IAAKnC,GAAMV,KAAKgd,SAAWtc,EAC3Ba,MAAO,CACLic,SAAU,GAAGxd,KAAK0c,cAAc/V,eAChCqB,KAAM,GAAGhI,KAAK4c,UAAY,QAG5Bvb,EAAA,OAAA,OAEFA,EAAA,MAAA,CACEI,MAAM,aACNF,MAAO,CACL0B,MAAO,GAAGjD,KAAK6c,iBAEjBxb,EAAA,OAAA,CAAM8M,KAAK","sourcesContent":[":host {\r\n --background-color: transparent;\r\n --color: #333;\r\n --border-size: 1px;\r\n --border-color: var(--backround-color);\r\n --border-radius: var(--dnn-controls-radius, 5px);\r\n --padding: var(--dnn-controls-padding, 5px);\r\n display: inline-block;\r\n width: auto;\r\n}\r\n\r\n:host(.disabled){\r\n pointer-events: none;\r\n}\r\n\r\n:host(.primary){\r\n --background-color: var(--dnn-color-primary, blue);\r\n --color: var(--dnn-color-primary-contrast, white);\r\n --focus-color: var(--background-color);\r\n}\r\n\r\n:host(.primary.reversed){\r\n --background-color: var(--dnn-color-primary-contrast, white);\r\n --color: var(--dnn-color-primary, blue);\r\n --border-color: var(--dnn-color-primary, blue);\r\n --focus-color: var(--color);\r\n}\r\n\r\n:host(.secondary){\r\n --background-color: var(--dnn-color-secondary, green);\r\n --color: var(--dnn-color-secondary-contrast, white);\r\n --focus-color: var(--background-color);\r\n}\r\n\r\n:host(.secondary.reversed){\r\n --background-color: var(--dnn-color-secondary-contrast, white);\r\n --color: var(--dnn-color-secondary, blue);\r\n --border-color: var(--dnn-color-secondary, blue);\r\n --focus-color: var(--color);\r\n}\r\n\r\n:host(.tertiary){\r\n --background-color: var(--dnn-color-tertiary, yellow);\r\n --color: var(--dnn-color-tertiary-contrast, black);\r\n --focus-color: var(--background-color);\r\n}\r\n\r\n:host(.tertiary.reversed){\r\n --background-color: var(--dnn-color-tertiary-contrast, white);\r\n --color: var(--dnn-color-tertiary, blue);\r\n --border-color: var(--dnn-color-tertiary, blue);\r\n --focus-color: var(--color);\r\n}\r\n\r\n:host(.hydrated){\r\n button{\r\n border: var(--border-size) solid var(--border-color);\r\n border-radius: var(--border-radius);\r\n padding: var(--padding) calc(var(--padding) * 2);\r\n background-color: transparent;\r\n background-color: var(--background-color);\r\n color: var(--color);\r\n outline: none;\r\n &:focus, &:hover{\r\n box-shadow: 0 0 2px 2px var(--focus-color);\r\n }\r\n }\r\n}\r\n\r\n:host(:disabled, [disabled]){\r\n button{\r\n pointer-events: none;\r\n opacity: 0.5;\r\n }\r\n}\r\n\r\n:host(.small){\r\n button{\r\n padding: calc(var(--padding) / 2) var(--padding);\r\n font-size: 0.7em;\r\n }\r\n}\r\n\r\n:host(.large){\r\n button{\r\n padding: calc(var(--padding) * 1.5) calc(var(--padding) * 3);\r\n font-size: 1.2em;\r\n }\r\n}\r\n\r\nbutton{\r\n height: 100%;\r\n width: 100%;\r\n cursor: pointer;\r\n}","import { Component, Element, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\r\n\r\n/**\r\n * @slot Content of the button\r\n */\r\n@Component({\r\n tag: 'dnn-button',\r\n styleUrl: 'dnn-button.scss',\r\n shadow: true\r\n})\r\nexport class DnnButton {\r\n\r\n /**\r\n * Optional button style,\r\n * can be either primary, secondary or tertiary and defaults to primary if not specified\r\n */\r\n @Prop() type: 'primary' | 'secondary' | 'tertiary' = 'primary';\r\n\r\n /**\r\n * Optionally reverses the button style.\r\n */\r\n @Prop() reversed: boolean = false;\r\n\r\n /**\r\n * Optionally sets the button size, small normal or large, defaults to normal\r\n */\r\n @Prop() size?: 'small' | 'normal' | 'large' = 'normal';\r\n\r\n /**\r\n * Optionally add a confirmation dialog before firing the action.\r\n */\r\n @Prop() confirm?: boolean = false;\r\n\r\n /**\r\n * The text of the yes button for confirmation.\r\n */\r\n @Prop() confirmYesText?: string = \"Yes\";\r\n\r\n /**\r\n * The text of the no button for confirmation.\r\n */\r\n @Prop() confirmNoText?: string = \"No\";\r\n\r\n /**\r\n * The text of the confirmation message;\r\n */\r\n @Prop() confirmMessage?: string = \"Are you sure ?\";\r\n \r\n /**\r\n * Disables the button\r\n */\r\n @Prop() disabled: boolean = false;\r\n\r\n @State() modalVisible: boolean = false;\r\n\r\n @Element() el!: HTMLDnnButtonElement;\r\n\r\n private modal!: HTMLDnnModalElement;\r\n\r\n /** \r\n * Fires when confirm is true and the user confirms the action.\r\n */\r\n @Event({\r\n eventName: 'confirmed',\r\n bubbles: false,\r\n cancelable: true,\r\n composed: true\r\n }) confirmed: EventEmitter;\r\n\r\n /**\r\n * Fires when confirm is true and the user cancels the action.\r\n */\r\n @Event({bubbles: false}) canceled: EventEmitter;\r\n\r\n componentDidLoad(){\r\n this.el.classList.add(this.type);\r\n \r\n if (this.reversed){\r\n this.el.classList.add('reversed');\r\n }\r\n\r\n if (this.size !== 'normal'){\r\n this.el.classList.add(this.size);\r\n }\r\n\r\n this.modal = this.el.shadowRoot.querySelector('dnn-modal');\r\n }\r\n\r\n private handleConfirm(){\r\n this.modal.hide();\r\n this.modalVisible = false;\r\n this.confirmed.emit();\r\n }\r\n\r\n private handleCancel(){\r\n this.modal.hide();\r\n this.modalVisible = false;\r\n this.canceled.emit();\r\n }\r\n \r\n private handleClick(): void {\r\n if (this.confirm && !this.modalVisible){\r\n this.modal.show();\r\n this.modalVisible = true;\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host disabled={this.disabled} style={{'pointer-events': this.disabled ? 'none' : 'all'}}>\r\n <button class=\"button\" onClick={() => this.handleClick()} disabled={this.disabled}>\r\n <slot></slot>\r\n </button>\r\n {this.confirm &&\r\n <dnn-modal showCloseButton={false} backdropDismiss={false}>\r\n <p>{this.confirmMessage}</p>\r\n <div style={\r\n {\r\n display: 'flex',\r\n justifyContent: 'flex-end'\r\n }\r\n }>\r\n <dnn-button type='primary' style={{margin: '5px'}} onClick={() => this.handleConfirm()}>{this.confirmYesText}</dnn-button>\r\n <dnn-button type='secondary' style={{margin: '5px'}} onClick={() => this.handleCancel()}>{this.confirmNoText}</dnn-button>\r\n </div>\r\n </dnn-modal>\r\n }\r\n </Host>\r\n );\r\n }\r\n \r\n\r\n}\r\n",":host {\r\n /**\r\n * @prop --focus-color: The color to outline the checkbox when hovered or focused, default to the dnn primary color.\r\n */\r\n --focus-color: var(--dnn-color-primary, #3792ED);\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.25rem;\r\n margin: 3px;\r\n}\r\nbutton{\r\n background-color: transparent;\r\n border: 0;\r\n padding: 0;\r\n margin: 0;\r\n outline: none;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n svg.undefined{\r\n opacity: 0.45;\r\n }\r\n &:focus{\r\n box-shadow: 0 0 2px 2px var(--focus-color);\r\n }\r\n}","import { Component, Element, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-checkbox',\r\n styleUrl: 'dnn-checkbox.scss',\r\n shadow: true,\r\n})\r\nexport class DnnCheckbox {\r\n @Element() el: HTMLDnnCheckboxElement;\r\n\r\n /** Defines if the checkbox is checked (true) or unchecked (false) or in an intermediate state (undefined) */\r\n @Prop({mutable: true}) checked: boolean | undefined = false;\r\n\r\n /** Defines if clicking the checkbox will go through the intermediate state between checked and unchecked (tri-state) */\r\n @Prop() useIntermediate: boolean = false;\r\n\r\n /** The value for this checkbox (not to be confused with its checked state). */\r\n @Prop() value: string;\r\n\r\n /** Fires up when the checkbox checked property changes. */\r\n @Event() checkedchange: EventEmitter<boolean | undefined>;\r\n \r\n private button: HTMLButtonElement;\r\n\r\n private changeState(): void {\r\n if (!this.useIntermediate){\r\n this.checked = !this.checked;\r\n this.emitEvents();\r\n return;\r\n }\r\n if (this.checked === true){\r\n this.checked = false;\r\n this.button.classList.remove(\"undefined\");\r\n this.emitEvents();\r\n return;\r\n }\r\n if (this.checked === undefined){\r\n this.checked = true;\r\n this.button.classList.remove(\"undefined\");\r\n this.emitEvents();\r\n return;\r\n }\r\n if (this.checked === false){\r\n this.checked = undefined;\r\n this.button.classList.add(\"undefined\");\r\n this.emitEvents();\r\n return;\r\n }\r\n }\r\n\r\n private emitEvents() {\r\n this.checkedchange.emit(this.checked);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <button class=\"icon\" onClick={() => this.changeState()} ref={el => this.button = el}>\r\n {this.checked === false &&\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"/></svg>\r\n }\r\n {this.checked === true &&\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>\r\n }\r\n {this.checked === undefined &&\r\n <svg class=\"undefined\" xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/></g><g><g><g><path d=\"M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M17,13H7v-2h10V13z\"/></g></g></g></svg>\r\n }\r\n </button>\r\n <label htmlFor={this.el.id} onClick={() => this.changeState()}><slot></slot></label>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: inline-block;\r\n}\r\nbutton{\r\n border: none;\r\n padding: 0px;\r\n margin: 0px;\r\n min-width: 15px;\r\n min-height: 15px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: transparent;\r\n outline: none;\r\n}\r\nsvg{\r\n height:2em;\r\n width:2em;\r\n transition: all 300ms ease-in-out;\r\n}\r\n\r\n// FOCUS\r\nbutton:focus, button:hover{\r\n svg{\r\n color: var(--dnn-color-primary);\r\n }\r\n}\r\n\r\n// EXPANDED\r\n:host([expanded]){\r\n svg{\r\n transform: rotate(90deg);\r\n }\r\n}","import { Component, Host, h, Prop, Event } from '@stencil/core';\r\nimport { EventEmitter } from '@stencil/core';\r\nimport { Watch } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-chevron',\r\n styleUrl: 'dnn-chevron.scss',\r\n shadow: true\r\n})\r\nexport class DnnChevron {\r\n\r\n /** Expand text for screen readers */\r\n @Prop() expandText?: string = \"expand\";\r\n\r\n /** Collapse text for screen readers */\r\n @Prop() collapseText?: string = \"collapse\";\r\n\r\n /** Is the chevron expanded */\r\n @Prop({mutable: true, reflect: true}) expanded?: boolean = false;\r\n\r\n /** Fires up when the expanded status changes */\r\n @Event() changed: EventEmitter;\r\n\r\n @Watch('expanded')\r\n handleExpandedChanged(newValue: boolean) {\r\n this.changed.emit(newValue);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <button aria-label={this.expanded ? this.collapseText : this.expandText}\r\n onClick={() => this.expanded = !this.expanded}\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>\r\n </button>\r\n </Host>\r\n );\r\n }\r\n\r\n}\r\n",":host {\r\n display: block;\r\n}\r\n#container{\r\n max-height:0;\r\n overflow: hidden;\r\n transition: max-height 300ms ease-in-out;\r\n}","import { Component, Host, h, Prop, Element, Event, EventEmitter, Watch, Listen, Method } from '@stencil/core';\r\n\r\n@Component({\r\n tag: \"dnn-collapsible\",\r\n styleUrl: \"dnn-collapsible.scss\",\r\n shadow: true\r\n})\r\nexport class DnnCollapsible {\r\n\r\n @Element() el: HTMLDnnCollapsibleElement;\r\n\r\n /** Defines if the panel is expanded or not. */\r\n @Prop({reflect: true}) expanded: boolean = false;\r\n\r\n /** Defines the transition time in ms, defaults to 100ms */\r\n @Prop() transitionDuration?: number = 150;\r\n\r\n /** Fires whenever the collapsible height has changed */\r\n @Event({bubbles: true, composed: true}) dnnCollapsibleHeightChanged: EventEmitter<void>;\r\n\r\n @Listen(\"dnnCollapsibleHeightChanged\")\r\n handleHeightChanged(){\r\n requestAnimationFrame(() => {\r\n this.updateSize();\r\n })\r\n }\r\n\r\n /**\r\n * Updates the component height, use to update after a slot content changes.\r\n */\r\n @Method()\r\n async updateSize() {\r\n if (this.expanded){\r\n requestAnimationFrame(() => {\r\n this.container.style.maxHeight = `${this.container.scrollHeight}px`;\r\n });\r\n setTimeout(() => {\r\n this.container.style.maxHeight = \"none\";\r\n }, this.transitionDuration);\r\n }\r\n }\r\n \r\n @Watch(\"expanded\")\r\n handledExpandedChanged(expanded: boolean){\r\n if (expanded){\r\n this.updateSize();\r\n }\r\n else{\r\n requestAnimationFrame(() => {\r\n this.container.style.maxHeight = `${this.container.scrollHeight}px`;\r\n requestAnimationFrame(() => {\r\n this.container.style.maxHeight = \"0px\";\r\n });\r\n });\r\n }\r\n setTimeout(() => {\r\n requestAnimationFrame(() => {\r\n this.dnnCollapsibleHeightChanged.emit();\r\n });\r\n }, this.transitionDuration);\r\n }\r\n \r\n private container: HTMLDivElement;\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div id=\"container\" class={this.expanded && \"expanded\"} ref={el => this.container = el}>\r\n <slot></slot>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n\r\n}\r\n","/** Color utility class with hsl and rgb converters\r\n * based on math at https://en.wikipedia.org/wiki/HSL_and_HSV\r\n * @copyright Copyright (c) .NET Foundation. All rights reserved.\r\n * @license MIT \r\n */\r\n\r\nexport class ColorInfo{\r\n\r\n private _hue: number = 0;\r\n /** gets the color hue\r\n * @returns a number between 0 and 359, could contain decimals\r\n */\r\n get hue() { return this._hue; }\r\n set hue(value: number){\r\n if (value < 0) { value = 0; }\r\n if (value > 359) { value = 359; }\r\n this._hue = value;\r\n }\r\n\r\n private _saturation: number = 0;\r\n /** gets the color saturation\r\n * @returns a number between 0 and 1, could contain decimals\r\n */\r\n get saturation() { return this._saturation; }\r\n set saturation(value: number) {\r\n if (value < 0) { value = 0; }\r\n if (value > 1) { value = 1; }\r\n this._saturation = value;\r\n }\r\n\r\n private _lightness: number = 0;\r\n /** gets the color lightness\r\n * @returns a number between 0 and 1, could contain decimals\r\n */\r\n get lightness() { return this._lightness; }\r\n set lightness(value: number) {\r\n if (value < 0) { value = 0; }\r\n if (value > 1) { value = 1; }\r\n this._lightness = value;\r\n }\r\n\r\n /** gets or sets the red component \r\n * @returns an integer between 0 and 255\r\n */\r\n get red() {\r\n return this.getRGB().red;\r\n }\r\n set red(value) {\r\n this.setHSL(value, this.green, this.blue);\r\n }\r\n\r\n /** gets or sets the green component\r\n * @returns an integer between 0 and 255\r\n */\r\n get green() {\r\n return this.getRGB().green;\r\n }\r\n set green(value: number) {\r\n this.setHSL(this.red, value, this.blue);\r\n }\r\n\r\n /** gets or sets the blue component\r\n * @returns an integer between 0 and 255\r\n */\r\n get blue() {\r\n return this.getRGB().blue;\r\n }\r\n set blue(value: number) {\r\n this.setHSL(this.red, this.green, value);\r\n }\r\n\r\n /** gets or sets the hex color value, expresses as 6 hexadecimal characters.\r\n * @returns hex representation of the color\r\n */\r\n get hex() {\r\n var r = this.getHex(this.red);\r\n var g = this.getHex(this.green);\r\n var b = this.getHex(this.blue);\r\n return r + g + b;\r\n }\r\n set hex(value: string){\r\n this.red = parseInt(value.substr(0,2));\r\n this.green = parseInt(value.substr(2,2));\r\n this.blue = parseInt(value.substr(4,2));\r\n }\r\n\r\n /** gets white or black color that is a good oposite to the current color\r\n * @returns - \"000000\" or \"FFFFFF\"\r\n */\r\n get contrastColor() {\r\n const brightness = (this.red*299 + this.green*587 + this.blue*114) / 1000\r\n if (brightness > 127){\r\n return \"000000\";\r\n }\r\n return \"FFFFFF\";\r\n }\r\n\r\n private getRGB() {\r\n const chroma = (1 - Math.abs((2 * this._lightness) - 1)) * this.saturation;\r\n // find the quandrant of the hue\r\n const quadrant = this._hue / 60;\r\n // calculate the offset from the quandrant center\r\n const offset = chroma * (1 - Math.abs(quadrant % 2 - 1));\r\n\r\n // Apply the chroma to the primary component and the offset to the 2nd most important component\r\n let r = 0, g = 0, b = 0;\r\n if (0 <= quadrant && quadrant <= 1) {\r\n r = chroma; g = offset; // red to yellow\r\n } else if (1 <= quadrant && quadrant <= 2) {\r\n g = chroma; r = offset; // yellow to green\r\n } else if (2 <= quadrant && quadrant <= 3) {\r\n g = chroma; b = offset; // green to cyan\r\n } else if (3 <= quadrant && quadrant <= 4) {\r\n b = chroma; g = offset; // cyan to blue\r\n } else if (4 <= quadrant && quadrant <= 5) {\r\n b = chroma; r = offset; // blue to magenta\r\n } else if (5 <= quadrant && quadrant <= 6) {\r\n r = chroma; b = offset; // magenta to red\r\n }\r\n // calculate the bias to add to all channels to match the lightness\r\n const bias = this._lightness - (chroma / 2);\r\n\r\n return {\r\n red: Math.round((r + bias) * 255),\r\n green: Math.round((g + bias) * 255),\r\n blue: Math.round((b + bias) * 255)\r\n }\r\n }\r\n\r\n private setHSL(red: number, green: number, blue: number) {\r\n // GENERAL DATA\r\n // all math is based on values from 0 to 1\r\n const r = red/255, g = green/255, b = blue/255;\r\n // we need to max, min and the difference between them to derive hsl\r\n const min = Math.min(r, g, b);\r\n const max = Math.max(r, g, b);\r\n const diff = max - min;\r\n let h = 0, s = 0, l = 0;\r\n\r\n // HUE\r\n if (diff === 0) { // neutral\r\n h = 0;\r\n } else if (max === r) { // red (magenta to yellow range)\r\n h = 60 * ((g - b) / diff);\r\n } else if (max === g) { // green (yellow to cyan range)\r\n h = 60 * (2 + ((b - r) / diff));\r\n } else if (max === b) { // blue (cyan to magenta range)\r\n h = 60 * (4 + ((r - g) / diff));\r\n }\r\n if (h < 0) { h = h + 360} // ensures positive hues only\r\n if (h > 359) { h = 359} // ensures we never return 360 for simplicity since it is the same as 0\r\n\r\n // LIGHTNESS\r\n l = (max + min) / 2;\r\n\r\n // SATURATION\r\n if (max === 0 || min === 1) { // pure black or white have no saturation\r\n s = 0;\r\n } else {\r\n s = (max - l) / (Math.min(l, 1 - l));\r\n }\r\n\r\n this._hue = h;\r\n this._saturation = s;\r\n this._lightness = l;\r\n }\r\n\r\n private getHex(value: number){\r\n var hex = value.toString(16);\r\n if (hex.length < 2){\r\n hex = \"0\" + hex;\r\n }\r\n return hex;\r\n }\r\n} ",".dnn-color-picker{\r\n padding: 15px;\r\n max-width: 400px;\r\n .dnn-color-sliders{\r\n display:flex;\r\n flex-direction: column;\r\n min-width: 200px;\r\n .dnn-color-s-b{\r\n border: 1px solid #ccc;\r\n padding-bottom: var(--color-box-height, 50%);\r\n position: relative;\r\n background-color: red;\r\n &:before{\r\n content: '';\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n width: 100%;\r\n height:100%;\r\n z-index:1;\r\n background: linear-gradient(to right, white, red);\r\n mix-blend-mode: saturation;\r\n }\r\n &:after{\r\n content: '';\r\n position: absolute;\r\n top:0;\r\n left:0;\r\n width: 100%;\r\n height:100%;\r\n z-index:2;\r\n background: linear-gradient(to bottom, white, black);\r\n mix-blend-mode: luminosity;\r\n }\r\n button{\r\n position: absolute;\r\n bottom: calc(50% - 4px);\r\n left: calc(50% - 4px);\r\n width: 8px;\r\n height: 8px;\r\n z-index: 3;\r\n display: block;\r\n background: none;\r\n border: none;\r\n margin-left: -4px;\r\n margin-bottom: -4px;\r\n padding: 7px;\r\n background-color: #fff;\r\n border-radius: 50%;\r\n &:before{\r\n content:'';\r\n position: absolute;\r\n top: -1px;\r\n left: -1px;\r\n border-radius: 50%;\r\n }\r\n &:after{\r\n content:'';\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n border-radius: 50%;\r\n width: 10px;\r\n height: 10px;\r\n border: 2px solid #ccc;\r\n }\r\n } \r\n }\r\n .dnn-color-bar {\r\n display: flex;\r\n align-items: center;\r\n margin-top: 15px;\r\n .dnn-color-result {\r\n flex-direction: column;\r\n width: 50px;\r\n height: 50px;\r\n border-radius: 50%;\r\n background: red;\r\n }\r\n .dnn-color-hue{\r\n flex: auto;\r\n margin-left: 10px;\r\n height: 16px;\r\n border: 1px solid #ccc;\r\n position: relative;\r\n background: linear-gradient(\r\n to right, \r\n #f00 0, \r\n #ff0 17%,\r\n #0f0 33%,\r\n #0ff 50%,\r\n #00f 67%,\r\n #f0f 84%,\r\n #f00 100%\r\n );\r\n button{\r\n width: 10px;\r\n height: 20px;\r\n position: absolute;\r\n top: -2px;\r\n left: calc(50% - 4px);\r\n border: 0;\r\n padding: 0;\r\n background-color: transparent;\r\n padding-left: -8px;\r\n &:before{\r\n content:'';\r\n position: absolute;\r\n top: -2px;\r\n left: 0px;\r\n border-radius: 3px;\r\n width: 100%;\r\n height: 100%;\r\n border: 1px solid #ccc;\r\n background-color: #fff;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n .dnn-color-fields{\r\n display:flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n .dnn-color-mode-switch {\r\n display: flex;\r\n align-items: flex-end;\r\n padding: .5em;\r\n button {\r\n background-color: transparent;\r\n border: none;\r\n svg {\r\n width: 3em;\r\n height: 3em;\r\n pointer-events: none;\r\n outline: none;\r\n }\r\n }\r\n }\r\n .dnn-rgb-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-rgb-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n input{\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.5em;\r\n padding-left: 1.3em;\r\n text-align: center;\r\n &.red{\r\n border-color: red;\r\n }\r\n &.green{\r\n border-color: green; \r\n }\r\n &.blue{\r\n border-color: blue;\r\n } \r\n }\r\n }\r\n }\r\n .dnn-hsl-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-hsl-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n input{\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.5em;\r\n padding-left: 1.3em;\r\n text-align: center;\r\n }\r\n }\r\n }\r\n .dnn-hex-color-fields {\r\n display: flex;\r\n justify-content: space-evenly;\r\n .dnn-hex-color-field {\r\n display: flex;\r\n flex-direction: column;\r\n flex: auto;\r\n text-align: center;\r\n padding: .5em;\r\n label {\r\n padding-bottom: .25em;\r\n }\r\n .hex-input{\r\n position: relative;\r\n border-radius: var(--dnn-button-radius, 3px);\r\n border: 1px solid #ccc;\r\n padding: 0.323em;\r\n text-align: center;\r\n input{\r\n border:0;\r\n padding:0;\r\n margin:0;\r\n width:100%;\r\n height:100%;\r\n text-align:center;\r\n }\r\n button{\r\n position: absolute;\r\n height: 100%;\r\n top: 0;\r\n right: 1em;\r\n background-color: transparent;\r\n border:0;\r\n padding:0;\r\n margin:0;\r\n svg{\r\n min-width: 1em;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n} ","/** Reusable DNN UI component to pick a color\r\n * @copyright Copyright (c) .NET Foundation. All rights reserved.\r\n * @license MIT \r\n */\r\n\r\nimport { Component, h, State, Element, Prop, EventEmitter, Event, Watch } from \"@stencil/core\";\r\nimport { ColorInfo } from '../../utilities/colorInfo';\r\nimport { Debounce } from \"../../utilities/debounce\";\r\n\r\n/** Color Picker for Dnn */\r\n@Component({\r\n tag: 'dnn-color-picker',\r\n styleUrl: 'dnn-color-picker.scss',\r\n shadow: true\r\n})\r\nexport class DnnColorPicker {\r\n\r\n @Element() el: HTMLDnnColorPickerElement;\r\n\r\n /** Sets the initial color, must be a valid 8 character hexadecimal string without the # sign. */\r\n @Prop() color: string = \"FFFFFF\";\r\n\r\n /** Sets the width-height ratio of the color picker saturation-lightness box.\r\n * @example 100% renders a perfect square\r\n */\r\n @Prop() colorBoxHeight: string = \"50%\";\r\n \r\n @State() currentColor: ColorInfo;\r\n @State() rgbDisplay: string = \"flex\";\r\n @State() hslDisplay: string = \"none\";\r\n @State() hexDisplay: string = \"none\";\r\n\r\n /** Fires up when the color is changed and emits a ColorInfo object\r\n * @see ../../utilities/colorInfo.ts\r\n */\r\n @Event() colorChanged: EventEmitter<ColorInfo>;\r\n\r\n @Debounce(100)\r\n private colorChangedHandler(color: ColorInfo) {\r\n this.colorChanged.emit(color);\r\n }\r\n\r\n @Watch(\"currentColor\")\r\n handeCurrentColorChanged(newValue: ColorInfo){\r\n this.colorChangedHandler(newValue);\r\n }\r\n \r\n private saturationLightnessBox?: HTMLDivElement;\r\n private hueRange?: HTMLDivElement;\r\n\r\n\r\n componentWillLoad() {\r\n this.handleHexChange(this.color);\r\n }\r\n\r\n componentDidLoad() {\r\n (this.el as unknown as HTMLElement).style.setProperty(\"--color-box-height\", this.colorBoxHeight.toString());\r\n }\r\n \r\n private getHex() {\r\n return this.getDoublet(this.currentColor.red) + this.getDoublet(this.currentColor.green) + this.getDoublet(this.currentColor.blue);\r\n }\r\n\r\n private getContrast() {\r\n return this.currentColor.contrastColor;\r\n }\r\n\r\n private getDoublet(value: number){\r\n const valueString = value.toString(16).toUpperCase();\r\n if (valueString.length === 1){\r\n return '0' + valueString;\r\n }\r\n return valueString;\r\n }\r\n\r\n private handleSaturationLightnessMouseDown = (e) => {\r\n e.preventDefault();\r\n this.handleDragLightnessSaturation(e);\r\n window.addEventListener('mousemove', this.handleDragLightnessSaturation);\r\n window.addEventListener('mouseup', this.handleSaturationLightnessMouseUp);\r\n }\r\n\r\n private handleDragLightnessSaturation = (e) => {\r\n const rect = this.saturationLightnessBox.getBoundingClientRect(); \r\n\r\n let x = e.clientX - rect.left; \r\n if (x < 0) { x = 0}\r\n if (x > rect.width) { x = rect.width}\r\n x = x/rect.width;\r\n\r\n let y = e.clientY - rect.top;\r\n if (y < 0) { y = 0}\r\n if (y > rect.height) { y = rect.height}\r\n y = 1 - (y/rect.height);\r\n\r\n const newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = x;\r\n newColor.lightness = y;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleSaturationLightnessMouseUp = () => {\r\n window.removeEventListener('mousemove', this.handleDragLightnessSaturation);\r\n window.removeEventListener('mouseup', this.handleSaturationLightnessMouseUp);\r\n }\r\n\r\n private handleHueMouseDown = (e) => {\r\n e.preventDefault();\r\n this.handleDragHue(e);\r\n window.addEventListener('mousemove', this.handleDragHue);\r\n window.addEventListener('mouseup', this.handleHueMouseUp); \r\n }\r\n\r\n private handleHueMouseUp = () => {\r\n window.removeEventListener('mousemove', this.handleDragHue);\r\n window.removeEventListener('mouseup', this.handleHueMouseUp); \r\n }\r\n\r\n private handleDragHue = (e) => {\r\n const rect = this.hueRange.getBoundingClientRect(); \r\n\r\n let x = e.clientX - rect.left;\r\n if (x < 0) { x = 0}\r\n if (x > rect.width) { x = rect.width}\r\n x = x/rect.width*360; \r\n\r\n const newColor = new ColorInfo();\r\n newColor.hue = x;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleComponentValueChange = (e, channel) => {\r\n let value = parseInt(e.target.value);\r\n if (isNaN(value)) { return }\r\n const newColor = new ColorInfo();\r\n if (value < 0) { value = 0; }\r\n if (value > 255) { value = 255; }\r\n let r = this.currentColor.red;\r\n let g = this.currentColor.green;\r\n let b = this.currentColor.blue;\r\n switch (channel) {\r\n case 'red':\r\n r = value;\r\n break;\r\n case 'green':\r\n g = value;\r\n break;\r\n case 'blue':\r\n b = value;\r\n break;\r\n default:\r\n break;\r\n }\r\n newColor.green = g;\r\n newColor.red = r;\r\n newColor.blue = b;\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleHSLChange = (e, component) => { \r\n let value = parseInt(e.target.value);\r\n if (isNaN(value)) {return}\r\n const newColor = new ColorInfo();\r\n if (value != null) { \r\n let h = this.currentColor.hue;\r\n let s = this.currentColor.saturation;\r\n let l = this.currentColor.lightness;\r\n switch (component) {\r\n case \"hue\":\r\n if (value < 0) { value = 0}\r\n if (value > 359) { value = 0}\r\n h = value;\r\n break;\r\n case \"saturation\":\r\n if (value < 0) { value = 0}\r\n if (value > 100) { value = 100}\r\n s = value / 100;\r\n break;\r\n case \"lightness\":\r\n if (value < 0) { value = 0}\r\n if (value > 100) { value = 100}\r\n l = value / 100;\r\n break; \r\n default:\r\n break; \r\n }\r\n newColor.hue = h;\r\n newColor.saturation = s;\r\n newColor.lightness = l;\r\n this.currentColor = newColor;\r\n }\r\n }\r\n\r\n private handleHexChange(value: string){\r\n const newColor = new ColorInfo();\r\n if (value.match(/^(?:[\\da-f]{3}|[\\da-f]{6})$/i).length > 0) {\r\n if (value.length === 3){\r\n let expanded = value[0] + value[0] + value[1] + value[1] + value[2] + value [2];\r\n value = expanded;\r\n }\r\n newColor.red = parseInt(value.substr(0,2), 16);\r\n newColor.green = parseInt(value.substr(2,2), 16);\r\n newColor.blue = parseInt(value.substr(4,2), 16);\r\n }\r\n else{\r\n newColor.red = this.currentColor.red;\r\n newColor.green = this.currentColor.green;\r\n newColor.blue = this.currentColor.blue;\r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n private switchColorMode(e) {\r\n switch(e.target.id) {\r\n case \"rgb-switch\":\r\n this.rgbDisplay = \"none\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"flex\";\r\n break;\r\n case \"hex-switch\":\r\n this.rgbDisplay = \"none\";\r\n this.hslDisplay = \"flex\";\r\n this.hexDisplay = \"none\";\r\n break;\r\n case \"hsl-switch\":\r\n this.rgbDisplay = \"flex\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"none\";\r\n break;\r\n default:\r\n this.rgbDisplay = \"flex\";\r\n this.hslDisplay = \"none\";\r\n this.hexDisplay = \"none\";\r\n }\r\n }\r\n\r\n private handleSaturationLightnessKeyDown = (e) => { \r\n let newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n\r\n let value = 0.01;\r\n if (e.shiftKey) { value = 0.1 ;}\r\n\r\n switch (e.key) {\r\n case \"ArrowUp\":\r\n newColor.lightness += value;\r\n break;\r\n case \"ArrowDown\":\r\n newColor.lightness -= value;\r\n break;\r\n case \"ArrowLeft\":\r\n newColor.saturation -= value;\r\n break;\r\n case \"ArrowRight\":\r\n newColor.saturation += value;\r\n default:\r\n break; \r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n private handleHueKeyDown = (e) => {\r\n let newColor = new ColorInfo();\r\n newColor.hue = this.currentColor.hue;\r\n newColor.saturation = this.currentColor.saturation;\r\n newColor.lightness = this.currentColor.lightness;\r\n\r\n let value = 1;\r\n if (e.shiftKey) { value = 10}\r\n\r\n switch (e.key) {\r\n case \"ArrowLeft\":\r\n newColor.hue -= value;\r\n break;\r\n case \"ArrowRight\":\r\n newColor.hue += value;\r\n default:\r\n break;\r\n }\r\n this.currentColor = newColor;\r\n }\r\n\r\n render() {\r\n const hue = this.currentColor.hue;\r\n const saturation = this.currentColor.saturation;\r\n const lightness = this.currentColor.lightness;\r\n const red = this.currentColor.red;\r\n const green = this.currentColor.green;\r\n const blue = this.currentColor.blue;\r\n\r\n return (\r\n <div class=\"dnn-color-picker\">\r\n <div class=\"dnn-color-sliders\">\r\n <div class=\"dnn-color-s-b\" ref={(element) => this.saturationLightnessBox = element as HTMLDivElement}\r\n style={{backgroundColor: `hsl(${hue},100%,50%)`}}\r\n onMouseDown={this.handleSaturationLightnessMouseDown.bind(this)}\r\n >\r\n <button class=\"dnn-s-b-picker\"\r\n aria-label=\"Press up or down to adjust lightness, left or right to adjust saturation, hold shift to move by 10%\"\r\n role=\"slider\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"100\"\r\n aria-valuetext={`Saturation: ${Math.round(this.currentColor.saturation*100)}%, Lightness: ${Math.round(this.currentColor.lightness*100)}%`}\r\n style={{\r\n left: Math.round(saturation * 100) + \"%\",\r\n bottom: Math.round(lightness * 100) + \"%\"\r\n }}\r\n onKeyDown={(e) => this.handleSaturationLightnessKeyDown(e)}\r\n />\r\n </div>\r\n <div class=\"dnn-color-bar\">\r\n <div class=\"dnn-color-result\" style={{\r\n backgroundColor: '#' + this.getHex(),\r\n boxShadow: \"0 0 2px 1px \" + \"#\" + this.getContrast()\r\n }} \r\n />\r\n <div class=\"dnn-color-hue\"\r\n ref={(element) => this.hueRange = element as HTMLDivElement}\r\n onMouseDown={this.handleHueMouseDown.bind(this)}\r\n >\r\n <button class=\"dnn-hue-picker\"\r\n aria-label=\"Press left or right to adjust hue, hold shift to move by 10 degrees\"\r\n role=\"slider\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"359\"\r\n aria-valuenow={Math.round(hue)}\r\n style={{left: (hue/359*100).toString() + \"%\"}}\r\n onKeyDown={(e) => this.handleHueKeyDown(e)}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"dnn-color-fields\">\r\n <div class=\"dnn-rgb-color-fields\" style={{display: this.rgbDisplay}}>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>R</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" step=\"1\" class=\"red\" value={red} aria-label=\"red value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'red')}\r\n />\r\n </div>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>G</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" class=\"green\" value={green} aria-label=\"green value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'green')}\r\n />\r\n </div>\r\n <div class=\"dnn-rgb-color-field\">\r\n <label>B</label>\r\n <input type=\"number\" min=\"0\" max=\"255\" class=\"blue\" value={blue} aria-label=\"blue value\"\r\n onChange={(e) => this.handleComponentValueChange(e, 'blue')}\r\n />\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"rgb-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"switch to hexadecimal value entry\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-hsl-color-fields\" style={{display: this.hslDisplay}}>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>H</label>\r\n <input type=\"number\" min=\"0\" max=\"359\" step={1} value={Math.round(hue)} aria-label=\"Hue\"\r\n onChange={(e) => this.handleHSLChange(e, 'hue')}\r\n />\r\n </div>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>S</label>\r\n <input type=\"number\" min=\"0\" max=\"100\" step={1} value={Math.round(saturation*100)} aria-label=\"Saturation\"\r\n onChange={(e) => this.handleHSLChange(e, 'saturation')}\r\n />\r\n </div>\r\n <div class=\"dnn-hsl-color-field\">\r\n <label>L</label>\r\n <input type=\"number\" min=\"0\" max=\"100\" step={1} value={Math.round(lightness*100)} aria-label=\"Lightness\"\r\n onChange={(e) => this.handleHSLChange(e, 'lightness')}\r\n />\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"hsl-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"Switch to red, green, blue entry mode\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-hex-color-fields\" style={{display: this.hexDisplay}}>\r\n <div class=\"dnn-hex-color-field\">\r\n <label>HEX</label>\r\n <div class=\"hex-input\">\r\n <input type=\"text\" aria-label=\"Hexadecimal value\"\r\n value={this.getHex()}\r\n onChange={e => this.handleHexChange((e.target as HTMLInputElement).value)}\r\n />\r\n <button\r\n class=\"copy\"\r\n aria-label=\"copy value\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"dnn-color-mode-switch\">\r\n <button\r\n id=\"hex-switch\"\r\n onClick={this.switchColorMode.bind(this)}\r\n aria-label=\"Switch to hue saturation lightness values\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z\"/></svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}","\r\n:host {\r\n /** \r\n * @prop --border-color: The color of the border.\r\n * @prop --border-radius: The radius of the controls borders.\r\n * @prop --drop-background-color: The color of the background when a file is dropping.\r\n */\r\n --border-color: var(--dnn-color-tertiary-contrast, lightgray);\r\n --border-radius: var(--dnn-controls-radius, 5px);\r\n --drop-background-color: var(--dnn-color-tertiary, lightblue);\r\n\r\n display: flex;\r\n flex-direction: column;\r\n gap: 1rem;\r\n text-align: center;\r\n border: 2px dashed var(--border-color);\r\n border-radius: var(--border-radius);\r\n padding: 1rem;\r\n transition: all 300ms ease-in-out;\r\n}\r\n\r\n:host(.dropping){\r\n background-color: var(--drop-background-color);\r\n}\r\np{\r\n margin: 0;\r\n padding: 0;\r\n}\r\nbutton{\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n border: 0px;\r\n margin: 0;\r\n padding: 0;\r\n background-color: transparent;\r\n &:hover{\r\n cursor: pointer;\r\n }\r\n svg{\r\n margin-right: 0.5rem;\r\n }\r\n}\r\nlabel.upload-file{\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n cursor: pointer;\r\n input{\r\n display: none;\r\n }\r\n}\r\n.video-preview{\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n button{\r\n margin: 1rem;\r\n }\r\n}\r\n","import { Component, Host, h, Prop, State, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-dropzone',\r\n styleUrl: 'dnn-dropzone.scss',\r\n shadow: true,\r\n})\r\nexport class DnnDropzone {\r\n /** Localization strings */\r\n @Prop() resx:{\r\n dragAndDropFile: string;\r\n capture: string;\r\n or: string;\r\n takePicture: string;\r\n uploadFile: string;\r\n } = {\r\n dragAndDropFile: \"Drag and drop a file\",\r\n capture: \"Capture\",\r\n or: \"or\",\r\n takePicture: \"Take a picture\",\r\n uploadFile: \"Upload a file\",\r\n }\r\n\r\n /** A list of allowed file extensions.\r\n * If not specified, any file is allowed.\r\n * Ex: [\"jpg\", \"jped\", \"gif\", \"png\"]\r\n */\r\n @Prop() allowedExtensions: string[];\r\n\r\n /**\r\n * If true, will allow the user to take a snapshot\r\n * using the device camera. (only works over https).\r\n */\r\n @Prop() allowCameraMode: boolean = false;\r\n\r\n /**\r\n * Specifies the jpeg quality for when the device\r\n * camera is used to generate a picture.\r\n * Needs to be a number between 0 and 1 and defaults to 0.8\r\n */\r\n @Prop() captureQuality: number = 0.8;\r\n\r\n /** Fires when file were selected. */\r\n @Event() filesSelected: EventEmitter<File[]>;\r\n \r\n @State() canTakeSnapshots: boolean = false;\r\n\r\n @State() takingPicture: boolean = false;\r\n \r\n private dropzone: HTMLElement;\r\n private fileInput: HTMLInputElement;\r\n private videoPreview: HTMLVideoElement;\r\n private videoSettings!: MediaTrackSettings;\r\n\r\n\r\n componentDidLoad() {\r\n if (this.allowCameraMode){\r\n this.checkIfBrowserCanTakeSnapshots()\r\n .then(result => this.canTakeSnapshots = result);\r\n }\r\n if (this.allowedExtensions != undefined && this.allowedExtensions.length > 0){\r\n var extensionsWithDots = this.allowedExtensions.map(e => `.${e}`);\r\n var extensionsList = extensionsWithDots.join(\",\");\r\n this.fileInput.accept = extensionsList;\r\n }\r\n }\r\n\r\n private checkIfBrowserCanTakeSnapshots(): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n const mediaDevices = navigator.mediaDevices;\r\n if (mediaDevices == undefined || mediaDevices.enumerateDevices == undefined) {\r\n resolve(false);\r\n }\r\n mediaDevices.enumerateDevices()\r\n .then(devices => {\r\n var result = devices.some(device => device.kind == \"videoinput\");\r\n resolve(result);\r\n });\r\n });\r\n }\r\n\r\n private getFilesFromFileList(files: FileList) : File[] {\r\n var fileList: File[] = [];\r\n for (let index = 0; index < files.length; index++) {\r\n const file = files[index];\r\n fileList.push(file);\r\n }\r\n\r\n return fileList;\r\n }\r\n\r\n private handleUploadButton(element: HTMLInputElement): void {\r\n let files = this.getFilesFromFileList(element.files);\r\n\r\n this.filesSelected.emit(files);\r\n }\r\n\r\n private handleDragOver = (event: DragEvent) => \r\n {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n event.dataTransfer.dropEffect = \"copy\";\r\n this.dropzone.classList.add(\"dropping\");\r\n };\r\n\r\n private hasInvalidExtensions(files: FileList): boolean{\r\n var hasInvalid = false;\r\n for (let fileIndex = 0; fileIndex < files.length; fileIndex++) {\r\n const file = files[fileIndex];\r\n var regex = /(?:\\.([^.]+))?$/;\r\n const fileExtension = regex.exec(file.name)[1];\r\n if (fileExtension == undefined){\r\n hasInvalid = true;\r\n }\r\n\r\n if (this.allowedExtensions != undefined && !this.allowedExtensions.includes(fileExtension)){\r\n hasInvalid = true;\r\n }\r\n\r\n return hasInvalid;\r\n }\r\n }\r\n\r\n private handleDrop = (dropEvent: DragEvent) => {\r\n dropEvent.stopPropagation();\r\n dropEvent.preventDefault();\r\n const files = dropEvent.dataTransfer.files;\r\n\r\n if (this.hasInvalidExtensions(files)){\r\n return;\r\n }\r\n var fileList = this.getFilesFromFileList(files);\r\n this.filesSelected.emit(fileList);\r\n };\r\n\r\n private takeSnapshot(): void {\r\n this.takingPicture = true;\r\n navigator.mediaDevices.getUserMedia({video: true, audio: false})\r\n .then(stream => {\r\n stream\r\n this.videoPreview.srcObject = stream;\r\n this.videoPreview.play()\r\n .then(() => {\r\n this.videoSettings = stream.getVideoTracks()[0].getSettings();\r\n });\r\n })\r\n .catch(error => alert(error));\r\n }\r\n\r\n private applySnapshot(): void {\r\n var canvas = document.createElement(\"canvas\");\r\n const context = canvas.getContext(\"2d\");\r\n canvas.width = this.videoSettings.width;\r\n canvas.height = this.videoSettings.height;\r\n context.drawImage(this.videoPreview, 0, 0);\r\n canvas.toBlob(blob => {\r\n var file = new File([blob], \"image.jpeg\", {type:\"image/jpeg\"});\r\n this.takingPicture = false;\r\n \r\n var fileList = [file];\r\n this.filesSelected.emit(fileList)\r\n }, \"image/jpeg\", this.captureQuality);\r\n }\r\n \r\n render() {\r\n return (\r\n <Host\r\n ref={e => this.dropzone = e}\r\n class=\"dropzone\"\r\n onDragOver={this.handleDragOver}\r\n onDrop={this.handleDrop}\r\n onDragLeave={() => this.dropzone.classList.remove(\"dropping\")}\r\n >\r\n {!this.takingPicture &&\r\n [\r\n <p>{this.resx?.dragAndDropFile}</p>\r\n ,\r\n <p>- {this.resx?.or} -</p>\r\n ,\r\n <label class=\"upload-file\">\r\n <input\r\n type=\"file\"\r\n ref={el => this.fileInput = el}\r\n onChange={e => this.handleUploadButton(e.target as HTMLInputElement)}\r\n >\r\n </input>\r\n <span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/></g><g><path d=\"M5,20h14v-2H5V20z M5,10h4v6h6v-6h4l-7-7L5,10z\"/></g></svg>\r\n </span>\r\n \r\n {this.resx?.uploadFile}\r\n </label>\r\n ,\r\n this.canTakeSnapshots &&\r\n [\r\n <p>- {this.resx?.or} -</p>\r\n ,\r\n <button\r\n onClick={() => this.takeSnapshot()}\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"3.2\"/><path d=\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"/></svg>\r\n {this.resx?.takePicture}\r\n </button>\r\n ]\r\n ]\r\n }\r\n {this.takingPicture &&\r\n <div class=\"video-preview\">\r\n <video ref={e => this.videoPreview = e} />\r\n <button\r\n onClick={() => this.applySnapshot()}\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"3.2\"/><path d=\"M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\"/></svg> \r\n {this.resx?.capture}\r\n </button>\r\n </div>\r\n }\r\n </Host>\r\n );\r\n }\r\n\r\n}\r\n","export enum CornerType {\r\n \"nw\",\r\n \"ne\",\r\n \"se\",\r\n \"sw\",\r\n};","export function getMovementFromEvent(\r\n event: MouseEvent | TouchEvent,\r\n previousTouch: Touch\r\n) {\r\n let movementX = 0;\r\n let movementY = 0;\r\n if (event instanceof MouseEvent) {\r\n movementX = event.movementX;\r\n movementY = event.movementY;\r\n }\r\n if (typeof TouchEvent !== \"undefined\"){\r\n if (event instanceof TouchEvent) {\r\n let touch = event.touches[0];\r\n if (previousTouch != undefined) {\r\n movementX = touch.pageX - this.previousTouch.pageX;\r\n movementY = touch.pageY - this.previousTouch.pageY;\r\n }\r\n previousTouch = touch;\r\n }\r\n }\r\n return { movementX, movementY };\r\n }",":host {\r\n display: block;\r\n}\r\ncanvas {\r\n display: none;\r\n}\r\n.view{\r\n visibility: hidden;\r\n opacity: 0;\r\n height: 0;\r\n overflow: hidden;\r\n transition: all 300ms ease-in-out;\r\n &.visible{\r\n visibility: visible;\r\n opacity: 1;\r\n height: initial;\r\n overflow: visible;\r\n }\r\n .cropper{\r\n position: relative;\r\n width: 100%;\r\n img{\r\n width: 100%;\r\n display: block;\r\n margin: 0 auto;\r\n }\r\n .backdrop{\r\n backdrop-filter: saturate(0.5);\r\n backdrop-filter: brightness(0.5);\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n height: 100%;\r\n }\r\n .crop{\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n outline: 2px dashed white;\r\n box-shadow: black 0 0 0px 2px;\r\n backdrop-filter: saturate(2);\r\n backdrop-filter: brightness(2);\r\n cursor: move;\r\n >div{\r\n width: 20px;\r\n height: 20px;\r\n background-color: white;\r\n border: 2px solid rgba(0,0,0,0.5);\r\n position: absolute;\r\n &.nw, &.ne{\r\n top: -17px;\r\n }\r\n &.ne, &.se{\r\n right: -17px;\r\n }\r\n &.se, &.sw{\r\n bottom: -17px;\r\n }\r\n &.sw, &.nw{\r\n left: -17px;\r\n }\r\n &.nw, &.se{\r\n cursor: nwse-resize;\r\n }\r\n &.ne, &.sw{\r\n cursor: nesw-resize;\r\n }\r\n }\r\n }\r\n }\r\n}\r\ndnn-modal{\r\n --max-width: 512px;\r\n}","import { Component, Host, h, State, Prop, Event, EventEmitter } from '@stencil/core';\r\nimport { CornerType } from './CornerType';\r\nimport { getMovementFromEvent } from \"../../utilities/mouseUtilities\";\r\n\r\n/**\r\n * Allows cropping an image in-browser with the option to enforce a specific final size.\r\n * All computation happens in the browser and the final image is emmited\r\n * in an event that has a data-url of the image.\r\n */\r\n@Component({\r\n tag: 'dnn-image-cropper',\r\n styleUrl: 'dnn-image-cropper.scss',\r\n shadow: true,\r\n})\r\nexport class DnnImageCropper {\r\n /** Sets the desired final image width. */\r\n @Prop() width: number = 600;\r\n\r\n /** Sets the desired final image height. */\r\n @Prop() height: number = 600;\r\n\r\n /** Can be used to customize controls text.\r\n * Some values support tokens, see default values for examples.\r\n */\r\n @Prop() resx: {\r\n capture: string;\r\n dragAndDropFile: string;\r\n or: string;\r\n takePicture: string;\r\n uploadFile: string;\r\n imageTooSmall: string;\r\n modalCloseText: string;\r\n } = {\r\n capture: \"Capture\",\r\n dragAndDropFile: \"Drag and drop an image\",\r\n or: \"or\",\r\n takePicture: \"Take a picture\",\r\n uploadFile: \"Upload an image\",\r\n imageTooSmall: \"The image you are attempting to upload does not meet the minimum size requirement of {width} pixels by {height} pixels. Please upload a larger image.\",\r\n modalCloseText: \"Close\",\r\n }\r\n\r\n /** Sets the output quality of the corpped image (number between 0 and 1). */\r\n @Prop() quality: number = 0.8;\r\n\r\n /** When set to true, prevents cropping an image smaller than the required size, which would blow pixel and make the final picture look blurry. */\r\n @Prop() preventUndersized: boolean = false;\r\n\r\n /** When the image crop changes, emits the dataurl for the new cropped image. */\r\n @Event() imageCropChanged: EventEmitter<string>;\r\n\r\n @State() view: IComponentInterfaces[\"View\"];\r\n \r\n private host: HTMLElement;\r\n private hasPictureView: HTMLDivElement;\r\n private noPictureView: HTMLDivElement;\r\n private canvas: HTMLCanvasElement;\r\n private image: HTMLImageElement;\r\n private crop: HTMLDivElement;\r\n private previousTouch: Touch;\r\n private imageTooSmallModal!: HTMLDnnModalElement;\r\n\r\n componentDidLoad() {\r\n requestAnimationFrame(() => {\r\n this.setView(\"noPictureView\");\r\n })\r\n }\r\n\r\n private setView(newView: IComponentInterfaces[\"View\"]){\r\n const views = this.host.shadowRoot.querySelectorAll(\".view\");\r\n views.forEach(v =>\r\n v.classList.remove(\"visible\"));\r\n switch (newView) {\r\n case \"noPictureView\":\r\n this.noPictureView.classList.add(\"visible\");\r\n break;\r\n case \"hasPictureView\":\r\n this.hasPictureView.classList.add(\"visible\");\r\n break;\r\n default:\r\n break;\r\n }\r\n this.view = newView;\r\n }\r\n\r\n private initCrop(){\r\n var wantedRatio = this.width / this.height;\r\n var imageRect = this.image.getBoundingClientRect();\r\n var imageRatio = imageRect.width / imageRect.height;\r\n \r\n if (wantedRatio > imageRatio){\r\n var wantedHeight = imageRect.width / wantedRatio;\r\n var diff = imageRect.height - wantedHeight;\r\n this.crop.style.top = Math.round(diff/2).toString() + \"px\";\r\n this.crop.style.height = Math.round(wantedHeight).toString() + \"px\";\r\n }\r\n else{\r\n var wantedWidth = imageRect.height * wantedRatio;\r\n var diff = imageRect.width - wantedWidth;\r\n this.crop.style.left = Math.round(diff/2).toString() + \"px\";\r\n this.crop.style.width = Math.round(wantedWidth).toString() + \"px\";\r\n }\r\n }\r\n\r\n private setImage(){\r\n this.image.addEventListener('load', () => {\r\n this.initCrop();\r\n this.emitImage();\r\n })\r\n this.image.src = this.canvas.toDataURL();\r\n }\r\n\r\n private handleNewFile(file: File): void {\r\n if (file.type.split('/')[0] != \"image\"){\r\n return;\r\n }\r\n \r\n var reader = new FileReader();\r\n reader.onload = readerLoadEvent => {\r\n var img = new Image();\r\n img.onload = () => {\r\n this.canvas.width = img.width;\r\n this.canvas.height = img.height;\r\n if (this.preventUndersized && (img.width < this.width || img.height< this.height)){\r\n this.imageTooSmallModal.show();\r\n return;\r\n }\r\n var ctx = this.canvas.getContext(\"2d\");\r\n ctx.drawImage(img,0,0);\r\n this.setView(\"hasPictureView\");\r\n this.setImage();\r\n }\r\n img.src = readerLoadEvent.target.result.toString();\r\n }\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n private handleCropMouseDown = (event: MouseEvent | TouchEvent) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n const element = event.target as HTMLElement;\r\n const className = element.classList[0];\r\n\r\n document.addEventListener(\"mouseup\", this.handleImageCropFinished, false);\r\n document.addEventListener(\"touchend\", this.handleImageCropFinished, false);\r\n switch (className) {\r\n case \"crop\":\r\n document.addEventListener(\"mousemove\", this.handleCropDrag, false);\r\n document.addEventListener(\"touchmove\", this.handleCropDrag, false)\r\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleCropDrag));\r\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleCropDrag));\r\n break;\r\n case \"nw\":\r\n document.addEventListener(\"mousemove\", this.handleNwMouseMove, false);\r\n document.addEventListener(\"touchmove\", this.handleNwMouseMove, false)\r\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleNwMouseMove));\r\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleNwMouseMove));\r\n break;\r\n case \"ne\":\r\n document.addEventListener(\"mousemove\", this.handleNeMouseMove, false);\r\n document.addEventListener(\"touchmove\", this.handleNeMouseMove, false)\r\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleNeMouseMove));\r\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleNeMouseMove));\r\n break\r\n case \"se\":\r\n document.addEventListener(\"mousemove\", this.handleSeMouseMove, false);\r\n document.addEventListener(\"touchmove\", this.handleSeMouseMove, false)\r\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleSeMouseMove));\r\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleSeMouseMove));\r\n break;\r\n case \"sw\":\r\n document.addEventListener(\"mousemove\", this.handleSwMouseMove, false);\r\n document.addEventListener(\"touchmove\", this.handleSwMouseMove, false)\r\n document.addEventListener(\"mouseup\", () => document.removeEventListener(\"mousemove\", this.handleSwMouseMove));\r\n document.addEventListener(\"touchend\", () => document.removeEventListener(\"touchmove\", this.handleSwMouseMove));\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n private handleImageCropFinished = (_ev: MouseEvent) => {\r\n this.emitImage();\r\n document.removeEventListener(\"mouseup\", this.handleImageCropFinished);\r\n this.previousTouch = undefined;\r\n }\r\n\r\n private emitImage() {\r\n var x = this.crop.offsetLeft / this.image.width * this.image.naturalWidth;\r\n var y = this.crop.offsetTop / this.image.height * this.image.naturalHeight;\r\n\r\n var cropRect = this.crop.getBoundingClientRect();\r\n var width = cropRect.width / this.image.width * this.image.naturalWidth;\r\n var height = cropRect.height / this.image.height * this.image.naturalHeight;\r\n\r\n if (x < 0)\r\n x = 0;\r\n if (x > this.image.naturalWidth)\r\n x = this.image.naturalWidth;\r\n if (y < 0)\r\n y = 0;\r\n if (y > this.image.naturalWidth)\r\n y = this.image.naturalWidth;\r\n if (width > this.image.naturalWidth)\r\n width = this.image.naturalWidth;\r\n if (height > this.image.naturalHeight)\r\n height = this.image.naturalHeight;\r\n\r\n var dataUrl = this.generateCroppedImage(x, y, width, height, this.width, this.height);\r\n this.imageCropChanged.emit(dataUrl);\r\n }\r\n\r\n private generateCroppedImage(x: number, y: number, width: number, height: number, desiredWidth: number, desiredHeight: number) {\r\n this.canvas.width = desiredWidth;\r\n this.canvas.height = desiredHeight;\r\n const context = this.canvas.getContext(\"2d\");\r\n context.clearRect(0, 0, desiredWidth, desiredHeight);\r\n context.drawImage(this.image, x, y, width, height, 0, 0, desiredWidth, desiredHeight);\r\n\r\n return this.canvas.toDataURL(\"image/jpeg\", this.quality);\r\n }\r\n\r\n private handleNwMouseMove = (event: MouseEvent | TouchEvent) => {\r\n this.handleCornerDrag(event, CornerType.nw);\r\n }\r\n\r\n private handleNeMouseMove = (event: MouseEvent | TouchEvent) => {\r\n this.handleCornerDrag(event, CornerType.ne);\r\n }\r\n\r\n private handleSeMouseMove = (event: MouseEvent | TouchEvent) => {\r\n this.handleCornerDrag(event, CornerType.se);\r\n }\r\n\r\n private handleSwMouseMove = (event: MouseEvent | TouchEvent) => {\r\n this.handleCornerDrag(event, CornerType.sw);\r\n }\r\n\r\n private handleCornerDrag = (event: MouseEvent | TouchEvent, corner: CornerType) => {\r\n if (!this.isMouseStillInTarget(event)){\r\n return;\r\n }\r\n \r\n let {left, top} = this.getCornerLeftTop(corner);\r\n let newWidth = 0;\r\n let newHeight = 0;\r\n let orientation: \"horizontal\" | \"vertical\" = \"horizontal\";\r\n const wantedRatio = this.width / this.height;\r\n const cropRect = this.crop.getBoundingClientRect();\r\n const imageRect = this.image.getBoundingClientRect();\r\n let { movementX, movementY } = getMovementFromEvent(event, this.previousTouch);\r\n if (Math.abs(movementX) < Math.abs(movementY)){\r\n orientation = \"vertical\";\r\n }\r\n\r\n if (orientation == \"horizontal\"){\r\n switch (corner) {\r\n case CornerType.nw:\r\n case CornerType.sw:\r\n newWidth = cropRect.width - movementX;\r\n newHeight = newWidth / wantedRatio;\r\n break;\r\n case CornerType.ne:\r\n case CornerType.se:\r\n newWidth = cropRect.width + movementX;\r\n newHeight = newWidth / wantedRatio;\r\n break;\r\n default:\r\n break;\r\n }\r\n } else{\r\n switch (corner) {\r\n case CornerType.nw:\r\n case CornerType.ne:\r\n newHeight = cropRect.height - movementY;\r\n newWidth = newHeight * wantedRatio;\r\n break;\r\n case CornerType.se:\r\n case CornerType.sw:\r\n newHeight = cropRect.height + movementY;\r\n newWidth = newHeight * wantedRatio;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n switch (corner) {\r\n case CornerType.ne:\r\n case CornerType.nw:\r\n const topOffset = cropRect.height - newHeight;\r\n top = this.crop.offsetTop + topOffset;\r\n default:\r\n break;\r\n }\r\n\r\n switch (corner) {\r\n case CornerType.nw:\r\n case CornerType.sw:\r\n const leftOffset = cropRect.width - newWidth;\r\n left = this.crop.offsetLeft + leftOffset;\r\n if (left < 0) left = 0;\r\n if (left > imageRect.width) left = imageRect.width;\r\n if (top < 0) top = 0;\r\n if (top > imageRect.height) top = imageRect.height;\r\n if (left + newWidth > imageRect.width) newWidth = imageRect.width - left;\r\n if (top + newHeight > imageRect.height) newHeight = imageRect.height - top;\r\n break;\r\n case CornerType.ne:\r\n case CornerType.se:\r\n if (top < 0) top = 0;\r\n if (top > imageRect.height) top = imageRect.height;\r\n if (left + newWidth > imageRect.width) newWidth = imageRect.width - left;\r\n if (top + newHeight > imageRect.height) newHeight = imageRect.height - top;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (newWidth / newHeight != wantedRatio){\r\n return;\r\n }\r\n\r\n if (this.preventUndersized){\r\n const zoomRatio = this.image.width / this.image.naturalWidth;\r\n if (newWidth / zoomRatio < this.width || newHeight / zoomRatio < this.height){\r\n return;\r\n }\r\n }\r\n\r\n switch (corner) {\r\n case CornerType.ne:\r\n this.crop.style.top = `${top}px`;\r\n this.crop.style.width = `${newWidth}px`;\r\n this.crop.style.height = `${newHeight}px`;\r\n break;\r\n case CornerType.nw:\r\n this.crop.style.left = `${left}px`;\r\n this.crop.style.top = `${top}px`;\r\n this.crop.style.width = `${newWidth}px`;\r\n this.crop.style.height = `${newHeight}px`;\r\n break;\r\n case CornerType.se:\r\n this.crop.style.width = `${newWidth}px`;\r\n this.crop.style.height = `${newHeight}px`;\r\n break;\r\n case CornerType.sw:\r\n this.crop.style.left = `${left}px`;\r\n this.crop.style.width = `${newWidth}px`;\r\n this.crop.style.height = `${newHeight}px`;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n private getCornerLeftTop(corner: CornerType): { left: number; top: number; } {\r\n let left = 0;\r\n let top = 0;\r\n switch (corner) {\r\n case CornerType.se:\r\n left = this.crop.offsetLeft;\r\n top = this.crop.offsetTop;\r\n break;\r\n case CornerType.sw:\r\n top = this.crop.offsetTop;\r\n break;\r\n default:\r\n break;\r\n }\r\n return {top, left};\r\n }\r\n\r\n private handleCropDrag = (ev: MouseEvent | TouchEvent) => {\r\n if (!this.isMouseStillInTarget(ev)){\r\n return;\r\n }\r\n let {movementX, movementY} = getMovementFromEvent(ev, this.previousTouch);\r\n let newLeft = this.crop.offsetLeft + movementX;\r\n let newTop = this.crop.offsetTop + movementY;\r\n var imageRect = this.image.getBoundingClientRect();\r\n var cropRect = this.crop.getBoundingClientRect();\r\n if (newLeft < 0){\r\n newLeft = 0;\r\n }\r\n if (newTop < 0){\r\n newTop = 0;\r\n }\r\n if (newLeft + cropRect.width > imageRect.width){\r\n newLeft = this.crop.offsetLeft;\r\n }\r\n if (newTop + cropRect.height > imageRect.height){\r\n newTop = this.crop.offsetTop;\r\n }\r\n this.crop.style.left = newLeft + \"px\";\r\n this.crop.style.top = newTop + \"px\";\r\n };\r\n\r\n private isMouseStillInTarget(event: MouseEvent | TouchEvent) {\r\n var inside = false;\r\n let mouseX: number;\r\n let mouseY: number;\r\n const imageRect = this.image.getBoundingClientRect();\r\n \r\n if (event instanceof MouseEvent){\r\n mouseX = event.clientX;\r\n mouseY = event.clientY;\r\n }\r\n\r\n if (typeof TouchEvent !== \"undefined\"){\r\n if (event instanceof TouchEvent){\r\n var touch = event.touches[0];\r\n mouseX = touch.clientX;\r\n mouseY = touch.clientY;\r\n }\r\n }\r\n \r\n if (\r\n mouseX >= imageRect.x &&\r\n mouseY >= imageRect.y &&\r\n mouseX <= imageRect.left + imageRect.width &&\r\n mouseY <= imageRect.top + imageRect.height)\r\n {\r\n inside = true;\r\n }\r\n\r\n var corners = this.crop.querySelectorAll(\"div\");\r\n corners.forEach(corner =>{\r\n var cornerRect = corner.getBoundingClientRect();\r\n if (\r\n mouseX >= cornerRect.x &&\r\n mouseY >= cornerRect.y &&\r\n mouseX <= cornerRect.left + cornerRect.width &&\r\n mouseY <= cornerRect.top + cornerRect.height)\r\n {\r\n inside = true;\r\n }\r\n })\r\n\r\n return inside;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host ref={el => this.host = el}>\r\n <canvas ref={el => this.canvas = el} />\r\n <div\r\n class=\"view\"\r\n ref={el => this.hasPictureView = el}\r\n >\r\n <div class=\"cropper\">\r\n <img ref={el => this.image = el} />\r\n <div class=\"backdrop\" />\r\n <div\r\n class=\"crop\"\r\n ref={e => this.crop = e}\r\n onMouseDown={this.handleCropMouseDown}\r\n onTouchStart={this.handleCropMouseDown}\r\n >\r\n <div class=\"nw\" />\r\n <div class=\"ne\" />\r\n <div class=\"se\" />\r\n <div class=\"sw\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"view\"\r\n ref={el => this.noPictureView = el}>\r\n <dnn-dropzone\r\n allowCameraMode\r\n onFilesSelected={e => this.handleNewFile(e.detail[0])}\r\n resx={\r\n {\r\n capture: this.resx.capture,\r\n dragAndDropFile: this.resx.dragAndDropFile,\r\n or: this.resx.or,\r\n takePicture: this.resx.takePicture,\r\n uploadFile: this.resx.uploadFile,\r\n }\r\n }\r\n />\r\n </div>\r\n <dnn-modal ref={el => this.imageTooSmallModal = el} close-text={this.resx.modalCloseText}>\r\n <p>{this.resx.imageTooSmall.replace(\"{width}\", this.width.toString()).replace(\"{height}\", this.height.toString())}</p>\r\n </dnn-modal>\r\n </Host>\r\n );\r\n }\r\n}\r\n\r\ninterface IComponentInterfaces\r\n{\r\n View: \"noPictureView\" | \"takingPictureView\" | \"hasPictureView\" | \"hasCroppedPictureView\";\r\n}",":host {\r\n /**\r\n * @prop --max-width: The maximum width of the module.\r\n */\r\n display: block;\r\n .overlay{\r\n background-color: rgba(0,0,0,0.5);\r\n position: fixed;\r\n top:0;\r\n left:0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 1;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n backdrop-filter: blur(2px);\r\n transition: all 300ms ease-in-out;\r\n visibility: hidden;\r\n opacity: 0;\r\n .modal{\r\n max-width: var(--max-width, 1200px);\r\n background-color: white;\r\n padding: 30px;\r\n transform: scale(2);\r\n transition: all 300ms ease-in-out;\r\n z-index: 2;\r\n position: relative;\r\n margin: 10%;\r\n max-height: 80%;\r\n border-radius: var(--dnn-controls-radius, 5px);\r\n box-shadow: 10px 10px 20px 0 rgba(0,0,0,0.5);\r\n display: block;\r\n .close{\r\n position: absolute;\r\n background-color:white;\r\n border: 2px solid white;\r\n border-radius: 50%;\r\n padding: 0;\r\n margin: 0;\r\n top: -12px;\r\n right: -12px;\r\n outline: none;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n &:focus, &:hover{\r\n box-shadow: 0 0 2px 2px var(--dnn-color-primary, blue);\r\n }\r\n svg{\r\n width: 24px;\r\n height: 24px;\r\n color: grey;\r\n }\r\n }\r\n }\r\n &.visible{\r\n visibility: visible;\r\n opacity: 1;\r\n .modal{\r\n transform: scale(1);\r\n box-shadow: 4px 4px 10px 0px rgba(0,0,0,0.5);\r\n display: block;\r\n }\r\n }\r\n }\r\n}","import { Component, Element, Host, h, Prop, Event, EventEmitter, Method, State } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-modal',\r\n styleUrl: 'dnn-modal.scss',\r\n shadow: true\r\n})\r\nexport class DnnModal {\r\n \r\n @Element() el!: HTMLDnnModalElement;\r\n \r\n /**\r\n * Pass false to remove the backdrop click auto-dismiss feature.\r\n */\r\n @Prop() backdropDismiss: boolean = true;\r\n\r\n /**\r\n * Optionally pass the aria-label text for the close button.\r\n * Defaults to \"Close modal\" if not provided.\r\n */\r\n @Prop() closeText?: string = \"Close modal\";\r\n\r\n /**\r\n * Optionally you can pass false to not show the close button.\r\n * If you decide to do so, you should either not also prevent dismissal by clicking the backdrop\r\n * or provide your own dismissal logic in the modal content.\r\n */\r\n @Prop() showCloseButton?: boolean = true;\r\n\r\n @State() visible: boolean = false;\r\n\r\n /**\r\n * Shows the modal\r\n */\r\n @Method()\r\n async show() {\r\n this.visible = true;\r\n }\r\n\r\n /**\r\n * Hides the modal\r\n */\r\n @Method()\r\n async hide() {\r\n this.visible = false;\r\n }\r\n\r\n /**\r\n * Fires when the modal is dismissed.\r\n */\r\n @Event() dismissed!: EventEmitter;\r\n\r\n private handleDismiss(){\r\n this.visible = false;\r\n this.dismissed.emit();\r\n }\r\n\r\n private handleBackdropClick(e: MouseEvent): void {\r\n const element = (e.target as HTMLElement);\r\n if (element.id === \"backdrop\" && this.backdropDismiss){\r\n this.handleDismiss();\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div id=\"backdrop\"\r\n class={this.visible ? 'overlay visible' : 'overlay'}\r\n onClick={e => this.handleBackdropClick(e)}\r\n >\r\n <div class=\"modal\">\r\n {this.showCloseButton &&\r\n <button\r\n class=\"close\"\r\n aria-label={this.closeText}\r\n onClick={() => this.handleDismiss()}\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"/></svg>\r\n </button>\r\n }\r\n <slot></slot>\r\n </div>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n position: relative;\r\n display: flex;\r\n justify-content: space-between;\r\n --background-color: transparent;\r\n --color: #333;\r\n --border-size: 1px;\r\n --border-color: grey;\r\n --border-active-color: black;\r\n --border-radius: var(--dnn-controls-radius, 5px);\r\n --padding: var(--dnn-controls-padding, 5px);\r\n --focus-color: var(--dnn-color-primary, blue);\r\n input {\r\n width:100%;\r\n border: var(--border-size) solid var(--border-color);\r\n outline: none;\r\n border-radius: var(--border-radius);\r\n padding: var(--padding);\r\n padding-right: 32px;\r\n transition: all 300ms ease-in-out;\r\n &:focus, &:hover{\r\n outline: none;\r\n box-shadow: 0 0 2px 2px var(--focus-color);\r\n }\r\n }\r\n svg{\r\n position: absolute;\r\n top:0;\r\n right:0;\r\n height: 100%;\r\n transform: scale(0.7);\r\n fill: var(--color);\r\n outline: var(--color);\r\n color: var(--color);\r\n transition: all 300ms ease-in-out;\r\n }\r\n button{\r\n background: transparent;\r\n border: 0;\r\n margin: 0;\r\n padding: 0;\r\n &:focus, &:hover{\r\n svg{\r\n fill: var(--focus-color);\r\n outline: var(--focus-color);\r\n color: var(--focus-color);\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, Host, h, Event, EventEmitter, Watch, Prop } from '@stencil/core';\r\nimport { Debounce } from '../../utilities/debounce';\r\n@Component({\r\n tag: 'dnn-searchbox',\r\n styleUrl: 'dnn-searchbox.scss',\r\n shadow: true\r\n})\r\nexport class DnnSearchbox {\r\n\r\n /**\r\n * Sets the field placeholder text.\r\n */\r\n @Prop() placeholder?: string = \"\";\r\n\r\n /**\r\n * Debounces the queryChanged by 500ms.\r\n */\r\n @Prop() debounced: boolean = true;\r\n\r\n /** Sets the query */\r\n @Prop({mutable: true}) query: string = \"\";\r\n\r\n /**\r\n * Fires up each time the search query changes.\r\n * The data passed is the new query.\r\n */\r\n @Event() queryChanged: EventEmitter;\r\n\r\n @Watch('query')\r\n fireQueryChanged(){\r\n if (this.debounced){\r\n this.debouncedHandleQueryChanged();\r\n }\r\n else{\r\n this.handleQueryChanged();\r\n }\r\n }\r\n \r\n private handleQueryChanged(){\r\n this.queryChanged.emit(this.query);\r\n }\r\n\r\n @Debounce(500)\r\n private debouncedHandleQueryChanged(){\r\n this.handleQueryChanged();\r\n }\r\n \r\n\r\n render() {\r\n return (\r\n <Host>\r\n <input type=\"text\" value={this.query}\r\n placeholder={this.placeholder}\r\n onInput={e => this.query = (e.target as HTMLInputElement).value}\r\n />\r\n {this.query !== \"\" ?\r\n <button class=\"svg clear\"\r\n onClick={() => this.query = \"\"}\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"/></svg>\r\n </button>\r\n :\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\"/></svg>\r\n }\r\n </Host>\r\n );\r\n }\r\n\r\n}\r\n",":host {\r\n /**\r\n * @prop --color: Normal Color of the inactive sort icon.\r\n * @prop --color-sorted: Color of the sorted sort icon.\r\n * @prop --color-hover: Color of the icons when hovered.\r\n */\r\n display: inline-block;\r\n}\r\n\r\nbutton {\r\n outline: none;\r\n border: none;\r\n margin: 0;\r\n padding: 0;\r\n background-color: transparent;\r\n outline: none;\r\n display: inline-block;\r\n line-height: 1em;\r\n position: relative;\r\n top: 0.25em;\r\n svg{\r\n height: 1.5em;\r\n width: auto;\r\n fill: var(--color, #888);\r\n }\r\n &.active{\r\n svg{\r\n fill: var(--color-sorted, var(--dnn-color-primary, rgb(2,139,255)));\r\n }\r\n }\r\n &:hover, &:focus{\r\n svg{\r\n fill: var(--color-hover, var(--dnn-color-primary-light, #36a1ff));\r\n }\r\n }\r\n}","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-sort-icon',\r\n styleUrl: 'dnn-sort-icon.scss',\r\n shadow: true\r\n})\r\nexport class DnnSortIcon {\r\n /** Defines the current sort direction */\r\n @Prop() sortDirection: \"asc\" | \"desc\" | \"none\" = \"none\";\r\n\r\n /** Emitted when the sort is changed. */\r\n @Event() sortChanged!: EventEmitter<\"asc\"|\"desc\"|\"none\">;\r\n \r\n private changeSort(): void {\r\n switch (this.sortDirection) {\r\n case \"asc\":\r\n this.sortDirection = \"desc\";\r\n break;\r\n case \"desc\":\r\n this.sortDirection = \"asc\";\r\n break;\r\n case \"none\":\r\n this.sortDirection = \"asc\";\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n this.sortChanged.emit(this.sortDirection);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <button\r\n class={{\"active\": this.sortDirection != \"none\"}}\r\n onClick={() => this.changeSort()}\r\n >\r\n {this.sortDirection == \"none\" &&\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 16\"><path d=\"M 0 7 H 12 L 6 0 Z M 0 9 H 12 L 6 16 Z\"></path></svg>\r\n }\r\n {this.sortDirection == \"asc\" &&\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 16\"><path d=\"M 0 7 H 12 L 6 0 Z\"></path></svg>\r\n }\r\n {this.sortDirection == \"desc\" &&\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 12 16\"><path d=\"M 0 9 H 12 L 6 16 Z\"></path></svg>\r\n }\r\n </button>\r\n </Host>\r\n );\r\n }\r\n}\r\n",null,"import { Component, Host, h, Prop, State, Method } from \"@stencil/core\";\r\n\r\n/** Represents a single tab and must be used inside a dnn-tabs element. */\r\n@Component({\r\n tag: 'dnn-tab',\r\n styleUrl: 'dnn-tab.scss',\r\n shadow: true,\r\n})\r\nexport class DnnTab {\r\n /** Defines the tab title. */\r\n @Prop() tabTitle!: string;\r\n\r\n @State() visible: boolean = false;\r\n\r\n /** Shows the tab. */\r\n @Method()\r\n async show(){\r\n this.visible = true;\r\n }\r\n\r\n /** Hides the modal */\r\n @Method()\r\n async hide(){\r\n this.visible = false;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.visible &&\r\n <slot></slot>\r\n }\r\n </Host>\r\n );\r\n }\r\n}",":host {\r\n /**\r\n * @prop --color-background: The color of the inactive tabs.\r\n * @prop --color-text: The color of the text for inactive tabs.\r\n * @prop --color-visible: The color of the active tab.\r\n * @prop --color-visible-text: The color of the text for the active tab.\r\n * @prop --color-focus: outline color when hovering or pre-selecting a tab.\r\n */\r\n display: block;\r\n --color-background: var(--dnn-color-secondary-dark, lightgray);\r\n --color-text: var(--dnn-color-secondary-contrast, #333);\r\n --color-visible: var(--dnn-color-primary, #3792ED);\r\n --color-visible-text: var(--dnn-color-primary-contrast, #FFF);\r\n --color-focus: var(--dnn-color-primary, #3792ed);\r\n }\r\n\r\n .tabTitles{\r\n display: flex;\r\n background-color: var(--color-background);\r\n color: var(--color-text);\r\n button{\r\n padding: 0.5rem 1rem;\r\n border: 0;\r\n margin: 0;\r\n background-color: transparent;\r\n &.visible{\r\n background-color: var(--color-visible);\r\n color: var(--color-bisible-text);\r\n }\r\n &:focus, &:hover{\r\n outline: none;\r\n box-shadow: 0 0 2px 2px var(--color-focus);\r\n }\r\n }\r\n }\r\n\r\n .currentTab{\r\n border: 1px solid var(--color-background);\r\n padding: 1rem;\r\n }","import { Component, Host, h, State } from \"@stencil/core\";\r\n\r\n@Component({\r\n tag: 'dnn-tabs',\r\n styleUrl: 'dnn-tabs.scss',\r\n shadow: true,\r\n})\r\nexport class DnnTabs {\r\n private component: HTMLElement;\r\n\r\n @State() tabTitles: string[] = [];\r\n @State() selectedTabTitle: string = \"\";\r\n\r\n componentDidLoad(){\r\n requestAnimationFrame(() => {\r\n this.updateTitles();\r\n this.showFirstTab();\r\n });\r\n }\r\n\r\n private getTabs() {\r\n return this.component.shadowRoot.querySelector(\"slot\").assignedElements() as HTMLDnnTabElement[];\r\n }\r\n\r\n private updateTitles(){\r\n const tabs = this.getTabs();\r\n tabs.forEach(tab => this.tabTitles = [...this.tabTitles, tab.tabTitle]);\r\n }\r\n\r\n private showFirstTab(){\r\n const tab = this.getTabs()[0];\r\n tab.show();\r\n this.selectedTabTitle = tab.tabTitle;\r\n }\r\n\r\n private showTab(tabTitle: string) {\r\n const tabs = this.getTabs();\r\n tabs.forEach(tab => {\r\n if (tab.tabTitle == tabTitle){\r\n tab.show();\r\n return;\r\n }\r\n\r\n tab.hide();\r\n });\r\n this.selectedTabTitle = tabTitle;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host ref={el => this.component = el}>\r\n <div class=\"tabTitles\">\r\n {this.tabTitles.map(tabTitle =>\r\n <button\r\n class={this.selectedTabTitle == tabTitle ? \"visible\": \"\"}\r\n onClick={() => this.showTab(tabTitle)}\r\n >\r\n {tabTitle}\r\n </button>\r\n )}\r\n </div>\r\n <div class=\"currentTab\">\r\n <slot></slot>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}",":host {\r\n /**\r\n * @prop --background: Background of the toggle.\r\n * @prop --background-checked: Background of the toggle when checked.\r\n * @prop --handle-background: Background of the handle.\r\n * @prop --handle-background-checked: Background of the handle when checked.\r\n * @prop --border-radius: The radius of the background borders.\r\n * @prop --handle-border-radius: The radius of the handle.\r\n */\r\n\r\n display: inline-block;\r\n outline: none;\r\n cursor: pointer;\r\n}\r\n\r\nbutton {\r\n height: 1.5em;\r\n width: 2.5em;\r\n outline: none;\r\n background-color: var(--background, #888);\r\n border: 0;\r\n border-radius: var(--border-radius, var(--dnn-controls-radius, 0.75em));\r\n padding: 0.1em;\r\n position: relative;\r\n margin: 0;\r\n transition: background-color 300ms ease-in-out;\r\n position: relative;\r\n cursor: pointer;\r\n &:hover, &:focus{\r\n box-shadow: 0 0 2px 2px var(--dnn-color-primary);\r\n }\r\n &.checked{\r\n background-color: var(--background-checked, var(--dnn-color-primary, blue));\r\n .handle{\r\n left: calc(1em + 4px);\r\n }\r\n }\r\n &:disabled{\r\n opacity: 0.5;\r\n cursor: not-allowed;\r\n box-shadow: none;\r\n }\r\n .handle{\r\n transition: all 300ms ease-in-out;\r\n background-color:white;\r\n width: 1em;\r\n height: 1em;\r\n border-radius: var(--dnn-controls-radius, 50%);\r\n position: absolute;\r\n top: calc(50% - 0.5em);\r\n left: 2px;\r\n }\r\n}","import { Component, h, Element, Prop, Event, EventEmitter, Watch, Host } from \"@stencil/core\";\r\nimport { DnnToggleChangeEventDetail } from \"./toggle-interface\";\r\n\r\n\r\n@Component({\r\n tag: \"dnn-toggle\",\r\n styleUrl: \"dnn-toggle.scss\",\r\n shadow: true\r\n})\r\nexport class DnnToggle {\r\n\r\n @Element() element: HTMLDnnToggleElement;\r\n\r\n /** If 'true' the toggle is checked (on). */\r\n @Prop({mutable: true}) checked = false;\r\n\r\n /** If 'true' the toggle is not be interacted with. */\r\n @Prop() disabled = false;\r\n\r\n /** Fires when the toggle changed */\r\n @Event() checkChanged!: EventEmitter<DnnToggleChangeEventDetail>;\r\n\r\n @Watch(\"checked\")\r\n checkedChanged(isChecked: boolean){\r\n this.checkChanged.emit({checked: isChecked});\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <button disabled={this.disabled} class={{'checked': this.checked}}\r\n onClick={() => {\r\n if (!this.disabled) {\r\n this.checked = !this.checked;\r\n }\r\n }}\r\n >\r\n <div class=\"handle\"></div>\r\n </button>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n overflow: visible;\r\n}\r\n.expander{\r\n width: 24px;\r\n height: 24px;\r\n button{\r\n transition: all 150ms ease-in-out;\r\n background-color:transparent;\r\n border: none;\r\n padding: 0;\r\n margin: 0;\r\n height: 1em;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n cursor: pointer;\r\n position: relative;\r\n top: 2px;\r\n svg{\r\n :first-child{\r\n transition: all 150ms ease-in-out;\r\n fill: white;\r\n stroke: black\r\n }\r\n }\r\n }\r\n &.expanded{\r\n button{\r\n transform: rotate(45deg);\r\n svg{\r\n :first-child{\r\n fill: black;\r\n stroke: black;\r\n }\r\n }\r\n }\r\n }\r\n}\r\ndiv.item{\r\n .item-slot{\r\n display: flex;\r\n align-items: center;\r\n gap: 0.25em;\r\n min-height: 24px;\r\n }\r\n div.children{\r\n overflow: hidden;\r\n height:0;\r\n transition: all 150ms ease-in-out;\r\n }\r\n}","import { Component, Host, h, Prop, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-treeview-item',\r\n styleUrl: 'dnn-treeview-item.scss',\r\n shadow: true,\r\n})\r\nexport class DnnTreeviewItem {\r\n \r\n private expander!: HTMLDivElement;\r\n\r\n @Element() el!: HTMLDnnTreeviewItemElement;\r\n \r\n /** Defines if the current node is expanded. */\r\n @Prop({mutable: true, reflect: true}) expanded: boolean = false;\r\n\r\n /** Fires when the user expands a node. */\r\n @Event({bubbles: false}) userExpanded: EventEmitter<void>;\r\n\r\n /** Fires when the user collapses a node. */\r\n @Event({bubbles: false}) userCollapsed: EventEmitter<void>;\r\n\r\n /** Manages state for whether or not item has children. */\r\n @State() hasChildren: boolean = false;\r\n\r\n /** Watch expanded Prop */\r\n @Watch('expanded')\r\n watchExpanded(expanded: boolean) {\r\n if (expanded) {\r\n this.expander.classList.add(\"expanded\");\r\n this.collapsible.expanded = true;\r\n return;\r\n }\r\n \r\n this.expander.classList.remove(\"expanded\");\r\n this.collapsible.expanded = false;\r\n }\r\n \r\n \r\n private childElement!: HTMLDivElement;\r\n private collapsible!: HTMLDnnCollapsibleElement;\r\n\r\n componentDidLoad() {\r\n requestAnimationFrame(() => {\r\n const child = this.childElement.children[0] as HTMLSlotElement;\r\n const count = child.assignedElements().length\r\n if (count > 0){\r\n this.hasChildren = true;\r\n }\r\n if (this.expanded){\r\n this.expander.classList.add(\"expanded\");\r\n this.collapsible.expanded = false;\r\n setTimeout(() => {\r\n this.collapsible.expanded = true;\r\n }, 300);\r\n }\r\n });\r\n }\r\n\r\n private toggleCollapse(): void {\r\n this.expanded = !this.expanded;\r\n if (this.expanded){\r\n this.expander.classList.add(\"expanded\");\r\n this.userExpanded.emit();\r\n return;\r\n }\r\n\r\n this.expander.classList.remove(\"expanded\");\r\n this.userCollapsed.emit();\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"expander\" ref={el => this.expander = el}>\r\n {this.hasChildren &&\r\n <button\r\n onClick={() => this.toggleCollapse()}\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M10 17l5-5-5-5v10z\"/><path d=\"M0 24V0h24v24H0z\" fill=\"none\"/></svg>\r\n </button>\r\n }\r\n </div>\r\n <div class=\"item\">\r\n <div class=\"item-slot\">\r\n <slot></slot>\r\n </div>\r\n <dnn-collapsible ref={el => this.collapsible = el} expanded={this.expanded}>\r\n <div ref={el => this.childElement = el}>\r\n <slot name=\"children\"></slot>\r\n </div>\r\n </dnn-collapsible>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n\r\nexport interface ExpandedToggledEvent{\r\n state: \"expanded\" | \"collapsed\";\r\n height: number;\r\n}",":host {\r\n display: block;\r\n\r\n /** Defines the menu background color. */\r\n --background-color: var(--dnn-color-primary-contrast, white);\r\n\r\n /** A color that contrasts well over the background color. */\r\n --foreground-color: var(--dnn-color-primary, blue);\r\n\r\n /** The color of the text. */\r\n --text-color: #222;\r\n}\r\n\r\n.menu-container{\r\n display: flex;\r\n justify-content: flex-start;\r\n align-items: center;\r\n background-color: var(--background-color);\r\n color: var(--text-color);\r\n .menu{\r\n margin: 0.5em;\r\n display: flex;\r\n gap: 1em;\r\n justify-content: flex-start;\r\n align-items: center;\r\n white-space: nowrap;\r\n width: 100%;\r\n }\r\n .overflow {\r\n margin-left: auto;\r\n position: relative;\r\n button{\r\n cursor: pointer;\r\n svg{\r\n fill: var(--foreground-color);\r\n }\r\n padding: 0;\r\n margin: 0;\r\n background-color: transparent;\r\n border: none;\r\n }\r\n .dropdown{\r\n position:absolute;\r\n display: flex;\r\n flex-direction: column;\r\n white-space: nowrap;\r\n right: 0;\r\n transition: 100ms ease-in-out;\r\n height: 0;\r\n overflow: hidden;\r\n &.visible{\r\n padding: 1em;\r\n gap: 0.5em;\r\n background-color: var(--background-color);\r\n box-shadow: 2px 2px 4px rgba(0,0,0,0.7);\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, Element, Host, h, State } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'dnn-vertical-overflow-menu',\r\n styleUrl: 'dnn-vertical-overflow-menu.scss',\r\n shadow: true,\r\n})\r\nexport class DnnVerticalOverflowMenu {\r\n\r\n @Element() element!: HTMLDnnVerticalOverflowMenuElement;\r\n \r\n @State() showDropdownButton = false;\r\n @State() showDropdownMenu = false;\r\n\r\n private menu!: HTMLDivElement;\r\n private dropdown: HTMLDivElement;\r\n private resizeObserver: ResizeObserver;\r\n private button!: HTMLButtonElement;\r\n private previousMenuWidth = 0;\r\n\r\n componentDidRender() {\r\n requestAnimationFrame(() => {\r\n this.moveItemsToDropDownIfNecessery();\r\n this.resizeObserver = new ResizeObserver(entries => {\r\n for (let entry of entries){\r\n if (entry.contentRect.width < this.previousMenuWidth){\r\n this.moveItemsToDropDownIfNecessery()\r\n }\r\n if (this.previousMenuWidth > 0 && entry.contentRect.width > this.previousMenuWidth){\r\n this.moveItemsToMenuIfPossible();\r\n }\r\n this.previousMenuWidth = entry.contentRect.width;\r\n }\r\n });\r\n this.resizeObserver.observe(this.element);\r\n });\r\n }\r\n\r\n private moveItemsToDropDownIfNecessery(){\r\n const menuItems = Array.from(this.menu.querySelector(\"slot\").assignedElements());\r\n const availableWidth = this.menu.getBoundingClientRect().width;\r\n let neededWidth = parseFloat(getComputedStyle(this.element).fontSize)*2;\r\n menuItems.forEach(item => neededWidth += this.getFullWidth(item));\r\n neededWidth += (menuItems.length - 1) * parseFloat(getComputedStyle(this.element).fontSize);\r\n if (neededWidth > availableWidth){\r\n this.showDropdownButton = true;\r\n var lastItem = menuItems[menuItems.length -1];\r\n if (this.dropdown == undefined){\r\n return;\r\n }\r\n lastItem.slot = \"dropdown\";\r\n this.moveItemsToDropDownIfNecessery();\r\n }\r\n }\r\n \r\n private moveItemsToMenuIfPossible(){\r\n if (this.dropdown == undefined || !this.dropdown.hasChildNodes()){\r\n return;\r\n }\r\n const menuItems = Array.from(this.menu.querySelector(\"slot\").assignedElements());\r\n const availableWidth = this.menu.getBoundingClientRect().width;\r\n let neededWidth = parseFloat(getComputedStyle(this.element).fontSize)*2;\r\n neededWidth += (menuItems.length - 1) * parseFloat(getComputedStyle(this.element).fontSize);\r\n menuItems.forEach(item => neededWidth += this.getFullWidth(item));\r\n const firstItem = this.dropdown.querySelector(\"slot\").assignedElements()[0];\r\n if (firstItem != undefined){\r\n neededWidth += this.getFullWidth(firstItem);\r\n }\r\n\r\n if (neededWidth < availableWidth){\r\n if (firstItem != undefined){\r\n firstItem.slot = \"\";\r\n }\r\n if(firstItem == undefined){\r\n this.dropdown.classList.remove(\"visible\");\r\n this.showDropdownMenu = false;\r\n this.showDropdownButton = false;\r\n }\r\n } \r\n }\r\n\r\n private getFullWidth(item: Element) {\r\n var width = item.getBoundingClientRect().width;\r\n var styles = getComputedStyle(item);\r\n width += parseFloat(styles.marginLeft);\r\n width += parseFloat(styles.marginRight);\r\n width += parseFloat(styles.paddingLeft);\r\n width += parseFloat(styles.paddingRight);\r\n return width;\r\n }\r\n\r\n private toggleOverflowMenu(): void {\r\n this.showDropdownMenu = !this.showDropdownMenu;\r\n if (this.showDropdownMenu){\r\n this.dropdown.classList.add(\"visible\");\r\n let contentHeight = 0;\r\n const items = Array.from(this.dropdown.querySelector(\"slot\").assignedElements());\r\n items.forEach(item => contentHeight += item.getBoundingClientRect().height);\r\n var emHeight = parseFloat(getComputedStyle(this.dropdown).fontSize) * 0.5;\r\n var additionalHeight = emHeight * (this.dropdown.children.length - 1);\r\n contentHeight += additionalHeight;\r\n this.dropdown.style.height = `${contentHeight}px`;\r\n const dismissMenu = (e: MouseEvent) => {\r\n const buttonRect = this.button.getBoundingClientRect();\r\n if (\r\n e.clientX < buttonRect.left ||\r\n e.clientX > buttonRect.right ||\r\n e.clientY < buttonRect.top ||\r\n e.clientY > buttonRect.bottom){\r\n this.toggleOverflowMenu();\r\n }\r\n document.removeEventListener(\"click\", dismissMenu);\r\n };\r\n setTimeout(() => {\r\n document.addEventListener(\"click\", dismissMenu, false);\r\n }, 100);\r\n }\r\n else{\r\n this.dropdown.classList.remove(\"visible\");\r\n this.dropdown.style.height = \"0px\";\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"menu-container\">\r\n <div class=\"menu\" ref={el => this.menu = el}>\r\n <slot></slot>\r\n </div>\r\n {this.showDropdownButton &&\r\n <div class=\"overflow\">\r\n <button\r\n ref={el => this.button = el}\r\n class=\"icon\"\r\n onClick={() => this.toggleOverflowMenu()}>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/></svg>\r\n </button>\r\n <div class=\"dropdown\" ref={el => this.dropdown = el}>\r\n <slot name=\"dropdown\"></slot>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n align-items: stretch;\r\n margin: 0 auto;\r\n position: relative;\r\n\r\n /** @prop --left-pane-background-color: Allows customizing the left pane background-color */\r\n --left-pane-background-color: transparent;\r\n\r\n /** @prop --right-pane-background-color: Allows customizing the right pane background-color */\r\n --right-pane-background-color: transparent;\r\n}\r\n\r\nbutton{\r\n border: none;\r\n margin:0;\r\n padding:0;\r\n cursor: ew-resize;\r\n position: absolute;\r\n height: 100%;\r\n background-color: transparent;\r\n &.transition{\r\n transition: all 300ms ease-in-out;\r\n }\r\n}\r\n\r\n\r\n.pane{\r\n overflow-y: auto;\r\n &.transition{\r\n transition: all 300ms ease-in-out;\r\n }\r\n &.left{\r\n background-color: var(--left-pane-background-color);\r\n }\r\n &.right{\r\n background-color: var(--right-pane-background-color);\r\n flex-grow: 1;\r\n }\r\n}","import { Component, Host, h, Prop, Element, State, Method, Event, EventEmitter } from '@stencil/core';\r\nimport { getMovementFromEvent } from \"../../utilities/mouseUtilities\";\r\n\r\n/**\r\n * @slot default - The split divider control you want to use.\r\n * @slot left - The content of the left pane.\r\n * @slot right - The content of the right pane.\r\n */\r\n@Component({\r\n tag: 'dnn-vertical-splitview',\r\n styleUrl: 'dnn-vertical-splitview.scss',\r\n shadow: true,\r\n})\r\nexport class DnnVerticalSplitview {\r\n\r\n /** The width of the splitter area. */\r\n @Prop() splitterWidth = 16;\r\n\r\n /** The percentage position of the splitter in the container. */\r\n @Prop({mutable: true}) splitWidthPercentage = 30;\r\n \r\n private splitter!: HTMLButtonElement;\r\n\r\n private resizeObserver: ResizeObserver;\r\n\r\n /** Sets the width percentage of the divider */\r\n @Method()\r\n async setSplitWidthPercentage(newWidth: number) {\r\n const panes = this.element.shadowRoot.querySelectorAll(\".pane\");\r\n requestAnimationFrame(() => {\r\n panes.forEach(pane => pane.classList.add(\"transition\"));\r\n this.splitter.classList.add(\"transition\");\r\n requestAnimationFrame(() => {\r\n const fullWidth = this.element.getBoundingClientRect().width;\r\n let newLeft = fullWidth * newWidth / 100;\r\n if (newLeft < 0){\r\n newLeft = 0;\r\n }\r\n if (newLeft > fullWidth){\r\n newLeft = fullWidth;\r\n }\r\n this.leftWidth = newLeft;\r\n this.rightWidth = fullWidth - newLeft;\r\n setTimeout(() => {\r\n panes.forEach(pane => pane.classList.remove(\"transition\"));\r\n this.splitter.classList.remove(\"transition\");\r\n }, 300);\r\n });\r\n });\r\n }\r\n\r\n /** Gets the current divider position percentage. */\r\n @Method()\r\n async getSplitWidthPercentage(){\r\n const fullWidth = this.element.getBoundingClientRect().width;\r\n return this.leftWidth / fullWidth;\r\n }\r\n\r\n /** Fires when the width of the divider changes. */\r\n @Event() widthChanged: EventEmitter<number>;\r\n\r\n @State() leftWidth = 0;\r\n @State() rightWidth = 0;\r\n\r\n @Element() element : HTMLDnnVerticalSplitviewElement;\r\n \r\n componentDidLoad() {\r\n requestAnimationFrame(() => {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n const fullWidth = this.element.getBoundingClientRect().width;\r\n this.leftWidth = fullWidth * this.splitWidthPercentage / 100;\r\n this.rightWidth = fullWidth - this.leftWidth;\r\n this.widthChanged.emit(this.splitWidthPercentage);\r\n });\r\n this.resizeObserver.observe(this.element);\r\n });\r\n }\r\n \r\n private previousTouch: Touch;\r\n\r\n private handleMouseDown(event: MouseEvent | TouchEvent) {\r\n event.preventDefault();\r\n const handleDrag = (ev: MouseEvent | TouchEvent) => {\r\n requestAnimationFrame(() => {\r\n let fullWidth = this.element.getBoundingClientRect().width;\r\n let {movementX} = getMovementFromEvent(ev, this.previousTouch);\r\n let newLeft = this.leftWidth + movementX;\r\n if (newLeft < 0){\r\n newLeft = 0;\r\n }\r\n if (newLeft > fullWidth){\r\n newLeft = fullWidth;\r\n }\r\n this.leftWidth = newLeft;\r\n this.rightWidth = fullWidth - newLeft;\r\n this.splitWidthPercentage = this.leftWidth / fullWidth * 100;\r\n });\r\n }\r\n const handleDragFinished = () => {\r\n document.removeEventListener(\"mousemove\", handleDrag);\r\n document.removeEventListener(\"touchmove\", handleDrag);\r\n const fullWidth = this.element.getBoundingClientRect().width;\r\n const newPercentage = this.leftWidth / fullWidth * 100;\r\n this.widthChanged.emit(newPercentage);\r\n };\r\n document.addEventListener(\"mouseup\", handleDragFinished);\r\n document.addEventListener(\"touchend\", handleDragFinished);\r\n document.addEventListener(\"mousemove\", handleDrag);\r\n document.addEventListener(\"touchmove\", handleDrag);\r\n }\r\n\r\n private handleKeyDown(e: KeyboardEvent): void {\r\n let movementX = 0;\r\n switch (e.key) {\r\n case \"ArrowLeft\":\r\n movementX = -10;\r\n break;\r\n case \"ArrowRight\":\r\n movementX = 10;\r\n break;\r\n default:\r\n return;\r\n }\r\n if (e.shiftKey){\r\n movementX = movementX * 10;\r\n }\r\n const fullWidth = this.element.getBoundingClientRect().width;\r\n let newLeft = this.leftWidth + movementX;\r\n if (newLeft < 0){\r\n newLeft = 0;\r\n }\r\n if (newLeft > fullWidth){\r\n newLeft = fullWidth;\r\n }\r\n this.leftWidth = newLeft;\r\n this.rightWidth = fullWidth - this.leftWidth;\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"left pane\" style={{\r\n width: `${this.leftWidth}px`,\r\n }}>\r\n <slot name=\"left\"></slot>\r\n </div>\r\n <button\r\n onMouseDown={e => this.handleMouseDown(e)}\r\n onTouchStart={e => this.handleMouseDown(e)}\r\n onKeyDown={e => this.handleKeyDown(e)}\r\n ref={el => this.splitter = el}\r\n style={{\r\n minWidth: `${this.splitterWidth.toString()}px`,\r\n left: `${this.leftWidth - 2}px`,\r\n }}\r\n >\r\n <slot></slot>\r\n </button>\r\n <div\r\n class=\"right pane\"\r\n style={{\r\n width: `${this.rightWidth}px`,\r\n }}>\r\n <slot name=\"right\"></slot>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
System.register(["./p-058ba146.system.js"],(function(e,t){"use strict";var n,i;return{setters:[function(e){n=e.p;i=e.b}],execute:function(){var e=function(){var e=t.meta.url;var i={};if(e!==""){i.resourcesUrl=new URL(".",e).href}return n(i)};e().then((function(e){return i([["p-755d047d.system",[[1,"dnn-image-cropper",{width:[2],height:[2],resx:[16],quality:[2],preventUndersized:[4,"prevent-undersized"],view:[32]}],[1,"dnn-treeview-item",{expanded:[1540],hasChildren:[32]}],[1,"dnn-checkbox",{checked:[1028],useIntermediate:[4,"use-intermediate"],value:[1]}],[1,"dnn-chevron",{expandText:[1,"expand-text"],collapseText:[1,"collapse-text"],expanded:[1540]}],[1,"dnn-color-picker",{color:[1],colorBoxHeight:[1,"color-box-height"],currentColor:[32],rgbDisplay:[32],hslDisplay:[32],hexDisplay:[32]}],[1,"dnn-searchbox",{placeholder:[1],debounced:[4],query:[1025]}],[1,"dnn-sort-icon",{sortDirection:[1,"sort-direction"]}],[1,"dnn-tab",{tabTitle:[1,"tab-title"],visible:[32],show:[64],hide:[64]}],[1,"dnn-tabs",{tabTitles:[32],selectedTabTitle:[32]}],[1,"dnn-toggle",{checked:[1028],disabled:[4]}],[1,"dnn-vertical-overflow-menu",{showDropdownButton:[32],showDropdownMenu:[32]}],[1,"dnn-vertical-splitview",{splitterWidth:[2,"splitter-width"],splitWidthPercentage:[1026,"split-width-percentage"],leftWidth:[32],rightWidth:[32],setSplitWidthPercentage:[64],getSplitWidthPercentage:[64]}],[1,"dnn-button",{type:[1],reversed:[4],size:[1],confirm:[4],confirmYesText:[1,"confirm-yes-text"],confirmNoText:[1,"confirm-no-text"],confirmMessage:[1,"confirm-message"],disabled:[4],modalVisible:[32]}],[1,"dnn-collapsible",{expanded:[516],transitionDuration:[2,"transition-duration"],updateSize:[64]},[[0,"dnnCollapsibleHeightChanged","handleHeightChanged"]]],[1,"dnn-dropzone",{resx:[16],allowedExtensions:[16],allowCameraMode:[4,"allow-camera-mode"],captureQuality:[2,"capture-quality"],canTakeSnapshots:[32],takingPicture:[32]}],[1,"dnn-modal",{backdropDismiss:[4,"backdrop-dismiss"],closeText:[1,"close-text"],showCloseButton:[4,"show-close-button"],visible:[32],show:[64],hide:[64]}]]]],e)}))}}}));
|
|
2
|
-
//# sourceMappingURL=p-f91193e2.system.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"names":["patchBrowser","importMeta","module","meta","url","opts","resourcesUrl","URL","href","promiseResolve","then","options","bootstrapLazy","width","height","resx","quality","preventUndersized","view","expanded","hasChildren","checked","useIntermediate","value","expandText","collapseText","color","colorBoxHeight","currentColor","rgbDisplay","hslDisplay","hexDisplay","placeholder","debounced","query","sortDirection","tabTitle","visible","show","hide","tabTitles","selectedTabTitle","disabled","showDropdownButton","showDropdownMenu","splitterWidth","splitWidthPercentage","leftWidth","rightWidth","setSplitWidthPercentage","getSplitWidthPercentage","type","reversed","size","confirm","confirmYesText","confirmNoText","confirmMessage","modalVisible","transitionDuration","updateSize","allowedExtensions","allowCameraMode","captureQuality","canTakeSnapshots","takingPicture","backdropDismiss","closeText","showCloseButton"],"mappings":"4IAMA,IAAMA,EAAe,WAyBjB,IAAMC,EAAaC,EAAAC,KAAAC,IACnB,IAAMC,EAA6D,GAenE,GAAuBJ,IAAe,GAAI,CACtCI,EAAKC,aAAe,IAAIC,IAAI,IAAKN,GAAYO,KAajD,OAAOC,EAAeJ,IC1D1BL,IAAeU,MAAK,SAAAC,GAElB,OAAOC,EAAc,CAAA,CAAA,oBAAA,CAAA,CAAA,EAAA,oBAAuC,CAAAC,MAAA,CAAA,GAAAC,OAAA,CAAA,GAAAC,KAAA,CAAA,IAAAC,QAAA,CAAA,GAAAC,kBAAA,CAAA,EAAA,sBAAAC,KAAA,CAAA,MAAA,CAAA,EAAA,oBAAA,CAAAC,SAAA,CAAA,MAAAC,YAAA,CAAA,MAAA,CAAA,EAAA,eAAA,CAAAC,QAAA,CAAA,MAAAC,gBAAA,CAAA,EAAA,oBAAAC,MAAA,CAAA,KAAA,CAAA,EAAA,cAAA,CAAAC,WAAA,CAAA,EAAA,eAAAC,aAAA,CAAA,EAAA,iBAAAN,SAAA,CAAA,QAAA,CAAA,EAAA,mBAAA,CAAAO,MAAA,CAAA,GAAAC,eAAA,CAAA,EAAA,oBAAAC,aAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,WAAA,CAAA,MAAA,CAAA,EAAA,gBAAA,CAAAC,YAAA,CAAA,GAAAC,UAAA,CAAA,GAAAC,MAAA,CAAA,QAAA,CAAA,EAAA,gBAAA,CAAAC,cAAA,CAAA,EAAA,oBAAA,CAAA,EAAA,UAAA,CAAAC,SAAA,CAAA,EAAA,aAAAC,QAAA,CAAA,IAAAC,KAAA,CAAA,IAAAC,KAAA,CAAA,MAAA,CAAA,EAAA,WAAA,CAAAC,UAAA,CAAA,IAAAC,iBAAA,CAAA,MAAA,CAAA,EAAA,aAAA,CAAApB,QAAA,CAAA,MAAAqB,SAAA,CAAA,KAAA,CAAA,EAAA,6BAAA,CAAAC,mBAAA,CAAA,IAAAC,iBAAA,CAAA,MAAA,CAAA,EAAA,yBAAA,CAAAC,cAAA,CAAA,EAAA,kBAAAC,qBAAA,CAAA,KAAA,0BAAAC,UAAA,CAAA,IAAAC,WAAA,CAAA,IAAAC,wBAAA,CAAA,IAAAC,wBAAA,CAAA,MAAA,CAAA,EAAA,aAAA,CAAAC,KAAA,CAAA,GAAAC,SAAA,CAAA,GAAAC,KAAA,CAAA,GAAAC,QAAA,CAAA,GAAAC,eAAA,CAAA,EAAA,oBAAAC,cAAA,CAAA,EAAA,mBAAAC,eAAA,CAAA,EAAA,mBAAAf,SAAA,CAAA,GAAAgB,aAAA,CAAA,MAAA,CAAA,EAAA,kBAAA,CAAAvC,SAAA,CAAA,KAAAwC,mBAAA,CAAA,EAAA,uBAAAC,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,8BAAA,yBAAA,CAAA,EAAA,eAAA,CAAA7C,KAAA,CAAA,IAAA8C,kBAAA,CAAA,IAAAC,gBAAA,CAAA,EAAA,qBAAAC,eAAA,CAAA,EAAA,mBAAAC,iBAAA,CAAA,IAAAC,cAAA,CAAA,MAAA,CAAA,EAAA,YAAA,CAAAC,gBAAA,CAAA,EAAA,oBAAAC,UAAA,CAAA,EAAA,cAAAC,gBAAA,CAAA,EAAA,qBAAA/B,QAAA,CAAA,IAAAC,KAAA,CAAA,IAAAC,KAAA,CAAA,SAAA5B","sourcesContent":["/*\n Stencil Client Patch Browser v2.13.0 | MIT Licensed | https://stenciljs.com\n */\nimport { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';\nimport { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@stencil/core';\nconst getDynamicImportFunction = (namespace) => `__sc_import_${namespace.replace(/\\s|-/g, '_')}`;\nconst patchBrowser = () => {\n // NOTE!! This fn cannot use async/await!\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo('Running in development mode.');\n }\n if (BUILD.cssVarShim) {\n // shim css vars\n plt.$cssShim$ = win.__cssshim;\n }\n if (BUILD.cloneNodeFix) {\n // opted-in to polyfill cloneNode() for slot polyfilled components\n patchCloneNodeFix(H.prototype);\n }\n if (BUILD.profile && !performance.mark) {\n // not all browsers support performance.mark/measure (Safari 10)\n performance.mark = performance.measure = () => {\n /*noop*/\n };\n performance.getEntriesByName = () => [];\n }\n // @ts-ignore\n const scriptElm = BUILD.scriptDataOpts || BUILD.safari10 || BUILD.dynamicImportShim\n ? Array.from(doc.querySelectorAll('script')).find((s) => new RegExp(`\\/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) ||\n s.getAttribute('data-stencil-namespace') === NAMESPACE)\n : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? scriptElm['data-opts'] || {} : {};\n if (BUILD.safari10 && 'onbeforeload' in scriptElm && !history.scrollRestoration /* IS_ESM_BUILD */) {\n // Safari < v11 support: This IF is true if it's Safari below v11.\n // This fn cannot use async/await since Safari didn't support it until v11,\n // however, Safari 10 did support modules. Safari 10 also didn't support \"nomodule\",\n // so both the ESM file and nomodule file would get downloaded. Only Safari\n // has 'onbeforeload' in the script, and \"history.scrollRestoration\" was added\n // to Safari in v11. Return a noop then() so the async/await ESM code doesn't continue.\n // IS_ESM_BUILD is replaced at build time so this check doesn't happen in systemjs builds.\n return {\n then() {\n /* promise noop */\n },\n };\n }\n if (!BUILD.safari10 && importMeta !== '') {\n opts.resourcesUrl = new URL('.', importMeta).href;\n }\n else if (BUILD.dynamicImportShim || BUILD.safari10) {\n opts.resourcesUrl = new URL('.', new URL(scriptElm.getAttribute('data-resources-url') || scriptElm.src, win.location.href)).href;\n if (BUILD.dynamicImportShim) {\n patchDynamicImport(opts.resourcesUrl, scriptElm);\n }\n if (BUILD.dynamicImportShim && !win.customElements) {\n // module support, but no custom elements support (Old Edge)\n // @ts-ignore\n return import(/* webpackChunkName: \"polyfills-dom\" */ './dom.js').then(() => opts);\n }\n }\n return promiseResolve(opts);\n};\nconst patchDynamicImport = (base, orgScriptElm) => {\n const importFunctionName = getDynamicImportFunction(NAMESPACE);\n try {\n // test if this browser supports dynamic imports\n // There is a caching issue in V8, that breaks using import() in Function\n // By generating a random string, we can workaround it\n // Check https://bugs.chromium.org/p/chromium/issues/detail?id=990810 for more info\n win[importFunctionName] = new Function('w', `return import(w);//${Math.random()}`);\n }\n catch (e) {\n // this shim is specifically for browsers that do support \"esm\" imports\n // however, they do NOT support \"dynamic\" imports\n // basically this code is for old Edge, v18 and below\n const moduleMap = new Map();\n win[importFunctionName] = (src) => {\n const url = new URL(src, base).href;\n let mod = moduleMap.get(url);\n if (!mod) {\n const script = doc.createElement('script');\n script.type = 'module';\n script.crossOrigin = orgScriptElm.crossOrigin;\n script.src = URL.createObjectURL(new Blob([`import * as m from '${url}'; window.${importFunctionName}.m = m;`], {\n type: 'application/javascript',\n }));\n mod = new Promise((resolve) => {\n script.onload = () => {\n resolve(win[importFunctionName].m);\n script.remove();\n };\n });\n moduleMap.set(url, mod);\n doc.head.appendChild(script);\n }\n return mod;\n };\n }\n};\nconst patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function (deep) {\n if (this.nodeName === 'TEMPLATE') {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n // Node.ATTRIBUTE_NODE === 2, and checking because IE11\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport { patchBrowser };\n","import { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(options => {\n globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"]}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
var __spreadArray=this&&this.__spreadArray||function(r,e){for(var t=0,n=e.length,a=r.length;t<n;t++,a++)r[a]=e[t];return r};System.register([],(function(r){"use strict";return{execute:function(){
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright Google Inc. All Rights Reserved.
|
|
5
|
-
*
|
|
6
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
-
* found in the LICENSE file at https://angular.io/license
|
|
8
|
-
*
|
|
9
|
-
* This file is a port of shadowCSS from webcomponents.js to TypeScript.
|
|
10
|
-
* https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js
|
|
11
|
-
* https://github.com/angular/angular/blob/master/packages/compiler/src/shadow_css.ts
|
|
12
|
-
*/
|
|
13
|
-
var e=function(r){var e=[];var t=0;var n;r=r.replace(/(\[[^\]]*\])/g,(function(r,n){var a="__ph-"+t+"__";e.push(n);t++;return a}));n=r.replace(/(:nth-[-\w]+)(\([^)]+\))/g,(function(r,n,a){var s="__ph-"+t+"__";e.push(a);t++;return n+s}));var a={content:n,placeholders:e};return a};var t=function(r,e){return e.replace(/__ph-(\d+)__/g,(function(e,t){return r[+t]}))};var n="-shadowcsshost";var a="-shadowcssslotted";var s="-shadowcsscontext";var o=")(?:\\(("+"(?:\\([^)(]*\\)|[^)(]*)+?"+")\\))?([^,{]*)";var c=new RegExp("("+n+o,"gim");var i=new RegExp("("+s+o,"gim");var v=new RegExp("("+a+o,"gim");var u=n+"-no-combinator";var l=/-shadowcsshost-no-combinator([^\s]*)/;var f=[/::shadow/g,/::content/g];var p="([>\\s~+[.,{:][\\s\\S]*)?$";var h=/-shadowcsshost/gim;var g=/:host/gim;var d=/::slotted/gim;var m=/:host-context/gim;var _=/\/\*\s*[\s\S]*?\*\//g;var x=function(r){return r.replace(_,"")};var w=/\/\*\s*#\s*source(Mapping)?URL=[\s\S]+?\*\//g;var S=function(r){return r.match(w)||[]};var b=/(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g;var W=/([{}])/g;var O=/(^.*?[^\\])??((:+)(.*)|$)/;var j="{";var E="}";var R="%BLOCK%";var k=function(r,e){var t=y(r);var n=0;return t.escapedString.replace(b,(function(){var r=[];for(var a=0;a<arguments.length;a++){r[a]=arguments[a]}var s=r[2];var o="";var c=r[4];var i="";if(c&&c.startsWith("{"+R)){o=t.blocks[n++];c=c.substring(R.length+1);i="{"}var v={selector:s,content:o};var u=e(v);return""+r[1]+u.selector+r[3]+i+u.content+c}))};var y=function(r){var e=r.split(W);var t=[];var n=[];var a=0;var s=[];for(var o=0;o<e.length;o++){var c=e[o];if(c===E){a--}if(a>0){s.push(c)}else{if(s.length>0){n.push(s.join(""));t.push(R);s=[]}t.push(c)}if(c===j){a++}}if(s.length>0){n.push(s.join(""));t.push(R)}var i={escapedString:t.join(""),blocks:n};return i};var T=function(r){r=r.replace(m,s).replace(g,n).replace(d,a);return r};var A=function(r,e,t){return r.replace(e,(function(){var r=[];for(var e=0;e<arguments.length;e++){r[e]=arguments[e]}if(r[2]){var n=r[2].split(",");var a=[];for(var s=0;s<n.length;s++){var o=n[s].trim();if(!o)break;a.push(t(u,o,r[3]))}return a.join(",")}else{return u+r[3]}}))};var C=function(r,e,t){return r+e.replace(n,"")+t};var L=function(r){return A(r,c,C)};var $=function(r,e,t){if(e.indexOf(n)>-1){return C(r,e,t)}else{return r+e+t+", "+e+" "+r+t}};var B=function(r,e){var t="."+e+" > ";var n=[];r=r.replace(v,(function(){var r=[];for(var e=0;e<arguments.length;e++){r[e]=arguments[e]}if(r[2]){var a=r[2].trim();var s=r[3];var o=t+a+s;var c="";for(var i=r[4]-1;i>=0;i--){var v=r[5][i];if(v==="}"||v===","){break}c=v+c}var l=c+o;var f=""+c.trimRight()+o.trim();if(l.trim()!==f.trim()){var p=f+", "+l;n.push({orgSelector:l,updatedSelector:p})}return o}else{return u+r[3]}}));return{selectors:n,cssText:r}};var I=function(r){return A(r,i,$)};var K=function(r){return f.reduce((function(r,e){return r.replace(e," ")}),r)};var M=function(r){var e=/\[/g;var t=/\]/g;r=r.replace(e,"\\[").replace(t,"\\]");return new RegExp("^("+r+")"+p,"m")};var U=function(r,e){var t=M(e);return!t.test(r)};var q=function(r,e){return r.replace(O,(function(r,t,n,a,s){if(t===void 0){t=""}if(a===void 0){a=""}if(s===void 0){s=""}return t+e+a+s}))};var z=function(r,e,t){h.lastIndex=0;if(h.test(r)){var n="."+t;return r.replace(l,(function(r,e){return q(e,n)})).replace(h,n+" ")}return e+" "+r};var D=function(r,n,a){var s=/\[is=([^\]]*)\]/g;n=n.replace(s,(function(r){var e=[];for(var t=1;t<arguments.length;t++){e[t-1]=arguments[t]}return e[0]}));var o="."+n;var c=function(r){var e=r.trim();if(!e){return""}if(r.indexOf(u)>-1){e=z(r,n,a)}else{var t=r.replace(h,"");if(t.length>0){e=q(t,o)}}return e};var i=e(r);r=i.content;var v="";var l=0;var f;var p=/( |>|\+|~(?!=))\s*/g;var g=r.indexOf(u)>-1;var d=!g;while((f=p.exec(r))!==null){var m=f[1];var _=r.slice(l,f.index).trim();d=d||_.indexOf(u)>-1;var x=d?c(_):_;v+=x+" "+m+" ";l=p.lastIndex}var w=r.substring(l);d=d||w.indexOf(u)>-1;v+=d?c(w):w;return t(i.placeholders,v)};var F=function(r,e,t,n){return r.split(",").map((function(r){if(n&&r.indexOf("."+n)>-1){return r.trim()}if(U(r,e)){return D(r,e,t).trim()}else{return r.trim()}})).join(", ")};var G=function(r,e,t,n,a){return k(r,(function(r){var a=r.selector;var s=r.content;if(r.selector[0]!=="@"){a=F(r.selector,e,t,n)}else if(r.selector.startsWith("@media")||r.selector.startsWith("@supports")||r.selector.startsWith("@page")||r.selector.startsWith("@document")){s=G(r.content,e,t,n)}var o={selector:a.replace(/\s{2,}/g," ").trim(),content:s};return o}))};var H=function(r,e,t,n,a){r=T(r);r=L(r);r=I(r);var s=B(r,n);r=s.cssText;r=K(r);if(e){r=G(r,e,t,n)}r=r.replace(/-shadowcsshost-no-combinator/g,"."+t);r=r.replace(/>\s*\*\s+([^{, ]+)/gm," $1 ");return{cssText:r.trim(),slottedSelectors:s.selectors}};var J=r("scopeCss",(function(r,e,t){var n=e+"-h";var a=e+"-s";var s=S(r);r=x(r);var o=[];if(t){var c=function(r){var e="/*!@___"+o.length+"___*/";var t="/*!@"+r.selector+"*/";o.push({placeholder:e,comment:t});r.selector=e+r.selector;return r};r=k(r,(function(r){if(r.selector[0]!=="@"){return c(r)}else if(r.selector.startsWith("@media")||r.selector.startsWith("@supports")||r.selector.startsWith("@page")||r.selector.startsWith("@document")){r.content=k(r.content,c);return r}return r}))}var i=H(r,e,n,a);r=__spreadArray([i.cssText],s).join("\n");if(t){o.forEach((function(e){var t=e.placeholder,n=e.comment;r=r.replace(t,n)}))}i.slottedSelectors.forEach((function(e){r=r.replace(e.orgSelector,e.updatedSelector)}));return r}))}}}));
|
|
14
|
-
//# sourceMappingURL=shadow-css-d573707f.system.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/@stencil/core/internal/client/shadow-css.js"],"names":["safeSelector","selector","placeholders","index","content","replace","_","keep","replaceBy","push","pseudo","exp","ss","restoreSafeSelector","_polyfillHost","_polyfillSlotted","_polyfillHostContext","_parenSuffix","_cssColonHostRe","RegExp","_cssColonHostContextRe","_cssColonSlottedRe","_polyfillHostNoCombinator","_polyfillHostNoCombinatorRe","_shadowDOMSelectorsRe","_selectorReSuffix","_polyfillHostRe","_colonHostRe","_colonSlottedRe","_colonHostContextRe","_commentRe","stripComments","input","_commentWithHashRe","extractCommentsWithHash","match","_ruleRe","_curlyRe","_selectorPartsRe","OPEN_CURLY","CLOSE_CURLY","BLOCK_PLACEHOLDER","processRules","ruleCallback","inputWithEscapedBlocks","escapeBlocks","nextBlockIndex","escapedString","m","_i","arguments","length","suffix","contentPrefix","startsWith","blocks","substring","cssRule","rule","inputParts","split","resultParts","escapedBlocks","bracketCount","currentBlockParts","partIndex","part","join","strEscapedBlocks","insertPolyfillHostInCssText","convertColonRule","cssText","regExp","partReplacer","parts","r","i","p","trim","colonHostPartReplacer","host","convertColonHost","colonHostContextPartReplacer","indexOf","convertColonSlotted","slotScopeId","slotClass","selectors","compound","slottedSelector","prefixSelector","char","orgSelector","addedSelector","trimRight","updatedSelector","convertColonHostContext","convertShadowDOMSelectors","reduce","result","pattern","makeScopeMatcher","scopeSelector","lre","rre","selectorNeedsScoping","re","test","injectScopingSelector","scopingSelector","before","_colonGroup","colon","after","applySimpleSelectorScope","hostSelector","lastIndex","replaceBy_1","applyStrictSelectorScope","isRe","className","_scopeSelectorPart","scopedP","t","safeContent","scopedSelector","startIndex","res","sep","hasHost","shouldScope","exec","separator","part_1","slice","scopedPart","scopeSelectorText","slotSelector","map","shallowPart","scopeSelectors","commentOriginalSelector","scopeCssText","scopeId","hostScopeId","slotted","slottedSelectors","scopeCss","exports","commentsWithHash","orgSelectors","processCommentedSelector_1","placeholder","comment","scoped","__spreadArray","forEach","_a"],"mappings":";;;;;;;;;;;;AAcA,IAAMA,EAAe,SAACC,GAClB,IAAMC,EAAe,GACrB,IAAIC,EAAQ,EACZ,IAAIC,EAGJH,EAAWA,EAASI,QAAQ,iBAAiB,SAACC,EAAGC,GAC7C,IAAMC,EAAY,QAAQL,EAAK,KAC/BD,EAAaO,KAAKF,GAClBJ,IACA,OAAOK,KAIXJ,EAAUH,EAASI,QAAQ,6BAA6B,SAACC,EAAGI,EAAQC,GAChE,IAAMH,EAAY,QAAQL,EAAK,KAC/BD,EAAaO,KAAKE,GAClBR,IACA,OAAOO,EAASF,KAEpB,IAAMI,EAAK,CACPR,QAAOA,EACPF,aAAYA,GAEhB,OAAOU,GAEX,IAAMC,EAAsB,SAACX,EAAcE,GACvC,OAAOA,EAAQC,QAAQ,iBAAiB,SAACC,EAAGH,GAAU,OAAAD,GAAcC,OAExE,IAAMW,EAAgB,iBACtB,IAAMC,EAAmB,oBAEzB,IAAMC,EAAuB,oBAC7B,IAAMC,EAAe,WAAa,4BAA8B,iBAChE,IAAMC,EAAkB,IAAIC,OAAO,IAAML,EAAgBG,EAAc,OACvE,IAAMG,EAAyB,IAAID,OAAO,IAAMH,EAAuBC,EAAc,OACrF,IAAMI,EAAqB,IAAIF,OAAO,IAAMJ,EAAmBE,EAAc,OAC7E,IAAMK,EAA4BR,EAAgB,iBAClD,IAAMS,EAA8B,uCACpC,IAAMC,EAAwB,CAAC,YAAa,cAC5C,IAAMC,EAAoB,6BAC1B,IAAMC,EAAkB,oBACxB,IAAMC,EAAe,WACrB,IAAMC,EAAkB,eACxB,IAAMC,EAAsB,mBAC5B,IAAMC,EAAa,uBACnB,IAAMC,EAAgB,SAACC,GACnB,OAAOA,EAAM3B,QAAQyB,EAAY,KAErC,IAAMG,EAAqB,+CAC3B,IAAMC,EAA0B,SAACF,GAC7B,OAAOA,EAAMG,MAAMF,IAAuB,IAE9C,IAAMG,EAAU,wDAChB,IAAMC,EAAW,UACjB,IAAMC,EAAmB,4BACzB,IAAMC,EAAa,IACnB,IAAMC,EAAc,IACpB,IAAMC,EAAoB,UAC1B,IAAMC,EAAe,SAACV,EAAOW,GACzB,IAAMC,EAAyBC,EAAab,GAC5C,IAAIc,EAAiB,EACrB,OAAOF,EAAuBG,cAAc1C,QAAQ+B,GAAS,WAAC,IAAAY,EAAA,OAAA,IAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAI,CAAJD,EAAAC,GAAAC,UAAAD,GAC1D,IAAMhD,EAAW+C,EAAE,GACnB,IAAI5C,EAAU,GACd,IAAIgD,EAASJ,EAAE,GACf,IAAIK,EAAgB,GACpB,GAAID,GAAUA,EAAOE,WAAW,IAAMb,GAAoB,CACtDrC,EAAUwC,EAAuBW,OAAOT,KACxCM,EAASA,EAAOI,UAAUf,EAAkBU,OAAS,GACrDE,EAAgB,IAEpB,IAAMI,EAAU,CACZxD,SAAQA,EACRG,QAAOA,GAEX,IAAMsD,EAAOf,EAAac,GAC1B,MAAO,GAAGT,EAAE,GAAKU,EAAKzD,SAAW+C,EAAE,GAAKK,EAAgBK,EAAKtD,QAAUgD,MAG/E,IAAMP,EAAe,SAACb,GAClB,IAAM2B,EAAa3B,EAAM4B,MAAMvB,GAC/B,IAAMwB,EAAc,GACpB,IAAMC,EAAgB,GACtB,IAAIC,EAAe,EACnB,IAAIC,EAAoB,GACxB,IAAK,IAAIC,EAAY,EAAGA,EAAYN,EAAWR,OAAQc,IAAa,CAChE,IAAMC,EAAOP,EAAWM,GACxB,GAAIC,IAAS1B,EAAa,CACtBuB,IAEJ,GAAIA,EAAe,EAAG,CAClBC,EAAkBvD,KAAKyD,OAEtB,CACD,GAAIF,EAAkBb,OAAS,EAAG,CAC9BW,EAAcrD,KAAKuD,EAAkBG,KAAK,KAC1CN,EAAYpD,KAAKgC,GACjBuB,EAAoB,GAExBH,EAAYpD,KAAKyD,GAErB,GAAIA,IAAS3B,EAAY,CACrBwB,KAGR,GAAIC,EAAkBb,OAAS,EAAG,CAC9BW,EAAcrD,KAAKuD,EAAkBG,KAAK,KAC1CN,EAAYpD,KAAKgC,GAErB,IAAM2B,EAAmB,CACrBrB,cAAec,EAAYM,KAAK,IAChCZ,OAAQO,GAEZ,OAAOM,GAEX,IAAMC,EAA8B,SAACpE,GACjCA,EAAWA,EACNI,QAAQwB,EAAqBb,GAC7BX,QAAQsB,EAAcb,GACtBT,QAAQuB,EAAiBb,GAC9B,OAAOd,GAEX,IAAMqE,EAAmB,SAACC,EAASC,EAAQC,GAEvC,OAAOF,EAAQlE,QAAQmE,GAAQ,WAAC,IAAAxB,EAAA,OAAA,IAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAI,CAAJD,EAAAC,GAAAC,UAAAD,GAC5B,GAAID,EAAE,GAAI,CACN,IAAM0B,EAAQ1B,EAAE,GAAGY,MAAM,KACzB,IAAMe,EAAI,GACV,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAMvB,OAAQyB,IAAK,CACnC,IAAMC,EAAIH,EAAME,GAAGE,OACnB,IAAKD,EACD,MACJF,EAAElE,KAAKgE,EAAanD,EAA2BuD,EAAG7B,EAAE,KAExD,OAAO2B,EAAER,KAAK,SAEb,CACD,OAAO7C,EAA4B0B,EAAE,QAIjD,IAAM+B,EAAwB,SAACC,EAAMd,EAAMd,GACvC,OAAO4B,EAAOd,EAAK7D,QAAQS,EAAe,IAAMsC,GAEpD,IAAM6B,EAAmB,SAACV,GACtB,OAAOD,EAAiBC,EAASrD,EAAiB6D,IAEtD,IAAMG,EAA+B,SAACF,EAAMd,EAAMd,GAC9C,GAAIc,EAAKiB,QAAQrE,IAAkB,EAAG,CAClC,OAAOiE,EAAsBC,EAAMd,EAAMd,OAExC,CACD,OAAO4B,EAAOd,EAAOd,EAAS,KAAOc,EAAO,IAAMc,EAAO5B,IAGjE,IAAMgC,EAAsB,SAACb,EAASc,GAClC,IAAMC,EAAY,IAAMD,EAAc,MACtC,IAAME,EAAY,GAClBhB,EAAUA,EAAQlE,QAAQgB,GAAoB,WAAC,IAAA2B,EAAA,OAAA,IAAAC,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAI,CAAJD,EAAAC,GAAAC,UAAAD,GAC3C,GAAID,EAAE,GAAI,CACN,IAAMwC,EAAWxC,EAAE,GAAG8B,OACtB,IAAM1B,EAASJ,EAAE,GACjB,IAAMyC,EAAkBH,EAAYE,EAAWpC,EAC/C,IAAIsC,EAAiB,GACrB,IAAK,IAAId,EAAI5B,EAAE,GAAK,EAAG4B,GAAK,EAAGA,IAAK,CAChC,IAAMe,EAAO3C,EAAE,GAAG4B,GAClB,GAAIe,IAAS,KAAOA,IAAS,IAAK,CAC9B,MAEJD,EAAiBC,EAAOD,EAE5B,IAAME,EAAcF,EAAiBD,EACrC,IAAMI,EAAgB,GAAGH,EAAeI,YAAcL,EAAgBX,OACtE,GAAIc,EAAYd,SAAWe,EAAcf,OAAQ,CAC7C,IAAMiB,EAAqBF,EAAa,KAAKD,EAC7CL,EAAU9E,KAAK,CACXmF,YAAWA,EACXG,gBAAeA,IAGvB,OAAON,MAEN,CACD,OAAOnE,EAA4B0B,EAAE,OAG7C,MAAO,CACHuC,UAASA,EACThB,QAAOA,IAGf,IAAMyB,EAA0B,SAACzB,GAC7B,OAAOD,EAAiBC,EAASnD,EAAwB8D,IAE7D,IAAMe,EAA4B,SAAC1B,GAC/B,OAAO/C,EAAsB0E,QAAO,SAACC,EAAQC,GAAY,OAAAD,EAAO9F,QAAQ+F,EAAS,OAAM7B,IAE3F,IAAM8B,EAAmB,SAACC,GACtB,IAAMC,EAAM,MACZ,IAAMC,EAAM,MACZF,EAAgBA,EAAcjG,QAAQkG,EAAK,OAAOlG,QAAQmG,EAAK,OAC/D,OAAO,IAAIrF,OAAO,KAAOmF,EAAgB,IAAM7E,EAAmB,MAEtE,IAAMgF,EAAuB,SAACxG,EAAUqG,GACpC,IAAMI,EAAKL,EAAiBC,GAC5B,OAAQI,EAAGC,KAAK1G,IAEpB,IAAM2G,EAAwB,SAAC3G,EAAU4G,GACrC,OAAO5G,EAASI,QAAQiC,GAAkB,SAAChC,EAAGwG,EAAaC,EAAaC,EAAYC,GAAtC,GAAAH,SAAA,EAAA,CAAAA,EAAA,GAA0B,GAAAE,SAAA,EAAA,CAAAA,EAAA,GAAY,GAAAC,SAAA,EAAA,CAAAA,EAAA,GAChF,OAAOH,EAASD,EAAkBG,EAAQC,MAGlD,IAAMC,EAA2B,SAACjH,EAAUqG,EAAea,GAEvDzF,EAAgB0F,UAAY,EAC5B,GAAI1F,EAAgBiF,KAAK1G,GAAW,CAChC,IAAMoH,EAAY,IAAIF,EACtB,OAAOlH,EACFI,QAAQkB,GAA6B,SAACjB,EAAGL,GAAa,OAAA2G,EAAsB3G,EAAUoH,MACtFhH,QAAQqB,EAAiB2F,EAAY,KAE9C,OAAOf,EAAgB,IAAMrG,GAEjC,IAAMqH,EAA2B,SAACrH,EAAUqG,EAAea,GACvD,IAAMI,EAAO,mBACbjB,EAAgBA,EAAcjG,QAAQkH,GAAM,SAACjH,GAAG,IAAAoE,EAAA,OAAA,IAAAzB,EAAA,EAAAA,EAAAC,UAAAC,OAAAF,IAAQ,CAARyB,EAAAzB,EAAA,GAAAC,UAAAD,GAAa,OAAAyB,EAAM,MACnE,IAAM8C,EAAY,IAAMlB,EACxB,IAAMmB,EAAqB,SAAC5C,GACxB,IAAI6C,EAAU7C,EAAEC,OAChB,IAAK4C,EAAS,CACV,MAAO,GAEX,GAAI7C,EAAEM,QAAQ7D,IAA8B,EAAG,CAC3CoG,EAAUR,EAAyBrC,EAAGyB,EAAea,OAEpD,CAED,IAAMQ,EAAI9C,EAAExE,QAAQqB,EAAiB,IACrC,GAAIiG,EAAExE,OAAS,EAAG,CACduE,EAAUd,EAAsBe,EAAGH,IAG3C,OAAOE,GAEX,IAAME,EAAc5H,EAAaC,GACjCA,EAAW2H,EAAYxH,QACvB,IAAIyH,EAAiB,GACrB,IAAIC,EAAa,EACjB,IAAIC,EACJ,IAAMC,EAAM,sBAYZ,IAAMC,EAAUhI,EAASkF,QAAQ7D,IAA8B,EAE/D,IAAI4G,GAAeD,EACnB,OAAQF,EAAMC,EAAIG,KAAKlI,MAAe,KAAM,CACxC,IAAMmI,EAAYL,EAAI,GACtB,IAAMM,EAAOpI,EAASqI,MAAMR,EAAYC,EAAI5H,OAAO2E,OACnDoD,EAAcA,GAAeG,EAAKlD,QAAQ7D,IAA8B,EACxE,IAAMiH,EAAaL,EAAcT,EAAmBY,GAAQA,EAC5DR,GAAqBU,EAAU,IAAIH,EAAS,IAC5CN,EAAaE,EAAIZ,UAErB,IAAMlD,EAAOjE,EAASuD,UAAUsE,GAChCI,EAAcA,GAAehE,EAAKiB,QAAQ7D,IAA8B,EACxEuG,GAAkBK,EAAcT,EAAmBvD,GAAQA,EAE3D,OAAOrD,EAAoB+G,EAAY1H,aAAc2H,IAEzD,IAAMvB,EAAgB,SAACrG,EAAUuI,EAAmBrB,EAAcsB,GAC9D,OAAOxI,EACF2D,MAAM,KACN8E,KAAI,SAACC,GACN,GAAIF,GAAgBE,EAAYxD,QAAQ,IAAMsD,IAAiB,EAAG,CAC9D,OAAOE,EAAY7D,OAEvB,GAAI2B,EAAqBkC,EAAaH,GAAoB,CACtD,OAAOlB,EAAyBqB,EAAaH,EAAmBrB,GAAcrC,WAE7E,CACD,OAAO6D,EAAY7D,WAGtBX,KAAK,OAEd,IAAMyE,EAAiB,SAACrE,EAASiE,EAAmBrB,EAAcsB,EAAcI,GAC5E,OAAOnG,EAAa6B,GAAS,SAACb,GAC1B,IAAIzD,EAAWyD,EAAKzD,SACpB,IAAIG,EAAUsD,EAAKtD,QACnB,GAAIsD,EAAKzD,SAAS,KAAO,IAAK,CAC1BA,EAAWqG,EAAc5C,EAAKzD,SAAUuI,EAAmBrB,EAAcsB,QAExE,GAAI/E,EAAKzD,SAASqD,WAAW,WAC9BI,EAAKzD,SAASqD,WAAW,cACzBI,EAAKzD,SAASqD,WAAW,UACzBI,EAAKzD,SAASqD,WAAW,aAAc,CACvClD,EAAUwI,EAAelF,EAAKtD,QAASoI,EAAmBrB,EAAcsB,GAE5E,IAAMhF,EAAU,CACZxD,SAAUA,EAASI,QAAQ,UAAW,KAAKyE,OAC3C1E,QAAOA,GAEX,OAAOqD,MAGf,IAAMqF,EAAe,SAACvE,EAASwE,EAASC,EAAa3D,EAAawD,GAC9DtE,EAAUF,EAA4BE,GACtCA,EAAUU,EAAiBV,GAC3BA,EAAUyB,EAAwBzB,GAClC,IAAM0E,EAAU7D,EAAoBb,EAASc,GAC7Cd,EAAU0E,EAAQ1E,QAClBA,EAAU0B,EAA0B1B,GACpC,GAAIwE,EAAS,CACTxE,EAAUqE,EAAerE,EAASwE,EAASC,EAAa3D,GAE5Dd,EAAUA,EAAQlE,QAAQ,gCAAiC,IAAI2I,GAC/DzE,EAAUA,EAAQlE,QAAQ,uBAAwB,QAClD,MAAO,CACHkE,QAASA,EAAQO,OACjBoE,iBAAkBD,EAAQ1D,YAG7B,IAAC4D,EAAQC,EAAA,YAAG,SAAC7E,EAASwE,EAASF,GAChC,IAAMG,EAAcD,EAAU,KAC9B,IAAM1D,EAAc0D,EAAU,KAC9B,IAAMM,EAAmBnH,EAAwBqC,GACjDA,EAAUxC,EAAcwC,GACxB,IAAM+E,EAAe,GACrB,GAAIT,EAAyB,CACzB,IAAMU,EAA2B,SAAC7F,GAC9B,IAAM8F,EAAc,UAAUF,EAAanG,OAAM,QACjD,IAAMsG,EAAU,OAAO/F,EAAKzD,SAAQ,KACpCqJ,EAAa7I,KAAK,CAAE+I,YAAWA,EAAEC,QAAOA,IACxC/F,EAAKzD,SAAWuJ,EAAc9F,EAAKzD,SACnC,OAAOyD,GAEXa,EAAU7B,EAAa6B,GAAS,SAACb,GAC7B,GAAIA,EAAKzD,SAAS,KAAO,IAAK,CAC1B,OAAOsJ,EAAyB7F,QAE/B,GAAIA,EAAKzD,SAASqD,WAAW,WAC9BI,EAAKzD,SAASqD,WAAW,cACzBI,EAAKzD,SAASqD,WAAW,UACzBI,EAAKzD,SAASqD,WAAW,aAAc,CACvCI,EAAKtD,QAAUsC,EAAagB,EAAKtD,QAASmJ,GAC1C,OAAO7F,EAEX,OAAOA,KAGf,IAAMgG,EAASZ,EAAavE,EAASwE,EAASC,EAAa3D,GAC3Dd,EAAUoF,cAAA,CAACD,EAAOnF,SAAY8E,GAAkBlF,KAAK,MACrD,GAAI0E,EAAyB,CACzBS,EAAaM,SAAQ,SAACC,OAAEL,EAAWK,EAAAL,YAAEC,EAAOI,EAAAJ,QACxClF,EAAUA,EAAQlE,QAAQmJ,EAAaC,MAG/CC,EAAOR,iBAAiBU,SAAQ,SAACnE,GAC7BlB,EAAUA,EAAQlE,QAAQoF,EAAgBG,YAAaH,EAAgBM,oBAE3E,OAAOxB","sourcesContent":["/*\n Stencil Client Platform v2.13.0 | MIT Licensed | https://stenciljs.com\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n *\n * This file is a port of shadowCSS from webcomponents.js to TypeScript.\n * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js\n * https://github.com/angular/angular/blob/master/packages/compiler/src/shadow_css.ts\n */\nconst safeSelector = (selector) => {\n const placeholders = [];\n let index = 0;\n let content;\n // Replaces attribute selectors with placeholders.\n // The WS in [attr=\"va lue\"] would otherwise be interpreted as a selector separator.\n selector = selector.replace(/(\\[[^\\]]*\\])/g, (_, keep) => {\n const replaceBy = `__ph-${index}__`;\n placeholders.push(keep);\n index++;\n return replaceBy;\n });\n // Replaces the expression in `:nth-child(2n + 1)` with a placeholder.\n // WS and \"+\" would otherwise be interpreted as selector separators.\n content = selector.replace(/(:nth-[-\\w]+)(\\([^)]+\\))/g, (_, pseudo, exp) => {\n const replaceBy = `__ph-${index}__`;\n placeholders.push(exp);\n index++;\n return pseudo + replaceBy;\n });\n const ss = {\n content,\n placeholders,\n };\n return ss;\n};\nconst restoreSafeSelector = (placeholders, content) => {\n return content.replace(/__ph-(\\d+)__/g, (_, index) => placeholders[+index]);\n};\nconst _polyfillHost = '-shadowcsshost';\nconst _polyfillSlotted = '-shadowcssslotted';\n// note: :host-context pre-processed to -shadowcsshostcontext.\nconst _polyfillHostContext = '-shadowcsscontext';\nconst _parenSuffix = ')(?:\\\\((' + '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' + ')\\\\))?([^,{]*)';\nconst _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim');\nconst _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim');\nconst _cssColonSlottedRe = new RegExp('(' + _polyfillSlotted + _parenSuffix, 'gim');\nconst _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';\nconst _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\\s]*)/;\nconst _shadowDOMSelectorsRe = [/::shadow/g, /::content/g];\nconst _selectorReSuffix = '([>\\\\s~+[.,{:][\\\\s\\\\S]*)?$';\nconst _polyfillHostRe = /-shadowcsshost/gim;\nconst _colonHostRe = /:host/gim;\nconst _colonSlottedRe = /::slotted/gim;\nconst _colonHostContextRe = /:host-context/gim;\nconst _commentRe = /\\/\\*\\s*[\\s\\S]*?\\*\\//g;\nconst stripComments = (input) => {\n return input.replace(_commentRe, '');\n};\nconst _commentWithHashRe = /\\/\\*\\s*#\\s*source(Mapping)?URL=[\\s\\S]+?\\*\\//g;\nconst extractCommentsWithHash = (input) => {\n return input.match(_commentWithHashRe) || [];\n};\nconst _ruleRe = /(\\s*)([^;\\{\\}]+?)(\\s*)((?:{%BLOCK%}?\\s*;?)|(?:\\s*;))/g;\nconst _curlyRe = /([{}])/g;\nconst _selectorPartsRe = /(^.*?[^\\\\])??((:+)(.*)|$)/;\nconst OPEN_CURLY = '{';\nconst CLOSE_CURLY = '}';\nconst BLOCK_PLACEHOLDER = '%BLOCK%';\nconst processRules = (input, ruleCallback) => {\n const inputWithEscapedBlocks = escapeBlocks(input);\n let nextBlockIndex = 0;\n return inputWithEscapedBlocks.escapedString.replace(_ruleRe, (...m) => {\n const selector = m[2];\n let content = '';\n let suffix = m[4];\n let contentPrefix = '';\n if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) {\n content = inputWithEscapedBlocks.blocks[nextBlockIndex++];\n suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1);\n contentPrefix = '{';\n }\n const cssRule = {\n selector,\n content,\n };\n const rule = ruleCallback(cssRule);\n return `${m[1]}${rule.selector}${m[3]}${contentPrefix}${rule.content}${suffix}`;\n });\n};\nconst escapeBlocks = (input) => {\n const inputParts = input.split(_curlyRe);\n const resultParts = [];\n const escapedBlocks = [];\n let bracketCount = 0;\n let currentBlockParts = [];\n for (let partIndex = 0; partIndex < inputParts.length; partIndex++) {\n const part = inputParts[partIndex];\n if (part === CLOSE_CURLY) {\n bracketCount--;\n }\n if (bracketCount > 0) {\n currentBlockParts.push(part);\n }\n else {\n if (currentBlockParts.length > 0) {\n escapedBlocks.push(currentBlockParts.join(''));\n resultParts.push(BLOCK_PLACEHOLDER);\n currentBlockParts = [];\n }\n resultParts.push(part);\n }\n if (part === OPEN_CURLY) {\n bracketCount++;\n }\n }\n if (currentBlockParts.length > 0) {\n escapedBlocks.push(currentBlockParts.join(''));\n resultParts.push(BLOCK_PLACEHOLDER);\n }\n const strEscapedBlocks = {\n escapedString: resultParts.join(''),\n blocks: escapedBlocks,\n };\n return strEscapedBlocks;\n};\nconst insertPolyfillHostInCssText = (selector) => {\n selector = selector\n .replace(_colonHostContextRe, _polyfillHostContext)\n .replace(_colonHostRe, _polyfillHost)\n .replace(_colonSlottedRe, _polyfillSlotted);\n return selector;\n};\nconst convertColonRule = (cssText, regExp, partReplacer) => {\n // m[1] = :host(-context), m[2] = contents of (), m[3] rest of rule\n return cssText.replace(regExp, (...m) => {\n if (m[2]) {\n const parts = m[2].split(',');\n const r = [];\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i].trim();\n if (!p)\n break;\n r.push(partReplacer(_polyfillHostNoCombinator, p, m[3]));\n }\n return r.join(',');\n }\n else {\n return _polyfillHostNoCombinator + m[3];\n }\n });\n};\nconst colonHostPartReplacer = (host, part, suffix) => {\n return host + part.replace(_polyfillHost, '') + suffix;\n};\nconst convertColonHost = (cssText) => {\n return convertColonRule(cssText, _cssColonHostRe, colonHostPartReplacer);\n};\nconst colonHostContextPartReplacer = (host, part, suffix) => {\n if (part.indexOf(_polyfillHost) > -1) {\n return colonHostPartReplacer(host, part, suffix);\n }\n else {\n return host + part + suffix + ', ' + part + ' ' + host + suffix;\n }\n};\nconst convertColonSlotted = (cssText, slotScopeId) => {\n const slotClass = '.' + slotScopeId + ' > ';\n const selectors = [];\n cssText = cssText.replace(_cssColonSlottedRe, (...m) => {\n if (m[2]) {\n const compound = m[2].trim();\n const suffix = m[3];\n const slottedSelector = slotClass + compound + suffix;\n let prefixSelector = '';\n for (let i = m[4] - 1; i >= 0; i--) {\n const char = m[5][i];\n if (char === '}' || char === ',') {\n break;\n }\n prefixSelector = char + prefixSelector;\n }\n const orgSelector = prefixSelector + slottedSelector;\n const addedSelector = `${prefixSelector.trimRight()}${slottedSelector.trim()}`;\n if (orgSelector.trim() !== addedSelector.trim()) {\n const updatedSelector = `${addedSelector}, ${orgSelector}`;\n selectors.push({\n orgSelector,\n updatedSelector,\n });\n }\n return slottedSelector;\n }\n else {\n return _polyfillHostNoCombinator + m[3];\n }\n });\n return {\n selectors,\n cssText,\n };\n};\nconst convertColonHostContext = (cssText) => {\n return convertColonRule(cssText, _cssColonHostContextRe, colonHostContextPartReplacer);\n};\nconst convertShadowDOMSelectors = (cssText) => {\n return _shadowDOMSelectorsRe.reduce((result, pattern) => result.replace(pattern, ' '), cssText);\n};\nconst makeScopeMatcher = (scopeSelector) => {\n const lre = /\\[/g;\n const rre = /\\]/g;\n scopeSelector = scopeSelector.replace(lre, '\\\\[').replace(rre, '\\\\]');\n return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');\n};\nconst selectorNeedsScoping = (selector, scopeSelector) => {\n const re = makeScopeMatcher(scopeSelector);\n return !re.test(selector);\n};\nconst injectScopingSelector = (selector, scopingSelector) => {\n return selector.replace(_selectorPartsRe, (_, before = '', _colonGroup, colon = '', after = '') => {\n return before + scopingSelector + colon + after;\n });\n};\nconst applySimpleSelectorScope = (selector, scopeSelector, hostSelector) => {\n // In Android browser, the lastIndex is not reset when the regex is used in String.replace()\n _polyfillHostRe.lastIndex = 0;\n if (_polyfillHostRe.test(selector)) {\n const replaceBy = `.${hostSelector}`;\n return selector\n .replace(_polyfillHostNoCombinatorRe, (_, selector) => injectScopingSelector(selector, replaceBy))\n .replace(_polyfillHostRe, replaceBy + ' ');\n }\n return scopeSelector + ' ' + selector;\n};\nconst applyStrictSelectorScope = (selector, scopeSelector, hostSelector) => {\n const isRe = /\\[is=([^\\]]*)\\]/g;\n scopeSelector = scopeSelector.replace(isRe, (_, ...parts) => parts[0]);\n const className = '.' + scopeSelector;\n const _scopeSelectorPart = (p) => {\n let scopedP = p.trim();\n if (!scopedP) {\n return '';\n }\n if (p.indexOf(_polyfillHostNoCombinator) > -1) {\n scopedP = applySimpleSelectorScope(p, scopeSelector, hostSelector);\n }\n else {\n // remove :host since it should be unnecessary\n const t = p.replace(_polyfillHostRe, '');\n if (t.length > 0) {\n scopedP = injectScopingSelector(t, className);\n }\n }\n return scopedP;\n };\n const safeContent = safeSelector(selector);\n selector = safeContent.content;\n let scopedSelector = '';\n let startIndex = 0;\n let res;\n const sep = /( |>|\\+|~(?!=))\\s*/g;\n // If a selector appears before :host it should not be shimmed as it\n // matches on ancestor elements and not on elements in the host's shadow\n // `:host-context(div)` is transformed to\n // `-shadowcsshost-no-combinatordiv, div -shadowcsshost-no-combinator`\n // the `div` is not part of the component in the 2nd selectors and should not be scoped.\n // Historically `component-tag:host` was matching the component so we also want to preserve\n // this behavior to avoid breaking legacy apps (it should not match).\n // The behavior should be:\n // - `tag:host` -> `tag[h]` (this is to avoid breaking legacy apps, should not match anything)\n // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a\n // `:host-context(tag)`)\n const hasHost = selector.indexOf(_polyfillHostNoCombinator) > -1;\n // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present\n let shouldScope = !hasHost;\n while ((res = sep.exec(selector)) !== null) {\n const separator = res[1];\n const part = selector.slice(startIndex, res.index).trim();\n shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;\n const scopedPart = shouldScope ? _scopeSelectorPart(part) : part;\n scopedSelector += `${scopedPart} ${separator} `;\n startIndex = sep.lastIndex;\n }\n const part = selector.substring(startIndex);\n shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1;\n scopedSelector += shouldScope ? _scopeSelectorPart(part) : part;\n // replace the placeholders with their original values\n return restoreSafeSelector(safeContent.placeholders, scopedSelector);\n};\nconst scopeSelector = (selector, scopeSelectorText, hostSelector, slotSelector) => {\n return selector\n .split(',')\n .map((shallowPart) => {\n if (slotSelector && shallowPart.indexOf('.' + slotSelector) > -1) {\n return shallowPart.trim();\n }\n if (selectorNeedsScoping(shallowPart, scopeSelectorText)) {\n return applyStrictSelectorScope(shallowPart, scopeSelectorText, hostSelector).trim();\n }\n else {\n return shallowPart.trim();\n }\n })\n .join(', ');\n};\nconst scopeSelectors = (cssText, scopeSelectorText, hostSelector, slotSelector, commentOriginalSelector) => {\n return processRules(cssText, (rule) => {\n let selector = rule.selector;\n let content = rule.content;\n if (rule.selector[0] !== '@') {\n selector = scopeSelector(rule.selector, scopeSelectorText, hostSelector, slotSelector);\n }\n else if (rule.selector.startsWith('@media') ||\n rule.selector.startsWith('@supports') ||\n rule.selector.startsWith('@page') ||\n rule.selector.startsWith('@document')) {\n content = scopeSelectors(rule.content, scopeSelectorText, hostSelector, slotSelector);\n }\n const cssRule = {\n selector: selector.replace(/\\s{2,}/g, ' ').trim(),\n content,\n };\n return cssRule;\n });\n};\nconst scopeCssText = (cssText, scopeId, hostScopeId, slotScopeId, commentOriginalSelector) => {\n cssText = insertPolyfillHostInCssText(cssText);\n cssText = convertColonHost(cssText);\n cssText = convertColonHostContext(cssText);\n const slotted = convertColonSlotted(cssText, slotScopeId);\n cssText = slotted.cssText;\n cssText = convertShadowDOMSelectors(cssText);\n if (scopeId) {\n cssText = scopeSelectors(cssText, scopeId, hostScopeId, slotScopeId);\n }\n cssText = cssText.replace(/-shadowcsshost-no-combinator/g, `.${hostScopeId}`);\n cssText = cssText.replace(/>\\s*\\*\\s+([^{, ]+)/gm, ' $1 ');\n return {\n cssText: cssText.trim(),\n slottedSelectors: slotted.selectors,\n };\n};\nconst scopeCss = (cssText, scopeId, commentOriginalSelector) => {\n const hostScopeId = scopeId + '-h';\n const slotScopeId = scopeId + '-s';\n const commentsWithHash = extractCommentsWithHash(cssText);\n cssText = stripComments(cssText);\n const orgSelectors = [];\n if (commentOriginalSelector) {\n const processCommentedSelector = (rule) => {\n const placeholder = `/*!@___${orgSelectors.length}___*/`;\n const comment = `/*!@${rule.selector}*/`;\n orgSelectors.push({ placeholder, comment });\n rule.selector = placeholder + rule.selector;\n return rule;\n };\n cssText = processRules(cssText, (rule) => {\n if (rule.selector[0] !== '@') {\n return processCommentedSelector(rule);\n }\n else if (rule.selector.startsWith('@media') ||\n rule.selector.startsWith('@supports') ||\n rule.selector.startsWith('@page') ||\n rule.selector.startsWith('@document')) {\n rule.content = processRules(rule.content, processCommentedSelector);\n return rule;\n }\n return rule;\n });\n }\n const scoped = scopeCssText(cssText, scopeId, hostScopeId, slotScopeId);\n cssText = [scoped.cssText, ...commentsWithHash].join('\\n');\n if (commentOriginalSelector) {\n orgSelectors.forEach(({ placeholder, comment }) => {\n cssText = cssText.replace(placeholder, comment);\n });\n }\n scoped.slottedSelectors.forEach((slottedSelector) => {\n cssText = cssText.replace(slottedSelector.orgSelector, slottedSelector.updatedSelector);\n });\n return cssText;\n};\n\nexport { scopeCss };\n"]}
|