@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.
Files changed (316) hide show
  1. package/CHANGELOG.md +198 -1
  2. package/MIGRATION.md +423 -0
  3. package/dist/cjs/dda-accordion.cjs.entry.js +12 -7
  4. package/dist/cjs/dda-alert.cjs.entry.js +20 -3
  5. package/dist/cjs/dda-attach-file.cjs.entry.js +24 -8
  6. package/dist/cjs/dda-avatar.cjs.entry.js +23 -12
  7. package/dist/cjs/dda-banner.cjs.entry.js +14 -5
  8. package/dist/cjs/dda-breadcrumb.cjs.entry.js +22 -10
  9. package/dist/cjs/dda-button.cjs.entry.js +16 -9
  10. package/dist/cjs/dda-checkbox.cjs.entry.js +5 -4
  11. package/dist/cjs/dda-chip.cjs.entry.js +8 -3
  12. package/dist/cjs/dda-credit-card.cjs.entry.js +5 -3
  13. package/dist/cjs/dda-creditcard-field.cjs.entry.js +26 -8
  14. package/dist/cjs/dda-dropdown.cjs.entry.js +31 -5
  15. package/dist/cjs/dda-footer.cjs.entry.js +9 -3
  16. package/dist/cjs/dda-header.cjs.entry.js +80 -8
  17. package/dist/cjs/dda-home-banner.cjs.entry.js +11 -5
  18. package/dist/cjs/dda-horizontal-stepper.cjs.entry.js +22 -5
  19. package/dist/cjs/dda-input.cjs.entry.js +17 -10
  20. package/dist/cjs/dda-link-button_2.cjs.entry.js +21 -13
  21. package/dist/cjs/dda-number-field.cjs.entry.js +20 -8
  22. package/dist/cjs/dda-pagination.cjs.entry.js +21 -11
  23. package/dist/cjs/dda-phonefield.cjs.entry.js +27 -9
  24. package/dist/cjs/dda-progressbar.cjs.entry.js +8 -3
  25. package/dist/cjs/dda-range-slider.cjs.entry.js +15 -3
  26. package/dist/cjs/dda-search-input.cjs.entry.js +27 -12
  27. package/dist/cjs/dda-segmented-tabs.cjs.entry.js +54 -6
  28. package/dist/cjs/dda-select.cjs.entry.js +40 -8
  29. package/dist/cjs/dda-sticky-footer.cjs.entry.js +20 -3
  30. package/dist/cjs/dda-tabs.cjs.entry.js +10 -4
  31. package/dist/cjs/dda-textarea.cjs.entry.js +22 -12
  32. package/dist/cjs/dda-toggle.cjs.entry.js +5 -4
  33. package/dist/cjs/dda-tooltip.cjs.entry.js +6 -4
  34. package/dist/cjs/dda-ui-card.cjs.entry.js +19 -2
  35. package/dist/cjs/dda-vertical-stepper.cjs.entry.js +23 -3
  36. package/dist/cjs/dda.cjs.js +2 -2
  37. package/dist/cjs/index-Dm7JbFAh.js +2116 -0
  38. package/dist/cjs/loader.cjs.js +2 -2
  39. package/dist/cjs/unique-id-DahNGdQy.js +14 -0
  40. package/dist/collection/collection-manifest.json +1 -1
  41. package/dist/collection/components/dda-accordion/dda-accordion.js +16 -11
  42. package/dist/collection/components/dda-alert/dda-alert.js +74 -17
  43. package/dist/collection/components/dda-alert/dda-alert.stories.js +2 -8
  44. package/dist/collection/components/dda-attach-file/dda-attach-file.js +35 -19
  45. package/dist/collection/components/dda-attach-file/dda-attach-file.stories.js +0 -9
  46. package/dist/collection/components/dda-avatar/dda-avatar.js +53 -25
  47. package/dist/collection/components/dda-avatar/dda-avatar.stories.js +1 -1
  48. package/dist/collection/components/dda-banner/dda-banner.css +35 -0
  49. package/dist/collection/components/dda-banner/dda-banner.js +34 -5
  50. package/dist/collection/components/dda-breadcrumb/dda-breadcrumb.js +49 -12
  51. package/dist/collection/components/dda-button/dda-button.js +29 -22
  52. package/dist/collection/components/dda-checkbox/dda-checkbox.css +13 -0
  53. package/dist/collection/components/dda-checkbox/dda-checkbox.js +13 -12
  54. package/dist/collection/components/dda-checkbox/dda-checkbox.stories.js +0 -11
  55. package/dist/collection/components/dda-chip/dda-chip.js +34 -9
  56. package/dist/collection/components/dda-chip/dda-chip.stories.js +0 -11
  57. package/dist/collection/components/dda-credit-card/dda-credit-card.js +10 -8
  58. package/dist/collection/components/dda-creditcard-field/dda-creditcard-field.js +58 -23
  59. package/dist/collection/components/dda-creditcard-field/dda-creditcard-field.stories.js +1 -10
  60. package/dist/collection/components/dda-dropdown/dda-dropdown.js +90 -18
  61. package/dist/collection/components/dda-dropdown/dda-dropdown.stories.js +0 -4
  62. package/dist/collection/components/dda-footer/dda-footer.js +57 -10
  63. package/dist/collection/components/dda-footer/dda-footer.stories.js +5 -4
  64. package/dist/collection/components/dda-header/dda-header.css +11 -0
  65. package/dist/collection/components/dda-header/dda-header.js +224 -37
  66. package/dist/collection/components/dda-header/dda-header.stories.js +12 -21
  67. package/dist/collection/components/dda-home-banner/dda-home-banner.js +8 -2
  68. package/dist/collection/components/dda-home-banner/home-banner.css +21 -1
  69. package/dist/collection/components/dda-input/dda-input.js +28 -21
  70. package/dist/collection/components/dda-input/dda-input.stories.js +0 -13
  71. package/dist/collection/components/dda-link-button/dda-link-button.js +30 -23
  72. package/dist/collection/components/dda-number-field/dda-number-field.js +54 -22
  73. package/dist/collection/components/dda-number-field/dda-number-field.stories.js +0 -9
  74. package/dist/collection/components/dda-pagination/dda-pagination.js +95 -28
  75. package/dist/collection/components/dda-pagination/dda-pagination.stories.js +24 -24
  76. package/dist/collection/components/dda-phonefield/dda-phonefield.js +62 -24
  77. package/dist/collection/components/dda-phonefield/dda-phonefield.stories.js +0 -13
  78. package/dist/collection/components/dda-progressbar/dda-progressbar.js +13 -8
  79. package/dist/collection/components/dda-radiobutton/dda-radiobutton.css +121 -4
  80. package/dist/collection/components/dda-radiobutton/dda-radiobutton.js +13 -12
  81. package/dist/collection/components/dda-radiobutton/dda-radiobutton.stories.js +5 -16
  82. package/dist/collection/components/dda-range-slider/dda-range-slider.js +29 -17
  83. package/dist/collection/components/dda-search-input/dda-search-input.js +61 -26
  84. package/dist/collection/components/dda-search-input/dda-search-input.stories.js +0 -9
  85. package/dist/collection/components/dda-select/dda-select.js +78 -20
  86. package/dist/collection/components/dda-sticky-footer/dda-sticky-footer.js +80 -43
  87. package/dist/collection/components/dda-sticky-footer/dda-sticky-footer.stories.js +1 -1
  88. package/dist/collection/components/dda-tabs/dda-tabs.js +21 -15
  89. package/dist/collection/components/dda-tabs/dda-tabs.stories.js +3 -10
  90. package/dist/collection/components/dda-textarea/dda-textarea.js +33 -23
  91. package/dist/collection/components/dda-textarea/dda-textarea.stories.js +0 -9
  92. package/dist/collection/components/dda-toggle/dda-toggle.css +9 -0
  93. package/dist/collection/components/dda-toggle/dda-toggle.js +47 -8
  94. package/dist/collection/components/dda-toggle/dda-toggle.stories.js +10 -22
  95. package/dist/collection/components/dda-tooltip/dda-tooltip.js +9 -7
  96. package/dist/collection/components/dda-ui-card/dda-ui-card.js +55 -13
  97. package/dist/collection/components/segmented-groups/dda-segmented-tabs/dda-segmented-tabs.js +79 -11
  98. package/dist/collection/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.css +4 -1
  99. package/dist/collection/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.js +24 -6
  100. package/dist/collection/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.stories.js +2 -2
  101. package/dist/collection/components/stepper/dda-vertical-stepper/dda-vertical-stepper.js +49 -6
  102. package/dist/collection/components/stepper/dda-vertical-stepper/dda-vertical-stepper.stories.js +2 -2
  103. package/dist/collection/global/global.css +117 -4
  104. package/dist/collection/global/input.css +56 -2
  105. package/dist/collection/storybook/component-api.js +15 -0
  106. package/dist/collection/utils/placeholder-color.js +89 -0
  107. package/dist/collection/utils/unique-id.js +10 -0
  108. package/dist/components/dda-accordion.js +1 -1
  109. package/dist/components/dda-alert.js +1 -1
  110. package/dist/components/dda-attach-file.js +1 -1
  111. package/dist/components/dda-avatar.js +1 -1
  112. package/dist/components/dda-banner.js +1 -1
  113. package/dist/components/dda-breadcrumb.js +1 -1
  114. package/dist/components/dda-button.js +1 -1
  115. package/dist/components/dda-checkbox.js +1 -1
  116. package/dist/components/dda-chip.js +1 -1
  117. package/dist/components/dda-credit-card.js +1 -1
  118. package/dist/components/dda-creditcard-field.js +1 -1
  119. package/dist/components/dda-dropdown.js +1 -1
  120. package/dist/components/dda-footer.js +1 -1
  121. package/dist/components/dda-header.js +1 -1
  122. package/dist/components/dda-home-banner.js +1 -1
  123. package/dist/components/dda-horizontal-stepper.js +1 -1
  124. package/dist/components/dda-input.js +1 -1
  125. package/dist/components/dda-link-button.js +1 -1
  126. package/dist/components/dda-number-field.js +1 -1
  127. package/dist/components/dda-pagination.js +1 -1
  128. package/dist/components/dda-phonefield.js +1 -1
  129. package/dist/components/dda-progressbar.js +1 -1
  130. package/dist/components/dda-radiobutton.js +1 -1
  131. package/dist/components/dda-range-slider.js +1 -1
  132. package/dist/components/dda-search-input.js +1 -1
  133. package/dist/components/dda-segmented-tabs.js +1 -1
  134. package/dist/components/dda-select.js +1 -1
  135. package/dist/components/dda-sticky-footer.js +1 -1
  136. package/dist/components/dda-tabs.js +1 -1
  137. package/dist/components/dda-textarea.js +1 -1
  138. package/dist/components/dda-toggle.js +1 -1
  139. package/dist/components/dda-tooltip.js +1 -1
  140. package/dist/components/dda-ui-card.js +1 -1
  141. package/dist/components/dda-vertical-stepper.js +1 -1
  142. package/dist/components/index.js +1 -1
  143. package/dist/components/p-B-I003EB.js +1 -0
  144. package/dist/components/p-B4nkZ15I.js +1 -0
  145. package/dist/components/p-Bk2uycTf.js +1 -0
  146. package/dist/components/p-C96R7OFb.js +1 -0
  147. package/dist/components/p-Ciz-pnTr.js +1 -0
  148. package/dist/components/p-CleacZFl.js +1 -0
  149. package/dist/dda/dda.css +2 -2
  150. package/dist/dda/dda.esm.js +1 -1
  151. package/dist/dda/p-0daa2a14.entry.js +1 -0
  152. package/dist/dda/p-1537b9dd.entry.js +1 -0
  153. package/dist/dda/p-175c52b8.entry.js +1 -0
  154. package/dist/dda/p-2b65a79a.entry.js +1 -0
  155. package/dist/dda/p-2d93b185.entry.js +1 -0
  156. package/dist/dda/p-30d3a014.entry.js +1 -0
  157. package/dist/dda/p-33b890a5.entry.js +1 -0
  158. package/dist/dda/p-64d90f29.entry.js +1 -0
  159. package/dist/dda/p-69bc04c1.entry.js +1 -0
  160. package/dist/dda/p-6daa282f.entry.js +1 -0
  161. package/dist/dda/p-72f22d1f.entry.js +1 -0
  162. package/dist/dda/p-7549868d.entry.js +1 -0
  163. package/dist/dda/p-7a51a946.entry.js +1 -0
  164. package/dist/dda/p-7b187e1f.entry.js +1 -0
  165. package/dist/dda/p-7b4d895e.entry.js +1 -0
  166. package/dist/dda/p-8f408141.entry.js +1 -0
  167. package/dist/dda/p-91341ca7.entry.js +1 -0
  168. package/dist/dda/p-9552def5.entry.js +1 -0
  169. package/dist/dda/p-9672af43.entry.js +1 -0
  170. package/dist/dda/p-98bba4dc.entry.js +1 -0
  171. package/dist/dda/p-B-I003EB.js +1 -0
  172. package/dist/dda/p-a0768b2f.entry.js +1 -0
  173. package/dist/dda/p-a5bd30ad.entry.js +1 -0
  174. package/dist/dda/p-a83f6267.entry.js +1 -0
  175. package/dist/dda/p-b17f79df.entry.js +1 -0
  176. package/dist/dda/p-b79505e1.entry.js +1 -0
  177. package/dist/dda/p-b8b98df2.entry.js +1 -0
  178. package/dist/dda/p-cc2cc09b.entry.js +1 -0
  179. package/dist/dda/p-ceee08fa.entry.js +1 -0
  180. package/dist/dda/p-d000e69d.entry.js +1 -0
  181. package/dist/dda/p-e3a65ceb.entry.js +1 -0
  182. package/dist/dda/p-e5b79469.entry.js +1 -0
  183. package/dist/dda/p-f2f3be5f.entry.js +1 -0
  184. package/dist/dda/p-f92e0a32.entry.js +1 -0
  185. package/dist/dda/p-o6021Dsk.js +2 -0
  186. package/dist/esm/dda-accordion.entry.js +12 -7
  187. package/dist/esm/dda-alert.entry.js +20 -3
  188. package/dist/esm/dda-attach-file.entry.js +24 -8
  189. package/dist/esm/dda-avatar.entry.js +23 -12
  190. package/dist/esm/dda-banner.entry.js +14 -5
  191. package/dist/esm/dda-breadcrumb.entry.js +22 -10
  192. package/dist/esm/dda-button.entry.js +16 -9
  193. package/dist/esm/dda-checkbox.entry.js +5 -4
  194. package/dist/esm/dda-chip.entry.js +8 -3
  195. package/dist/esm/dda-credit-card.entry.js +5 -3
  196. package/dist/esm/dda-creditcard-field.entry.js +26 -8
  197. package/dist/esm/dda-dropdown.entry.js +31 -5
  198. package/dist/esm/dda-footer.entry.js +9 -3
  199. package/dist/esm/dda-header.entry.js +80 -8
  200. package/dist/esm/dda-home-banner.entry.js +11 -5
  201. package/dist/esm/dda-horizontal-stepper.entry.js +22 -5
  202. package/dist/esm/dda-input.entry.js +17 -10
  203. package/dist/esm/dda-link-button_2.entry.js +21 -13
  204. package/dist/esm/dda-number-field.entry.js +20 -8
  205. package/dist/esm/dda-pagination.entry.js +21 -11
  206. package/dist/esm/dda-phonefield.entry.js +27 -9
  207. package/dist/esm/dda-progressbar.entry.js +8 -3
  208. package/dist/esm/dda-range-slider.entry.js +15 -3
  209. package/dist/esm/dda-search-input.entry.js +27 -12
  210. package/dist/esm/dda-segmented-tabs.entry.js +54 -6
  211. package/dist/esm/dda-select.entry.js +40 -8
  212. package/dist/esm/dda-sticky-footer.entry.js +20 -3
  213. package/dist/esm/dda-tabs.entry.js +10 -4
  214. package/dist/esm/dda-textarea.entry.js +22 -12
  215. package/dist/esm/dda-toggle.entry.js +5 -4
  216. package/dist/esm/dda-tooltip.entry.js +6 -4
  217. package/dist/esm/dda-ui-card.entry.js +19 -2
  218. package/dist/esm/dda-vertical-stepper.entry.js +23 -3
  219. package/dist/esm/dda.js +3 -3
  220. package/dist/esm/index-o6021Dsk.js +2106 -0
  221. package/dist/esm/loader.js +3 -3
  222. package/dist/esm/unique-id-B-I003EB.js +12 -0
  223. package/dist/types/components/dda-accordion/dda-accordion.d.ts +6 -0
  224. package/dist/types/components/dda-alert/dda-alert.d.ts +21 -0
  225. package/dist/types/components/dda-attach-file/dda-attach-file.d.ts +17 -0
  226. package/dist/types/components/dda-attach-file/dda-attach-file.stories.d.ts +0 -4
  227. package/dist/types/components/dda-avatar/dda-avatar.d.ts +20 -0
  228. package/dist/types/components/dda-banner/dda-banner.d.ts +5 -0
  229. package/dist/types/components/dda-breadcrumb/dda-breadcrumb.d.ts +12 -6
  230. package/dist/types/components/dda-button/dda-button.d.ts +15 -4
  231. package/dist/types/components/dda-checkbox/dda-checkbox.d.ts +11 -0
  232. package/dist/types/components/dda-checkbox/dda-checkbox.stories.d.ts +0 -10
  233. package/dist/types/components/dda-chip/dda-chip.d.ts +10 -0
  234. package/dist/types/components/dda-chip/dda-chip.stories.d.ts +0 -6
  235. package/dist/types/components/dda-credit-card/dda-credit-card.d.ts +7 -0
  236. package/dist/types/components/dda-creditcard-field/dda-creditcard-field.d.ts +24 -0
  237. package/dist/types/components/dda-creditcard-field/dda-creditcard-field.stories.d.ts +0 -6
  238. package/dist/types/components/dda-dropdown/dda-dropdown.d.ts +25 -0
  239. package/dist/types/components/dda-dropdown/dda-dropdown.stories.d.ts +0 -4
  240. package/dist/types/components/dda-footer/dda-footer.d.ts +13 -0
  241. package/dist/types/components/dda-header/dda-header.d.ts +60 -0
  242. package/dist/types/components/dda-header/dda-header.stories.d.ts +6 -0
  243. package/dist/types/components/dda-home-banner/dda-home-banner.d.ts +1 -0
  244. package/dist/types/components/dda-input/dda-input.d.ts +16 -0
  245. package/dist/types/components/dda-input/dda-input.stories.d.ts +0 -6
  246. package/dist/types/components/dda-link-button/dda-link-button.d.ts +14 -3
  247. package/dist/types/components/dda-number-field/dda-number-field.d.ts +21 -0
  248. package/dist/types/components/dda-number-field/dda-number-field.stories.d.ts +0 -6
  249. package/dist/types/components/dda-pagination/dda-pagination.d.ts +26 -0
  250. package/dist/types/components/dda-phonefield/dda-phonefield.d.ts +21 -0
  251. package/dist/types/components/dda-phonefield/dda-phonefield.stories.d.ts +0 -6
  252. package/dist/types/components/dda-progressbar/dda-progressbar.d.ts +7 -0
  253. package/dist/types/components/dda-radiobutton/dda-radiobutton.d.ts +11 -0
  254. package/dist/types/components/dda-radiobutton/dda-radiobutton.stories.d.ts +5 -15
  255. package/dist/types/components/dda-range-slider/dda-range-slider.d.ts +16 -0
  256. package/dist/types/components/dda-search-input/dda-search-input.d.ts +21 -0
  257. package/dist/types/components/dda-search-input/dda-search-input.stories.d.ts +0 -6
  258. package/dist/types/components/dda-select/dda-select.d.ts +23 -0
  259. package/dist/types/components/dda-sticky-footer/dda-sticky-footer.d.ts +46 -3
  260. package/dist/types/components/dda-tabs/dda-tabs.d.ts +12 -1
  261. package/dist/types/components/dda-tabs/dda-tabs.stories.d.ts +0 -4
  262. package/dist/types/components/dda-textarea/dda-textarea.d.ts +16 -0
  263. package/dist/types/components/dda-textarea/dda-textarea.stories.d.ts +0 -6
  264. package/dist/types/components/dda-toggle/dda-toggle.d.ts +11 -0
  265. package/dist/types/components/dda-toggle/dda-toggle.stories.d.ts +2 -12
  266. package/dist/types/components/dda-tooltip/dda-tooltip.d.ts +5 -0
  267. package/dist/types/components/dda-ui-card/dda-ui-card.d.ts +13 -1
  268. package/dist/types/components/segmented-groups/dda-segmented-tabs/dda-segmented-tabs.d.ts +19 -2
  269. package/dist/types/components/stepper/dda-horizontal-stepper/dda-horizontal-stepper.d.ts +6 -0
  270. package/dist/types/components/stepper/dda-vertical-stepper/dda-vertical-stepper.d.ts +8 -0
  271. package/dist/types/components.d.ts +2373 -47
  272. package/dist/types/utils/placeholder-color.d.ts +10 -0
  273. package/dist/types/utils/unique-id.d.ts +6 -0
  274. package/package.json +4 -3
  275. package/readme.md +6 -0
  276. package/dist/cjs/index-CDUC0Pdj.js +0 -1986
  277. package/dist/components/p-9UeqjDnY.js +0 -1
  278. package/dist/components/p-CrTEb7xH.js +0 -1
  279. package/dist/components/p-DldlmGnP.js +0 -1
  280. package/dist/components/p-NvTw9Mx1.js +0 -1
  281. package/dist/components/p-i15-_er0.js +0 -1
  282. package/dist/dda/p-016e4090.entry.js +0 -1
  283. package/dist/dda/p-0229b303.entry.js +0 -1
  284. package/dist/dda/p-05a6f90d.entry.js +0 -1
  285. package/dist/dda/p-1c9a6035.entry.js +0 -1
  286. package/dist/dda/p-2c313105.entry.js +0 -1
  287. package/dist/dda/p-2cec7be6.entry.js +0 -1
  288. package/dist/dda/p-2f4ace4c.entry.js +0 -1
  289. package/dist/dda/p-360a0577.entry.js +0 -1
  290. package/dist/dda/p-3e49128d.entry.js +0 -1
  291. package/dist/dda/p-3fa27728.entry.js +0 -1
  292. package/dist/dda/p-43e1c12f.entry.js +0 -1
  293. package/dist/dda/p-4428417d.entry.js +0 -1
  294. package/dist/dda/p-44ce832e.entry.js +0 -1
  295. package/dist/dda/p-560a3f0c.entry.js +0 -1
  296. package/dist/dda/p-5712bbd9.entry.js +0 -1
  297. package/dist/dda/p-626d7e7b.entry.js +0 -1
  298. package/dist/dda/p-68008c64.entry.js +0 -1
  299. package/dist/dda/p-6f3d9f78.entry.js +0 -1
  300. package/dist/dda/p-79db1218.entry.js +0 -1
  301. package/dist/dda/p-84911fab.entry.js +0 -1
  302. package/dist/dda/p-90d9648b.entry.js +0 -1
  303. package/dist/dda/p-91040abe.entry.js +0 -1
  304. package/dist/dda/p-Cq6A4mXg.js +0 -2
  305. package/dist/dda/p-a1421a54.entry.js +0 -1
  306. package/dist/dda/p-a22b1c56.entry.js +0 -1
  307. package/dist/dda/p-aa0e9035.entry.js +0 -1
  308. package/dist/dda/p-b2981646.entry.js +0 -1
  309. package/dist/dda/p-c1f45887.entry.js +0 -1
  310. package/dist/dda/p-c50e1141.entry.js +0 -1
  311. package/dist/dda/p-d8a9cab1.entry.js +0 -1
  312. package/dist/dda/p-dd966009.entry.js +0 -1
  313. package/dist/dda/p-ed099201.entry.js +0 -1
  314. package/dist/dda/p-f4bd2b2e.entry.js +0 -1
  315. package/dist/dda/p-fc30c60e.entry.js +0 -1
  316. package/dist/esm/index-Cq6A4mXg.js +0 -1976
