@duetds/components 4.32.0 → 4.34.0
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/hydrate/index.js +2367 -244
- package/lib/cjs/{dom-a28e5c5f.js → dom-52a4f07a.js} +1 -1
- package/lib/cjs/duet-alert.cjs.entry.js +2 -2
- package/lib/cjs/duet-badge.cjs.entry.js +1 -1
- package/lib/cjs/duet-button_2.cjs.entry.js +4 -4
- package/lib/cjs/duet-caption_4.cjs.entry.js +18 -11
- package/lib/cjs/duet-card.cjs.entry.js +3 -3
- package/lib/cjs/duet-checkbox.cjs.entry.js +2 -2
- package/lib/cjs/duet-choice_2.cjs.entry.js +39 -18
- package/lib/cjs/duet-collapsible.cjs.entry.js +5 -450
- package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
- package/lib/cjs/duet-date-picker.cjs.entry.js +7 -7
- package/lib/cjs/duet-divider_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-editable-table-button.cjs.entry.js +96 -0
- package/lib/cjs/duet-editable-table_4.cjs.entry.js +1520 -0
- package/lib/cjs/duet-empty-state.cjs.entry.js +1 -1
- package/lib/cjs/duet-fieldset.cjs.entry.js +1 -1
- package/lib/cjs/duet-footer.cjs.entry.js +3 -3
- package/lib/cjs/duet-grid_2.cjs.entry.js +69 -4
- package/lib/cjs/duet-header_2.cjs.entry.js +216 -49
- package/lib/cjs/duet-hero.cjs.entry.js +2 -2
- package/lib/cjs/duet-icon.cjs.entry.js +8 -6
- package/lib/cjs/duet-input_2.cjs.entry.js +8 -9
- package/lib/cjs/duet-layout.cjs.entry.js +1 -1
- package/lib/cjs/duet-list_2.cjs.entry.js +3 -3
- package/lib/cjs/duet-modal.cjs.entry.js +3 -3
- package/lib/cjs/duet-notification_2.cjs.entry.js +3 -3
- package/lib/cjs/duet-number-input.cjs.entry.js +2 -2
- package/lib/cjs/duet-progress.cjs.entry.js +75 -0
- package/lib/cjs/duet-radio_2.cjs.entry.js +2 -2
- package/lib/cjs/duet-range-slider.cjs.entry.js +2 -2
- package/lib/cjs/duet-select.cjs.entry.js +5 -5
- package/lib/cjs/duet-step_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-tab_2.cjs.entry.js +3 -3
- package/lib/cjs/duet-textarea.cjs.entry.js +5 -5
- package/lib/cjs/duet-toggle.cjs.entry.js +1 -1
- package/lib/cjs/duet-tooltip.cjs.entry.js +2 -2
- package/lib/cjs/duet-tray.cjs.entry.js +3 -3
- package/lib/cjs/duet-upload-aria-status.cjs.entry.js +100 -0
- package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
- package/lib/cjs/duet.cjs.js +4 -4
- package/lib/cjs/{focus-utils-55b5a616.js → focus-utils-480ea4e0.js} +1 -1
- package/lib/cjs/form-search-d61b2843.js +8 -0
- package/lib/cjs/{index-03ed1f55.js → index-6966a494.js} +5 -2
- package/lib/cjs/{language-utils-48b8860b.js → language-utils-aa282901.js} +6 -2
- package/lib/cjs/loader.cjs.js +3 -3
- package/lib/cjs/{shadow-css-6560c90c.js → shadow-css-e1b62a99.js} +9 -10
- package/lib/cjs/token-utils-05bd23b4.js +77 -0
- package/lib/cjs/tokens-8596cece.js +459 -0
- package/lib/cjs/{tokens.module-53b3bd92.js → tokens.module-6b2df1c2.js} +2 -0
- package/lib/cjs/{watch-options-3877c082.js → watch-options-d88afac0.js} +29 -6
- package/lib/collection/collection-manifest.json +17 -3
- package/lib/collection/components/duet-checkbox/duet-checkbox.css +1 -1
- package/lib/collection/components/duet-choice/duet-choice.js +94 -21
- package/lib/collection/components/duet-collapsible/duet-collapsible.js +4 -1
- package/lib/collection/components/duet-date-picker/duet-date-picker.js +9 -9
- package/lib/collection/components/duet-editable-table/duet-editable-table-button.css +32 -0
- package/lib/collection/components/duet-editable-table/duet-editable-table-button.js +225 -0
- package/lib/collection/components/duet-editable-table/duet-editable-table-item.css +36 -0
- package/lib/collection/components/duet-editable-table/duet-editable-table-item.js +225 -0
- package/lib/collection/components/duet-editable-table/duet-editable-table-tabledata.js +13 -0
- package/lib/collection/components/duet-editable-table/duet-editable-table.css +16 -0
- package/lib/collection/components/duet-editable-table/duet-editable-table.js +404 -0
- package/lib/collection/components/duet-footer/duet-footer.css +1 -0
- package/lib/collection/components/duet-grid/duet-grid.js +74 -6
- package/lib/collection/components/duet-header/duet-header-dropdown.js +27 -0
- package/lib/collection/components/duet-header/duet-header-hamburger.js +9 -0
- package/lib/collection/components/duet-header/duet-header-icon.js +9 -0
- package/lib/collection/components/duet-header/duet-header.css +272 -39
- package/lib/collection/components/duet-header/duet-header.js +310 -122
- package/lib/collection/components/duet-heading/duet-heading.css +3 -0
- package/lib/collection/components/duet-heading/duet-heading.js +7 -6
- package/lib/collection/components/duet-icon/duet-icon.js +5 -3
- package/lib/collection/components/duet-input/duet-input.css +15 -0
- package/lib/collection/components/duet-input/duet-input.js +4 -4
- package/lib/collection/components/duet-link/duet-link.js +4 -1
- package/lib/collection/components/duet-list-item/duet-list-item.css +1 -1
- package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.css +4 -3
- package/lib/collection/components/duet-paragraph/duet-paragraph.css +6 -0
- package/lib/collection/components/duet-paragraph/duet-paragraph.js +34 -3
- package/lib/collection/components/duet-progress/duet-progress.css +103 -0
- package/lib/collection/components/duet-progress/duet-progress.js +240 -0
- package/lib/collection/components/duet-select/duet-select.css +15 -0
- package/lib/collection/components/duet-select/duet-select.js +3 -3
- package/lib/collection/components/duet-tab-group/duet-tab-group.css +2 -2
- package/lib/collection/components/duet-table/duet-table.css +42 -17
- package/lib/collection/components/duet-table/duet-table.js +2 -2
- package/lib/collection/components/duet-textarea/duet-textarea.css +19 -0
- package/lib/collection/components/duet-textarea/duet-textarea.js +5 -4
- package/lib/collection/components/duet-upload/duet-upload.css +64 -0
- package/lib/collection/components/duet-upload/duet-upload.js +1885 -0
- package/lib/collection/components/duet-upload/errorcodes.utils.js +32 -0
- package/lib/collection/components/duet-upload/mock.helpers.js +91 -0
- package/lib/collection/components/duet-upload/upload-editable-item-error.js +16 -0
- package/lib/collection/components/duet-upload/upload-editable-item-inprogres.js +8 -0
- package/lib/collection/components/duet-upload/upload-editable-item-success.js +30 -0
- package/lib/collection/components/duet-upload/upload-validators.js +93 -0
- package/lib/collection/components/duet-upload/upload.helpers.js +13 -0
- package/lib/collection/components/duet-upload/xhr.helpers.js +30 -0
- package/lib/collection/components/duet-upload-aria-status/duet-upload-aria-status.js +217 -0
- package/lib/collection/utils/js-utils.js +12 -0
- package/lib/collection/utils/language-utils.js +6 -3
- package/lib/collection/utils/template-utils.js +33 -0
- package/lib/collection/utils/token-utils.js +67 -14
- package/lib/collection/utils/watch-options.js +35 -6
- package/lib/custom-elements-bundle/index.d.ts +36 -0
- package/lib/custom-elements-bundle/index.js +2309 -334
- package/lib/duet/duet.esm.js +1 -1
- package/lib/duet/duet.js +1 -1
- package/lib/duet/{p-92103298.system.entry.js → p-07f43530.system.entry.js} +1 -1
- package/lib/duet/{p-cc0bd28f.system.entry.js → p-093bca2f.system.entry.js} +1 -1
- package/lib/duet/{p-a678da8c.entry.js → p-0aaf86ba.entry.js} +1 -1
- package/lib/duet/{p-94a5fd74.system.entry.js → p-0b0a05ed.system.entry.js} +1 -1
- package/lib/duet/{p-00eac879.system.entry.js → p-0be1c660.system.entry.js} +1 -1
- package/lib/duet/{p-3b3bac3f.system.entry.js → p-0d66e11b.system.entry.js} +1 -1
- package/lib/duet/{p-7331f2fe.system.entry.js → p-0de430e1.system.entry.js} +1 -1
- package/lib/duet/{p-3618aaee.entry.js → p-0ef8d711.entry.js} +1 -1
- package/lib/duet/p-12721178.js +4 -0
- package/lib/duet/{p-c19094dd.entry.js → p-12a08d77.entry.js} +1 -1
- package/lib/duet/p-15c9a17c.entry.js +4 -0
- package/lib/duet/{p-9cdd361e.js → p-183726f7.js} +0 -0
- package/lib/duet/{p-b75c5f13.entry.js → p-18c3eb54.entry.js} +1 -1
- package/lib/duet/{p-9542c540.entry.js → p-1b591fa4.entry.js} +1 -1
- package/lib/duet/{p-f364ce8b.system.entry.js → p-1bd0f4eb.system.entry.js} +1 -1
- package/lib/duet/p-2764f081.js +4 -0
- package/lib/duet/p-27bd8744.system.entry.js +4 -0
- package/lib/duet/p-289a31cb.entry.js +4 -0
- package/lib/duet/{p-8c511832.system.entry.js → p-29b352db.system.entry.js} +1 -1
- package/lib/duet/p-2a00f231.system.entry.js +4 -0
- package/lib/duet/p-3215e07e.system.entry.js +4 -0
- package/lib/duet/{p-ed479d09.system.entry.js → p-338b9955.system.entry.js} +1 -1
- package/lib/duet/{p-8740fa38.entry.js → p-33de1029.entry.js} +1 -1
- package/lib/duet/p-34ebff3b.entry.js +4 -0
- package/lib/duet/{p-b6a0caf8.system.entry.js → p-379d416f.system.entry.js} +1 -1
- package/lib/duet/{p-0b9b6393.entry.js → p-39a12eb9.entry.js} +1 -1
- package/lib/duet/{p-8652a7ab.system.entry.js → p-39fd8b43.system.entry.js} +1 -1
- package/lib/duet/{p-ffc2ffff.entry.js → p-3bafdf7c.entry.js} +1 -1
- package/lib/duet/{p-4fcbcecd.system.entry.js → p-3c1ce7e2.system.entry.js} +1 -1
- package/lib/duet/p-3da6b84e.entry.js +4 -0
- package/lib/duet/p-43c49a72.entry.js +4 -0
- package/lib/duet/{p-9f0f5674.entry.js → p-44f4b8ff.entry.js} +1 -1
- package/lib/duet/{p-b0bbbdba.system.entry.js → p-4c5ac0c2.system.entry.js} +1 -1
- package/lib/duet/p-50b4fb2c.js +4 -0
- package/lib/duet/p-51f7ae72.entry.js +4 -0
- package/lib/duet/p-52621211.js +15 -0
- package/lib/duet/{p-2a3411b5.system.entry.js → p-5443c9ca.system.entry.js} +1 -1
- package/lib/duet/{p-abd3bfb4.system.entry.js → p-5610db77.system.entry.js} +1 -1
- package/lib/duet/{p-2c0dd9ba.system.entry.js → p-5b409bfb.system.entry.js} +1 -1
- package/lib/duet/{p-807b2087.entry.js → p-6353407f.entry.js} +1 -1
- package/lib/duet/{p-a89e88a3.js → p-64bf94ee.js} +1 -1
- package/lib/duet/{p-2c679963.entry.js → p-64e915ae.entry.js} +1 -1
- package/lib/duet/{p-432ba72e.system.entry.js → p-6c237f21.system.entry.js} +1 -1
- package/lib/duet/p-6c8521f6.system.entry.js +4 -0
- package/lib/duet/{p-a962c8c1.system.js → p-6e4fd6ba.system.js} +0 -0
- package/lib/duet/p-70fafc98.system.js +4 -0
- package/lib/duet/{p-8002a095.entry.js → p-7347f4ac.entry.js} +1 -1
- package/lib/duet/{p-d13874cb.entry.js → p-781bd6db.entry.js} +1 -1
- package/lib/duet/{p-5a817929.system.entry.js → p-78e8a689.system.entry.js} +1 -1
- package/lib/duet/p-8143f3de.js +4 -0
- package/lib/duet/p-81e855e4.system.js +4 -0
- package/lib/duet/{p-84ece735.entry.js → p-8224d768.entry.js} +1 -1
- package/lib/duet/{p-43dde575.system.entry.js → p-848bb1c2.system.entry.js} +1 -1
- package/lib/duet/{p-1391ec53.entry.js → p-880a4afe.entry.js} +1 -1
- package/lib/duet/p-8c375429.entry.js +4 -0
- package/lib/duet/p-8cb71174.system.entry.js +4 -0
- package/lib/duet/p-8d7b68c4.entry.js +4 -0
- package/lib/duet/p-8f477bd6.system.js +4 -0
- package/lib/duet/p-969c6395.system.entry.js +4 -0
- package/lib/duet/p-9c234242.system.entry.js +4 -0
- package/lib/duet/{p-f13a0883.entry.js → p-9d7b9084.entry.js} +1 -1
- package/lib/duet/p-a0544097.system.entry.js +4 -0
- package/lib/duet/p-a16a58c1.system.js +4 -0
- package/lib/duet/{p-fb898d94.system.entry.js → p-a4a16d03.system.entry.js} +1 -1
- package/lib/duet/p-a4e3b44b.entry.js +4 -0
- package/lib/duet/{p-977f2826.entry.js → p-a91673cf.entry.js} +1 -1
- package/lib/duet/p-a926944f.entry.js +4 -0
- package/lib/duet/{p-2826f987.js → p-ad07f399.js} +1 -1
- package/lib/duet/p-b08bce4c.entry.js +4 -0
- package/lib/duet/{p-ec3eef3a.entry.js → p-b48a5f80.entry.js} +1 -1
- package/lib/duet/p-bb3e3777.entry.js +4 -0
- package/lib/duet/{p-fbb7d194.entry.js → p-bbe33d02.entry.js} +1 -1
- package/lib/duet/p-be8e1c48.system.entry.js +4 -0
- package/lib/duet/{p-68d09837.system.entry.js → p-c56c73ee.system.entry.js} +1 -1
- package/lib/duet/p-c63bdc6a.system.entry.js +4 -0
- package/lib/duet/{p-c723d36e.system.js → p-c83685a6.system.js} +1 -1
- package/lib/duet/p-c8dfc958.system.entry.js +4 -0
- package/lib/duet/{p-6cf41bfe.system.entry.js → p-c92f601f.system.entry.js} +1 -1
- package/lib/duet/p-d004da5f.js +4 -0
- package/lib/duet/p-d49416f8.entry.js +4 -0
- package/lib/duet/{p-7a868085.entry.js → p-d581d82d.entry.js} +1 -1
- package/lib/duet/p-d6bb4301.entry.js +4 -0
- package/lib/duet/p-d9aadc15.entry.js +4 -0
- package/lib/duet/p-ddb6344c.system.js +4 -0
- package/lib/duet/{p-3040debf.entry.js → p-dde63979.entry.js} +1 -1
- package/lib/duet/p-e15ccddc.system.entry.js +4 -0
- package/lib/duet/{p-0f2a478e.entry.js → p-e1be37a6.entry.js} +1 -1
- package/lib/duet/p-e5c1751e.system.js +16 -0
- package/lib/duet/{p-b9683731.entry.js → p-e9209e9f.entry.js} +1 -1
- package/lib/duet/p-eb55ccd2.system.js +4 -0
- package/lib/duet/{p-b374d7c2.system.js → p-ee1ba0d4.system.js} +1 -1
- package/lib/duet/{p-57cb58d4.system.entry.js → p-f4a29a8a.system.entry.js} +2 -2
- package/lib/duet/p-f8a0bd32.system.entry.js +4 -0
- package/lib/duet/p-f9599dd9.system.entry.js +4 -0
- package/lib/duet/p-fa99eaa4.system.js +4 -0
- package/lib/duet/p-fd7018e9.js +4 -0
- package/lib/duet/{p-19c28d99.system.entry.js → p-fe0cca67.system.entry.js} +1 -1
- package/lib/esm/{dom-8516b24e.js → dom-5d060ace.js} +1 -1
- package/lib/esm/duet-alert.entry.js +2 -2
- package/lib/esm/duet-badge.entry.js +1 -1
- package/lib/esm/duet-button_2.entry.js +4 -4
- package/lib/esm/duet-caption_4.entry.js +18 -11
- package/lib/esm/duet-card.entry.js +3 -3
- package/lib/esm/duet-checkbox.entry.js +2 -2
- package/lib/esm/duet-choice_2.entry.js +40 -19
- package/lib/esm/duet-collapsible.entry.js +4 -449
- package/lib/esm/duet-cookie-consent.entry.js +1 -1
- package/lib/esm/duet-date-picker.entry.js +7 -7
- package/lib/esm/duet-divider_2.entry.js +1 -1
- package/lib/esm/duet-editable-table-button.entry.js +92 -0
- package/lib/esm/duet-editable-table_4.entry.js +1513 -0
- package/lib/esm/duet-empty-state.entry.js +1 -1
- package/lib/esm/duet-fieldset.entry.js +1 -1
- package/lib/esm/duet-footer.entry.js +3 -3
- package/lib/esm/duet-grid_2.entry.js +69 -4
- package/lib/esm/duet-header_2.entry.js +216 -49
- package/lib/esm/duet-hero.entry.js +2 -2
- package/lib/esm/duet-icon.entry.js +8 -6
- package/lib/esm/duet-input_2.entry.js +7 -8
- package/lib/esm/duet-layout.entry.js +1 -1
- package/lib/esm/duet-list_2.entry.js +3 -3
- package/lib/esm/duet-modal.entry.js +3 -3
- package/lib/esm/duet-notification_2.entry.js +3 -3
- package/lib/esm/duet-number-input.entry.js +2 -2
- package/lib/esm/duet-progress.entry.js +71 -0
- package/lib/esm/duet-radio_2.entry.js +2 -2
- package/lib/esm/duet-range-slider.entry.js +2 -2
- package/lib/esm/duet-select.entry.js +5 -5
- package/lib/esm/duet-step_2.entry.js +1 -1
- package/lib/esm/duet-tab_2.entry.js +3 -3
- package/lib/esm/duet-textarea.entry.js +5 -5
- package/lib/esm/duet-toggle.entry.js +1 -1
- package/lib/esm/duet-tooltip.entry.js +2 -2
- package/lib/esm/duet-tray.entry.js +3 -3
- package/lib/esm/duet-upload-aria-status.entry.js +96 -0
- package/lib/esm/duet-visually-hidden.entry.js +1 -1
- package/lib/esm/duet.js +4 -4
- package/lib/esm/{focus-utils-6a282066.js → focus-utils-48837cfa.js} +1 -1
- package/lib/esm/form-search-ea8e19ae.js +6 -0
- package/lib/esm/{index-3a265449.js → index-80be4170.js} +5 -2
- package/lib/esm/{language-utils-d5c38f65.js → language-utils-344d894c.js} +6 -3
- package/lib/esm/loader.js +3 -3
- package/lib/esm/{shadow-css-9178c864.js → shadow-css-13d024f4.js} +9 -10
- package/lib/esm/token-utils-75f78ca4.js +75 -0
- package/lib/esm/tokens-e110dc89.js +453 -0
- package/lib/esm/{tokens.module-edb66c04.js → tokens.module-49cbf963.js} +3 -1
- package/lib/esm/watch-options-dd55bce8.js +57 -0
- package/lib/esm-es5/{dom-8516b24e.js → dom-5d060ace.js} +0 -0
- package/lib/esm-es5/duet-alert.entry.js +1 -1
- package/lib/esm-es5/duet-badge.entry.js +1 -1
- package/lib/esm-es5/duet-button_2.entry.js +1 -1
- package/lib/esm-es5/duet-caption_4.entry.js +2 -2
- package/lib/esm-es5/duet-card.entry.js +1 -1
- package/lib/esm-es5/duet-checkbox.entry.js +1 -1
- package/lib/esm-es5/duet-choice_2.entry.js +2 -2
- package/lib/esm-es5/duet-collapsible.entry.js +2 -2
- package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
- package/lib/esm-es5/duet-date-picker.entry.js +1 -1
- package/lib/esm-es5/duet-divider_2.entry.js +1 -1
- package/lib/esm-es5/duet-editable-table-button.entry.js +4 -0
- package/lib/esm-es5/duet-editable-table_4.entry.js +4 -0
- package/lib/esm-es5/duet-empty-state.entry.js +1 -1
- package/lib/esm-es5/duet-fieldset.entry.js +1 -1
- package/lib/esm-es5/duet-footer.entry.js +1 -1
- package/lib/esm-es5/duet-grid_2.entry.js +2 -2
- package/lib/esm-es5/duet-header_2.entry.js +2 -2
- package/lib/esm-es5/duet-hero.entry.js +1 -1
- package/lib/esm-es5/duet-icon.entry.js +1 -1
- package/lib/esm-es5/duet-input_2.entry.js +1 -1
- package/lib/esm-es5/duet-layout.entry.js +1 -1
- package/lib/esm-es5/duet-list_2.entry.js +1 -1
- package/lib/esm-es5/duet-modal.entry.js +1 -1
- package/lib/esm-es5/duet-notification_2.entry.js +1 -1
- package/lib/esm-es5/duet-number-input.entry.js +1 -1
- package/lib/esm-es5/duet-progress.entry.js +4 -0
- package/lib/esm-es5/duet-radio_2.entry.js +1 -1
- package/lib/esm-es5/duet-range-slider.entry.js +1 -1
- package/lib/esm-es5/duet-select.entry.js +1 -1
- package/lib/esm-es5/duet-step_2.entry.js +1 -1
- package/lib/esm-es5/duet-tab_2.entry.js +2 -2
- package/lib/esm-es5/duet-textarea.entry.js +1 -1
- package/lib/esm-es5/duet-toggle.entry.js +1 -1
- package/lib/esm-es5/duet-tooltip.entry.js +1 -1
- package/lib/esm-es5/duet-tray.entry.js +1 -1
- package/lib/esm-es5/duet-upload-aria-status.entry.js +4 -0
- package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
- package/lib/esm-es5/duet.js +1 -1
- package/lib/esm-es5/focus-utils-48837cfa.js +4 -0
- package/lib/esm-es5/form-search-ea8e19ae.js +4 -0
- package/lib/esm-es5/index-80be4170.js +4 -0
- package/lib/esm-es5/{language-utils-d5c38f65.js → language-utils-344d894c.js} +1 -1
- package/lib/esm-es5/loader.js +1 -1
- package/lib/esm-es5/shadow-css-13d024f4.js +15 -0
- package/lib/esm-es5/token-utils-75f78ca4.js +4 -0
- package/lib/esm-es5/tokens-e110dc89.js +4 -0
- package/lib/esm-es5/tokens.module-49cbf963.js +4 -0
- package/lib/esm-es5/watch-options-dd55bce8.js +4 -0
- package/lib/types/common-types.d.ts +0 -1
- package/lib/types/components/duet-choice/duet-choice.d.ts +20 -1
- package/lib/types/components/duet-collapsible/duet-collapsible.d.ts +3 -0
- package/lib/types/components/duet-date-picker/duet-date-picker.d.ts +5 -5
- package/lib/types/components/duet-editable-table/duet-editable-table-button.d.ts +73 -0
- package/lib/types/components/duet-editable-table/duet-editable-table-item.d.ts +76 -0
- package/lib/types/components/duet-editable-table/duet-editable-table-tabledata.d.ts +8 -0
- package/lib/types/components/duet-editable-table/duet-editable-table.d.ts +94 -0
- package/lib/types/components/duet-grid/duet-grid.d.ts +17 -2
- package/lib/types/components/duet-header/duet-header-dropdown.d.ts +16 -0
- package/lib/types/components/duet-header/duet-header-hamburger.d.ts +2 -0
- package/lib/types/components/duet-header/duet-header-icon.d.ts +8 -0
- package/lib/types/components/duet-header/duet-header.d.ts +41 -4
- package/lib/types/components/duet-heading/duet-heading.d.ts +2 -2
- package/lib/types/components/duet-link/duet-link.d.ts +3 -0
- package/lib/types/components/duet-paragraph/duet-paragraph.d.ts +9 -1
- package/lib/types/components/duet-progress/duet-progress.d.ts +64 -0
- package/lib/types/components/duet-table/duet-table.d.ts +1 -1
- package/lib/types/components/duet-upload/duet-upload.d.ts +408 -0
- package/lib/types/components/duet-upload/errorcodes.utils.d.ts +8 -0
- package/lib/types/components/duet-upload/mock.helpers.d.ts +2 -0
- package/lib/types/components/duet-upload/upload-editable-item-error.d.ts +7 -0
- package/lib/types/components/duet-upload/upload-editable-item-inprogres.d.ts +7 -0
- package/lib/types/components/duet-upload/upload-editable-item-success.d.ts +8 -0
- package/lib/types/components/duet-upload/upload-validators.d.ts +12 -0
- package/lib/types/components/duet-upload/upload.helpers.d.ts +1 -0
- package/lib/types/components/duet-upload/xhr.helpers.d.ts +18 -0
- package/lib/types/components/duet-upload-aria-status/duet-upload-aria-status.d.ts +49 -0
- package/lib/types/components.d.ts +835 -29
- package/lib/types/stencil-public-runtime.d.ts +6 -4
- package/lib/types/utils/js-utils.d.ts +1 -0
- package/lib/types/utils/language-utils.d.ts +5 -1
- package/lib/types/utils/template-utils.d.ts +13 -0
- package/lib/types/utils/token-utils.d.ts +8 -2
- package/lib/types/utils/watch-options.d.ts +2 -0
- package/package.json +13 -13
- package/lib/cjs/duet-table.cjs.entry.js +0 -132
- package/lib/cjs/token-utils-13e5d13e.js +0 -30
- package/lib/duet/p-0058512b.js +0 -4
- package/lib/duet/p-08729381.entry.js +0 -4
- package/lib/duet/p-0b00e8d6.system.js +0 -16
- package/lib/duet/p-15922601.system.js +0 -4
- package/lib/duet/p-194e25ce.system.entry.js +0 -4
- package/lib/duet/p-1d87ea02.system.entry.js +0 -4
- package/lib/duet/p-2d1e2b23.system.entry.js +0 -4
- package/lib/duet/p-322d1c38.js +0 -4
- package/lib/duet/p-40d68321.entry.js +0 -4
- package/lib/duet/p-418b2ce7.system.js +0 -4
- package/lib/duet/p-43e39d98.system.js +0 -4
- package/lib/duet/p-4603830b.entry.js +0 -4
- package/lib/duet/p-52d7fbec.entry.js +0 -4
- package/lib/duet/p-60478325.system.entry.js +0 -4
- package/lib/duet/p-64ed7add.entry.js +0 -4
- package/lib/duet/p-6a356ab1.system.js +0 -4
- package/lib/duet/p-72fd384a.entry.js +0 -4
- package/lib/duet/p-753b406c.entry.js +0 -4
- package/lib/duet/p-76c00d0c.entry.js +0 -4
- package/lib/duet/p-85fe1132.js +0 -4
- package/lib/duet/p-8c8e82aa.system.js +0 -4
- package/lib/duet/p-9a89ec39.js +0 -4
- package/lib/duet/p-a11df1b6.js +0 -15
- package/lib/duet/p-a1eccee1.system.entry.js +0 -4
- package/lib/duet/p-ade33230.entry.js +0 -4
- package/lib/duet/p-b04d738f.system.entry.js +0 -4
- package/lib/duet/p-cb827bb7.entry.js +0 -4
- package/lib/duet/p-d85fba2c.system.entry.js +0 -4
- package/lib/duet/p-dfa90f8a.system.entry.js +0 -4
- package/lib/duet/p-e6b9bd1d.entry.js +0 -4
- package/lib/duet/p-ee64d6be.system.entry.js +0 -4
- package/lib/duet/p-f113671b.system.entry.js +0 -4
- package/lib/duet/p-f2f04396.entry.js +0 -4
- package/lib/duet/p-fc6624fe.system.entry.js +0 -4
- package/lib/esm/duet-table.entry.js +0 -128
- package/lib/esm/token-utils-5a35377f.js +0 -28
- package/lib/esm/watch-options-de55ea78.js +0 -35
- package/lib/esm-es5/duet-table.entry.js +0 -4
- package/lib/esm-es5/focus-utils-6a282066.js +0 -4
- package/lib/esm-es5/index-3a265449.js +0 -4
- package/lib/esm-es5/shadow-css-9178c864.js +0 -15
- package/lib/esm-es5/token-utils-5a35377f.js +0 -4
- package/lib/esm-es5/tokens.module-edb66c04.js +0 -4
- package/lib/esm-es5/watch-options-de55ea78.js +0 -4
|
@@ -1,31 +1,43 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import searchIcon from "@duetds/icons/lib/assets/form-search";
|
|
5
5
|
import contactDropdownIcon from "@duetds/icons/lib/assets/navigation-contact-dropdown";
|
|
6
6
|
import languageIcon from "@duetds/icons/lib/assets/navigation-language";
|
|
7
7
|
import loginIcon from "@duetds/icons/lib/assets/navigation-login";
|
|
8
8
|
import logoutIcon from "@duetds/icons/lib/assets/navigation-logout";
|
|
9
9
|
import userIcon from "@duetds/icons/lib/assets/navigation-user";
|
|
10
|
-
import {
|
|
10
|
+
import { media_query_large } from "@duetds/tokens/lib/tokens.json";
|
|
11
|
+
import { Build, Component, Element, Event, Fragment, h, Host, Listen, Method, Prop, State, Watch, } from "@stencil/core";
|
|
11
12
|
import { disableBodyScroll, enableBodyScroll } from "body-scroll-lock/lib/bodyScrollLock.es6.js";
|
|
12
13
|
import { DuetStringsExternalDefaults } from "../../common-strings";
|
|
13
14
|
import { isArrowDownKey, isArrowLeftKey, isArrowRightKey, isArrowUpKey, isEscapeKey, isSpaceKey, } from "../../utils/keyboard-utils";
|
|
14
15
|
import { getLanguage, getLocaleString } from "../../utils/language-utils";
|
|
15
16
|
import { parsePossibleJSON } from "../../utils/string-utils";
|
|
16
17
|
import { inheritGlobalTheme } from "../../utils/themeable-component";
|
|
18
|
+
import { DuetHeaderDropdown } from "./duet-header-dropdown";
|
|
19
|
+
import { DuetHeaderHamburger } from "./duet-header-hamburger";
|
|
20
|
+
import { DuetHeaderIcon } from "./duet-header-icon";
|
|
17
21
|
const createEvent = (ev, data) => ({
|
|
18
22
|
component: "duet-header",
|
|
19
23
|
data,
|
|
20
24
|
originalEvent: ev,
|
|
21
25
|
});
|
|
22
26
|
/**
|
|
23
|
-
* @slot utility - A slot for utilities, such as a notification drawer
|
|
24
|
-
* @slot logo-utility - A slot to place elements alongside the logo. This takes precedence over the **region** prop.
|
|
27
|
+
* @slot utility - A slot for utilities, such as a notification drawer or shopping basket.
|
|
28
|
+
* @slot logo-utility - A slot to place elements alongside the logo. This takes precedence over the **region** prop. Note: not available in desktop multilevel header.
|
|
25
29
|
*/
|
|
26
30
|
export class DuetHeader {
|
|
27
31
|
constructor() {
|
|
32
|
+
var _a;
|
|
33
|
+
/**
|
|
34
|
+
* Own Properties
|
|
35
|
+
*/
|
|
36
|
+
this.subMenuItemRefs = {};
|
|
37
|
+
this.subMenuButtonRefs = {};
|
|
28
38
|
this.hasLanguageChanged = false;
|
|
39
|
+
this.mql = [window.matchMedia(media_query_large.replace(/'/g, ""))];
|
|
40
|
+
this.boundMqlFunctions = [];
|
|
29
41
|
/**
|
|
30
42
|
* State() variables
|
|
31
43
|
* Inlined decorator, alphabetical order.
|
|
@@ -33,12 +45,17 @@ export class DuetHeader {
|
|
|
33
45
|
this.isContactOpen = false;
|
|
34
46
|
this.isLanguageOpen = false;
|
|
35
47
|
this.isSlideOutOpen = false;
|
|
48
|
+
this.isSegmentOpen = false;
|
|
49
|
+
this.openMenu = null;
|
|
50
|
+
this.closedActives = null;
|
|
36
51
|
this.processedItems = null;
|
|
37
52
|
this.processedLanguageItems = null;
|
|
38
53
|
this.processedContactItems = null;
|
|
39
54
|
this.processedSession = null;
|
|
55
|
+
this.processedSearch = null;
|
|
40
56
|
this.processedUser = null;
|
|
41
57
|
this.processedBack = null;
|
|
58
|
+
this.renderDesktopNav = (_a = this.mql[0]) === null || _a === void 0 ? void 0 : _a.matches;
|
|
42
59
|
/**
|
|
43
60
|
* Theme of the header.
|
|
44
61
|
*/
|
|
@@ -144,6 +161,7 @@ export class DuetHeader {
|
|
|
144
161
|
this.logoHref = "/";
|
|
145
162
|
/**
|
|
146
163
|
* The href of the current page item that is shown as “active”.
|
|
164
|
+
* Note: not available in multilevel headers.
|
|
147
165
|
*/
|
|
148
166
|
this.currentHref = "/";
|
|
149
167
|
/**
|
|
@@ -153,10 +171,12 @@ export class DuetHeader {
|
|
|
153
171
|
this.skipToId = "";
|
|
154
172
|
/**
|
|
155
173
|
* Region that is shown next to the logo. If empty, region will be hidden.
|
|
174
|
+
* Note: not available in desktop multilevel header.
|
|
156
175
|
*/
|
|
157
176
|
this.region = "";
|
|
158
177
|
/**
|
|
159
178
|
* Label of the contact menu. If empty, contact menu will be hidden.
|
|
179
|
+
* Note: not available in multilevel headers.
|
|
160
180
|
*/
|
|
161
181
|
this.contact = "";
|
|
162
182
|
this.handleClick = (event) => {
|
|
@@ -175,6 +195,11 @@ export class DuetHeader {
|
|
|
175
195
|
this.handleClick(e);
|
|
176
196
|
this.duetSessionClick.emit(e);
|
|
177
197
|
};
|
|
198
|
+
this.handleSearchClick = (ev) => {
|
|
199
|
+
const e = createEvent(ev, this.processedSearch);
|
|
200
|
+
this.handleClick(e);
|
|
201
|
+
this.duetSearchClick.emit(e);
|
|
202
|
+
};
|
|
178
203
|
this.handleUserClick = (ev) => {
|
|
179
204
|
const e = createEvent(ev, this.processedUser);
|
|
180
205
|
this.handleClick(e);
|
|
@@ -197,40 +222,55 @@ export class DuetHeader {
|
|
|
197
222
|
this.duetLogoClick.emit(e);
|
|
198
223
|
};
|
|
199
224
|
this.handleArrowKeys = ev => {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
button.focus();
|
|
211
|
-
}
|
|
225
|
+
let button;
|
|
226
|
+
if (isArrowLeftKey(ev) || isArrowUpKey(ev)) {
|
|
227
|
+
button = ev.target.previousElementSibling;
|
|
228
|
+
}
|
|
229
|
+
else if (isArrowRightKey(ev) || isArrowDownKey(ev)) {
|
|
230
|
+
button = ev.target.nextElementSibling;
|
|
231
|
+
}
|
|
232
|
+
if (button) {
|
|
233
|
+
ev.preventDefault();
|
|
234
|
+
button.focus();
|
|
212
235
|
}
|
|
213
236
|
};
|
|
214
|
-
this.toggleMenu = (ev, type) => {
|
|
237
|
+
this.toggleMenu = (ev, type, id, active) => {
|
|
215
238
|
let el;
|
|
216
239
|
ev.preventDefault();
|
|
217
240
|
ev.stopPropagation();
|
|
241
|
+
if (active === true && !this.openMenu) {
|
|
242
|
+
const closedActives = this.closedActives ? [...this.closedActives] : [];
|
|
243
|
+
const index = closedActives.findIndex(i => i === id);
|
|
244
|
+
if (index > -1) {
|
|
245
|
+
closedActives.splice(index, 1);
|
|
246
|
+
this.closedActives = [...closedActives];
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
this.closedActives = [...closedActives, id];
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
this.openMenu = this.openMenu === id ? null : id;
|
|
254
|
+
}
|
|
218
255
|
// For language menu
|
|
219
256
|
if (type === "language") {
|
|
220
257
|
this.isContactOpen = false;
|
|
221
258
|
this.isLanguageOpen = !this.isLanguageOpen;
|
|
259
|
+
this.isSegmentOpen = false;
|
|
222
260
|
el = this.languageItemsEl;
|
|
223
261
|
}
|
|
224
262
|
// For contact menu
|
|
225
263
|
else if (type === "contact") {
|
|
226
264
|
this.isLanguageOpen = false;
|
|
227
265
|
this.isContactOpen = !this.isContactOpen;
|
|
266
|
+
this.isSegmentOpen = false;
|
|
228
267
|
el = this.contactItemsEl;
|
|
229
268
|
}
|
|
230
269
|
// For mobile menu
|
|
231
270
|
else if (type === "mobile") {
|
|
232
271
|
this.isContactOpen = false;
|
|
233
272
|
this.isLanguageOpen = false;
|
|
273
|
+
this.isSegmentOpen = false;
|
|
234
274
|
el = this.navigationEl;
|
|
235
275
|
this.isSlideOutOpen = !this.isSlideOutOpen;
|
|
236
276
|
if (this.isSlideOutOpen) {
|
|
@@ -240,7 +280,19 @@ export class DuetHeader {
|
|
|
240
280
|
enableBodyScroll(this.navigationEl);
|
|
241
281
|
}
|
|
242
282
|
}
|
|
243
|
-
if (
|
|
283
|
+
else if (type === "sub") {
|
|
284
|
+
this.isContactOpen = false;
|
|
285
|
+
this.isLanguageOpen = false;
|
|
286
|
+
this.isSegmentOpen = false;
|
|
287
|
+
el = this.subMenuItemRefs[id];
|
|
288
|
+
}
|
|
289
|
+
else if (type === "segment") {
|
|
290
|
+
this.isContactOpen = false;
|
|
291
|
+
this.isLanguageOpen = false;
|
|
292
|
+
this.isSegmentOpen = !this.isSegmentOpen;
|
|
293
|
+
el = this.segmentItemsEl;
|
|
294
|
+
}
|
|
295
|
+
if (this.isSlideOutOpen || this.isLanguageOpen || this.isContactOpen || this.isSegmentOpen || this.openMenu) {
|
|
244
296
|
const drawer = this.element.querySelector("duet-notification-drawer");
|
|
245
297
|
if (drawer) {
|
|
246
298
|
drawer.close(false);
|
|
@@ -259,10 +311,21 @@ export class DuetHeader {
|
|
|
259
311
|
inheritGlobalTheme(this);
|
|
260
312
|
this.refresh();
|
|
261
313
|
}
|
|
314
|
+
connectedCallback() {
|
|
315
|
+
for (let i = 0; i < this.mql.length; i++) {
|
|
316
|
+
const bound = this.refresh.bind(this);
|
|
317
|
+
this.mql[i].addEventListener("change", bound);
|
|
318
|
+
this.boundMqlFunctions[i] = bound;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
262
321
|
disconnectedCallback() {
|
|
263
322
|
if (this.navigationEl) {
|
|
264
323
|
enableBodyScroll(this.navigationEl);
|
|
265
324
|
}
|
|
325
|
+
for (let i = 0; i < this.mql.length; i++) {
|
|
326
|
+
this.mql[i].removeEventListener("change", this.boundMqlFunctions[i]);
|
|
327
|
+
}
|
|
328
|
+
this.boundMqlFunctions = [];
|
|
266
329
|
}
|
|
267
330
|
/**
|
|
268
331
|
* Component event handling.
|
|
@@ -275,7 +338,7 @@ export class DuetHeader {
|
|
|
275
338
|
}
|
|
276
339
|
}
|
|
277
340
|
handleKeyDown(ev) {
|
|
278
|
-
if (this.isContactOpen || this.isLanguageOpen) {
|
|
341
|
+
if (this.isContactOpen || this.isLanguageOpen || this.isSegmentOpen) {
|
|
279
342
|
const activeElement = this.element.shadowRoot.activeElement;
|
|
280
343
|
// When Space is pressed
|
|
281
344
|
if (isSpaceKey(ev) && activeElement) {
|
|
@@ -287,6 +350,12 @@ export class DuetHeader {
|
|
|
287
350
|
else if (this.isLanguageOpen) {
|
|
288
351
|
this.closeMenus(true);
|
|
289
352
|
}
|
|
353
|
+
else if (this.isSegmentOpen) {
|
|
354
|
+
this.closeMenus();
|
|
355
|
+
}
|
|
356
|
+
else if (this.openMenu) {
|
|
357
|
+
this.closeMenus();
|
|
358
|
+
}
|
|
290
359
|
activeElement.click();
|
|
291
360
|
}
|
|
292
361
|
}
|
|
@@ -316,10 +385,15 @@ export class DuetHeader {
|
|
|
316
385
|
* Local methods.
|
|
317
386
|
*/
|
|
318
387
|
async refresh() {
|
|
388
|
+
if (this.renderDesktopNav !== this.mql[0].matches) {
|
|
389
|
+
this.renderDesktopNav = this.mql[0].matches;
|
|
390
|
+
this.openMenu = null;
|
|
391
|
+
}
|
|
319
392
|
this.processedItems = parsePossibleJSON(this.items);
|
|
320
393
|
this.processedLanguageItems = parsePossibleJSON(this.languageItems);
|
|
321
394
|
this.processedContactItems = parsePossibleJSON(this.contactItems);
|
|
322
395
|
this.processedSession = parsePossibleJSON(this.session);
|
|
396
|
+
this.processedSearch = parsePossibleJSON(this.search);
|
|
323
397
|
this.processedUser = parsePossibleJSON(this.user);
|
|
324
398
|
this.processedBack = parsePossibleJSON(this.back);
|
|
325
399
|
}
|
|
@@ -336,7 +410,7 @@ export class DuetHeader {
|
|
|
336
410
|
* Closes all dropdown menus in header when called.
|
|
337
411
|
*/
|
|
338
412
|
async closeMenus(moveFocusToButton = false) {
|
|
339
|
-
if (this.isContactOpen || this.isLanguageOpen) {
|
|
413
|
+
if (this.isContactOpen || this.isLanguageOpen || this.isSegmentOpen || this.openMenu) {
|
|
340
414
|
if (this.isContactOpen && moveFocusToButton) {
|
|
341
415
|
this.contactItemsButtonEl.focus({
|
|
342
416
|
preventScroll: true,
|
|
@@ -347,8 +421,20 @@ export class DuetHeader {
|
|
|
347
421
|
preventScroll: true,
|
|
348
422
|
});
|
|
349
423
|
}
|
|
424
|
+
if (this.isSegmentOpen && moveFocusToButton) {
|
|
425
|
+
this.segmentItemsButtonEl.focus({
|
|
426
|
+
preventScroll: true,
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
if (this.openMenu && moveFocusToButton) {
|
|
430
|
+
this.subMenuButtonRefs[this.openMenu].focus({
|
|
431
|
+
preventScroll: true,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
350
434
|
this.isContactOpen = false;
|
|
351
435
|
this.isLanguageOpen = false;
|
|
436
|
+
this.isSegmentOpen = false;
|
|
437
|
+
this.openMenu = null;
|
|
352
438
|
}
|
|
353
439
|
}
|
|
354
440
|
/**
|
|
@@ -364,105 +450,166 @@ export class DuetHeader {
|
|
|
364
450
|
*/
|
|
365
451
|
render() {
|
|
366
452
|
const { skipLabel, changeLanguage, activeLanguage } = this.accessibleI18nLabels;
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
453
|
+
const skipToLabel = this.skipToId ? (h("a", { href: this.skipToId, class: "duet-header-skip", onClick: this.handleSkipClick }, skipLabel)) : null;
|
|
454
|
+
const logo = (h("duet-logo", { href: this.logoHref, size: "medium", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
455
|
+
const largeLogo = (h("duet-logo", { href: this.logoHref, size: "large", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
456
|
+
const contactDropdown = this.contact && this.processedContactItems ? (h(DuetHeaderDropdown, { id: "duet-header-contact", label: this.contact, icon: contactDropdownIcon.svg, active: this.isContactOpen, isOpen: this.isContactOpen, badge: false, toggleRef: el => (this.contactItemsButtonEl = el), itemsRef: el => (this.contactItemsEl = el), onToggle: event => this.toggleMenu(event, "contact") }, this.processedContactItems.map(item => (h("a", { role: "menuitem", href: item.href || "#", id: item.id, onClick: event => this.handleContactClick(event, item), onKeyDown: ev => this.handleArrowKeys(ev), target: item.external ? "_blank" : "_self" },
|
|
457
|
+
item.label,
|
|
458
|
+
Build.isBrowser && item.external && (h(Fragment, null,
|
|
459
|
+
h("duet-visually-hidden", null,
|
|
460
|
+
", ",
|
|
461
|
+
this.accessibleLabelExternal),
|
|
462
|
+
h("span", { class: "duet-header-link-external" },
|
|
463
|
+
h("duet-icon", { name: "action-new-window-small", size: "xx-small", margin: "none", color: this.theme === "turva" ? "primary-turva" : "primary" }))))))))) : null;
|
|
464
|
+
const languageDropdown = this.language && this.processedLanguageItems ? (h(DuetHeaderDropdown, { id: "duet-header-language", label: this.language, icon: languageIcon.svg, accessibleText: `${changeLanguage}${this.hasLanguageChanged ? `, ${activeLanguage}` : ""}`, active: this.isLanguageOpen, isOpen: this.isLanguageOpen, badge: false, toggleRef: el => (this.languageItemsButtonEl = el), itemsRef: el => (this.languageItemsEl = el), onToggle: event => this.toggleMenu(event, "language") }, this.processedLanguageItems.map(item => (h("a", { class: { active: this.language === item.country }, "aria-selected": this.language === item.country, role: "menuitem", id: item.id, lang: item.country, href: item.href || "#", onClick: event => this.handleLanguageClick(event, item), onKeyDown: this.handleArrowKeys }, item.label))))) : null;
|
|
465
|
+
const processedUserWithLink = this.processedUser && this.processedUser.href ? (h("a", { href: this.processedUser.href || "#", id: this.processedUser.id, class: "duet-header-user duet-header-button", onClick: this.handleUserClick },
|
|
466
|
+
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
467
|
+
h("span", { class: "duet-header-user-label" }, this.processedUser.label))) : null;
|
|
468
|
+
const processedUserWithoutLink = this.processedUser && !this.processedUser.href ? (h("span", { id: this.processedUser.id, class: "duet-header-user duet-header-button duet-header-no-action" },
|
|
469
|
+
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
470
|
+
h("span", { class: "duet-header-user-label" }, this.processedUser.label))) : null;
|
|
471
|
+
const processedSessionIconSize = this.renderDesktopNav ? "x-small" : "small";
|
|
472
|
+
const processedSession = this.processedSession ? (h("a", { href: this.processedSession.href || "#", id: this.processedSession.id, class: "duet-header-logout duet-header-button", onClick: this.handleSessionClick },
|
|
473
|
+
h(DuetHeaderIcon, { icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, iconSize: processedSessionIconSize }),
|
|
474
|
+
h("span", { class: "duet-header-button-label" }, this.processedSession.label))) : null;
|
|
475
|
+
const processedSearch = this.processedSearch ? (h("a", { href: this.processedSearch.href || "#", id: this.processedSearch.id, class: "duet-header-search duet-header-button", onClick: this.handleSearchClick },
|
|
476
|
+
h(DuetHeaderIcon, { icon: searchIcon.svg }),
|
|
477
|
+
h("span", { class: "duet-header-button-label" }, this.processedSearch.label))) : null;
|
|
478
|
+
// Back variation
|
|
479
|
+
if (this.processedBack) {
|
|
480
|
+
return (h(Host, { class: "duet-header-back-variation" },
|
|
481
|
+
h("div", { class: "duet-header-reserved-space" },
|
|
482
|
+
h("header", { class: {
|
|
483
|
+
"duet-header": true,
|
|
484
|
+
"duet-theme-turva": this.theme === "turva",
|
|
485
|
+
"duet-header-back": true,
|
|
486
|
+
"duet-header-inactive": true,
|
|
487
|
+
} },
|
|
488
|
+
h("div", { class: "duet-header-top" },
|
|
489
|
+
skipToLabel,
|
|
490
|
+
h("duet-button", { url: this.processedBack.href, id: this.processedBack.id, theme: this.theme, variation: "plain", color: this.theme === "turva" ? "secondary-turva" : "secondary", icon: "navigation-arrow-left", iconSize: "large", onClick: this.handleBackClick }, this.processedBack.label),
|
|
491
|
+
logo,
|
|
492
|
+
h("slot", { name: "logo-utility" }))))));
|
|
493
|
+
}
|
|
494
|
+
// multi level desktop variation
|
|
495
|
+
const itemsHaveSubItems = this.processedItems && this.processedItems.some(item => item.items && item.items.length > 0);
|
|
496
|
+
if (this.renderDesktopNav && itemsHaveSubItems) {
|
|
497
|
+
const activeSegment = this.processedItems.find(item => item.active);
|
|
498
|
+
const isThirdLevelActive = this.processedItems &&
|
|
499
|
+
this.processedItems.some(item => item.items &&
|
|
500
|
+
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
501
|
+
const segmentId = "duet-header-segment";
|
|
502
|
+
return (h(Host, { class: "duet-header-multi-level-desktop-variation" },
|
|
503
|
+
h("div", { class: {
|
|
504
|
+
"duet-header-multi-level-desktop": true,
|
|
505
|
+
"duet-header-multi-level-desktop-third-level-is-open": isThirdLevelActive,
|
|
506
|
+
} },
|
|
507
|
+
h("header", { class: {
|
|
508
|
+
"duet-header": true,
|
|
509
|
+
"duet-theme-turva": this.theme === "turva",
|
|
510
|
+
"duet-header-inactive": !this.processedItems,
|
|
511
|
+
} },
|
|
512
|
+
h("div", { class: "duet-header-top" },
|
|
513
|
+
skipToLabel,
|
|
514
|
+
h("div", { class: "logo-and-segment" },
|
|
515
|
+
largeLogo,
|
|
516
|
+
this.processedItems && (h(DuetHeaderDropdown, { id: segmentId, label: activeSegment.label, active: this.isSegmentOpen, isOpen: this.isSegmentOpen, badge: false, toggleRef: el => (this.segmentItemsButtonEl = el), itemsRef: el => (this.segmentItemsEl = el), onToggle: event => this.toggleMenu(event, "segment") }, this.processedItems.map(item => (h("a", { class: { active: activeSegment === item }, role: "menuitem", href: item.href || "#", id: item.id, onClick: event => this.handleItemClick(event, item), onKeyDown: ev => this.handleArrowKeys(ev), target: item.external ? "_blank" : "_self" },
|
|
517
|
+
item.icon && (h("div", { class: "duet-header-icon" },
|
|
518
|
+
h("duet-icon", { margin: "none", size: "x-small", name: item.icon, color: "currentColor" }))),
|
|
519
|
+
h("span", null, item.label),
|
|
520
|
+
item.badge && h("div", { class: "duet-header-badge" }))))))),
|
|
521
|
+
h("nav", { class: "duet-header-multi-level-desktop-nav" }, activeSegment.items &&
|
|
522
|
+
activeSegment.items
|
|
523
|
+
.filter(secondLevelItem => secondLevelItem.items && secondLevelItem.items.length > 0)
|
|
524
|
+
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
525
|
+
const id = secondLevelItem.id || `segment-item-${secondLevelItemIndex}`;
|
|
526
|
+
return (h(DuetHeaderDropdown, { id: id, label: secondLevelItem.label, active: (!this.openMenu && secondLevelItem.active === true) || this.openMenu === id, isOpen: this.openMenu === id, badge: secondLevelItem.badge, toggleRef: el => (this.subMenuButtonRefs[id] = el), itemsRef: el => (this.subMenuItemRefs[id] = el), onToggle: event => this.toggleMenu(event, "sub", id) }, secondLevelItem.items &&
|
|
527
|
+
secondLevelItem.items.map(thirdLevelItem => (h("a", { class: { active: thirdLevelItem.active }, role: "menuitem", href: thirdLevelItem.href || "#", id: thirdLevelItem.id, onClick: event => this.handleItemClick(event, thirdLevelItem), onKeyDown: ev => this.handleArrowKeys(ev), target: thirdLevelItem.external ? "_blank" : "_self" },
|
|
528
|
+
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
529
|
+
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
530
|
+
h("span", null, thirdLevelItem.label),
|
|
531
|
+
thirdLevelItem.badge && h("div", { class: "duet-header-badge" }))))));
|
|
532
|
+
})),
|
|
533
|
+
h("div", { class: "duet-header-multi-level-desktop-utils" },
|
|
534
|
+
processedSearch,
|
|
535
|
+
languageDropdown,
|
|
536
|
+
processedSession),
|
|
537
|
+
h("slot", { name: "utility" }))))));
|
|
538
|
+
}
|
|
539
|
+
// Default variation
|
|
540
|
+
const isThirdLevelActive = this.processedItems &&
|
|
541
|
+
this.processedItems.some(item => item.items &&
|
|
542
|
+
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
543
|
+
return (h(Host, { class: {
|
|
544
|
+
"duet-header-default-variation": true,
|
|
371
545
|
} },
|
|
372
|
-
h("
|
|
373
|
-
"duet-header": true,
|
|
374
|
-
"duet-
|
|
375
|
-
"duet-header-
|
|
376
|
-
"duet-header-inactive": !this.processedItems,
|
|
546
|
+
h("div", { class: {
|
|
547
|
+
"duet-header-reserved-space": true,
|
|
548
|
+
"duet-with-links": !!this.processedItems,
|
|
549
|
+
"duet-header-third-level-active": isThirdLevelActive,
|
|
377
550
|
} },
|
|
378
|
-
h("
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
h("slot", { name: "logo-utility" }, this.region && !this.processedBack && h("div", { class: "duet-header-region" }, this.region)),
|
|
383
|
-
(this.processedItems ||
|
|
384
|
-
this.processedLanguageItems ||
|
|
385
|
-
this.processedContactItems ||
|
|
386
|
-
this.processedSession ||
|
|
387
|
-
this.processedUser) && (h("button", { class: { "duet-header-toggle": true, active: this.isSlideOutOpen }, onClick: event => this.toggleMenu(event, "mobile"), type: "button" },
|
|
388
|
-
h("duet-visually-hidden", null, this.accessibleLabel),
|
|
389
|
-
h("div", { class: "duet-header-hamburger" },
|
|
390
|
-
h("span", { class: "duet-header-bar" }),
|
|
391
|
-
h("span", { class: "duet-header-bar" }),
|
|
392
|
-
h("span", { class: "duet-header-bar" }),
|
|
393
|
-
h("span", { class: "duet-header-bar" }))))),
|
|
394
|
-
!this.processedBack && (h("div", { ref: el => (this.navigationEl = el), class: {
|
|
395
|
-
"duet-header-bottom": true,
|
|
396
|
-
active: this.isSlideOutOpen,
|
|
397
|
-
inactive: !this.processedItems,
|
|
551
|
+
h("header", { class: {
|
|
552
|
+
"duet-header": true,
|
|
553
|
+
"duet-theme-turva": this.theme === "turva",
|
|
554
|
+
"duet-header-inactive": !this.processedItems,
|
|
398
555
|
} },
|
|
399
|
-
h("
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
h("button", {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
} }, this.processedContactItems &&
|
|
423
|
-
this.processedContactItems.map(item => (h("a", { role: "menuitem", href: item.href || "#", id: item.id, onClick: event => this.handleContactClick(event, item), onKeyDown: ev => this.handleArrowKeys(ev), target: item.external ? "_blank" : "_self" },
|
|
556
|
+
h("div", { class: "duet-header-top" },
|
|
557
|
+
skipToLabel,
|
|
558
|
+
logo,
|
|
559
|
+
h("slot", { name: "logo-utility" }, this.region && h("div", { class: "duet-header-region" }, this.region)),
|
|
560
|
+
(this.processedItems ||
|
|
561
|
+
languageDropdown ||
|
|
562
|
+
contactDropdown ||
|
|
563
|
+
this.processedSession ||
|
|
564
|
+
this.processedUser) && (h("button", { class: { "duet-header-toggle": true, active: this.isSlideOutOpen }, onClick: event => this.toggleMenu(event, "mobile"), type: "button" },
|
|
565
|
+
h("duet-visually-hidden", null, this.accessibleLabel),
|
|
566
|
+
h(DuetHeaderHamburger, null)))),
|
|
567
|
+
h("div", { ref: el => (this.navigationEl = el), class: {
|
|
568
|
+
"duet-header-bottom": true,
|
|
569
|
+
active: this.isSlideOutOpen,
|
|
570
|
+
inactive: !this.processedItems,
|
|
571
|
+
} },
|
|
572
|
+
h("nav", { class: "duet-header-items", role: "navigation" }, this.processedItems &&
|
|
573
|
+
this.processedItems.map((item, itemIndex) => (h("div", { class: "duet-header-item-container" },
|
|
574
|
+
h("a", { class: {
|
|
575
|
+
"duet-header-first-level": true,
|
|
576
|
+
"duet-header-item": true,
|
|
577
|
+
active: (!itemsHaveSubItems && this.currentHref === item.href) || item.active === true,
|
|
578
|
+
}, href: item.href || "#", id: item.id || `header-item-${itemIndex}`, onClick: event => this.handleItemClick(event, item) },
|
|
424
579
|
item.label,
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
this.processedUser && !this.processedUser.href && (h("span", { id: this.processedUser.id, class: "duet-header-user duet-header-button duet-header-no-action" },
|
|
459
|
-
h("span", { class: "duet-header-icon" },
|
|
460
|
-
h("duet-icon", { margin: "none", size: "x-small", icon: userIcon.svg, color: "currentColor" })),
|
|
461
|
-
h("span", { class: "duet-header-user-label" }, this.processedUser.label))),
|
|
462
|
-
this.processedSession && (h("a", { href: this.processedSession.href || "#", id: this.processedSession.id, class: "duet-header-logout duet-header-button", onClick: this.handleSessionClick },
|
|
463
|
-
h("span", { class: "duet-header-icon" },
|
|
464
|
-
h("duet-icon", { margin: "none", size: "x-small", icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, color: "currentColor" })),
|
|
465
|
-
this.processedSession.label))))))));
|
|
580
|
+
item.badge && h("div", { class: "duet-header-badge" })),
|
|
581
|
+
item.items &&
|
|
582
|
+
item.items
|
|
583
|
+
.filter(secondLevelitem => secondLevelitem.items && secondLevelitem.items.length > 0)
|
|
584
|
+
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
585
|
+
const id = secondLevelItem.id || `header-item-${itemIndex}-${secondLevelItemIndex}`;
|
|
586
|
+
return (h(DuetHeaderDropdown, { id: id, className: "duet-header-second-level", label: secondLevelItem.label, icon: `${secondLevelItem.icon}.svg`, active: (!this.openMenu &&
|
|
587
|
+
secondLevelItem.active === true &&
|
|
588
|
+
!(this.closedActives && !!this.closedActives.find(i => i === id))) ||
|
|
589
|
+
this.openMenu === id, isOpen: (!this.openMenu &&
|
|
590
|
+
secondLevelItem.active === true &&
|
|
591
|
+
!(this.closedActives && !!this.closedActives.find(i => i === id))) ||
|
|
592
|
+
this.openMenu === id, badge: secondLevelItem.badge, toggleRef: el => (this.subMenuButtonRefs[id] = el), itemsRef: el => (this.subMenuItemRefs[id] = el), onToggle: event => this.toggleMenu(event, "sub", id, secondLevelItem.active === true) },
|
|
593
|
+
h("div", { class: "duet-header-third-level" }, secondLevelItem.items &&
|
|
594
|
+
secondLevelItem.items.map(thirdLevelItem => (h("a", { class: {
|
|
595
|
+
"duet-header-item": true,
|
|
596
|
+
active: thirdLevelItem.active === true,
|
|
597
|
+
}, role: "menuitem", href: thirdLevelItem.href || "#", id: thirdLevelItem.id, onClick: event => this.handleItemClick(event, item), onKeyDown: ev => this.handleArrowKeys(ev), target: thirdLevelItem.external ? "_blank" : "_self" },
|
|
598
|
+
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
599
|
+
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
600
|
+
h("span", null, thirdLevelItem.label),
|
|
601
|
+
thirdLevelItem.badge && h("div", { class: "duet-header-badge" })))))));
|
|
602
|
+
}))))),
|
|
603
|
+
h("div", { class: "duet-header-bottom-utils" },
|
|
604
|
+
h("slot", { name: "utility" })),
|
|
605
|
+
h("div", { class: "duet-header-utils" },
|
|
606
|
+
!itemsHaveSubItems && contactDropdown,
|
|
607
|
+
languageDropdown,
|
|
608
|
+
!itemsHaveSubItems && (h(Fragment, null,
|
|
609
|
+
processedUserWithLink,
|
|
610
|
+
processedUserWithoutLink)),
|
|
611
|
+
processedSearch,
|
|
612
|
+
processedSession))))));
|
|
466
613
|
}
|
|
467
614
|
static get is() { return "duet-header"; }
|
|
468
615
|
static get encapsulation() { return "shadow"; }
|
|
@@ -683,7 +830,7 @@ export class DuetHeader {
|
|
|
683
830
|
"optional": false,
|
|
684
831
|
"docs": {
|
|
685
832
|
"tags": [],
|
|
686
|
-
"text": "An object that includes mandatory \"label\" and \"href\" fields for the user\nprofile link. Additionally, you can pass an \"id\" that is added as an HTML\nidentifier for the element. If nothing is passed, user won\u2019t be shown."
|
|
833
|
+
"text": "An object that includes mandatory \"label\" and \"href\" fields for the user\nprofile link. Additionally, you can pass an \"id\" that is added as an HTML\nidentifier for the element. If nothing is passed, user won\u2019t be shown.\nNote: not available in multilevel headers."
|
|
687
834
|
},
|
|
688
835
|
"attribute": "user",
|
|
689
836
|
"reflect": false
|
|
@@ -718,7 +865,7 @@ export class DuetHeader {
|
|
|
718
865
|
"optional": false,
|
|
719
866
|
"docs": {
|
|
720
867
|
"tags": [],
|
|
721
|
-
"text": "The href of the current page item that is shown as \u201Cactive\u201D."
|
|
868
|
+
"text": "The href of the current page item that is shown as \u201Cactive\u201D.\nNote: not available in multilevel headers."
|
|
722
869
|
},
|
|
723
870
|
"attribute": "current-href",
|
|
724
871
|
"reflect": false,
|
|
@@ -754,7 +901,7 @@ export class DuetHeader {
|
|
|
754
901
|
"optional": false,
|
|
755
902
|
"docs": {
|
|
756
903
|
"tags": [],
|
|
757
|
-
"text": "An array of items for the main navigation. Items have to include mandatory\n\"label\" and \"href\" fields to work. Additionally, you can pass an \"id\" that is\nadded as an HTML identifier for the element."
|
|
904
|
+
"text": "An array of items for the main navigation. Items have to include mandatory\n\"label\" and \"href\" fields to work. Additionally, you can pass an \"id\" that is\nadded as an HTML identifier for the element, \"active\" boolean that makes item active,\n\"badge\" boolean to add notification badge next to the item and\n\"items\" array consisting of sub items that are allowed up to three levels."
|
|
758
905
|
},
|
|
759
906
|
"attribute": "items",
|
|
760
907
|
"reflect": false
|
|
@@ -771,7 +918,7 @@ export class DuetHeader {
|
|
|
771
918
|
"optional": false,
|
|
772
919
|
"docs": {
|
|
773
920
|
"tags": [],
|
|
774
|
-
"text": "Region that is shown next to the logo. If empty, region will be hidden."
|
|
921
|
+
"text": "Region that is shown next to the logo. If empty, region will be hidden.\nNote: not available in desktop multilevel header."
|
|
775
922
|
},
|
|
776
923
|
"attribute": "region",
|
|
777
924
|
"reflect": false,
|
|
@@ -789,11 +936,28 @@ export class DuetHeader {
|
|
|
789
936
|
"optional": false,
|
|
790
937
|
"docs": {
|
|
791
938
|
"tags": [],
|
|
792
|
-
"text": "An object that includes mandatory \"label\", \"href\" and \"type\" fields for the\nsession login/logout link. Additionally, you can pass an \"id\" that is added\nas an HTML identifier for the element
|
|
939
|
+
"text": "An object that includes mandatory \"label\", \"href\" and \"type\" fields for the\nsession login/logout link. Additionally, you can pass an \"id\" that is added\nas an HTML identifier for the element.\nIf nothing is passed, this link won\u2019t be shown."
|
|
793
940
|
},
|
|
794
941
|
"attribute": "session",
|
|
795
942
|
"reflect": false
|
|
796
943
|
},
|
|
944
|
+
"search": {
|
|
945
|
+
"type": "any",
|
|
946
|
+
"mutable": false,
|
|
947
|
+
"complexType": {
|
|
948
|
+
"original": "any",
|
|
949
|
+
"resolved": "any",
|
|
950
|
+
"references": {}
|
|
951
|
+
},
|
|
952
|
+
"required": false,
|
|
953
|
+
"optional": false,
|
|
954
|
+
"docs": {
|
|
955
|
+
"tags": [],
|
|
956
|
+
"text": "An object that includes mandatory \"label\" and \"href\" fields for the\nsearch link. Additionally, you can pass an \"id\" that is added\nas an HTML identifier for the element. If nothing is passed, this link won\u2019t\nbe shown."
|
|
957
|
+
},
|
|
958
|
+
"attribute": "search",
|
|
959
|
+
"reflect": false
|
|
960
|
+
},
|
|
797
961
|
"back": {
|
|
798
962
|
"type": "any",
|
|
799
963
|
"mutable": false,
|
|
@@ -823,7 +987,7 @@ export class DuetHeader {
|
|
|
823
987
|
"optional": false,
|
|
824
988
|
"docs": {
|
|
825
989
|
"tags": [],
|
|
826
|
-
"text": "Label of the contact menu. If empty, contact menu will be hidden."
|
|
990
|
+
"text": "Label of the contact menu. If empty, contact menu will be hidden.\nNote: not available in multilevel headers."
|
|
827
991
|
},
|
|
828
992
|
"attribute": "contact",
|
|
829
993
|
"reflect": false,
|
|
@@ -868,12 +1032,17 @@ export class DuetHeader {
|
|
|
868
1032
|
"isContactOpen": {},
|
|
869
1033
|
"isLanguageOpen": {},
|
|
870
1034
|
"isSlideOutOpen": {},
|
|
1035
|
+
"isSegmentOpen": {},
|
|
1036
|
+
"openMenu": {},
|
|
1037
|
+
"closedActives": {},
|
|
871
1038
|
"processedItems": {},
|
|
872
1039
|
"processedLanguageItems": {},
|
|
873
1040
|
"processedContactItems": {},
|
|
874
1041
|
"processedSession": {},
|
|
1042
|
+
"processedSearch": {},
|
|
875
1043
|
"processedUser": {},
|
|
876
|
-
"processedBack": {}
|
|
1044
|
+
"processedBack": {},
|
|
1045
|
+
"renderDesktopNav": {}
|
|
877
1046
|
}; }
|
|
878
1047
|
static get events() { return [{
|
|
879
1048
|
"method": "duetChange",
|
|
@@ -916,6 +1085,25 @@ export class DuetHeader {
|
|
|
916
1085
|
}
|
|
917
1086
|
}
|
|
918
1087
|
}
|
|
1088
|
+
}, {
|
|
1089
|
+
"method": "duetSearchClick",
|
|
1090
|
+
"name": "duetSearchClick",
|
|
1091
|
+
"bubbles": true,
|
|
1092
|
+
"cancelable": true,
|
|
1093
|
+
"composed": true,
|
|
1094
|
+
"docs": {
|
|
1095
|
+
"tags": [],
|
|
1096
|
+
"text": "Event for when a user has clicked the search link. You can prevent the\ndefault browser functionality by calling **event.detail.originalEvent.preventDefault()**\ninside your listener. Additionally, the passed data is available via **event.detail.data**."
|
|
1097
|
+
},
|
|
1098
|
+
"complexType": {
|
|
1099
|
+
"original": "DuetHeaderChangeEvent",
|
|
1100
|
+
"resolved": "{ originalEvent: Event; data: DuetHeaderItem | DuetHeaderLanguageItem | DuetHeaderSession; component: \"duet-header\"; }",
|
|
1101
|
+
"references": {
|
|
1102
|
+
"DuetHeaderChangeEvent": {
|
|
1103
|
+
"location": "local"
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
919
1107
|
}, {
|
|
920
1108
|
"method": "duetUserClick",
|
|
921
1109
|
"name": "duetUserClick",
|