@lifesg/react-design-system 4.0.0-alpha.11 → 4.0.0-alpha.13

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 (288) hide show
  1. package/breadcrumb/breadcrumb.js +1 -1
  2. package/breadcrumb/breadcrumb.js.map +1 -1
  3. package/breadcrumb/breadcrumb.styles.d.ts +0 -8
  4. package/breadcrumb/breadcrumb.styles.js +1 -1
  5. package/breadcrumb/breadcrumb.styles.js.map +1 -1
  6. package/breadcrumb/breadcrumb.styles_1blzn8n.css +7 -0
  7. package/breadcrumb/types.d.ts +2 -13
  8. package/cjs/breadcrumb/breadcrumb.js +1 -1
  9. package/cjs/breadcrumb/breadcrumb.js.map +1 -1
  10. package/cjs/breadcrumb/breadcrumb.styles.js +1 -1
  11. package/cjs/breadcrumb/breadcrumb.styles.js.map +1 -1
  12. package/cjs/breadcrumb/breadcrumb.styles_1blzn8n.css +7 -0
  13. package/cjs/drawer/drawer.js +1 -1
  14. package/cjs/drawer/drawer.js.map +1 -1
  15. package/cjs/drawer/drawer.styles.js +1 -1
  16. package/cjs/drawer/drawer.styles.js.map +1 -1
  17. package/{drawer/drawer.styles_94hx3y.css → cjs/drawer/drawer.styles_a4bwe0.css} +6 -3
  18. package/cjs/file-download/file-download.js +1 -1
  19. package/cjs/file-download/file-download.js.map +1 -1
  20. package/cjs/file-download/file-list-card/file-list-card.js +1 -1
  21. package/cjs/file-download/file-list-card/file-list-card.js.map +1 -1
  22. package/cjs/file-download/file-list-card/file-list-card.styles.js +1 -1
  23. package/cjs/file-download/file-list-card/file-list-card.styles.js.map +1 -1
  24. package/cjs/file-download/file-list-card/file-list-card.styles_lzbqkk.css +18 -0
  25. package/cjs/file-upload/file-list/file-list.js +1 -1
  26. package/cjs/file-upload/file-list/file-list.js.map +1 -1
  27. package/cjs/file-upload/file-list/file-list.styles.js +1 -1
  28. package/cjs/file-upload/file-list/file-list.styles.js.map +1 -1
  29. package/cjs/file-upload/file-list/file-list.styles_1xbypnh.css +2 -0
  30. package/cjs/file-upload/file-list-item/file-item-actions.js +2 -0
  31. package/cjs/file-upload/file-list-item/file-item-actions.js.map +1 -0
  32. package/cjs/file-upload/file-list-item/file-item-actions.styles.js +2 -0
  33. package/cjs/file-upload/file-list-item/file-item-actions.styles.js.map +1 -0
  34. package/cjs/file-upload/file-list-item/file-item-actions.styles_1quulgy.css +8 -0
  35. package/cjs/file-upload/file-list-item/file-item-details.js +2 -0
  36. package/cjs/file-upload/file-list-item/file-item-details.js.map +1 -0
  37. package/cjs/file-upload/file-list-item/file-item-details.styles.js +2 -0
  38. package/cjs/file-upload/file-list-item/file-item-details.styles.js.map +1 -0
  39. package/cjs/file-upload/file-list-item/file-item-details.styles_1ce9akx.css +7 -0
  40. package/cjs/file-upload/file-list-item/file-list-item.js +1 -1
  41. package/cjs/file-upload/file-list-item/file-list-item.js.map +1 -1
  42. package/cjs/file-upload/file-list-item/file-list-item.styles.js +1 -1
  43. package/cjs/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  44. package/cjs/file-upload/file-list-item/file-list-item.styles_x3a500.css +10 -0
  45. package/cjs/file-upload/file-list-item/use-truncated-name.js +2 -0
  46. package/cjs/file-upload/file-list-item/use-truncated-name.js.map +1 -0
  47. package/cjs/file-upload/helper.js +1 -1
  48. package/cjs/file-upload/helper.js.map +1 -1
  49. package/cjs/footer/footer-disclaimer-links-data.js +1 -1
  50. package/cjs/footer/footer-disclaimer-links-data.js.map +1 -1
  51. package/cjs/footer/footer.styles.js +1 -1
  52. package/cjs/footer/footer.styles.js.map +1 -1
  53. package/{footer/footer.styles_1msorhc.css → cjs/footer/footer.styles_14hnlcq.css} +4 -4
  54. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
  55. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  56. package/cjs/index.js +1 -1
  57. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.js +1 -1
  58. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  59. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.styles.js +1 -1
  60. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.styles.js.map +1 -1
  61. package/cjs/local-nav/local-nav-dropdown/{local-nav-dropdown.styles_uhd4xl.css → local-nav-dropdown.styles_kpel1m.css} +9 -6
  62. package/cjs/local-nav/local-nav-menu/local-nav-menu.js +1 -1
  63. package/cjs/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  64. package/cjs/local-nav/local-nav-menu/local-nav-menu.styles.js +1 -1
  65. package/cjs/local-nav/local-nav-menu/local-nav-menu.styles.js.map +1 -1
  66. package/cjs/local-nav/local-nav-menu/local-nav-menu.styles_67fcyc.css +8 -0
  67. package/cjs/masthead/sgds-day.css +0 -1
  68. package/cjs/masthead/sgds-night.css +0 -1
  69. package/cjs/menu/menu-content.js +1 -1
  70. package/cjs/menu/menu-content.js.map +1 -1
  71. package/cjs/menu/menu-content.styles.js +1 -1
  72. package/cjs/menu/menu-content.styles.js.map +1 -1
  73. package/cjs/menu/menu-content.styles_1r8oxtk.css +5 -0
  74. package/cjs/menu/menu-item.styles.js +1 -1
  75. package/cjs/menu/menu-item.styles.js.map +1 -1
  76. package/cjs/menu/{menu-item.styles_liyed8.css → menu-item.styles_eut2j9.css} +1 -1
  77. package/cjs/menu/menu-link.styles.js +1 -1
  78. package/cjs/menu/menu-link.styles.js.map +1 -1
  79. package/cjs/menu/menu-link.styles_rng7n7.css +2 -0
  80. package/cjs/menu/menu-section.js +1 -1
  81. package/cjs/menu/menu-section.js.map +1 -1
  82. package/cjs/menu/menu-section.styles.js +1 -1
  83. package/cjs/menu/menu-section.styles.js.map +1 -1
  84. package/cjs/menu/menu-section.styles_1n0ppxl.css +5 -0
  85. package/cjs/navbar/navbar-items.js +1 -1
  86. package/cjs/navbar/navbar-items.js.map +1 -1
  87. package/cjs/navbar/navbar-logo-data.js +1 -1
  88. package/cjs/navbar/navbar-logo-data.js.map +1 -1
  89. package/cjs/notification-banner/notification-banner-hoc.js +1 -1
  90. package/cjs/notification-banner/notification-banner-hoc.js.map +1 -1
  91. package/cjs/pagination/pagination.js +1 -1
  92. package/cjs/pagination/pagination.js.map +1 -1
  93. package/cjs/shared/dropdown-list/dropdown-label.js +1 -1
  94. package/cjs/shared/dropdown-list/dropdown-label.js.map +1 -1
  95. package/cjs/shared/fade-wrapper/fade-wrapper.js +1 -1
  96. package/cjs/shared/fade-wrapper/fade-wrapper.js.map +1 -1
  97. package/cjs/theme/index.js +1 -1
  98. package/cjs/theme/tokens/colour.js +1 -1
  99. package/cjs/theme/tokens/colour.js.map +1 -1
  100. package/cjs/theme/tokens/radius.js +1 -1
  101. package/cjs/theme/tokens/radius.js.map +1 -1
  102. package/cjs/theme/types.js +1 -1
  103. package/cjs/theme/types.js.map +1 -1
  104. package/codemods/run-codemod.js +8 -2
  105. package/codemods/run-codemod.js.map +1 -1
  106. package/codemods/run-codemod.ts +13 -4
  107. package/drawer/drawer.d.ts +1 -1
  108. package/drawer/drawer.js +1 -1
  109. package/drawer/drawer.js.map +1 -1
  110. package/drawer/drawer.styles.d.ts +3 -0
  111. package/drawer/drawer.styles.js +1 -1
  112. package/drawer/drawer.styles.js.map +1 -1
  113. package/{cjs/drawer/drawer.styles_94hx3y.css → drawer/drawer.styles_a4bwe0.css} +6 -3
  114. package/drawer/types.d.ts +7 -0
  115. package/file-download/file-download.d.ts +1 -1
  116. package/file-download/file-download.js +1 -1
  117. package/file-download/file-download.js.map +1 -1
  118. package/file-download/file-list-card/file-list-card.d.ts +1 -1
  119. package/file-download/file-list-card/file-list-card.js +1 -1
  120. package/file-download/file-list-card/file-list-card.js.map +1 -1
  121. package/file-download/file-list-card/file-list-card.styles.d.ts +2 -0
  122. package/file-download/file-list-card/file-list-card.styles.js +1 -1
  123. package/file-download/file-list-card/file-list-card.styles.js.map +1 -1
  124. package/file-download/file-list-card/file-list-card.styles_lzbqkk.css +18 -0
  125. package/file-download/file-list-card/types.d.ts +1 -0
  126. package/file-download/types.d.ts +13 -0
  127. package/file-upload/file-list/file-list.js +1 -1
  128. package/file-upload/file-list/file-list.js.map +1 -1
  129. package/file-upload/file-list/file-list.styles.d.ts +0 -1
  130. package/file-upload/file-list/file-list.styles.js +1 -1
  131. package/file-upload/file-list/file-list.styles.js.map +1 -1
  132. package/file-upload/file-list/file-list.styles_1xbypnh.css +2 -0
  133. package/file-upload/file-list-item/file-item-actions.d.ts +30 -0
  134. package/file-upload/file-list-item/file-item-actions.js +2 -0
  135. package/file-upload/file-list-item/file-item-actions.js.map +1 -0
  136. package/file-upload/file-list-item/file-item-actions.styles.d.ts +6 -0
  137. package/file-upload/file-list-item/file-item-actions.styles.js +2 -0
  138. package/file-upload/file-list-item/file-item-actions.styles.js.map +1 -0
  139. package/file-upload/file-list-item/file-item-actions.styles_1quulgy.css +8 -0
  140. package/file-upload/file-list-item/file-item-details.d.ts +15 -0
  141. package/file-upload/file-list-item/file-item-details.js +2 -0
  142. package/file-upload/file-list-item/file-item-details.js.map +1 -0
  143. package/file-upload/file-list-item/file-item-details.styles.d.ts +7 -0
  144. package/file-upload/file-list-item/file-item-details.styles.js +2 -0
  145. package/file-upload/file-list-item/file-item-details.styles.js.map +1 -0
  146. package/file-upload/file-list-item/file-item-details.styles_1ce9akx.css +7 -0
  147. package/file-upload/file-list-item/file-list-item.d.ts +1 -7
  148. package/file-upload/file-list-item/file-list-item.js +1 -1
  149. package/file-upload/file-list-item/file-list-item.js.map +1 -1
  150. package/file-upload/file-list-item/file-list-item.styles.d.ts +6 -13
  151. package/file-upload/file-list-item/file-list-item.styles.js +1 -1
  152. package/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  153. package/file-upload/file-list-item/file-list-item.styles_x3a500.css +10 -0
  154. package/file-upload/file-list-item/types.d.ts +10 -3
  155. package/file-upload/file-list-item/use-truncated-name.d.ts +1 -0
  156. package/file-upload/file-list-item/use-truncated-name.js +2 -0
  157. package/file-upload/file-list-item/use-truncated-name.js.map +1 -0
  158. package/file-upload/helper.d.ts +30 -0
  159. package/file-upload/helper.js +1 -1
  160. package/file-upload/helper.js.map +1 -1
  161. package/footer/footer-disclaimer-links-data.js +1 -1
  162. package/footer/footer-disclaimer-links-data.js.map +1 -1
  163. package/footer/footer.styles.js +1 -1
  164. package/footer/footer.styles.js.map +1 -1
  165. package/{cjs/footer/footer.styles_1msorhc.css → footer/footer.styles_14hnlcq.css} +4 -4
  166. package/fullscreen-image-carousel/fullscreen-image-carousel.d.ts +1 -1
  167. package/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
  168. package/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  169. package/fullscreen-image-carousel/types.d.ts +37 -0
  170. package/index.js +1 -1
  171. package/input-group/types.d.ts +4 -1
  172. package/input-select/types.d.ts +1 -0
  173. package/local-nav/local-nav-dropdown/local-nav-dropdown.js +1 -1
  174. package/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  175. package/local-nav/local-nav-dropdown/local-nav-dropdown.styles.d.ts +3 -0
  176. package/local-nav/local-nav-dropdown/local-nav-dropdown.styles.js +1 -1
  177. package/local-nav/local-nav-dropdown/local-nav-dropdown.styles.js.map +1 -1
  178. package/local-nav/local-nav-dropdown/{local-nav-dropdown.styles_uhd4xl.css → local-nav-dropdown.styles_kpel1m.css} +9 -6
  179. package/local-nav/local-nav-menu/local-nav-menu.js +1 -1
  180. package/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  181. package/local-nav/local-nav-menu/local-nav-menu.styles.d.ts +3 -0
  182. package/local-nav/local-nav-menu/local-nav-menu.styles.js +1 -1
  183. package/local-nav/local-nav-menu/local-nav-menu.styles.js.map +1 -1
  184. package/local-nav/local-nav-menu/local-nav-menu.styles_67fcyc.css +8 -0
  185. package/local-nav/types.d.ts +17 -0
  186. package/masked-input/types.d.ts +1 -2
  187. package/masthead/sgds-day.css +0 -1
  188. package/masthead/sgds-night.css +0 -1
  189. package/menu/menu-content.js +1 -1
  190. package/menu/menu-content.js.map +1 -1
  191. package/menu/menu-content.styles.d.ts +1 -0
  192. package/menu/menu-content.styles.js +1 -1
  193. package/menu/menu-content.styles.js.map +1 -1
  194. package/menu/menu-content.styles_1r8oxtk.css +5 -0
  195. package/menu/menu-item.styles.js +1 -1
  196. package/menu/menu-item.styles.js.map +1 -1
  197. package/menu/{menu-item.styles_liyed8.css → menu-item.styles_eut2j9.css} +1 -1
  198. package/menu/menu-link.styles.js +1 -1
  199. package/menu/menu-link.styles.js.map +1 -1
  200. package/menu/menu-link.styles_rng7n7.css +2 -0
  201. package/menu/menu-section.d.ts +1 -1
  202. package/menu/menu-section.js +1 -1
  203. package/menu/menu-section.js.map +1 -1
  204. package/menu/menu-section.styles.d.ts +7 -0
  205. package/menu/menu-section.styles.js +1 -1
  206. package/menu/menu-section.styles.js.map +1 -1
  207. package/menu/menu-section.styles_1n0ppxl.css +5 -0
  208. package/menu/menu.d.ts +1 -1
  209. package/menu/types.d.ts +10 -2
  210. package/navbar/navbar-items.js +1 -1
  211. package/navbar/navbar-items.js.map +1 -1
  212. package/navbar/navbar-logo-data.js +1 -1
  213. package/navbar/navbar-logo-data.js.map +1 -1
  214. package/navbar/types.d.ts +9 -0
  215. package/notification-banner/notification-banner-hoc.js +1 -1
  216. package/notification-banner/notification-banner-hoc.js.map +1 -1
  217. package/package.json +2 -3
  218. package/pagination/pagination.js +1 -1
  219. package/pagination/pagination.js.map +1 -1
  220. package/pagination/types.d.ts +8 -1
  221. package/select-histogram/types.d.ts +1 -0
  222. package/shared/dropdown-list/dropdown-label.d.ts +2 -2
  223. package/shared/dropdown-list/dropdown-label.js +1 -1
  224. package/shared/dropdown-list/dropdown-label.js.map +1 -1
  225. package/shared/dropdown-list/types.d.ts +6 -2
  226. package/shared/fade-wrapper/fade-wrapper.js +1 -1
  227. package/shared/fade-wrapper/fade-wrapper.js.map +1 -1
  228. package/shared/fade-wrapper/types.d.ts +1 -0
  229. package/shared/styles/index.d.ts +5 -0
  230. package/theme/index.js +1 -1
  231. package/theme/styles/a11y-playground.css +52 -40
  232. package/theme/styles/bookingsg.css +52 -40
  233. package/theme/styles/careercompass.css +52 -40
  234. package/theme/styles/ccube.css +52 -40
  235. package/theme/styles/imda.css +52 -40
  236. package/theme/styles/lifesg.css +52 -40
  237. package/theme/styles/mylegacy.css +52 -40
  238. package/theme/styles/oneservice.css +52 -40
  239. package/theme/styles/pa.css +28 -22
  240. package/theme/styles/rbs.css +52 -40
  241. package/theme/styles/sgw-digital-lobby.css +52 -40
  242. package/theme/styles/smgs.css +52 -40
  243. package/theme/styles/spf.css +28 -27
  244. package/theme/styles/sportsg-orange.css +791 -0
  245. package/theme/styles/supportgowhere.css +52 -40
  246. package/theme/styles/tote-board.css +52 -40
  247. package/theme/styles/vica.css +52 -40
  248. package/theme/styles/websg.css +52 -40
  249. package/theme/styles/wise.css +52 -40
  250. package/theme/styles/wogaa.css +52 -40
  251. package/theme/theme-provider/preset.d.ts +2 -0
  252. package/theme/tokens/colour.d.ts +6 -0
  253. package/theme/tokens/colour.js +1 -1
  254. package/theme/tokens/colour.js.map +1 -1
  255. package/theme/tokens/radius.d.ts +3 -0
  256. package/theme/tokens/radius.js +1 -1
  257. package/theme/tokens/radius.js.map +1 -1
  258. package/theme/types.d.ts +9 -3
  259. package/theme/types.js +1 -1
  260. package/theme/types.js.map +1 -1
  261. package/breadcrumb/breadcrumb.styles_1nl4aua.css +0 -18
  262. package/cjs/breadcrumb/breadcrumb.styles_1nl4aua.css +0 -18
  263. package/cjs/file-download/file-list-card/file-list-card.styles_18j2gut.css +0 -16
  264. package/cjs/file-upload/file-item-edit.js +0 -2
  265. package/cjs/file-upload/file-item-edit.js.map +0 -1
  266. package/cjs/file-upload/file-item-edit.styles.js +0 -2
  267. package/cjs/file-upload/file-item-edit.styles.js.map +0 -1
  268. package/cjs/file-upload/file-item-edit.styles_19bvztn.css +0 -11
  269. package/cjs/file-upload/file-list/file-list.styles_1w7so98.css +0 -3
  270. package/cjs/file-upload/file-list-item/file-list-item.styles_kgtfke.css +0 -17
  271. package/cjs/local-nav/local-nav-menu/local-nav-menu.styles_pq19dh.css +0 -5
  272. package/cjs/menu/menu-content.styles_p7ijll.css +0 -2
  273. package/cjs/menu/menu-link.styles_hfxoez.css +0 -2
  274. package/cjs/menu/menu-section.styles_g7my4d.css +0 -3
  275. package/file-download/file-list-card/file-list-card.styles_18j2gut.css +0 -16
  276. package/file-upload/file-item-edit.d.ts +0 -14
  277. package/file-upload/file-item-edit.js +0 -2
  278. package/file-upload/file-item-edit.js.map +0 -1
  279. package/file-upload/file-item-edit.styles.d.ts +0 -9
  280. package/file-upload/file-item-edit.styles.js +0 -2
  281. package/file-upload/file-item-edit.styles.js.map +0 -1
  282. package/file-upload/file-item-edit.styles_19bvztn.css +0 -11
  283. package/file-upload/file-list/file-list.styles_1w7so98.css +0 -3
  284. package/file-upload/file-list-item/file-list-item.styles_kgtfke.css +0 -17
  285. package/local-nav/local-nav-menu/local-nav-menu.styles_pq19dh.css +0 -5
  286. package/menu/menu-content.styles_p7ijll.css +0 -2
  287. package/menu/menu-link.styles_hfxoez.css +0 -2
  288. package/menu/menu-section.styles_g7my4d.css +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-label.js","sources":["../../../src/shared/dropdown-list/dropdown-label.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { Font } from \"../../theme\";\nimport { useApplyStyle } from \"../../theme/utils/use-apply-styles\";\nimport { StringHelper } from \"../../util/string-helper\";\nimport * as styles from \"./dropdown-label.styles\";\nimport type { DropdownVariantType, LabelDisplayType } from \"./types\";\n\ninterface DropdownLabelProps {\n bold?: boolean | undefined;\n displayType?: LabelDisplayType | undefined;\n label: string;\n maxLines?: number | undefined;\n searchTerm?: string | undefined;\n selected?: boolean | undefined;\n disabled?: boolean | undefined;\n sublabel?: string | undefined;\n truncationType?: \"middle\" | \"end\" | undefined;\n variant?: DropdownVariantType | undefined;\n}\n\nexport const DropdownLabel = ({\n bold,\n displayType = \"inline\",\n label,\n searchTerm,\n maxLines = 2,\n selected,\n disabled,\n sublabel,\n truncationType = \"middle\",\n variant = \"default\",\n}: DropdownLabelProps): JSX.Element => {\n const fontSize =\n variant === \"small\"\n ? Font.Spec[\"body-size-md\"]\n : Font.Spec[\"body-size-baseline\"];\n const fontFamily = Font.Spec[\"font-family-body\"];\n const { ref, width } = useResizeDetector();\n\n const primaryTextRef = useRef<HTMLDivElement>(null);\n const secondaryTextRef = useRef<HTMLDivElement>(null);\n\n useApplyStyle(primaryTextRef, {\n [styles.tokens.primaryText.maxLines]: String(maxLines),\n });\n\n useApplyStyle(secondaryTextRef, {\n [styles.tokens.secondaryText.maxLines]: String(maxLines),\n });\n\n // =========================================================================\n // HELPER FUNCTIONS\n // =========================================================================\n const hasExceededContainer = useCallback(\n (displayText: string) => {\n if (displayType !== \"inline\" || !width) {\n return false;\n }\n\n // best-effort attempt to check if multi-line text will overflow,\n // rendering an actual element in the DOM might be more accurate\n // but might not be performant for large lists\n const textWidth = StringHelper.getTextWidth(\n displayText,\n `${fontSize} '${fontFamily}'`\n );\n\n // there's less space than expected due to word breaks, so an\n // arbitary offset is applied\n return textWidth > width - 50;\n },\n [width, displayType, fontSize, fontFamily]\n );\n\n // =========================================================================\n // CONST, STATE, REFS\n // =========================================================================\n const shouldTruncateTitle = useMemo(\n () => hasExceededContainer(label),\n [hasExceededContainer, label]\n );\n const shouldTruncateLabel = useMemo(\n () => sublabel && hasExceededContainer(sublabel),\n [hasExceededContainer, sublabel]\n );\n\n // css cannot truncate inline elements so force the display to render\n // them separately\n const itemDisplayType =\n truncationType === \"middle\" &&\n (shouldTruncateTitle || shouldTruncateLabel)\n ? \"next-line\"\n : displayType;\n\n // =========================================================================\n // RENDER FUNCTIONS\n // =========================================================================\n const renderMatchInBold = (displayText: string) => {\n if (!searchTerm) {\n return displayText;\n }\n\n const match = searchTerm.toLowerCase().trim();\n const startIndex = displayText.toLowerCase().indexOf(match);\n const endIndex = startIndex + searchTerm.length;\n\n if (startIndex === -1) {\n return displayText;\n }\n\n return (\n <>\n {label.slice(0, startIndex)}\n <span className={styles.matchedText}>\n {label.slice(startIndex, endIndex)}\n </span>\n {label.slice(endIndex)}\n </>\n );\n };\n\n const renderTruncatedText = (displayText: string): JSX.Element => {\n return (\n <>\n <div\n className={clsx(\n styles.baseTruncateStyle,\n styles.truncateFirstLine,\n maxLines === 1 && styles.truncateLineSingle\n )}\n aria-hidden\n >\n {renderMatchInBold(displayText)}\n </div>\n <div\n className={clsx(\n styles.baseTruncateStyle,\n styles.truncateSecondLine,\n maxLines === 1 && styles.truncateLineSingle\n )}\n aria-hidden\n >\n {renderMatchInBold(displayText)}\n </div>\n </>\n );\n };\n\n return (\n <div\n ref={ref}\n className={clsx(\n styles.label,\n variant === \"small\" && styles.labelVariantSmall,\n itemDisplayType === \"next-line\" && styles.labelNextLine\n )}\n >\n <div\n ref={primaryTextRef}\n aria-label={label}\n className={clsx(\n styles.primaryText,\n bold && styles.primaryTextBold,\n disabled && styles.primaryTextDisabled,\n !disabled && selected && styles.primaryTextSelected,\n itemDisplayType === \"inline\" &&\n styles.primaryTextLabelInline,\n truncationType === \"end\" && styles.primaryTextTruncateEnd\n )}\n >\n {truncationType === \"middle\" && shouldTruncateTitle\n ? renderTruncatedText(label)\n : renderMatchInBold(label)}\n </div>\n {sublabel && (\n <div\n ref={secondaryTextRef}\n aria-label={sublabel}\n className={clsx(\n styles.secondaryText,\n itemDisplayType === \"inline\" &&\n styles.secondaryTextLabelInline,\n truncationType === \"end\" &&\n styles.secondaryTextTruncateEnd,\n displayType === \"next-line\"\n ? styles.secondaryTextNextLine\n : styles.secondaryTextInline\n )}\n >\n {truncationType === \"middle\" && shouldTruncateLabel\n ? renderTruncatedText(sublabel)\n : sublabel}\n </div>\n )}\n </div>\n );\n};\n"],"names":["DropdownLabel","bold","displayType","label","searchTerm","maxLines","selected","disabled","sublabel","truncationType","variant","fontSize","Font","Spec","fontFamily","ref","width","useResizeDetector","primaryTextRef","useRef","secondaryTextRef","useApplyStyle","styles.tokens","primaryText","String","secondaryText","hasExceededContainer","useCallback","displayText","StringHelper","getTextWidth","shouldTruncateTitle","useMemo","shouldTruncateLabel","itemDisplayType","renderMatchInBold","match","toLowerCase","trim","startIndex","indexOf","endIndex","length","_jsxs","_Fragment","children","slice","_jsx","className","styles.matchedText","renderTruncatedText","clsx","styles.baseTruncateStyle","styles.truncateFirstLine","styles.truncateLineSingle","styles.truncateSecondLine","styles.label","styles.labelVariantSmall","styles.labelNextLine","styles.primaryText","styles.primaryTextBold","styles.primaryTextDisabled","styles.primaryTextSelected","styles.primaryTextLabelInline","styles.primaryTextTruncateEnd","styles.secondaryText","styles.secondaryTextLabelInline","styles.secondaryTextTruncateEnd","styles.secondaryTextNextLine","styles.secondaryTextInline"],"mappings":"soCAuBO,MAAMA,EAAgB,EACzBC,OACAC,cAAc,SAAQC,MACtBA,EACAC,aACAC,WAAW,EACXC,WACAC,WACAC,WACAC,iBAAiB,SACjBC,UAAU,cAEV,MAAMC,EACU,UAAZD,EACME,EAAKC,KAAK,gBACVD,EAAKC,KAAK,sBACdC,EAAaF,EAAKC,KAAK,qBACvBE,IAAEA,EAAGC,MAAEA,GAAUC,IAEjBC,EAAiBC,EAAuB,MACxCC,EAAmBD,EAAuB,MAEhDE,EAAcH,EAAgB,CAC1B,CAACI,EAAcC,YAAYlB,UAAWmB,OAAOnB,KAGjDgB,EAAcD,EAAkB,CAC5B,CAACE,EAAcG,cAAcpB,UAAWmB,OAAOnB,KAMnD,MAAMqB,EAAuBC,GACxBC,IACG,GAAoB,WAAhB1B,IAA6Bc,EAC7B,OAAO,EAaX,OAPkBa,EAAaC,aAC3BF,EACA,GAAGjB,MAAaG,MAKDE,EAAQ,EAAE,GAEjC,CAACA,EAAOd,EAAaS,EAAUG,IAM7BiB,EAAsBC,GACxB,IAAMN,EAAqBvB,IAC3B,CAACuB,EAAsBvB,IAErB8B,EAAsBD,GACxB,IAAMxB,GAAYkB,EAAqBlB,IACvC,CAACkB,EAAsBlB,IAKrB0B,EACiB,WAAnBzB,IACCsB,GAAuBE,GAClB,YACA/B,EAKJiC,EAAqBP,IACvB,IAAKxB,EACD,OAAOwB,EAGX,MAAMQ,EAAQhC,EAAWiC,cAAcC,OACjCC,EAAaX,EAAYS,cAAcG,QAAQJ,GAC/CK,EAAWF,EAAanC,EAAWsC,OAEzC,OAAmB,IAAfH,EACOX,EAIPe,EAAAC,EAAA,CAAAC,SAAA,CACK1C,EAAM2C,MAAM,EAAGP,GAChBQ,EAAA,OAAA,CAAMC,UAAWC,EAAkBJ,SAC9B1C,EAAM2C,MAAMP,EAAYE,KAE5BtC,EAAM2C,MAAML,KACd,EAILS,EAAuBtB,GAErBe,EAAAC,EAAA,CAAAC,SAAA,CACIE,EAAA,MAAA,CACIC,UAAWG,EACPC,EACAC,EACa,IAAbhD,GAAkBiD,GACrB,eAAA,EAAAT,SAGAV,EAAkBP,KAEvBmB,EAAA,MAAA,CACIC,UAAWG,EACPC,EACAG,EACa,IAAblD,GAAkBiD,GACrB,eAAA,EAAAT,SAGAV,EAAkBP,QAMnC,OACIe,EAAA,MAAA,CACI5B,IAAKA,EACLiC,UAAWG,EACPK,EACY,UAAZ9C,GAAuB+C,EACH,cAApBvB,GAAmCwB,GACtCb,SAAA,CAEDE,SACIhC,IAAKG,EAAc,aACPf,EACZ6C,UAAWG,EACPQ,EACA1D,GAAQ2D,EACRrD,GAAYsD,GACXtD,GAAYD,GAAYwD,EACL,WAApB5B,GACI6B,EACe,QAAnBtD,GAA4BuD,GAC/BnB,SAEmB,WAAnBpC,GAA+BsB,EAC1BmB,EAAoB/C,GACpBgC,EAAkBhC,KAE3BK,GACGuC,EAAA,MAAA,CACIhC,IAAKK,EAAgB,aACTZ,EACZwC,UAAWG,EACPc,EACoB,WAApB/B,GACIgC,EACe,QAAnBzD,GACI0D,EACY,cAAhBjE,EACMkE,EACAC,YAGU,WAAnB5D,GAA+BwB,EAC1BiB,EAAoB1C,GACpBA,MAGZ"}
