@dubai-design-system/components-js 5.3.1 → 5.3.3

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.
Files changed (256) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/MIGRATION.md +3 -3
  3. package/dist/cjs/dda-accordion.cjs.entry.js +3 -3
  4. package/dist/cjs/dda-alert.cjs.entry.js +3 -3
  5. package/dist/cjs/dda-attach-file.cjs.entry.js +4 -4
  6. package/dist/cjs/dda-avatar.cjs.entry.js +10 -8
  7. package/dist/cjs/dda-banner-card.cjs.entry.js +5 -5
  8. package/dist/cjs/dda-banner.cjs.entry.js +3 -3
  9. package/dist/cjs/dda-breadcrumb.cjs.entry.js +3 -3
  10. package/dist/cjs/dda-button.cjs.entry.js +3 -3
  11. package/dist/cjs/dda-checkbox.cjs.entry.js +3 -3
  12. package/dist/cjs/dda-chip.cjs.entry.js +3 -3
  13. package/dist/cjs/dda-credit-card.cjs.entry.js +3 -3
  14. package/dist/cjs/dda-creditcard-field.cjs.entry.js +4 -4
  15. package/dist/cjs/dda-dropdown.cjs.entry.js +4 -4
  16. package/dist/cjs/dda-footer.cjs.entry.js +3 -3
  17. package/dist/cjs/dda-header.cjs.entry.js +39 -6
  18. package/dist/cjs/dda-home-banner.cjs.entry.js +9 -8
  19. package/dist/cjs/dda-home-carousel.cjs.entry.js +2 -2
  20. package/dist/cjs/dda-horizontal-stepper.cjs.entry.js +3 -3
  21. package/dist/cjs/dda-input.cjs.entry.js +4 -4
  22. package/dist/cjs/dda-link-button_2.cjs.entry.js +6 -6
  23. package/dist/cjs/dda-number-field.cjs.entry.js +4 -4
  24. package/dist/cjs/dda-pagination.cjs.entry.js +3 -3
  25. package/dist/cjs/dda-phonefield.cjs.entry.js +4 -4
  26. package/dist/cjs/dda-progressbar.cjs.entry.js +3 -3
  27. package/dist/cjs/dda-range-slider.cjs.entry.js +3 -3
  28. package/dist/cjs/dda-scroll-icon.cjs.entry.js +2 -2
  29. package/dist/cjs/dda-search-input.cjs.entry.js +4 -4
  30. package/dist/cjs/dda-segmented-tabs.cjs.entry.js +3 -3
  31. package/dist/cjs/dda-select.cjs.entry.js +13 -5
  32. package/dist/cjs/dda-sticky-footer.cjs.entry.js +2 -2
  33. package/dist/cjs/dda-tabs.cjs.entry.js +4 -4
  34. package/dist/cjs/dda-textarea.cjs.entry.js +36 -5
  35. package/dist/cjs/dda-toggle.cjs.entry.js +3 -3
  36. package/dist/cjs/dda-tooltip.cjs.entry.js +3 -3
  37. package/dist/cjs/dda-ui-card.cjs.entry.js +2 -2
  38. package/dist/cjs/dda-vertical-stepper.cjs.entry.js +2 -2
  39. package/dist/cjs/dda.cjs.js +2 -2
  40. package/dist/cjs/{index-CM4T__Je.js → index-BlhGwU0o.js} +1 -1
  41. package/dist/cjs/loader.cjs.js +2 -2
  42. package/dist/collection/collection-manifest.json +1 -1
  43. package/dist/collection/components/dda-accordion/dda-accordion.js +1 -1
  44. package/dist/collection/components/dda-alert/dda-alert.js +1 -1
  45. package/dist/collection/components/dda-attach-file/dda-attach-file.js +1 -1
  46. package/dist/collection/components/dda-avatar/dda-avatar.js +27 -5
  47. package/dist/collection/components/dda-avatar/dda-avatar.stories.js +3 -1
  48. package/dist/collection/components/dda-banner/dda-banner.js +1 -1
  49. package/dist/collection/components/dda-banner-card/dda-banner-card.js +3 -3
  50. package/dist/collection/components/dda-breadcrumb/dda-breadcrumb.js +2 -2
  51. package/dist/collection/components/dda-button/dda-button.js +1 -1
  52. package/dist/collection/components/dda-checkbox/dda-checkbox.js +1 -1
  53. package/dist/collection/components/dda-chip/dda-chip.js +1 -1
  54. package/dist/collection/components/dda-credit-card/dda-credit-card.js +1 -1
  55. package/dist/collection/components/dda-creditcard-field/dda-creditcard-field.js +1 -1
  56. package/dist/collection/components/dda-dropdown/dda-dropdown.js +1 -1
  57. package/dist/collection/components/dda-footer/dda-footer.js +1 -1
  58. package/dist/collection/components/dda-header/dda-header.js +39 -6
  59. package/dist/collection/components/dda-header/dda-header.stories.js +5 -0
  60. package/dist/collection/components/dda-home-banner/dda-home-banner.js +6 -5
  61. package/dist/collection/components/dda-home-banner/dda-home-banner.stories.js +6 -6
  62. package/dist/collection/components/dda-home-banner/home-banner.css +2 -1
  63. package/dist/collection/components/dda-home-carousel/dda-home-carousel.js +2 -2
  64. package/dist/collection/components/dda-input/dda-input.js +1 -1
  65. package/dist/collection/components/dda-link-button/dda-link-button.js +2 -2
  66. package/dist/collection/components/dda-number-field/dda-number-field.js +1 -1
  67. package/dist/collection/components/dda-pagination/dda-pagination.js +1 -1
  68. package/dist/collection/components/dda-phonefield/dda-phonefield.js +1 -1
  69. package/dist/collection/components/dda-progressbar/dda-progressbar.js +1 -1
  70. package/dist/collection/components/dda-radiobutton/dda-radiobutton.css +29 -6
  71. package/dist/collection/components/dda-radiobutton/dda-radiobutton.js +1 -1
  72. package/dist/collection/components/dda-range-slider/dda-range-slider.js +2 -2
  73. package/dist/collection/components/dda-scroll-icon/dda-scroll-icon.js +1 -1
  74. package/dist/collection/components/dda-search-input/dda-search-input.js +1 -1
  75. package/dist/collection/components/dda-select/dda-select.js +12 -4
  76. package/dist/collection/components/dda-sticky-footer/dda-sticky-footer.js +2 -2
  77. package/dist/collection/components/dda-tabs/dda-tabs.css +2 -1
  78. package/dist/collection/components/dda-tabs/dda-tabs.js +1 -1
  79. package/dist/collection/components/dda-textarea/dda-textarea.js +66 -2
  80. package/dist/collection/components/dda-toggle/dda-toggle.js +1 -1
  81. package/dist/collection/components/dda-tooltip/dda-tooltip.js +1 -1
  82. package/dist/collection/components/dda-ui-card/dda-ui-card.js +1 -1
  83. package/dist/collection/components/segmented-groups/dda-segmented-tabs/dda-segmented-tabs.js +1 -1
  84. package/dist/collection/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.js +1 -1
  85. package/dist/collection/components/stepper/dda-vertical-stepper/dda-vertical-stepper.js +1 -1
  86. package/dist/collection/global/global.css +29 -6
  87. package/dist/collection/global/input.css +6 -1
  88. package/dist/components/dda-accordion.js +1 -1
  89. package/dist/components/dda-alert.js +1 -1
  90. package/dist/components/dda-attach-file.js +1 -1
  91. package/dist/components/dda-avatar.js +1 -1
  92. package/dist/components/dda-banner-card.js +1 -1
  93. package/dist/components/dda-banner.js +1 -1
  94. package/dist/components/dda-breadcrumb.js +1 -1
  95. package/dist/components/dda-button.js +1 -1
  96. package/dist/components/dda-checkbox.js +1 -1
  97. package/dist/components/dda-chip.js +1 -1
  98. package/dist/components/dda-credit-card.js +1 -1
  99. package/dist/components/dda-creditcard-field.js +1 -1
  100. package/dist/components/dda-dropdown.js +1 -1
  101. package/dist/components/dda-footer.js +1 -1
  102. package/dist/components/dda-header.js +1 -1
  103. package/dist/components/dda-home-banner.js +1 -1
  104. package/dist/components/dda-home-carousel.js +1 -1
  105. package/dist/components/dda-horizontal-stepper.js +1 -1
  106. package/dist/components/dda-input.js +1 -1
  107. package/dist/components/dda-link-button.js +1 -1
  108. package/dist/components/dda-number-field.js +1 -1
  109. package/dist/components/dda-pagination.js +1 -1
  110. package/dist/components/dda-phonefield.js +1 -1
  111. package/dist/components/dda-progressbar.js +1 -1
  112. package/dist/components/dda-radiobutton.js +1 -1
  113. package/dist/components/dda-range-slider.js +1 -1
  114. package/dist/components/dda-scroll-icon.js +1 -1
  115. package/dist/components/dda-search-input.js +1 -1
  116. package/dist/components/dda-segmented-tabs.js +1 -1
  117. package/dist/components/dda-select.js +1 -1
  118. package/dist/components/dda-sticky-footer.js +1 -1
  119. package/dist/components/dda-tabs.js +1 -1
  120. package/dist/components/dda-textarea.js +1 -1
  121. package/dist/components/dda-toggle.js +1 -1
  122. package/dist/components/dda-tooltip.js +1 -1
  123. package/dist/components/dda-ui-card.js +1 -1
  124. package/dist/components/dda-vertical-stepper.js +1 -1
  125. package/dist/components/index.js +1 -1
  126. package/dist/components/p-BM-NtzGK.js +1 -0
  127. package/dist/components/p-BhAtUJVx.js +1 -0
  128. package/dist/components/p-CBtZEcfY.js +1 -0
  129. package/dist/components/p-CkupecIb.js +1 -0
  130. package/dist/components/p-SfNNpPT-.js +1 -0
  131. package/dist/components/p-XBdFBA19.js +1 -0
  132. package/dist/components/{p-kJRBkcMn.js → p-kuyZN3IZ.js} +1 -1
  133. package/dist/dda/dda.css +1 -1
  134. package/dist/dda/dda.esm.js +1 -1
  135. package/dist/dda/p-09d3353c.entry.js +1 -0
  136. package/dist/dda/p-1daf1357.entry.js +1 -0
  137. package/dist/dda/p-212be657.entry.js +1 -0
  138. package/dist/dda/p-3f733084.entry.js +1 -0
  139. package/dist/dda/p-461ffb10.entry.js +1 -0
  140. package/dist/dda/{p-074f8dab.entry.js → p-4b6a42ff.entry.js} +1 -1
  141. package/dist/dda/p-4e559f7a.entry.js +1 -0
  142. package/dist/dda/p-501b35eb.entry.js +1 -0
  143. package/dist/dda/p-53961822.entry.js +1 -0
  144. package/dist/dda/p-572b8e92.entry.js +1 -0
  145. package/dist/dda/p-573a117b.entry.js +1 -0
  146. package/dist/dda/p-59d452b2.entry.js +1 -0
  147. package/dist/dda/p-59d9d69d.entry.js +1 -0
  148. package/dist/dda/p-5c7833fd.entry.js +1 -0
  149. package/dist/dda/p-5d0a01b3.entry.js +1 -0
  150. package/dist/dda/p-62337c56.entry.js +1 -0
  151. package/dist/dda/{p-6b358fa8.entry.js → p-71e168f6.entry.js} +1 -1
  152. package/dist/dda/p-7276ccc3.entry.js +1 -0
  153. package/dist/dda/p-774ef2ce.entry.js +1 -0
  154. package/dist/dda/p-7fecb78c.entry.js +1 -0
  155. package/dist/dda/p-86a47071.entry.js +1 -0
  156. package/dist/dda/p-8879cddb.entry.js +1 -0
  157. package/dist/dda/p-894615d0.entry.js +1 -0
  158. package/dist/dda/p-89720ada.entry.js +1 -0
  159. package/dist/dda/p-8dcdba6e.entry.js +1 -0
  160. package/dist/dda/p-8e36ff4a.entry.js +1 -0
  161. package/dist/dda/p-94aaf1e5.entry.js +1 -0
  162. package/dist/dda/p-9f92c756.entry.js +1 -0
  163. package/dist/dda/p-affd6ed9.entry.js +1 -0
  164. package/dist/dda/{p-c7a4e410.entry.js → p-d40e9d17.entry.js} +1 -1
  165. package/dist/dda/p-dc582e94.entry.js +1 -0
  166. package/dist/dda/p-e0fd3288.entry.js +1 -0
  167. package/dist/dda/p-e73c86ed.entry.js +1 -0
  168. package/dist/dda/p-eb85a1d2.entry.js +1 -0
  169. package/dist/dda/p-ec57abee.entry.js +1 -0
  170. package/dist/dda/p-f36bf43a.entry.js +1 -0
  171. package/dist/dda/p-qLKOVFws.js +2 -0
  172. package/dist/esm/dda-accordion.entry.js +3 -3
  173. package/dist/esm/dda-alert.entry.js +3 -3
  174. package/dist/esm/dda-attach-file.entry.js +4 -4
  175. package/dist/esm/dda-avatar.entry.js +10 -8
  176. package/dist/esm/dda-banner-card.entry.js +5 -5
  177. package/dist/esm/dda-banner.entry.js +3 -3
  178. package/dist/esm/dda-breadcrumb.entry.js +3 -3
  179. package/dist/esm/dda-button.entry.js +3 -3
  180. package/dist/esm/dda-checkbox.entry.js +3 -3
  181. package/dist/esm/dda-chip.entry.js +3 -3
  182. package/dist/esm/dda-credit-card.entry.js +3 -3
  183. package/dist/esm/dda-creditcard-field.entry.js +4 -4
  184. package/dist/esm/dda-dropdown.entry.js +4 -4
  185. package/dist/esm/dda-footer.entry.js +3 -3
  186. package/dist/esm/dda-header.entry.js +39 -6
  187. package/dist/esm/dda-home-banner.entry.js +9 -8
  188. package/dist/esm/dda-home-carousel.entry.js +2 -2
  189. package/dist/esm/dda-horizontal-stepper.entry.js +3 -3
  190. package/dist/esm/dda-input.entry.js +4 -4
  191. package/dist/esm/dda-link-button_2.entry.js +6 -6
  192. package/dist/esm/dda-number-field.entry.js +4 -4
  193. package/dist/esm/dda-pagination.entry.js +3 -3
  194. package/dist/esm/dda-phonefield.entry.js +4 -4
  195. package/dist/esm/dda-progressbar.entry.js +3 -3
  196. package/dist/esm/dda-range-slider.entry.js +3 -3
  197. package/dist/esm/dda-scroll-icon.entry.js +2 -2
  198. package/dist/esm/dda-search-input.entry.js +4 -4
  199. package/dist/esm/dda-segmented-tabs.entry.js +3 -3
  200. package/dist/esm/dda-select.entry.js +13 -5
  201. package/dist/esm/dda-sticky-footer.entry.js +2 -2
  202. package/dist/esm/dda-tabs.entry.js +4 -4
  203. package/dist/esm/dda-textarea.entry.js +36 -5
  204. package/dist/esm/dda-toggle.entry.js +3 -3
  205. package/dist/esm/dda-tooltip.entry.js +3 -3
  206. package/dist/esm/dda-ui-card.entry.js +2 -2
  207. package/dist/esm/dda-vertical-stepper.entry.js +2 -2
  208. package/dist/esm/dda.js +3 -3
  209. package/dist/esm/{index-BJOt1fv7.js → index-qLKOVFws.js} +1 -1
  210. package/dist/esm/loader.js +3 -3
  211. package/dist/types/components/dda-avatar/dda-avatar.d.ts +2 -0
  212. package/dist/types/components/dda-avatar/dda-avatar.stories.d.ts +4 -0
  213. package/dist/types/components/dda-header/dda-header.d.ts +3 -0
  214. package/dist/types/components/dda-textarea/dda-textarea.d.ts +4 -0
  215. package/dist/types/components.d.ts +22 -0
  216. package/package.json +1 -1
  217. package/dist/components/p-BUv5-HOm.js +0 -1
  218. package/dist/components/p-BvEnF2US.js +0 -1
  219. package/dist/components/p-C8EPNbJC.js +0 -1
  220. package/dist/components/p-CS5LPB9B.js +0 -1
  221. package/dist/components/p-CedhFs0i.js +0 -1
  222. package/dist/components/p-DHgv6zQy.js +0 -1
  223. package/dist/dda/p-1a0d490e.entry.js +0 -1
  224. package/dist/dda/p-1c42a19b.entry.js +0 -1
  225. package/dist/dda/p-1eb0af5a.entry.js +0 -1
  226. package/dist/dda/p-215629d6.entry.js +0 -1
  227. package/dist/dda/p-221613e8.entry.js +0 -1
  228. package/dist/dda/p-284bc873.entry.js +0 -1
  229. package/dist/dda/p-2f99af01.entry.js +0 -1
  230. package/dist/dda/p-3003acb0.entry.js +0 -1
  231. package/dist/dda/p-5b314403.entry.js +0 -1
  232. package/dist/dda/p-5b669c2f.entry.js +0 -1
  233. package/dist/dda/p-5fe5c488.entry.js +0 -1
  234. package/dist/dda/p-6577d6b5.entry.js +0 -1
  235. package/dist/dda/p-6e6ce5c8.entry.js +0 -1
  236. package/dist/dda/p-70a20025.entry.js +0 -1
  237. package/dist/dda/p-78ff5172.entry.js +0 -1
  238. package/dist/dda/p-7afdde8a.entry.js +0 -1
  239. package/dist/dda/p-7ba8071a.entry.js +0 -1
  240. package/dist/dda/p-7d20f926.entry.js +0 -1
  241. package/dist/dda/p-806de72d.entry.js +0 -1
  242. package/dist/dda/p-922d33f8.entry.js +0 -1
  243. package/dist/dda/p-9a9e372d.entry.js +0 -1
  244. package/dist/dda/p-9c3b7bf8.entry.js +0 -1
  245. package/dist/dda/p-BJOt1fv7.js +0 -2
  246. package/dist/dda/p-a19303b5.entry.js +0 -1
  247. package/dist/dda/p-c9e411cb.entry.js +0 -1
  248. package/dist/dda/p-cd1d47cb.entry.js +0 -1
  249. package/dist/dda/p-cfdbbd1a.entry.js +0 -1
  250. package/dist/dda/p-d114dea3.entry.js +0 -1
  251. package/dist/dda/p-db565a30.entry.js +0 -1
  252. package/dist/dda/p-e6043272.entry.js +0 -1
  253. package/dist/dda/p-ef52ec1e.entry.js +0 -1
  254. package/dist/dda/p-f2c9d77a.entry.js +0 -1
  255. package/dist/dda/p-faccb313.entry.js +0 -1
  256. package/dist/dda/p-fdf0dce8.entry.js +0 -1
