@duetds/components 4.33.1 → 4.34.2
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 +438 -191
- package/lib/cjs/{dom-c850c8d7.js → dom-52a4f07a.js} +1 -1
- package/lib/cjs/duet-alert.cjs.entry.js +1 -1
- package/lib/cjs/duet-badge.cjs.entry.js +1 -1
- package/lib/cjs/duet-button_2.cjs.entry.js +2 -2
- package/lib/cjs/duet-caption_4.cjs.entry.js +3 -3
- package/lib/cjs/duet-card.cjs.entry.js +2 -2
- package/lib/cjs/duet-checkbox.cjs.entry.js +1 -1
- package/lib/cjs/duet-choice_2.cjs.entry.js +2 -2
- package/lib/cjs/duet-collapsible.cjs.entry.js +5 -453
- package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
- package/lib/cjs/duet-date-picker.cjs.entry.js +2 -2
- package/lib/cjs/duet-divider_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-editable-table-button.cjs.entry.js +14 -7
- package/lib/cjs/duet-editable-table_4.cjs.entry.js +86 -11
- 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 +2 -2
- package/lib/cjs/duet-grid_2.cjs.entry.js +26 -3
- package/lib/cjs/duet-header_2.cjs.entry.js +220 -47
- package/lib/cjs/duet-hero.cjs.entry.js +1 -1
- package/lib/cjs/duet-icon.cjs.entry.js +13 -21
- package/lib/cjs/duet-input_2.cjs.entry.js +3 -4
- package/lib/cjs/duet-layout.cjs.entry.js +1 -1
- package/lib/cjs/duet-list_2.cjs.entry.js +2 -2
- package/lib/cjs/duet-modal.cjs.entry.js +2 -2
- package/lib/cjs/duet-notification_2.cjs.entry.js +2 -2
- package/lib/cjs/duet-number-input.cjs.entry.js +1 -1
- package/lib/cjs/duet-progress.cjs.entry.js +1 -1
- package/lib/cjs/duet-radio_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-range-slider.cjs.entry.js +1 -1
- package/lib/cjs/duet-select.cjs.entry.js +1 -1
- package/lib/cjs/duet-step_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-tab_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-textarea.cjs.entry.js +1 -1
- package/lib/cjs/duet-toggle.cjs.entry.js +1 -1
- package/lib/cjs/duet-tooltip.cjs.entry.js +1 -1
- package/lib/cjs/duet-tray.cjs.entry.js +1 -1
- package/lib/cjs/duet-upload-aria-status.cjs.entry.js +1 -1
- package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
- package/lib/cjs/duet.cjs.js +4 -4
- package/lib/cjs/{focus-utils-b609a7a5.js → focus-utils-b57facfe.js} +1 -1
- package/lib/cjs/form-search-d61b2843.js +8 -0
- package/lib/cjs/{index-9a57d969.js → index-e2021bf7.js} +2 -9
- package/lib/cjs/loader.cjs.js +3 -3
- package/lib/cjs/{shadow-css-e3edeed1.js → shadow-css-e1b62a99.js} +1 -1
- package/lib/cjs/token-utils-05bd23b4.js +77 -0
- package/lib/cjs/tokens-8596cece.js +459 -0
- package/lib/collection/collection-manifest.json +2 -2
- package/lib/collection/components/duet-collapsible/duet-collapsible.js +4 -1
- package/lib/collection/components/duet-editable-table/duet-editable-table-button.js +13 -6
- package/lib/collection/components/duet-editable-table/duet-editable-table-item.js +25 -3
- package/lib/collection/components/duet-editable-table/duet-editable-table-tabledata.js +3 -3
- package/lib/collection/components/duet-editable-table/duet-editable-table.js +58 -2
- package/lib/collection/components/duet-footer/duet-footer.css +2 -0
- package/lib/collection/components/duet-grid/duet-grid.js +25 -2
- 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 +316 -122
- package/lib/collection/components/duet-icon/duet-icon.js +11 -5
- package/lib/collection/components/duet-icon/icon-utils.js +5 -15
- 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-table/duet-table.css +42 -17
- package/lib/collection/components/duet-table/duet-table.js +2 -2
- package/lib/collection/components/duet-upload/duet-upload.js +26 -4
- package/lib/collection/utils/template-utils.js +33 -0
- package/lib/collection/utils/token-utils.js +67 -14
- package/lib/custom-elements-bundle/index.js +422 -114
- package/lib/duet/duet.esm.js +1 -1
- package/lib/duet/duet.js +1 -1
- package/lib/duet/{p-bf9f6d80.system.entry.js → p-00bf3bbb.system.entry.js} +1 -1
- package/lib/duet/{p-75edcaed.entry.js → p-08d1abc7.entry.js} +1 -1
- package/lib/duet/{p-2297d13f.system.entry.js → p-0dc01111.system.entry.js} +1 -1
- package/lib/duet/{p-19d7d9d5.system.entry.js → p-0e742087.system.entry.js} +1 -1
- package/lib/duet/p-12941c46.system.entry.js +4 -0
- package/lib/duet/{p-b314348c.system.js → p-13bc14a6.system.js} +2 -2
- package/lib/duet/{p-cf319832.system.entry.js → p-13d5fe80.system.entry.js} +1 -1
- package/lib/duet/{p-35a3794e.js → p-183726f7.js} +0 -0
- package/lib/duet/{p-323643af.system.entry.js → p-1fff32a9.system.entry.js} +1 -1
- package/lib/duet/{p-b5c7d304.system.entry.js → p-2524481a.system.entry.js} +1 -1
- package/lib/duet/{p-6a5ab3eb.entry.js → p-2862054c.entry.js} +1 -1
- package/lib/duet/{p-e1dc86b5.system.js → p-30d13a27.system.js} +1 -1
- package/lib/duet/p-354bf924.entry.js +4 -0
- package/lib/duet/{p-df6f39a3.entry.js → p-3998eed6.entry.js} +1 -1
- package/lib/duet/{p-079795e5.entry.js → p-3e0a774d.entry.js} +1 -1
- package/lib/duet/{p-fd613733.entry.js → p-3e273d8d.entry.js} +1 -1
- package/lib/duet/{p-2fdcff82.entry.js → p-3e47c910.entry.js} +1 -1
- package/lib/duet/{p-de5ec54e.system.entry.js → p-45a6838d.system.entry.js} +1 -1
- package/lib/duet/p-4836f66d.entry.js +4 -0
- package/lib/duet/{p-af49d4f9.entry.js → p-488addbc.entry.js} +1 -1
- package/lib/duet/{p-ba18b56e.entry.js → p-4a742d83.entry.js} +1 -1
- package/lib/duet/{p-37cda933.entry.js → p-4d5531be.entry.js} +1 -1
- package/lib/duet/{p-00210a63.entry.js → p-4db07868.entry.js} +1 -1
- package/lib/duet/p-50b4fb2c.js +4 -0
- package/lib/duet/{p-987edcd0.js → p-52621211.js} +0 -0
- package/lib/duet/p-582f9135.system.entry.js +4 -0
- package/lib/duet/{p-85e52be8.entry.js → p-58d7f2d1.entry.js} +1 -1
- package/lib/duet/{p-b25edbbe.entry.js → p-5a5e7977.entry.js} +1 -1
- package/lib/duet/{p-85ad012a.system.entry.js → p-5c67bb73.system.entry.js} +1 -1
- package/lib/duet/{p-3013c9bb.system.entry.js → p-5e03b63f.system.entry.js} +1 -1
- package/lib/duet/{p-e8123a53.entry.js → p-5f2fb5db.entry.js} +1 -1
- package/lib/duet/{p-f5a55b3c.entry.js → p-5f813e15.entry.js} +1 -1
- package/lib/duet/p-5f866721.entry.js +4 -0
- package/lib/duet/p-60aa83c0.js +4 -0
- package/lib/duet/{p-bf4596bd.system.entry.js → p-62de4645.system.entry.js} +1 -1
- package/lib/duet/{p-360086f8.entry.js → p-66c35cd2.entry.js} +1 -1
- package/lib/duet/{p-cbdb9e98.system.entry.js → p-69133107.system.entry.js} +1 -1
- package/lib/duet/p-6a8b3cf0.system.entry.js +4 -0
- package/lib/duet/{p-c18a599e.system.js → p-6e4fd6ba.system.js} +0 -0
- package/lib/duet/{p-e2596ea0.entry.js → p-72ad7798.entry.js} +1 -1
- package/lib/duet/{p-32b7397d.entry.js → p-746b3bee.entry.js} +1 -1
- package/lib/duet/p-75261615.system.entry.js +4 -0
- package/lib/duet/{p-8aaf3383.entry.js → p-760d2226.entry.js} +1 -1
- package/lib/duet/{p-7530be48.system.entry.js → p-7a0a375e.system.entry.js} +1 -1
- package/lib/duet/p-8143f3de.js +4 -0
- package/lib/duet/p-8b01f978.system.entry.js +4 -0
- package/lib/duet/{p-6e4b1c0d.entry.js → p-8d42cb7c.entry.js} +1 -1
- package/lib/duet/p-8e16057d.system.entry.js +4 -0
- package/lib/duet/p-8f477bd6.system.js +4 -0
- package/lib/duet/p-90e7e876.entry.js +4 -0
- package/lib/duet/{p-09013a48.system.entry.js → p-939bf739.system.entry.js} +1 -1
- package/lib/duet/{p-0205162d.entry.js → p-9793f3d8.entry.js} +1 -1
- package/lib/duet/p-9849a4ab.system.entry.js +4 -0
- package/lib/duet/{p-5cfc53f9.entry.js → p-9d487a0d.entry.js} +1 -1
- package/lib/duet/p-a16a58c1.system.js +4 -0
- package/lib/duet/p-a52d436c.entry.js +4 -0
- package/lib/duet/{p-e48f3a32.system.entry.js → p-a58f0665.system.entry.js} +1 -1
- package/lib/duet/{p-9e79e033.entry.js → p-a900d55b.entry.js} +1 -1
- package/lib/duet/p-ae46a7d2.system.entry.js +4 -0
- package/lib/duet/{p-6f36f647.system.entry.js → p-ae8401c9.system.entry.js} +1 -1
- package/lib/duet/{p-e60ee8b0.entry.js → p-b70f164d.entry.js} +1 -1
- package/lib/duet/{p-3ba62cf1.system.entry.js → p-b8dde0c8.system.entry.js} +1 -1
- package/lib/duet/{p-e5031543.entry.js → p-baef2241.entry.js} +1 -1
- package/lib/duet/{p-ef7251bf.entry.js → p-c50bbff5.entry.js} +1 -1
- package/lib/duet/{p-3fd9190b.system.entry.js → p-c67a63cc.system.entry.js} +1 -1
- package/lib/duet/p-c6ba80c6.entry.js +4 -0
- package/lib/duet/{p-e7b90769.system.entry.js → p-c92b1af1.system.entry.js} +1 -1
- package/lib/duet/{p-71a77368.system.entry.js → p-cdaa629d.system.entry.js} +1 -1
- package/lib/duet/{p-c1a1ea1b.js → p-ce566b2b.js} +1 -1
- package/lib/duet/p-d004da5f.js +4 -0
- package/lib/duet/{p-e70088d5.entry.js → p-d1adeb76.entry.js} +1 -1
- package/lib/duet/{p-5decc259.system.entry.js → p-d3b5d2ef.system.entry.js} +1 -1
- package/lib/duet/{p-a2a00146.system.entry.js → p-db87c4b1.system.entry.js} +1 -1
- package/lib/duet/{p-9f35d682.entry.js → p-ddbdac54.entry.js} +1 -1
- package/lib/duet/{p-e370c18b.entry.js → p-de23ae41.entry.js} +1 -1
- package/lib/duet/{p-f0cfe033.system.entry.js → p-e0038277.system.entry.js} +1 -1
- package/lib/duet/p-e1c6f74b.entry.js +4 -0
- package/lib/duet/{p-1cbc6269.entry.js → p-e242bf98.entry.js} +1 -1
- package/lib/duet/{p-51955fc0.system.js → p-e3973f41.system.js} +1 -1
- package/lib/duet/{p-0d22396e.system.js → p-e5c1751e.system.js} +0 -0
- package/lib/duet/p-ec5d0cda.entry.js +4 -0
- package/lib/duet/{p-43847557.entry.js → p-ee74ff67.entry.js} +1 -1
- package/lib/duet/{p-6a4d85ed.system.entry.js → p-eed6f9cc.system.entry.js} +1 -1
- package/lib/duet/{p-7a8597c2.system.entry.js → p-f01494f9.system.entry.js} +1 -1
- package/lib/duet/{p-b4111e88.system.entry.js → p-f2c402a9.system.entry.js} +1 -1
- package/lib/duet/{p-4b6e8558.system.entry.js → p-f3c258d8.system.entry.js} +1 -1
- package/lib/duet/{p-2a822e91.system.entry.js → p-f6e1fb0f.system.entry.js} +1 -1
- package/lib/duet/{p-020a2c42.system.entry.js → p-f7f4f98a.system.entry.js} +1 -1
- package/lib/duet/{p-dd76db9b.system.entry.js → p-f9a096a9.system.entry.js} +1 -1
- package/lib/duet/p-fa99eaa4.system.js +4 -0
- package/lib/duet/{p-6024e484.system.entry.js → p-ffd449ef.system.entry.js} +1 -1
- package/lib/esm/{dom-58cd15f6.js → dom-5d060ace.js} +1 -1
- package/lib/esm/duet-alert.entry.js +1 -1
- package/lib/esm/duet-badge.entry.js +1 -1
- package/lib/esm/duet-button_2.entry.js +2 -2
- package/lib/esm/duet-caption_4.entry.js +3 -3
- package/lib/esm/duet-card.entry.js +2 -2
- package/lib/esm/duet-checkbox.entry.js +1 -1
- package/lib/esm/duet-choice_2.entry.js +2 -2
- package/lib/esm/duet-collapsible.entry.js +4 -452
- package/lib/esm/duet-cookie-consent.entry.js +1 -1
- package/lib/esm/duet-date-picker.entry.js +2 -2
- package/lib/esm/duet-divider_2.entry.js +1 -1
- package/lib/esm/duet-editable-table-button.entry.js +14 -7
- package/lib/esm/duet-editable-table_4.entry.js +86 -11
- 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 +2 -2
- package/lib/esm/duet-grid_2.entry.js +26 -3
- package/lib/esm/duet-header_2.entry.js +220 -47
- package/lib/esm/duet-hero.entry.js +1 -1
- package/lib/esm/duet-icon.entry.js +13 -21
- package/lib/esm/duet-input_2.entry.js +2 -3
- package/lib/esm/duet-layout.entry.js +1 -1
- package/lib/esm/duet-list_2.entry.js +2 -2
- package/lib/esm/duet-modal.entry.js +2 -2
- package/lib/esm/duet-notification_2.entry.js +2 -2
- package/lib/esm/duet-number-input.entry.js +1 -1
- package/lib/esm/duet-progress.entry.js +1 -1
- package/lib/esm/duet-radio_2.entry.js +1 -1
- package/lib/esm/duet-range-slider.entry.js +1 -1
- package/lib/esm/duet-select.entry.js +1 -1
- package/lib/esm/duet-step_2.entry.js +1 -1
- package/lib/esm/duet-tab_2.entry.js +1 -1
- package/lib/esm/duet-textarea.entry.js +1 -1
- package/lib/esm/duet-toggle.entry.js +1 -1
- package/lib/esm/duet-tooltip.entry.js +1 -1
- package/lib/esm/duet-tray.entry.js +1 -1
- package/lib/esm/duet-upload-aria-status.entry.js +1 -1
- package/lib/esm/duet-visually-hidden.entry.js +1 -1
- package/lib/esm/duet.js +4 -4
- package/lib/esm/{focus-utils-aeb6ca93.js → focus-utils-fc14cf36.js} +1 -1
- package/lib/esm/form-search-ea8e19ae.js +6 -0
- package/lib/esm/{index-e8c7d36f.js → index-9ef5d3bc.js} +3 -9
- package/lib/esm/loader.js +3 -3
- package/lib/esm/{shadow-css-7c726abb.js → shadow-css-13d024f4.js} +1 -1
- package/lib/esm/token-utils-75f78ca4.js +75 -0
- package/lib/esm/tokens-e110dc89.js +453 -0
- package/lib/esm-es5/{dom-58cd15f6.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 +1 -1
- 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 +1 -1
- package/lib/esm-es5/duet-editable-table_4.entry.js +2 -2
- 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 +2 -2
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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-aeb6ca93.js → focus-utils-fc14cf36.js} +1 -1
- package/lib/esm-es5/form-search-ea8e19ae.js +4 -0
- package/lib/esm-es5/{index-e8c7d36f.js → index-9ef5d3bc.js} +2 -2
- package/lib/esm-es5/loader.js +1 -1
- package/lib/esm-es5/{shadow-css-7c726abb.js → shadow-css-13d024f4.js} +0 -0
- package/lib/esm-es5/token-utils-75f78ca4.js +4 -0
- package/lib/esm-es5/tokens-e110dc89.js +4 -0
- package/lib/html.html-data.json +29 -10
- package/lib/types/common-types.d.ts +0 -1
- package/lib/types/components/duet-collapsible/duet-collapsible.d.ts +3 -0
- package/lib/types/components/duet-editable-table/duet-editable-table-button.d.ts +1 -0
- package/lib/types/components/duet-editable-table/duet-editable-table-item.d.ts +5 -1
- package/lib/types/components/duet-editable-table/duet-editable-table-tabledata.d.ts +1 -0
- package/lib/types/components/duet-editable-table/duet-editable-table.d.ts +10 -0
- package/lib/types/components/duet-grid/duet-grid.d.ts +1 -0
- 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-icon/duet-icon.d.ts +1 -1
- package/lib/types/components/duet-icon/icon-utils.d.ts +1 -1
- package/lib/types/components/duet-link/duet-link.d.ts +3 -0
- package/lib/types/components/duet-table/duet-table.d.ts +1 -1
- package/lib/types/components/duet-upload/duet-upload.d.ts +4 -0
- package/lib/types/components.d.ts +46 -10
- package/lib/types/stencil-public-runtime.d.ts +6 -4
- package/lib/types/utils/template-utils.d.ts +13 -0
- package/lib/types/utils/token-utils.d.ts +8 -2
- package/package.json +13 -14
- package/lib/cjs/token-utils-63a9c8dc.js +0 -30
- package/lib/duet/p-0a89315d.entry.js +0 -4
- package/lib/duet/p-0e90f075.system.entry.js +0 -4
- package/lib/duet/p-3212a556.entry.js +0 -4
- package/lib/duet/p-3c1971d8.js +0 -4
- package/lib/duet/p-4c5eedf8.entry.js +0 -4
- package/lib/duet/p-4c827f0d.entry.js +0 -4
- package/lib/duet/p-5e0071d6.js +0 -4
- package/lib/duet/p-5e77432e.system.entry.js +0 -4
- package/lib/duet/p-68008644.entry.js +0 -4
- package/lib/duet/p-69385972.system.entry.js +0 -4
- package/lib/duet/p-6e363557.system.js +0 -4
- package/lib/duet/p-6fa6c4fb.system.entry.js +0 -4
- package/lib/duet/p-73f9db25.system.entry.js +0 -4
- package/lib/duet/p-74f4a0d8.system.entry.js +0 -4
- package/lib/duet/p-a545398c.entry.js +0 -4
- package/lib/duet/p-b6e9860a.entry.js +0 -4
- package/lib/duet/p-c742856b.system.entry.js +0 -4
- package/lib/duet/p-d67fff56.entry.js +0 -4
- package/lib/duet/p-f2a087a8.system.entry.js +0 -4
- package/lib/esm/token-utils-590d9413.js +0 -28
- package/lib/esm-es5/token-utils-590d9413.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,27 @@ 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
|
+
// addEventListener is not available in Stencil hydrate
|
|
317
|
+
if (this.mql[i].addEventListener) {
|
|
318
|
+
const bound = this.refresh.bind(this);
|
|
319
|
+
this.mql[i].addEventListener("change", bound);
|
|
320
|
+
this.boundMqlFunctions[i] = bound;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
262
324
|
disconnectedCallback() {
|
|
263
325
|
if (this.navigationEl) {
|
|
264
326
|
enableBodyScroll(this.navigationEl);
|
|
265
327
|
}
|
|
328
|
+
for (let i = 0; i < this.mql.length; i++) {
|
|
329
|
+
// addEventListener is not available in Stencil hydrate
|
|
330
|
+
if (this.mql[i].removeEventListener) {
|
|
331
|
+
this.mql[i].removeEventListener("change", this.boundMqlFunctions[i]);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
this.boundMqlFunctions = [];
|
|
266
335
|
}
|
|
267
336
|
/**
|
|
268
337
|
* Component event handling.
|
|
@@ -275,7 +344,7 @@ export class DuetHeader {
|
|
|
275
344
|
}
|
|
276
345
|
}
|
|
277
346
|
handleKeyDown(ev) {
|
|
278
|
-
if (this.isContactOpen || this.isLanguageOpen) {
|
|
347
|
+
if (this.isContactOpen || this.isLanguageOpen || this.isSegmentOpen) {
|
|
279
348
|
const activeElement = this.element.shadowRoot.activeElement;
|
|
280
349
|
// When Space is pressed
|
|
281
350
|
if (isSpaceKey(ev) && activeElement) {
|
|
@@ -287,6 +356,12 @@ export class DuetHeader {
|
|
|
287
356
|
else if (this.isLanguageOpen) {
|
|
288
357
|
this.closeMenus(true);
|
|
289
358
|
}
|
|
359
|
+
else if (this.isSegmentOpen) {
|
|
360
|
+
this.closeMenus();
|
|
361
|
+
}
|
|
362
|
+
else if (this.openMenu) {
|
|
363
|
+
this.closeMenus();
|
|
364
|
+
}
|
|
290
365
|
activeElement.click();
|
|
291
366
|
}
|
|
292
367
|
}
|
|
@@ -316,10 +391,15 @@ export class DuetHeader {
|
|
|
316
391
|
* Local methods.
|
|
317
392
|
*/
|
|
318
393
|
async refresh() {
|
|
394
|
+
if (this.renderDesktopNav !== this.mql[0].matches) {
|
|
395
|
+
this.renderDesktopNav = this.mql[0].matches;
|
|
396
|
+
this.openMenu = null;
|
|
397
|
+
}
|
|
319
398
|
this.processedItems = parsePossibleJSON(this.items);
|
|
320
399
|
this.processedLanguageItems = parsePossibleJSON(this.languageItems);
|
|
321
400
|
this.processedContactItems = parsePossibleJSON(this.contactItems);
|
|
322
401
|
this.processedSession = parsePossibleJSON(this.session);
|
|
402
|
+
this.processedSearch = parsePossibleJSON(this.search);
|
|
323
403
|
this.processedUser = parsePossibleJSON(this.user);
|
|
324
404
|
this.processedBack = parsePossibleJSON(this.back);
|
|
325
405
|
}
|
|
@@ -336,7 +416,7 @@ export class DuetHeader {
|
|
|
336
416
|
* Closes all dropdown menus in header when called.
|
|
337
417
|
*/
|
|
338
418
|
async closeMenus(moveFocusToButton = false) {
|
|
339
|
-
if (this.isContactOpen || this.isLanguageOpen) {
|
|
419
|
+
if (this.isContactOpen || this.isLanguageOpen || this.isSegmentOpen || this.openMenu) {
|
|
340
420
|
if (this.isContactOpen && moveFocusToButton) {
|
|
341
421
|
this.contactItemsButtonEl.focus({
|
|
342
422
|
preventScroll: true,
|
|
@@ -347,8 +427,20 @@ export class DuetHeader {
|
|
|
347
427
|
preventScroll: true,
|
|
348
428
|
});
|
|
349
429
|
}
|
|
430
|
+
if (this.isSegmentOpen && moveFocusToButton) {
|
|
431
|
+
this.segmentItemsButtonEl.focus({
|
|
432
|
+
preventScroll: true,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
if (this.openMenu && moveFocusToButton) {
|
|
436
|
+
this.subMenuButtonRefs[this.openMenu].focus({
|
|
437
|
+
preventScroll: true,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
350
440
|
this.isContactOpen = false;
|
|
351
441
|
this.isLanguageOpen = false;
|
|
442
|
+
this.isSegmentOpen = false;
|
|
443
|
+
this.openMenu = null;
|
|
352
444
|
}
|
|
353
445
|
}
|
|
354
446
|
/**
|
|
@@ -364,105 +456,166 @@ export class DuetHeader {
|
|
|
364
456
|
*/
|
|
365
457
|
render() {
|
|
366
458
|
const { skipLabel, changeLanguage, activeLanguage } = this.accessibleI18nLabels;
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
459
|
+
const skipToLabel = this.skipToId ? (h("a", { href: this.skipToId, class: "duet-header-skip", onClick: this.handleSkipClick }, skipLabel)) : null;
|
|
460
|
+
const logo = (h("duet-logo", { href: this.logoHref, size: "medium", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
461
|
+
const largeLogo = (h("duet-logo", { href: this.logoHref, size: "large", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
462
|
+
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" },
|
|
463
|
+
item.label,
|
|
464
|
+
Build.isBrowser && item.external && (h(Fragment, null,
|
|
465
|
+
h("duet-visually-hidden", null,
|
|
466
|
+
", ",
|
|
467
|
+
this.accessibleLabelExternal),
|
|
468
|
+
h("span", { class: "duet-header-link-external" },
|
|
469
|
+
h("duet-icon", { name: "action-new-window-small", size: "xx-small", margin: "none", color: this.theme === "turva" ? "primary-turva" : "primary" }))))))))) : null;
|
|
470
|
+
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;
|
|
471
|
+
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 },
|
|
472
|
+
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
473
|
+
h("span", { class: "duet-header-user-label" }, this.processedUser.label))) : null;
|
|
474
|
+
const processedUserWithoutLink = this.processedUser && !this.processedUser.href ? (h("span", { id: this.processedUser.id, class: "duet-header-user duet-header-button duet-header-no-action" },
|
|
475
|
+
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
476
|
+
h("span", { class: "duet-header-user-label" }, this.processedUser.label))) : null;
|
|
477
|
+
const processedSessionIconSize = this.renderDesktopNav ? "x-small" : "small";
|
|
478
|
+
const processedSession = this.processedSession ? (h("a", { href: this.processedSession.href || "#", id: this.processedSession.id, class: "duet-header-logout duet-header-button", onClick: this.handleSessionClick },
|
|
479
|
+
h(DuetHeaderIcon, { icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, iconSize: processedSessionIconSize }),
|
|
480
|
+
h("span", { class: "duet-header-button-label" }, this.processedSession.label))) : null;
|
|
481
|
+
const processedSearch = this.processedSearch ? (h("a", { href: this.processedSearch.href || "#", id: this.processedSearch.id, class: "duet-header-search duet-header-button", onClick: this.handleSearchClick },
|
|
482
|
+
h(DuetHeaderIcon, { icon: searchIcon.svg }),
|
|
483
|
+
h("span", { class: "duet-header-button-label" }, this.processedSearch.label))) : null;
|
|
484
|
+
// Back variation
|
|
485
|
+
if (this.processedBack) {
|
|
486
|
+
return (h(Host, { class: "duet-header-back-variation" },
|
|
487
|
+
h("div", { class: "duet-header-reserved-space" },
|
|
488
|
+
h("header", { class: {
|
|
489
|
+
"duet-header": true,
|
|
490
|
+
"duet-theme-turva": this.theme === "turva",
|
|
491
|
+
"duet-header-back": true,
|
|
492
|
+
"duet-header-inactive": true,
|
|
493
|
+
} },
|
|
494
|
+
h("div", { class: "duet-header-top" },
|
|
495
|
+
skipToLabel,
|
|
496
|
+
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),
|
|
497
|
+
logo,
|
|
498
|
+
h("slot", { name: "logo-utility" }))))));
|
|
499
|
+
}
|
|
500
|
+
// multi level desktop variation
|
|
501
|
+
const itemsHaveSubItems = this.processedItems && this.processedItems.some(item => item.items && item.items.length > 0);
|
|
502
|
+
if (this.renderDesktopNav && itemsHaveSubItems) {
|
|
503
|
+
const activeSegment = this.processedItems.find(item => item.active);
|
|
504
|
+
const isThirdLevelActive = this.processedItems &&
|
|
505
|
+
this.processedItems.some(item => item.items &&
|
|
506
|
+
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
507
|
+
const segmentId = "duet-header-segment";
|
|
508
|
+
return (h(Host, { class: "duet-header-multi-level-desktop-variation" },
|
|
509
|
+
h("div", { class: {
|
|
510
|
+
"duet-header-multi-level-desktop": true,
|
|
511
|
+
"duet-header-multi-level-desktop-third-level-is-open": isThirdLevelActive,
|
|
512
|
+
} },
|
|
513
|
+
h("header", { class: {
|
|
514
|
+
"duet-header": true,
|
|
515
|
+
"duet-theme-turva": this.theme === "turva",
|
|
516
|
+
"duet-header-inactive": !this.processedItems,
|
|
517
|
+
} },
|
|
518
|
+
h("div", { class: "duet-header-top" },
|
|
519
|
+
skipToLabel,
|
|
520
|
+
h("div", { class: "logo-and-segment" },
|
|
521
|
+
largeLogo,
|
|
522
|
+
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" },
|
|
523
|
+
item.icon && (h("div", { class: "duet-header-icon" },
|
|
524
|
+
h("duet-icon", { margin: "none", size: "x-small", name: item.icon, color: "currentColor" }))),
|
|
525
|
+
h("span", null, item.label),
|
|
526
|
+
item.badge && h("div", { class: "duet-header-badge" }))))))),
|
|
527
|
+
h("nav", { class: "duet-header-multi-level-desktop-nav" }, activeSegment.items &&
|
|
528
|
+
activeSegment.items
|
|
529
|
+
.filter(secondLevelItem => secondLevelItem.items && secondLevelItem.items.length > 0)
|
|
530
|
+
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
531
|
+
const id = secondLevelItem.id || `segment-item-${secondLevelItemIndex}`;
|
|
532
|
+
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 &&
|
|
533
|
+
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" },
|
|
534
|
+
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
535
|
+
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
536
|
+
h("span", null, thirdLevelItem.label),
|
|
537
|
+
thirdLevelItem.badge && h("div", { class: "duet-header-badge" }))))));
|
|
538
|
+
})),
|
|
539
|
+
h("div", { class: "duet-header-multi-level-desktop-utils" },
|
|
540
|
+
processedSearch,
|
|
541
|
+
languageDropdown,
|
|
542
|
+
processedSession),
|
|
543
|
+
h("slot", { name: "utility" }))))));
|
|
544
|
+
}
|
|
545
|
+
// Default variation
|
|
546
|
+
const isThirdLevelActive = this.processedItems &&
|
|
547
|
+
this.processedItems.some(item => item.items &&
|
|
548
|
+
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
549
|
+
return (h(Host, { class: {
|
|
550
|
+
"duet-header-default-variation": true,
|
|
371
551
|
} },
|
|
372
|
-
h("
|
|
373
|
-
"duet-header": true,
|
|
374
|
-
"duet-
|
|
375
|
-
"duet-header-
|
|
376
|
-
"duet-header-inactive": !this.processedItems,
|
|
552
|
+
h("div", { class: {
|
|
553
|
+
"duet-header-reserved-space": true,
|
|
554
|
+
"duet-with-links": !!this.processedItems,
|
|
555
|
+
"duet-header-third-level-active": isThirdLevelActive,
|
|
377
556
|
} },
|
|
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,
|
|
557
|
+
h("header", { class: {
|
|
558
|
+
"duet-header": true,
|
|
559
|
+
"duet-theme-turva": this.theme === "turva",
|
|
560
|
+
"duet-header-inactive": !this.processedItems,
|
|
398
561
|
} },
|
|
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" },
|
|
562
|
+
h("div", { class: "duet-header-top" },
|
|
563
|
+
skipToLabel,
|
|
564
|
+
logo,
|
|
565
|
+
h("slot", { name: "logo-utility" }, this.region && h("div", { class: "duet-header-region" }, this.region)),
|
|
566
|
+
(this.processedItems ||
|
|
567
|
+
languageDropdown ||
|
|
568
|
+
contactDropdown ||
|
|
569
|
+
this.processedSession ||
|
|
570
|
+
this.processedUser) && (h("button", { class: { "duet-header-toggle": true, active: this.isSlideOutOpen }, onClick: event => this.toggleMenu(event, "mobile"), type: "button" },
|
|
571
|
+
h("duet-visually-hidden", null, this.accessibleLabel),
|
|
572
|
+
h(DuetHeaderHamburger, null)))),
|
|
573
|
+
h("div", { ref: el => (this.navigationEl = el), class: {
|
|
574
|
+
"duet-header-bottom": true,
|
|
575
|
+
active: this.isSlideOutOpen,
|
|
576
|
+
inactive: !this.processedItems,
|
|
577
|
+
} },
|
|
578
|
+
h("nav", { class: "duet-header-items", role: "navigation" }, this.processedItems &&
|
|
579
|
+
this.processedItems.map((item, itemIndex) => (h("div", { class: "duet-header-item-container" },
|
|
580
|
+
h("a", { class: {
|
|
581
|
+
"duet-header-first-level": true,
|
|
582
|
+
"duet-header-item": true,
|
|
583
|
+
active: (!itemsHaveSubItems && this.currentHref === item.href) || item.active === true,
|
|
584
|
+
}, href: item.href || "#", id: item.id || `header-item-${itemIndex}`, onClick: event => this.handleItemClick(event, item) },
|
|
424
585
|
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))))))));
|
|
586
|
+
item.badge && h("div", { class: "duet-header-badge" })),
|
|
587
|
+
item.items &&
|
|
588
|
+
item.items
|
|
589
|
+
.filter(secondLevelitem => secondLevelitem.items && secondLevelitem.items.length > 0)
|
|
590
|
+
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
591
|
+
const id = secondLevelItem.id || `header-item-${itemIndex}-${secondLevelItemIndex}`;
|
|
592
|
+
return (h(DuetHeaderDropdown, { id: id, className: "duet-header-second-level", label: secondLevelItem.label, icon: `${secondLevelItem.icon}.svg`, active: (!this.openMenu &&
|
|
593
|
+
secondLevelItem.active === true &&
|
|
594
|
+
!(this.closedActives && !!this.closedActives.find(i => i === id))) ||
|
|
595
|
+
this.openMenu === id, isOpen: (!this.openMenu &&
|
|
596
|
+
secondLevelItem.active === true &&
|
|
597
|
+
!(this.closedActives && !!this.closedActives.find(i => i === id))) ||
|
|
598
|
+
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) },
|
|
599
|
+
h("div", { class: "duet-header-third-level" }, secondLevelItem.items &&
|
|
600
|
+
secondLevelItem.items.map(thirdLevelItem => (h("a", { class: {
|
|
601
|
+
"duet-header-item": true,
|
|
602
|
+
active: thirdLevelItem.active === true,
|
|
603
|
+
}, role: "menuitem", href: thirdLevelItem.href || "#", id: thirdLevelItem.id, onClick: event => this.handleItemClick(event, item), onKeyDown: ev => this.handleArrowKeys(ev), target: thirdLevelItem.external ? "_blank" : "_self" },
|
|
604
|
+
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
605
|
+
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
606
|
+
h("span", null, thirdLevelItem.label),
|
|
607
|
+
thirdLevelItem.badge && h("div", { class: "duet-header-badge" })))))));
|
|
608
|
+
}))))),
|
|
609
|
+
h("div", { class: "duet-header-bottom-utils" },
|
|
610
|
+
h("slot", { name: "utility" })),
|
|
611
|
+
h("div", { class: "duet-header-utils" },
|
|
612
|
+
!itemsHaveSubItems && contactDropdown,
|
|
613
|
+
languageDropdown,
|
|
614
|
+
!itemsHaveSubItems && (h(Fragment, null,
|
|
615
|
+
processedUserWithLink,
|
|
616
|
+
processedUserWithoutLink)),
|
|
617
|
+
processedSearch,
|
|
618
|
+
processedSession))))));
|
|
466
619
|
}
|
|
467
620
|
static get is() { return "duet-header"; }
|
|
468
621
|
static get encapsulation() { return "shadow"; }
|
|
@@ -683,7 +836,7 @@ export class DuetHeader {
|
|
|
683
836
|
"optional": false,
|
|
684
837
|
"docs": {
|
|
685
838
|
"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."
|
|
839
|
+
"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
840
|
},
|
|
688
841
|
"attribute": "user",
|
|
689
842
|
"reflect": false
|
|
@@ -718,7 +871,7 @@ export class DuetHeader {
|
|
|
718
871
|
"optional": false,
|
|
719
872
|
"docs": {
|
|
720
873
|
"tags": [],
|
|
721
|
-
"text": "The href of the current page item that is shown as \u201Cactive\u201D."
|
|
874
|
+
"text": "The href of the current page item that is shown as \u201Cactive\u201D.\nNote: not available in multilevel headers."
|
|
722
875
|
},
|
|
723
876
|
"attribute": "current-href",
|
|
724
877
|
"reflect": false,
|
|
@@ -754,7 +907,7 @@ export class DuetHeader {
|
|
|
754
907
|
"optional": false,
|
|
755
908
|
"docs": {
|
|
756
909
|
"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."
|
|
910
|
+
"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
911
|
},
|
|
759
912
|
"attribute": "items",
|
|
760
913
|
"reflect": false
|
|
@@ -771,7 +924,7 @@ export class DuetHeader {
|
|
|
771
924
|
"optional": false,
|
|
772
925
|
"docs": {
|
|
773
926
|
"tags": [],
|
|
774
|
-
"text": "Region that is shown next to the logo. If empty, region will be hidden."
|
|
927
|
+
"text": "Region that is shown next to the logo. If empty, region will be hidden.\nNote: not available in desktop multilevel header."
|
|
775
928
|
},
|
|
776
929
|
"attribute": "region",
|
|
777
930
|
"reflect": false,
|
|
@@ -789,11 +942,28 @@ export class DuetHeader {
|
|
|
789
942
|
"optional": false,
|
|
790
943
|
"docs": {
|
|
791
944
|
"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
|
|
945
|
+
"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
946
|
},
|
|
794
947
|
"attribute": "session",
|
|
795
948
|
"reflect": false
|
|
796
949
|
},
|
|
950
|
+
"search": {
|
|
951
|
+
"type": "any",
|
|
952
|
+
"mutable": false,
|
|
953
|
+
"complexType": {
|
|
954
|
+
"original": "any",
|
|
955
|
+
"resolved": "any",
|
|
956
|
+
"references": {}
|
|
957
|
+
},
|
|
958
|
+
"required": false,
|
|
959
|
+
"optional": false,
|
|
960
|
+
"docs": {
|
|
961
|
+
"tags": [],
|
|
962
|
+
"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."
|
|
963
|
+
},
|
|
964
|
+
"attribute": "search",
|
|
965
|
+
"reflect": false
|
|
966
|
+
},
|
|
797
967
|
"back": {
|
|
798
968
|
"type": "any",
|
|
799
969
|
"mutable": false,
|
|
@@ -823,7 +993,7 @@ export class DuetHeader {
|
|
|
823
993
|
"optional": false,
|
|
824
994
|
"docs": {
|
|
825
995
|
"tags": [],
|
|
826
|
-
"text": "Label of the contact menu. If empty, contact menu will be hidden."
|
|
996
|
+
"text": "Label of the contact menu. If empty, contact menu will be hidden.\nNote: not available in multilevel headers."
|
|
827
997
|
},
|
|
828
998
|
"attribute": "contact",
|
|
829
999
|
"reflect": false,
|
|
@@ -868,12 +1038,17 @@ export class DuetHeader {
|
|
|
868
1038
|
"isContactOpen": {},
|
|
869
1039
|
"isLanguageOpen": {},
|
|
870
1040
|
"isSlideOutOpen": {},
|
|
1041
|
+
"isSegmentOpen": {},
|
|
1042
|
+
"openMenu": {},
|
|
1043
|
+
"closedActives": {},
|
|
871
1044
|
"processedItems": {},
|
|
872
1045
|
"processedLanguageItems": {},
|
|
873
1046
|
"processedContactItems": {},
|
|
874
1047
|
"processedSession": {},
|
|
1048
|
+
"processedSearch": {},
|
|
875
1049
|
"processedUser": {},
|
|
876
|
-
"processedBack": {}
|
|
1050
|
+
"processedBack": {},
|
|
1051
|
+
"renderDesktopNav": {}
|
|
877
1052
|
}; }
|
|
878
1053
|
static get events() { return [{
|
|
879
1054
|
"method": "duetChange",
|
|
@@ -916,6 +1091,25 @@ export class DuetHeader {
|
|
|
916
1091
|
}
|
|
917
1092
|
}
|
|
918
1093
|
}
|
|
1094
|
+
}, {
|
|
1095
|
+
"method": "duetSearchClick",
|
|
1096
|
+
"name": "duetSearchClick",
|
|
1097
|
+
"bubbles": true,
|
|
1098
|
+
"cancelable": true,
|
|
1099
|
+
"composed": true,
|
|
1100
|
+
"docs": {
|
|
1101
|
+
"tags": [],
|
|
1102
|
+
"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**."
|
|
1103
|
+
},
|
|
1104
|
+
"complexType": {
|
|
1105
|
+
"original": "DuetHeaderChangeEvent",
|
|
1106
|
+
"resolved": "{ originalEvent: Event; data: DuetHeaderItem | DuetHeaderLanguageItem | DuetHeaderSession; component: \"duet-header\"; }",
|
|
1107
|
+
"references": {
|
|
1108
|
+
"DuetHeaderChangeEvent": {
|
|
1109
|
+
"location": "local"
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
919
1113
|
}, {
|
|
920
1114
|
"method": "duetUserClick",
|
|
921
1115
|
"name": "duetUserClick",
|