1
+ {"version":3,"file":"dropdown-label.js","sources":["../../../src/shared/dropdown-list/dropdown-label.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { Font } from \"../../theme\";\nimport { useApplyStyle } from \"../../theme/utils/use-apply-styles\";\nimport { StringHelper } from \"../../util/string-helper\";\nimport * as styles from \"./dropdown-label.styles\";\nimport type {\n DropdownVariantType,\n LabelDisplayType,\n TruncateType,\n} from \"./types\";\n\ninterface DropdownLabelProps {\n bold?: boolean | undefined;\n displayType?: LabelDisplayType | undefined;\n label: string;\n maxLines?: number | undefined;\n searchTerm?: string | undefined;\n selected?: boolean | undefined;\n disabled?: boolean | undefined;\n sublabel?: string | undefined;\n truncationType?: TruncateType | undefined;\n variant?: DropdownVariantType | undefined;\n}\n\nexport const DropdownLabel = ({\n bold,\n displayType = \"inline\",\n label,\n searchTerm,\n maxLines = 2,\n selected,\n disabled,\n sublabel,\n truncationType = \"middle\",\n variant = \"default\",\n}: DropdownLabelProps): JSX.Element => {\n const fontSize =\n variant === \"small\"\n ? Font.Spec[\"body-size-md\"]\n : Font.Spec[\"body-size-baseline\"];\n const fontFamily = Font.Spec[\"font-family-body\"];\n const { ref, width } = useResizeDetector();\n\n const noTruncation = truncationType === \"none\";\n\n const primaryTextRef = useRef<HTMLDivElement>(null);\n const secondaryTextRef = useRef<HTMLDivElement>(null);\n\n useApplyStyle(primaryTextRef, {\n [styles.tokens.primaryText.maxLines]: noTruncation\n ? null\n : String(maxLines),\n });\n\n useApplyStyle(secondaryTextRef, {\n [styles.tokens.secondaryText.maxLines]: noTruncation\n ? null\n : String(maxLines),\n });\n\n // =========================================================================\n // HELPER FUNCTIONS\n // =========================================================================\n const hasExceededContainer = useCallback(\n (displayText: string) => {\n if (noTruncation || displayType !== \"inline\" || !width) {\n return false;\n }\n\n // best-effort attempt to check if multi-line text will overflow,\n // rendering an actual element in the DOM might be more accurate\n // but might not be performant for large lists\n const textWidth = StringHelper.getTextWidth(\n displayText,\n `${fontSize} '${fontFamily}'`\n );\n\n // there's less space than expected due to word breaks, so an\n // arbitary offset is applied\n return textWidth > width - 50;\n },\n [noTruncation, width, displayType, fontSize, fontFamily]\n );\n\n // =========================================================================\n // CONST, STATE, REFS\n // =========================================================================\n const shouldTruncateTitle = useMemo(\n () => hasExceededContainer(label),\n [hasExceededContainer, label]\n );\n const shouldTruncateLabel = useMemo(\n () => sublabel && hasExceededContainer(sublabel),\n [hasExceededContainer, sublabel]\n );\n\n // css cannot truncate inline elements so force the display to render\n // them separately\n const itemDisplayType =\n truncationType === \"middle\" &&\n (shouldTruncateTitle || shouldTruncateLabel)\n ? \"next-line\"\n : displayType;\n\n // =========================================================================\n // RENDER FUNCTIONS\n // =========================================================================\n const renderMatchInBold = (displayText: string) => {\n if (!searchTerm) {\n return displayText;\n }\n\n const match = searchTerm.toLowerCase().trim();\n const startIndex = displayText.toLowerCase().indexOf(match);\n const endIndex = startIndex + searchTerm.length;\n\n if (startIndex === -1) {\n return displayText;\n }\n\n return (\n <>\n {label.slice(0, startIndex)}\n <span className={styles.matchedText}>\n {label.slice(startIndex, endIndex)}\n </span>\n {label.slice(endIndex)}\n </>\n );\n };\n\n const renderTruncatedText = (displayText: string): JSX.Element => {\n return (\n <>\n <div\n className={clsx(\n styles.baseTruncateStyle,\n styles.truncateFirstLine,\n maxLines === 1 && styles.truncateLineSingle\n )}\n aria-hidden\n >\n {renderMatchInBold(displayText)}\n </div>\n <div\n className={clsx(\n styles.baseTruncateStyle,\n styles.truncateSecondLine,\n maxLines === 1 && styles.truncateLineSingle\n )}\n aria-hidden\n >\n {renderMatchInBold(displayText)}\n </div>\n </>\n );\n };\n\n return (\n <div\n ref={ref}\n className={clsx(\n styles.label,\n variant === \"small\" && styles.labelVariantSmall,\n itemDisplayType === \"next-line\" && styles.labelNextLine\n )}\n >\n <div\n ref={primaryTextRef}\n aria-label={label}\n className={clsx(\n styles.primaryText,\n bold && styles.primaryTextBold,\n disabled && styles.primaryTextDisabled,\n !disabled && selected && styles.primaryTextSelected,\n itemDisplayType === \"inline\" &&\n styles.primaryTextLabelInline,\n truncationType === \"end\" && styles.primaryTextTruncateEnd\n )}\n >\n {truncationType === \"middle\" && shouldTruncateTitle\n ? renderTruncatedText(label)\n : renderMatchInBold(label)}\n </div>\n {sublabel && (\n <div\n ref={secondaryTextRef}\n aria-label={sublabel}\n className={clsx(\n styles.secondaryText,\n itemDisplayType === \"inline\" &&\n styles.secondaryTextLabelInline,\n truncationType === \"end\" &&\n styles.secondaryTextTruncateEnd,\n displayType === \"next-line\"\n ? styles.secondaryTextNextLine\n : styles.secondaryTextInline\n )}\n >\n {truncationType === \"middle\" && shouldTruncateLabel\n ? renderTruncatedText(sublabel)\n : sublabel}\n </div>\n )}\n </div>\n );\n};\n"],"names":["DropdownLabel","bold","displayType","label","searchTerm","maxLines","selected","disabled","sublabel","truncationType","variant","fontSize","Font","Spec","fontFamily","ref","width","useResizeDetector","noTruncation","primaryTextRef","useRef","secondaryTextRef","useApplyStyle","styles.tokens","primaryText","String","secondaryText","hasExceededContainer","useCallback","displayText","StringHelper","getTextWidth","shouldTruncateTitle","useMemo","shouldTruncateLabel","itemDisplayType","renderMatchInBold","match","toLowerCase","trim","startIndex","indexOf","endIndex","length","_jsxs","_Fragment","children","slice","_jsx","className","styles.matchedText","renderTruncatedText","clsx","styles.baseTruncateStyle","styles.truncateFirstLine","styles.truncateLineSingle","styles.truncateSecondLine","styles.label","styles.labelVariantSmall","styles.labelNextLine","styles.primaryText","styles.primaryTextBold","styles.primaryTextDisabled","styles.primaryTextSelected","styles.primaryTextLabelInline","styles.primaryTextTruncateEnd","styles.secondaryText","styles.secondaryTextLabelInline","styles.secondaryTextTruncateEnd","styles.secondaryTextNextLine","styles.secondaryTextInline"],"mappings":"soCA2BO,MAAMA,EAAgB,EACzBC,OACAC,cAAc,SAAQC,MACtBA,EACAC,aACAC,WAAW,EACXC,WACAC,WACAC,WACAC,iBAAiB,SACjBC,UAAU,cAEV,MAAMC,EACU,UAAZD,EACME,EAAKC,KAAK,gBACVD,EAAKC,KAAK,sBACdC,EAAaF,EAAKC,KAAK,qBACvBE,IAAEA,EAAGC,MAAEA,GAAUC,IAEjBC,EAAkC,SAAnBT,EAEfU,EAAiBC,EAAuB,MACxCC,EAAmBD,EAAuB,MAEhDE,EAAcH,EAAgB,CAC1B,CAACI,EAAcC,YAAYnB,UAAWa,EAChC,KACAO,OAAOpB,KAGjBiB,EAAcD,EAAkB,CAC5B,CAACE,EAAcG,cAAcrB,UAAWa,EAClC,KACAO,OAAOpB,KAMjB,MAAMsB,EAAuBC,GACxBC,IACG,GAAIX,GAAgC,WAAhBhB,IAA6Bc,EAC7C,OAAO,EAaX,OAPkBc,EAAaC,aAC3BF,EACA,GAAGlB,MAAaG,MAKDE,EAAQ,EAAE,GAEjC,CAACE,EAAcF,EAAOd,EAAaS,EAAUG,IAM3CkB,EAAsBC,GACxB,IAAMN,EAAqBxB,IAC3B,CAACwB,EAAsBxB,IAErB+B,EAAsBD,GACxB,IAAMzB,GAAYmB,EAAqBnB,IACvC,CAACmB,EAAsBnB,IAKrB2B,EACiB,WAAnB1B,IACCuB,GAAuBE,GAClB,YACAhC,EAKJkC,EAAqBP,IACvB,IAAKzB,EACD,OAAOyB,EAGX,MAAMQ,EAAQjC,EAAWkC,cAAcC,OACjCC,EAAaX,EAAYS,cAAcG,QAAQJ,GAC/CK,EAAWF,EAAapC,EAAWuC,OAEzC,OAAmB,IAAfH,EACOX,EAIPe,EAAAC,EAAA,CAAAC,SAAA,CACK3C,EAAM4C,MAAM,EAAGP,GAChBQ,EAAA,OAAA,CAAMC,UAAWC,EAAkBJ,SAC9B3C,EAAM4C,MAAMP,EAAYE,KAE5BvC,EAAM4C,MAAML,KACd,EAILS,EAAuBtB,GAErBe,EAAAC,EAAA,CAAAC,SAAA,CACIE,EAAA,MAAA,CACIC,UAAWG,EACPC,EACAC,EACa,IAAbjD,GAAkBkD,GACrB,eAAA,EAAAT,SAGAV,EAAkBP,KAEvBmB,EAAA,MAAA,CACIC,UAAWG,EACPC,EACAG,EACa,IAAbnD,GAAkBkD,GACrB,eAAA,EAAAT,SAGAV,EAAkBP,QAMnC,OACIe,EAAA,MAAA,CACI7B,IAAKA,EACLkC,UAAWG,EACPK,EACY,UAAZ/C,GAAuBgD,EACH,cAApBvB,GAAmCwB,GACtCb,SAAA,CAEDE,SACIjC,IAAKI,EAAc,aACPhB,EACZ8C,UAAWG,EACPQ,EACA3D,GAAQ4D,EACRtD,GAAYuD,GACXvD,GAAYD,GAAYyD,EACL,WAApB5B,GACI6B,EACe,QAAnBvD,GAA4BwD,GAC/BnB,SAEmB,WAAnBrC,GAA+BuB,EAC1BmB,EAAoBhD,GACpBiC,EAAkBjC,KAE3BK,GACGwC,EAAA,MAAA,CACIjC,IAAKM,EAAgB,aACTb,EACZyC,UAAWG,EACPc,EACoB,WAApB/B,GACIgC,EACe,QAAnB1D,GACI2D,EACY,cAAhBlE,EACMmE,EACAC,YAGU,WAAnB7D,GAA+ByB,EAC1BiB,EAAoB3C,GACpBA,MAGZ"}
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * - `"middle"` trims the centre of the text.
5
5
  * - `"end"` trims from the right.