@@ -714,7 +714,8 @@
714
714
  .quick-links-wrap {
715
715
  width: 100%;
716
716
  position: absolute;
717
- bottom: 45px;
717
+ /* dda-sticky-footer sets --dda-sticky-footer-height; the cards sit above the fixed bar. */
718
+ bottom: calc(45px + var(--dda-sticky-footer-height, 0px));
718
719
  z-index: 1;
719
720
  }
720
721
 
@@ -764,6 +765,14 @@
764
765
  margin-bottom: 15px;
765
766
  color: var(--dda-on-surface-variant-40);
766
767
  }
768
+ .quick-links .link-item i {
769
+ display: block;
770
+ width: fit-content;
771
+ font-size: 35px;
772
+ line-height: 1;
773
+ margin-bottom: 15px;
774
+ color: var(--dda-on-surface-variant-40);
775
+ }
767
776
  .quick-links .link-item .title {
768
777
  display: block;
769
778
  font-size: var(--dda-fs-title-sm);
@@ -785,6 +794,8 @@
785
794
  }
786
795
  .quick-links-wrap {
787
796
  position: relative;
797
+ /* In normal flow the cards do not sit over the fixed bar, so keep the original offset. */
798
+ bottom: 45px;
788
799
  }
789
800
  .quick-links-wrap .quick-links {
790
801
  display: grid;
@@ -804,7 +815,10 @@
804
815
  }