@@ -44,7 +44,7 @@ export class DdaTabs {
44
44
  }
45
45
  }
46
46
  render() {
47
- return (h(Host, { key: 'cd618ae51b42c4b3537c9d79f9d0722c6fedcdf3' }, h("div", { key: '6c5ce0c1e8742ad322d845da606224b0caa9286c', role: "group", "aria-label": this.aria_label, class: `dda-tabs-container ${this.hover_style} ${this.custom_class} ${this.component_mode}` }, this.parsedTabs.map((title, index) => (h("button", { id: this.button_id, name: this.button_name, type: "button", "aria-pressed": this.active_tab === index ? 'true' : 'false', class: `dda-tab-item ${this.active_tab === index ? 'active' : ''}`, onClick: () => this.setActiveTab(index) }, this.type === 'text-icon' && h("i", { class: `material-icons`, "aria-hidden": "true" }, this.parsedIcons[index] || ""), h("span", null, title)))))));
47
+ return (h(Host, { key: '30474ea86c4c1c8fff84f5c09606e1c8a5b88a84' }, h("div", { key: '47bee1548f4f93e7b09b7cb8f28e61d5ddf91f50', role: "group", "aria-label": this.aria_label, class: `dda-tabs-container ${this.hover_style} ${this.custom_class} ${this.component_mode}` }, this.parsedTabs.map((title, index) => (h("button", { id: this.button_id, name: this.button_name, type: "button", "aria-pressed": this.active_tab === index ? 'true' : 'false', class: `dda-tab-item ${this.active_tab === index ? 'active' : ''}`, onClick: () => this.setActiveTab(index) }, this.type === 'text-icon' && h("i", { class: `material-icons`, "aria-hidden": "true" }, this.parsedIcons[index] || ""), h("span", null, title)))))));
48
48
  }