6
+ * - `"none"` disables truncation, the text wraps and is displayed in full.
6
7
  */
7
- export type TruncateType = "middle" | "end";
8
+ export type TruncateType = "middle" | "end" | "none";
8
9
  /**
9
10
  * Async load state for dropdown items.
10
11
  *
@@ -84,7 +85,10 @@ export interface DropdownConfigProps {
84
85
  itemsLoadState?: ItemsLoadStateType | undefined;
85
86
  /** How overflowing item text is truncated. */
86
87
  itemTruncationType?: TruncateType | undefined;
87
- /** Maximum visible lines before the label is truncated (applies to `"end"` truncation). */
88
+ /**
89
+ * Maximum visible lines before the label is truncated (applies to `"end"`
90
+ * truncation). Ignored when `itemTruncationType` is `"none"`.
91
+ */
88
92
  itemMaxLines?: number | undefined;
89
93
  /** Visual size variant for the dropdown items. */
90
94
  variant?: DropdownVariantType | undefined;
@@ -1,2 +1,2 @@
1
- import{__rest as e}from"../../_virtual/_tslib.js";import{jsxs as r,jsx as t,Fragment as o}from"react/jsx-runtime";import{ChevronLeftIcon as i}from"@lifesg/react-icons/chevron-left";import{ChevronRightIcon as s}from"@lifesg/react-icons/chevron-right";import l from"clsx";import n from"../../external/lodash/throttle.js";import{forwardRef as c,useState as a,useRef as d,useImperativeHandle as m,useCallback as f,useMemo as h,useEffect as p}from"react";import{useResizeDetector as u}from"../../external/react-resize-detector/build/index.esm.js";import"../../theme/theme-provider/index.js";import"../../theme/theme-provider/context.js";import"../../theme/tokens/border.js";import"../../theme/tokens/colour.js";import"../../theme/tokens/font.js";import"../../theme/tokens/media-query.js";import{useApplyStyle as j}from"../../theme/utils/use-apply-styles.js";import"../../theme/utils/use-media-query.js";import{ClickableIcon as b}from"../clickable-icon/clickable-icon.js";import{tokens as v,wrapper as g,content as k,fadeIndicatorButton as x,indicatorLeft as N,fade as y,fadeLeft as z,indicatorRight as R,fadeRight as w}from"./fade-wrapper.styles.js";import{getFadeColorSet as C,getFadeBackgroundColorValue as L}from"./helpers.js";const W=c(((c,W)=>{var{children:q,className:E,fadeColor:I,fadePosition:M="both",showIndicator:P=!1,onResize:_}=c,O=e(c,["children","className","fadeColor","fadePosition","showIndicator","onResize"]);const[A,B]=a("left"===M||"both"===M),[D,F]=a("right"===M||"both"===M),G=d(null),H=d(null),J=d(null),K=d(null),Q=C(I);j(J,{[v.backgroundColor]:L(Q.left,P)}),j(K,{[v.backgroundColor]:L(Q.right,P)}),u({onResize:U,targetRef:G,refreshMode:"debounce",refreshRate:50}),m(W,(()=>({resize(){U()}})));const S=f((()=>{const e=G.current,r=H.current;e&&r&&r.scrollWidth>e.offsetWidth?(F(Math.round(r.scrollLeft)<r.scrollWidth-r.offsetWidth),B(r.scrollLeft>=1)):(F(!1),B(!1))}),[]),T=h((()=>n(S,50)),[S]);function U(){S(),_&&_({content:H.current,wrapper:G.current})}p((()=>{const e=H.current;return S(),e&&e.addEventListener("scroll",T),()=>{e&&e.removeEventListener("scroll",T),T.cancel()}}),[S,T]);return r("div",Object.assign({ref:G,className:l(g,E)},O,{children:[t("div",{ref:H,className:k,children:q}),r(o,{children:[A&&t("div",{ref:J,className:l(y,z),"data-id":"left-fade",children:P&&t(b,{className:l(x,N),"data-id":"left-fade-indicator-button",children:t(i,{})})}),D&&t("div",{ref:K,className:l(y,w),"data-id":"right-fade",children:P&&t(b,{className:l(x,R),"data-id":"right-fade-indicator-button",children:t(s,{})})})]})]}))}));export{W as FadeWrapper};
1
+ import{__rest as e}from"../../_virtual/_tslib.js";import{jsxs as r,jsx as t,Fragment as o}from"react/jsx-runtime";import{ChevronLeftIcon as i}from"@lifesg/react-icons/chevron-left";import{ChevronRightIcon as s}from"@lifesg/react-icons/chevron-right";import l from"clsx";import n from"../../external/lodash/throttle.js";import{forwardRef as c,useState as a,useRef as d,useImperativeHandle as m,useCallback as f,useMemo as h,useEffect as u}from"react";import{useResizeDetector as p}from"../../external/react-resize-detector/build/index.esm.js";import"../../theme/theme-provider/index.js";import"../../theme/theme-provider/context.js";import"../../theme/tokens/border.js";import"../../theme/tokens/colour.js";import"../../theme/tokens/font.js";import"../../theme/tokens/media-query.js";import{useApplyStyle as j}from"../../theme/utils/use-apply-styles.js";import"../../theme/utils/use-media-query.js";import{ClickableIcon as b}from"../clickable-icon/clickable-icon.js";import{tokens as v,wrapper as g,content as k,fadeIndicatorButton as x,indicatorLeft as N,fade as W,fadeLeft as y,indicatorRight as z,fadeRight as L}from"./fade-wrapper.styles.js";import{getFadeColorSet as R,getFadeBackgroundColorValue as w}from"./helpers.js";const C=c(((c,C)=>{var{children:E,className:q,fadeColor:I,fadePosition:M="both",showIndicator:P=!1,onResize:_}=c,O=e(c,["children","className","fadeColor","fadePosition","showIndicator","onResize"]);const[T,A]=a("left"===M||"both"===M),[B,D]=a("right"===M||"both"===M),F=d(null),G=d(null),H=d(null),J=d(null),K=R(I);j(H,{[v.backgroundColor]:w(K.left,P)}),j(J,{[v.backgroundColor]:w(K.right,P)}),p({onResize:U,targetRef:F,refreshMode:"debounce",refreshRate:50}),m(C,(()=>({resize(){U()},scrollToEnd(){const e=G.current,r=F.current;e&&r&&(e.scrollLeft=e.scrollWidth-r.offsetWidth)}})));const Q=f((()=>{const e=F.current,r=G.current;e&&r&&r.scrollWidth>e.offsetWidth?(D(Math.round(r.scrollLeft)<r.scrollWidth-r.offsetWidth),A(r.scrollLeft>=1)):(D(!1),A(!1))}),[]),S=h((()=>n(Q,50)),[Q]);function U(){Q(),_&&_({content:G.current,wrapper:F.current})}u((()=>{const e=G.current;return Q(),e&&e.addEventListener("scroll",S),()=>{e&&e.removeEventListener("scroll",S),S.cancel()}}),[Q,S]);return r("div",Object.assign({ref:F,className:l(g,q)},O,{children:[t("div",{ref:G,className:k,children:E}),r(o,{children:[T&&t("div",{ref:H,className:l(W,y),"data-id":"left-fade",children:P&&t(b,{className:l(x,N),"data-id":"left-fade-indicator-button",children:t(i,{})})}),B&&t("div",{ref:J,className:l(W,L),"data-id":"right-fade",children:P&&t(b,{className:l(x,z),"data-id":"right-fade-indicator-button",children:t(s,{})})})]})]}))}));export{C as FadeWrapper};
2
2
  //# sourceMappingURL=fade-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fade-wrapper.js","sources":["../../../src/shared/fade-wrapper/fade-wrapper.tsx"],"sourcesContent":["import { ChevronLeftIcon } from \"@lifesg/react-icons/chevron-left\";\nimport { ChevronRightIcon } from \"@lifesg/react-icons/chevron-right\";\nimport clsx from \"clsx\";\nimport throttle from \"lodash/throttle\";\nimport type React from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { useApplyStyle } from \"../../theme\";\nimport { ClickableIcon } from \"../clickable-icon\";\nimport * as styles from \"./fade-wrapper.styles\";\nimport { getFadeBackgroundColorValue, getFadeColorSet } from \"./helpers\";\nimport type { FadeWrapperProps, FadeWrapperRef } from \"./types\";\n\nconst Component = (\n {\n children,\n className,\n fadeColor,\n fadePosition = \"both\",\n showIndicator = false,\n onResize,\n ...otherProps\n }: FadeWrapperProps,\n ref: React.Ref<FadeWrapperRef>\n) => {\n // =========================================================================\n // CONST, STATE, REFS\n // =========================================================================\n const [showFadeLeft, setShowFadeLeft] = useState<boolean>(\n fadePosition === \"left\" || fadePosition === \"both\"\n );\n const [showFadeRight, setShowFadeRight] = useState<boolean>(\n fadePosition === \"right\" || fadePosition === \"both\"\n );\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const fadeLeftRef = useRef<HTMLDivElement>(null);\n const fadeRightRef = useRef<HTMLDivElement>(null);\n\n const fadeColorSet = getFadeColorSet(fadeColor);\n\n useApplyStyle(fadeLeftRef, {\n [styles.tokens.backgroundColor]: getFadeBackgroundColorValue(\n fadeColorSet.left,\n showIndicator\n ),\n });\n useApplyStyle(fadeRightRef, {\n [styles.tokens.backgroundColor]: getFadeBackgroundColorValue(\n fadeColorSet.right,\n showIndicator\n ),\n });\n\n // To scroll left when wrapper resizes\n useResizeDetector({\n onResize: handleResize,\n targetRef: wrapperRef,\n refreshMode: \"debounce\",\n refreshRate: 50,\n });\n\n useImperativeHandle(ref, () => {\n return {\n resize() {\n handleResize();\n },\n };\n });\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n const handleScroll = useCallback(() => {\n const wrapper = wrapperRef.current;\n const content = contentRef.current;\n\n if (wrapper && content && content.scrollWidth > wrapper.offsetWidth) {\n /**\n * NOTE: Used Math.round because we observe a 0.5 difference\n * even when we scroll to the end. This causes the fade right\n * to not be removed\n */\n setShowFadeRight(\n Math.round(content.scrollLeft) <\n content.scrollWidth - content.offsetWidth\n );\n setShowFadeLeft(content.scrollLeft >= 1);\n } else {\n setShowFadeRight(false);\n setShowFadeLeft(false);\n }\n }, []);\n\n const throttledScrollHandler = useMemo(() => {\n return throttle(handleScroll, 50);\n }, [handleScroll]);\n\n useEffect(() => {\n const content = contentRef.current;\n\n handleScroll();\n\n if (content) {\n content.addEventListener(\"scroll\", throttledScrollHandler);\n }\n\n return () => {\n if (content) {\n content.removeEventListener(\"scroll\", throttledScrollHandler);\n }\n\n throttledScrollHandler.cancel();\n };\n }, [handleScroll, throttledScrollHandler]);\n\n // =========================================================================\n // EVENT HANDLERS\n // =========================================================================\n\n function handleResize() {\n handleScroll();\n\n if (onResize) {\n onResize({\n content: contentRef.current!,\n wrapper: wrapperRef.current!,\n });\n }\n\n // TODO: Will move this out to Breadcrumb when it uses this component\n // if (content && wrapper && window.innerWidth <= MediaWidths.tablet) {\n // content.scrollLeft = content.scrollWidth - wrapper.offsetWidth;\n // }\n }\n\n // =========================================================================\n // RENDER FUNCTIONS\n // =========================================================================\n const renderFade = () => {\n return (\n <>\n {showFadeLeft && (\n <div\n ref={fadeLeftRef}\n className={clsx(styles.fade, styles.fadeLeft)}\n data-id=\"left-fade\"\n >\n {showIndicator && (\n <ClickableIcon\n className={clsx(\n styles.fadeIndicatorButton,\n styles.indicatorLeft\n )}\n data-id=\"left-fade-indicator-button\"\n >\n <ChevronLeftIcon />\n </ClickableIcon>\n )}\n </div>\n )}\n {showFadeRight && (\n <div\n ref={fadeRightRef}\n className={clsx(styles.fade, styles.fadeRight)}\n data-id=\"right-fade\"\n >\n {showIndicator && (\n <ClickableIcon\n className={clsx(\n styles.fadeIndicatorButton,\n styles.indicatorRight\n )}\n data-id=\"right-fade-indicator-button\"\n >\n <ChevronRightIcon />\n </ClickableIcon>\n )}\n </div>\n )}\n </>\n );\n };\n\n return (\n <div\n ref={wrapperRef}\n className={clsx(styles.wrapper, className)}\n {...otherProps}\n >\n <div ref={contentRef} className={styles.content}>\n {children}\n </div>\n {renderFade()}\n </div>\n );\n};\n\nexport const FadeWrapper = forwardRef(Component);\n"],"names":["FadeWrapper","forwardRef","_a","ref","children","className","fadeColor","fadePosition","showIndicator","onResize","otherProps","__rest","showFadeLeft","setShowFadeLeft","useState","showFadeRight","setShowFadeRight","wrapperRef","useRef","contentRef","fadeLeftRef","fadeRightRef","fadeColorSet","getFadeColorSet","useApplyStyle","styles.tokens","backgroundColor","getFadeBackgroundColorValue","left","right","useResizeDetector","handleResize","targetRef","refreshMode","refreshRate","useImperativeHandle","resize","handleScroll","useCallback","wrapper","current","content","scrollWidth","offsetWidth","Math","round","scrollLeft","throttledScrollHandler","useMemo","throttle","useEffect","addEventListener","removeEventListener","cancel","_jsxs","Object","assign","clsx","styles.wrapper","_jsx","styles.content","styles.fade","styles.fadeLeft","ClickableIcon","styles.fadeIndicatorButton","styles.indicatorLeft","ChevronLeftIcon","styles.fadeRight","styles.indicatorRight","ChevronRightIcon"],"mappings":"ysCAsBA,MA0LaA,EAAcC,GA1LT,CACdC,EASAC,SATAC,SACIA,EAAQC,UACRA,EAASC,UACTA,EAASC,aACTA,EAAe,OAAMC,cACrBA,GAAgB,EAAKC,SACrBA,GAAQP,EACLQ,EAAUC,EAAAT,EAPjB,gFAcA,MAAOU,EAAcC,GAAmBC,EACnB,SAAjBP,GAA4C,SAAjBA,IAExBQ,EAAeC,GAAoBF,EACrB,UAAjBP,GAA6C,SAAjBA,GAG1BU,EAAaC,EAAuB,MACpCC,EAAaD,EAAuB,MACpCE,EAAcF,EAAuB,MACrCG,EAAeH,EAAuB,MAEtCI,EAAeC,EAAgBjB,GAErCkB,EAAcJ,EAAa,CACvB,CAACK,EAAcC,iBAAkBC,EAC7BL,EAAaM,KACbpB,KAGRgB,EAAcH,EAAc,CACxB,CAACI,EAAcC,iBAAkBC,EAC7BL,EAAaO,MACbrB,KAKRsB,EAAkB,CACdrB,SAAUsB,EACVC,UAAWf,EACXgB,YAAa,WACbC,YAAa,KAGjBC,EAAoBhC,GAAK,KACd,CACH,MAAAiC,GACIL,GACJ,MAOR,MAAMM,EAAeC,GAAY,KAC7B,MAAMC,EAAUtB,EAAWuB,QACrBC,EAAUtB,EAAWqB,QAEvBD,GAAWE,GAAWA,EAAQC,YAAcH,EAAQI,aAMpD3B,EACI4B,KAAKC,MAAMJ,EAAQK,YACfL,EAAQC,YAAcD,EAAQE,aAEtC9B,EAAgB4B,EAAQK,YAAc,KAEtC9B,GAAiB,GACjBH,GAAgB,GACpB,GACD,IAEGkC,EAAyBC,GAAQ,IAC5BC,EAASZ,EAAc,KAC/B,CAACA,IAwBJ,SAASN,IACLM,IAEI5B,GACAA,EAAS,CACLgC,QAAStB,EAAWqB,QACpBD,QAAStB,EAAWuB,SAQhC,CApCAU,GAAU,KACN,MAAMT,EAAUtB,EAAWqB,QAQ3B,OANAH,IAEII,GACAA,EAAQU,iBAAiB,SAAUJ,GAGhC,KACCN,GACAA,EAAQW,oBAAoB,SAAUL,GAG1CA,EAAuBM,QAAQ,CAClC,GACF,CAAChB,EAAcU,IAsElB,OACIO,EAAA,MAAAC,OAAAC,OAAA,CACIrD,IAAKc,EACLZ,UAAWoD,EAAKC,EAAgBrD,IAC5BK,EAAU,CAAAN,SAAA,CAEduD,EAAA,MAAA,CAAKxD,IAAKgB,EAAYd,UAAWuD,EAAcxD,SAC1CA,IAlDLkD,eACK1C,GACG+C,EAAA,MAAA,CACIxD,IAAKiB,EACLf,UAAWoD,EAAKI,EAAaC,GAAgB,UACrC,YAAW1D,SAElBI,GACGmD,EAACI,EAAa,CACV1D,UAAWoD,EACPO,EACAC,GACH,UACO,6BAA4B7D,SAEpCuD,EAACO,EAAe,CAAA,OAK/BnD,GACG4C,EAAA,MAAA,CACIxD,IAAKkB,EACLhB,UAAWoD,EAAKI,EAAaM,aACrB,aAAY/D,SAEnBI,GACGmD,EAACI,EAAa,CACV1D,UAAWoD,EACPO,EACAI,aAEI,8BAA6BhE,SAErCuD,EAACU,EAAgB,CAAA,aAmBnC"}
