@drivenets/design-system 0.2.0 → 0.4.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 (346) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +1 -1
  3. package/dist/components/ds-alert-banner/ds-alert-banner.d.ts +5 -5
  4. package/dist/components/ds-alert-banner/ds-alert-banner.d.ts.map +1 -1
  5. package/dist/components/ds-autocomplete/ds-autocomplete.cjs +218 -0
  6. package/dist/components/ds-autocomplete/ds-autocomplete.d.cts +22 -0
  7. package/dist/components/ds-autocomplete/ds-autocomplete.d.cts.map +1 -0
  8. package/dist/components/ds-autocomplete/ds-autocomplete.d.ts +22 -0
  9. package/dist/components/ds-autocomplete/ds-autocomplete.d.ts.map +1 -0
  10. package/dist/components/ds-autocomplete/ds-autocomplete.js +217 -0
  11. package/dist/components/ds-autocomplete/ds-autocomplete.js.map +1 -0
  12. package/dist/components/ds-autocomplete/ds-autocomplete.module.cjs +27 -0
  13. package/dist/components/ds-autocomplete/ds-autocomplete.module.js +27 -0
  14. package/dist/components/ds-autocomplete/ds-autocomplete.module.js.map +1 -0
  15. package/dist/components/ds-autocomplete/ds-autocomplete.types.d.cts +79 -0
  16. package/dist/components/ds-autocomplete/ds-autocomplete.types.d.cts.map +1 -0
  17. package/dist/components/ds-autocomplete/ds-autocomplete.types.d.ts +80 -0
  18. package/dist/components/ds-autocomplete/ds-autocomplete.types.d.ts.map +1 -0
  19. package/dist/components/ds-autocomplete/index.cjs +1 -0
  20. package/dist/components/ds-autocomplete/index.d.ts +2 -0
  21. package/dist/components/ds-autocomplete/index.js +1 -0
  22. package/dist/components/ds-avatar/ds-avatar.module.js.map +1 -1
  23. package/dist/components/ds-avatar-group/ds-avatar-group.module.js.map +1 -1
  24. package/dist/components/ds-button/ds-button.d.cts +2 -2
  25. package/dist/components/ds-button/ds-button.d.cts.map +1 -1
  26. package/dist/components/ds-button/ds-button.d.ts +2 -2
  27. package/dist/components/ds-button/ds-button.d.ts.map +1 -1
  28. package/dist/components/ds-button/versions/ds-button-legacy/ds-button-legacy.cjs +23 -24
  29. package/dist/components/ds-button/versions/ds-button-legacy/ds-button-legacy.js +23 -24
  30. package/dist/components/ds-button/versions/ds-button-legacy/ds-button-legacy.js.map +1 -1
  31. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.cjs +24 -25
  32. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.js +24 -25
  33. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.js.map +1 -1
  34. package/dist/components/ds-chip-group/hooks/use-chip-row-calculation.cjs +1 -0
  35. package/dist/components/ds-chip-group/hooks/use-chip-row-calculation.js +1 -0
  36. package/dist/components/ds-chip-group/hooks/use-chip-row-calculation.js.map +1 -1
  37. package/dist/components/ds-confirmation/ds-confirmation.cjs +20 -221
  38. package/dist/components/ds-confirmation/ds-confirmation.d.cts +22 -27
  39. package/dist/components/ds-confirmation/ds-confirmation.d.cts.map +1 -1
  40. package/dist/components/ds-confirmation/ds-confirmation.d.ts +22 -27
  41. package/dist/components/ds-confirmation/ds-confirmation.d.ts.map +1 -1
  42. package/dist/components/ds-confirmation/ds-confirmation.js +21 -221
  43. package/dist/components/ds-confirmation/ds-confirmation.js.map +1 -1
  44. package/dist/components/ds-confirmation/ds-confirmation.types.d.cts +2 -1
  45. package/dist/components/ds-confirmation/ds-confirmation.types.d.cts.map +1 -1
  46. package/dist/components/ds-confirmation/ds-confirmation.types.d.ts +2 -1
  47. package/dist/components/ds-confirmation/ds-confirmation.types.d.ts.map +1 -1
  48. package/dist/components/ds-date-input/ds-date-input.cjs +1 -1
  49. package/dist/components/ds-date-input/ds-date-input.d.cts +2 -2
  50. package/dist/components/ds-date-input/ds-date-input.d.cts.map +1 -1
  51. package/dist/components/ds-date-input/ds-date-input.d.ts +2 -2
  52. package/dist/components/ds-date-input/ds-date-input.js +1 -1
  53. package/dist/components/ds-date-input/ds-date-input.module.cjs +22 -22
  54. package/dist/components/ds-date-input/ds-date-input.module.js +22 -22
  55. package/dist/components/ds-date-input/ds-date-input.module.js.map +1 -1
  56. package/dist/components/ds-date-input/ds-date-input.utils.cjs +9 -2
  57. package/dist/components/ds-date-input/ds-date-input.utils.js +9 -2
  58. package/dist/components/ds-date-input/ds-date-input.utils.js.map +1 -1
  59. package/dist/components/ds-drawer/ds-drawer.cjs +4 -4
  60. package/dist/components/ds-drawer/ds-drawer.d.cts +9 -9
  61. package/dist/components/ds-drawer/ds-drawer.d.cts.map +1 -1
  62. package/dist/components/ds-drawer/ds-drawer.d.ts +9 -9
  63. package/dist/components/ds-drawer/ds-drawer.d.ts.map +1 -1
  64. package/dist/components/ds-drawer/ds-drawer.js +4 -4
  65. package/dist/components/ds-drawer/ds-drawer.js.map +1 -1
  66. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.cjs +1 -1
  67. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.js +1 -1
  68. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.module.cjs +20 -20
  69. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.module.js +20 -20
  70. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.module.js.map +1 -1
  71. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.cts +1 -1
  72. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.cts.map +1 -1
  73. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.ts +1 -1
  74. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.ts.map +1 -1
  75. package/dist/components/ds-expandable-text-input/ds-expandable-text-input.d.cts +2 -2
  76. package/dist/components/ds-expandable-text-input/ds-expandable-text-input.d.ts +2 -2
  77. package/dist/components/ds-file-upload/utils/format-file-size.cjs +1 -1
  78. package/dist/components/ds-file-upload/utils/format-file-size.js +1 -1
  79. package/dist/components/ds-file-upload/utils/format-file-size.js.map +1 -1
  80. package/dist/components/ds-form-control/ds-form-control.cjs +2 -5
  81. package/dist/components/ds-form-control/ds-form-control.d.cts +8 -8
  82. package/dist/components/ds-form-control/ds-form-control.d.ts +8 -8
  83. package/dist/components/ds-form-control/ds-form-control.js +2 -5
  84. package/dist/components/ds-form-control/ds-form-control.js.map +1 -1
  85. package/dist/components/ds-loader/ds-loader.cjs +60 -0
  86. package/dist/components/ds-loader/ds-loader.d.cts +15 -0
  87. package/dist/components/ds-loader/ds-loader.d.cts.map +1 -0
  88. package/dist/components/ds-loader/ds-loader.d.ts +15 -0
  89. package/dist/components/ds-loader/ds-loader.d.ts.map +1 -0
  90. package/dist/components/ds-loader/ds-loader.js +59 -0
  91. package/dist/components/ds-loader/ds-loader.js.map +1 -0
  92. package/dist/components/ds-loader/ds-loader.module.cjs +15 -0
  93. package/dist/components/ds-loader/ds-loader.module.js +15 -0
  94. package/dist/components/ds-loader/ds-loader.module.js.map +1 -0
  95. package/dist/components/ds-loader/ds-loader.types.cjs +6 -0
  96. package/dist/components/ds-loader/ds-loader.types.d.cts +27 -0
  97. package/dist/components/ds-loader/ds-loader.types.d.cts.map +1 -0
  98. package/dist/components/ds-loader/ds-loader.types.d.ts +27 -0
  99. package/dist/components/ds-loader/ds-loader.types.d.ts.map +1 -0
  100. package/dist/components/ds-loader/ds-loader.types.js +6 -0
  101. package/dist/components/ds-loader/ds-loader.types.js.map +1 -0
  102. package/dist/components/ds-loader/index.cjs +2 -0
  103. package/dist/components/ds-loader/index.d.ts +2 -0
  104. package/dist/components/ds-loader/index.js +2 -0
  105. package/dist/components/ds-loader/pulsing-icon.cjs +37 -0
  106. package/dist/components/ds-loader/pulsing-icon.js +37 -0
  107. package/dist/components/ds-loader/pulsing-icon.js.map +1 -0
  108. package/dist/components/ds-loader/spinner-icon.cjs +74 -0
  109. package/dist/components/ds-loader/spinner-icon.js +74 -0
  110. package/dist/components/ds-loader/spinner-icon.js.map +1 -0
  111. package/dist/components/ds-modal/ds-modal.cjs +47 -48
  112. package/dist/components/ds-modal/ds-modal.d.cts +11 -10
  113. package/dist/components/ds-modal/ds-modal.d.cts.map +1 -1
  114. package/dist/components/ds-modal/ds-modal.d.ts +11 -10
  115. package/dist/components/ds-modal/ds-modal.d.ts.map +1 -1
  116. package/dist/components/ds-modal/ds-modal.js +47 -48
  117. package/dist/components/ds-modal/ds-modal.js.map +1 -1
  118. package/dist/components/ds-modal/ds-modal.module.cjs +24 -24
  119. package/dist/components/ds-modal/ds-modal.module.js +24 -24
  120. package/dist/components/ds-modal/ds-modal.module.js.map +1 -1
  121. package/dist/components/ds-modal/ds-modal.types.d.cts +10 -5
  122. package/dist/components/ds-modal/ds-modal.types.d.cts.map +1 -1
  123. package/dist/components/ds-modal/ds-modal.types.d.ts +10 -5
  124. package/dist/components/ds-modal/ds-modal.types.d.ts.map +1 -1
  125. package/dist/components/ds-panel/ds-panel.d.cts +2 -2
  126. package/dist/components/ds-panel/ds-panel.d.ts +2 -2
  127. package/dist/components/ds-select/ds-select.cjs +2 -2
  128. package/dist/components/ds-select/ds-select.d.cts +2 -2
  129. package/dist/components/ds-select/ds-select.d.ts +2 -2
  130. package/dist/components/ds-select/ds-select.js +2 -2
  131. package/dist/components/ds-select/ds-select.js.map +1 -1
  132. package/dist/components/ds-skeleton/ds-skeleton-circle.cjs +59 -0
  133. package/dist/components/ds-skeleton/ds-skeleton-circle.d.cts +18 -0
  134. package/dist/components/ds-skeleton/ds-skeleton-circle.d.cts.map +1 -0
  135. package/dist/components/ds-skeleton/ds-skeleton-circle.d.ts +18 -0
  136. package/dist/components/ds-skeleton/ds-skeleton-circle.d.ts.map +1 -0
  137. package/dist/components/ds-skeleton/ds-skeleton-circle.js +58 -0
  138. package/dist/components/ds-skeleton/ds-skeleton-circle.js.map +1 -0
  139. package/dist/components/ds-skeleton/ds-skeleton-rect.cjs +61 -0
  140. package/dist/components/ds-skeleton/ds-skeleton-rect.d.cts +18 -0
  141. package/dist/components/ds-skeleton/ds-skeleton-rect.d.cts.map +1 -0
  142. package/dist/components/ds-skeleton/ds-skeleton-rect.d.ts +18 -0
  143. package/dist/components/ds-skeleton/ds-skeleton-rect.d.ts.map +1 -0
  144. package/dist/components/ds-skeleton/ds-skeleton-rect.js +60 -0
  145. package/dist/components/ds-skeleton/ds-skeleton-rect.js.map +1 -0
  146. package/dist/components/ds-skeleton/ds-skeleton-text.cjs +91 -0
  147. package/dist/components/ds-skeleton/ds-skeleton-text.d.cts +21 -0
  148. package/dist/components/ds-skeleton/ds-skeleton-text.d.cts.map +1 -0
  149. package/dist/components/ds-skeleton/ds-skeleton-text.d.ts +21 -0
  150. package/dist/components/ds-skeleton/ds-skeleton-text.d.ts.map +1 -0
  151. package/dist/components/ds-skeleton/ds-skeleton-text.js +90 -0
  152. package/dist/components/ds-skeleton/ds-skeleton-text.js.map +1 -0
  153. package/dist/components/ds-skeleton/ds-skeleton.cjs +13 -0
  154. package/dist/components/ds-skeleton/ds-skeleton.config.cjs +62 -0
  155. package/dist/components/ds-skeleton/ds-skeleton.config.js +59 -0
  156. package/dist/components/ds-skeleton/ds-skeleton.config.js.map +1 -0
  157. package/dist/components/ds-skeleton/ds-skeleton.d.cts +32 -0
  158. package/dist/components/ds-skeleton/ds-skeleton.d.cts.map +1 -0
  159. package/dist/components/ds-skeleton/ds-skeleton.d.ts +32 -0
  160. package/dist/components/ds-skeleton/ds-skeleton.d.ts.map +1 -0
  161. package/dist/components/ds-skeleton/ds-skeleton.js +14 -0
  162. package/dist/components/ds-skeleton/ds-skeleton.js.map +1 -0
  163. package/dist/components/ds-skeleton/ds-skeleton.module.cjs +15 -0
  164. package/dist/components/ds-skeleton/ds-skeleton.module.js +15 -0
  165. package/dist/components/ds-skeleton/ds-skeleton.module.js.map +1 -0
  166. package/dist/components/ds-skeleton/ds-skeleton.types.cjs +8 -0
  167. package/dist/components/ds-skeleton/ds-skeleton.types.d.cts +91 -0
  168. package/dist/components/ds-skeleton/ds-skeleton.types.d.cts.map +1 -0
  169. package/dist/components/ds-skeleton/ds-skeleton.types.d.ts +93 -0
  170. package/dist/components/ds-skeleton/ds-skeleton.types.d.ts.map +1 -0
  171. package/dist/components/ds-skeleton/ds-skeleton.types.js +7 -0
  172. package/dist/components/ds-skeleton/ds-skeleton.types.js.map +1 -0
  173. package/dist/components/ds-skeleton/index.cjs +5 -0
  174. package/dist/components/ds-skeleton/index.d.ts +5 -0
  175. package/dist/components/ds-skeleton/index.js +5 -0
  176. package/dist/components/ds-smart-tabs/ds-smart-tabs.d.cts +2 -2
  177. package/dist/components/ds-smart-tabs/ds-smart-tabs.d.ts +2 -2
  178. package/dist/components/ds-smart-tabs/ds-smart-tabs.d.ts.map +1 -1
  179. package/dist/components/ds-spinner/ds-spinner.cjs +43 -45
  180. package/dist/components/ds-spinner/ds-spinner.js +43 -45
  181. package/dist/components/ds-spinner/ds-spinner.js.map +1 -1
  182. package/dist/components/ds-stepper/components/ds-step-content.d.cts +2 -2
  183. package/dist/components/ds-stepper/components/ds-step-content.d.ts +2 -2
  184. package/dist/components/ds-stepper/components/ds-step-next-button.d.cts +2 -2
  185. package/dist/components/ds-stepper/components/ds-step-next-button.d.ts +2 -2
  186. package/dist/components/ds-stepper/components/ds-step.d.cts +2 -2
  187. package/dist/components/ds-stepper/components/ds-step.d.ts +2 -2
  188. package/dist/components/ds-stepper/ds-stepper.d.cts +2 -2
  189. package/dist/components/ds-stepper/ds-stepper.d.ts +2 -2
  190. package/dist/components/ds-table/components/core-table/core-table.cjs +82 -185
  191. package/dist/components/ds-table/components/core-table/core-table.js +82 -185
  192. package/dist/components/ds-table/components/core-table/core-table.js.map +1 -1
  193. package/dist/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.cjs +61 -72
  194. package/dist/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.js +61 -72
  195. package/dist/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.js.map +1 -1
  196. package/dist/components/ds-table/components/ds-table-row/ds-table-row.cjs +80 -81
  197. package/dist/components/ds-table/components/ds-table-row/ds-table-row.js +80 -81
  198. package/dist/components/ds-table/components/ds-table-row/ds-table-row.js.map +1 -1
  199. package/dist/components/ds-table/ds-table.cjs +3 -3
  200. package/dist/components/ds-table/ds-table.d.cts +2 -3
  201. package/dist/components/ds-table/ds-table.d.cts.map +1 -1
  202. package/dist/components/ds-table/ds-table.d.ts +2 -3
  203. package/dist/components/ds-table/ds-table.d.ts.map +1 -1
  204. package/dist/components/ds-table/ds-table.js +3 -3
  205. package/dist/components/ds-table/ds-table.js.map +1 -1
  206. package/dist/components/ds-table/ds-table.types.d.cts +0 -4
  207. package/dist/components/ds-table/ds-table.types.d.cts.map +1 -1
  208. package/dist/components/ds-table/ds-table.types.d.ts +0 -4
  209. package/dist/components/ds-table/ds-table.types.d.ts.map +1 -1
  210. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.cjs +7 -4
  211. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.js +7 -4
  212. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.js.map +1 -1
  213. package/dist/components/ds-table/filters/hooks/index.d.ts +1 -1
  214. package/dist/components/ds-table/filters/hooks/use-table-filters.cjs +180 -178
  215. package/dist/components/ds-table/filters/hooks/use-table-filters.d.cts +58 -25
  216. package/dist/components/ds-table/filters/hooks/use-table-filters.d.cts.map +1 -1
  217. package/dist/components/ds-table/filters/hooks/use-table-filters.d.ts +58 -25
  218. package/dist/components/ds-table/filters/hooks/use-table-filters.d.ts.map +1 -1
  219. package/dist/components/ds-table/filters/hooks/use-table-filters.js +180 -178
  220. package/dist/components/ds-table/filters/hooks/use-table-filters.js.map +1 -1
  221. package/dist/components/ds-table/filters/index.d.ts +1 -1
  222. package/dist/components/ds-table/index.d.ts +1 -1
  223. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.cjs +37 -0
  224. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.js +36 -0
  225. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.js.map +1 -0
  226. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.cjs +9 -0
  227. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.js +9 -0
  228. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.js.map +1 -0
  229. package/dist/components/ds-tabs/components/ds-tabs-content/index.cjs +1 -0
  230. package/dist/components/ds-tabs/components/ds-tabs-content/index.js +1 -0
  231. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.cjs +6 -0
  232. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.js +6 -0
  233. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.js.map +1 -0
  234. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.cjs +41 -0
  235. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.js +40 -0
  236. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.js.map +1 -0
  237. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.cjs +6 -0
  238. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.js +6 -0
  239. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.js.map +1 -0
  240. package/dist/components/ds-tabs/components/ds-tabs-list/index.cjs +1 -0
  241. package/dist/components/ds-tabs/components/ds-tabs-list/index.js +1 -0
  242. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.cjs +178 -0
  243. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.js +177 -0
  244. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.js.map +1 -0
  245. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.cjs +15 -0
  246. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.js +15 -0
  247. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.js.map +1 -0
  248. package/dist/components/ds-tabs/components/ds-tabs-tab/index.cjs +1 -0
  249. package/dist/components/ds-tabs/components/ds-tabs-tab/index.js +1 -0
  250. package/dist/components/ds-tabs/ds-tabs.cjs +71 -0
  251. package/dist/components/ds-tabs/ds-tabs.d.cts +43 -0
  252. package/dist/components/ds-tabs/ds-tabs.d.cts.map +1 -0
  253. package/dist/components/ds-tabs/ds-tabs.d.ts +43 -0
  254. package/dist/components/ds-tabs/ds-tabs.d.ts.map +1 -0
  255. package/dist/components/ds-tabs/ds-tabs.js +70 -0
  256. package/dist/components/ds-tabs/ds-tabs.js.map +1 -0
  257. package/dist/components/ds-tabs/ds-tabs.module.cjs +6 -0
  258. package/dist/components/ds-tabs/ds-tabs.module.js +6 -0
  259. package/dist/components/ds-tabs/ds-tabs.module.js.map +1 -0
  260. package/dist/components/ds-tabs/ds-tabs.types.d.cts +91 -0
  261. package/dist/components/ds-tabs/ds-tabs.types.d.cts.map +1 -0
  262. package/dist/components/ds-tabs/ds-tabs.types.d.ts +92 -0
  263. package/dist/components/ds-tabs/ds-tabs.types.d.ts.map +1 -0
  264. package/dist/components/ds-tabs/index.cjs +1 -0
  265. package/dist/components/ds-tabs/index.d.ts +2 -0
  266. package/dist/components/ds-tabs/index.js +1 -0
  267. package/dist/components/ds-tag/ds-tag.d.cts +2 -2
  268. package/dist/components/ds-tag/ds-tag.d.ts +2 -2
  269. package/dist/components/ds-tag-filter/ds-tag-filter.d.cts +2 -2
  270. package/dist/components/ds-tag-filter/ds-tag-filter.d.ts +2 -2
  271. package/dist/components/ds-toggle/ds-toggle.d.cts +2 -2
  272. package/dist/components/ds-toggle/ds-toggle.d.ts +2 -2
  273. package/dist/components/ds-vertical-tabs/ds-vertical-tabs.d.cts +5 -5
  274. package/dist/components/ds-vertical-tabs/ds-vertical-tabs.d.ts +5 -5
  275. package/dist/index.cjs +24 -1
  276. package/dist/index.d.cts +15 -4
  277. package/dist/index.d.ts +20 -5
  278. package/dist/index.js +15 -2
  279. package/dist/index.min.css +1 -1
  280. package/package.json +5 -3
  281. package/src/components/ds-autocomplete/ds-autocomplete.module.scss +257 -0
  282. package/src/components/ds-autocomplete/ds-autocomplete.tsx +130 -0
  283. package/src/components/ds-autocomplete/ds-autocomplete.types.tsx +76 -0
  284. package/src/components/ds-autocomplete/index.ts +2 -0
  285. package/src/components/ds-avatar/ds-avatar.module.scss +1 -1
  286. package/src/components/ds-avatar-group/ds-avatar-group.module.scss +1 -1
  287. package/src/components/ds-button/versions/ds-button-legacy/ds-button-legacy.tsx +1 -7
  288. package/src/components/ds-button/versions/ds-button-new/ds-button-new.tsx +4 -2
  289. package/src/components/ds-chip-group/hooks/use-chip-row-calculation.ts +5 -0
  290. package/src/components/ds-confirmation/ds-confirmation.tsx +11 -115
  291. package/src/components/ds-confirmation/ds-confirmation.types.tsx +2 -1
  292. package/src/components/ds-date-input/ds-date-input.module.scss +1 -0
  293. package/src/components/ds-date-input/ds-date-input.utils.ts +16 -2
  294. package/src/components/ds-drawer/ds-drawer.tsx +4 -1
  295. package/src/components/ds-dropdown-menu/ds-dropdown-menu.module.scss +0 -1
  296. package/src/components/ds-dropdown-menu/ds-dropdown-menu.types.tsx +4 -1
  297. package/src/components/ds-file-upload/utils/format-file-size.ts +1 -1
  298. package/src/components/ds-form-control/ds-form-control.tsx +9 -2
  299. package/src/components/ds-loader/ds-loader.module.scss +57 -0
  300. package/src/components/ds-loader/ds-loader.tsx +18 -0
  301. package/src/components/ds-loader/ds-loader.types.ts +24 -0
  302. package/src/components/ds-loader/index.ts +2 -0
  303. package/src/components/ds-loader/pulsing-icon.tsx +17 -0
  304. package/src/components/ds-loader/spinner-icon.tsx +37 -0
  305. package/src/components/ds-modal/ds-modal.module.scss +123 -60
  306. package/src/components/ds-modal/ds-modal.tsx +12 -3
  307. package/src/components/ds-modal/ds-modal.types.tsx +14 -5
  308. package/src/components/ds-select/ds-select.tsx +1 -1
  309. package/src/components/ds-skeleton/ds-skeleton-circle.tsx +29 -0
  310. package/src/components/ds-skeleton/ds-skeleton-rect.tsx +36 -0
  311. package/src/components/ds-skeleton/ds-skeleton-text.tsx +49 -0
  312. package/src/components/ds-skeleton/ds-skeleton.config.ts +68 -0
  313. package/src/components/ds-skeleton/ds-skeleton.module.scss +72 -0
  314. package/src/components/ds-skeleton/ds-skeleton.tsx +9 -0
  315. package/src/components/ds-skeleton/ds-skeleton.types.ts +92 -0
  316. package/src/components/ds-skeleton/index.ts +5 -0
  317. package/src/components/ds-spinner/ds-spinner.tsx +1 -1
  318. package/src/components/ds-table/components/core-table/core-table.tsx +16 -16
  319. package/src/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.tsx +10 -13
  320. package/src/components/ds-table/components/ds-table-row/ds-table-row.tsx +0 -2
  321. package/src/components/ds-table/ds-table.tsx +6 -5
  322. package/src/components/ds-table/ds-table.types.ts +0 -5
  323. package/src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx +2 -4
  324. package/src/components/ds-table/filters/hooks/index.ts +1 -1
  325. package/src/components/ds-table/filters/hooks/use-table-filters.ts +118 -112
  326. package/src/components/ds-table/utils/story-data-generator.ts +7 -7
  327. package/src/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.scss +22 -0
  328. package/src/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.tsx +12 -0
  329. package/src/components/ds-tabs/components/ds-tabs-content/index.ts +1 -0
  330. package/src/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.scss +31 -0
  331. package/src/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.scss +27 -0
  332. package/src/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.tsx +14 -0
  333. package/src/components/ds-tabs/components/ds-tabs-list/index.ts +1 -0
  334. package/src/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.scss +242 -0
  335. package/src/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.tsx +130 -0
  336. package/src/components/ds-tabs/components/ds-tabs-tab/index.ts +1 -0
  337. package/src/components/ds-tabs/ds-tabs.module.scss +14 -0
  338. package/src/components/ds-tabs/ds-tabs.tsx +46 -0
  339. package/src/components/ds-tabs/ds-tabs.types.ts +97 -0
  340. package/src/components/ds-tabs/index.ts +2 -0
  341. package/src/index.ts +4 -0
  342. package/src/styles/shared/_modal.scss +0 -123
  343. package/dist/components/ds-confirmation/ds-confirmation.module.cjs +0 -21
  344. package/dist/components/ds-confirmation/ds-confirmation.module.js +0 -21
  345. package/dist/components/ds-confirmation/ds-confirmation.module.js.map +0 -1
  346. package/src/components/ds-confirmation/ds-confirmation.module.scss +0 -58