805
816
  } */
806
817
 
807
- @media only screen and (orientation: landscape) and (max-width: 1600px) {
818
+ /* Short landscape screens (a phone or small tablet on its side) cannot fit the display-size
819
+ slide title in the full-height banner. This was keyed on max-width: 1600px, which also caught
820
+ ordinary laptop screens and shrank the title there to 1.2rem. */
821
+ @media only screen and (orientation: landscape) and (max-height: 600px) {
808
822
  .slide-content h2 {
809
823
  font-size: 1.2rem;
810
824
  }
@@ -812,6 +826,8 @@
812
826
  font-size: 1rem;
813
827
  margin-bottom: 5px;
814
828
  }
829
+ }
830
+ @media only screen and (orientation: landscape) and (max-width: 1600px) {
815
831
  .quick-links .link-item {
816
832
  padding: 13px;
817
833
  height: 128px;
@@ -820,6 +836,10 @@
820
836
  height: 20px;
821
837
  margin-bottom: 5px;
822
838
  }
839
+ .quick-links .link-item i {
840
+ font-size: 20px;
841
+ margin-bottom: 5px;
842
+ }
823
843
  .quick-links .link-item .title {
824
844
  font-size: 15px;
825
845
  }
@@ -2145,11 +2165,23 @@
2145
2165
  box-shadow: none;
2146
2166
  }