1
+ {"version":3,"file":"fade-wrapper.js","sources":["../../../src/shared/fade-wrapper/fade-wrapper.tsx"],"sourcesContent":["import { ChevronLeftIcon } from \"@lifesg/react-icons/chevron-left\";\nimport { ChevronRightIcon } from \"@lifesg/react-icons/chevron-right\";\nimport clsx from \"clsx\";\nimport throttle from \"lodash/throttle\";\nimport type React from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { useApplyStyle } from \"../../theme\";\nimport { ClickableIcon } from \"../clickable-icon\";\nimport * as styles from \"./fade-wrapper.styles\";\nimport { getFadeBackgroundColorValue, getFadeColorSet } from \"./helpers\";\nimport type { FadeWrapperProps, FadeWrapperRef } from \"./types\";\n\nconst Component = (\n {\n children,\n className,\n fadeColor,\n fadePosition = \"both\",\n showIndicator = false,\n onResize,\n ...otherProps\n }: FadeWrapperProps,\n ref: React.Ref<FadeWrapperRef>\n) => {\n // =========================================================================\n // CONST, STATE, REFS\n // =========================================================================\n const [showFadeLeft, setShowFadeLeft] = useState<boolean>(\n fadePosition === \"left\" || fadePosition === \"both\"\n );\n const [showFadeRight, setShowFadeRight] = useState<boolean>(\n fadePosition === \"right\" || fadePosition === \"both\"\n );\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const fadeLeftRef = useRef<HTMLDivElement>(null);\n const fadeRightRef = useRef<HTMLDivElement>(null);\n\n const fadeColorSet = getFadeColorSet(fadeColor);\n\n useApplyStyle(fadeLeftRef, {\n [styles.tokens.backgroundColor]: getFadeBackgroundColorValue(\n fadeColorSet.left,\n showIndicator\n ),\n });\n useApplyStyle(fadeRightRef, {\n [styles.tokens.backgroundColor]: getFadeBackgroundColorValue(\n fadeColorSet.right,\n showIndicator\n ),\n });\n\n // To scroll left when wrapper resizes\n useResizeDetector({\n onResize: handleResize,\n targetRef: wrapperRef,\n refreshMode: \"debounce\",\n refreshRate: 50,\n });\n\n useImperativeHandle(ref, () => {\n return {\n resize() {\n handleResize();\n },\n scrollToEnd() {\n const content = contentRef.current;\n const wrapper = wrapperRef.current;\n if (content && wrapper) {\n content.scrollLeft =\n content.scrollWidth - wrapper.offsetWidth;\n }\n },\n };\n });\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n const handleScroll = useCallback(() => {\n const wrapper = wrapperRef.current;\n const content = contentRef.current;\n\n if (wrapper && content && content.scrollWidth > wrapper.offsetWidth) {\n /**\n * NOTE: Used Math.round because we observe a 0.5 difference\n * even when we scroll to the end. This causes the fade right\n * to not be removed\n */\n setShowFadeRight(\n Math.round(content.scrollLeft) <\n content.scrollWidth - content.offsetWidth\n );\n setShowFadeLeft(content.scrollLeft >= 1);\n } else {\n setShowFadeRight(false);\n setShowFadeLeft(false);\n }\n }, []);\n\n const throttledScrollHandler = useMemo(() => {\n return throttle(handleScroll, 50);\n }, [handleScroll]);\n\n useEffect(() => {\n const content = contentRef.current;\n\n handleScroll();\n\n if (content) {\n content.addEventListener(\"scroll\", throttledScrollHandler);\n }\n\n return () => {\n if (content) {\n content.removeEventListener(\"scroll\", throttledScrollHandler);\n }\n\n throttledScrollHandler.cancel();\n };\n }, [handleScroll, throttledScrollHandler]);\n\n // =========================================================================\n // EVENT HANDLERS\n // =========================================================================\n\n function handleResize() {\n handleScroll();\n\n if (onResize) {\n onResize({\n content: contentRef.current!,\n wrapper: wrapperRef.current!,\n });\n }\n }\n\n // =========================================================================\n // RENDER FUNCTIONS\n // =========================================================================\n const renderFade = () => {\n return (\n <>\n {showFadeLeft && (\n <div\n ref={fadeLeftRef}\n className={clsx(styles.fade, styles.fadeLeft)}\n data-id=\"left-fade\"\n >\n {showIndicator && (\n <ClickableIcon\n className={clsx(\n styles.fadeIndicatorButton,\n styles.indicatorLeft\n )}\n data-id=\"left-fade-indicator-button\"\n >\n <ChevronLeftIcon />\n </ClickableIcon>\n )}\n </div>\n )}\n {showFadeRight && (\n <div\n ref={fadeRightRef}\n className={clsx(styles.fade, styles.fadeRight)}\n data-id=\"right-fade\"\n >\n {showIndicator && (\n <ClickableIcon\n className={clsx(\n styles.fadeIndicatorButton,\n styles.indicatorRight\n )}\n data-id=\"right-fade-indicator-button\"\n >\n <ChevronRightIcon />\n </ClickableIcon>\n )}\n </div>\n )}\n </>\n );\n };\n\n return (\n <div\n ref={wrapperRef}\n className={clsx(styles.wrapper, className)}\n {...otherProps}\n >\n <div ref={contentRef} className={styles.content}>\n {children}\n </div>\n {renderFade()}\n </div>\n );\n};\n\nexport const FadeWrapper = forwardRef(Component);\n"],"names":["FadeWrapper","forwardRef","_a","ref","children","className","fadeColor","fadePosition","showIndicator","onResize","otherProps","__rest","showFadeLeft","setShowFadeLeft","useState","showFadeRight","setShowFadeRight","wrapperRef","useRef","contentRef","fadeLeftRef","fadeRightRef","fadeColorSet","getFadeColorSet","useApplyStyle","styles.tokens","backgroundColor","getFadeBackgroundColorValue","left","right","useResizeDetector","handleResize","targetRef","refreshMode","refreshRate","useImperativeHandle","resize","scrollToEnd","content","current","wrapper","scrollLeft","scrollWidth","offsetWidth","handleScroll","useCallback","Math","round","throttledScrollHandler","useMemo","throttle","useEffect","addEventListener","removeEventListener","cancel","_jsxs","Object","assign","clsx","styles.wrapper","_jsx","styles.content","styles.fade","styles.fadeLeft","ClickableIcon","styles.fadeIndicatorButton","styles.indicatorLeft","ChevronLeftIcon","styles.fadeRight","styles.indicatorRight","ChevronRightIcon"],"mappings":"ysCAsBA,MA6LaA,EAAcC,GA7LT,CACdC,EASAC,SATAC,SACIA,EAAQC,UACRA,EAASC,UACTA,EAASC,aACTA,EAAe,OAAMC,cACrBA,GAAgB,EAAKC,SACrBA,GAAQP,EACLQ,EAAUC,EAAAT,EAPjB,gFAcA,MAAOU,EAAcC,GAAmBC,EACnB,SAAjBP,GAA4C,SAAjBA,IAExBQ,EAAeC,GAAoBF,EACrB,UAAjBP,GAA6C,SAAjBA,GAG1BU,EAAaC,EAAuB,MACpCC,EAAaD,EAAuB,MACpCE,EAAcF,EAAuB,MACrCG,EAAeH,EAAuB,MAEtCI,EAAeC,EAAgBjB,GAErCkB,EAAcJ,EAAa,CACvB,CAACK,EAAcC,iBAAkBC,EAC7BL,EAAaM,KACbpB,KAGRgB,EAAcH,EAAc,CACxB,CAACI,EAAcC,iBAAkBC,EAC7BL,EAAaO,MACbrB,KAKRsB,EAAkB,CACdrB,SAAUsB,EACVC,UAAWf,EACXgB,YAAa,WACbC,YAAa,KAGjBC,EAAoBhC,GAAK,KACd,CACH,MAAAiC,GACIL,GACJ,EACA,WAAAM,GACI,MAAMC,EAAUnB,EAAWoB,QACrBC,EAAUvB,EAAWsB,QACvBD,GAAWE,IACXF,EAAQG,WACJH,EAAQI,YAAcF,EAAQG,YAE1C,MAOR,MAAMC,EAAeC,GAAY,KAC7B,MAAML,EAAUvB,EAAWsB,QACrBD,EAAUnB,EAAWoB,QAEvBC,GAAWF,GAAWA,EAAQI,YAAcF,EAAQG,aAMpD3B,EACI8B,KAAKC,MAAMT,EAAQG,YACfH,EAAQI,YAAcJ,EAAQK,aAEtC9B,EAAgByB,EAAQG,YAAc,KAEtCzB,GAAiB,GACjBH,GAAgB,GACpB,GACD,IAEGmC,EAAyBC,GAAQ,IAC5BC,EAASN,EAAc,KAC/B,CAACA,IAwBJ,SAASb,IACLa,IAEInC,GACAA,EAAS,CACL6B,QAASnB,EAAWoB,QACpBC,QAASvB,EAAWsB,SAGhC,CA/BAY,GAAU,KACN,MAAMb,EAAUnB,EAAWoB,QAQ3B,OANAK,IAEIN,GACAA,EAAQc,iBAAiB,SAAUJ,GAGhC,KACCV,GACAA,EAAQe,oBAAoB,SAAUL,GAG1CA,EAAuBM,QAAQ,CAClC,GACF,CAACV,EAAcI,IAiElB,OACIO,EAAA,MAAAC,OAAAC,OAAA,CACItD,IAAKc,EACLZ,UAAWqD,EAAKC,EAAgBtD,IAC5BK,EAAU,CAAAN,SAAA,CAEdwD,EAAA,MAAA,CAAKzD,IAAKgB,EAAYd,UAAWwD,EAAczD,SAC1CA,IAlDLmD,eACK3C,GACGgD,EAAA,MAAA,CACIzD,IAAKiB,EACLf,UAAWqD,EAAKI,EAAaC,GAAgB,UACrC,YAAW3D,SAElBI,GACGoD,EAACI,EAAa,CACV3D,UAAWqD,EACPO,EACAC,GACH,UACO,6BAA4B9D,SAEpCwD,EAACO,EAAe,CAAA,OAK/BpD,GACG6C,EAAA,MAAA,CACIzD,IAAKkB,EACLhB,UAAWqD,EAAKI,EAAaM,aACrB,aAAYhE,SAEnBI,GACGoD,EAACI,EAAa,CACV3D,UAAWqD,EACPO,EACAI,aAEI,8BAA6BjE,SAErCwD,EAACU,EAAgB,CAAA,aAmBnC"}
@@ -19,4 +19,5 @@ export interface FadeWrapperProps {
19
19
  }