@@ -44,7 +44,11 @@ export const stringToDateValue = (dates: string | [string, string]): DateValue[]
44
44
  export const dateValuesToStrings = (dates: DateValue[], range: boolean): string | [string, string] => {
45
45
  const values = dates.map((date) => date.toString());
46
46
 
47
- return range ? [values[0], values[1]] : values[0];
47
+ if (range) {
48
+ return [values[0] ?? '', values[1] ?? ''];
49
+ }
50
+
51
+ return values[0] ?? '';
48
52
  };
49
53
 
50
54
  /**
@@ -68,7 +72,7 @@ export const formatDateInputValue = (value: DateValue[], range: boolean): string
68
72
  }
69
73
  const newValue = value.map(formatDateValue);
70
74
 
71
- return range ? newValue.join(' - ') : newValue[0];
75
+ return range ? newValue.join(' - ') : (newValue[0] ?? '');
72
76
  };
73
77
 
74
78
  /**
@@ -86,6 +90,11 @@ const parseDateString = (dateStr: string): DateValue | null => {
86
90
  }
87
91
 
88
92
  const [, month, day, year] = match;
93
+
94
+ if (!month || !day || !year) {
95
+ return null;
96
+ }
97
+
89
98
  const monthNum = parseInt(month, 10);
90
99
  const dayNum = parseInt(day, 10);
91
100
  const yearNum = parseInt(year, 10);
@@ -129,6 +138,11 @@ const parseRangeInput = (text: string): ParsedDateRange => {
129
138
  }
130
139
 
131
140
  const [startStr, endStr] = parts;
141
+
142
+ if (!startStr || !endStr) {
143
+ return { start: null, end: null, isValid: false };
144
+ }
145
+
132
146
  const startDate = parseDateString(startStr);
133
147
  const endDate = parseDateString(endStr);
134
148
 
@@ -46,9 +46,12 @@ const DsDrawer = ({
46
46
  style={style}
47
47
  className={classNames(
48
48
  styles.drawer,
49
- styles[`cols-${String(columns)}`],
50
49
  styles[`position-${position}`],
51
50
  className,
51
+
52
+ // @ts-expect-error: these classnames are generated dynamically in scss
53
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
54
+ styles[`cols-${String(columns)}`],
52
55
  )}
53
56
  >
54
57
  <div className={styles.content}>{children}</div>
@@ -8,7 +8,6 @@
8
8
  max-height: var(--available-height, 400px);
9
9
  overflow-y: auto;
10
10
  width: auto;
11
- z-index: var(--layer-index);
12
11
 
13
12
  &:focus-visible {
14
13
  outline-offset: 2px;
@@ -10,7 +10,10 @@ type BasePositioning = NonNullable<Menu.RootProps['positioning']>;
10
10
  /**
11
11
  * Positioning options for dropdown menu
12
12
  */
