@duetds/components 5.3.5 → 5.4.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 +134 -96
- package/lib/cjs/duet-action-button.cjs.entry.js +25 -7
- package/lib/cjs/duet-alert.cjs.entry.js +1 -1
- package/lib/cjs/duet-badge.cjs.entry.js +1 -1
- package/lib/cjs/duet-breadcrumb.cjs.entry.js +1 -1
- package/lib/cjs/duet-breadcrumbs.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 +2 -2
- 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 +2 -2
- package/lib/cjs/duet-combobox.cjs.entry.js +2 -2
- 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_3.cjs.entry.js +18 -13
- 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 +1 -1
- package/lib/cjs/duet-grid_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-header_2.cjs.entry.js +51 -49
- package/lib/cjs/duet-hero.cjs.entry.js +4 -3
- package/lib/cjs/duet-icon.cjs.entry.js +2 -2
- package/lib/cjs/duet-input_2.cjs.entry.js +21 -4
- package/lib/cjs/duet-layout.cjs.entry.js +1 -1
- package/lib/cjs/duet-list_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-modal.cjs.entry.js +2 -2
- package/lib/cjs/duet-notification_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-number-input.cjs.entry.js +1 -1
- package/lib/cjs/duet-pagination_2.cjs.entry.js +2 -2
- 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-scrollable_3.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-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 +2 -2
- package/lib/cjs/{focus-utils-84c29960.js → focus-utils-9226aef7.js} +1 -1
- package/lib/cjs/{index-772cc42f.js → index-60a8ec8a.js} +8 -1
- package/lib/cjs/{js-utils-be1d29ae.js → js-utils-134e0318.js} +11 -0
- package/lib/cjs/loader.cjs.js +2 -2
- package/lib/cjs/{token-utils-50a1f7e2.js → token-utils-fef5b4eb.js} +1 -0
- package/lib/collection/components/duet-action-button/duet-action-button.js +44 -8
- package/lib/collection/components/duet-choice-group/duet-choice-group.js +7 -1
- package/lib/collection/components/duet-collapsible/duet-collapsible.js +1 -1
- package/lib/collection/components/duet-header/duet-header-icon.js +1 -1
- package/lib/collection/components/duet-header/duet-header.css +69 -43
- package/lib/collection/components/duet-header/duet-header.js +117 -114
- package/lib/collection/components/duet-hero/duet-hero.js +13 -5
- package/lib/collection/components/duet-input/duet-input.js +21 -3
- package/lib/collection/components/duet-upload/duet-upload.js +12 -12
- package/lib/collection/components/duet-upload/upload-validators.js +6 -1
- package/lib/collection/utils/js-utils.js +11 -0
- package/lib/collection/utils/token-utils.js +1 -1
- package/lib/custom-elements-bundle/index.js +132 -73
- package/lib/duet/duet.esm.js +1 -1
- package/lib/duet/duet.js +1 -1
- package/lib/duet/p-07a2ad03.entry.js +4 -0
- package/lib/duet/{p-dbb4a588.js → p-0b3f675e.js} +0 -0
- package/lib/duet/{p-0b426a83.system.entry.js → p-0dbd00e1.system.entry.js} +1 -1
- package/lib/duet/p-12606a4b.entry.js +4 -0
- package/lib/duet/p-21321528.system.entry.js +4 -0
- package/lib/duet/{p-8f74030a.entry.js → p-28f87990.entry.js} +1 -1
- package/lib/duet/{p-4e8f57dd.entry.js → p-2ac07ac9.entry.js} +1 -1
- package/lib/duet/{p-05ff2672.entry.js → p-2b155bd9.entry.js} +1 -1
- package/lib/duet/{p-acaedb00.system.js → p-309e3417.system.js} +3 -3
- package/lib/duet/p-30fc343d.system.entry.js +4 -0
- package/lib/duet/{p-12b8cb2f.system.entry.js → p-322676e3.system.entry.js} +1 -1
- package/lib/duet/{p-c0d98307.system.entry.js → p-33a0c070.system.entry.js} +1 -1
- package/lib/duet/{p-92639d0b.system.js → p-34ea0849.system.js} +0 -0
- package/lib/duet/{p-7dfe1c16.entry.js → p-440e2c47.entry.js} +1 -1
- package/lib/duet/{p-e6fdaa31.entry.js → p-451adbf4.entry.js} +1 -1
- package/lib/duet/{p-3f50d9bd.system.entry.js → p-46b83696.system.entry.js} +1 -1
- package/lib/duet/{p-cdba4c82.entry.js → p-46d9a853.entry.js} +1 -1
- package/lib/duet/{p-4260e8b5.system.entry.js → p-48a036c1.system.entry.js} +1 -1
- package/lib/duet/{p-8a472df4.system.entry.js → p-4dd79e38.system.entry.js} +1 -1
- package/lib/duet/{p-9071d4e1.system.entry.js → p-526e6d8e.system.entry.js} +1 -1
- package/lib/duet/{p-e00170a2.system.entry.js → p-56a80c32.system.entry.js} +1 -1
- package/lib/duet/{p-dfa92326.entry.js → p-56f17656.entry.js} +1 -1
- package/lib/duet/{p-b88b18c3.entry.js → p-590e8508.entry.js} +1 -1
- package/lib/duet/{p-43c1dcf5.entry.js → p-5a5117d4.entry.js} +1 -1
- package/lib/duet/{p-64a691e3.entry.js → p-5c1646f2.entry.js} +1 -1
- package/lib/duet/p-5ea398eb.entry.js +4 -0
- package/lib/duet/{p-4903478e.entry.js → p-5f528fa2.entry.js} +1 -1
- package/lib/duet/p-6002f3d2.system.js +4 -0
- package/lib/duet/{p-e908bfdc.system.entry.js → p-62303524.system.entry.js} +1 -1
- package/lib/duet/{p-b972e7b7.system.entry.js → p-6255147e.system.entry.js} +1 -1
- package/lib/duet/{p-3f1e781d.system.entry.js → p-63aea0dc.system.entry.js} +1 -1
- package/lib/duet/{p-ba0a4b7e.system.entry.js → p-64cbe9b7.system.entry.js} +1 -1
- package/lib/duet/p-65821960.entry.js +4 -0
- package/lib/duet/p-675d713b.entry.js +4 -0
- package/lib/duet/{p-c069f560.entry.js → p-67734fad.entry.js} +1 -1
- package/lib/duet/{p-fab89c9d.system.entry.js → p-67ed94fa.system.entry.js} +1 -1
- package/lib/duet/{p-16bc9a7e.system.entry.js → p-6ab6ce4f.system.entry.js} +1 -1
- package/lib/duet/{p-083e39cc.entry.js → p-6c5d3def.entry.js} +1 -1
- package/lib/duet/{p-815f4a10.system.entry.js → p-6e3f764f.system.entry.js} +1 -1
- package/lib/duet/{p-bacb27a1.js → p-6e64cd02.js} +2 -2
- package/lib/duet/{p-e40b610d.entry.js → p-6f1d6649.entry.js} +1 -1
- package/lib/duet/{p-0d188b2d.entry.js → p-70e567e9.entry.js} +1 -1
- package/lib/duet/{p-6dd1cf98.entry.js → p-77e3591e.entry.js} +1 -1
- package/lib/duet/{p-9027d0a4.system.entry.js → p-79948b47.system.entry.js} +1 -1
- package/lib/duet/{p-442f1dd5.entry.js → p-7d0051ea.entry.js} +1 -1
- package/lib/duet/p-7dfc475d.entry.js +4 -0
- package/lib/duet/{p-b787e777.system.entry.js → p-80d16341.system.entry.js} +1 -1
- package/lib/duet/{p-85c68d48.system.entry.js → p-817ef07d.system.entry.js} +1 -1
- package/lib/duet/{p-35d6061d.system.entry.js → p-838ef01e.system.entry.js} +1 -1
- package/lib/duet/{p-8fa7559b.system.entry.js → p-84310e48.system.entry.js} +1 -1
- package/lib/duet/{p-631054f3.system.js → p-89f50fd8.system.js} +1 -1
- package/lib/duet/{p-8b7adbf6.system.entry.js → p-8bf92f1e.system.entry.js} +1 -1
- package/lib/duet/p-8e1cf2fb.system.entry.js +4 -0
- package/lib/duet/{p-20f4d5d2.system.entry.js → p-9205c79a.system.entry.js} +1 -1
- package/lib/duet/{p-100b6a91.entry.js → p-97130a4c.entry.js} +1 -1
- package/lib/duet/{p-c4b6bf46.entry.js → p-97631cdc.entry.js} +1 -1
- package/lib/duet/{p-f9045aab.system.entry.js → p-98ca5a08.system.entry.js} +2 -2
- package/lib/duet/p-99bf8545.js +4 -0
- package/lib/duet/{p-97bb6fdd.system.entry.js → p-9c9fbda5.system.entry.js} +1 -1
- package/lib/duet/{p-8eb6610c.system.entry.js → p-9df52009.system.entry.js} +1 -1
- package/lib/duet/{p-634fda0f.entry.js → p-a03485f8.entry.js} +1 -1
- package/lib/duet/p-a806d616.entry.js +4 -0
- package/lib/duet/{p-56ae348b.entry.js → p-a91bb73d.entry.js} +1 -1
- package/lib/duet/{p-e36b95e0.system.entry.js → p-ac86999f.system.entry.js} +1 -1
- package/lib/duet/{p-b48811b5.entry.js → p-aefb80e3.entry.js} +1 -1
- package/lib/duet/{p-7de54632.entry.js → p-b004cbd3.entry.js} +1 -1
- package/lib/duet/{p-3d27e5ed.system.entry.js → p-b28e6872.system.entry.js} +1 -1
- package/lib/duet/{p-923b03a6.system.entry.js → p-b2ac632f.system.entry.js} +1 -1
- package/lib/duet/{p-1a8dfe6e.system.entry.js → p-b70f2ae2.system.entry.js} +1 -1
- package/lib/duet/{p-f301004d.entry.js → p-bc24eeda.entry.js} +1 -1
- package/lib/duet/{p-5184e972.system.entry.js → p-bec4d094.system.entry.js} +1 -1
- package/lib/duet/{p-c9f704c9.entry.js → p-bf8f3b14.entry.js} +1 -1
- package/lib/duet/{p-01ccafd3.system.entry.js → p-c383ceb4.system.entry.js} +2 -2
- package/lib/duet/{p-411bec39.system.entry.js → p-c694e7fb.system.entry.js} +1 -1
- package/lib/duet/p-c918ce45.system.entry.js +4 -0
- package/lib/duet/{p-fdaaa3ad.entry.js → p-c9f244f6.entry.js} +1 -1
- package/lib/duet/{p-b74364d3.entry.js → p-d3d6e75d.entry.js} +1 -1
- package/lib/duet/p-de3c0f4d.js +4 -0
- package/lib/duet/{p-2553a64a.entry.js → p-dfd9a9ff.entry.js} +1 -1
- package/lib/duet/{p-36924c8f.entry.js → p-e3017ffc.entry.js} +1 -1
- package/lib/duet/{p-4fd4ddda.entry.js → p-e358c599.entry.js} +1 -1
- package/lib/duet/{p-d06f9b6c.entry.js → p-e5b22358.entry.js} +1 -1
- package/lib/duet/{p-f2dab640.system.entry.js → p-ea12c081.system.entry.js} +1 -1
- package/lib/duet/{p-ea806947.entry.js → p-ef2f6881.entry.js} +1 -1
- package/lib/duet/{p-4dcbaccf.system.entry.js → p-f2831cda.system.entry.js} +1 -1
- package/lib/duet/{p-0f144788.entry.js → p-f2dce86d.entry.js} +1 -1
- package/lib/duet/{p-86a47942.entry.js → p-f30eb0fd.entry.js} +1 -1
- package/lib/duet/{p-8708f306.system.entry.js → p-f661ebf9.system.entry.js} +1 -1
- package/lib/duet/{p-e980faf9.system.entry.js → p-f6f30fb7.system.entry.js} +1 -1
- package/lib/duet/{p-ff94713b.entry.js → p-faf6cfe8.entry.js} +1 -1
- package/lib/duet/{p-2d58c660.system.entry.js → p-fdb0277c.system.entry.js} +1 -1
- package/lib/duet/{p-8c282db8.system.js → p-fe03f359.system.js} +1 -1
- package/lib/duet/{p-7382c47e.system.entry.js → p-ffadc9ea.system.entry.js} +1 -1
- package/lib/esm/duet-action-button.entry.js +25 -7
- package/lib/esm/duet-alert.entry.js +1 -1
- package/lib/esm/duet-badge.entry.js +1 -1
- package/lib/esm/duet-breadcrumb.entry.js +1 -1
- package/lib/esm/duet-breadcrumbs.entry.js +1 -1
- package/lib/esm/duet-button_2.entry.js +2 -2
- package/lib/esm/duet-caption_4.entry.js +2 -2
- 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 +2 -2
- package/lib/esm/duet-combobox.entry.js +2 -2
- 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_3.entry.js +18 -13
- 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 +1 -1
- package/lib/esm/duet-grid_2.entry.js +1 -1
- package/lib/esm/duet-header_2.entry.js +51 -49
- package/lib/esm/duet-hero.entry.js +4 -3
- package/lib/esm/duet-icon.entry.js +2 -2
- package/lib/esm/duet-input_2.entry.js +21 -4
- package/lib/esm/duet-layout.entry.js +1 -1
- package/lib/esm/duet-list_2.entry.js +1 -1
- package/lib/esm/duet-modal.entry.js +2 -2
- package/lib/esm/duet-notification_2.entry.js +1 -1
- package/lib/esm/duet-number-input.entry.js +1 -1
- package/lib/esm/duet-pagination_2.entry.js +2 -2
- 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-scrollable_3.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-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 +2 -2
- package/lib/esm/{focus-utils-07c543df.js → focus-utils-8dc04c1c.js} +1 -1
- package/lib/esm/{index-bcca1cb8.js → index-e1964887.js} +8 -2
- package/lib/esm/{js-utils-52e0944c.js → js-utils-fa98b8cd.js} +11 -0
- package/lib/esm/loader.js +2 -2
- package/lib/esm/{token-utils-1f9435bc.js → token-utils-df78f4d8.js} +1 -1
- package/lib/esm-es5/duet-action-button.entry.js +2 -2
- 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-breadcrumb.entry.js +1 -1
- package/lib/esm-es5/duet-breadcrumbs.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 +1 -1
- package/lib/esm-es5/duet-collapsible.entry.js +2 -2
- package/lib/esm-es5/duet-combobox.entry.js +1 -1
- 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_3.entry.js +1 -1
- 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 +1 -1
- 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-pagination_2.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-scrollable_3.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-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-8dc04c1c.js +4 -0
- package/lib/esm-es5/{index-bcca1cb8.js → index-e1964887.js} +3 -3
- package/lib/esm-es5/{js-utils-52e0944c.js → js-utils-fa98b8cd.js} +0 -0
- package/lib/esm-es5/loader.js +1 -1
- package/lib/esm-es5/token-utils-df78f4d8.js +4 -0
- package/lib/types/components/duet-action-button/duet-action-button.d.ts +12 -4
- package/lib/types/components/duet-header/duet-header-icon.d.ts +1 -0
- package/lib/types/components/duet-header/duet-header.d.ts +2 -2
- package/lib/types/components/duet-hero/duet-hero.d.ts +4 -0
- package/lib/types/components/duet-input/duet-input.d.ts +2 -1
- package/lib/types/components/duet-upload/duet-upload.d.ts +1 -2
- package/lib/types/components.d.ts +17 -9
- package/lib/types/utils/js-utils.d.ts +11 -0
- package/lib/types/utils/token-utils.d.ts +1 -0
- package/package.json +5 -5
- package/lib/duet/p-1717ed62.entry.js +0 -4
- package/lib/duet/p-32dd246d.entry.js +0 -4
- package/lib/duet/p-35159c88.system.entry.js +0 -4
- package/lib/duet/p-61507bc8.entry.js +0 -4
- package/lib/duet/p-6190e2d6.system.js +0 -4
- package/lib/duet/p-661f842b.entry.js +0 -4
- package/lib/duet/p-89f53f18.system.entry.js +0 -4
- package/lib/duet/p-909aaac4.entry.js +0 -4
- package/lib/duet/p-9cca0bb4.js +0 -4
- package/lib/duet/p-9df4bfa0.system.entry.js +0 -4
- package/lib/duet/p-a818e289.entry.js +0 -4
- package/lib/duet/p-c60f00e7.system.entry.js +0 -4
- package/lib/duet/p-ce276fc8.js +0 -4
- package/lib/duet/p-dbb2579c.entry.js +0 -4
- package/lib/esm-es5/focus-utils-07c543df.js +0 -4
- package/lib/esm-es5/token-utils-1f9435bc.js +0 -4
|
@@ -25,7 +25,7 @@ const createEvent = (ev, data) => ({
|
|
|
25
25
|
});
|
|
26
26
|
/**
|
|
27
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
|
|
28
|
+
* @slot logo-utility - A slot to place elements alongside the logo. This takes precedence over the **region** prop. Note: not available in multilevel header.
|
|
29
29
|
* @part header - piercing selector for styling the header element.
|
|
30
30
|
*/
|
|
31
31
|
export class DuetHeader {
|
|
@@ -57,7 +57,7 @@ export class DuetHeader {
|
|
|
57
57
|
this.processedSearch = null;
|
|
58
58
|
this.processedUser = null;
|
|
59
59
|
this.processedBack = null;
|
|
60
|
-
this.renderDesktopNav = (_a = this.mql[0]) === null || _a === void 0 ? void 0 : _a.matches;
|
|
60
|
+
this.renderDesktopNav = Build.isServer ? true : (_a = this.mql[0]) === null || _a === void 0 ? void 0 : _a.matches;
|
|
61
61
|
/**
|
|
62
62
|
* Theme of the header.
|
|
63
63
|
*/
|
|
@@ -173,7 +173,7 @@ export class DuetHeader {
|
|
|
173
173
|
this.skipToId = "";
|
|
174
174
|
/**
|
|
175
175
|
* Region that is shown next to the logo. If empty, region will be hidden.
|
|
176
|
-
* Note: not available in
|
|
176
|
+
* Note: not available in multilevel header.
|
|
177
177
|
*/
|
|
178
178
|
this.region = "";
|
|
179
179
|
/**
|
|
@@ -418,8 +418,9 @@ export class DuetHeader {
|
|
|
418
418
|
* Local methods.
|
|
419
419
|
*/
|
|
420
420
|
async refresh() {
|
|
421
|
-
|
|
422
|
-
|
|
421
|
+
var _a, _b;
|
|
422
|
+
if (this.renderDesktopNav !== Build.isServer ? true : (_a = this.mql[0]) === null || _a === void 0 ? void 0 : _a.matches) {
|
|
423
|
+
this.renderDesktopNav = Build.isServer ? true : (_b = this.mql[0]) === null || _b === void 0 ? void 0 : _b.matches;
|
|
423
424
|
this.openMenu = null;
|
|
424
425
|
if (this.isSlideOutOpen) {
|
|
425
426
|
this.toggleMenu(document.createEvent("UIEvents"), "mobile");
|
|
@@ -492,10 +493,10 @@ export class DuetHeader {
|
|
|
492
493
|
*/
|
|
493
494
|
render() {
|
|
494
495
|
const { skipLabel, changeLanguage, activeLanguage } = this.accessibleI18nLabels;
|
|
495
|
-
const skipToLabel = this.skipToId ? (h("a", { href: this.skipToId, class: "duet-header-skip", onClick: this.handleSkipClick }, skipLabel)) : null;
|
|
496
|
-
const logo = (h("duet-logo", { href: this.logoHref, size: "medium", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
497
|
-
const largeLogo = (h("duet-logo", { href: this.logoHref, size: "large", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
498
|
-
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" },
|
|
496
|
+
const skipToLabel = () => this.skipToId ? (h("a", { href: this.skipToId, class: "duet-header-skip", onClick: this.handleSkipClick }, skipLabel)) : null;
|
|
497
|
+
const logo = () => (h("duet-logo", { href: this.logoHref, size: "medium", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
498
|
+
const largeLogo = () => (h("duet-logo", { href: this.logoHref, size: "large", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
499
|
+
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" },
|
|
499
500
|
item.label,
|
|
500
501
|
Build.isBrowser && item.external && (h(Fragment, null,
|
|
501
502
|
h("duet-visually-hidden", null,
|
|
@@ -503,25 +504,25 @@ export class DuetHeader {
|
|
|
503
504
|
this.accessibleLabelExternal),
|
|
504
505
|
h("span", { class: "duet-header-link-external" },
|
|
505
506
|
h("duet-icon", { name: "action-new-window-small", size: "xx-small", margin: "none", color: this.theme === "turva" ? "primary-turva" : "primary" }))))))))) : null;
|
|
506
|
-
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;
|
|
507
|
-
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 },
|
|
507
|
+
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;
|
|
508
|
+
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 },
|
|
508
509
|
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
509
510
|
h("span", { class: "duet-header-user-label" }, this.processedUser.label))) : null;
|
|
510
|
-
const processedUserWithoutLink = this.processedUser && !this.processedUser.href ? (h("span", { id: this.processedUser.id, class: "duet-header-user duet-header-button duet-header-no-action" },
|
|
511
|
+
const processedUserWithoutLink = () => this.processedUser && !this.processedUser.href ? (h("span", { id: this.processedUser.id, class: "duet-header-user duet-header-button duet-header-no-action" },
|
|
511
512
|
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
512
513
|
h("span", { class: "duet-header-user-label" }, this.processedUser.label))) : null;
|
|
513
|
-
const
|
|
514
|
-
|
|
515
|
-
h(DuetHeaderIcon, { icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, iconSize:
|
|
514
|
+
const processedSession = () => this.processedSession ? (h("a", { href: this.processedSession.href || "#", id: this.processedSession.id, class: "duet-header-logout duet-header-button", onClick: this.handleSessionClick },
|
|
515
|
+
h(DuetHeaderIcon, { class: "desktop", icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, iconSize: "x-small" }),
|
|
516
|
+
h(DuetHeaderIcon, { class: "mobile", icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, iconSize: "small" }),
|
|
516
517
|
h("span", { class: "duet-header-button-label" }, this.processedSession.label))) : null;
|
|
517
|
-
const processedSessionDropdown = this.processedSession && this.processedSession.sessionItems ? (h(DuetHeaderDropdown, { className: "duet-header-session", id: "duet-header-session", label: this.processedSession.label, icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, active: this.isSessionOpen, isOpen: this.isSessionOpen, badge: false, toggleRef: el => (this.sessionItemsButtonEl = el), itemsRef: el => (this.sessionItemsEl = el), onToggle: event => this.toggleMenu(event, "session") }, this.processedSession.sessionItems.map((sessionItem, index) => (h(Fragment, null,
|
|
518
|
+
const processedSessionDropdown = () => this.processedSession && this.processedSession.sessionItems ? (h(DuetHeaderDropdown, { className: "duet-header-session", id: "duet-header-session", label: this.processedSession.label, icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, active: this.isSessionOpen, isOpen: this.isSessionOpen, badge: false, toggleRef: el => (this.sessionItemsButtonEl = el), itemsRef: el => (this.sessionItemsEl = el), onToggle: event => this.toggleMenu(event, "session") }, this.processedSession.sessionItems.map((sessionItem, index) => (h(Fragment, null,
|
|
518
519
|
sessionItem.label && h("span", { class: "duet-header-session-label" }, sessionItem.label),
|
|
519
520
|
h("duet-spacer", { size: "small", "aria-hidden": "true" }),
|
|
520
521
|
sessionItem.items.map(item => (h("a", { role: "menuitem", "aria-label": sessionItem.label ? `${sessionItem.label} ${item.label}` : item.label, id: item.id, href: item.href || "#", onClick: event => this.handleSessionItemClick(event, item), onKeyDown: this.handleArrowKeys }, item.label))),
|
|
521
522
|
index !== this.processedSession.sessionItems.length - 1 && (h(Fragment, null,
|
|
522
523
|
h("duet-spacer", { size: "x-small", "aria-hidden": "true" }),
|
|
523
524
|
h("duet-divider", { margin: "none", "aria-hidden": "true" })))))))) : null;
|
|
524
|
-
const processedSearch = this.processedSearch ? (h("a", { href: this.processedSearch.href || "#", id: this.processedSearch.id, class: "duet-header-search duet-header-button", onClick: this.handleSearchClick },
|
|
525
|
+
const processedSearch = () => this.processedSearch ? (h("a", { href: this.processedSearch.href || "#", id: this.processedSearch.id, class: "duet-header-search duet-header-button", onClick: this.handleSearchClick },
|
|
525
526
|
h(DuetHeaderIcon, { icon: searchIcon.svg }),
|
|
526
527
|
h("span", { class: "duet-header-button-label" }, this.processedSearch.label))) : null;
|
|
527
528
|
// Back variation
|
|
@@ -535,23 +536,104 @@ export class DuetHeader {
|
|
|
535
536
|
"duet-header-inactive": true,
|
|
536
537
|
}, part: "header" },
|
|
537
538
|
h("div", { class: "duet-header-top" },
|
|
538
|
-
skipToLabel,
|
|
539
|
+
skipToLabel(),
|
|
539
540
|
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),
|
|
540
|
-
logo,
|
|
541
|
+
logo(),
|
|
541
542
|
h("slot", { name: "logo-utility" }))))));
|
|
542
543
|
}
|
|
543
|
-
// multi level desktop variation
|
|
544
544
|
const itemsHaveSubItems = this.processedItems && this.processedItems.some(item => item.items && item.items.length > 0);
|
|
545
|
-
|
|
545
|
+
const isSecondLevelActive = this.processedItems &&
|
|
546
|
+
this.processedItems.some(item => item.items && item.items.some(secondLevelItem => secondLevelItem.active === true));
|
|
547
|
+
const isThirdLevelActive = this.processedItems &&
|
|
548
|
+
this.processedItems.some(item => item.items &&
|
|
549
|
+
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
550
|
+
const defaultVariationContent = (h("div", { class: {
|
|
551
|
+
"duet-header-reserved-space": true,
|
|
552
|
+
"duet-with-links": !!this.processedItems,
|
|
553
|
+
"duet-header-second-level-active": isSecondLevelActive,
|
|
554
|
+
"duet-header-third-level-active": isThirdLevelActive,
|
|
555
|
+
"duet-header-items-have-sub-items": itemsHaveSubItems,
|
|
556
|
+
} },
|
|
557
|
+
h("header", { class: {
|
|
558
|
+
"duet-header": true,
|
|
559
|
+
"duet-theme-turva": this.theme === "turva",
|
|
560
|
+
"duet-header-inactive": !this.processedItems,
|
|
561
|
+
}, part: "header" },
|
|
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) ||
|
|
584
|
+
(item.active === true &&
|
|
585
|
+
!this.openMenu &&
|
|
586
|
+
this.closedActives &&
|
|
587
|
+
this.closedActives.length === 1) ||
|
|
588
|
+
(item.active === true &&
|
|
589
|
+
!this.openMenu &&
|
|
590
|
+
item.items &&
|
|
591
|
+
!item.items.some(s => s.active === true)),
|
|
592
|
+
}, href: item.href || "#", id: item.id || `header-item-${itemIndex}`, onClick: event => this.handleItemClick(event, item) },
|
|
593
|
+
item.label,
|
|
594
|
+
item.badge && h("div", { class: "duet-header-badge" })),
|
|
595
|
+
item.items &&
|
|
596
|
+
item.items
|
|
597
|
+
.filter(secondLevelitem => secondLevelitem.items && secondLevelitem.items.length > 0)
|
|
598
|
+
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
599
|
+
const id = secondLevelItem.id || `header-item-${itemIndex}-${secondLevelItemIndex}`;
|
|
600
|
+
const active = (!this.openMenu &&
|
|
601
|
+
secondLevelItem.active === true &&
|
|
602
|
+
!(this.closedActives && !!this.closedActives.find(i => i === id))) ||
|
|
603
|
+
this.openMenu === id;
|
|
604
|
+
const activeBar = active && !(secondLevelItem.items && secondLevelItem.items.some(s => s.active === true));
|
|
605
|
+
return (h(DuetHeaderDropdown, { id: id, className: "duet-header-second-level", label: secondLevelItem.label, icon: `${secondLevelItem.icon}.svg`, active: activeBar, isOpen: active, 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) },
|
|
606
|
+
h("div", { class: "duet-header-third-level" }, secondLevelItem.items &&
|
|
607
|
+
secondLevelItem.items.map(thirdLevelItem => (h("a", { class: {
|
|
608
|
+
"duet-header-item": true,
|
|
609
|
+
active: thirdLevelItem.active === true,
|
|
610
|
+
}, role: "menuitem", href: thirdLevelItem.href || "#", id: thirdLevelItem.id, onClick: event => this.handleItemClick(event, thirdLevelItem), onKeyDown: ev => this.handleArrowKeys(ev), target: thirdLevelItem.external ? "_blank" : "_self" },
|
|
611
|
+
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
612
|
+
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
613
|
+
h("span", null, thirdLevelItem.label),
|
|
614
|
+
thirdLevelItem.badge && h("div", { class: "duet-header-badge" })))))));
|
|
615
|
+
}))))),
|
|
616
|
+
h("div", { class: "duet-header-bottom-utils" },
|
|
617
|
+
h("slot", { name: "utility" })),
|
|
618
|
+
h("div", { class: "duet-header-utils" },
|
|
619
|
+
!itemsHaveSubItems && contactDropdown(),
|
|
620
|
+
languageDropdown(),
|
|
621
|
+
!itemsHaveSubItems && (h(Fragment, null,
|
|
622
|
+
processedUserWithLink(),
|
|
623
|
+
processedUserWithoutLink())),
|
|
624
|
+
processedSearch(),
|
|
625
|
+
processedSession())))));
|
|
626
|
+
// multi level variation
|
|
627
|
+
if (itemsHaveSubItems) {
|
|
546
628
|
const activeSegment = this.processedItems.find(item => item.active);
|
|
547
629
|
const isThirdLevelActive = this.processedItems &&
|
|
548
630
|
this.processedItems.some(item => item.items &&
|
|
549
631
|
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
550
632
|
const segmentId = "duet-header-segment";
|
|
551
|
-
return (h(Host, { class: "duet-header-multi-level-
|
|
633
|
+
return (h(Host, { class: "duet-header-multi-level-variation" },
|
|
552
634
|
h("div", { class: {
|
|
553
|
-
"duet-header-multi-level
|
|
554
|
-
"duet-header-multi-level-
|
|
635
|
+
"duet-header-multi-level": true,
|
|
636
|
+
"duet-header-multi-level-third-level-is-open": isThirdLevelActive,
|
|
555
637
|
} },
|
|
556
638
|
h("header", { class: {
|
|
557
639
|
"duet-header": true,
|
|
@@ -559,15 +641,15 @@ export class DuetHeader {
|
|
|
559
641
|
"duet-header-inactive": !this.processedItems,
|
|
560
642
|
}, part: "header" },
|
|
561
643
|
h("div", { class: "duet-header-top" },
|
|
562
|
-
skipToLabel,
|
|
644
|
+
skipToLabel(),
|
|
563
645
|
h("div", { class: "logo-and-segment" },
|
|
564
|
-
h("div", null, largeLogo),
|
|
646
|
+
h("div", null, largeLogo()),
|
|
565
647
|
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" },
|
|
566
648
|
item.icon && (h("div", { class: "duet-header-icon" },
|
|
567
649
|
h("duet-icon", { margin: "none", size: "x-small", name: item.icon, color: "currentColor" }))),
|
|
568
650
|
h("span", null, item.label),
|
|
569
651
|
item.badge && h("div", { class: "duet-header-badge" }))))))),
|
|
570
|
-
h("nav", { class: "duet-header-multi-level-
|
|
652
|
+
h("nav", { class: "duet-header-multi-level-nav" }, activeSegment.items &&
|
|
571
653
|
activeSegment.items
|
|
572
654
|
.filter(secondLevelItem => secondLevelItem.items && secondLevelItem.items.length > 0)
|
|
573
655
|
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
@@ -579,96 +661,17 @@ export class DuetHeader {
|
|
|
579
661
|
h("span", null, thirdLevelItem.label),
|
|
580
662
|
thirdLevelItem.badge && h("div", { class: "duet-header-badge" }))))));
|
|
581
663
|
})),
|
|
582
|
-
h("div", { class: "duet-header-multi-level-
|
|
583
|
-
processedSearch,
|
|
584
|
-
languageDropdown,
|
|
585
|
-
processedSessionDropdown != null ? processedSessionDropdown : processedSession),
|
|
586
|
-
h("slot", { name: "utility" }))))
|
|
664
|
+
h("div", { class: "duet-header-multi-level-utils" },
|
|
665
|
+
processedSearch(),
|
|
666
|
+
languageDropdown(),
|
|
667
|
+
processedSessionDropdown() != null ? processedSessionDropdown() : processedSession()),
|
|
668
|
+
h("slot", { name: "utility" })))),
|
|
669
|
+
defaultVariationContent));
|
|
587
670
|
}
|
|
588
671
|
// Default variation
|
|
589
|
-
const isSecondLevelActive = this.processedItems &&
|
|
590
|
-
this.processedItems.some(item => item.items && item.items.some(secondLevelItem => secondLevelItem.active === true));
|
|
591
|
-
const isThirdLevelActive = this.processedItems &&
|
|
592
|
-
this.processedItems.some(item => item.items &&
|
|
593
|
-
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
594
672
|
return (h(Host, { class: {
|
|
595
673
|
"duet-header-default-variation": true,
|
|
596
|
-
} },
|
|
597
|
-
h("div", { class: {
|
|
598
|
-
"duet-header-reserved-space": true,
|
|
599
|
-
"duet-with-links": !!this.processedItems,
|
|
600
|
-
"duet-header-second-level-active": isSecondLevelActive,
|
|
601
|
-
"duet-header-third-level-active": isThirdLevelActive,
|
|
602
|
-
} },
|
|
603
|
-
h("header", { class: {
|
|
604
|
-
"duet-header": true,
|
|
605
|
-
"duet-theme-turva": this.theme === "turva",
|
|
606
|
-
"duet-header-inactive": !this.processedItems,
|
|
607
|
-
}, part: "header" },
|
|
608
|
-
h("div", { class: "duet-header-top" },
|
|
609
|
-
skipToLabel,
|
|
610
|
-
logo,
|
|
611
|
-
h("slot", { name: "logo-utility" }, this.region && h("div", { class: "duet-header-region" }, this.region)),
|
|
612
|
-
(this.processedItems ||
|
|
613
|
-
languageDropdown ||
|
|
614
|
-
contactDropdown ||
|
|
615
|
-
this.processedSession ||
|
|
616
|
-
this.processedUser) && (h("button", { class: { "duet-header-toggle": true, active: this.isSlideOutOpen }, onClick: event => this.toggleMenu(event, "mobile"), type: "button" },
|
|
617
|
-
h("duet-visually-hidden", null, this.accessibleLabel),
|
|
618
|
-
h(DuetHeaderHamburger, null)))),
|
|
619
|
-
h("div", { ref: el => (this.navigationEl = el), class: {
|
|
620
|
-
"duet-header-bottom": true,
|
|
621
|
-
active: this.isSlideOutOpen,
|
|
622
|
-
inactive: !this.processedItems,
|
|
623
|
-
} },
|
|
624
|
-
h("nav", { class: "duet-header-items", role: "navigation" }, this.processedItems &&
|
|
625
|
-
this.processedItems.map((item, itemIndex) => (h("div", { class: "duet-header-item-container" },
|
|
626
|
-
h("a", { class: {
|
|
627
|
-
"duet-header-first-level": true,
|
|
628
|
-
"duet-header-item": true,
|
|
629
|
-
active: (!itemsHaveSubItems && this.currentHref === item.href) ||
|
|
630
|
-
(item.active === true &&
|
|
631
|
-
!this.openMenu &&
|
|
632
|
-
this.closedActives &&
|
|
633
|
-
this.closedActives.length === 1) ||
|
|
634
|
-
(item.active === true &&
|
|
635
|
-
!this.openMenu &&
|
|
636
|
-
item.items &&
|
|
637
|
-
!item.items.some(s => s.active === true)),
|
|
638
|
-
}, href: item.href || "#", id: item.id || `header-item-${itemIndex}`, onClick: event => this.handleItemClick(event, item) },
|
|
639
|
-
item.label,
|
|
640
|
-
item.badge && h("div", { class: "duet-header-badge" })),
|
|
641
|
-
item.items &&
|
|
642
|
-
item.items
|
|
643
|
-
.filter(secondLevelitem => secondLevelitem.items && secondLevelitem.items.length > 0)
|
|
644
|
-
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
645
|
-
const id = secondLevelItem.id || `header-item-${itemIndex}-${secondLevelItemIndex}`;
|
|
646
|
-
const active = (!this.openMenu &&
|
|
647
|
-
secondLevelItem.active === true &&
|
|
648
|
-
!(this.closedActives && !!this.closedActives.find(i => i === id))) ||
|
|
649
|
-
this.openMenu === id;
|
|
650
|
-
const activeBar = active && !(secondLevelItem.items && secondLevelItem.items.some(s => s.active === true));
|
|
651
|
-
return (h(DuetHeaderDropdown, { id: id, className: "duet-header-second-level", label: secondLevelItem.label, icon: `${secondLevelItem.icon}.svg`, active: activeBar, isOpen: active, 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) },
|
|
652
|
-
h("div", { class: "duet-header-third-level" }, secondLevelItem.items &&
|
|
653
|
-
secondLevelItem.items.map(thirdLevelItem => (h("a", { class: {
|
|
654
|
-
"duet-header-item": true,
|
|
655
|
-
active: thirdLevelItem.active === true,
|
|
656
|
-
}, role: "menuitem", href: thirdLevelItem.href || "#", id: thirdLevelItem.id, onClick: event => this.handleItemClick(event, thirdLevelItem), onKeyDown: ev => this.handleArrowKeys(ev), target: thirdLevelItem.external ? "_blank" : "_self" },
|
|
657
|
-
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
658
|
-
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
659
|
-
h("span", null, thirdLevelItem.label),
|
|
660
|
-
thirdLevelItem.badge && h("div", { class: "duet-header-badge" })))))));
|
|
661
|
-
}))))),
|
|
662
|
-
h("div", { class: "duet-header-bottom-utils" },
|
|
663
|
-
h("slot", { name: "utility" })),
|
|
664
|
-
h("div", { class: "duet-header-utils" },
|
|
665
|
-
!itemsHaveSubItems && contactDropdown,
|
|
666
|
-
languageDropdown,
|
|
667
|
-
!itemsHaveSubItems && (h(Fragment, null,
|
|
668
|
-
processedUserWithLink,
|
|
669
|
-
processedUserWithoutLink)),
|
|
670
|
-
processedSearch,
|
|
671
|
-
processedSession))))));
|
|
674
|
+
} }, defaultVariationContent));
|
|
672
675
|
}
|
|
673
676
|
static get is() { return "duet-header"; }
|
|
674
677
|
static get encapsulation() { return "shadow"; }
|
|
@@ -977,7 +980,7 @@ export class DuetHeader {
|
|
|
977
980
|
"optional": false,
|
|
978
981
|
"docs": {
|
|
979
982
|
"tags": [],
|
|
980
|
-
"text": "Region that is shown next to the logo. If empty, region will be hidden.\nNote: not available in
|
|
983
|
+
"text": "Region that is shown next to the logo. If empty, region will be hidden.\nNote: not available in multilevel header."
|
|
981
984
|
},
|
|
982
985
|
"attribute": "region",
|
|
983
986
|
"reflect": false,
|
|
@@ -8,8 +8,11 @@ import { inheritGlobalTheme } from "../../common/themeable-component";
|
|
|
8
8
|
import { getLanguage, getLocaleString } from "../../utils/language-utils";
|
|
9
9
|
import { parsePossibleJSON } from "../../utils/string-utils";
|
|
10
10
|
/**
|
|
11
|
+
* @part duet-hero - piercing selector for styling the hero container
|
|
11
12
|
* @slot default - This is an unamed slot for a text or extra button that is placed after any buttons (or list item)
|
|
12
13
|
* @slot badge - This is a slot for a status badge that sits next to pre-heading inside the hero component.
|
|
14
|
+
* @slot bottom - This is a slot for content under the main hero content.
|
|
15
|
+
* @slot heading - This is a slot for heading content inside the hero component.
|
|
13
16
|
*/
|
|
14
17
|
export class DuetHero {
|
|
15
18
|
constructor() {
|
|
@@ -25,6 +28,7 @@ export class DuetHero {
|
|
|
25
28
|
*/
|
|
26
29
|
this.theme = "";
|
|
27
30
|
/**
|
|
31
|
+
* @deprecated please use heading slot instead.
|
|
28
32
|
* The heading of the hero area, rendered in an H1 tag. P.S. you can control
|
|
29
33
|
* the level of the HTML heading by using “level” prop. If empty, heading
|
|
30
34
|
* will be hidden.
|
|
@@ -196,7 +200,7 @@ export class DuetHero {
|
|
|
196
200
|
"duet-hero-gray-with-back": !!this.processedBack,
|
|
197
201
|
"duet-hero-text-center": this.textCenter && !this.leftAlign,
|
|
198
202
|
"duet-hero-left-align": this.leftAlign,
|
|
199
|
-
} },
|
|
203
|
+
}, part: "duet-hero" },
|
|
200
204
|
h("div", { class: "duet-hero-wrapper" },
|
|
201
205
|
this.image && this.variation === "image" && (h("div", { class: "duet-hero-image-mask" },
|
|
202
206
|
h("div", { class: "duet-hero-image-wrapper" },
|
|
@@ -213,7 +217,7 @@ export class DuetHero {
|
|
|
213
217
|
h("div", { class: "duet-hero-text" },
|
|
214
218
|
this.preHeading && (h("duet-paragraph", { margin: "none", class: "duet-hero-pre" }, this.preHeading)),
|
|
215
219
|
h("slot", { name: "badge" }),
|
|
216
|
-
h("duet-heading", { theme: this.theme, level: this.level, class: { "duet-hero-heading": true, "duet-hero-heading-has-pre": this.preHeading !== "" }, color: this.variation === "default" ? "gray-lightest" : "", visualLevel: this.variation === "gray" || this.variation === "minimal" ? "h2" : "h1" }, this.heading),
|
|
220
|
+
h("duet-heading", { theme: this.theme, level: this.level, class: { "duet-hero-heading": true, "duet-hero-heading-has-pre": this.preHeading !== "" }, color: this.variation === "default" ? "gray-lightest" : "", visualLevel: this.variation === "gray" || this.variation === "minimal" ? "h2" : "h1" }, this.heading ? this.heading : h("slot", { name: "heading" })),
|
|
217
221
|
this.description && (h("duet-paragraph", { theme: this.theme, color: textColor, variation: "intro" }, this.description)),
|
|
218
222
|
(this.variation === "gray" || this.variation === "minimal") && this.processedListItems && (h("duet-list", { theme: this.theme, "label-width": "30", breakpoint: "large", mobile: this.leftAlign ? undefined : "center" }, this.processedListItems.map(item => (h("duet-list-item", null,
|
|
219
223
|
h("span", { slot: "label" }, item.label),
|
|
@@ -230,7 +234,8 @@ export class DuetHero {
|
|
|
230
234
|
this.accessibleLabelExternal),
|
|
231
235
|
item.external && (h("div", { class: "duet-hero-action-arrow" },
|
|
232
236
|
h("duet-icon", { icon: newWindowIcon.svg, size: "xx-small", margin: "none", color: "currentColor" })))))))),
|
|
233
|
-
this.image && this.variation !== "image" && h("div", { class: "duet-hero-image", style: styles })
|
|
237
|
+
this.image && this.variation !== "image" && h("div", { class: "duet-hero-image", style: styles }),
|
|
238
|
+
h("slot", { name: "bottom" }))));
|
|
234
239
|
}
|
|
235
240
|
static get is() { return "duet-hero"; }
|
|
236
241
|
static get encapsulation() { return "shadow"; }
|
|
@@ -275,8 +280,11 @@ export class DuetHero {
|
|
|
275
280
|
"required": false,
|
|
276
281
|
"optional": false,
|
|
277
282
|
"docs": {
|
|
278
|
-
"tags": [
|
|
279
|
-
|
|
283
|
+
"tags": [{
|
|
284
|
+
"name": "deprecated",
|
|
285
|
+
"text": "please use heading slot instead.\nThe heading of the hero area, rendered in an H1 tag. P.S. you can control\nthe level of the HTML heading by using \u201Clevel\u201D prop. If empty, heading\nwill be hidden."
|
|
286
|
+
}],
|
|
287
|
+
"text": ""
|
|
280
288
|
},
|
|
281
289
|
"attribute": "heading",
|
|
282
290
|
"reflect": false,
|
|
@@ -30,6 +30,11 @@ export class DuetInput {
|
|
|
30
30
|
fi: "Tyhjennä",
|
|
31
31
|
sv: "Rensa",
|
|
32
32
|
});
|
|
33
|
+
this.timeAnnouncement = getLocaleString({
|
|
34
|
+
en: "Time",
|
|
35
|
+
fi: "Aika",
|
|
36
|
+
sv: "Tid",
|
|
37
|
+
});
|
|
33
38
|
/**
|
|
34
39
|
* Indicates the id or a string of space seperated ids of a component(s) that describes the input.
|
|
35
40
|
*/
|
|
@@ -281,14 +286,26 @@ export class DuetInput {
|
|
|
281
286
|
else if (!this.pattern && this.type === "tel") {
|
|
282
287
|
inputProps.pattern = "[0-9+ ]+";
|
|
283
288
|
}
|
|
289
|
+
let selectedTime;
|
|
290
|
+
if (this.value) {
|
|
291
|
+
selectedTime = new Date();
|
|
292
|
+
try {
|
|
293
|
+
selectedTime.setHours(Number(this.value.slice(0, 2)), Number(this.value.slice(3, 5)), 0, 0);
|
|
294
|
+
}
|
|
295
|
+
catch (e) {
|
|
296
|
+
selectedTime = undefined;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
284
299
|
return (h(Host, { class: { "duet-expand": this.expand, "duet-m-0": this.margin === "none" }, onKeyUp: e => this.keyHandler(e) },
|
|
300
|
+
this.type === "time" && (h("duet-visually-hidden", { "aria-live": "polite", "aria-atomic": "true" }, selectedTime ? `${this.timeAnnouncement} ${selectedTime.toLocaleTimeString()}` : "")),
|
|
285
301
|
h("div", { class: {
|
|
286
302
|
"duet-input-container": true,
|
|
287
303
|
"duet-theme-turva": this.theme === "turva",
|
|
288
304
|
[`duet-input-variation-${this.variation}`]: true,
|
|
289
305
|
"duet-label-hidden": this.labelHidden,
|
|
290
306
|
"duet-input-top-caption-shown": this.isCaptionVisible,
|
|
291
|
-
"has-icon": !!this.icon ||
|
|
307
|
+
"has-icon": !!this.icon ||
|
|
308
|
+
(this.type !== "text" && this.type !== "tel" && this.type !== "password" && this.type !== "time"),
|
|
292
309
|
"has-error": !!this.error,
|
|
293
310
|
"has-clear": this.clear,
|
|
294
311
|
} },
|
|
@@ -296,7 +313,7 @@ export class DuetInput {
|
|
|
296
313
|
this.tooltip && (h("duet-tooltip", { direction: this.tooltipDirection, accessibleInputLabel: this.label }, this.tooltip)),
|
|
297
314
|
this.caption && (h("duet-caption", { id: this.topCaptionId, size: "medium" }, this.caption)),
|
|
298
315
|
h("div", { class: "duet-input-relative" },
|
|
299
|
-
this.placeholder && this.echoPlaceholder && this.value && (h("duet-caption", { id: this.topCaptionPlaceholderId, class: "duet-input-placeholder", margin: "none", size: "small" }, this.placeholder)),
|
|
316
|
+
this.placeholder && this.echoPlaceholder && (this.value || this.type === "time") && (h("duet-caption", { id: this.topCaptionPlaceholderId, class: "duet-input-placeholder", margin: "none", size: "small" }, this.placeholder)),
|
|
300
317
|
h("input", Object.assign({ ref: input => (this.nativeInput = input), onInput: this.onInput, onBlur: this.onBlur, onFocus: this.onFocus, type: this.type, class: {
|
|
301
318
|
"duet-input": true,
|
|
302
319
|
disabled: this.disabled,
|
|
@@ -309,6 +326,7 @@ export class DuetInput {
|
|
|
309
326
|
this.type !== "text" &&
|
|
310
327
|
this.type !== "tel" &&
|
|
311
328
|
this.type !== "password" &&
|
|
329
|
+
this.type !== "time" &&
|
|
312
330
|
this.variation !== "button" && (h("div", { class: "duet-input-icon" },
|
|
313
331
|
h("duet-icon", { margin: "none", size: "small", icon: icons[this.type].svg, color: "currentColor" }))),
|
|
314
332
|
this.clear && this.value && (h("div", { class: "duet-input-clear-icon" },
|
|
@@ -697,7 +715,7 @@ export class DuetInput {
|
|
|
697
715
|
"mutable": false,
|
|
698
716
|
"complexType": {
|
|
699
717
|
"original": "DuetInputType",
|
|
700
|
-
"resolved": "\"email\" | \"password\" | \"search\" | \"tel\" | \"text\"",
|
|
718
|
+
"resolved": "\"email\" | \"password\" | \"search\" | \"tel\" | \"text\" | \"time\"",
|
|
701
719
|
"references": {
|
|
702
720
|
"DuetInputType": {
|
|
703
721
|
"location": "local"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
4
|
import { Component, Element, Event, h, Host, Method, Prop, State, Watch } from "@stencil/core";
|
|
5
|
-
import { inheritGlobalTheme } from "../../common
|
|
5
|
+
import { inheritGlobalTheme } from "../../common";
|
|
6
6
|
import { createID } from "../../utils/create-id";
|
|
7
7
|
import { debounce } from "../../utils/js-utils";
|
|
8
8
|
import { getLocaleString, sanitizeString } from "../../utils/language-utils";
|
|
@@ -323,14 +323,6 @@ export class DuetUpload {
|
|
|
323
323
|
* @example [{ id: "success", label: {fi: "Onnistunut", en: "Success", sv: "Alt klart", }}]
|
|
324
324
|
*/
|
|
325
325
|
this.groups = [
|
|
326
|
-
{
|
|
327
|
-
id: this.DefaultGroups.inprogress,
|
|
328
|
-
label: {
|
|
329
|
-
fi: "Kesken olevat tiedostot",
|
|
330
|
-
sv: "Filer inprogress",
|
|
331
|
-
en: "Files inprogress",
|
|
332
|
-
},
|
|
333
|
-
},
|
|
334
326
|
{
|
|
335
327
|
id: this.DefaultGroups.pending,
|
|
336
328
|
label: {
|
|
@@ -355,6 +347,14 @@ export class DuetUpload {
|
|
|
355
347
|
en: "Files with errors",
|
|
356
348
|
},
|
|
357
349
|
},
|
|
350
|
+
{
|
|
351
|
+
id: this.DefaultGroups.inprogress,
|
|
352
|
+
label: {
|
|
353
|
+
fi: "Kesken olevat tiedostot",
|
|
354
|
+
sv: "Filer inprogress",
|
|
355
|
+
en: "Files inprogress",
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
358
|
];
|
|
359
359
|
this.kick = debounce(() => {
|
|
360
360
|
this.tick = Date.now();
|
|
@@ -736,17 +736,17 @@ export class DuetUpload {
|
|
|
736
736
|
}
|
|
737
737
|
});
|
|
738
738
|
return {
|
|
739
|
-
inprogress,
|
|
740
739
|
pending,
|
|
741
740
|
failure,
|
|
742
741
|
success,
|
|
742
|
+
inprogress,
|
|
743
743
|
};
|
|
744
744
|
};
|
|
745
745
|
this.getColumns = (group) => {
|
|
746
746
|
return [
|
|
747
747
|
{
|
|
748
748
|
sort_order: 1,
|
|
749
|
-
direction: 1,
|
|
749
|
+
direction: -1,
|
|
750
750
|
index: 0,
|
|
751
751
|
key: group.id,
|
|
752
752
|
label: group.label,
|
|
@@ -1894,7 +1894,7 @@ export class DuetUpload {
|
|
|
1894
1894
|
}],
|
|
1895
1895
|
"text": "Array of group names that you want the editable table to use to display files"
|
|
1896
1896
|
},
|
|
1897
|
-
"defaultValue": "[\n {\n id: this.DefaultGroups.
|
|
1897
|
+
"defaultValue": "[\n {\n id: this.DefaultGroups.pending,\n label: {\n en: \"Files to upload\",\n sv: \"Filer att ladda\",\n fi: \"Ladattavat tiedostot\",\n },\n },\n {\n id: this.DefaultGroups.success,\n label: {\n fi: \"Valmiit tiedostot\",\n sv: \"Files success\",\n en: \"Files success\",\n },\n },\n {\n id: this.DefaultGroups.failure,\n label: {\n fi: \"Tiedostot, joissa on virheit\u00E4\",\n sv: \"Filer med fel\",\n en: \"Files with errors\",\n },\n },\n {\n id: this.DefaultGroups.inprogress,\n label: {\n fi: \"Kesken olevat tiedostot\",\n sv: \"Filer inprogress\",\n en: \"Files inprogress\",\n },\n },\n ]"
|
|
1898
1898
|
}
|
|
1899
1899
|
}; }
|
|
1900
1900
|
static get states() { return {
|
|
@@ -40,7 +40,12 @@ export const validateFile = (item, validators, errorCodes) => {
|
|
|
40
40
|
if (item) {
|
|
41
41
|
const { name, type, size } = item;
|
|
42
42
|
const mime = validateFileMime(type, allowedMimetypes);
|
|
43
|
-
const ext =
|
|
43
|
+
const ext = allowedExtensions === "all" ||
|
|
44
|
+
allowedExtensions === "" ||
|
|
45
|
+
allowedExtensions === " " ||
|
|
46
|
+
allowedExtensions === undefined
|
|
47
|
+
? true
|
|
48
|
+
: validateFileExtension(name.toLowerCase(), allowedExtensions);
|
|
44
49
|
const bytes = validateFileSize(size, maxBytes);
|
|
45
50
|
if (!mime) {
|
|
46
51
|
errorMessage = getError("duet-upload-101", errorCodes);
|
|
@@ -10,6 +10,17 @@ export const debounce = (func, timeout = 250) => {
|
|
|
10
10
|
}, timeout);
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* The fieldSorter function is a helper function that takes an array of objects and returns
|
|
15
|
+
* a function that can be used to sort those objects. The returned sorting function takes two
|
|
16
|
+
* parameters, which are compared using the field values in the object. If one object's field value is greater than another's, then 1 is returned; if they're equal, 0 is returned; and if one object's field value is less than another's, - 1 will be returned. This allows for easy sorting by multiple fields in any order desired (e.g., first by name ascending and then by age descending).
|
|
17
|
+
*
|
|
18
|
+
*
|
|
19
|
+
* @param fields Sort the table
|
|
20
|
+
*
|
|
21
|
+
* @return A function that takes two objects and returns an integer
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
13
24
|
export function fieldSorter(fields) {
|
|
14
25
|
return function (a, b) {
|
|
15
26
|
return fields
|