20
20
  export interface FadeWrapperRef {
21
21
  resize: () => void;
22
+ scrollToEnd: () => void;
22
23
  }
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Generates CSS for a styled scrollbar. Pass "vertical" for panels that scroll
3
+ * vertically and "horizontal" for containers that scroll horizontally.
4
+ */
5
+ export declare const scrollbarCss: (axis: "vertical" | "horizontal") => string;
1
6
  /**
2
7
  * Generates CSS for limiting text to a specified number of lines after which it
3
8
  * is truncated with an ellipsis.
package/theme/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{ThemeProvider}from"./theme-provider/index.js";export{useInheritedThemeScope,useTheme}from"./theme-provider/hooks.js";export{Border,BorderStyle,BorderThickness}from"./tokens/border.js";export{Breakpoint}from"./tokens/breakpoint.js";export{Colour,PrimitiveColours,SemanticColours}from"./tokens/colour.js";export{ComponentToken}from"./tokens/component.js";export{Font,FontSpec}from"./tokens/font.js";export{MediaQuery}from"./tokens/media-query.js";export{Motion}from"./tokens/motion.js";export{Radius}from"./tokens/radius.js";export{Shadow}from"./tokens/shadow.js";export{Spacing}from"./tokens/spacing.js";export{THEME_TYPES}from"./types.js";export{formatUnitValue,parsePxOrRemValue}from"./utils/css-variable.js";export{useApplyStyle}from"./utils/use-apply-styles.js";export{useDesignToken}from"./utils/use-design-token.js";export{useMaxWidthMediaQuery,useMediaQuery,useMinWidthMediaQuery,useResolvedBreakpointToken}from"./utils/use-media-query.js";
1
+ export{ThemeProvider}from"./theme-provider/index.js";export{useInheritedThemeScope,useTheme}from"./theme-provider/hooks.js";export{Border,BorderStyle,BorderThickness}from"./tokens/border.js";export{Breakpoint}from"./tokens/breakpoint.js";export{Colour,PrimitiveColours,SemanticColours}from"./tokens/colour.js";export{ComponentToken}from"./tokens/component.js";export{Font,FontSpec}from"./tokens/font.js";export{MediaQuery}from"./tokens/media-query.js";export{Motion}from"./tokens/motion.js";export{Radius}from"./tokens/radius.js";export{Shadow}from"./tokens/shadow.js";export{Spacing}from"./tokens/spacing.js";export{THEME_FONT_PRESETS,THEME_TYPES}from"./types.js";export{formatUnitValue,parsePxOrRemValue}from"./utils/css-variable.js";export{useApplyStyle}from"./utils/use-apply-styles.js";export{useDesignToken}from"./utils/use-design-token.js";export{useMaxWidthMediaQuery,useMediaQuery,useMinWidthMediaQuery,useResolvedBreakpointToken}from"./utils/use-media-query.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -103,6 +103,9 @@
103
103
  --fds-radius-sm: 4px;
104
104
  --fds-radius-md: 8px;
105
105
  --fds-radius-lg: 12px;
106
+ --fds-radius-xl: 16px;
107
+ --fds-radius-xxl: 24px;
108
+ --fds-radius-xxxl: 32px;
106
109
  --fds-radius-full: 9999px;
107
110
  }
108
111
 
@@ -224,6 +227,8 @@
224
227
 
225
228
  --fds-colour-text-primary-strong: var(--fds-colour-primary-40);
226
229
 
230
+ --fds-colour-text-primary-stronger: var(--fds-colour-primary-30);
231
+
227
232
  --fds-colour-text-primary-strongest: var(--fds-colour-primary-20);
228
233
 
229
234
  --fds-colour-text-brand: var(--fds-colour-brand-50);
@@ -360,6 +365,28 @@
360
365
 
361
366
  --fds-colour-bg-strongest: var(--fds-colour-neutral-90);
362
367
 
368
+ --fds-colour-bg-primary: var(--fds-colour-primary-50);
369
+
370
+ --fds-colour-bg-primary-strong: var(--fds-colour-primary-40);
371
+
372
+ --fds-colour-bg-primary-subtle: var(--fds-colour-primary-60);
373
+
374
+ --fds-colour-bg-primary-subtler: var(--fds-colour-primary-95);
375
+
376
+ --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-100);
377
+
378
+ --fds-colour-bg-brand-subtler: var(--fds-colour-brand-95);
379
+
380
+ --fds-colour-bg-brand-subtlest: var(--fds-colour-brand-100);
381
+
382
+ --fds-colour-bg-secondary: var(--fds-colour-secondary-50);
383
+
384
+ --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-60);
385
+
386
+ --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-95);
387
+
388
+ --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-100);
389
+
363
390
  --fds-colour-bg-hover: var(--fds-colour-primary-95);
364
391
 
365
392
  --fds-colour-bg-hover-strong: var(--fds-colour-primary-90);
@@ -430,24 +457,6 @@
430
457
 
431
458
  --fds-colour-bg-inverse-hover: var(--fds-colour-neutral-40);
432
459
 
433
- --fds-colour-bg-primary: var(--fds-colour-primary-50);
434
-
435
- --fds-colour-bg-primary-strong: var(--fds-colour-primary-40);
436
-
437
- --fds-colour-bg-primary-subtle: var(--fds-colour-primary-60);
438
-
439
- --fds-colour-bg-primary-subtler: var(--fds-colour-primary-95);
440
-
441
- --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-100);
442
-
443
- --fds-colour-bg-secondary: var(--fds-colour-secondary-50);
444
-
445
- --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-60);
446
-
447
- --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-95);
448
-
449
- --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-100);
450
-
451
460
  --fds-colour-bg-available: #6DD0A1;
452
461
 
453
462
  --fds-colour-bg-primary-hover: var(--fds-colour-primary-40);
@@ -653,12 +662,13 @@
653
662
  /* text */