13
- export type DsDropdownMenuPositioning = Pick<BasePositioning, 'placement' | 'gutter' | 'sameWidth'>;
13
+ export type DsDropdownMenuPositioning = Pick<
14
+ BasePositioning,
15
+ 'placement' | 'gutter' | 'sameWidth' | 'getAnchorRect'
16
+ >;
14
17
 
15
18
  /**
16
19
  * DEPRECATED: Legacy dropdown menu option configuration
@@ -11,5 +11,5 @@ export function formatFileSize(bytes: number): string {
11
11
  const i = Math.floor(Math.log(bytes) / Math.log(k));
12
12
  const size = bytes / Math.pow(k, i);
13
13
 
14
- return `${size.toFixed(2)} ${sizes[i]}`;
14
+ return `${size.toFixed(2)} ${String(sizes[i])}`;
15
15
  }
@@ -57,7 +57,14 @@ const DsFormControl = ({
57
57
  return (
58
58
  <FormControlContext.Provider value={{ controlId }}>
59
59
  <div
60
- className={classNames(styles.container, status && message && styles[status], className)}
60
+ className={classNames(
61
+ styles.container,
62
+ className,
63
+
64
+ // @ts-expect-error: `info` doesn't have its own classname
65
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
66
+ status && message && styles[status],
67
+ )}
61
68
  style={style}
62
69
  >
63
70
  <div className={styles.labelContainer}>
@@ -77,7 +84,7 @@ const DsFormControl = ({
77
84
  {message && (
78
85
  <div className={styles.message}>
79
86
  <DsIcon icon={messageIcon} size="tiny" filled />
80
- <span className={styles.messageText}>{message}</span>
87
+ <span>{message}</span>
81
88
  </div>
82
89
  )}
83
90
  </div>
@@ -0,0 +1,57 @@
1
+ .loaderContainer {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ }
6
+
7
+ .loader {
8
+ animation: spin 1s linear infinite;
9
+ }
10
+
11
+ @keyframes spin {
12
+ 0% {
13
+ transform: rotate(0deg);
14
+ }
15
+
16
+ 100% {
17
+ transform: rotate(360deg);
18
+ }
19
+ }
20
+
21
+ .pulsingIcon {
22
+ --loader-pulsing-color: #5452f6;
23
+
24
+ color: var(--loader-pulsing-color);
25
+ }
26
+
27
+ .pulsingOuter {
28
+ fill: currentcolor;
29
+ opacity: 0.3;
30
+ transform-origin: center;
31
+ animation: pulse 1.4s ease-in-out infinite;
32
+ }
33
+
34
+ .pulsingInner {
35
+ fill: currentcolor;
36
+ }
37
+
38
+ @keyframes pulse {
39
+ 0%,
40
+ 100% {
41
+ transform: scale(0.7);
42
+ opacity: 0.3;
43
+ }
44
+
45
+ 50% {
46
+ transform: scale(1.1);
47
+ opacity: 0.15;
48
+ }
49
+ }
50
+
51
+ .spinnerGradient {
52
+ --loader-spinner-color: #4192f6;
53
+
54
+ background: conic-gradient(from 90deg, var(--loader-spinner-color) 0deg, transparent 360deg);
55
+ height: 100%;
56
+ width: 100%;
57
+ }
@@ -0,0 +1,18 @@
1
+ import classNames from 'classnames';
2
+ import styles from './ds-loader.module.scss';
3
+ import type { DsLoaderProps } from './ds-loader.types';
4
+ import PulsingIcon from './pulsing-icon';
5
+ import SpinnerIcon from './spinner-icon';
6
+
7
+ /**
8
+ * Design system Loader component
9
+ */
10
+ const DsLoader = ({ variant = 'spinner', className, ...props }: DsLoaderProps) => {
11
+ return (
12
+ <div className={classNames(styles.loaderContainer, className)} {...props}>
13
+ {variant === 'pulsing' ? <PulsingIcon /> : <SpinnerIcon />}
14
+ </div>
15
+ );
16
+ };
17
+
18
+ export default DsLoader;
@@ -0,0 +1,24 @@
1
+ import type React from 'react';
2
+
3
+ export const loaderVariants = ['spinner', 'pulsing'] as const;
4
+ export type LoaderVariant = (typeof loaderVariants)[number];
5
+
6
+ export interface DsLoaderProps {
7
+ /**
8
+ * Loader variant
9
+ * @default 'spinner'
10
+ */
11
+ variant?: LoaderVariant;
12
+ /**
13
+ * Additional CSS class names
14
+ */
15
+ className?: string;
16
+ /**
17
+ * Additional styles to apply to the component
18
+ */
19
+ style?: React.CSSProperties;
20
+ /**
21
+ * Ref to the loader container element
22
+ */
23
+ ref?: React.Ref<HTMLDivElement>;
24
+ }
@@ -0,0 +1,2 @@
1
+ export { default as DsLoader } from './ds-loader';
2
+ export * from './ds-loader.types';
@@ -0,0 +1,17 @@
1
+ import styles from './ds-loader.module.scss';
2
+
3
+ const PulsingIcon = () => (
4
+ <svg
5
+ className={styles.pulsingIcon}
6
+ width="24"
7
+ height="24"
8
+ viewBox="0 0 24 24"
9
+ fill="none"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ >
12
+ <circle className={styles.pulsingOuter} cx="12" cy="12" r="8" />
13
+ <circle className={styles.pulsingInner} cx="12" cy="12" r="5.5" />
14
+ </svg>
15
+ );
16
+
17
+ export default PulsingIcon;
@@ -0,0 +1,37 @@
1
+ import styles from './ds-loader.module.scss';
2
+
3
+ const SpinnerIcon = () => (
4
+ <svg
5
+ className={styles.loader}
6
+ width="24"
7
+ height="24"
8
+ viewBox="0 0 24 24"
9
+ fill="none"
10
+ xmlns="http://www.w3.org/2000/svg"
11
+ >
12
+ <mask id="path-2-inside-1_14836_15182" fill="white">
13
+ <path d="M12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4Z" />
14
+ </mask>
15
+ <g clipPath="url(#paint0_angular_14836_15182_clip_path)" mask="url(#path-2-inside-1_14836_15182)">
16
+ <g transform="matrix(-0.008 0 0 0.008 12 12)">
17
+ <foreignObject x="-1375" y="-1375" width="2750" height="2750">
18
+ <div className={styles.spinnerGradient} />
19
+ </foreignObject>
20
+ </g>
21
+ </g>
22
+ <path
23
+ d="M12 4L12 7C9.23858 7 7 9.23858 7 12L4 12L1 12C1 5.92487 5.92487 1 12 1L12 4ZM4 12L7 12C7 14.7614 9.23858 17 12 17L12 20L12 23C5.92487 23 1 18.0751 1 12L4 12ZM12 20L12 17C14.7614 17 17 14.7614 17 12L20 12L23 12C23 18.0751 18.0751 23 12 23L12 20ZM20 12L17 12C17 9.23858 14.7614 7 12 7L12 4L12 1C18.0751 1 23 5.92487 23 12L20 12Z"
24
+ mask="url(#path-2-inside-1_14836_15182)"
25
+ />
26
+ <defs>
27
+ <clipPath id="paint0_angular_14836_15182_clip_path">
28
+ <path
29
+ d="M12 4L12 7C9.23858 7 7 9.23858 7 12L4 12L1 12C1 5.92487 5.92487 1 12 1L12 4ZM4 12L7 12C7 14.7614 9.23858 17 12 17L12 20L12 23C5.92487 23 1 18.0751 1 12L4 12ZM12 20L12 17C14.7614 17 17 14.7614 17 12L20 12L23 12C23 18.0751 18.0751 23 12 23L12 20ZM20 12L17 12C17 9.23858 14.7614 7 12 7L12 4L12 1C18.0751 1 23 5.92487 23 12L20 12Z"
30
+ mask="url(#path-2-inside-1_14836_15182)"
31
+ />
32
+ </clipPath>
33
+ </defs>
34
+ </svg>
35
+ );
36
+
37
+ export default SpinnerIcon;
@@ -1,20 +1,91 @@
1
- @use '../../styles/shared/modal' as shared;
2
-
3
- $pad-x: 24px;
4
- $pad-y: 16px;
1
+ $pad-x: var(--spacing-lg);
2
+ $pad-y: var(--spacing-standard);
5
3
  $max-width: 90vw;
