@dubai-design-system/components-js 5.0.3 → 5.1.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/CHANGELOG.md +198 -1
- package/MIGRATION.md +423 -0
- package/dist/cjs/dda-accordion.cjs.entry.js +12 -7
- package/dist/cjs/dda-alert.cjs.entry.js +20 -3
- package/dist/cjs/dda-attach-file.cjs.entry.js +24 -8
- package/dist/cjs/dda-avatar.cjs.entry.js +23 -12
- package/dist/cjs/dda-banner.cjs.entry.js +14 -5
- package/dist/cjs/dda-breadcrumb.cjs.entry.js +22 -10
- package/dist/cjs/dda-button.cjs.entry.js +16 -9
- package/dist/cjs/dda-checkbox.cjs.entry.js +5 -4
- package/dist/cjs/dda-chip.cjs.entry.js +8 -3
- package/dist/cjs/dda-credit-card.cjs.entry.js +5 -3
- package/dist/cjs/dda-creditcard-field.cjs.entry.js +26 -8
- package/dist/cjs/dda-dropdown.cjs.entry.js +31 -5
- package/dist/cjs/dda-footer.cjs.entry.js +9 -3
- package/dist/cjs/dda-header.cjs.entry.js +80 -8
- package/dist/cjs/dda-home-banner.cjs.entry.js +11 -5
- package/dist/cjs/dda-horizontal-stepper.cjs.entry.js +22 -5
- package/dist/cjs/dda-input.cjs.entry.js +17 -10
- package/dist/cjs/dda-link-button_2.cjs.entry.js +21 -13
- package/dist/cjs/dda-number-field.cjs.entry.js +20 -8
- package/dist/cjs/dda-pagination.cjs.entry.js +21 -11
- package/dist/cjs/dda-phonefield.cjs.entry.js +27 -9
- package/dist/cjs/dda-progressbar.cjs.entry.js +8 -3
- package/dist/cjs/dda-range-slider.cjs.entry.js +15 -3
- package/dist/cjs/dda-search-input.cjs.entry.js +27 -12
- package/dist/cjs/dda-segmented-tabs.cjs.entry.js +54 -6
- package/dist/cjs/dda-select.cjs.entry.js +40 -8
- package/dist/cjs/dda-sticky-footer.cjs.entry.js +20 -3
- package/dist/cjs/dda-tabs.cjs.entry.js +10 -4
- package/dist/cjs/dda-textarea.cjs.entry.js +22 -12
- package/dist/cjs/dda-toggle.cjs.entry.js +5 -4
- package/dist/cjs/dda-tooltip.cjs.entry.js +6 -4
- package/dist/cjs/dda-ui-card.cjs.entry.js +19 -2
- package/dist/cjs/dda-vertical-stepper.cjs.entry.js +23 -3
- package/dist/cjs/dda.cjs.js +2 -2
- package/dist/cjs/index-Dm7JbFAh.js +2116 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/unique-id-DahNGdQy.js +14 -0
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/dda-accordion/dda-accordion.js +16 -11
- package/dist/collection/components/dda-alert/dda-alert.js +74 -17
- package/dist/collection/components/dda-alert/dda-alert.stories.js +2 -8
- package/dist/collection/components/dda-attach-file/dda-attach-file.js +35 -19
- package/dist/collection/components/dda-attach-file/dda-attach-file.stories.js +0 -9
- package/dist/collection/components/dda-avatar/dda-avatar.js +53 -25
- package/dist/collection/components/dda-avatar/dda-avatar.stories.js +1 -1
- package/dist/collection/components/dda-banner/dda-banner.css +35 -0
- package/dist/collection/components/dda-banner/dda-banner.js +34 -5
- package/dist/collection/components/dda-breadcrumb/dda-breadcrumb.js +49 -12
- package/dist/collection/components/dda-button/dda-button.js +29 -22
- package/dist/collection/components/dda-checkbox/dda-checkbox.css +13 -0
- package/dist/collection/components/dda-checkbox/dda-checkbox.js +13 -12
- package/dist/collection/components/dda-checkbox/dda-checkbox.stories.js +0 -11
- package/dist/collection/components/dda-chip/dda-chip.js +34 -9
- package/dist/collection/components/dda-chip/dda-chip.stories.js +0 -11
- package/dist/collection/components/dda-credit-card/dda-credit-card.js +10 -8
- package/dist/collection/components/dda-creditcard-field/dda-creditcard-field.js +58 -23
- package/dist/collection/components/dda-creditcard-field/dda-creditcard-field.stories.js +1 -10
- package/dist/collection/components/dda-dropdown/dda-dropdown.js +90 -18
- package/dist/collection/components/dda-dropdown/dda-dropdown.stories.js +0 -4
- package/dist/collection/components/dda-footer/dda-footer.js +57 -10
- package/dist/collection/components/dda-footer/dda-footer.stories.js +5 -4
- package/dist/collection/components/dda-header/dda-header.css +11 -0
- package/dist/collection/components/dda-header/dda-header.js +224 -37
- package/dist/collection/components/dda-header/dda-header.stories.js +12 -21
- package/dist/collection/components/dda-home-banner/dda-home-banner.js +8 -2
- package/dist/collection/components/dda-home-banner/home-banner.css +21 -1
- package/dist/collection/components/dda-input/dda-input.js +28 -21
- package/dist/collection/components/dda-input/dda-input.stories.js +0 -13
- package/dist/collection/components/dda-link-button/dda-link-button.js +30 -23
- package/dist/collection/components/dda-number-field/dda-number-field.js +54 -22
- package/dist/collection/components/dda-number-field/dda-number-field.stories.js +0 -9
- package/dist/collection/components/dda-pagination/dda-pagination.js +95 -28
- package/dist/collection/components/dda-pagination/dda-pagination.stories.js +24 -24
- package/dist/collection/components/dda-phonefield/dda-phonefield.js +62 -24
- package/dist/collection/components/dda-phonefield/dda-phonefield.stories.js +0 -13
- package/dist/collection/components/dda-progressbar/dda-progressbar.js +13 -8
- package/dist/collection/components/dda-radiobutton/dda-radiobutton.css +121 -4
- package/dist/collection/components/dda-radiobutton/dda-radiobutton.js +13 -12
- package/dist/collection/components/dda-radiobutton/dda-radiobutton.stories.js +5 -16
- package/dist/collection/components/dda-range-slider/dda-range-slider.js +29 -17
- package/dist/collection/components/dda-search-input/dda-search-input.js +61 -26
- package/dist/collection/components/dda-search-input/dda-search-input.stories.js +0 -9
- package/dist/collection/components/dda-select/dda-select.js +78 -20
- package/dist/collection/components/dda-sticky-footer/dda-sticky-footer.js +80 -43
- package/dist/collection/components/dda-sticky-footer/dda-sticky-footer.stories.js +1 -1
- package/dist/collection/components/dda-tabs/dda-tabs.js +21 -15
- package/dist/collection/components/dda-tabs/dda-tabs.stories.js +3 -10
- package/dist/collection/components/dda-textarea/dda-textarea.js +33 -23
- package/dist/collection/components/dda-textarea/dda-textarea.stories.js +0 -9
- package/dist/collection/components/dda-toggle/dda-toggle.css +9 -0
- package/dist/collection/components/dda-toggle/dda-toggle.js +47 -8
- package/dist/collection/components/dda-toggle/dda-toggle.stories.js +10 -22
- package/dist/collection/components/dda-tooltip/dda-tooltip.js +9 -7
- package/dist/collection/components/dda-ui-card/dda-ui-card.js +55 -13
- package/dist/collection/components/segmented-groups/dda-segmented-tabs/dda-segmented-tabs.js +79 -11
- package/dist/collection/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.css +4 -1
- package/dist/collection/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.js +24 -6
- package/dist/collection/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.stories.js +2 -2
- package/dist/collection/components/stepper/dda-vertical-stepper/dda-vertical-stepper.js +49 -6
- package/dist/collection/components/stepper/dda-vertical-stepper/dda-vertical-stepper.stories.js +2 -2
- package/dist/collection/global/global.css +117 -4
- package/dist/collection/global/input.css +56 -2
- package/dist/collection/storybook/component-api.js +15 -0
- package/dist/collection/utils/placeholder-color.js +89 -0
- package/dist/collection/utils/unique-id.js +10 -0
- package/dist/components/dda-accordion.js +1 -1
- package/dist/components/dda-alert.js +1 -1
- package/dist/components/dda-attach-file.js +1 -1
- package/dist/components/dda-avatar.js +1 -1
- package/dist/components/dda-banner.js +1 -1
- package/dist/components/dda-breadcrumb.js +1 -1
- package/dist/components/dda-button.js +1 -1
- package/dist/components/dda-checkbox.js +1 -1
- package/dist/components/dda-chip.js +1 -1
- package/dist/components/dda-credit-card.js +1 -1
- package/dist/components/dda-creditcard-field.js +1 -1
- package/dist/components/dda-dropdown.js +1 -1
- package/dist/components/dda-footer.js +1 -1
- package/dist/components/dda-header.js +1 -1
- package/dist/components/dda-home-banner.js +1 -1
- package/dist/components/dda-horizontal-stepper.js +1 -1
- package/dist/components/dda-input.js +1 -1
- package/dist/components/dda-link-button.js +1 -1
- package/dist/components/dda-number-field.js +1 -1
- package/dist/components/dda-pagination.js +1 -1
- package/dist/components/dda-phonefield.js +1 -1
- package/dist/components/dda-progressbar.js +1 -1
- package/dist/components/dda-radiobutton.js +1 -1
- package/dist/components/dda-range-slider.js +1 -1
- package/dist/components/dda-search-input.js +1 -1
- package/dist/components/dda-segmented-tabs.js +1 -1
- package/dist/components/dda-select.js +1 -1
- package/dist/components/dda-sticky-footer.js +1 -1
- package/dist/components/dda-tabs.js +1 -1
- package/dist/components/dda-textarea.js +1 -1
- package/dist/components/dda-toggle.js +1 -1
- package/dist/components/dda-tooltip.js +1 -1
- package/dist/components/dda-ui-card.js +1 -1
- package/dist/components/dda-vertical-stepper.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-B-I003EB.js +1 -0
- package/dist/components/p-B4nkZ15I.js +1 -0
- package/dist/components/p-Bk2uycTf.js +1 -0
- package/dist/components/p-C96R7OFb.js +1 -0
- package/dist/components/p-Ciz-pnTr.js +1 -0
- package/dist/components/p-CleacZFl.js +1 -0
- package/dist/dda/dda.css +2 -2
- package/dist/dda/dda.esm.js +1 -1
- package/dist/dda/p-0daa2a14.entry.js +1 -0
- package/dist/dda/p-1537b9dd.entry.js +1 -0
- package/dist/dda/p-175c52b8.entry.js +1 -0
- package/dist/dda/p-2b65a79a.entry.js +1 -0
- package/dist/dda/p-2d93b185.entry.js +1 -0
- package/dist/dda/p-30d3a014.entry.js +1 -0
- package/dist/dda/p-33b890a5.entry.js +1 -0
- package/dist/dda/p-64d90f29.entry.js +1 -0
- package/dist/dda/p-69bc04c1.entry.js +1 -0
- package/dist/dda/p-6daa282f.entry.js +1 -0
- package/dist/dda/p-72f22d1f.entry.js +1 -0
- package/dist/dda/p-7549868d.entry.js +1 -0
- package/dist/dda/p-7a51a946.entry.js +1 -0
- package/dist/dda/p-7b187e1f.entry.js +1 -0
- package/dist/dda/p-7b4d895e.entry.js +1 -0
- package/dist/dda/p-8f408141.entry.js +1 -0
- package/dist/dda/p-91341ca7.entry.js +1 -0
- package/dist/dda/p-9552def5.entry.js +1 -0
- package/dist/dda/p-9672af43.entry.js +1 -0
- package/dist/dda/p-98bba4dc.entry.js +1 -0
- package/dist/dda/p-B-I003EB.js +1 -0
- package/dist/dda/p-a0768b2f.entry.js +1 -0
- package/dist/dda/p-a5bd30ad.entry.js +1 -0
- package/dist/dda/p-a83f6267.entry.js +1 -0
- package/dist/dda/p-b17f79df.entry.js +1 -0
- package/dist/dda/p-b79505e1.entry.js +1 -0
- package/dist/dda/p-b8b98df2.entry.js +1 -0
- package/dist/dda/p-cc2cc09b.entry.js +1 -0
- package/dist/dda/p-ceee08fa.entry.js +1 -0
- package/dist/dda/p-d000e69d.entry.js +1 -0
- package/dist/dda/p-e3a65ceb.entry.js +1 -0
- package/dist/dda/p-e5b79469.entry.js +1 -0
- package/dist/dda/p-f2f3be5f.entry.js +1 -0
- package/dist/dda/p-f92e0a32.entry.js +1 -0
- package/dist/dda/p-o6021Dsk.js +2 -0
- package/dist/esm/dda-accordion.entry.js +12 -7
- package/dist/esm/dda-alert.entry.js +20 -3
- package/dist/esm/dda-attach-file.entry.js +24 -8
- package/dist/esm/dda-avatar.entry.js +23 -12
- package/dist/esm/dda-banner.entry.js +14 -5
- package/dist/esm/dda-breadcrumb.entry.js +22 -10
- package/dist/esm/dda-button.entry.js +16 -9
- package/dist/esm/dda-checkbox.entry.js +5 -4
- package/dist/esm/dda-chip.entry.js +8 -3
- package/dist/esm/dda-credit-card.entry.js +5 -3
- package/dist/esm/dda-creditcard-field.entry.js +26 -8
- package/dist/esm/dda-dropdown.entry.js +31 -5
- package/dist/esm/dda-footer.entry.js +9 -3
- package/dist/esm/dda-header.entry.js +80 -8
- package/dist/esm/dda-home-banner.entry.js +11 -5
- package/dist/esm/dda-horizontal-stepper.entry.js +22 -5
- package/dist/esm/dda-input.entry.js +17 -10
- package/dist/esm/dda-link-button_2.entry.js +21 -13
- package/dist/esm/dda-number-field.entry.js +20 -8
- package/dist/esm/dda-pagination.entry.js +21 -11
- package/dist/esm/dda-phonefield.entry.js +27 -9
- package/dist/esm/dda-progressbar.entry.js +8 -3
- package/dist/esm/dda-range-slider.entry.js +15 -3
- package/dist/esm/dda-search-input.entry.js +27 -12
- package/dist/esm/dda-segmented-tabs.entry.js +54 -6
- package/dist/esm/dda-select.entry.js +40 -8
- package/dist/esm/dda-sticky-footer.entry.js +20 -3
- package/dist/esm/dda-tabs.entry.js +10 -4
- package/dist/esm/dda-textarea.entry.js +22 -12
- package/dist/esm/dda-toggle.entry.js +5 -4
- package/dist/esm/dda-tooltip.entry.js +6 -4
- package/dist/esm/dda-ui-card.entry.js +19 -2
- package/dist/esm/dda-vertical-stepper.entry.js +23 -3
- package/dist/esm/dda.js +3 -3
- package/dist/esm/index-o6021Dsk.js +2106 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/unique-id-B-I003EB.js +12 -0
- package/dist/types/components/dda-accordion/dda-accordion.d.ts +6 -0
- package/dist/types/components/dda-alert/dda-alert.d.ts +21 -0
- package/dist/types/components/dda-attach-file/dda-attach-file.d.ts +17 -0
- package/dist/types/components/dda-attach-file/dda-attach-file.stories.d.ts +0 -4
- package/dist/types/components/dda-avatar/dda-avatar.d.ts +20 -0
- package/dist/types/components/dda-banner/dda-banner.d.ts +5 -0
- package/dist/types/components/dda-breadcrumb/dda-breadcrumb.d.ts +12 -6
- package/dist/types/components/dda-button/dda-button.d.ts +15 -4
- package/dist/types/components/dda-checkbox/dda-checkbox.d.ts +11 -0
- package/dist/types/components/dda-checkbox/dda-checkbox.stories.d.ts +0 -10
- package/dist/types/components/dda-chip/dda-chip.d.ts +10 -0
- package/dist/types/components/dda-chip/dda-chip.stories.d.ts +0 -6
- package/dist/types/components/dda-credit-card/dda-credit-card.d.ts +7 -0
- package/dist/types/components/dda-creditcard-field/dda-creditcard-field.d.ts +24 -0
- package/dist/types/components/dda-creditcard-field/dda-creditcard-field.stories.d.ts +0 -6
- package/dist/types/components/dda-dropdown/dda-dropdown.d.ts +25 -0
- package/dist/types/components/dda-dropdown/dda-dropdown.stories.d.ts +0 -4
- package/dist/types/components/dda-footer/dda-footer.d.ts +13 -0
- package/dist/types/components/dda-header/dda-header.d.ts +60 -0
- package/dist/types/components/dda-header/dda-header.stories.d.ts +6 -0
- package/dist/types/components/dda-home-banner/dda-home-banner.d.ts +1 -0
- package/dist/types/components/dda-input/dda-input.d.ts +16 -0
- package/dist/types/components/dda-input/dda-input.stories.d.ts +0 -6
- package/dist/types/components/dda-link-button/dda-link-button.d.ts +14 -3
- package/dist/types/components/dda-number-field/dda-number-field.d.ts +21 -0
- package/dist/types/components/dda-number-field/dda-number-field.stories.d.ts +0 -6
- package/dist/types/components/dda-pagination/dda-pagination.d.ts +26 -0
- package/dist/types/components/dda-phonefield/dda-phonefield.d.ts +21 -0
- package/dist/types/components/dda-phonefield/dda-phonefield.stories.d.ts +0 -6
- package/dist/types/components/dda-progressbar/dda-progressbar.d.ts +7 -0
- package/dist/types/components/dda-radiobutton/dda-radiobutton.d.ts +11 -0
- package/dist/types/components/dda-radiobutton/dda-radiobutton.stories.d.ts +5 -15
- package/dist/types/components/dda-range-slider/dda-range-slider.d.ts +16 -0
- package/dist/types/components/dda-search-input/dda-search-input.d.ts +21 -0
- package/dist/types/components/dda-search-input/dda-search-input.stories.d.ts +0 -6
- package/dist/types/components/dda-select/dda-select.d.ts +23 -0
- package/dist/types/components/dda-sticky-footer/dda-sticky-footer.d.ts +46 -3
- package/dist/types/components/dda-tabs/dda-tabs.d.ts +12 -1
- package/dist/types/components/dda-tabs/dda-tabs.stories.d.ts +0 -4
- package/dist/types/components/dda-textarea/dda-textarea.d.ts +16 -0
- package/dist/types/components/dda-textarea/dda-textarea.stories.d.ts +0 -6
- package/dist/types/components/dda-toggle/dda-toggle.d.ts +11 -0
- package/dist/types/components/dda-toggle/dda-toggle.stories.d.ts +2 -12
- package/dist/types/components/dda-tooltip/dda-tooltip.d.ts +5 -0
- package/dist/types/components/dda-ui-card/dda-ui-card.d.ts +13 -1
- package/dist/types/components/segmented-groups/dda-segmented-tabs/dda-segmented-tabs.d.ts +19 -2
- package/dist/types/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.d.ts +6 -0
- package/dist/types/components/stepper/dda-vertical-stepper/dda-vertical-stepper.d.ts +8 -0
- package/dist/types/components.d.ts +2373 -47
- package/dist/types/utils/placeholder-color.d.ts +10 -0
- package/dist/types/utils/unique-id.d.ts +6 -0
- package/package.json +4 -3
- package/readme.md +6 -0
- package/dist/cjs/index-CDUC0Pdj.js +0 -1986
- package/dist/components/p-9UeqjDnY.js +0 -1
- package/dist/components/p-CrTEb7xH.js +0 -1
- package/dist/components/p-DldlmGnP.js +0 -1
- package/dist/components/p-NvTw9Mx1.js +0 -1
- package/dist/components/p-i15-_er0.js +0 -1
- package/dist/dda/p-016e4090.entry.js +0 -1
- package/dist/dda/p-0229b303.entry.js +0 -1
- package/dist/dda/p-05a6f90d.entry.js +0 -1
- package/dist/dda/p-1c9a6035.entry.js +0 -1
- package/dist/dda/p-2c313105.entry.js +0 -1
- package/dist/dda/p-2cec7be6.entry.js +0 -1
- package/dist/dda/p-2f4ace4c.entry.js +0 -1
- package/dist/dda/p-360a0577.entry.js +0 -1
- package/dist/dda/p-3e49128d.entry.js +0 -1
- package/dist/dda/p-3fa27728.entry.js +0 -1
- package/dist/dda/p-43e1c12f.entry.js +0 -1
- package/dist/dda/p-4428417d.entry.js +0 -1
- package/dist/dda/p-44ce832e.entry.js +0 -1
- package/dist/dda/p-560a3f0c.entry.js +0 -1
- package/dist/dda/p-5712bbd9.entry.js +0 -1
- package/dist/dda/p-626d7e7b.entry.js +0 -1
- package/dist/dda/p-68008c64.entry.js +0 -1
- package/dist/dda/p-6f3d9f78.entry.js +0 -1
- package/dist/dda/p-79db1218.entry.js +0 -1
- package/dist/dda/p-84911fab.entry.js +0 -1
- package/dist/dda/p-90d9648b.entry.js +0 -1
- package/dist/dda/p-91040abe.entry.js +0 -1
- package/dist/dda/p-Cq6A4mXg.js +0 -2
- package/dist/dda/p-a1421a54.entry.js +0 -1
- package/dist/dda/p-a22b1c56.entry.js +0 -1
- package/dist/dda/p-aa0e9035.entry.js +0 -1
- package/dist/dda/p-b2981646.entry.js +0 -1
- package/dist/dda/p-c1f45887.entry.js +0 -1
- package/dist/dda/p-c50e1141.entry.js +0 -1
- package/dist/dda/p-d8a9cab1.entry.js +0 -1
- package/dist/dda/p-dd966009.entry.js +0 -1
- package/dist/dda/p-ed099201.entry.js +0 -1
- package/dist/dda/p-f4bd2b2e.entry.js +0 -1
- package/dist/dda/p-fc30c60e.entry.js +0 -1
- package/dist/esm/index-Cq6A4mXg.js +0 -1976
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,203 @@ All notable changes to the Dubai Design System packages are documented in this f
|
|
|
4
4
|
All four published packages (`components-js`, `components-react`, `components-vue`,
|
|
5
5
|
`components-angular`) share a version and release together.
|
|
6
6
|
|
|
7
|
+
## 5.1.0 (2026-09-14)
|
|
8
|
+
|
|
9
|
+
A minor release. It adds a working header search, and fixes issues a consumer reported after
|
|
10
|
+
upgrading to 5.0.3 plus layout and API faults found while building a vanilla JS sample site
|
|
11
|
+
against the published package. The two `dda-header` navigation faults were also present in
|
|
12
|
+
3.12.x; they are fixed here, not newly introduced.
|
|
13
|
+
|
|
14
|
+
**Upgrading?** `MIGRATION.md`, which ships next to this file, has a step-by-step guide from
|
|
15
|
+
5.0.x, 4.1.0 and 3.x, with the searches to run and the attributes to change.
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
- **dda-header: the search works.** The desktop field is now a `<form role="search">`, so
|
|
20
|
+
Enter submits. Every non-empty search emits a cancelable `searchSubmit` event with
|
|
21
|
+
`detail.query`. The new `search_action` prop sends the search to a results page with a
|
|
22
|
+
plain GET, using `search_input_name` (default `q`) as the parameter, so static sites need no
|
|
23
|
+
JavaScript; cancel the event to route inside an app. On phone-width screens the search button
|
|
24
|
+
now opens a search field under the header, with `aria-expanded`, focus moved into the field,
|
|
25
|
+
and Escape or a close button to dismiss it.
|
|
26
|
+
- **Components report user choices.** New events: dda-pagination `pageChange`
|
|
27
|
+
(`{ page }`), dda-select `selectionChange` (`{ value }`, only when the value changes),
|
|
28
|
+
dda-dropdown and dda-avatar `optionSelect` (`{ value }`, on every pick), and
|
|
29
|
+
dda-creditcard-field `valueChange` (`{ value }`). dda-ui-card now fires its `linkClick` event,
|
|
30
|
+
which was declared but never emitted (detail: the click `MouseEvent`), and dda-tabs `tabClick`
|
|
31
|
+
is typed as the tab index it always sent. The props these components update themselves
|
|
32
|
+
(`current_page`, `total_pages`, `selected`, `value`) are declared mutable.
|
|
33
|
+
- **New props for data that was hardcoded or unreachable:** `dda-toggle` `title_text` and
|
|
34
|
+
`supporting`, `dda-footer` `logo-description`, `dda-breadcrumb` `breadcrumbs`, and
|
|
35
|
+
`dda-vertical-stepper` `current_step` (details below).
|
|
36
|
+
|
|
37
|
+
### Accessibility
|
|
38
|
+
|
|
39
|
+
Fixes from an axe-core and accessibility-tree audit of a sample site built on the package.
|
|
40
|
+
|
|
41
|
+
- **Icon names are no longer read aloud (1.1.1, 4.1.2).** Decorative Material icons in
|
|
42
|
+
dda-button, dda-link-button, dda-accordion, dda-checkbox, dda-chip, dda-pagination, dda-tabs,
|
|
43
|
+
dda-segmented-tabs, dda-select, dda-dropdown, dda-number-field, dda-phonefield,
|
|
44
|
+
dda-search-input, dda-textarea, dda-alert, dda-ui-card and dda-header are `aria-hidden`, so a
|
|
45
|
+
button reads "Continue", not "Continue arrow_forward".
|
|
46
|
+
- **Icon-only controls have names.** New label props with English defaults:
|
|
47
|
+
dda-alert `close_button_label` ("Close"), dda-chip `close_button_label` ("Remove"),
|
|
48
|
+
dda-search-input `clear_button_label` ("Clear search"), dda-pagination
|
|
49
|
+
`previous_button_label` / `next_button_label` ("Previous page" / "Next page"),
|
|
50
|
+
dda-dropdown / dda-number-field / dda-phonefield `toggle_button_label`, dda-header
|
|
51
|
+
`menu_button_label` ("Menu", replacing the text "hamburger menu text"), and dda-segmented-tabs
|
|
52
|
+
`icon_labels` for icon-only segments. Toggles that open a list set `aria-expanded`, and
|
|
53
|
+
dda-pagination marks the current page with `aria-current="page"`.
|
|
54
|
+
- **Form labels are connected without an id prop (1.3.1, 4.1.2).** Found with WAVE. The
|
|
55
|
+
fields rendered `<label for={input_id}>` and `<input id={input_id}>`, so without the prop the
|
|
56
|
+
label pointed nowhere. dda-input, dda-textarea, dda-search-input, dda-attach-file,
|
|
57
|
+
dda-number-field, dda-phonefield, dda-creditcard-field, dda-select, dda-dropdown and
|
|
58
|
+
dda-range-slider now generate a unique id when `input_id` / `button_id` / the slider ids are
|
|
59
|
+
not set; the props still win when set.
|
|
60
|
+
- **dda-select and dda-dropdown announce the chosen value.** The label no longer names the
|
|
61
|
+
trigger through `for`; the trigger uses `aria-labelledby` (label, then its own text), so a
|
|
62
|
+
screen reader hears "Topic, General question", not only "Topic".
|
|
63
|
+
- **dda-attach-file works with a keyboard and screen reader (2.1.1).** The file input was
|
|
64
|
+
`display: none`. It is now visually hidden but focusable, the "Choose File" control shows a
|
|
65
|
+
focus ring, the input is named "Choose file" without a visible label, and the remove button
|
|
66
|
+
is named "Remove <file name>". The input stays in the page after a file is chosen, so a native
|
|
67
|
+
form submit includes the file.
|
|
68
|
+
- **dda-phonefield is a telephone input.** It was `type="number"`, announced as a spin button,
|
|
69
|
+
changed by arrow keys, and dropped leading zeros. It is now `type="tel"` with
|
|
70
|
+
`autocomplete="tel-national"` by default, and country options have unique ids.
|
|
71
|
+
- **dda-range-slider inputs are named** "Minimum" and "Maximum" by default, and are no longer
|
|
72
|
+
wrapped in empty `<label>` elements.
|
|
73
|
+
- **dda-textarea in rich text mode** no longer points its label's `for` at the editor `<div>`.
|
|
74
|
+
- **Keyboard focus is visible on dda-checkbox and dda-toggle (2.4.7).**
|
|
75
|
+
- **dda-banner is reachable by keyboard (2.1.1).** The slide row is one focusable, named
|
|
76
|
+
region (`aria_label`, default "Slides") with a focus ring.
|
|
77
|
+
- **Placeholder text meets 4.5:1 (1.4.3).** Grouped and single fields use
|
|
78
|
+
`--dda-on-surface-variant-40`: 6.49:1 in light theme and 7.46:1 in dark theme, up from 3.18:1.
|
|
79
|
+
- **dda-home-banner text stays readable over any photo (1.4.3).** A built-in scrim sits behind
|
|
80
|
+
the slide text, mirrored for right-to-left pages.
|
|
81
|
+
- **Links in running text are underlined (1.4.1).** `dda.css` removed every link underline;
|
|
82
|
+
unclassed links inside `p`, `td`, `dd`, `blockquote` and `figcaption` now keep one.
|
|
83
|
+
- **Heading levels can follow the page outline.** New `heading_level` prop on dda-alert
|
|
84
|
+
(default 4), dda-footer (default 4) and dda-ui-card (default 3, was a fixed `h1`).
|
|
85
|
+
- **dda-sticky-footer is an `<aside>` named "Quick actions"** (`aria_label`), so it no longer
|
|
86
|
+
adds a second footer landmark. Its services image is decorative when the text is shown.
|
|
87
|
+
- **dda-header:** the language buttons carry `lang` (`language_lang`, default `ar`); the
|
|
88
|
+
side-menu language button uses `language_text`; the ReadSpeaker item is rendered only when
|
|
89
|
+
`read-speaker-link` is set; and logo links use `first-logo-href` / `second-logo-href`
|
|
90
|
+
(default `/`, previously `#`).
|
|
91
|
+
|
|
92
|
+
### Bug Fixes
|
|
93
|
+
|
|
94
|
+
- **Headings rendered at body size.** `legacy-compat.css` sized `h1`–`h6`, `.h1`–`.h6` and
|
|
95
|
+
`.dda-h1`–`.dda-h6` with `--font-h1`…`--font-h6 !important`, and the same file used
|
|
96
|
+
`--font-body`, `--font-caption`, `--font-display`, `--font-small`, `--line-height-*`,
|
|
97
|
+
`--font-weight-*` and `--gap-*`. None of these were defined, so every heading, the legacy
|
|
98
|
+
caption and body classes, the Light/Regular/Medium/Bold weights and `.dda-gap-xs/-lg` fell
|
|
99
|
+
back to inherited values. They are now defined as aliases of the current tokens (with zero
|
|
100
|
+
specificity, so a site's own values still win), and the heading, body and caption rules no
|
|
101
|
+
longer use `!important`, so component classes keep their own sizes. Present since 5.0.0.
|
|
102
|
+
- **dda-home-banner: the slide title was tiny on laptop screens.** A rule in `dda.css` for
|
|
103
|
+
landscape screens up to 1600px wide set the slide title to 1.2rem and the subtitle to 1rem,
|
|
104
|
+
so most laptops showed a 19px hero title instead of the display size (36px at a 16px base).
|
|
105
|
+
The rule now applies only to short landscape screens (600px tall or less), such as a phone on
|
|
106
|
+
its side, where the full-height banner cannot fit the large title.
|
|
107
|
+
- **dda-home-banner: the slide controls were hidden behind the quick-link cards.** The cards
|
|
108
|
+
rise by the sticky footer height (new in this release), but the previous/next/pause controls
|
|
109
|
+
and dots stayed at a fixed offset, so on large screens they sat under the white cards: invisible,
|
|
110
|
+
yet still clickable. The controls now rise by the same `--dda-sticky-footer-height`.
|
|
111
|
+
- **dda-header: the transparent header gradient blocked taps.** Its 250px decorative gradient
|
|
112
|
+
reaches below the header and caught pointer events, so on short landscape screens the slide
|
|
113
|
+
call-to-action under it could not be clicked. The gradient now ignores pointer events.
|
|
114
|
+
- **Crashes on missing data.** dda-credit-card no longer throws without `card_number` (it
|
|
115
|
+
shows `****`) and renders the card-type image only when `card_type` is set.
|
|
116
|
+
dda-horizontal-stepper, dda-vertical-stepper and dda-segmented-tabs no longer throw on a
|
|
117
|
+
missing or invalid JSON attribute, re-render when `steps`, `items` or `selected_index`
|
|
118
|
+
change, and segmented tabs accept non-string items.
|
|
119
|
+
- **dda-header: the page scrolled behind the open side menu.** While the hamburger menu is
|
|
120
|
+
open, the page underneath no longer scrolls on touch or wheel input; the menu itself still
|
|
121
|
+
does. The lock is released when the menu closes by any route and when the header is removed.
|
|
122
|
+
|
|
123
|
+
- **dda-header: the top menu was invisible at the site root.** When
|
|
124
|
+
`location.pathname` was `/`, the header added the `transparent` class to its own
|
|
125
|
+
`<header>`. The link and icon rules matched and turned the menu white, but the background
|
|
126
|
+
rule needs a `.transparent` *ancestor* and never matched, so the header stayed white. The
|
|
127
|
+
quick links were white on white on every site's home page.
|
|
128
|
+
- **dda-header: side-menu submenu links did not navigate.** Every link below the first level
|
|
129
|
+
of `side-menu-items` cancelled its click to toggle a submenu, including links with no
|
|
130
|
+
submenu. Those links now navigate. Links that open a submenu still toggle it.
|
|
131
|
+
- **dda-banner: slides rendered unstyled.** The component shipped only
|
|
132
|
+
`:host { display: block }`, so slides stacked as bare images. They now sit in a horizontal
|
|
133
|
+
row that scrolls and snaps one slide at a time. Smooth scrolling is off under
|
|
134
|
+
`prefers-reduced-motion`.
|
|
135
|
+
- **dda-banner: a missing or invalid `slides` attribute threw.** It now renders an empty
|
|
136
|
+
banner and logs no error.
|
|
137
|
+
- **dda-horizontal-stepper: the active line ran past the stepper on the last step.** The
|
|
138
|
+
connector drawn after the active step has no next step to reach on the last one, so it
|
|
139
|
+
widened the page. The last step no longer draws it.
|
|
140
|
+
- **dda-vertical-stepper: `current_step` was ignored.** The prop was `current_Step`, whose
|
|
141
|
+
HTML attribute is `current_-step`, so the `current_step` attribute used in the docs never
|
|
142
|
+
moved the active step. `current_step` is now a real prop. `current_Step` (and
|
|
143
|
+
`current_-step`) keep working as a deprecated alias; `current_step` wins when both are set.
|
|
144
|
+
- **dda-number-field, dda-phonefield: the fields overflowed narrow containers.** The grouped
|
|
145
|
+
`<input>` kept its intrinsic width, so the number field's currency button sat outside the
|
|
146
|
+
field and the phone field grew past its grid cell. The input now shrinks to the space left.
|
|
147
|
+
The rule is in the shared `input.css`, so every grouped field benefits.
|
|
148
|
+
- **dda-radiobutton: the circle was invisible without `size`.** It took its dimensions only
|
|
149
|
+
from `size="sm|md|lg"`. It now defaults to the `md` size (21px).
|
|
150
|
+
- **dda-footer: the text under the logo was hardcoded.** It always read "Design outstanding
|
|
151
|
+
interfaces with advanced Figma features in a matter of minutes." It now comes from the new
|
|
152
|
+
`logo-description` attribute (`logoDescription` property).
|
|
153
|
+
- **dda-toggle: the label text was hardcoded.** Every toggle showed "Radio Button Title" and
|
|
154
|
+
"Supporting Text". The text now comes from the new `title_text` and `supporting` props, the
|
|
155
|
+
names `dda-checkbox` and `dda-radiobutton` already use.
|
|
156
|
+
- **dda-breadcrumb: the items could only be set with the `data-breadcrumbs` attribute.** It
|
|
157
|
+
was read once and was not a prop, so frameworks and scripts could not set the items as a
|
|
158
|
+
property, and later changes did not re-render. The new `breadcrumbs` prop takes an array or
|
|
159
|
+
a JSON string and re-renders when it changes. `data-breadcrumbs` still works when the prop is
|
|
160
|
+
not set, and invalid JSON renders no items instead of throwing.
|
|
161
|
+
- **dda-sticky-footer: the fixed bar covered the home-page quick-link cards.**
|
|
162
|
+
`.quick-links-wrap` sat 45px above the bottom of the banner, less than the bar's height, so
|
|
163
|
+
at 1366×900 the bar hid the bottom 52px of the cards. The sticky footer now sets
|
|
164
|
+
`--dda-sticky-footer-height` on `:root`, and `.quick-links-wrap` adds it to its offset. Pages
|
|
165
|
+
without a sticky footer, and the stacked layout below 992px, keep the 45px offset.
|
|
166
|
+
- **dda.css: Material icons in quick-link cards had no size.** `.quick-links .link-item` sized
|
|
167
|
+
only `svg` icons. Material Icons `<i>` glyphs now get the same size, spacing and color.
|
|
168
|
+
|
|
169
|
+
### Behaviour Changes
|
|
170
|
+
|
|
171
|
+
- **dda-header no longer chooses the transparent style from the URL.** To show the
|
|
172
|
+
transparent header over a dark hero, set the class on an ancestor, as the static templates
|
|
173
|
+
do: `<body class="transparent">`. The header now renders both the colored and the white
|
|
174
|
+
logo, and CSS shows the correct one. The old automatic style never showed a transparent
|
|
175
|
+
background, so no page that rendered correctly before changes.
|
|
176
|
+
- **dda-home-banner logs a console warning when it finds no `<slide>` children.** Only
|
|
177
|
+
`<slide>` elements are shown; a banner built from `<div>` or card elements used to render
|
|
178
|
+
blank without a hint.
|
|
179
|
+
- **dda-footer shows no text under the logo unless `logo-description` is set.** Sites that
|
|
180
|
+
kept the placeholder sentence lose it; set `logo-description` to show your own text.
|
|
181
|
+
- **dda-toggle shows no label text unless `title_text` or `supporting` is set.** Set
|
|
182
|
+
`title_text` for a visible label, or keep `aria_label` for an accessible name only.
|
|
183
|
+
- **dda-sticky-footer writes `--dda-sticky-footer-height` on `:root`** while it is on the
|
|
184
|
+
page, and removes it when it is removed.
|
|
185
|
+
- **dda-header search no longer renders `id="ddaSearch"`.** Each header gets its own input
|
|
186
|
+
ids, so two headers on a page no longer clash. Code that used
|
|
187
|
+
`getElementById('ddaSearch')` should listen for `searchSubmit` instead.
|
|
188
|
+
- **dda-header adds `dda-scroll-lock` to `<html>` while the side menu is open,** which sets
|
|
189
|
+
`overflow: hidden` on `html` and `body`.
|
|
190
|
+
- **dda-ui-card renders its title as `h3`, not `h1`.** Set `heading_level` to keep another level.
|
|
191
|
+
- **dda-sticky-footer renders `<aside>`, not `<footer>`.** Selectors such as
|
|
192
|
+
`dda-sticky-footer footer` must use the `.dda-footer` class.
|
|
193
|
+
- **dda-header logo links point to `/` by default,** not `#`. Set `first-logo-href` and
|
|
194
|
+
`second-logo-href` for another URL.
|
|
195
|
+
- **dda-header hides the ReadSpeaker item when `read-speaker-link` is not set.** It did nothing
|
|
196
|
+
without the link.
|
|
197
|
+
- **Placeholder text is darker, links in running text are underlined, and home-banner slides
|
|
198
|
+
have a scrim.** These are deliberate contrast fixes; check pages that restyled them.
|
|
199
|
+
- **Headings are larger.** With the heading fix, `h1`–`h6` follow the type scale (for example
|
|
200
|
+
`h1` 57px and `h3` 40px at a 16px base) instead of 16px, and component titles use their own
|
|
201
|
+
sizes (alert title 24px, card title 18px, footer title 36px). Check pages that relied on
|
|
202
|
+
headings rendering at body size.
|
|
203
|
+
|
|
7
204
|
## 5.0.3 (2026-09-08)
|
|
8
205
|
|
|
9
206
|
An accessibility release for `dda-header`. The search and accessibility controls in the
|
|
@@ -127,7 +324,7 @@ stylesheet produced a 404 for all twelve font URLs and fell back to `sans-serif`
|
|
|
127
324
|
|
|
128
325
|
A full accessibility and correctness review of all 34 components. This is a **major**
|
|
129
326
|
release: several fixes change the rendered DOM, remove hardcoded ids, or alter which CSS
|
|
130
|
-
selectors match. **See
|
|
327
|
+
selectors match. **See `MIGRATION.md`, which ships next to this file, for what to change in your own code.**
|
|
131
328
|
`docs/a11y/consumer-impact.md` has the verified, itemised list with file and line
|
|
132
329
|
citations, and `docs/a11y/findings.md` records the 51 findings behind them.
|
|
133
330
|
|
package/MIGRATION.md
ADDED
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
# Upgrading to 5.1
|
|
2
|
+
|
|
3
|
+
This guide takes you from any earlier release of the Dubai Design System packages to
|
|
4
|
+
**5.1.0**. It ships inside `@dubai-design-system/components-js` as `MIGRATION.md`, next to
|
|
5
|
+
`CHANGELOG.md`.
|
|
6
|
+
|
|
7
|
+
All four packages share one version and must be upgraded together:
|
|
8
|
+
`@dubai-design-system/components-js`, `components-react`, `components-vue` and
|
|
9
|
+
`components-angular`.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Find your starting point
|
|
14
|
+
|
|
15
|
+
Check the version you have now:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm ls @dubai-design-system/components-js
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Then read the sections for your version, in this order:
|
|
22
|
+
|
|
23
|
+
| You are on | Read |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| **5.0.x** (5.0.0 – 5.0.3) | [Every upgrade](#2-every-upgrade-checklist) → [5.0.x to 5.1.0](#3-from-50x-to-510) |
|
|
26
|
+
| **4.1.0** | [Every upgrade](#2-every-upgrade-checklist) → [From 4.1.0](#5-from-410) → [From 3.x](#6-from-3x-to-50) → [5.0.x to 5.1.0](#3-from-50x-to-510) |
|
|
27
|
+
| **3.x** (3.12.16 or earlier) | [Every upgrade](#2-every-upgrade-checklist) → [From 3.x](#6-from-3x-to-50) → [Notes from 5.0.1](#4-notes-from-501-fonts-and-the-stylesheet) → [5.0.x to 5.1.0](#3-from-50x-to-510) |
|
|
28
|
+
|
|
29
|
+
Most pages need only a few attribute changes. The changes that can break something
|
|
30
|
+
**silently**, with no error in the console, are marked **Silent**. Search for those first.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 2. Every upgrade: checklist
|
|
35
|
+
|
|
36
|
+
Do these whatever version you start from.
|
|
37
|
+
|
|
38
|
+
- [ ] **Install the same exact version of every DDA package.**
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install @dubai-design-system/components-js@5.1.0
|
|
42
|
+
# and, if you use a wrapper:
|
|
43
|
+
npm install @dubai-design-system/components-react@5.1.0 # or -vue / -angular
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- [ ] **Load `dda.css`.** It carries the global styles and the Dubai typeface. From npm:
|
|
47
|
+
`import '@dubai-design-system/components-js/dist/dda/dda.css';`. From the CDN, see
|
|
48
|
+
[CDN users](#7-cdn-users).
|
|
49
|
+
- [ ] **Load the icon fonts.** `dda.css` ships no icon font. Without these links, icons render
|
|
50
|
+
as words such as `chevron_right`.
|
|
51
|
+
|
|
52
|
+
```html
|
|
53
|
+
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
54
|
+
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" rel="stylesheet">
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- [ ] **If you bundle with Vite or Rollup, do not use the lazy loader.**
|
|
58
|
+
`defineCustomElements()` from `components-js/loader` (and the Vue plugin, which calls it)
|
|
59
|
+
loads component chunks with dynamic imports these bundlers cannot follow, so the
|
|
60
|
+
components never render. Import each component you use instead:
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
import '@dubai-design-system/components-js/dist/components/dda-header.js';
|
|
64
|
+
import '@dubai-design-system/components-js/dist/components/dda-button.js';
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The CDN loader and the React wrapper are not affected.
|
|
68
|
+
|
|
69
|
+
- [ ] **If you self-host `dda.css`,** copy `dist/assets/fonts/` next to it and keep the
|
|
70
|
+
relative path `../assets/fonts/dubai/`, or the Dubai typeface does not load.
|
|
71
|
+
- [ ] **Clear any cached copy of the old package** (CDN edge cache, service worker, build
|
|
72
|
+
cache) and load every page type once: home page, a content page, a form, and a page on a
|
|
73
|
+
phone-width screen.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 3. From 5.0.x to 5.1.0
|
|
78
|
+
|
|
79
|
+
### Triage: run these first
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# header: the old fixed search id is gone
|
|
83
|
+
grep -rn "ddaSearch" src/
|
|
84
|
+
|
|
85
|
+
# header: pages that relied on the automatic transparent style at "/"
|
|
86
|
+
grep -rln "<dda-header" src/
|
|
87
|
+
|
|
88
|
+
# vertical stepper: the prop that used to work
|
|
89
|
+
grep -rn "current_-step\|current_Step" src/
|
|
90
|
+
|
|
91
|
+
# components that showed placeholder text you may have relied on
|
|
92
|
+
grep -rn "<dda-toggle\|<dda-footer" src/
|
|
93
|
+
|
|
94
|
+
# manual offsets you may have added around the home-page quick links
|
|
95
|
+
grep -rn "quick-links-wrap" src/
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Changes that need action
|
|
99
|
+
|
|
100
|
+
**`dda-header` no longer turns transparent by itself at `/`.** **Silent.**
|
|
101
|
+
Before 5.1.0 the header added a `transparent` class to itself on the site root. That made the
|
|
102
|
+
menu links white while the header stayed white, so the top menu was invisible on every home
|
|
103
|
+
page. The header now never guesses from the URL.
|
|
104
|
+
|
|
105
|
+
- To keep a transparent header over a dark hero image, add the class to an ancestor:
|
|
106
|
+
|
|
107
|
+
```html
|
|
108
|
+
<body class="transparent">
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
- The header now renders both logos and CSS shows the right one. If you set only
|
|
112
|
+
`first-logo-src`, it is also used on the transparent header; set `first-logo-white-src`
|
|
113
|
+
(and `second-logo-white-src`) for a white version.
|
|
114
|
+
|
|
115
|
+
**`dda-header` search is now a real search.** **Silent** if you scripted the old field.
|
|
116
|
+
The old field was not in a form and did nothing. It is now a `<form role="search">`:
|
|
117
|
+
|
|
118
|
+
- `id="ddaSearch"` is gone. Every header gets its own ids, so two headers on a page no
|
|
119
|
+
longer clash. Replace `document.getElementById('ddaSearch')` with the new event.
|
|
120
|
+
- Pressing Enter emits a cancelable `searchSubmit` event with `detail.query`.
|
|
121
|
+
- Set `search_action` to a results page and the browser goes there with the query, no
|
|
122
|
+
JavaScript needed. The parameter name is `search_input_name`, default `q`.
|
|
123
|
+
- On phone-width screens the search button now opens a search field under the header.
|
|
124
|
+
|
|
125
|
+
```html
|
|
126
|
+
<!-- static site: results page reads ?q= -->
|
|
127
|
+
<dda-header search_action="/search.html"></dda-header>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```js
|
|
131
|
+
// app with its own router
|
|
132
|
+
header.addEventListener('searchSubmit', (event) => {
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
router.push(`/search?q=${encodeURIComponent(event.detail.query)}`);
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
In React the event is `onSearchSubmit`.
|
|
139
|
+
|
|
140
|
+
**`dda-toggle` shows no label unless you set one.**
|
|
141
|
+
It used to show the fixed text "Radio Button Title" and "Supporting Text". Set the new props:
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
<dda-toggle input_id="news" title_text="Newsletter" supporting="One email a month"></dda-toggle>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Keep `aria_label` when there is no visible label.
|
|
148
|
+
|
|
149
|
+
**`dda-footer` shows no text under the logo unless you set it.**
|
|
150
|
+
It used to show the fixed sentence "Design outstanding interfaces with advanced Figma
|
|
151
|
+
features in a matter of minutes." Set `logo-description` (`logoDescription` in JavaScript and
|
|
152
|
+
the wrappers) to show your own text.
|
|
153
|
+
|
|
154
|
+
**`dda-vertical-stepper` reads `current_step`.**
|
|
155
|
+
The old prop was `current_Step`, and its HTML attribute was `current_-step`, so the documented
|
|
156
|
+
`current_step` attribute did nothing. `current_step` now works. It counts from 0: `1` is the
|
|
157
|
+
second step. `current_Step` and `current_-step` still work but are deprecated; move to
|
|
158
|
+
`current_step`.
|
|
159
|
+
|
|
160
|
+
**Side-menu links below the first level now navigate.**
|
|
161
|
+
Before 5.1.0 every nested `side-menu-items` link cancelled its click. Links without a
|
|
162
|
+
`subMenu` now go to their `href`. Check that nested items have real URLs; `"#"` now jumps to
|
|
163
|
+
the top of the page.
|
|
164
|
+
|
|
165
|
+
**Accessibility fixes that change markup.** **Silent** if your CSS or scripts target the old markup.
|
|
166
|
+
|
|
167
|
+
- `dda-sticky-footer` renders `<aside aria-label="Quick actions">`, not `<footer>`. Replace
|
|
168
|
+
selectors such as `dda-sticky-footer footer` with `dda-sticky-footer .dda-footer`.
|
|
169
|
+
- `dda-ui-card` renders its title as `h3`, not `h1`. Set `heading_level` (1–6) to match your
|
|
170
|
+
page outline, and target `.dda-card-title`, not `h1`.
|
|
171
|
+
- `dda-header` logo links go to `/` instead of `#`. Set `first-logo-href` and
|
|
172
|
+
`second-logo-href`, especially if your site is served under a subpath, where `/` leaves it. The ReadSpeaker item shows only when `read-speaker-link` is set.
|
|
173
|
+
- `dda-phonefield` renders `type="tel"`, not `type="number"`, and `autocomplete` defaults to
|
|
174
|
+
`tel-national`. Code that read `valueAsNumber` or relied on the number spinner must read the
|
|
175
|
+
string value instead; set `autocomplete="tel"` to keep the old hint.
|
|
176
|
+
- `dda-select` and `dda-dropdown` labels have no `for` attribute any more; the trigger is named
|
|
177
|
+
with `aria-labelledby`. Clicking the label still opens the list. `dda-range-slider` inputs are
|
|
178
|
+
wrapped in `<span>`, not `<label>`.
|
|
179
|
+
- `dda-attach-file` always renders its file input (visually hidden). Selectors that assumed
|
|
180
|
+
the input disappears after a file is chosen must change.
|
|
181
|
+
- Icon-only buttons now have English default names ("Close", "Remove", "Clear search",
|
|
182
|
+
"Previous page", "Next page", "Menu"). On an Arabic page, set the matching `*_label` props.
|
|
183
|
+
|
|
184
|
+
### Changes to check, no code change expected
|
|
185
|
+
|
|
186
|
+
- **Headings are larger.** Before 5.1.0 an undefined token made every heading, `.dda-h1`–`.dda-h6`
|
|
187
|
+
and component title render at body size (16px). Headings now follow the type scale (`h1`
|
|
188
|
+
57px, `h2` 48px, `h3` 40px at a 16px base) and component titles use their own sizes. If a page
|
|
189
|
+
looks too large, set a smaller heading level or class rather than restyling the tokens; to
|
|
190
|
+
change the scale itself, override `--dda-h1`…`--dda-h6`.
|
|
191
|
+
|
|
192
|
+
- **The page no longer scrolls behind the open hamburger menu.** While the menu is open, the
|
|
193
|
+
header adds `dda-scroll-lock` to `<html>`, which sets `overflow: hidden` on `html` and
|
|
194
|
+
`body`. If your own CSS sets `overflow` on `html` or `body`, check the open menu on a phone.
|
|
195
|
+
- **`dda-sticky-footer` sets `--dda-sticky-footer-height` on `:root`,** and the home-page
|
|
196
|
+
`.quick-links-wrap` adds it to its bottom offset, so the cards sit above the fixed bar.
|
|
197
|
+
Remove any offset you added yourself.
|
|
198
|
+
- **`dda-radiobutton` shows its circle without `size`.** It defaults to the `md` size (21px).
|
|
199
|
+
Radios without `size` were invisible before.
|
|
200
|
+
- **`dda-number-field` and `dda-phonefield` fit narrow containers.** The input now shrinks, so
|
|
201
|
+
the currency button stays inside the field.
|
|
202
|
+
- **`dda-horizontal-stepper`** no longer draws a line past its right edge on the last step,
|
|
203
|
+
which widened the page.
|
|
204
|
+
- **`dda-banner`** lays out its slides as a horizontal row that scrolls and snaps, instead of
|
|
205
|
+
stacked images. A missing `slides` attribute no longer throws.
|
|
206
|
+
- **`dda-home-banner`** logs a console warning when it has no `<slide>` children. Only
|
|
207
|
+
`<slide>` elements are shown.
|
|
208
|
+
- **Material icons in `.quick-links .link-item`** get the same size as SVG icons.
|
|
209
|
+
- **Placeholder text is darker** (4.5:1 contrast or better), **links inside paragraphs and table
|
|
210
|
+
cells are underlined**, and **home-banner slides have a dark scrim behind the text.** If you
|
|
211
|
+
restyled any of these, check that your override still meets contrast.
|
|
212
|
+
- **`dda-checkbox` and `dda-toggle` show a focus ring** under keyboard focus, and the
|
|
213
|
+
`dda-banner` slide row is a keyboard tab stop.
|
|
214
|
+
|
|
215
|
+
### New, optional
|
|
216
|
+
|
|
217
|
+
| Component | Addition | Use it to |
|
|
218
|
+
| --- | --- | --- |
|
|
219
|
+
| `dda-header` | `search_action` prop, `searchSubmit` event | Send searches to a results page or your router |
|
|
220
|
+
| `dda-breadcrumb` | `breadcrumbs` prop (array or JSON string) | Set items from JavaScript or a framework; `data-breadcrumbs` still works |
|
|
221
|
+
| `dda-toggle` | `title_text`, `supporting` | Show a visible label |
|
|
222
|
+
| `dda-footer` | `logo-description` | Show text under the footer logo |
|
|
223
|
+
| `dda-vertical-stepper` | `current_step` | Set the active step |
|
|
224
|
+
| `dda-alert`, `dda-footer`, `dda-ui-card` | `heading_level` | Match the heading level to your page |
|
|
225
|
+
| `dda-alert`, `dda-chip`, `dda-search-input`, `dda-pagination`, `dda-dropdown`, `dda-number-field`, `dda-phonefield`, `dda-header` | `*_label` props | Name icon-only buttons, e.g. in Arabic |
|
|
226
|
+
| `dda-segmented-tabs` | `icon_labels` | Name icon-only segments |
|
|
227
|
+
| `dda-header` | `first-logo-href`, `second-logo-href`, `language_lang` | Logo link targets, language of the language button |
|
|
228
|
+
| `dda-banner`, `dda-sticky-footer` | `aria_label` | Name the slide region / quick actions |
|
|
229
|
+
| `dda-pagination` | `pageChange` event | React when the user changes page |
|
|
230
|
+
| `dda-select` | `selectionChange` event | React when the selected value changes |
|
|
231
|
+
| `dda-dropdown`, `dda-avatar` | `optionSelect` event | React to a menu pick |
|
|
232
|
+
| `dda-creditcard-field` | `valueChange` event | Read the value as the user types |
|
|
233
|
+
| `dda-ui-card` | `linkClick` event (now fired) | Track or intercept card link clicks |
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## 4. Notes from 5.0.1: fonts and the stylesheet
|
|
238
|
+
|
|
239
|
+
Read this if you start from 5.0.0 or earlier.
|
|
240
|
+
|
|
241
|
+
- The Dubai typeface is declared only in `dist/dda/dda.css`. A page that loads the components
|
|
242
|
+
but not `dda.css` falls back to a sans-serif font. Load `dda.css`.
|
|
243
|
+
- The font files ship in `dist/assets/fonts/dubai/` as `woff2`, `woff` and `ttf`. The old `eot`
|
|
244
|
+
and `svg` formats are gone; they served only Internet Explorer and very old Safari.
|
|
245
|
+
- The React and Vue wrappers published with 5.0.0 missed some props and events
|
|
246
|
+
(`autocomplete`, `input_id`, `selected_index`, `segmentChange`). 5.0.1 and later have them.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 5. From 4.1.0
|
|
251
|
+
|
|
252
|
+
`4.1.0` was published in February 2025 and was never tagged `latest`; most sites never used it.
|
|
253
|
+
It is a separate build and is not documented component by component. Known differences:
|
|
254
|
+
|
|
255
|
+
- It has no `dda-banner`, `dda-home-banner` or `dda-ui-card`.
|
|
256
|
+
- It publishes no `dist/dda/dda.css`. Add it (see the checklist).
|
|
257
|
+
- Its `dda-header` is an older implementation. Re-check the header on desktop and on a phone.
|
|
258
|
+
|
|
259
|
+
Treat a 4.1.0 site like a 3.x site: follow [From 3.x](#6-from-3x-to-50), then
|
|
260
|
+
[5.0.x to 5.1.0](#3-from-50x-to-510), and check every page visually.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## 6. From 3.x to 5.0
|
|
265
|
+
|
|
266
|
+
**Why there is no 4.x to upgrade through:** `4.1.0` already existed on npm, so the next major
|
|
267
|
+
skipped to 5 to keep `^4` ranges from resolving to that older build.
|
|
268
|
+
|
|
269
|
+
Most consumers need to change nothing here. These changes affect you only if you wrote CSS or
|
|
270
|
+
JavaScript that reaches inside a component's rendered markup, or used one of the fixed ids the
|
|
271
|
+
components used to emit.
|
|
272
|
+
|
|
273
|
+
### Triage
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
# hardcoded ids these components used to emit
|
|
277
|
+
grep -rn "getElementById('search')\|getElementById(\"search\")\|#search\b" src/
|
|
278
|
+
grep -rn "getElementById('editor')\|getElementById(\"editor\")\|#editor\b" src/
|
|
279
|
+
|
|
280
|
+
# reaching into a shadow root that no longer exists
|
|
281
|
+
grep -rn "shadowRoot" src/ | grep -i "footer"
|
|
282
|
+
grep -rn "::part(" src/
|
|
283
|
+
|
|
284
|
+
# selectors keyed on an element type that changed
|
|
285
|
+
grep -rn "div\.accordion-header\|span\.chip-close\|div\.dots" src/
|
|
286
|
+
grep -rn "\.dda-avatar\s*>\|\.dda-avatar >" src/
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Then load a page in dark theme and look at the footers. If they looked unstyled before, they
|
|
290
|
+
are now fully styled; that is the intended fix.
|
|
291
|
+
|
|
292
|
+
### Breaking changes
|
|
293
|
+
|
|
294
|
+
#### `dda-footer` and `dda-sticky-footer` no longer use shadow DOM
|
|
295
|
+
|
|
296
|
+
They rendered as **unstyled raw HTML** in 3.x: their shadow stylesheet was empty and global
|
|
297
|
+
CSS could not reach inside. They now render fully styled.
|
|
298
|
+
|
|
299
|
+
| | 3.x | 5.0 and later |
|
|
300
|
+
|---|---|---|
|
|
301
|
+
| `element.shadowRoot` | a `ShadowRoot` | `null` |
|
|
302
|
+
| `::part(...)` | targetable | nothing to target |
|
|
303
|
+
| Appearance | unstyled | fully styled |
|
|
304
|
+
|
|
305
|
+
**Migrate:** delete any `shadowRoot` traversal or `::part()` rules for these two and style them
|
|
306
|
+
with ordinary selectors. **Re-check your footer layout visually**; this is a total visual
|
|
307
|
+
change.
|
|
308
|
+
|
|
309
|
+
#### Hardcoded ids removed: `#search` and `#editor` — **Silent**
|
|
310
|
+
|
|
311
|
+
`dda-search-input` emitted `id="search"` and `dda-textarea` emitted `id="editor"` on every
|
|
312
|
+
instance, which gave duplicate ids as soon as a page used two.
|
|
313
|
+
|
|
314
|
+
```html
|
|
315
|
+
<!-- 3.x: the id was implicit -->
|
|
316
|
+
<dda-search-input label="Find"></dda-search-input>
|
|
317
|
+
<script>document.getElementById('search').focus()</script>
|
|
318
|
+
|
|
319
|
+
<!-- 5.0 and later: you supply the id -->
|
|
320
|
+
<dda-search-input label="Find" input_id="site-search"></dda-search-input>
|
|
321
|
+
<script>document.getElementById('site-search').focus()</script>
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**Migrate:** set `input_id` (both components) to the id your code expects.
|
|
325
|
+
`getElementById` just returns `null`, so search for these rather than waiting for an error.
|
|
326
|
+
|
|
327
|
+
#### `dda-search-input`'s label now points at the input
|
|
328
|
+
|
|
329
|
+
In 3.x the visible `<label for>` targeted the clear button. It now targets the text field.
|
|
330
|
+
**Migrate:** set `input_id`; without it the label has nothing to point at.
|
|
331
|
+
|
|
332
|
+
#### `dda-avatar` wraps its content in `.avatar-trigger`
|
|
333
|
+
|
|
334
|
+
```html
|
|
335
|
+
<!-- 3.x -->
|
|
336
|
+
<dda-avatar><div class="dda-avatar"><img …></div></dda-avatar>
|
|
337
|
+
|
|
338
|
+
<!-- 5.0 and later: a wrapper always sits between -->
|
|
339
|
+
<dda-avatar><div class="dda-avatar">
|
|
340
|
+
<button class="avatar-trigger"><img …></button> <!-- when `options` is set -->
|
|
341
|
+
<div class="avatar-trigger"><img …></div> <!-- when it is not -->
|
|
342
|
+
</div></dda-avatar>
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Migrate:** replace direct-child selectors (`.dda-avatar > img`) with descendant selectors
|
|
346
|
+
(`.dda-avatar img`).
|
|
347
|
+
|
|
348
|
+
#### Element types changed on three controls
|
|
349
|
+
|
|
350
|
+
These were `div`/`span` elements with a click handler and no keyboard access.
|
|
351
|
+
|
|
352
|
+
| Component | 3.x | 5.0 and later | Class |
|
|
353
|
+
|---|---|---|---|
|
|
354
|
+
| `dda-accordion` | `div.accordion-header` | `button.accordion-header` | unchanged |
|
|
355
|
+
| `dda-chip` | `span.chip-close` | `button.chip-close` | unchanged |
|
|
356
|
+
| `dda-home-banner` | `div.dots` (direct `ul` child) | `li > button.dots` | unchanged |
|
|
357
|
+
|
|
358
|
+
**Migrate:** drop the element type from your selectors (`.accordion-header`, not
|
|
359
|
+
`div.accordion-header`). For the banner dots, also drop any direct-child combinator: there is
|
|
360
|
+
now an `<li>` in between.
|
|
361
|
+
|
|
362
|
+
### Behaviour changes to check
|
|
363
|
+
|
|
364
|
+
- **`dda-header` sets `scroll-padding-top` on `:root`** (170px; 100px below 767px), so keyboard
|
|
365
|
+
focus cannot land behind the fixed header. Every anchor jump and `scrollIntoView()` on the
|
|
366
|
+
page is offset. Remove any manual compensation or you will double-offset.
|
|
367
|
+
- **`dda-home-banner` writes `inert` and `aria-hidden` onto your `<slide>` elements.** Slides
|
|
368
|
+
that are not showing cannot be focused or clicked. It also became a working carousel, with
|
|
369
|
+
autoplay, previous/next/pause controls and a live region.
|
|
370
|
+
- **`dda-segmented-tabs` selects its first segment on load.** In 3.x it had no interactivity.
|
|
371
|
+
- **`dda-sticky-footer` marks itself `inert` while scroll-hidden.**
|
|
372
|
+
- **`dda-tabs`:** `aria_label` names the tab group; each tab is named by its own text.
|
|
373
|
+
- **`dda-pagination`:** dot spacing 8px → 15px, so the control is wider.
|
|
374
|
+
- **`dda-tooltip`:** `Escape` dismisses an open tooltip.
|
|
375
|
+
- **Dark theme:** `--dda-primary-variant-95` and `--dda-color-warning-40` changed value. Info
|
|
376
|
+
alerts get a deeper fill; warning alerts a brighter amber.
|
|
377
|
+
- **Muted and disabled text is darker in light theme,** for readable contrast. Disabled
|
|
378
|
+
controls look more present than before; that is deliberate.
|
|
379
|
+
- **`dda-header`'s accessibility icon** changed from `accessible_forward` to `accessibility`.
|
|
380
|
+
|
|
381
|
+
### New props from 5.0
|
|
382
|
+
|
|
383
|
+
| Component | Prop | Why |
|
|
384
|
+
|---|---|---|
|
|
385
|
+
| `dda-search-input`, `dda-textarea` | `input_id` | Restores a removed hardcoded id |
|
|
386
|
+
| `dda-creditcard-field`, `dda-phonefield` | `autocomplete` | Browser autofill |
|
|
387
|
+
| `dda-progressbar` | `aria_label` | Names the progress bar for screen readers |
|
|
388
|
+
| `dda-home-banner` | `autoplay`, `interval`, label props | The carousel is real now |
|
|
389
|
+
| `dda-segmented-tabs` | `selected_index` | Choose the initially selected segment |
|
|
390
|
+
|
|
391
|
+
### `dda.css` if you used `@latest` on the CDN
|
|
392
|
+
|
|
393
|
+
`dist/dda/dda.css` was **missing from 3.12.16**, and the CDN served a stale cached copy from an
|
|
394
|
+
older release. 5.0.0 and later ship the file again, as a superset of that copy: every class in
|
|
395
|
+
it is still present. Those legacy rules are kept for compatibility and will be removed only in
|
|
396
|
+
a future major release, with notice.
|
|
397
|
+
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## 7. CDN users
|
|
401
|
+
|
|
402
|
+
jsDelivr syncs from npm automatically. Always use an **exact version**: replace `X.X.X` with
|
|
403
|
+
the version you are upgrading to.
|
|
404
|
+
|
|
405
|
+
```html
|
|
406
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@dubai-design-system/components-js@X.X.X/dist/dda/dda.css" />
|
|
407
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
|
|
408
|
+
<script type="module">
|
|
409
|
+
import { defineCustomElements } from 'https://cdn.jsdelivr.net/npm/@dubai-design-system/components-js@X.X.X/loader/index.es2017.js';
|
|
410
|
+
defineCustomElements();
|
|
411
|
+
</script>
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
Do **not** use `@latest` or leave the version out. jsDelivr caches version aliases, and an
|
|
415
|
+
unversioned loader URL loads chunks from mixed versions, which stops components rendering.
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## If something breaks that is not listed here
|
|
420
|
+
|
|
421
|
+
Note the component, the version you came from, the browser, and what you expected to see, and
|
|
422
|
+
report it to the Dubai Design System team. An undocumented change is a gap in this guide, not
|
|
423
|
+
your mistake.
|