654
663
  --fds-colour-text: var(--fds-colour-neutral-100);
655
664
  --fds-colour-text-subtle: var(--fds-colour-neutral-80);
656
- --fds-colour-text-subtler: var(--fds-colour-neutral-60);
657
- --fds-colour-text-subtlest: var(--fds-colour-neutral-50);
665
+ --fds-colour-text-subtler: var(--fds-colour-neutral-70);
666
+ --fds-colour-text-subtlest: var(--fds-colour-neutral-60);
658
667
  --fds-colour-text-primary: var(--fds-colour-primary-60);
659
668
  --fds-colour-text-primary-strong: var(--fds-colour-primary-70);
669
+ --fds-colour-text-primary-stronger: var(--fds-colour-primary-80);
660
670
  --fds-colour-text-primary-strongest: var(--fds-colour-primary-90);
661
- --fds-colour-text-brand: var(--fds-colour-brand-50);
671
+ --fds-colour-text-brand: var(--fds-colour-brand-60);
662
672
  --fds-colour-text-secondary: var(--fds-colour-secondary-60);
663
673
  --fds-colour-text-secondary-subtle: var(--fds-colour-secondary-50);
664
674
  --fds-colour-text-hover: var(--fds-colour-primary-70);
@@ -674,13 +684,13 @@
674
684
  --fds-colour-text-info: var(--fds-colour-info-70);