6
- $max-height: 90vh;
4
+ $border-size: 1px;
5
+ $border: $border-size solid var(--color-border-secondary);
7
6
 
8
7
  .overlay {
9
- @include shared.overlay-base;
8
+ position: fixed;
9
+ inset: 0;
10
+ background: var(--color-background-brand);
11
+ opacity: 0.4;
12
+ z-index: 1199;
13
+
14
+ &[data-state='open'] {
15
+ animation: fade-in-overlay 0.2s ease-in-out both;
16
+ }
17
+
18
+ &[data-state='closed'] {
19
+ animation: fade-out-overlay 0.2s 0.1s ease-in-out both;
20
+ }
21
+ }
22
+
23
+ @keyframes fade-in-overlay {
24
+ 0% {
25
+ opacity: 0;
26
+ }
27
+
28
+ 100% {
29
+ opacity: 0.4;
30
+ }
31
+ }
32
+
33
+ @keyframes fade-out-overlay {
34
+ 0% {
35
+ opacity: 0.4;
36
+ }
37
+
38
+ 100% {
39
+ opacity: 0;
40
+ }
10
41
  }
11
42
 
12
43
  .modal {
13
- @include shared.modal-base;
44
+ position: fixed;
45
+ inset: 50% auto auto 50%;
46
+ background: var(--color-background);
47
+ border-radius: 4px;
48
+ box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.15);
49
+ z-index: 1200;
50
+ overflow: hidden;
51
+ inline-size: min(var(--col-span-6), $max-width);
52
+
53
+ &[data-state='open'] {
54
+ animation: scale-in-modal 0.2s 0.1s ease-in-out both;
55
+ }
56
+
57
+ &[data-state='closed'] {
58
+ animation: scale-out-modal 0.2s ease-in-out both;
59
+ }
60
+ }
61
+
62
+ @keyframes scale-in-modal {
63
+ 0% {
64
+ opacity: 0;
65
+ transform: translate(-50%, -50%) scale(0.9);
66
+ }
67
+
68
+ 100% {
69
+ opacity: 1;
70
+ transform: translate(-50%, -50%) scale(1);
71
+ }
72
+ }
73
+
74
+ @keyframes scale-out-modal {
75
+ 0% {
76
+ opacity: 1;
77
+ transform: translate(-50%, -50%) scale(1);
78
+ }
79
+
80
+ 100% {
81
+ opacity: 0;
82
+ transform: translate(-50%, -50%) scale(0.9);
83
+ }
14
84
  }
