@duetds/components 5.4.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/hydrate/index.js +113 -92
- package/lib/cjs/duet-action-button.cjs.entry.js +2 -2
- 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 +1 -1
- package/lib/cjs/duet-caption_4.cjs.entry.js +4 -3
- package/lib/cjs/duet-card.cjs.entry.js +1 -1
- 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 +1 -1
- 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 +10 -2
- package/lib/cjs/duet-grid_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-header_2.cjs.entry.js +61 -51
- package/lib/cjs/duet-hero.cjs.entry.js +5 -3
- package/lib/cjs/duet-icon.cjs.entry.js +1 -1
- package/lib/cjs/duet-input_2.cjs.entry.js +1 -1
- 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 +1 -1
- package/lib/cjs/{focus-utils-7c1832b2.js → focus-utils-fed98b6a.js} +1 -1
- package/lib/cjs/{index-63f324e3.js → index-b5a163e2.js} +8 -1
- package/lib/cjs/{js-utils-be1d29ae.js → js-utils-134e0318.js} +11 -0
- package/lib/cjs/loader.cjs.js +1 -1
- package/lib/collection/components/duet-choice-group/duet-choice-group.js +7 -1
- package/lib/collection/components/duet-footer/duet-footer.js +28 -2
- 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 +145 -116
- package/lib/collection/components/duet-heading/duet-heading.css +4 -0
- package/lib/collection/components/duet-heading/duet-heading.js +4 -3
- package/lib/collection/components/duet-hero/duet-hero.js +16 -6
- package/lib/collection/components/duet-upload/duet-upload.js +11 -11
- package/lib/collection/components/duet-upload/upload-validators.js +6 -1
- package/lib/collection/utils/js-utils.js +11 -0
- package/lib/custom-elements-bundle/index.js +110 -67
- package/lib/duet/duet.esm.js +1 -1
- package/lib/duet/duet.js +1 -1
- package/lib/duet/{p-f63f1511.entry.js → p-043ca8c2.entry.js} +1 -1
- package/lib/duet/{p-6aece7e2.entry.js → p-092249a4.entry.js} +1 -1
- package/lib/duet/{p-30153133.system.entry.js → p-09c538d2.system.entry.js} +1 -1
- package/lib/duet/{p-dbb4a588.js → p-0b3f675e.js} +0 -0
- package/lib/duet/{p-ec96f020.system.entry.js → p-0d51a865.system.entry.js} +1 -1
- package/lib/duet/{p-3bdc0b4e.entry.js → p-106412f9.entry.js} +1 -1
- package/lib/duet/{p-0b3f7f25.entry.js → p-106d0e6c.entry.js} +1 -1
- package/lib/duet/{p-0f6e4db9.system.js → p-109762c2.system.js} +1 -1
- package/lib/duet/{p-426854f8.system.entry.js → p-17abdfb4.system.entry.js} +2 -2
- package/lib/duet/{p-ea4e6d02.system.entry.js → p-1922b678.system.entry.js} +1 -1
- package/lib/duet/{p-da9aa2cc.system.entry.js → p-195a7974.system.entry.js} +1 -1
- package/lib/duet/{p-da62b929.system.entry.js → p-1a14638c.system.entry.js} +1 -1
- package/lib/duet/{p-c2fe4072.system.entry.js → p-1d5bd920.system.entry.js} +1 -1
- package/lib/duet/{p-a93fca8b.entry.js → p-1d795d20.entry.js} +1 -1
- package/lib/duet/{p-87738b6e.entry.js → p-21bb7a14.entry.js} +1 -1
- package/lib/duet/{p-671453a4.entry.js → p-233768f0.entry.js} +1 -1
- package/lib/duet/{p-f3e72c0f.system.entry.js → p-23c58827.system.entry.js} +1 -1
- package/lib/duet/{p-d243054f.entry.js → p-256578d4.entry.js} +1 -1
- package/lib/duet/{p-e15ae3b1.system.entry.js → p-2a124811.system.entry.js} +1 -1
- package/lib/duet/{p-ec34f321.system.entry.js → p-2f25b72e.system.entry.js} +1 -1
- package/lib/duet/{p-92639d0b.system.js → p-34ea0849.system.js} +0 -0
- package/lib/duet/{p-0416a99f.entry.js → p-3573ed90.entry.js} +1 -1
- package/lib/duet/{p-b34d417d.system.entry.js → p-3a02d67d.system.entry.js} +1 -1
- package/lib/duet/{p-7ad2c618.system.entry.js → p-3a143c07.system.entry.js} +1 -1
- package/lib/duet/{p-c83e1e74.entry.js → p-3e354012.entry.js} +1 -1
- package/lib/duet/{p-ce8ddf05.entry.js → p-421888a7.entry.js} +1 -1
- package/lib/duet/{p-19cac237.system.entry.js → p-43db1cad.system.entry.js} +1 -1
- package/lib/duet/{p-768141d2.system.entry.js → p-4978446c.system.entry.js} +2 -2
- package/lib/duet/{p-a903df4e.entry.js → p-49e26895.entry.js} +1 -1
- package/lib/duet/{p-da59200a.system.entry.js → p-4c0fbc6b.system.entry.js} +1 -1
- package/lib/duet/{p-4b50c47b.entry.js → p-504eb2f5.entry.js} +1 -1
- package/lib/duet/{p-bdbb5c7d.system.entry.js → p-50e695ce.system.entry.js} +1 -1
- package/lib/duet/p-53ebaffb.js +4 -0
- package/lib/duet/{p-86575e21.entry.js → p-597286df.entry.js} +1 -1
- package/lib/duet/{p-f86937f0.system.js → p-5a8745fb.system.js} +3 -3
- package/lib/duet/{p-cd8b61fd.entry.js → p-5cff11a9.entry.js} +1 -1
- package/lib/duet/{p-5fea867d.entry.js → p-5eb3e636.entry.js} +1 -1
- package/lib/duet/p-63d2755a.entry.js +4 -0
- package/lib/duet/{p-909b6b44.system.entry.js → p-70fe3594.system.entry.js} +1 -1
- package/lib/duet/{p-347a4bb8.system.entry.js → p-778cd181.system.entry.js} +1 -1
- package/lib/duet/{p-efcc198f.system.entry.js → p-79598c60.system.entry.js} +1 -1
- package/lib/duet/p-7a6bb638.entry.js +4 -0
- package/lib/duet/{p-128ee483.system.entry.js → p-7b84c937.system.entry.js} +1 -1
- package/lib/duet/{p-8fb5f933.entry.js → p-7ca14550.entry.js} +1 -1
- package/lib/duet/{p-cbd51090.system.entry.js → p-7da9836a.system.entry.js} +1 -1
- package/lib/duet/{p-1dec0f2c.entry.js → p-875bd47c.entry.js} +1 -1
- package/lib/duet/{p-723b036a.system.entry.js → p-875c8319.system.entry.js} +1 -1
- package/lib/duet/{p-0f69bf5d.entry.js → p-88e55b15.entry.js} +1 -1
- package/lib/duet/{p-0d8f88c8.entry.js → p-8a5ff071.entry.js} +1 -1
- package/lib/duet/{p-7df06bf2.entry.js → p-8be00ca5.entry.js} +1 -1
- package/lib/duet/p-8f397d81.entry.js +4 -0
- package/lib/duet/{p-2522f85c.system.entry.js → p-9195b70c.system.entry.js} +1 -1
- package/lib/duet/p-93fba18a.system.entry.js +4 -0
- package/lib/duet/{p-767767ad.system.entry.js → p-94760006.system.entry.js} +1 -1
- package/lib/duet/{p-a2b29846.entry.js → p-9589ebe4.entry.js} +1 -1
- package/lib/duet/{p-ed9cc88f.entry.js → p-975e2007.entry.js} +1 -1
- package/lib/duet/{p-967eb38f.system.entry.js → p-97f307cd.system.entry.js} +1 -1
- package/lib/duet/{p-3b06dacd.entry.js → p-993a34d1.entry.js} +1 -1
- package/lib/duet/{p-909a229b.system.entry.js → p-9a9b4340.system.entry.js} +1 -1
- package/lib/duet/{p-67cbfa71.system.js → p-a20a9164.system.js} +1 -1
- package/lib/duet/{p-e2628b7c.system.entry.js → p-a399d48f.system.entry.js} +1 -1
- package/lib/duet/{p-6944e2d1.system.entry.js → p-a5e6dfcb.system.entry.js} +1 -1
- package/lib/duet/{p-f2aeef65.entry.js → p-a61cf42c.entry.js} +1 -1
- package/lib/duet/{p-c90ab5d7.entry.js → p-ad876c3d.entry.js} +1 -1
- package/lib/duet/{p-23a1875c.entry.js → p-ade00e73.entry.js} +1 -1
- package/lib/duet/{p-568fe563.system.entry.js → p-b13d93c1.system.entry.js} +1 -1
- package/lib/duet/{p-77b7fbcd.entry.js → p-b3a0c0f1.entry.js} +1 -1
- package/lib/duet/{p-14acc501.entry.js → p-b98f485a.entry.js} +1 -1
- package/lib/duet/{p-6f073ee3.system.entry.js → p-c570ce3f.system.entry.js} +2 -2
- package/lib/duet/{p-5d5c0181.system.entry.js → p-c7fbbd1f.system.entry.js} +1 -1
- package/lib/duet/{p-b263653d.system.entry.js → p-c8eb26ba.system.entry.js} +1 -1
- package/lib/duet/p-c8fedd4c.entry.js +4 -0
- package/lib/duet/{p-b5fc4eee.entry.js → p-cb471360.entry.js} +1 -1
- package/lib/duet/{p-c9453dc6.system.entry.js → p-cb9d3224.system.entry.js} +1 -1
- package/lib/duet/p-cbddc309.entry.js +4 -0
- package/lib/duet/{p-86ed3c73.system.entry.js → p-cc5f2e90.system.entry.js} +1 -1
- package/lib/duet/{p-62352bbe.system.entry.js → p-cd3a4678.system.entry.js} +1 -1
- package/lib/duet/{p-03957a48.js → p-cddb4ef2.js} +2 -2
- package/lib/duet/p-ce47e5bc.entry.js +4 -0
- package/lib/duet/{p-bf0efbe9.system.entry.js → p-cec7594d.system.entry.js} +1 -1
- package/lib/duet/{p-46f6dea4.system.entry.js → p-d67546f5.system.entry.js} +1 -1
- package/lib/duet/{p-355fd4fc.system.entry.js → p-d6fe977f.system.entry.js} +1 -1
- package/lib/duet/{p-fd7f32f7.entry.js → p-d856ba7e.entry.js} +1 -1
- package/lib/duet/{p-c993f95a.entry.js → p-dd922800.entry.js} +1 -1
- package/lib/duet/{p-c5bd7c30.entry.js → p-dfbcbdd7.entry.js} +1 -1
- package/lib/duet/{p-70886ae8.system.entry.js → p-e3ab2e26.system.entry.js} +1 -1
- package/lib/duet/{p-b2680be5.entry.js → p-e8fcf8bf.entry.js} +1 -1
- package/lib/duet/{p-cb64979e.system.entry.js → p-ee412ace.system.entry.js} +1 -1
- package/lib/duet/{p-538ca1e8.system.entry.js → p-efa828e5.system.entry.js} +1 -1
- package/lib/duet/{p-e74db103.entry.js → p-efd9868c.entry.js} +1 -1
- package/lib/duet/{p-8d175e68.entry.js → p-f8ae0ada.entry.js} +1 -1
- package/lib/esm/duet-action-button.entry.js +2 -2
- 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 +1 -1
- package/lib/esm/duet-caption_4.entry.js +4 -3
- package/lib/esm/duet-card.entry.js +1 -1
- 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 +1 -1
- 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 +10 -2
- package/lib/esm/duet-grid_2.entry.js +1 -1
- package/lib/esm/duet-header_2.entry.js +61 -51
- package/lib/esm/duet-hero.entry.js +5 -3
- package/lib/esm/duet-icon.entry.js +1 -1
- package/lib/esm/duet-input_2.entry.js +1 -1
- 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 +1 -1
- package/lib/esm/{focus-utils-4ca66786.js → focus-utils-4accac91.js} +1 -1
- package/lib/esm/{index-d5956898.js → index-3846de98.js} +8 -2
- package/lib/esm/{js-utils-52e0944c.js → js-utils-fa98b8cd.js} +11 -0
- package/lib/esm/loader.js +1 -1
- package/lib/esm-es5/duet-action-button.entry.js +1 -1
- 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 +1 -1
- 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-4accac91.js +4 -0
- package/lib/esm-es5/{index-d5956898.js → index-3846de98.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/types/components/duet-footer/duet-footer.d.ts +11 -0
- package/lib/types/components/duet-header/duet-header-icon.d.ts +1 -0
- package/lib/types/components/duet-header/duet-header.d.ts +13 -2
- package/lib/types/components/duet-heading/duet-heading.d.ts +2 -2
- package/lib/types/components/duet-hero/duet-hero.d.ts +6 -0
- package/lib/types/components.d.ts +14 -6
- package/lib/types/utils/js-utils.d.ts +11 -0
- package/package.json +6 -6
- package/lib/duet/p-21d74fec.entry.js +0 -4
- package/lib/duet/p-282ee56b.entry.js +0 -4
- package/lib/duet/p-40d4bc49.entry.js +0 -4
- package/lib/duet/p-413df442.js +0 -4
- package/lib/duet/p-56081d74.entry.js +0 -4
- package/lib/duet/p-8717227c.entry.js +0 -4
- package/lib/duet/p-9062ca61.entry.js +0 -4
- package/lib/duet/p-b98bb109.system.entry.js +0 -4
- package/lib/esm-es5/focus-utils-4ca66786.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
|
/**
|
|
@@ -330,6 +330,13 @@ export class DuetHeader {
|
|
|
330
330
|
}, 300);
|
|
331
331
|
}
|
|
332
332
|
};
|
|
333
|
+
this.emitDuetEvent = (ev, data) => {
|
|
334
|
+
this.duetEvent.emit({
|
|
335
|
+
component: "duet-header",
|
|
336
|
+
data,
|
|
337
|
+
originalEvent: ev,
|
|
338
|
+
});
|
|
339
|
+
};
|
|
333
340
|
}
|
|
334
341
|
/**
|
|
335
342
|
* Component lifecycle events.
|
|
@@ -418,8 +425,9 @@ export class DuetHeader {
|
|
|
418
425
|
* Local methods.
|
|
419
426
|
*/
|
|
420
427
|
async refresh() {
|
|
421
|
-
|
|
422
|
-
|
|
428
|
+
var _a, _b;
|
|
429
|
+
if (this.renderDesktopNav !== Build.isServer ? true : (_a = this.mql[0]) === null || _a === void 0 ? void 0 : _a.matches) {
|
|
430
|
+
this.renderDesktopNav = Build.isServer ? true : (_b = this.mql[0]) === null || _b === void 0 ? void 0 : _b.matches;
|
|
423
431
|
this.openMenu = null;
|
|
424
432
|
if (this.isSlideOutOpen) {
|
|
425
433
|
this.toggleMenu(document.createEvent("UIEvents"), "mobile");
|
|
@@ -492,10 +500,10 @@ export class DuetHeader {
|
|
|
492
500
|
*/
|
|
493
501
|
render() {
|
|
494
502
|
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" },
|
|
503
|
+
const skipToLabel = () => this.skipToId ? (h("a", { href: this.skipToId, class: "duet-header-skip", onClick: this.handleSkipClick }, skipLabel)) : null;
|
|
504
|
+
const logo = () => (h("duet-logo", { href: this.logoHref, size: "medium", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
505
|
+
const largeLogo = () => (h("duet-logo", { href: this.logoHref, size: "large", ref: el => (this.logoEl = el), language: this.language, theme: this.theme, onClick: this.handleLogoClick }));
|
|
506
|
+
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
507
|
item.label,
|
|
500
508
|
Build.isBrowser && item.external && (h(Fragment, null,
|
|
501
509
|
h("duet-visually-hidden", null,
|
|
@@ -503,25 +511,25 @@ export class DuetHeader {
|
|
|
503
511
|
this.accessibleLabelExternal),
|
|
504
512
|
h("span", { class: "duet-header-link-external" },
|
|
505
513
|
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 },
|
|
514
|
+
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;
|
|
515
|
+
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
516
|
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
509
517
|
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" },
|
|
518
|
+
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
519
|
h(DuetHeaderIcon, { icon: userIcon.svg }),
|
|
512
520
|
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:
|
|
521
|
+
const processedSession = () => this.processedSession ? (h("a", { href: this.processedSession.href || "#", id: this.processedSession.id, class: "duet-header-logout duet-header-button", onClick: this.handleSessionClick },
|
|
522
|
+
h(DuetHeaderIcon, { class: "desktop", icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, iconSize: "x-small" }),
|
|
523
|
+
h(DuetHeaderIcon, { class: "mobile", icon: this.processedSession.type === "logout" ? logoutIcon.svg : loginIcon.svg, iconSize: "small" }),
|
|
516
524
|
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,
|
|
525
|
+
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
526
|
sessionItem.label && h("span", { class: "duet-header-session-label" }, sessionItem.label),
|
|
519
527
|
h("duet-spacer", { size: "small", "aria-hidden": "true" }),
|
|
520
528
|
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
529
|
index !== this.processedSession.sessionItems.length - 1 && (h(Fragment, null,
|
|
522
530
|
h("duet-spacer", { size: "x-small", "aria-hidden": "true" }),
|
|
523
531
|
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 },
|
|
532
|
+
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
533
|
h(DuetHeaderIcon, { icon: searchIcon.svg }),
|
|
526
534
|
h("span", { class: "duet-header-button-label" }, this.processedSearch.label))) : null;
|
|
527
535
|
// Back variation
|
|
@@ -535,23 +543,104 @@ export class DuetHeader {
|
|
|
535
543
|
"duet-header-inactive": true,
|
|
536
544
|
}, part: "header" },
|
|
537
545
|
h("div", { class: "duet-header-top" },
|
|
538
|
-
skipToLabel,
|
|
546
|
+
skipToLabel(),
|
|
539
547
|
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,
|
|
548
|
+
logo(),
|
|
541
549
|
h("slot", { name: "logo-utility" }))))));
|
|
542
550
|
}
|
|
543
|
-
// multi level desktop variation
|
|
544
551
|
const itemsHaveSubItems = this.processedItems && this.processedItems.some(item => item.items && item.items.length > 0);
|
|
545
|
-
|
|
552
|
+
const isSecondLevelActive = this.processedItems &&
|
|
553
|
+
this.processedItems.some(item => item.items && item.items.some(secondLevelItem => secondLevelItem.active === true));
|
|
554
|
+
const isThirdLevelActive = this.processedItems &&
|
|
555
|
+
this.processedItems.some(item => item.items &&
|
|
556
|
+
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
557
|
+
const defaultVariationContent = (h("div", { class: {
|
|
558
|
+
"duet-header-reserved-space": true,
|
|
559
|
+
"duet-with-links": !!this.processedItems,
|
|
560
|
+
"duet-header-second-level-active": isSecondLevelActive,
|
|
561
|
+
"duet-header-third-level-active": isThirdLevelActive,
|
|
562
|
+
"duet-header-items-have-sub-items": itemsHaveSubItems,
|
|
563
|
+
} },
|
|
564
|
+
h("header", { class: {
|
|
565
|
+
"duet-header": true,
|
|
566
|
+
"duet-theme-turva": this.theme === "turva",
|
|
567
|
+
"duet-header-inactive": !this.processedItems,
|
|
568
|
+
}, part: "header" },
|
|
569
|
+
h("div", { class: "duet-header-top" },
|
|
570
|
+
skipToLabel(),
|
|
571
|
+
logo(),
|
|
572
|
+
h("slot", { name: "logo-utility" }, this.region && h("div", { class: "duet-header-region" }, this.region)),
|
|
573
|
+
(this.processedItems ||
|
|
574
|
+
languageDropdown() ||
|
|
575
|
+
contactDropdown() ||
|
|
576
|
+
this.processedSession ||
|
|
577
|
+
this.processedUser) && (h("button", { class: { "duet-header-toggle": true, active: this.isSlideOutOpen }, onClick: event => this.toggleMenu(event, "mobile"), type: "button" },
|
|
578
|
+
h("duet-visually-hidden", null, this.accessibleLabel),
|
|
579
|
+
h(DuetHeaderHamburger, null)))),
|
|
580
|
+
h("div", { ref: el => (this.navigationEl = el), class: {
|
|
581
|
+
"duet-header-bottom": true,
|
|
582
|
+
active: this.isSlideOutOpen,
|
|
583
|
+
inactive: !this.processedItems,
|
|
584
|
+
} },
|
|
585
|
+
h("nav", { class: "duet-header-items", role: "navigation" }, this.processedItems &&
|
|
586
|
+
this.processedItems.map((item, itemIndex) => (h("div", { class: "duet-header-item-container" },
|
|
587
|
+
h("a", { class: {
|
|
588
|
+
"duet-header-first-level": true,
|
|
589
|
+
"duet-header-item": true,
|
|
590
|
+
active: (!itemsHaveSubItems && this.currentHref === item.href) ||
|
|
591
|
+
(item.active === true &&
|
|
592
|
+
!this.openMenu &&
|
|
593
|
+
this.closedActives &&
|
|
594
|
+
this.closedActives.length === 1) ||
|
|
595
|
+
(item.active === true &&
|
|
596
|
+
!this.openMenu &&
|
|
597
|
+
item.items &&
|
|
598
|
+
!item.items.some(s => s.active === true)),
|
|
599
|
+
}, href: item.href || "#", id: item.id || `header-item-${itemIndex}`, onClick: event => this.handleItemClick(event, item), onMouseEnter: event => this.emitDuetEvent(event, item), onTouchStart: event => this.emitDuetEvent(event, item) },
|
|
600
|
+
item.label,
|
|
601
|
+
item.badge && h("div", { class: "duet-header-badge" })),
|
|
602
|
+
item.items &&
|
|
603
|
+
item.items
|
|
604
|
+
.filter(secondLevelitem => secondLevelitem.items && secondLevelitem.items.length > 0)
|
|
605
|
+
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
606
|
+
const id = secondLevelItem.id || `header-item-${itemIndex}-${secondLevelItemIndex}`;
|
|
607
|
+
const active = (!this.openMenu &&
|
|
608
|
+
secondLevelItem.active === true &&
|
|
609
|
+
!(this.closedActives && !!this.closedActives.find(i => i === id))) ||
|
|
610
|
+
this.openMenu === id;
|
|
611
|
+
const activeBar = active && !(secondLevelItem.items && secondLevelItem.items.some(s => s.active === true));
|
|
612
|
+
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) },
|
|
613
|
+
h("div", { class: "duet-header-third-level" }, secondLevelItem.items &&
|
|
614
|
+
secondLevelItem.items.map(thirdLevelItem => (h("a", { class: {
|
|
615
|
+
"duet-header-item": true,
|
|
616
|
+
active: thirdLevelItem.active === true,
|
|
617
|
+
}, role: "menuitem", href: thirdLevelItem.href || "#", id: thirdLevelItem.id, onClick: event => this.handleItemClick(event, thirdLevelItem), onKeyDown: ev => this.handleArrowKeys(ev), onMouseEnter: event => this.emitDuetEvent(event, thirdLevelItem), onTouchStart: event => this.emitDuetEvent(event, thirdLevelItem), target: thirdLevelItem.external ? "_blank" : "_self" },
|
|
618
|
+
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
619
|
+
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
620
|
+
h("span", null, thirdLevelItem.label),
|
|
621
|
+
thirdLevelItem.badge && h("div", { class: "duet-header-badge" })))))));
|
|
622
|
+
}))))),
|
|
623
|
+
h("div", { class: "duet-header-bottom-utils" },
|
|
624
|
+
h("slot", { name: "utility" })),
|
|
625
|
+
h("div", { class: "duet-header-utils" },
|
|
626
|
+
!itemsHaveSubItems && contactDropdown(),
|
|
627
|
+
languageDropdown(),
|
|
628
|
+
!itemsHaveSubItems && (h(Fragment, null,
|
|
629
|
+
processedUserWithLink(),
|
|
630
|
+
processedUserWithoutLink())),
|
|
631
|
+
processedSearch(),
|
|
632
|
+
processedSession())))));
|
|
633
|
+
// multi level variation
|
|
634
|
+
if (itemsHaveSubItems) {
|
|
546
635
|
const activeSegment = this.processedItems.find(item => item.active);
|
|
547
636
|
const isThirdLevelActive = this.processedItems &&
|
|
548
637
|
this.processedItems.some(item => item.items &&
|
|
549
638
|
item.items.some(secondLevelItem => secondLevelItem.items && secondLevelItem.items.some(thirdLevelItem => thirdLevelItem.active === true)));
|
|
550
639
|
const segmentId = "duet-header-segment";
|
|
551
|
-
return (h(Host, { class: "duet-header-multi-level-
|
|
640
|
+
return (h(Host, { class: "duet-header-multi-level-variation" },
|
|
552
641
|
h("div", { class: {
|
|
553
|
-
"duet-header-multi-level
|
|
554
|
-
"duet-header-multi-level-
|
|
642
|
+
"duet-header-multi-level": true,
|
|
643
|
+
"duet-header-multi-level-third-level-is-open": isThirdLevelActive,
|
|
555
644
|
} },
|
|
556
645
|
h("header", { class: {
|
|
557
646
|
"duet-header": true,
|
|
@@ -559,116 +648,37 @@ export class DuetHeader {
|
|
|
559
648
|
"duet-header-inactive": !this.processedItems,
|
|
560
649
|
}, part: "header" },
|
|
561
650
|
h("div", { class: "duet-header-top" },
|
|
562
|
-
skipToLabel,
|
|
651
|
+
skipToLabel(),
|
|
563
652
|
h("div", { class: "logo-and-segment" },
|
|
564
|
-
h("div", null, largeLogo),
|
|
565
|
-
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" },
|
|
653
|
+
h("div", null, largeLogo()),
|
|
654
|
+
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), onMouseEnter: event => this.emitDuetEvent(event, item), onTouchStart: event => this.emitDuetEvent(event, item), target: item.external ? "_blank" : "_self" },
|
|
566
655
|
item.icon && (h("div", { class: "duet-header-icon" },
|
|
567
656
|
h("duet-icon", { margin: "none", size: "x-small", name: item.icon, color: "currentColor" }))),
|
|
568
657
|
h("span", null, item.label),
|
|
569
658
|
item.badge && h("div", { class: "duet-header-badge" }))))))),
|
|
570
|
-
h("nav", { class: "duet-header-multi-level-
|
|
659
|
+
h("nav", { class: "duet-header-multi-level-nav" }, activeSegment.items &&
|
|
571
660
|
activeSegment.items
|
|
572
661
|
.filter(secondLevelItem => secondLevelItem.items && secondLevelItem.items.length > 0)
|
|
573
662
|
.map((secondLevelItem, secondLevelItemIndex) => {
|
|
574
663
|
const id = secondLevelItem.id || `segment-item-${secondLevelItemIndex}`;
|
|
575
664
|
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 &&
|
|
576
|
-
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" },
|
|
665
|
+
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), onMouseEnter: event => this.emitDuetEvent(event, thirdLevelItem), onTouchStart: event => this.emitDuetEvent(event, thirdLevelItem), target: thirdLevelItem.external ? "_blank" : "_self" },
|
|
577
666
|
thirdLevelItem.icon && (h("div", { class: "duet-header-icon" },
|
|
578
667
|
h("duet-icon", { margin: "none", size: "medium", name: thirdLevelItem.icon, color: "currentColor" }))),
|
|
579
668
|
h("span", null, thirdLevelItem.label),
|
|
580
669
|
thirdLevelItem.badge && h("div", { class: "duet-header-badge" }))))));
|
|
581
670
|
})),
|
|
582
|
-
h("div", { class: "duet-header-multi-level-
|
|
583
|
-
processedSearch,
|
|
584
|
-
languageDropdown,
|
|
585
|
-
processedSessionDropdown != null ? processedSessionDropdown : processedSession),
|
|
586
|
-
h("slot", { name: "utility" }))))
|
|
671
|
+
h("div", { class: "duet-header-multi-level-utils" },
|
|
672
|
+
processedSearch(),
|
|
673
|
+
languageDropdown(),
|
|
674
|
+
processedSessionDropdown() != null ? processedSessionDropdown() : processedSession()),
|
|
675
|
+
h("slot", { name: "utility" })))),
|
|
676
|
+
defaultVariationContent));
|
|
587
677
|
}
|
|
588
678
|
// 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
679
|
return (h(Host, { class: {
|
|
595
680
|
"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))))));
|
|
681
|
+
} }, defaultVariationContent));
|
|
672
682
|
}
|
|
673
683
|
static get is() { return "duet-header"; }
|
|
674
684
|
static get encapsulation() { return "shadow"; }
|
|
@@ -977,7 +987,7 @@ export class DuetHeader {
|
|
|
977
987
|
"optional": false,
|
|
978
988
|
"docs": {
|
|
979
989
|
"tags": [],
|
|
980
|
-
"text": "Region that is shown next to the logo. If empty, region will be hidden.\nNote: not available in
|
|
990
|
+
"text": "Region that is shown next to the logo. If empty, region will be hidden.\nNote: not available in multilevel header."
|
|
981
991
|
},
|
|
982
992
|
"attribute": "region",
|
|
983
993
|
"reflect": false,
|
|
@@ -1335,6 +1345,25 @@ export class DuetHeader {
|
|
|
1335
1345
|
}
|
|
1336
1346
|
}
|
|
1337
1347
|
}
|
|
1348
|
+
}, {
|
|
1349
|
+
"method": "duetEvent",
|
|
1350
|
+
"name": "duetEvent",
|
|
1351
|
+
"bubbles": true,
|
|
1352
|
+
"cancelable": true,
|
|
1353
|
+
"composed": true,
|
|
1354
|
+
"docs": {
|
|
1355
|
+
"tags": [],
|
|
1356
|
+
"text": "General event stream for the following events:\nitem: onMouseEnter, onTouchDown;\nmenuItem: onMouseEnter, onTouchDown;.\nYou can prevent\nthe default browser functionality by calling **event.detail.originalEvent.preventDefault()**\ninside your listener. Additionally, the passed data is available via\n**event.detail.data**."
|
|
1357
|
+
},
|
|
1358
|
+
"complexType": {
|
|
1359
|
+
"original": "DuetHeaderChangeEvent",
|
|
1360
|
+
"resolved": "{ originalEvent: Event; data: DuetHeaderItem | DuetHeaderLanguageItem | DuetHeaderSession; component: \"duet-header\"; }",
|
|
1361
|
+
"references": {
|
|
1362
|
+
"DuetHeaderChangeEvent": {
|
|
1363
|
+
"location": "local"
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1338
1367
|
}]; }
|
|
1339
1368
|
static get methods() { return {
|
|
1340
1369
|
"closeMenus": {
|
|
@@ -237,6 +237,10 @@
|
|
|
237
237
|
.duet-heading.h6.duet-heading-border {
|
|
238
238
|
padding-bottom: 16px;
|
|
239
239
|
}
|
|
240
|
+
.duet-heading.duet-normal, .duet-heading.duet-theme-turva.duet-normal {
|
|
241
|
+
font-style: normal !important;
|
|
242
|
+
font-weight: 400 !important;
|
|
243
|
+
}
|
|
240
244
|
.duet-heading.duet-semibold, .duet-heading.duet-theme-turva.duet-semibold {
|
|
241
245
|
font-style: normal !important;
|
|
242
246
|
font-weight: 600 !important;
|
|
@@ -20,7 +20,7 @@ export class DuetHeading {
|
|
|
20
20
|
*/
|
|
21
21
|
this.border = false;
|
|
22
22
|
/**
|
|
23
|
-
* This property allows you to set semibold font weight for all sizes
|
|
23
|
+
* This property allows you to set normal or semibold font weight for all sizes
|
|
24
24
|
* when needed.
|
|
25
25
|
*/
|
|
26
26
|
this.weight = "auto";
|
|
@@ -55,6 +55,7 @@ export class DuetHeading {
|
|
|
55
55
|
"duet-heading": true,
|
|
56
56
|
"duet-heading-border": this.border !== false,
|
|
57
57
|
"duet-heading-border-solid": this.border === "solid",
|
|
58
|
+
"duet-normal": this.weight === "normal",
|
|
58
59
|
"duet-semibold": this.weight === "semibold",
|
|
59
60
|
"duet-heading-hyphenate": this.hyphenate,
|
|
60
61
|
"duet-m-0": this.margin === "none",
|
|
@@ -163,7 +164,7 @@ export class DuetHeading {
|
|
|
163
164
|
"mutable": false,
|
|
164
165
|
"complexType": {
|
|
165
166
|
"original": "DuetHeadingWeight",
|
|
166
|
-
"resolved": "\"auto\" | \"semibold\"",
|
|
167
|
+
"resolved": "\"auto\" | \"normal\" | \"semibold\"",
|
|
167
168
|
"references": {
|
|
168
169
|
"DuetHeadingWeight": {
|
|
169
170
|
"location": "local"
|
|
@@ -174,7 +175,7 @@ export class DuetHeading {
|
|
|
174
175
|
"optional": false,
|
|
175
176
|
"docs": {
|
|
176
177
|
"tags": [],
|
|
177
|
-
"text": "This property allows you to set semibold font weight for all sizes\nwhen needed."
|
|
178
|
+
"text": "This property allows you to set normal or semibold font weight for all sizes\nwhen needed."
|
|
178
179
|
},
|
|
179
180
|
"attribute": "weight",
|
|
180
181
|
"reflect": false,
|
|
@@ -8,8 +8,12 @@ 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
|
|
12
|
+
* @part duet-hero-text - piercing selector for styling the hero text container
|
|
11
13
|
* @slot default - This is an unamed slot for a text or extra button that is placed after any buttons (or list item)
|
|
12
14
|
* @slot badge - This is a slot for a status badge that sits next to pre-heading inside the hero component.
|
|
15
|
+
* @slot bottom - This is a slot for content under the main hero content.
|
|
16
|
+
* @slot heading - This is a slot for heading content inside the hero component.
|
|
13
17
|
*/
|
|
14
18
|
export class DuetHero {
|
|
15
19
|
constructor() {
|
|
@@ -25,6 +29,7 @@ export class DuetHero {
|
|
|
25
29
|
*/
|
|
26
30
|
this.theme = "";
|
|
27
31
|
/**
|
|
32
|
+
* @deprecated please use heading slot instead.
|
|
28
33
|
* The heading of the hero area, rendered in an H1 tag. P.S. you can control
|
|
29
34
|
* the level of the HTML heading by using “level” prop. If empty, heading
|
|
30
35
|
* will be hidden.
|
|
@@ -132,6 +137,7 @@ export class DuetHero {
|
|
|
132
137
|
*/
|
|
133
138
|
componentWillLoad() {
|
|
134
139
|
inheritGlobalTheme(this);
|
|
140
|
+
this.hasHeadingSlot = !!this.element.querySelector('[slot="heading"]');
|
|
135
141
|
this.refresh();
|
|
136
142
|
}
|
|
137
143
|
/**
|
|
@@ -196,7 +202,7 @@ export class DuetHero {
|
|
|
196
202
|
"duet-hero-gray-with-back": !!this.processedBack,
|
|
197
203
|
"duet-hero-text-center": this.textCenter && !this.leftAlign,
|
|
198
204
|
"duet-hero-left-align": this.leftAlign,
|
|
199
|
-
} },
|
|
205
|
+
}, part: "duet-hero" },
|
|
200
206
|
h("div", { class: "duet-hero-wrapper" },
|
|
201
207
|
this.image && this.variation === "image" && (h("div", { class: "duet-hero-image-mask" },
|
|
202
208
|
h("div", { class: "duet-hero-image-wrapper" },
|
|
@@ -210,10 +216,10 @@ export class DuetHero {
|
|
|
210
216
|
analyticsId: this.processedBack.analyticsId,
|
|
211
217
|
}) }, this.processedBack.label))),
|
|
212
218
|
(this.variation === "gray" || this.variation === "minimal") && this.categoryIcon && (h("duet-icon", { class: { "duet-hero-icon": true, "duet-hero-icon-has-heading": this.preHeading !== "" }, size: "x-large", background: this.categoryIconColor, name: this.categoryIcon })),
|
|
213
|
-
h("div", { class: "duet-hero-text" },
|
|
219
|
+
h("div", { class: "duet-hero-text", part: "duet-hero-text" },
|
|
214
220
|
this.preHeading && (h("duet-paragraph", { margin: "none", class: "duet-hero-pre" }, this.preHeading)),
|
|
215
221
|
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),
|
|
222
|
+
(this.heading || this.hasHeadingSlot) && (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
223
|
this.description && (h("duet-paragraph", { theme: this.theme, color: textColor, variation: "intro" }, this.description)),
|
|
218
224
|
(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
225
|
h("span", { slot: "label" }, item.label),
|
|
@@ -230,7 +236,8 @@ export class DuetHero {
|
|
|
230
236
|
this.accessibleLabelExternal),
|
|
231
237
|
item.external && (h("div", { class: "duet-hero-action-arrow" },
|
|
232
238
|
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 })
|
|
239
|
+
this.image && this.variation !== "image" && h("div", { class: "duet-hero-image", style: styles }),
|
|
240
|
+
h("slot", { name: "bottom" }))));
|
|
234
241
|
}
|
|
235
242
|
static get is() { return "duet-hero"; }
|
|
236
243
|
static get encapsulation() { return "shadow"; }
|
|
@@ -275,8 +282,11 @@ export class DuetHero {
|
|
|
275
282
|
"required": false,
|
|
276
283
|
"optional": false,
|
|
277
284
|
"docs": {
|
|
278
|
-
"tags": [
|
|
279
|
-
|
|
285
|
+
"tags": [{
|
|
286
|
+
"name": "deprecated",
|
|
287
|
+
"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."
|
|
288
|
+
}],
|
|
289
|
+
"text": ""
|
|
280
290
|
},
|
|
281
291
|
"attribute": "heading",
|
|
282
292
|
"reflect": false,
|
|
@@ -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
|