675
685
  --fds-colour-text-inverse: var(--fds-colour-black);
676
686
  /* icon */
677
- --fds-colour-icon: var(--fds-colour-neutral-60);
678
- --fds-colour-icon-subtle: var(--fds-colour-neutral-50);
679
- --fds-colour-icon-strongest: var(--fds-colour-neutral-90);
687
+ --fds-colour-icon: var(--fds-colour-neutral-70);
688
+ --fds-colour-icon-subtle: var(--fds-colour-neutral-60);
689
+ --fds-colour-icon-strongest: var(--fds-colour-neutral-100);
680
690
  --fds-colour-icon-primary: var(--fds-colour-primary-60);
681
691
  --fds-colour-icon-primary-subtle: var(--fds-colour-primary-50);
682
692
  --fds-colour-icon-primary-subtlest: var(--fds-colour-primary-40);
683
- --fds-colour-icon-brand: var(--fds-colour-brand-50);
693
+ --fds-colour-icon-brand: var(--fds-colour-brand-60);
684
694
  --fds-colour-icon-secondary: var(--fds-colour-secondary-60);
685
695
  --fds-colour-icon-secondary-subtle: var(--fds-colour-secondary-50);
686
696
  --fds-colour-icon-hover: var(--fds-colour-primary-70);
@@ -690,15 +700,15 @@
690
700
  --fds-colour-icon-disabled-subtle: var(--fds-colour-neutral-50);
691
701
  --fds-colour-icon-selected-disabled: var(--fds-colour-neutral-50);
692
702
  --fds-colour-icon-success: var(--fds-colour-success-60);
693
- --fds-colour-icon-warning: var(--fds-colour-warning-50);
703
+ --fds-colour-icon-warning: var(--fds-colour-warning-70);
694
704
  --fds-colour-icon-error: var(--fds-colour-error-60);
695
705
  --fds-colour-icon-error-strong: var(--fds-colour-error-70);
696
706
  --fds-colour-icon-info: var(--fds-colour-info-60);
697
707
  --fds-colour-icon-inverse: var(--fds-colour-black);
698
708
  --fds-colour-icon-primary-inverse: var(--fds-colour-primary-inverse);
699
709
  /* border - adjusted for dark mode */
700
- --fds-colour-border: var(--fds-colour-neutral-20);
701
- --fds-colour-border-strong: var(--fds-colour-neutral-40);
710
+ --fds-colour-border: var(--fds-colour-neutral-40);
711
+ --fds-colour-border-strong: var(--fds-colour-neutral-50);
702
712
  --fds-colour-border-stronger: var(--fds-colour-neutral-60);
703
713
  --fds-colour-border-primary: var(--fds-colour-primary-60);
704
714
  --fds-colour-border-primary-strong: var(--fds-colour-primary-70);
@@ -724,7 +734,18 @@
724
734
  --fds-colour-bg: var(--fds-colour-black);
725
735
  --fds-colour-bg-strong: var(--fds-colour-neutral-10);
726
736
  --fds-colour-bg-stronger: var(--fds-colour-neutral-20);
727
- --fds-colour-bg-strongest: var(--fds-colour-neutral-20);
737
+ --fds-colour-bg-strongest: var(--fds-colour-neutral-30);
738
+ --fds-colour-bg-primary: var(--fds-colour-primary-60);
739
+ --fds-colour-bg-primary-strong: var(--fds-colour-primary-70);
740
+ --fds-colour-bg-primary-subtle: var(--fds-colour-primary-50);
741
+ --fds-colour-bg-primary-subtler: var(--fds-colour-primary-20);
742
+ --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-10);
743
+ --fds-colour-bg-brand-subtler: var(--fds-colour-brand-20);
744
+ --fds-colour-bg-brand-subtlest: var(--fds-colour-brand-10);
745
+ --fds-colour-bg-secondary: var(--fds-colour-secondary-60);
746
+ --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-50);
747
+ --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-20);
748
+ --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-10);
728
749
  --fds-colour-bg-hover: var(--fds-colour-primary-20);
729
750
  --fds-colour-bg-hover-strong: var(--fds-colour-primary-20);
730
751
  --fds-colour-bg-hover-subtle: var(--fds-colour-primary-10);
@@ -745,8 +766,8 @@
745
766
  --fds-colour-bg-success-strong-hover: var(--fds-colour-success-70);
746
767
  --fds-colour-bg-warning: var(--fds-colour-warning-10);
747
768
  --fds-colour-bg-warning-hover: var(--fds-colour-warning-20);
748
- --fds-colour-bg-warning-strong: var(--fds-colour-warning-60);
749
- --fds-colour-bg-warning-strong-hover: var(--fds-colour-warning-70);
769
+ --fds-colour-bg-warning-strong: var(--fds-colour-warning-70);
770
+ --fds-colour-bg-warning-strong-hover: var(--fds-colour-warning-80);
750
771
  --fds-colour-bg-info: var(--fds-colour-info-10);
751
772
  --fds-colour-bg-info-hover: var(--fds-colour-info-20);
752
773
  --fds-colour-bg-info-strong: var(--fds-colour-info-60);