15
85
 
16
86
  .content {
17
- @include shared.content-base;
87
+ display: flex;
88
+ flex-direction: column;
18
89
  height: 100%;
19
90
  }
20
91
 
@@ -25,76 +96,68 @@ $max-height: 90vh;
25
96
  }
26
97
 
27
98
  .header {
28
- @include shared.header-base;
99
+ display: flex;
100
+ align-items: center;
101
+ gap: var(--spacing-xs);
102
+ position: relative;
103
+ background: inherit;
104
+ flex-shrink: 0;
105
+
106
+ &::after {
107
+ content: '';
108
+ position: absolute;
109
+ bottom: 0;
110
+ left: $pad-x;
111
+ right: $pad-x;
112
+ height: $border-size;
113
+ background: var(--color-border-secondary);
114
+ }
29
115
  }
30
116
 
31
117
  .footer {
32
- @include shared.footer-base;
33
118
  display: flex;
119
+ background: inherit;
120
+ flex-shrink: 0;
34
121
  }
35
122
 
36
123
  .title {
37
- @include shared.title-base;
124
+ color: var(--color-font-main);
125
+ margin: 0;
126
+ flex: 1;
38
127
  }
39
128
 
40
129
  .body {
41
- @include shared.body-base;
130
+ flex: 1;
131
+ overflow-y: auto;
132
+ overflow-x: hidden;
133
+ min-height: 0;
42
134
  }
