@duetds/components 4.34.4 → 4.35.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 +282 -33
- 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 +1 -1
- package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
- package/lib/cjs/duet-date-picker.cjs.entry.js +2 -2
- package/lib/cjs/duet-divider_2.cjs.entry.js +1 -1
- package/lib/cjs/duet-editable-table-button.cjs.entry.js +1 -1
- package/lib/cjs/duet-editable-table_4.cjs.entry.js +3 -3
- 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 +20 -10
- package/lib/cjs/duet-hero.cjs.entry.js +1 -1
- 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 +15 -3
- 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-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 +414 -0
- 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-0e3a744a.js → focus-utils-15cc3af9.js} +1 -1
- package/lib/cjs/{index-0bcb9cea.js → index-a38f3df3.js} +1 -1
- package/lib/cjs/loader.cjs.js +2 -2
- package/lib/collection/collection-manifest.json +8 -6
- package/lib/collection/components/duet-button/duet-button.js +1 -1
- package/lib/collection/components/duet-card/duet-card.js +3 -1
- package/lib/collection/components/duet-header/duet-header.css +61 -28
- package/lib/collection/components/duet-header/duet-header.js +18 -8
- package/lib/collection/components/duet-link/duet-link.js +1 -1
- package/lib/collection/components/duet-modal/duet-modal.js +33 -3
- package/lib/collection/components/duet-scrollable/duet-scrollable.css +83 -0
- package/lib/collection/components/duet-scrollable/duet-scrollable.js +240 -0
- package/lib/collection/components/duet-tab/duet-tab.js +63 -1
- package/lib/collection/components/duet-tab-group/duet-tab-group.css +12 -13
- package/lib/collection/components/duet-tab-group/duet-tab-group.js +101 -16
- package/lib/collection/components/duet-upload/duet-upload.js +7 -4
- package/lib/custom-elements-bundle/index.d.ts +6 -0
- package/lib/custom-elements-bundle/index.js +264 -37
- package/lib/duet/duet.esm.js +1 -1
- package/lib/duet/duet.js +1 -1
- package/lib/duet/{p-86013171.entry.js → p-04e3b06b.entry.js} +1 -1
- package/lib/duet/{p-808101d8.entry.js → p-0bc3239b.entry.js} +1 -1
- package/lib/duet/{p-6d62cb90.entry.js → p-0d15892b.entry.js} +1 -1
- package/lib/duet/{p-29000070.entry.js → p-0d6c3d07.entry.js} +1 -1
- package/lib/duet/{p-8ea50bd2.system.entry.js → p-0deee587.system.entry.js} +1 -1
- package/lib/duet/{p-d53bbad7.entry.js → p-0ea49de8.entry.js} +1 -1
- package/lib/duet/{p-379e8ebb.system.entry.js → p-114a20f1.system.entry.js} +1 -1
- package/lib/duet/p-13e81854.entry.js +4 -0
- package/lib/duet/p-15a42b87.entry.js +4 -0
- package/lib/duet/{p-48ed41e6.system.entry.js → p-18441899.system.entry.js} +1 -1
- package/lib/duet/{p-a63537e8.entry.js → p-1b98f91c.entry.js} +1 -1
- package/lib/duet/{p-1afec19f.entry.js → p-2056e3eb.entry.js} +1 -1
- package/lib/duet/{p-7c5b396c.system.entry.js → p-27b953e4.system.entry.js} +1 -1
- package/lib/duet/{p-5ea30033.entry.js → p-29e59e77.entry.js} +1 -1
- package/lib/duet/{p-4b7f998d.system.entry.js → p-2c8bd5a2.system.entry.js} +1 -1
- package/lib/duet/{p-36eae676.entry.js → p-30783ea4.entry.js} +1 -1
- package/lib/duet/{p-5b409624.system.entry.js → p-3081f8a5.system.entry.js} +1 -1
- package/lib/duet/p-35ff635e.system.js +4 -0
- package/lib/duet/{p-9aa7cb17.entry.js → p-38128fc3.entry.js} +1 -1
- package/lib/duet/{p-98fabd8b.entry.js → p-3b244de7.entry.js} +1 -1
- package/lib/duet/{p-3953b77a.system.entry.js → p-3baf5b41.system.entry.js} +1 -1
- package/lib/duet/{p-35133bc9.entry.js → p-3bd812df.entry.js} +1 -1
- package/lib/duet/{p-0aec7e4b.entry.js → p-3dbeddf5.entry.js} +1 -1
- package/lib/duet/{p-e90db543.system.entry.js → p-3e578cc5.system.entry.js} +1 -1
- package/lib/duet/p-41b4bad1.entry.js +4 -0
- package/lib/duet/{p-dc226f92.system.entry.js → p-49820427.system.entry.js} +1 -1
- package/lib/duet/{p-fe889838.system.js → p-4accc70c.system.js} +1 -1
- package/lib/duet/{p-ea934463.entry.js → p-4c3961a5.entry.js} +1 -1
- package/lib/duet/{p-e96fca2b.system.entry.js → p-4d7abe27.system.entry.js} +1 -1
- package/lib/duet/{p-aa379dec.system.entry.js → p-54d296d9.system.entry.js} +1 -1
- package/lib/duet/{p-0d18269c.entry.js → p-573921ca.entry.js} +1 -1
- package/lib/duet/{p-ddf5ecf5.system.entry.js → p-5af271ce.system.entry.js} +1 -1
- package/lib/duet/{p-bb1271a8.system.entry.js → p-5f24e161.system.entry.js} +1 -1
- package/lib/duet/{p-255bc205.system.entry.js → p-632186a9.system.entry.js} +1 -1
- package/lib/duet/{p-8bbdfac5.system.entry.js → p-67b22acc.system.entry.js} +1 -1
- package/lib/duet/{p-9c046b9a.entry.js → p-69c4ff6f.entry.js} +1 -1
- package/lib/duet/{p-f16213de.entry.js → p-6b3a14c2.entry.js} +1 -1
- package/lib/duet/{p-8049159b.system.entry.js → p-70cf255e.system.entry.js} +1 -1
- package/lib/duet/{p-ee58a262.entry.js → p-7142b886.entry.js} +1 -1
- package/lib/duet/{p-63ac5acd.entry.js → p-7641054f.entry.js} +1 -1
- package/lib/duet/{p-ea232a29.entry.js → p-7d019a4d.entry.js} +1 -1
- package/lib/duet/{p-f645b369.system.entry.js → p-7e2a2e30.system.entry.js} +1 -1
- package/lib/duet/{p-a209e483.entry.js → p-83261c61.entry.js} +1 -1
- package/lib/duet/{p-0cb07574.js → p-875bd99c.js} +1 -1
- package/lib/duet/{p-927e83d1.entry.js → p-889193e8.entry.js} +1 -1
- package/lib/duet/{p-4002454d.system.entry.js → p-8acdabb5.system.entry.js} +1 -1
- package/lib/duet/{p-3948a5c4.system.entry.js → p-8edd126b.system.entry.js} +1 -1
- package/lib/duet/{p-236cb8b6.entry.js → p-94b4ec76.entry.js} +1 -1
- package/lib/duet/{p-ded5548b.system.entry.js → p-97353a7f.system.entry.js} +1 -1
- package/lib/duet/{p-6d05eb8c.entry.js → p-9a47c28a.entry.js} +1 -1
- package/lib/duet/{p-2f36de45.entry.js → p-9b0c78de.entry.js} +1 -1
- package/lib/duet/{p-32488531.system.entry.js → p-9dd65758.system.entry.js} +1 -1
- package/lib/duet/{p-cf886223.entry.js → p-a53a8675.entry.js} +1 -1
- package/lib/duet/{p-ab6109d6.system.entry.js → p-a73609b4.system.entry.js} +1 -1
- package/lib/duet/{p-719e38e3.system.entry.js → p-ac01755b.system.entry.js} +1 -1
- package/lib/duet/{p-0a664450.system.entry.js → p-acf24fcd.system.entry.js} +1 -1
- package/lib/duet/{p-db1a8956.system.entry.js → p-aed2a35e.system.entry.js} +1 -1
- package/lib/duet/{p-fab77260.system.entry.js → p-b1ae4d5b.system.entry.js} +2 -2
- package/lib/duet/{p-c6c768b9.system.entry.js → p-b2985c8e.system.entry.js} +1 -1
- package/lib/duet/{p-842a43e7.system.entry.js → p-b692b4a4.system.entry.js} +1 -1
- package/lib/duet/{p-9f6649ef.system.entry.js → p-b80d80dc.system.entry.js} +1 -1
- package/lib/duet/{p-5e15d8f8.js → p-bcf94afd.js} +1 -1
- package/lib/duet/p-be872079.entry.js +4 -0
- package/lib/duet/{p-67798ed0.entry.js → p-bf859d7b.entry.js} +1 -1
- package/lib/duet/{p-09845306.entry.js → p-c0fa8865.entry.js} +1 -1
- package/lib/duet/{p-07bec67d.system.entry.js → p-c479f3be.system.entry.js} +1 -1
- package/lib/duet/{p-e339cb4f.entry.js → p-c9020872.entry.js} +1 -1
- package/lib/duet/{p-0945e0ac.entry.js → p-c99e23d2.entry.js} +1 -1
- package/lib/duet/p-ce40057c.entry.js +4 -0
- package/lib/duet/{p-51d5b428.system.js → p-d04561dc.system.js} +1 -1
- package/lib/duet/{p-addff36a.system.entry.js → p-d158b9ca.system.entry.js} +1 -1
- package/lib/duet/{p-a5b9f195.system.entry.js → p-d2edeb9a.system.entry.js} +1 -1
- package/lib/duet/{p-1c38354b.system.entry.js → p-d3432b68.system.entry.js} +1 -1
- package/lib/duet/{p-5818108d.system.entry.js → p-d6563133.system.entry.js} +1 -1
- package/lib/duet/{p-00b102b8.entry.js → p-d9da705b.entry.js} +1 -1
- package/lib/duet/p-e3c66ce5.system.entry.js +4 -0
- package/lib/duet/{p-c6268af4.entry.js → p-e701e364.entry.js} +1 -1
- package/lib/duet/{p-d701bd87.system.entry.js → p-e7056ea5.system.entry.js} +1 -1
- package/lib/duet/{p-55ad1bfb.entry.js → p-e9064858.entry.js} +1 -1
- package/lib/duet/{p-fedad35b.system.entry.js → p-e9ca4ae1.system.entry.js} +2 -2
- package/lib/duet/{p-5a9266c8.system.entry.js → p-ed981e8d.system.entry.js} +1 -1
- package/lib/duet/{p-db75f866.entry.js → p-ef7560b6.entry.js} +1 -1
- package/lib/duet/{p-1f08d290.system.entry.js → p-f1803ec3.system.entry.js} +1 -1
- package/lib/duet/p-f261a666.system.entry.js +4 -0
- package/lib/duet/{p-b465ac62.entry.js → p-fa5a028c.entry.js} +1 -1
- package/lib/esm/duet-alert.entry.js +1 -1
- package/lib/esm/duet-badge.entry.js +1 -1
- package/lib/esm/duet-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 +1 -1
- package/lib/esm/duet-cookie-consent.entry.js +1 -1
- package/lib/esm/duet-date-picker.entry.js +2 -2
- package/lib/esm/duet-divider_2.entry.js +1 -1
- package/lib/esm/duet-editable-table-button.entry.js +1 -1
- package/lib/esm/duet-editable-table_4.entry.js +3 -3
- 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 +20 -10
- package/lib/esm/duet-hero.entry.js +1 -1
- 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 +15 -3
- package/lib/esm/duet-notification_2.entry.js +1 -1
- package/lib/esm/duet-number-input.entry.js +1 -1
- package/lib/esm/duet-progress.entry.js +1 -1
- package/lib/esm/duet-radio_2.entry.js +1 -1
- package/lib/esm/duet-range-slider.entry.js +1 -1
- package/lib/esm/duet-scrollable_3.entry.js +408 -0
- 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-8d0688ae.js → focus-utils-d3cd655b.js} +1 -1
- package/lib/esm/{index-ff4326da.js → index-eb374972.js} +1 -1
- package/lib/esm/loader.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 +2 -2
- package/lib/esm-es5/duet-collapsible.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-button.entry.js +1 -1
- package/lib/esm-es5/duet-editable-table_4.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-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 +4 -0
- 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-d3cd655b.js +4 -0
- package/lib/esm-es5/{index-ff4326da.js → index-eb374972.js} +1 -1
- package/lib/esm-es5/loader.js +1 -1
- package/lib/html.html-data.json +62 -3
- package/lib/types/components/duet-card/duet-card.d.ts +1 -0
- package/lib/types/components/duet-modal/duet-modal.d.ts +5 -1
- package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +51 -0
- package/lib/types/components/duet-tab/duet-tab.d.ts +11 -0
- package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +15 -0
- package/lib/types/components/duet-upload/duet-upload.d.ts +3 -0
- package/lib/types/components.d.ts +90 -1
- package/package.json +6 -5
- package/lib/cjs/duet-tab_2.cjs.entry.js +0 -213
- package/lib/duet/p-130476dc.entry.js +0 -4
- package/lib/duet/p-30410b67.system.js +0 -4
- package/lib/duet/p-4d30eee1.entry.js +0 -4
- package/lib/duet/p-56cda85e.system.entry.js +0 -4
- package/lib/duet/p-6f7539a6.entry.js +0 -4
- package/lib/duet/p-87804904.system.entry.js +0 -4
- package/lib/duet/p-b9fe29c7.entry.js +0 -4
- package/lib/duet/p-d9f076ed.entry.js +0 -4
- package/lib/esm/duet-tab_2.entry.js +0 -208
- package/lib/esm-es5/duet-tab_2.entry.js +0 -4
- package/lib/esm-es5/focus-utils-8d0688ae.js +0 -4
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built with Duet Design System
|
|
3
|
+
*/
|
|
4
|
+
import { r as registerInstance, h, H as Host, g as getElement, c as createEvent } from './index-eb374972.js';
|
|
5
|
+
import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
|
|
6
|
+
import { g as getLocaleString, a as getLanguage } from './language-utils-344d894c.js';
|
|
7
|
+
import { c as createID } from './create-id-981107da.js';
|
|
8
|
+
import { d as isArrowLeftKey, b as isArrowUpKey, a as isArrowRightKey, c as isArrowDownKey } from './keyboard-utils-584cedd7.js';
|
|
9
|
+
import './string-utils-2f1793b8.js';
|
|
10
|
+
|
|
11
|
+
const duetScrollableCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;-webkit-tap-highlight-color:transparent}:host{position:relative !important}:host .duet-scrollable-items{display:flex}:host .duet-scrollable-items .duet-scrollable-button{position:relative;flex:0 0 auto;flex-basis:40px;padding:10px;cursor:pointer}:host .duet-scrollable-items .duet-scrollable-button:active{transform:scale(0.8)}:host .duet-scrollable-items .duet-scrollable-button--left{left:-12px}:host .duet-scrollable-items .duet-scrollable-button--right{right:-12px}:host .duet-scrollable-items .duet-scrollable-button--occluded{display:none}:host .duet-scrollable-items .duet-scrollable-list{display:flex;flex-wrap:nowrap;gap:20px;padding-top:2px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scroll-snap-type:x mandatory;scroll-behavior:smooth;scroll-margin:0 20px;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch;}:host .duet-scrollable-items .duet-scrollable-list::-webkit-scrollbar{display:none}::slotted(*){scroll-snap-align:center;margin-left:0;-webkit-transition:-webkit-transform 0.2s ease-in-out;transition:-webkit-transform 0.2s ease-in-out;transition:transform 0.2s ease-in-out;transition:transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out}";
|
|
12
|
+
|
|
13
|
+
let DuetScrollable = class {
|
|
14
|
+
constructor(hostRef) {
|
|
15
|
+
registerInstance(this, hostRef);
|
|
16
|
+
/**
|
|
17
|
+
* Private variables and constants index
|
|
18
|
+
*/
|
|
19
|
+
this.currentIndex = 0;
|
|
20
|
+
this.tabListElement = undefined;
|
|
21
|
+
this.tabListClass = "duet-scrollable-list";
|
|
22
|
+
this.tablistAtStart = true;
|
|
23
|
+
this.isTabContentSmallerThanWrapper = false;
|
|
24
|
+
this.tablistAtEnd = false;
|
|
25
|
+
this.childrenData = {};
|
|
26
|
+
this.resizeObserver = new ResizeObserver(entries => {
|
|
27
|
+
var _a, _b, _c, _d;
|
|
28
|
+
// otherwise, something is wrong, expecting 1 element only
|
|
29
|
+
if ((entries === null || entries === void 0 ? void 0 : entries.length) === 1) {
|
|
30
|
+
const currentWidth = (_b = (_a = entries[0]) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width;
|
|
31
|
+
const scrollWidth = (_d = (_c = entries[0]) === null || _c === void 0 ? void 0 : _c.target) === null || _d === void 0 ? void 0 : _d.scrollWidth;
|
|
32
|
+
// in order to avoid state "jumping" on the boundary condition we add a few pixels to the comparison
|
|
33
|
+
this.isTabContentSmallerThanWrapper = scrollWidth > currentWidth + 5;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Theme of duet-tab-scrollable. When used this will override the color setting and
|
|
38
|
+
* use "primary" or "primary-turva" as the color depending on which theme
|
|
39
|
+
* is chosen.
|
|
40
|
+
*/
|
|
41
|
+
this.theme = "";
|
|
42
|
+
/**
|
|
43
|
+
* Optional identifier to add to buttons in the tab group
|
|
44
|
+
*/
|
|
45
|
+
this.identifier = "";
|
|
46
|
+
/**
|
|
47
|
+
* Selected element
|
|
48
|
+
*/
|
|
49
|
+
this.selected = 0;
|
|
50
|
+
}
|
|
51
|
+
watchPropHandler(newValue) {
|
|
52
|
+
this.scrollToTab(newValue, "center");
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Component lifecycle events.
|
|
56
|
+
*/
|
|
57
|
+
componentWillLoad() {
|
|
58
|
+
inheritGlobalTheme(this);
|
|
59
|
+
const slotted = this.host.children;
|
|
60
|
+
this.childrenData = { hasChildren: slotted && slotted.length > 0, numberOfChildren: slotted && slotted.length };
|
|
61
|
+
}
|
|
62
|
+
componentDidLoad() {
|
|
63
|
+
this.resizeObserver.observe(this.tabListElement);
|
|
64
|
+
}
|
|
65
|
+
disconnectedCallback() {
|
|
66
|
+
this.resizeObserver.disconnect();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Private methods.
|
|
70
|
+
*/
|
|
71
|
+
getLastVisibleElement() {
|
|
72
|
+
const clientWidth = this.tabListElement.clientWidth;
|
|
73
|
+
const xValues = Array.from(this.host.querySelectorAll("button")).findIndex(element => element.getBoundingClientRect().x > clientWidth);
|
|
74
|
+
return xValues;
|
|
75
|
+
}
|
|
76
|
+
getFirstVisibleElement() {
|
|
77
|
+
const buttonCollection = this.host.querySelectorAll("button");
|
|
78
|
+
// reverse the array because we want the first invisible element form the middle, not the first in the list
|
|
79
|
+
const arrayOfXValues = Array.from(buttonCollection).map(el => el.getBoundingClientRect().x - el.getBoundingClientRect().width);
|
|
80
|
+
const xValues = arrayOfXValues.findIndex(element => {
|
|
81
|
+
return element > 0;
|
|
82
|
+
});
|
|
83
|
+
return xValues;
|
|
84
|
+
}
|
|
85
|
+
updateScrollButtons(container = this.tabListElement) {
|
|
86
|
+
if (container.scrollLeft <= 0) {
|
|
87
|
+
this.tablistAtStart = true;
|
|
88
|
+
}
|
|
89
|
+
else if (container.scrollLeft > 0) {
|
|
90
|
+
this.tablistAtStart = false;
|
|
91
|
+
}
|
|
92
|
+
if (container.clientWidth + container.scrollLeft + 10 >= container.scrollWidth) {
|
|
93
|
+
this.tablistAtEnd = true;
|
|
94
|
+
}
|
|
95
|
+
else if (container.clientWidth + container.scrollLeft + 10 < container.scrollWidth) {
|
|
96
|
+
this.tablistAtEnd = false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
scrollToTab(index = this.currentIndex, inline) {
|
|
100
|
+
if (!this.childrenData.hasChildren) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (index + 1 >= this.childrenData.numberOfChildren) {
|
|
104
|
+
index = this.childrenData.numberOfChildren - 1;
|
|
105
|
+
}
|
|
106
|
+
if (index < 0) {
|
|
107
|
+
index = 0;
|
|
108
|
+
}
|
|
109
|
+
const buttons = this.host.querySelectorAll("button");
|
|
110
|
+
// store previous position
|
|
111
|
+
let prevPosition = buttons[0].getBoundingClientRect().x;
|
|
112
|
+
// iterations to run
|
|
113
|
+
let ticksWhereScrollDidNotHappen = 5;
|
|
114
|
+
const getAnimationFrame = () => {
|
|
115
|
+
// if we get the same value enter the logic loop
|
|
116
|
+
if (buttons[0].getBoundingClientRect().x === prevPosition) {
|
|
117
|
+
ticksWhereScrollDidNotHappen--;
|
|
118
|
+
// When iteration is not complete run the calculation again
|
|
119
|
+
if (ticksWhereScrollDidNotHappen !== 0) {
|
|
120
|
+
window.requestAnimationFrame(getAnimationFrame);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.updateScrollButtons();
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
window.requestAnimationFrame(getAnimationFrame);
|
|
127
|
+
prevPosition = buttons[0].getBoundingClientRect().x;
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
buttons[index].scrollIntoView({ behavior: "smooth", inline });
|
|
131
|
+
window.requestAnimationFrame(getAnimationFrame);
|
|
132
|
+
}
|
|
133
|
+
scrollLeft() {
|
|
134
|
+
this.tablistAtEnd = false;
|
|
135
|
+
const first = this.getFirstVisibleElement() - 1;
|
|
136
|
+
this.scrollToTab(first, "center");
|
|
137
|
+
}
|
|
138
|
+
scrollRight() {
|
|
139
|
+
this.tablistAtStart = false;
|
|
140
|
+
const last = this.getLastVisibleElement() + 1;
|
|
141
|
+
this.scrollToTab(last, "center");
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* render() function
|
|
145
|
+
* Always the last one in the class.
|
|
146
|
+
*/
|
|
147
|
+
render() {
|
|
148
|
+
return (h(Host, { class: {
|
|
149
|
+
"duet-theme-turva": this.theme === "turva",
|
|
150
|
+
"duet-theme-default": this.theme === "default",
|
|
151
|
+
} }, h("div", { class: "duet-scrollable-items" }, h("button", { part: `${this.identifier}-button-left`, "aria-hidden": "true", class: {
|
|
152
|
+
"duet-scrollable-button": true,
|
|
153
|
+
"duet-scrollable-button--left": true,
|
|
154
|
+
"duet-scrollable-button--occluded": !this.isTabContentSmallerThanWrapper,
|
|
155
|
+
}, onClick: () => this.scrollLeft(), disabled: this.tablistAtStart, tabindex: "-1" }, h("duet-icon", { name: "action-arrow-left-small", size: "small", margin: "none" })), h("div", { class: this.tabListClass, onScroll: () => this.updateScrollButtons(), ref: element => (this.tabListElement = element) }, h("slot", null)), h("button", { part: `${this.identifier}-button-right`, "aria-hidden": "true", class: {
|
|
156
|
+
"duet-scrollable-button": true,
|
|
157
|
+
"duet-scrollable-button--right": true,
|
|
158
|
+
"duet-scrollable-button--occluded": !this.isTabContentSmallerThanWrapper,
|
|
159
|
+
}, onClick: () => this.scrollRight(), disabled: this.tablistAtEnd, tabindex: "-1" }, h("duet-icon", { name: "action-arrow-right-small", size: "small", margin: "none" })))));
|
|
160
|
+
}
|
|
161
|
+
get host() { return getElement(this); }
|
|
162
|
+
static get watchers() { return {
|
|
163
|
+
"selected": ["watchPropHandler"]
|
|
164
|
+
}; }
|
|
165
|
+
};
|
|
166
|
+
DuetScrollable.style = duetScrollableCss;
|
|
167
|
+
|
|
168
|
+
const duetTabCss = ".sc-duet-tab-h{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:block;width:100%}.duet-tab.sc-duet-tab{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;display:none;width:100%}.duet-tab.selected.sc-duet-tab{display:block}";
|
|
169
|
+
|
|
170
|
+
let DuetTab = class {
|
|
171
|
+
constructor(hostRef) {
|
|
172
|
+
registerInstance(this, hostRef);
|
|
173
|
+
/**
|
|
174
|
+
* Defaults for AccessibleLabel
|
|
175
|
+
* @default null
|
|
176
|
+
*/
|
|
177
|
+
this.accessibleDescriptionDefault = null;
|
|
178
|
+
/**
|
|
179
|
+
* String for AccessibleLabel
|
|
180
|
+
* @default null
|
|
181
|
+
*/
|
|
182
|
+
this.accessibleDescription = this.accessibleDescriptionDefault
|
|
183
|
+
? getLocaleString(this.accessibleDescriptionDefault)
|
|
184
|
+
: null;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* render() function
|
|
188
|
+
* Always the last one in the class.
|
|
189
|
+
*/
|
|
190
|
+
render() {
|
|
191
|
+
{
|
|
192
|
+
return (h("div", { role: "tabpanel", class: { "duet-tab": true, selected: this.selected }, "aria-description": this.accessibleDescription }, h("slot", null)));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
DuetTab.style = duetTabCss;
|
|
197
|
+
|
|
198
|
+
const duetTabGroupCss = "*,*::after,*::before{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}:host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;-webkit-tap-highlight-color:transparent;display:block;width:100%}.duet-tab-group-tabs{margin-bottom:28px !important;display:block;width:100%;max-width:100%;padding-top:2px;list-style:none}.duet-tab-group-tabs.duet-m-0{margin:0 !important}.duet-tab-group-tabs.duet-tab-group-collapses.duet-tab-group-hidden{display:none}@media (min-width: 36em){.duet-tab-group-tabs.duet-tab-group-collapses.duet-tab-group-hidden{display:block}}.duet-tab-variation-plain .duet-tab-group-tabs{border-bottom:1px solid #e1e3e6}.duet-theme-turva.duet-tab-variation-plain .duet-tab-group-tabs{border-bottom-color:#e4e4e6}@media (min-width: 36em){duet-select{display:none !important}}.duet-tab-button{-webkit-user-select:none;user-select:none;position:relative;z-index:100;display:block;width:100%;padding:20px;margin-top:-2px;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:1rem;font-weight:600;line-height:1.1;color:#00294d;text-align:left;text-decoration:none;cursor:pointer;background:white;border:2px solid #e1e3e6;border-radius:0;transition:150ms ease}.duet-tab-button.duet-p-0{padding:0 !important}.duet-tab-button.duet-m-0{margin:0 !important}.duet-theme-turva .duet-tab-button{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#171c3a;border-color:#e4e4e6}.duet-tab-button.duet-p-0{padding:0 !important}@media (min-width: 36em){.duet-tab-button{display:inline-block;width:auto;margin-left:-2px;border-right:2px solid #e1e3e6;border-radius:0}}.duet-tab-button:hover{z-index:200;border-color:#909599}.duet-theme-turva .duet-tab-button:hover{border-color:#747475}.duet-tab-button:active{opacity:0.75;transition:none}.duet-tab-button.selected{z-index:201;color:white;background:#00294d;border-color:#00294d;outline:0;box-shadow:none !important}.duet-theme-turva .duet-tab-button.selected{color:white;background-color:#171c3a;border-color:#171c3a}.duet-tab-button:focus{z-index:200;outline:0}:host(.user-is-tabbing) .duet-tab-button:focus{box-shadow:0 0 0 4px rgba(0, 119, 179, 0.3), 0 0 0 1px #0077b3 !important}:host(.user-is-tabbing) .duet-theme-turva .duet-tab-button:focus{box-shadow:0 0 0 4px rgba(23, 28, 58, 0.2), 0 0 0 1px #171c3a !important}.duet-tab-button:first-child{border-top-left-radius:4px;border-top-right-radius:4px}@media (min-width: 36em){.duet-tab-button:first-child{border-top-right-radius:0;border-bottom-left-radius:4px}}.duet-tab-button:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}@media (min-width: 36em){.duet-tab-button:last-child{border-radius:0;border-top-right-radius:4px;border-bottom-right-radius:4px}}.duet-tab-variation-plain .duet-tab-button{display:inline-block;width:auto;padding-right:0;padding-left:0;border:0;border-radius:0;transition:none}.duet-tab-variation-plain .duet-tab-button+.duet-tab-button{margin-left:36px}.duet-tab-variation-plain .duet-tab-button.selected{color:#0077b3;background:white;border-bottom:3px solid #0077b3}.duet-theme-turva.duet-tab-variation-plain .duet-tab-button.selected{color:#c60c30;border-bottom-color:#c60c30}.duet-tab-group-content{position:relative;width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:1rem;font-weight:400;line-height:1.5;color:#00294d;text-align:left}.duet-theme-turva .duet-tab-group-content{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#171c3a}";
|
|
199
|
+
|
|
200
|
+
let DuetTabGroup = class {
|
|
201
|
+
constructor(hostRef) {
|
|
202
|
+
registerInstance(this, hostRef);
|
|
203
|
+
this.duetChange = createEvent(this, "duetChange", 3);
|
|
204
|
+
this.duetTabChange = createEvent(this, "duetTabChange", 7);
|
|
205
|
+
this.id = createID("DuetTabGroup");
|
|
206
|
+
/**
|
|
207
|
+
* State() variables
|
|
208
|
+
* Inlined decorator, alphabetical order.
|
|
209
|
+
*/
|
|
210
|
+
this.tabs = [];
|
|
211
|
+
this.selected = 0;
|
|
212
|
+
/**
|
|
213
|
+
* Theme of the component.
|
|
214
|
+
*/
|
|
215
|
+
this.theme = "";
|
|
216
|
+
/**
|
|
217
|
+
* Controls whether the tab-group should scroll (by inflection this will disable collapsing to select box on small screens),
|
|
218
|
+
* if this is a number instead of true it will be used as "amount of items to scroll"
|
|
219
|
+
*/
|
|
220
|
+
this.scrolls = false;
|
|
221
|
+
/**
|
|
222
|
+
* Whether the tab-group collapses to a select dropwdown in minor breakpoints
|
|
223
|
+
*/
|
|
224
|
+
this.collapses = true;
|
|
225
|
+
/**
|
|
226
|
+
* Style variation of the tab group.
|
|
227
|
+
*/
|
|
228
|
+
this.variation = "default";
|
|
229
|
+
/**
|
|
230
|
+
* The currently active language. This setting changes the accessible labels to match the
|
|
231
|
+
* chosen language.
|
|
232
|
+
* @deprecated this is now handled via the html lang tag, and is no longer used - kept to avoid breaking changes and ease unit testing
|
|
233
|
+
* @default "fi"
|
|
234
|
+
*/
|
|
235
|
+
this.language = getLanguage();
|
|
236
|
+
/**
|
|
237
|
+
* Defaults for Label
|
|
238
|
+
* @default {fi: "Valitse", en: "Choose", sv: "Välja"}
|
|
239
|
+
*/
|
|
240
|
+
this.labelDefaults = {
|
|
241
|
+
fi: "Valitse",
|
|
242
|
+
en: "Choose",
|
|
243
|
+
sv: "Välj",
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Label for the select element which gets shown on mobile.
|
|
247
|
+
* @default {fi: "Valitse", en: "Choose", sv: "Välja"}
|
|
248
|
+
*/
|
|
249
|
+
this.label = getLocaleString(this.labelDefaults, this.language);
|
|
250
|
+
/**
|
|
251
|
+
* Determines whether the label for the select element shown on mobile is visually hidden.
|
|
252
|
+
*/
|
|
253
|
+
this.labelHidden = true;
|
|
254
|
+
/**
|
|
255
|
+
* Optional identifier to add to buttons in the tab group
|
|
256
|
+
*/
|
|
257
|
+
this.identifier = this.id;
|
|
258
|
+
/**
|
|
259
|
+
* Controls the margin of the component.
|
|
260
|
+
*/
|
|
261
|
+
this.margin = "auto";
|
|
262
|
+
/**
|
|
263
|
+
* Controls the padding of the component.
|
|
264
|
+
*/
|
|
265
|
+
this.padding = "auto";
|
|
266
|
+
/**
|
|
267
|
+
* Component event handling.
|
|
268
|
+
*/
|
|
269
|
+
this.handleKeyDown = ev => {
|
|
270
|
+
let button;
|
|
271
|
+
if (isArrowLeftKey(ev) || isArrowUpKey(ev)) {
|
|
272
|
+
button = ev.target.previousElementSibling;
|
|
273
|
+
}
|
|
274
|
+
else if (isArrowRightKey(ev) || isArrowDownKey(ev)) {
|
|
275
|
+
button = ev.target.nextElementSibling;
|
|
276
|
+
}
|
|
277
|
+
if (button) {
|
|
278
|
+
ev.preventDefault();
|
|
279
|
+
button.click();
|
|
280
|
+
button.focus();
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
this.renderTab = () => {
|
|
284
|
+
const renderedTabs = this.tabs.map((element, index) => {
|
|
285
|
+
return (h("button", { role: "tab", id: this.getButtonId(index), "aria-controls": this.getTabId(index), "aria-selected": element.selected ? "true" : "false", "aria-description": this.getAccessibleDescription(index), part: `${this.identifier}-button`, type: "button", class: {
|
|
286
|
+
"duet-p-0": this.padding === "none",
|
|
287
|
+
"duet-tab-button": true,
|
|
288
|
+
selected: element.selected,
|
|
289
|
+
}, onClick: () => this.openTab(index), onKeyDown: ev => this.handleKeyDown(ev) }, element.label));
|
|
290
|
+
});
|
|
291
|
+
if (this.scrolls) {
|
|
292
|
+
return (h("duet-scrollable", { selected: this.selected, identifier: this.identifier }, renderedTabs));
|
|
293
|
+
}
|
|
294
|
+
return renderedTabs;
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Component lifecycle events.
|
|
299
|
+
*/
|
|
300
|
+
async connectedCallback() {
|
|
301
|
+
if (typeof MutationObserver !== "undefined") {
|
|
302
|
+
this.mutationO = new MutationObserver(() => {
|
|
303
|
+
this.updateTabs();
|
|
304
|
+
});
|
|
305
|
+
this.mutationO.observe(this.element, {
|
|
306
|
+
attributes: true,
|
|
307
|
+
attributeFilter: ["label"],
|
|
308
|
+
childList: true,
|
|
309
|
+
characterData: true,
|
|
310
|
+
subtree: true,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
await this.updateTabs();
|
|
314
|
+
}
|
|
315
|
+
disconnectedCallback() {
|
|
316
|
+
if (this.mutationO) {
|
|
317
|
+
this.mutationO.disconnect();
|
|
318
|
+
this.mutationO = undefined;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
componentWillLoad() {
|
|
322
|
+
inheritGlobalTheme(this);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* This method allows you to open any of the tabs by calling the method and
|
|
326
|
+
* passing the index of the tab. Please note that index starts from zero.
|
|
327
|
+
*/
|
|
328
|
+
async openTab(tabIndex) {
|
|
329
|
+
if (tabIndex >= this.tabs.length) {
|
|
330
|
+
throw new Error(`[duet-tabs] Index ${tabIndex} is out of bounds of tabs length`);
|
|
331
|
+
}
|
|
332
|
+
this.selected = tabIndex;
|
|
333
|
+
this.tabs.forEach((tab, i) => {
|
|
334
|
+
tab.selected = i === tabIndex;
|
|
335
|
+
});
|
|
336
|
+
const event = {
|
|
337
|
+
value: tabIndex,
|
|
338
|
+
component: "duet-tab-group",
|
|
339
|
+
};
|
|
340
|
+
this.duetChange.emit(event);
|
|
341
|
+
this.duetTabChange.emit(event);
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* This method used to refresh the contents of the tab group
|
|
345
|
+
* but is now deprecated as this is done automatically.
|
|
346
|
+
* @deprecated
|
|
347
|
+
*/
|
|
348
|
+
async refresh() {
|
|
349
|
+
console.log("[duet-tabs] Refresh method is deprecated and will be removed in the future version.");
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Local methods.
|
|
353
|
+
*/
|
|
354
|
+
getTabs() {
|
|
355
|
+
const allTabs = Array.from(this.element.querySelectorAll("duet-tab"));
|
|
356
|
+
const localTabs = allTabs.filter(tab => tab.closest("duet-tab-group") === this.element);
|
|
357
|
+
if (localTabs.length === 0) {
|
|
358
|
+
throw new Error("[duet-tabs] Must have at least one tab");
|
|
359
|
+
}
|
|
360
|
+
// filter out any nested tabs
|
|
361
|
+
return localTabs;
|
|
362
|
+
}
|
|
363
|
+
getButtonId(index) {
|
|
364
|
+
return `${this.id}-button-${index}`;
|
|
365
|
+
}
|
|
366
|
+
getTabId(index) {
|
|
367
|
+
return `${this.id}-tab-${index}`;
|
|
368
|
+
}
|
|
369
|
+
getAccessibleDescription(index) {
|
|
370
|
+
const description = this.tabs[index].getAttribute("accessible-description") || null;
|
|
371
|
+
return description;
|
|
372
|
+
}
|
|
373
|
+
async updateTabs() {
|
|
374
|
+
this.tabs = this.getTabs();
|
|
375
|
+
this.tabs.forEach((tab, index) => {
|
|
376
|
+
tab.id = this.getTabId(index);
|
|
377
|
+
tab.setAttribute("aria-labelledby", this.getButtonId(index));
|
|
378
|
+
if (tab.selected) {
|
|
379
|
+
this.selected = index;
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* render() function
|
|
386
|
+
* Always the last one in the class.
|
|
387
|
+
*/
|
|
388
|
+
render() {
|
|
389
|
+
return (h("div", { class: {
|
|
390
|
+
"duet-tab-group": true,
|
|
391
|
+
"duet-theme-turva": this.theme === "turva",
|
|
392
|
+
[`duet-tab-variation-${this.variation}`]: true,
|
|
393
|
+
"duet-tab-group-scrolls": this.scrolls,
|
|
394
|
+
"duet-tab-group-collapses": this.collapses,
|
|
395
|
+
} }, this.tabs.length > 3 && this.collapses && (h("duet-select", { value: this.selected.toString(), expand: true, label: this.label, labelHidden: this.labelHidden, theme: this.theme, onDuetChange: event => this.openTab(Number(event.detail.value)), items: this.tabs.map((tab, index) => {
|
|
396
|
+
return { label: tab.label, value: index.toString() };
|
|
397
|
+
}) })), h("div", { role: "tablist", class: {
|
|
398
|
+
"duet-m-0": this.margin === "none",
|
|
399
|
+
"duet-tab-group-tabs": true,
|
|
400
|
+
"duet-tab-group-hidden": this.tabs.length > 3,
|
|
401
|
+
"duet-tab-group-collapses": this.collapses,
|
|
402
|
+
} }, this.renderTab()), h("div", { class: { "duet-tab-group-content": true, "duet-m-0": this.margin === "none" } }, h("slot", null))));
|
|
403
|
+
}
|
|
404
|
+
get element() { return getElement(this); }
|
|
405
|
+
};
|
|
406
|
+
DuetTabGroup.style = duetTabGroupCss;
|
|
407
|
+
|
|
408
|
+
export { DuetScrollable as duet_scrollable, DuetTab as duet_tab, DuetTabGroup as duet_tab_group };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-
|
|
4
|
+
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-eb374972.js';
|
|
5
5
|
import { c as createID } from './create-id-981107da.js';
|
|
6
6
|
import { p as parsePossibleJSON } from './string-utils-2f1793b8.js';
|
|
7
7
|
import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, c as createEvent, h, g as getElement, H as Host } from './index-
|
|
4
|
+
import { r as registerInstance, c as createEvent, h, g as getElement, H as Host } from './index-eb374972.js';
|
|
5
5
|
import { c as createID } from './create-id-981107da.js';
|
|
6
6
|
import { i as isKeyboardClick } from './keyboard-utils-584cedd7.js';
|
|
7
7
|
import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-
|
|
4
|
+
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-eb374972.js';
|
|
5
5
|
import { c as createID } from './create-id-981107da.js';
|
|
6
6
|
import { c as cleanValue } from './input-utils-f4cafee1.js';
|
|
7
7
|
import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-
|
|
4
|
+
import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-eb374972.js';
|
|
5
5
|
import { c as createID } from './create-id-981107da.js';
|
|
6
6
|
import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, h, H as Host, g as getElement } from './index-
|
|
4
|
+
import { r as registerInstance, h, H as Host, g as getElement } from './index-eb374972.js';
|
|
5
5
|
import { c as createID } from './create-id-981107da.js';
|
|
6
6
|
import { a as getLanguage, g as getLocaleString } from './language-utils-344d894c.js';
|
|
7
7
|
import { i as inheritGlobalTheme } from './themeable-component-572685dd.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, h, F as Fragment, g as getElement } from './index-
|
|
4
|
+
import { r as registerInstance, h, F as Fragment, g as getElement } from './index-eb374972.js';
|
|
5
5
|
import { s as sizeHeader } from './tokens.module-49cbf963.js';
|
|
6
6
|
import { c as createID } from './create-id-981107da.js';
|
|
7
7
|
import { a as getLanguage, g as getLocaleString } from './language-utils-344d894c.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built with Duet Design System
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, h, H as Host } from './index-
|
|
4
|
+
import { r as registerInstance, h, H as Host } from './index-eb374972.js';
|
|
5
5
|
|
|
6
6
|
const duetVisuallyHiddenCss = ":host{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;position:absolute !important;top:0;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(1px, 1px, 1px, 1px) !important;border:0 !important}";
|
|
7
7
|
|