@@ -760,16 +781,7 @@
760
781
  --fds-colour-bg-inverse-subtler: var(--fds-colour-neutral-60);
761
782
  --fds-colour-bg-inverse-subtlest: var(--fds-colour-neutral-50);
762
783
  --fds-colour-bg-inverse-hover: var(--fds-colour-neutral-70);
763
- --fds-colour-bg-primary: var(--fds-colour-primary-60);
764
- --fds-colour-bg-primary-strong: var(--fds-colour-primary-70);
765
- --fds-colour-bg-primary-subtle: var(--fds-colour-primary-50);
766
- --fds-colour-bg-primary-subtler: var(--fds-colour-primary-20);
767
- --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-10);
768
784
  --fds-colour-bg-available: #185339;
769
- --fds-colour-bg-secondary: var(--fds-colour-secondary-60);
770
- --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-50);
771
- --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-20);
772
- --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-10);
773
785
  --fds-colour-bg-primary-hover: var(--fds-colour-primary-70);
774
786
  --fds-colour-bg-primary-strong-hover: var(--fds-colour-primary-80);
775
787
  --fds-colour-bg-primary-subtlest-hover: var(--fds-colour-primary-20);
@@ -103,6 +103,9 @@
103
103
  --fds-radius-sm: 4px;
104
104
  --fds-radius-md: 8px;
105
105
  --fds-radius-lg: 12px;
106
+ --fds-radius-xl: 16px;
107
+ --fds-radius-xxl: 24px;
108
+ --fds-radius-xxxl: 32px;
106
109
  --fds-radius-full: 9999px;
107
110
  }
108
111
 
@@ -224,6 +227,8 @@
224
227
 
225
228
  --fds-colour-text-primary-strong: var(--fds-colour-primary-40);
226
229
 
230
+ --fds-colour-text-primary-stronger: var(--fds-colour-primary-30);
231
+
227
232
  --fds-colour-text-primary-strongest: var(--fds-colour-primary-20);
228
233
 
229
234
  --fds-colour-text-brand: var(--fds-colour-brand-50);
@@ -360,6 +365,28 @@
360
365
 
361
366
  --fds-colour-bg-strongest: var(--fds-colour-neutral-90);
362
367
 
368
+ --fds-colour-bg-primary: var(--fds-colour-primary-50);
369
+
370
+ --fds-colour-bg-primary-strong: var(--fds-colour-primary-40);
371
+
372
+ --fds-colour-bg-primary-subtle: var(--fds-colour-primary-60);
373
+
374
+ --fds-colour-bg-primary-subtler: var(--fds-colour-primary-95);
375
+
376
+ --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-100);
377
+
378
+ --fds-colour-bg-brand-subtler: var(--fds-colour-brand-95);
379
+
380
+ --fds-colour-bg-brand-subtlest: var(--fds-colour-brand-100);
381
+
382
+ --fds-colour-bg-secondary: var(--fds-colour-secondary-50);
383
+
384
+ --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-60);
385
+
386
+ --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-95);
387
+
388
+ --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-100);
389
+
363
390
  --fds-colour-bg-hover: var(--fds-colour-primary-95);
364
391
 
365
392
  --fds-colour-bg-hover-strong: var(--fds-colour-primary-90);
@@ -430,24 +457,6 @@
430
457
 
431
458
  --fds-colour-bg-inverse-hover: var(--fds-colour-neutral-40);
432
459
 
433
- --fds-colour-bg-primary: var(--fds-colour-primary-50);
434
-
435
- --fds-colour-bg-primary-strong: var(--fds-colour-primary-40);
436
-
437
- --fds-colour-bg-primary-subtle: var(--fds-colour-primary-60);
438
-
439
- --fds-colour-bg-primary-subtler: var(--fds-colour-primary-95);
440
-
441
- --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-100);
442
-
443
- --fds-colour-bg-secondary: var(--fds-colour-secondary-50);
444
-
445
- --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-60);
446
-
447
- --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-95);
448
-
449
- --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-100);
450
-
451
460
  --fds-colour-bg-available: #6DD0A1;
452
461
 
453
462
  --fds-colour-bg-primary-hover: var(--fds-colour-primary-40);
@@ -688,12 +697,13 @@
688
697
  /* text */
689
698
  --fds-colour-text: var(--fds-colour-neutral-100);
690
699
  --fds-colour-text-subtle: var(--fds-colour-neutral-80);
691
- --fds-colour-text-subtler: var(--fds-colour-neutral-60);
692
- --fds-colour-text-subtlest: var(--fds-colour-neutral-50);
700
+ --fds-colour-text-subtler: var(--fds-colour-neutral-70);
701
+ --fds-colour-text-subtlest: var(--fds-colour-neutral-60);
693
702
  --fds-colour-text-primary: var(--fds-colour-primary-60);
694
703
  --fds-colour-text-primary-strong: var(--fds-colour-primary-70);
704
+ --fds-colour-text-primary-stronger: var(--fds-colour-primary-80);
695
705
  --fds-colour-text-primary-strongest: var(--fds-colour-primary-90);
696
- --fds-colour-text-brand: var(--fds-colour-brand-50);
706
+ --fds-colour-text-brand: var(--fds-colour-brand-60);
697
707
  --fds-colour-text-secondary: var(--fds-colour-secondary-60);
698
708
  --fds-colour-text-secondary-subtle: var(--fds-colour-secondary-50);
699
709
  --fds-colour-text-hover: var(--fds-colour-primary-70);
@@ -709,13 +719,13 @@
709
719
  --fds-colour-text-info: var(--fds-colour-info-70);
710
720
  --fds-colour-text-inverse: var(--fds-colour-black);
711
721
  /* icon */
712
- --fds-colour-icon: var(--fds-colour-neutral-60);
713
- --fds-colour-icon-subtle: var(--fds-colour-neutral-50);
714
- --fds-colour-icon-strongest: var(--fds-colour-neutral-90);
722
+ --fds-colour-icon: var(--fds-colour-neutral-70);
723
+ --fds-colour-icon-subtle: var(--fds-colour-neutral-60);
724
+ --fds-colour-icon-strongest: var(--fds-colour-neutral-100);
715
725
  --fds-colour-icon-primary: var(--fds-colour-primary-60);
716
726
  --fds-colour-icon-primary-subtle: var(--fds-colour-primary-50);
717
727
  --fds-colour-icon-primary-subtlest: var(--fds-colour-primary-40);
718
- --fds-colour-icon-brand: var(--fds-colour-brand-50);
728
+ --fds-colour-icon-brand: var(--fds-colour-brand-60);
719
729
  --fds-colour-icon-secondary: var(--fds-colour-secondary-60);
720
730
  --fds-colour-icon-secondary-subtle: var(--fds-colour-secondary-50);
721
731
  --fds-colour-icon-hover: var(--fds-colour-primary-70);
@@ -725,15 +735,15 @@
725
735
  --fds-colour-icon-disabled-subtle: var(--fds-colour-neutral-50);
726
736
  --fds-colour-icon-selected-disabled: var(--fds-colour-neutral-50);
727
737
  --fds-colour-icon-success: var(--fds-colour-success-60);
728
- --fds-colour-icon-warning: var(--fds-colour-warning-50);
738
+ --fds-colour-icon-warning: var(--fds-colour-warning-70);
729
739
  --fds-colour-icon-error: var(--fds-colour-error-60);
730
740
  --fds-colour-icon-error-strong: var(--fds-colour-error-70);
731
741
  --fds-colour-icon-info: var(--fds-colour-info-60);
732
742
  --fds-colour-icon-inverse: var(--fds-colour-black);
733
743
  --fds-colour-icon-primary-inverse: var(--fds-colour-primary-inverse);
734
744
  /* border - adjusted for dark mode */
735
- --fds-colour-border: var(--fds-colour-neutral-20);
736
- --fds-colour-border-strong: var(--fds-colour-neutral-40);
745
+ --fds-colour-border: var(--fds-colour-neutral-40);
746
+ --fds-colour-border-strong: var(--fds-colour-neutral-50);
737
747
  --fds-colour-border-stronger: var(--fds-colour-neutral-60);
738
748
  --fds-colour-border-primary: var(--fds-colour-primary-60);
739
749
  --fds-colour-border-primary-strong: var(--fds-colour-primary-70);
@@ -759,7 +769,18 @@
759
769
  --fds-colour-bg: var(--fds-colour-black);
760
770
  --fds-colour-bg-strong: var(--fds-colour-neutral-10);
761
771
  --fds-colour-bg-stronger: var(--fds-colour-neutral-20);
762
- --fds-colour-bg-strongest: var(--fds-colour-neutral-20);
772
+ --fds-colour-bg-strongest: var(--fds-colour-neutral-30);
773
+ --fds-colour-bg-primary: var(--fds-colour-primary-60);
774
+ --fds-colour-bg-primary-strong: var(--fds-colour-primary-70);
775
+ --fds-colour-bg-primary-subtle: var(--fds-colour-primary-50);
776
+ --fds-colour-bg-primary-subtler: var(--fds-colour-primary-20);
777
+ --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-10);
778
+ --fds-colour-bg-brand-subtler: var(--fds-colour-brand-20);
779
+ --fds-colour-bg-brand-subtlest: var(--fds-colour-brand-10);
780
+ --fds-colour-bg-secondary: var(--fds-colour-secondary-60);
781
+ --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-50);
782
+ --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-20);
783
+ --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-10);
763
784
  --fds-colour-bg-hover: var(--fds-colour-primary-20);
764
785
  --fds-colour-bg-hover-strong: var(--fds-colour-primary-20);
765
786
  --fds-colour-bg-hover-subtle: var(--fds-colour-primary-10);
@@ -780,8 +801,8 @@
780
801
  --fds-colour-bg-success-strong-hover: var(--fds-colour-success-70);
781
802
  --fds-colour-bg-warning: var(--fds-colour-warning-10);
782
803
  --fds-colour-bg-warning-hover: var(--fds-colour-warning-20);
783
- --fds-colour-bg-warning-strong: var(--fds-colour-warning-60);
784
- --fds-colour-bg-warning-strong-hover: var(--fds-colour-warning-70);
804
+ --fds-colour-bg-warning-strong: var(--fds-colour-warning-70);
805
+ --fds-colour-bg-warning-strong-hover: var(--fds-colour-warning-80);
785
806
  --fds-colour-bg-info: var(--fds-colour-info-10);
786
807
  --fds-colour-bg-info-hover: var(--fds-colour-info-20);
787
808
  --fds-colour-bg-info-strong: var(--fds-colour-info-60);
@@ -795,16 +816,7 @@
795
816
  --fds-colour-bg-inverse-subtler: var(--fds-colour-neutral-60);
796
817
  --fds-colour-bg-inverse-subtlest: var(--fds-colour-neutral-50);
797
818
  --fds-colour-bg-inverse-hover: var(--fds-colour-neutral-70);
798
- --fds-colour-bg-primary: var(--fds-colour-primary-60);
799
- --fds-colour-bg-primary-strong: var(--fds-colour-primary-70);
800
- --fds-colour-bg-primary-subtle: var(--fds-colour-primary-50);
801
- --fds-colour-bg-primary-subtler: var(--fds-colour-primary-20);
802
- --fds-colour-bg-primary-subtlest: var(--fds-colour-primary-10);
803
819
  --fds-colour-bg-available: #185339;
804
- --fds-colour-bg-secondary: var(--fds-colour-secondary-60);
805
- --fds-colour-bg-secondary-subtle: var(--fds-colour-secondary-50);
806
- --fds-colour-bg-secondary-subtler: var(--fds-colour-secondary-20);
807
- --fds-colour-bg-secondary-subtlest: var(--fds-colour-secondary-10);
808
820
  --fds-colour-bg-primary-hover: var(--fds-colour-primary-70);
809
821
  --fds-colour-bg-primary-strong-hover: var(--fds-colour-primary-80);
810
822
  --fds-colour-bg-primary-subtlest-hover: var(--fds-colour-primary-20);