43
135
 
44
136
  .actions {
45
- @include shared.actions-base;
137
+ display: flex;
138
+ gap: var(--spacing-xs);
139
+ justify-content: flex-end;
46
140
  margin-left: auto;
47
141
  }
48
142
 
49
- // width classes derived from DS grid
50
- .modal {
51
- inline-size: min(var(--col-span-6), $max-width);
52
- }
53
-
54
- .modal.cols-1 {
55
- inline-size: min(var(--col-span-1), $max-width);
56
- }
57
-
58
- .modal.cols-2 {
59
- inline-size: min(var(--col-span-2), $max-width);
60
- }
61
-
62
- .modal.cols-3 {
63
- inline-size: min(var(--col-span-3), $max-width);
64
- }
65
-
66
- .modal.cols-4 {
67
- inline-size: min(var(--col-span-4), $max-width);
68
- }
69
-
70
- .modal.cols-5 {
71
- inline-size: min(var(--col-span-5), $max-width);
72
- }
73
-
74
- .modal.cols-6 {
75
- inline-size: min(var(--col-span-6), $max-width);
76
- }
77
-
78
- .modal.cols-7 {
79
- inline-size: min(var(--col-span-7), $max-width);
80
- }
143
+ // Dividers mode: full-width borders on header and footer
144
+ .content[data-dividers] {
145
+ .header {
146
+ border-bottom: $border;
81
147
 
82
- .modal.cols-8 {
83
- inline-size: min(var(--col-span-8), $max-width);
84
- }
85
-
86
- .modal.cols-9 {
87
- inline-size: min(var(--col-span-9), $max-width);
88
- }
89
-
90
- .modal.cols-10 {
91
- inline-size: min(var(--col-span-10), $max-width);
92
- }
148
+ &::after {
149
+ display: none;
150
+ }
151
+ }
93
152
 
94
- .modal.cols-11 {
95
- inline-size: min(var(--col-span-11), $max-width);
153
+ .footer {
154
+ border-top: $border;
155
+ }
96
156
  }
97
157
 
98
- .modal.cols-12 {
99
- inline-size: min(var(--col-span-12), $max-width);
158
+ // Width classes derived from DS grid
159
+ @for $i from 1 through 12 {
160
+ .modal.cols-#{$i} {
161
+ inline-size: min(var(--col-span-#{$i}), $max-width);
162
+ }
100
163
  }
@@ -14,14 +14,15 @@ import { DsTypography } from '../ds-typography';
14
14
  */
15
15
  const DsModal = ({
16
16
  open,
17
- onOpenChange,
18
17
  columns = 6,
18
+ dividers = false,
19
19
  style,
20
20
  className,
21
21
  modal = true,
22
22
  closeOnEscape,
23
23
  closeOnInteractOutside = false,
24
24
  children,
25
+ onOpenChange,
25
26
  }: DsModalProps) => {
26
27
  const handleOpenChange = (details: { open: boolean }) => {
27
28
  onOpenChange(details.open);
@@ -40,9 +41,17 @@ const DsModal = ({
40
41
  <Dialog.Positioner>
41
42
  <Dialog.Content
42
43
  style={style}
43
- className={classNames(styles.modal, styles[`cols-${String(columns)}`], className)}
44
+ className={classNames(
45
+ styles.modal,
46
+ className,
47
+
48
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
49
+ styles[`cols-${columns}`],
50
+ )}
44
51
  >
45
- <div className={classNames(styles.content)}>{children}</div>
52
+ <div className={styles.content} data-dividers={dividers || undefined}>
53
+ {children}
54
+ </div>
46
55
  </Dialog.Content>
47
56
  </Dialog.Positioner>
48
57
  </Portal>
@@ -17,21 +17,24 @@ export interface DsModalProps extends Pick<
17
17
  * Whether the modal is open
18
18
  */
19
19
  open: boolean;
20
- /**
21
- * Callback when modal open state changes
22
- * @param open - whether the modal is open
23
- */
24
- onOpenChange: (open: boolean) => void;
25
20
 
26
21
  /**
27
22
  * Number of grid columns for modal width
28
23
  * @default 6
29
24
  */
30
25
  columns?: DsModalColumns;
26
+
27
+ /**
28
+ * Show full-width dividers between header, body, and footer sections
29
+ * @default false
30
+ */
31
+ dividers?: boolean;
32
+
31
33
  /**
32
34
  * Optional inline styles to apply to the component
33
35
  */
34
36
  style?: CSSProperties;
37
+
35
38
  /**
36
39
  * Additional CSS class name
37
40
  */
@@ -41,4 +44,10 @@ export interface DsModalProps extends Pick<
41
44
  * Modal body content
42
45
  */
43
46
  children: ReactNode;
47
+
48
+ /**
49
+ * Callback when modal open state changes
50
+ * @param open - whether the modal is open
51
+ */
52
+ onOpenChange: (open: boolean) => void;
44
53
  }
@@ -66,7 +66,7 @@ const DsSelect = ({
66
66
  onValueChange: (details) => {
67
67
  // Single select mode.
68
68
  if (!multiselectProps.multiple) {
69
- multiselectProps.onValueChange?.(details.value[0]);
69
+ multiselectProps.onValueChange?.(details.value[0] ?? '');
70
70
  return;
71
71
  }
72
72
 
@@ -0,0 +1,29 @@
1
+ import type { CSSProperties } from 'react';
2
+ import classNames from 'classnames';
3
+ import type { DsSkeletonCircleProps } from './ds-skeleton.types';
4
+ import { circleSizeMap } from './ds-skeleton.config';
5
+ import styles from './ds-skeleton.module.scss';
6
+
7
+ /**
8
+ * Circle skeleton component - for avatars and icons
9
+ * Matches DsAvatar sizes
10
+ */
11
+ const DsSkeletonCircle = ({ size = 'regular', color = 'gray', className, style }: DsSkeletonCircleProps) => {
12
+ const pixelSize = typeof size === 'number' ? size : circleSizeMap[size];
13
+
14
+ const circleStyle: CSSProperties = {
15
+ width: `${String(pixelSize)}px`,
16
+ height: `${String(pixelSize)}px`,
17
+ ...style,
18
+ };
19
+
20
+ return (
21
+ <span
22
+ className={classNames(styles.skeleton, styles.circle, styles[color], className)}
23
+ style={circleStyle}
24
+ aria-hidden="true"
25
+ />
26
+ );
27
+ };
28
+
29
+ export default DsSkeletonCircle;
@@ -0,0 +1,36 @@
1
+ import type React from 'react';
2
+ import classNames from 'classnames';
3
+ import type { DsSkeletonRectProps } from './ds-skeleton.types';
4
+ import { radiusMap } from './ds-skeleton.config';
5
+ import styles from './ds-skeleton.module.scss';
6
+
7
+ /**
8
+ * Rectangle skeleton component - for buttons, images, and custom shapes
9
+ */
10
+ const DsSkeletonRect = ({
11
+ width,
12
+ height,
13
+ radius = 'default',
14
+ color = 'gray',
15
+ className,
16
+ style,
17
+ }: DsSkeletonRectProps) => {
18
+ const borderRadius = typeof radius === 'number' ? radius : radiusMap[radius];
19
+
20
+ const rectStyle: React.CSSProperties = {
21
+ width: typeof width === 'number' ? `${String(width)}px` : width,
22
+ height: typeof height === 'number' ? `${String(height)}px` : height,
23
+ borderRadius: `${String(borderRadius)}px`,
24
+ ...style,
25
+ };
26
+
27
+ return (
28
+ <span
29
+ className={classNames(styles.skeleton, styles.rectangle, styles[color], className)}
30
+ style={rectStyle}
31
+ aria-hidden="true"
32
+ />
33
+ );
34
+ };
35
+
36
+ export default DsSkeletonRect;