2147
2167
 
2148
- .foot-menu,
2149
- .foot-icon-btn a span {
2168
+ .foot-menu {
2150
2169
  display: none;
2151
2170
  }
2152
2171
 
2172
+ /* Hide the icon text visually only: it is the link's name when the image is decorative. */
2173
+ .foot-icon-btn a span {
2174
+ position: absolute;
2175
+ width: 1px;
2176
+ height: 1px;
2177
+ margin: -1px;
2178
+ padding: 0;
2179
+ overflow: hidden;
2180
+ clip: rect(0, 0, 0, 0);
2181
+ white-space: nowrap;
2182
+ border: 0;
2183
+ }
2184
+
2153
2185
  .dda-footer-item ul li {
2154
2186
  padding: 0 8px;
2155
2187
  border: 0px !important;
@@ -2488,6 +2520,8 @@
2488
2520
  content: "";
2489
2521
  width: 100%;
2490
2522
  height: 250px;
2523
+ /* Decoration only: it reaches below the header and must not catch taps on the page. */
2524
+ pointer-events: none;
2491
2525
  background: linear-gradient(180deg, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.4) 63.02%, rgba(0, 0, 0, 0) 100%);
2492
2526
  position: absolute;
2493
2527
  top: 0;
@@ -2933,6 +2967,8 @@
2933
2967
  gap: 15px;
2934
2968
  padding: 32px;
2935
2969
  overflow-y: auto;
2970
+ /* Reaching the end of the menu must not start scrolling the locked page. */
2971
+ overscroll-behavior: contain;
2936
2972
  height: 100%;
2937
2973
  }