49
49
  static get is() { return "dda-tabs"; }
50
50
  static get originalStyleUrls() {
@@ -2,6 +2,14 @@ import { h, Host } from "@stencil/core";
2
2
  import Quill from "quill";
3
3
  import "quill/dist/quill.snow.css";
4
4
  import { uniqueId } from "../../utils/unique-id";
5
+ // English names of the rich editor's toolbar dropdowns; toolbar_labels overrides them.
6
+ const DEFAULT_PICKER_LABELS = {
7
+ header: 'Heading',
8
+ color: 'Text colour',
9
+ background: 'Highlight colour',
10
+ font: 'Font',
11
+ align: 'Alignment',
12
+ };
5
13
  export class DdaTextarea {
6
14
  constructor() {
7
15
  /** Value of the textarea. Updates as the user types; in rich text mode it holds the editor HTML. */
@@ -68,6 +76,27 @@ export class DdaTextarea {
68
76
  editorEl.removeAttribute('aria-invalid');
69
77
  }
70
78
  }
79
+ // Quill names its toolbar buttons but not its dropdowns ("pickers"): each picker's label is a
80
+ // <span role="button"> with no text, so screen readers announce an unnamed button (axe
81
+ // aria-command-name). Name each one from toolbar_labels, falling back to English.
82
+ labelToolbarPickers() {
83
+ let custom = {};
84
+ if (typeof this.toolbar_labels === 'string') {
85
+ try {
86
+ custom = JSON.parse(this.toolbar_labels);
87
+ }
88
+ catch (_a) {
89
+ custom = {};
90
+ }
91
+ }
92
+ else if (this.toolbar_labels) {
93
+ custom = this.toolbar_labels;
94
+ }
95
+ for (const picker of Object.keys(DEFAULT_PICKER_LABELS)) {
96
+ const label = this.el.querySelector(`.ql-toolbar .ql-picker.ql-${picker} .ql-picker-label`);
97
+ label === null || label === void 0 ? void 0 : label.setAttribute('aria-label', custom[picker] || DEFAULT_PICKER_LABELS[picker]);
98
+ }
99
+ }
71
100
  componentDidLoad() {
72
101
  if (this.enable_rich_editor) {
73
102
  // F-015: was `#editor` — the id is now the consumer-supplied
@@ -98,11 +127,13 @@ export class DdaTextarea {
98
127
  this.characterCount = this.quill.getText().length - 1; // Update character count
99
128
  });
100
129
  this.syncRichEditorA11y();
130
+ this.labelToolbarPickers();
101
131
  }
102
132
  }
103
133
  componentDidUpdate() {
104
134
  if (this.enable_rich_editor) {
105
135
  this.syncRichEditorA11y();
136
+ this.labelToolbarPickers();
106
137
  }
107
138
  }
108
139
  handleInput(event) {
@@ -119,7 +150,7 @@ export class DdaTextarea {
119
150
  this.custom_class, this.component_mode, this.textarea_name,
120
151
  ].filter(Boolean).join(' ');
121
152
  const id = this.inputId;
122
- return (h(Host, { key: '22ab5c9ede23feedead5b61e2ed4963c1851ecbc' }, h("div", { key: 'cef06c4a45c19a9ae0eefddd2609b9e9e9f1e48c', class: textareaClass }, this.label && h("label", { key: '76fb6bce4a0510aab2a79209f450d201a24ef9a6', id: this.labelId, htmlFor: this.enable_rich_editor ? undefined : id, class: "dda-input-label" }, this.label), this.enable_rich_editor ? (
153
+ return (h(Host, { key: '8f62ec35e00cc27385213d87a20ffb212c3d18a7' }, h("div", { key: '40b7431ed35401f0fd3eed435382c025b7315535', class: textareaClass }, this.label && h("label", { key: '8c24c541942306cca7ba1668ad916ce9d99f3b71', id: this.labelId, htmlFor: this.enable_rich_editor ? undefined : id, class: "dda-input-label" }, this.label), this.enable_rich_editor ? (
123
154
  // F-015: previously a bare `<div id="editor">` — the visible
124
155
  // label's `for` cannot target a non-labelable <div>, and even
125
156
  // aria-labelledby here would be wrong: Quill turns this
@@ -127,7 +158,7 @@ export class DdaTextarea {
127
158
  // as a child `.ql-editor`, which is what AT and Tab actually
128
159
  // land on. The ARIA lives on quill.root (.ql-editor), applied
129
160
  // imperatively in syncRichEditorA11y() after mount.
130
- h("div", { id: id, class: "dda-richeditor-field" })) : (h("textarea", { id: id, name: this.textarea_name, "aria-label": this.aria_label, placeholder: this.placeholder, value: this.value, onInput: (event) => this.handleInput(event), class: "dda-input-field dda-input-textarea", maxLength: this.max_characters, "aria-describedby": this.describedBy, "aria-invalid": this.error_message ? 'true' : undefined })), this.helper_text && (h("div", { key: '382ba6b5dc9755bf262adb033a118c1be6941bd8', id: this.helperId, class: "dda-helper-text" }, h("span", { key: '5d07ab9a7f7698528fc731778bc668c69fa0e5ec', class: "dda-flex dda-align-center dda-gap-2" }, h("i", { key: '33236593cdafdf4ed5694e272f5c4fcf85ca2f68', class: "material-icons material-symbols-outlined", "aria-hidden": "true" }, "info"), " ", this.helper_text), h("span", { key: '2845bd3bface431badd534f44f12faa748c1a718', class: "dda-letter-count" }, this.characterCount, " / ", this.max_characters))), this.error_message && (h("div", { key: 'cc1fabc27cd1bf0f87cfe6e3194c68a0d43ac7f7', id: this.errorId, class: "dda-error-message" }, h("span", { key: '731658aad2027ae1ae107ad58962acb6bbf40eb2', class: "dda-flex dda-align-center dda-gap-2" }, h("i", { key: '80c26defc477ed47439939cbb23875e0373c9598', class: "material-icons material-symbols-outlined", "aria-hidden": "true" }, "info"), " ", this.error_message), h("span", { key: 'e4f4ca076692226881b259322af66f87b18ccc38', class: "dda-letter-count" }, this.characterCount, " / ", this.max_characters))))));
161
+ h("div", { id: id, class: "dda-richeditor-field" })) : (h("textarea", { id: id, name: this.textarea_name, "aria-label": this.aria_label, placeholder: this.placeholder, value: this.value, onInput: (event) => this.handleInput(event), class: "dda-input-field dda-input-textarea", maxLength: this.max_characters, "aria-describedby": this.describedBy, "aria-invalid": this.error_message ? 'true' : undefined })), this.helper_text && (h("div", { key: 'b71d5885604e71af4188d097727c875d7a69ef47', id: this.helperId, class: "dda-helper-text" }, h("span", { key: '497c95108fffd9e12adf08480e8877a9a3cf7ee9', class: "dda-flex dda-align-center dda-gap-2" }, h("i", { key: 'caa536f2039c9c85b922d34a5a2f8ee48beeb9f8', class: "material-icons material-symbols-outlined", "aria-hidden": "true" }, "info"), " ", this.helper_text), h("span", { key: '9bb54ec991d1b38f712974f37741b032056a7a5e', class: "dda-letter-count" }, this.characterCount, " / ", this.max_characters))), this.error_message && (h("div", { key: '24c199bd4481dc7f3061dd1d8f5c78c581be93dc', id: this.errorId, class: "dda-error-message" }, h("span", { key: 'bfa8ef3356a3407130cfb08499c2478b2a70572e', class: "dda-flex dda-align-center dda-gap-2" }, h("i", { key: '1fe75706036a93d63039822dbb8da1d1c659f379', class: "material-icons material-symbols-outlined", "aria-hidden": "true" }, "info"), " ", this.error_message), h("span", { key: '52001e0f2bdd24ac1d61f14b17e6a174e01ace11', class: "dda-letter-count" }, this.characterCount, " / ", this.max_characters))))));
131
162
  }
132
163
  static get is() { return "dda-textarea"; }
133
164
  static get originalStyleUrls() {
@@ -314,6 +345,39 @@ export class DdaTextarea {
314
345
  "reflect": false,
315
346
  "attribute": "enable_rich_editor"
316
347
  },
348
+ "toolbar_labels": {
349
+ "type": "string",
350
+ "mutable": false,
351
+ "complexType": {
352
+ "original": "string | Partial<Record<RichEditorPicker, string>>",
353
+ "resolved": "\"align\" | \"background\" | \"color\" | \"font\" | \"header\" | string",
354
+ "references": {
355
+ "Partial": {
356
+ "location": "global",
357
+ "id": "global::Partial"
358
+ },
359
+ "Record": {
360
+ "location": "global",
361
+ "id": "global::Record"
362
+ },
363
+ "RichEditorPicker": {
364
+ "location": "local",
365
+ "path": "/home/runner/work/dubai-design-system/dubai-design-system/packages/stencil/src/components/dda-textarea/dda-textarea.tsx",
366
+ "id": "src/components/dda-textarea/dda-textarea.tsx::RichEditorPicker"
367
+ }
368
+ }
369
+ },
370
+ "required": false,
371
+ "optional": true,
372
+ "docs": {
373
+ "tags": [],
374
+ "text": "Accessible names of the rich editor's toolbar dropdowns, as a JSON object or an object. Keys: `header`, `color`, `background`, `font`, `align`. A key that is not set keeps its English default."
375
+ },
376
+ "getter": false,
377
+ "setter": false,
378
+ "reflect": false,
379
+ "attribute": "toolbar_labels"
380
+ },
317
381
  "max_characters": {
318
382
  "type": "number",
319
383
  "mutable": false,
@@ -11,7 +11,7 @@ export class DdaToggle {
11
11
  this.custom_class ? `${this.custom_class}` : '',
12
12
  this.component_mode,
13
13
  ].filter(Boolean).join(' ');
14
- return (h(Host, { key: '034a0d08e3c605fe38f0f0b3244e1d5cc7442472' }, h("label", { key: '93539da2d2ccfa1e51d0eebf4cc1b234e1e03606', class: toggleClass, htmlFor: this.input_id }, h("input", { key: '21c0ca32b52ed5cb69da4339f1fce9c26dcaf1fa', "aria-label": this.aria_label, type: "checkbox", id: this.input_id, name: this.group_name, checked: this.checked }), h("span", { key: '8d2def2951a2566625276ba4d350d2407c19af77', class: "toggle" }), (this.title_text || this.supporting) && (h("p", { key: 'e56ce02068c3e3c87f3b7452a81b741560297274' }, this.title_text && h("span", { key: 'faeea2f00ee0c50f0b96b5e24c09da088a98f183', class: "toggle-title" }, this.title_text), this.supporting && h("span", { key: '7999b6126c0fefb6cb09ac67930e311dad18d2b2', class: "toggle-supporting" }, this.supporting))))));
14
+ return (h(Host, { key: 'eac9f5ced9ca4d38f3efc55cbcf11fbf878d367b' }, h("label", { key: 'e384f0ca71eec7527d9134ea64e2dec08a665d09', class: toggleClass, htmlFor: this.input_id }, h("input", { key: 'c1f6818b50b9fac0cff146fedbfa13e5a266d0a3', "aria-label": this.aria_label, type: "checkbox", id: this.input_id, name: this.group_name, checked: this.checked }), h("span", { key: '313f1f6b8ca14d0b9c7b96f41ea483a2505486d9', class: "toggle" }), (this.title_text || this.supporting) && (h("p", { key: '463331817fa6376e309543dc94cf6e9a893a7076' }, this.title_text && h("span", { key: 'c2ba361c9e048d4283e9a59d9da510942c10a2af', class: "toggle-title" }, this.title_text), this.supporting && h("span", { key: 'a0b6512f2a6c1ace0aede3be49dff2579dd09482', class: "toggle-supporting" }, this.supporting))))));
15
15
  }
16
16
  static get is() { return "dda-toggle"; }
17
17
  static get originalStyleUrls() {
@@ -31,7 +31,7 @@ export class DdaTooltip {
31
31
  this.el.removeEventListener('mouseleave', this.resetDismissed);
32
32
  }
33
33
  render() {
34
- return (h(Host, { key: 'e77ebb12700ccbbef52e2d2138e0950d65127778' }, h("div", { key: 'ea64d67136e615b33138a61f1f1a4ba804db5eea', class: `dda-tooltip-container ${this.custom_class} ${this.component_mode} ${this.dismissed ? 'dismissed' : ''}` }, h("slot", { key: 'c191a8ff9be73014c2da7b1a4fdbcce57e94ba4d' }), h("div", { key: 'c6733ebddb99c659db89027384a50ba9c7836341', class: `dda-tooltip-box ${this.position}` }, h("strong", { key: '47c45f8411f5803c4ba59d0b9b4ac5c830b403c7' }, this.title_text), h("p", { key: '4f08ecda01307162262d7c79aa26e795ff03251b' }, this.description)))));
34
+ return (h(Host, { key: 'f5622191d861ba0c36c89f17368fce0f570ef597' }, h("div", { key: '449e589306dc734ce2d381fc8e4cffaaba290330', class: `dda-tooltip-container ${this.custom_class} ${this.component_mode} ${this.dismissed ? 'dismissed' : ''}` }, h("slot", { key: 'd88db337e9f9a7bc321a33fc2a045a9b36f878e3' }), h("div", { key: '63c1bf1f0a515735fdfe546d8009f9c468ca7d95', class: `dda-tooltip-box ${this.position}` }, h("strong", { key: '4df5ed27d0aa958a1a8c4ae2d3921025329d1d3d' }, this.title_text), h("p", { key: '9f28802fff31d6ab171fb318117d438d8dd3be25' }, this.description)))));
35
35
  }
36
36
  static get is() { return "dda-tooltip"; }
37
37
  static get originalStyleUrls() {
@@ -28,7 +28,7 @@ export class DdaUiCard {
28
28
  }
29
29
  render() {
30
30
  const HeadingTag = this.headingTag;
31
- return (h(Host, { key: 'd82fda87340a70612440a60808a854297d749883' }, h("div", { key: '8cb77a42b82ed7121af29a234e4c065a416887d5', class: 'dda-card' }, h("div", { key: 'e25298c9dbb2d9247bdc238f9c505180aae45b67', class: 'dda-card-body' }, this.type !== 'custom' && (h("div", { key: '3d6d6e4b66a787270593fc53ecb9432ef87cd144' }, !!this.icon && (h("span", { key: '17d02a755a1a6345961ba4c922d2c5205ca79dcd', class: 'dda-card-icon' }, h("i", { key: 'a4eea58a0b1511548c2d60b12bc05068326ce339', class: 'material-icons', "aria-hidden": "true" }, this.icon))), !!this.image && (h("span", { key: 'fe5b33c447adb2a06c20495b576d185258a98bca', class: 'dda-card-icon' }, h("img", { key: '7db29168e53eebe578fb8241795a47862d732d13', src: this.image, alt: this.maintitle }))), !!this.maintitle && h(HeadingTag, { key: 'c2c0a5bd81432dad7b5400c9011998f30823adbf', class: 'dda-card-title' }, this.maintitle), !!this.subtitle && h("p", { key: '9620bfa353acba31cb43d4a818c11d17bb58ea6d', class: 'dda-card-text-muted' }, this.subtitle), !!this.link && (h("a", { key: 'd81101699701091f7d952c6f38637a621fb27324', href: this.link, class: 'dda-card-link', onClick: (event) => this.linkClick.emit(event) }, this.linktext, ' ', this.linkicon && (h("span", { key: 'e7304fca873531077bb4cafda43e462b8d3403d4' }, h("i", { key: 'd13a118077f9a11b76ba06f5cb4f1ab20f9b5472', class: 'material-icons', "aria-hidden": "true" }, this.linkicon))))))), h("slot", { key: '995bf90013e00498354bfb9a3bfd6950032dd924' })))));
31
+ return (h(Host, { key: 'adf18a25d016f46bc87b4a1e31241ca162b333e0' }, h("div", { key: '0737db71a77843ea82b477a2f53cf86edf49d8e9', class: 'dda-card' }, h("div", { key: '798f2db5233a36522d7f84d89119cad74d11a006', class: 'dda-card-body' }, this.type !== 'custom' && (h("div", { key: '8c6793c79377b6e5eb0e0ab9bd18a2c1ca4f253a' }, !!this.icon && (h("span", { key: '4570999010919bbf9842e3cd6d3fc4f55dec8c82', class: 'dda-card-icon' }, h("i", { key: 'e80483b0a3da315a7535ab1bda1a2885681152b3', class: 'material-icons', "aria-hidden": "true" }, this.icon))), !!this.image && (h("span", { key: 'b4185ea5c24a6675dc9d0eeef4d179e99130528f', class: 'dda-card-icon' }, h("img", { key: '56306706dce39081bd2cb26bedd0f40b0af6f03c', src: this.image, alt: this.maintitle }))), !!this.maintitle && h(HeadingTag, { key: '7c2a2790cd3115a1631a45c49abe98b5467c2e82', class: 'dda-card-title' }, this.maintitle), !!this.subtitle && h("p", { key: 'fd207fb19f40281ba00d9b0310ef8a744e9ad907', class: 'dda-card-text-muted' }, this.subtitle), !!this.link && (h("a", { key: 'ec7277518f56c8bc596cc1786b6bc950f1454965', href: this.link, class: 'dda-card-link', onClick: (event) => this.linkClick.emit(event) }, this.linktext, ' ', this.linkicon && (h("span", { key: '2191736e59506877a9a094eca2a8caa80056d9c4' }, h("i", { key: 'beb1f6805dc66f93a85c7e4f47eeab22c38bf6c5', class: 'material-icons', "aria-hidden": "true" }, this.linkicon))))))), h("slot", { key: 'bbaabacc33bc9bcacfbd20e54a38058339126169' })))));
32
32
  }
33
33
  static get is() { return "dda-ui-card"; }
34
34
  static get originalStyleUrls() {
@@ -69,7 +69,7 @@ export class DdaSegmentedTabs {
69
69
  this.segmentChange.emit(index);
70
70
  }
71
71
  render() {
72
- return (h("div", { key: '4a72982d49270f6c04cee7fdeaafcba7cccc6d3c', role: "group", "aria-label": this.aria_label, class: `dda-segmented-group ${this.custom_class} ${this.radius_type} ${this.component_mode}` }, this.parsedItems.map((item, index) => {
72
+ return (h("div", { key: '182bb79c4e5cc855c33642c649185c2f7da80884', role: "group", "aria-label": this.aria_label, class: `dda-segmented-group ${this.custom_class} ${this.radius_type} ${this.component_mode}` }, this.parsedItems.map((item, index) => {
73
73
  const isSelected = index === this.active_index;
74
74
  const className = `dda-segmented-item${isSelected ? ' active' : ''}`;
75
75
  return item.startsWith('fo') ? (h("button", { name: this.button_name, type: "button", class: className, "aria-pressed": isSelected ? 'true' : 'false', "aria-label": this.iconLabel(item, index), onClick: () => this.selectSegment(index) }, h("i", { class: "material-icons material-symbols-outlined", "aria-hidden": "true" }, item))) : (h("button", { name: this.button_name, type: "button", class: className, "aria-pressed": isSelected ? 'true' : 'false', onClick: () => this.selectSegment(index) }, item));
@@ -20,7 +20,7 @@ export class DdaHorizontalStepper {
20
20
  }
21
21
  }
22
22
  render() {
23
- return (h(Host, { key: '30afa97eccb87ee8595802f451f2ca2f0624da2a' }, h("div", { key: '70d6126c99005e54565473c574bde94545584b58', class: `${this.custom_class} ${this.component_mode} h-stepper-container` }, this.parsedSteps.map((step, index) => (h("div", { class: `h-step ${index === this.current_step ? 'active' : ''} ${index < this.current_step ? 'completed' : ''}` }, h("div", { class: "h-step-indicator" }, h("div", { class: "circle" })), h("div", { class: "h-step-content" }, h("div", { class: "h-step-title" }, step.title), h("div", { class: "h-step-subtitle" }, step.subtitle), h("div", { class: "h-step-description" }, step.description))))))));
23
+ return (h(Host, { key: 'c1434fd26373f59e991e22d9e1287b2c797a76e7' }, h("div", { key: '8f7bbcc7faefee327222fb192ecf12bd2c99ad06', class: `${this.custom_class} ${this.component_mode} h-stepper-container` }, this.parsedSteps.map((step, index) => (h("div", { class: `h-step ${index === this.current_step ? 'active' : ''} ${index < this.current_step ? 'completed' : ''}` }, h("div", { class: "h-step-indicator" }, h("div", { class: "circle" })), h("div", { class: "h-step-content" }, h("div", { class: "h-step-title" }, step.title), h("div", { class: "h-step-subtitle" }, step.subtitle), h("div", { class: "h-step-description" }, step.description))))))));
24
24
  }
25
25
  static get is() { return "dda-horizontal-stepper"; }
26
26
  static get originalStyleUrls() {
@@ -24,7 +24,7 @@ export class DdaVerticalStepper {
24
24
  render() {
25
25
  var _a;
26
26
  const current = (_a = this.current_step) !== null && _a !== void 0 ? _a : this.current_Step;
27
- return (h(Host, { key: '9aefae11819e6581b65a39af851806fb2c4cfd75' }, h("div", { key: 'b9f812a1626f99993e07a3cf07c0a0a15ed42f11', class: `${this.custom_class} ${this.component_mode} v-stepper-container` }, this.parsedSteps.map((step, index) => (h("div", { class: `v-step ${index <= current ? 'active' : ''}` }, h("div", { class: "v-step-indicator" }, h("div", { class: "icon" }, h("i", { class: `material-icons` }, step.icon))), h("div", { class: "v-step-content" }, h("div", { class: "v-step-title" }, step.title), h("div", { class: "v-step-subtitle" }, step.subtitle), h("div", { class: "v-step-description" }, step.description)), h("div", { class: "v-step-arrow" }, h("i", { class: "material-icons material-symbols-outlined" }, "chevron_right"))))))));
27
+ return (h(Host, { key: '1d0b6cbc4fb3f11bc24adce00250b43a6a42374e' }, h("div", { key: '8fa15dad62552c04527e97e7b98e1450c61cf9e9', class: `${this.custom_class} ${this.component_mode} v-stepper-container` }, this.parsedSteps.map((step, index) => (h("div", { class: `v-step ${index <= current ? 'active' : ''}` }, h("div", { class: "v-step-indicator" }, h("div", { class: "icon" }, h("i", { class: `material-icons`, "aria-hidden": "true" }, step.icon))), h("div", { class: "v-step-content" }, h("div", { class: "v-step-title" }, step.title), h("div", { class: "v-step-subtitle" }, step.subtitle), h("div", { class: "v-step-description" }, step.description)), h("div", { class: "v-step-arrow" }, h("i", { class: "material-icons material-symbols-outlined", "aria-hidden": "true" }, "chevron_right"))))))));
28
28
  }
29
29
  static get is() { return "dda-vertical-stepper"; }
30
30
  static get originalStyleUrls() {
@@ -560,6 +560,7 @@
560
560
  --dda-neutral-variant-99: #F4FEFD;
561
561
  --dda-neutral-variant-100: #FFFFFF;
562
562
 
563
+ --dda-surface-variant-94: var(--dda-neutral-variant-94);
563
564
  --dda-surface-variant-90: var(--dda-neutral-variant-90);
564
565
  --dda-surface-variant-87: var(--dda-neutral-variant-87);
565
566
  --dda-surface-variant-80: var(--dda-neutral-variant-80);
@@ -574,6 +575,8 @@
574
575
 
575
576
  :root[data-theme='dark'] {
576
577
 
578
+ /* Behind --dda-color-primary-40 text (the active tab): #21BEBA on #293232 is 5.72:1. */
579
+ --dda-surface-variant-94: var(--dda-neutral-variant-20);
577
580
  --dda-surface-variant-90: var(--dda-neutral-variant-30);
578
581
  --dda-surface-variant-87: var(--dda-neutral-variant-25);
579
582
  --dda-surface-variant-80: var(--dda-neutral-variant-22);
@@ -3028,23 +3031,43 @@ body {
3028
3031
  width: calc(100% - 32px);
3029
3032
  }
3030
3033
 
3034
+ /* The mega menu opens under its own link, like the 3.x dropdown (.dda-default-submenu), and is as
3035
+ wide as its columns. When it does not fit there, dda-header sets --dda-mega-shift to flip it back
3036
+ toward the start of the nav, or to clamp it inside the screen (alignMegaPanel). */
3031
3037
  .megamenu-content{
3032
3038
  display: none;
3033
- width: 100%;
3034
- padding: 0 15px;
3035
- position: fixed;
3036
- top: 150px;
3037
- left: 0;
3039
+ width: max-content;
3040
+ max-width: calc(100vw - 32px);
3041
+ padding-top: 5px;
3042
+ position: absolute;
3043
+ top: 100%;
3044
+ inset-inline-start: var(--dda-mega-shift, 0px);
3045
+ z-index: 1;
3038
3046
  }
3039
3047
  .megamenu-item{
3040
3048
  min-height: 350px;
3041
3049
  background: var(--dda-surface-100);
3042
3050
  border-radius: 8px;
3043
- margin: 0 auto;
3051
+ margin: 0;
3044
3052
  padding: 42px 15px;
3045
3053
  box-shadow: 0px 10px 15px -3px rgba(16, 24, 40, 0.1);
3046
3054
  position: relative;
3047
3055
  }
3056
+ /* .megamenu-item also has .dda-container; the panel is not a page-wide container. Its height comes
3057
+ from its links, and the end padding keeps the close button clear of the column titles. */
3058
+ .megamenu-content .megamenu-item.dda-container{
3059
+ width: auto;
3060
+ max-width: none;
3061
+ min-height: 0;
3062
+ padding-block: 32px 16px;
3063
+ padding-inline-end: 64px;
3064
+ }
3065
+ /* Fixed-width columns: percentage columns (.dda-col-md-3) have no width to take in a max-content panel. */
3066
+ .megamenu-content .dda-row > [class*='dda-col-']{
3067
+ flex: 0 0 300px;
3068
+ width: 300px;
3069
+ max-width: 300px;
3070
+ }
3048
3071
  .megamenu-item .mega-menu-title{
3049
3072
  height: 24px;
3050
3073
  font-size: var(--dda-fs-body-lg);
@@ -708,7 +708,12 @@
708
708
  * report for the computed ratios.
709
709
  */
710
710
  .dda-validation-error .dda-input-field:focus-visible,
711
- .dda-input-disabled .dda-input-field:focus-visible {
711
+ .dda-input-disabled .dda-input-field:focus-visible,
712
+ /* The phone and number fields put their input inside a bordered group. In the error and disabled
713
+ states the group drops its focus shadow, so the input itself takes the ring (WCAG 2.4.7). */
714
+ .dda-validation-error .dda-field-group-input:focus-visible,
715
+ .dda-input-disabled .dda-field-group-input:focus-visible,
716
+ .dda-phone-field-group.error .dda-field-group-input:focus-visible {
712
717
  outline: none;
713
718
  box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px rgba(0, 0, 0, 0.65);
714
719
  }