2938
2974
 
@@ -3442,6 +3478,76 @@ ul.main_side_menu .main_sub_menu .main_sub_menu .main_sub_menu {
3442
3478
 
3443
3479
 
3444
3480
 
3481
+ /* Mobile search: the search button opens this panel under the header. */
3482
+ .dda-mobile-search-panel {
3483
+ position: absolute;
3484
+ top: 100%;
3485
+ inset-inline: 0;
3486
+ padding: 12px 16px;
3487
+ background: var(--dda-surface-100);
3488
+ box-shadow: 0px 4px 12px 0px rgba(0, 0, 0, 0.12);
3489
+ z-index: 8;
3490
+ }
3491
+
3492
+ .dda-mobile-search-panel[hidden] {
3493
+ display: none;
3494
+ }
3495
+
3496
+ .dda-mobile-search-form {
3497
+ position: relative;
3498
+ display: flex;
3499
+ align-items: center;
3500
+ gap: 8px;
3501
+ border: 1px solid var(--dda-surface-90);
3502
+ border-radius: 100px;
3503
+ padding-inline-start: 12px;
3504
+ }
3505
+
3506
+ .dda-mobile-search-form:focus-within {
3507
+ box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px rgba(0, 0, 0, 0.65);
3508
+ }
3509
+
3510
+ .dda-mobile-search-form > i {
3511
+ font-size: 24px;
3512
+ color: var(--dda-on-surface-variant-30);
3513
+ }
3514
+
3515
+ .dda-mobile-search-form input {
3516
+ flex: 1;
3517
+ min-width: 0;
3518
+ height: 44px;
3519
+ border: 0;
3520
+ background: transparent;
3521
+ color: var(--dda-on-surface-0);
3522
+ font-size: var(--dda-fs-body-lg);
3523
+ outline: 0;
3524
+ }
3525
+
3526
+ .dda-mobile-search-close {
3527
+ width: 44px;
3528
+ height: 44px;
3529
+ flex-shrink: 0;
3530
+ display: inline-flex;
3531
+ align-items: center;
3532
+ justify-content: center;
3533
+ border: 0;
3534
+ border-radius: 100px;
3535
+ background: transparent;
3536
+ color: var(--dda-on-surface-variant-30);
3537
+ }
3538
+
3539
+ .dda-mobile-search-close:focus-visible {
3540
+ outline: none;
3541
+ box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px rgba(0, 0, 0, 0.65);
3542
+ }
3543
+
3544
+ /* The panel only exists where the mobile search button is shown. */
3545
+ @media screen and (min-width: 768px) {
3546
+ .dda-mobile-search-panel {
3547
+ display: none;
3548
+ }
3549
+ }
3550
+
3445
3551
 
3446
3552
  :root{
3447
3553
  --font-family-main: 'Dubai', sans-serif;
@@ -3504,6 +3610,13 @@ a:hover {
3504
3610
  text-decoration: none !important;
3505
3611
  }
3506
3612
 
3613
+ /* WCAG 1.4.1: links in running text keep an underline so color is not the only cue.
3614
+ Classed links (buttons, cards) and list links (menus) stay undecorated. */
3615
+ :where(p, td, dd, blockquote, figcaption) a:not([class]),
3616
+ :where(p, td, dd, blockquote, figcaption) a:not([class]):hover {
3617
+ text-decoration: underline !important;
3618
+ }
3619
+
3507
3620
  button {
3508
3621
  cursor: pointer;
3509
3622
  }
@@ -22,6 +22,8 @@
22
22
  height: 32px;
23
23
  background-color: transparent;
24
24
  flex: 1;
25
+ /* An input's intrinsic width would otherwise stop it shrinking and push the row past its container. */
26
+ min-width: 0;
25
27
  font-size: var(--dda-fs-body-lg);
26
28
  font-weight: var(--dda-fw-400);
27
29
  padding: 0px;
@@ -67,6 +69,35 @@
67
69
  border: 1px solid var(--dda-neutral-90);
68
70
  color: var(--dda-neutral-0);
69
71
  }
72
+
73
+ /*
74
+ * WCAG 1.4.3 placeholder contrast. The global `::placeholder` colour in
75
+ * global.css (#8E9191) is 3.18:1 on the white field background. The
76
+ * theme-aware --dda-on-surface-variant-40 is 6.49:1 on surface-100 in the
77
+ * light theme (#56605F on #FFFFFF) and 7.46:1 in the dark theme (#A3ADAC on
78
+ * #191C1C). `.light-mode` forces a white field, so it uses the raw light
79
+ * step. Kept above the validation-error and disabled placeholder rules so
80
+ * those still win at equal specificity.
81
+ */
82
+ .dda-input-field::-ms-input-placeholder,
83
+ .dda-field-group-input::-ms-input-placeholder {
84
+ color: var(--dda-on-surface-variant-40);
85
+ }
86
+
87
+ .dda-input-field::placeholder,
88
+ .dda-field-group-input::placeholder {
89
+ color: var(--dda-on-surface-variant-40);
90
+ }
91
+
92
+ .light-mode .dda-input-field::-ms-input-placeholder,
93
+ .light-mode .dda-field-group-input::-ms-input-placeholder {
94
+ color: var(--dda-neutral-variant-40);
95
+ }
96
+
97
+ .light-mode .dda-input-field::placeholder,
98
+ .light-mode .dda-field-group-input::placeholder {
99
+ color: var(--dda-neutral-variant-40);
100
+ }
70
101
  .dda-input-size-small .dda-input-field-group,
71
102
  .dda-input-size-small .dda-input-field {
72
103
  height: 48px;
@@ -90,6 +121,7 @@
90
121
 
91
122
  .dda-input-dropdown-btn {
92
123
  min-width: 110px;
124
+ flex-shrink: 0;
93
125
  position: relative;
94
126
  display: inline-block;
95
127
  padding: 0;
@@ -568,8 +600,30 @@
568
600
  background-color: var(--dda-surface-94);
569
601
  }
570
602
 
571
- .dda-file-choose input {
572
- display: none;
603
+ /*
604
+ * WCAG 2.1.1 / 4.1.2: the native file input was `display: none`, so it was
605
+ * out of the tab order and the accessibility tree. It is now visually hidden
606
+ * but focusable; keyboard focus shows the ring on the visible control after
607
+ * it ("Choose File", or the chosen file's details).
608
+ */
609
+ .dda-attach-file input[type='file'] {
610
+ position: absolute;
611
+ width: 1px;
612
+ height: 1px;
613
+ margin: -1px;
614
+ padding: 0;
615
+ overflow: hidden;
616
+ clip: rect(0 0 0 0);
617
+ clip-path: inset(50%);
618
+ white-space: nowrap;
619
+ border: 0;
620
+ opacity: 0;
621
+ }
622
+
623
+ .dda-attach-file input[type='file']:focus-visible + .dda-file-input .dda-file-choose,
624
+ .dda-attach-file input[type='file']:focus-visible + .dda-file-details {
625
+ outline: none;
626
+ box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px rgba(0, 0, 0, 0.65);
573
627
  }
574
628
 
575
629
  .dda-file-details {
@@ -0,0 +1,15 @@
1
+ // Builds a docs page's API section from the tables Stencil generates into a component readme,
2
+ // so the documented props and events always match the component source after a build.
3
+ const API_SECTIONS = ['Properties', 'Events', 'Methods', 'Slots', 'Shadow Parts', 'CSS Custom Properties'];
4
+
5
+ export function componentApi(readme) {
6
+ const generated = readme.split('<!-- Auto Generated Below -->')[1] ?? '';
7
+ const sections = generated
8
+ .split(/^## /m)
9
+ .slice(1)
10
+ .filter(section => API_SECTIONS.includes(section.split('\n')[0].trim()))
11
+ // Drop Stencil's "Built with StencilJS" footer, which follows the last section.
12
+ .map(section => `### ${section.replace(/^-{10,}[\s\S]*$/m, '').trim()}`);
13
+
14
+ return sections.length ? sections.join('\n\n') : '_This component has no public properties or events._';
15
+ }
@@ -0,0 +1,89 @@
1
+ // Shared e2e helper for WCAG 1.4.3 placeholder-contrast specs. Not consumed
2
+ // by any component.
3
+ //
4
+ // Chromium's `getComputedStyle(input, '::placeholder')` returns the input's
5
+ // own `color`, not the placeholder's, so a spec cannot read the placeholder
6
+ // colour directly. This walks the page's stylesheets instead: it finds every
7
+ // `::placeholder` rule whose base selector matches the field, keeps the one
8
+ // that wins the cascade (highest specificity, then latest in source order),
9
+ // and resolves its `color` value (including `var()`) to a computed
10
+ // `rgb(...)` string that `contrastRatio()` can read.
11
+ //
12
+ // Pass the function itself to `page.evaluate()`. It runs in the browser, so
13
+ // it must stay self-contained: no imports, no closures, no async.
14
+ export function readPlaceholderColors(args) {
15
+ const field = document.querySelector(args.field);
16
+ const backgroundEl = document.querySelector(args.background || args.field);
17
+ if (!field || !backgroundEl) {
18
+ throw new Error(`placeholder-color.ts: no element for "${args.field}" or "${args.background}"`);
19
+ }
20
+ const specificity = (selector) => {
21
+ let rest = selector;
22
+ const ids = (rest.match(/#[\w-]+/g) || []).length;
23
+ rest = rest.replace(/#[\w-]+/g, ' ');
24
+ const classes = (rest.match(/\.[\w-]+|\[[^\]]*\]|:[\w-]+/g) || []).length;
25
+ rest = rest.replace(/\.[\w-]+|\[[^\]]*\]|:[\w-]+/g, ' ');
26
+ const types = (rest.match(/[a-zA-Z][\w-]*/g) || []).length;
27
+ return ids * 10000 + classes * 100 + types;
28
+ };
29
+ let bestValue = '';
30
+ let bestSpecificity = -1;
31
+ const visit = (rules) => {
32
+ for (let i = 0; i < rules.length; i++) {
33
+ const rule = rules[i];
34
+ if (rule.styleSheet && rule.styleSheet.cssRules) {
35
+ visit(rule.styleSheet.cssRules);
36
+ }
37
+ else if (rule.selectorText !== undefined) {
38
+ const value = rule.style.getPropertyValue('color');
39
+ if (!value)
40
+ continue;
41
+ const parts = String(rule.selectorText).split(',');
42
+ for (let j = 0; j < parts.length; j++) {
43
+ const part = parts[j].trim();
44
+ if (!/::placeholder$/.test(part))
45
+ continue;
46
+ const base = part.replace(/::placeholder$/, '').trim() || '*';
47
+ let matches = false;
48
+ try {
49
+ matches = field.matches(base);
50
+ }
51
+ catch (_a) {
52
+ matches = false;
53
+ }
54
+ if (!matches)
55
+ continue;
56
+ const s = specificity(base);
57
+ if (s >= bestSpecificity) {
58
+ bestSpecificity = s;
59
+ bestValue = value;
60
+ }
61
+ }
62
+ }
63
+ else if (rule.cssRules) {
64
+ const media = rule.media ? rule.media.mediaText : '';
65
+ if (!media || window.matchMedia(media).matches) {
66
+ visit(rule.cssRules);
67
+ }
68
+ }
69
+ }
70
+ };
71
+ for (let i = 0; i < document.styleSheets.length; i++) {
72
+ let rules = null;
73
+ try {
74
+ rules = document.styleSheets[i].cssRules;
75
+ }
76
+ catch (_a) {
77
+ rules = null;
78
+ }
79
+ if (rules)
80
+ visit(rules);
81
+ }
82
+ // Resolve var()/keywords to rgb() in the field's own context.
83
+ const probe = document.createElement('span');
84
+ field.parentElement.appendChild(probe);
85
+ probe.style.color = bestValue || getComputedStyle(field).color;
86
+ const placeholder = getComputedStyle(probe).color;
87
+ probe.remove();
88
+ return { placeholder, background: getComputedStyle(backgroundEl).backgroundColor };
89
+ }
@@ -0,0 +1,10 @@
1
+ let counter = 0;
2
+ /**
3
+ * Returns an id that is unique on the page, for elements such as a label's input when the
4
+ * consumer did not pass one. Call it once per component instance (as a field initializer),
5
+ * so the id stays stable across renders.
6
+ */
7
+ export function uniqueId(prefix) {
8
+ counter += 1;
9
+ return `${prefix}-${counter}`;
10
+ }