@drivenets/design-system 0.2.0 → 0.3.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 (278) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/components/ds-alert-banner/ds-alert-banner.d.cts +5 -5
  3. package/dist/components/ds-alert-banner/ds-alert-banner.d.cts.map +1 -1
  4. package/dist/components/ds-alert-banner/ds-alert-banner.d.ts +5 -5
  5. package/dist/components/ds-alert-banner/ds-alert-banner.types.d.cts.map +1 -1
  6. package/dist/components/ds-button/ds-button.d.cts +2 -2
  7. package/dist/components/ds-button/ds-button.d.ts +2 -2
  8. package/dist/components/ds-button/ds-button.d.ts.map +1 -1
  9. package/dist/components/ds-button/versions/ds-button-legacy/ds-button-legacy.cjs +23 -24
  10. package/dist/components/ds-button/versions/ds-button-legacy/ds-button-legacy.js +23 -24
  11. package/dist/components/ds-button/versions/ds-button-legacy/ds-button-legacy.js.map +1 -1
  12. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.cjs +24 -25
  13. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.js +24 -25
  14. package/dist/components/ds-button/versions/ds-button-new/ds-button-new.js.map +1 -1
  15. package/dist/components/ds-chip-group/hooks/use-chip-row-calculation.cjs +1 -0
  16. package/dist/components/ds-chip-group/hooks/use-chip-row-calculation.js +1 -0
  17. package/dist/components/ds-chip-group/hooks/use-chip-row-calculation.js.map +1 -1
  18. package/dist/components/ds-confirmation/ds-confirmation.d.cts +8 -8
  19. package/dist/components/ds-confirmation/ds-confirmation.d.ts +8 -8
  20. package/dist/components/ds-date-input/ds-date-input.d.cts +2 -2
  21. package/dist/components/ds-date-input/ds-date-input.d.cts.map +1 -1
  22. package/dist/components/ds-date-input/ds-date-input.d.ts +2 -2
  23. package/dist/components/ds-date-input/ds-date-input.module.cjs +22 -22
  24. package/dist/components/ds-date-input/ds-date-input.module.js +22 -22
  25. package/dist/components/ds-date-input/ds-date-input.module.js.map +1 -1
  26. package/dist/components/ds-date-input/ds-date-input.utils.cjs +9 -2
  27. package/dist/components/ds-date-input/ds-date-input.utils.js +9 -2
  28. package/dist/components/ds-date-input/ds-date-input.utils.js.map +1 -1
  29. package/dist/components/ds-drawer/ds-drawer.cjs +3 -3
  30. package/dist/components/ds-drawer/ds-drawer.d.cts +9 -9
  31. package/dist/components/ds-drawer/ds-drawer.d.cts.map +1 -1
  32. package/dist/components/ds-drawer/ds-drawer.d.ts +9 -9
  33. package/dist/components/ds-drawer/ds-drawer.d.ts.map +1 -1
  34. package/dist/components/ds-drawer/ds-drawer.js +3 -3
  35. package/dist/components/ds-drawer/ds-drawer.js.map +1 -1
  36. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.cts +1 -1
  37. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.cts.map +1 -1
  38. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.ts +1 -1
  39. package/dist/components/ds-dropdown-menu/ds-dropdown-menu.types.d.ts.map +1 -1
  40. package/dist/components/ds-expandable-text-input/ds-expandable-text-input.d.cts +2 -2
  41. package/dist/components/ds-expandable-text-input/ds-expandable-text-input.d.ts +2 -2
  42. package/dist/components/ds-file-upload/utils/format-file-size.cjs +1 -1
  43. package/dist/components/ds-file-upload/utils/format-file-size.js +1 -1
  44. package/dist/components/ds-file-upload/utils/format-file-size.js.map +1 -1
  45. package/dist/components/ds-form-control/ds-form-control.cjs +2 -5
  46. package/dist/components/ds-form-control/ds-form-control.d.cts +8 -8
  47. package/dist/components/ds-form-control/ds-form-control.js +2 -5
  48. package/dist/components/ds-form-control/ds-form-control.js.map +1 -1
  49. package/dist/components/ds-loader/ds-loader.cjs +60 -0
  50. package/dist/components/ds-loader/ds-loader.d.cts +15 -0
  51. package/dist/components/ds-loader/ds-loader.d.cts.map +1 -0
  52. package/dist/components/ds-loader/ds-loader.d.ts +15 -0
  53. package/dist/components/ds-loader/ds-loader.d.ts.map +1 -0
  54. package/dist/components/ds-loader/ds-loader.js +59 -0
  55. package/dist/components/ds-loader/ds-loader.js.map +1 -0
  56. package/dist/components/ds-loader/ds-loader.module.cjs +15 -0
  57. package/dist/components/ds-loader/ds-loader.module.js +15 -0
  58. package/dist/components/ds-loader/ds-loader.module.js.map +1 -0
  59. package/dist/components/ds-loader/ds-loader.types.cjs +6 -0
  60. package/dist/components/ds-loader/ds-loader.types.d.cts +27 -0
  61. package/dist/components/ds-loader/ds-loader.types.d.cts.map +1 -0
  62. package/dist/components/ds-loader/ds-loader.types.d.ts +27 -0
  63. package/dist/components/ds-loader/ds-loader.types.d.ts.map +1 -0
  64. package/dist/components/ds-loader/ds-loader.types.js +6 -0
  65. package/dist/components/ds-loader/ds-loader.types.js.map +1 -0
  66. package/dist/components/ds-loader/index.cjs +2 -0
  67. package/dist/components/ds-loader/index.d.ts +2 -0
  68. package/dist/components/ds-loader/index.js +2 -0
  69. package/dist/components/ds-loader/pulsing-icon.cjs +37 -0
  70. package/dist/components/ds-loader/pulsing-icon.js +37 -0
  71. package/dist/components/ds-loader/pulsing-icon.js.map +1 -0
  72. package/dist/components/ds-loader/spinner-icon.cjs +74 -0
  73. package/dist/components/ds-loader/spinner-icon.js +74 -0
  74. package/dist/components/ds-loader/spinner-icon.js.map +1 -0
  75. package/dist/components/ds-modal/ds-modal.cjs +2 -2
  76. package/dist/components/ds-modal/ds-modal.d.cts +8 -8
  77. package/dist/components/ds-modal/ds-modal.d.cts.map +1 -1
  78. package/dist/components/ds-modal/ds-modal.d.ts +8 -8
  79. package/dist/components/ds-modal/ds-modal.d.ts.map +1 -1
  80. package/dist/components/ds-modal/ds-modal.js +2 -2
  81. package/dist/components/ds-modal/ds-modal.js.map +1 -1
  82. package/dist/components/ds-panel/ds-panel.d.cts +2 -2
  83. package/dist/components/ds-panel/ds-panel.d.ts +2 -2
  84. package/dist/components/ds-select/ds-select.cjs +1 -1
  85. package/dist/components/ds-select/ds-select.d.cts +2 -2
  86. package/dist/components/ds-select/ds-select.d.ts +2 -2
  87. package/dist/components/ds-select/ds-select.js +1 -1
  88. package/dist/components/ds-select/ds-select.js.map +1 -1
  89. package/dist/components/ds-skeleton/ds-skeleton-circle.cjs +59 -0
  90. package/dist/components/ds-skeleton/ds-skeleton-circle.d.cts +18 -0
  91. package/dist/components/ds-skeleton/ds-skeleton-circle.d.cts.map +1 -0
  92. package/dist/components/ds-skeleton/ds-skeleton-circle.d.ts +18 -0
  93. package/dist/components/ds-skeleton/ds-skeleton-circle.d.ts.map +1 -0
  94. package/dist/components/ds-skeleton/ds-skeleton-circle.js +58 -0
  95. package/dist/components/ds-skeleton/ds-skeleton-circle.js.map +1 -0
  96. package/dist/components/ds-skeleton/ds-skeleton-rect.cjs +61 -0
  97. package/dist/components/ds-skeleton/ds-skeleton-rect.d.cts +18 -0
  98. package/dist/components/ds-skeleton/ds-skeleton-rect.d.cts.map +1 -0
  99. package/dist/components/ds-skeleton/ds-skeleton-rect.d.ts +18 -0
  100. package/dist/components/ds-skeleton/ds-skeleton-rect.d.ts.map +1 -0
  101. package/dist/components/ds-skeleton/ds-skeleton-rect.js +60 -0
  102. package/dist/components/ds-skeleton/ds-skeleton-rect.js.map +1 -0
  103. package/dist/components/ds-skeleton/ds-skeleton-text.cjs +91 -0
  104. package/dist/components/ds-skeleton/ds-skeleton-text.d.cts +21 -0
  105. package/dist/components/ds-skeleton/ds-skeleton-text.d.cts.map +1 -0
  106. package/dist/components/ds-skeleton/ds-skeleton-text.d.ts +21 -0
  107. package/dist/components/ds-skeleton/ds-skeleton-text.d.ts.map +1 -0
  108. package/dist/components/ds-skeleton/ds-skeleton-text.js +90 -0
  109. package/dist/components/ds-skeleton/ds-skeleton-text.js.map +1 -0
  110. package/dist/components/ds-skeleton/ds-skeleton.cjs +13 -0
  111. package/dist/components/ds-skeleton/ds-skeleton.config.cjs +62 -0
  112. package/dist/components/ds-skeleton/ds-skeleton.config.js +59 -0
  113. package/dist/components/ds-skeleton/ds-skeleton.config.js.map +1 -0
  114. package/dist/components/ds-skeleton/ds-skeleton.d.cts +32 -0
  115. package/dist/components/ds-skeleton/ds-skeleton.d.cts.map +1 -0
  116. package/dist/components/ds-skeleton/ds-skeleton.d.ts +32 -0
  117. package/dist/components/ds-skeleton/ds-skeleton.d.ts.map +1 -0
  118. package/dist/components/ds-skeleton/ds-skeleton.js +14 -0
  119. package/dist/components/ds-skeleton/ds-skeleton.js.map +1 -0
  120. package/dist/components/ds-skeleton/ds-skeleton.module.cjs +15 -0
  121. package/dist/components/ds-skeleton/ds-skeleton.module.js +15 -0
  122. package/dist/components/ds-skeleton/ds-skeleton.module.js.map +1 -0
  123. package/dist/components/ds-skeleton/ds-skeleton.types.cjs +8 -0
  124. package/dist/components/ds-skeleton/ds-skeleton.types.d.cts +91 -0
  125. package/dist/components/ds-skeleton/ds-skeleton.types.d.cts.map +1 -0
  126. package/dist/components/ds-skeleton/ds-skeleton.types.d.ts +93 -0
  127. package/dist/components/ds-skeleton/ds-skeleton.types.d.ts.map +1 -0
  128. package/dist/components/ds-skeleton/ds-skeleton.types.js +7 -0
  129. package/dist/components/ds-skeleton/ds-skeleton.types.js.map +1 -0
  130. package/dist/components/ds-skeleton/index.cjs +5 -0
  131. package/dist/components/ds-skeleton/index.d.ts +5 -0
  132. package/dist/components/ds-skeleton/index.js +5 -0
  133. package/dist/components/ds-smart-tabs/ds-smart-tabs.d.cts +2 -2
  134. package/dist/components/ds-smart-tabs/ds-smart-tabs.d.ts +2 -2
  135. package/dist/components/ds-spinner/ds-spinner.cjs +43 -45
  136. package/dist/components/ds-spinner/ds-spinner.js +43 -45
  137. package/dist/components/ds-spinner/ds-spinner.js.map +1 -1
  138. package/dist/components/ds-stepper/components/ds-step-content.d.cts +2 -2
  139. package/dist/components/ds-stepper/components/ds-step-content.d.ts +2 -2
  140. package/dist/components/ds-stepper/components/ds-step-next-button.d.cts +2 -2
  141. package/dist/components/ds-stepper/components/ds-step-next-button.d.ts +2 -2
  142. package/dist/components/ds-stepper/components/ds-step.d.cts +2 -2
  143. package/dist/components/ds-stepper/components/ds-step.d.ts +2 -2
  144. package/dist/components/ds-stepper/ds-stepper.d.cts +2 -2
  145. package/dist/components/ds-stepper/ds-stepper.d.ts +2 -2
  146. package/dist/components/ds-table/components/core-table/core-table.cjs +82 -185
  147. package/dist/components/ds-table/components/core-table/core-table.js +82 -185
  148. package/dist/components/ds-table/components/core-table/core-table.js.map +1 -1
  149. package/dist/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.cjs +61 -72
  150. package/dist/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.js +61 -72
  151. package/dist/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.js.map +1 -1
  152. package/dist/components/ds-table/components/ds-table-row/ds-table-row.cjs +80 -81
  153. package/dist/components/ds-table/components/ds-table-row/ds-table-row.js +80 -81
  154. package/dist/components/ds-table/components/ds-table-row/ds-table-row.js.map +1 -1
  155. package/dist/components/ds-table/ds-table.cjs +3 -3
  156. package/dist/components/ds-table/ds-table.d.cts +2 -3
  157. package/dist/components/ds-table/ds-table.d.cts.map +1 -1
  158. package/dist/components/ds-table/ds-table.d.ts +2 -3
  159. package/dist/components/ds-table/ds-table.d.ts.map +1 -1
  160. package/dist/components/ds-table/ds-table.js +3 -3
  161. package/dist/components/ds-table/ds-table.js.map +1 -1
  162. package/dist/components/ds-table/ds-table.types.d.cts +0 -4
  163. package/dist/components/ds-table/ds-table.types.d.cts.map +1 -1
  164. package/dist/components/ds-table/ds-table.types.d.ts +0 -4
  165. package/dist/components/ds-table/ds-table.types.d.ts.map +1 -1
  166. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.cjs +7 -4
  167. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.js +7 -4
  168. package/dist/components/ds-table/filters/adapters/create-dual-range-filter-adapter.js.map +1 -1
  169. package/dist/components/ds-table/filters/hooks/use-table-filters.cjs +94 -87
  170. package/dist/components/ds-table/filters/hooks/use-table-filters.js +94 -87
  171. package/dist/components/ds-table/filters/hooks/use-table-filters.js.map +1 -1
  172. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.cjs +37 -0
  173. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.js +36 -0
  174. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.js.map +1 -0
  175. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.cjs +9 -0
  176. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.js +9 -0
  177. package/dist/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.js.map +1 -0
  178. package/dist/components/ds-tabs/components/ds-tabs-content/index.cjs +1 -0
  179. package/dist/components/ds-tabs/components/ds-tabs-content/index.js +1 -0
  180. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.cjs +6 -0
  181. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.js +6 -0
  182. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.js.map +1 -0
  183. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.cjs +41 -0
  184. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.js +40 -0
  185. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.js.map +1 -0
  186. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.cjs +6 -0
  187. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.js +6 -0
  188. package/dist/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.js.map +1 -0
  189. package/dist/components/ds-tabs/components/ds-tabs-list/index.cjs +1 -0
  190. package/dist/components/ds-tabs/components/ds-tabs-list/index.js +1 -0
  191. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.cjs +178 -0
  192. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.js +177 -0
  193. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.js.map +1 -0
  194. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.cjs +15 -0
  195. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.js +15 -0
  196. package/dist/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.js.map +1 -0
  197. package/dist/components/ds-tabs/components/ds-tabs-tab/index.cjs +1 -0
  198. package/dist/components/ds-tabs/components/ds-tabs-tab/index.js +1 -0
  199. package/dist/components/ds-tabs/ds-tabs.cjs +71 -0
  200. package/dist/components/ds-tabs/ds-tabs.d.cts +43 -0
  201. package/dist/components/ds-tabs/ds-tabs.d.cts.map +1 -0
  202. package/dist/components/ds-tabs/ds-tabs.d.ts +43 -0
  203. package/dist/components/ds-tabs/ds-tabs.d.ts.map +1 -0
  204. package/dist/components/ds-tabs/ds-tabs.js +70 -0
  205. package/dist/components/ds-tabs/ds-tabs.js.map +1 -0
  206. package/dist/components/ds-tabs/ds-tabs.module.cjs +6 -0
  207. package/dist/components/ds-tabs/ds-tabs.module.js +6 -0
  208. package/dist/components/ds-tabs/ds-tabs.module.js.map +1 -0
  209. package/dist/components/ds-tabs/ds-tabs.types.d.cts +91 -0
  210. package/dist/components/ds-tabs/ds-tabs.types.d.cts.map +1 -0
  211. package/dist/components/ds-tabs/ds-tabs.types.d.ts +92 -0
  212. package/dist/components/ds-tabs/ds-tabs.types.d.ts.map +1 -0
  213. package/dist/components/ds-tabs/index.cjs +1 -0
  214. package/dist/components/ds-tabs/index.d.ts +2 -0
  215. package/dist/components/ds-tabs/index.js +1 -0
  216. package/dist/components/ds-tag/ds-tag.d.cts +2 -2
  217. package/dist/components/ds-tag/ds-tag.d.ts +2 -2
  218. package/dist/components/ds-tag-filter/ds-tag-filter.d.cts +2 -2
  219. package/dist/components/ds-tag-filter/ds-tag-filter.d.ts +2 -2
  220. package/dist/components/ds-toggle/ds-toggle.d.cts +2 -2
  221. package/dist/components/ds-toggle/ds-toggle.d.ts +2 -2
  222. package/dist/components/ds-vertical-tabs/ds-vertical-tabs.d.cts +5 -5
  223. package/dist/components/ds-vertical-tabs/ds-vertical-tabs.d.ts +5 -5
  224. package/dist/index.cjs +20 -0
  225. package/dist/index.d.cts +12 -3
  226. package/dist/index.d.ts +16 -4
  227. package/dist/index.js +12 -1
  228. package/dist/index.min.css +1 -1
  229. package/package.json +5 -3
  230. package/src/components/ds-button/versions/ds-button-legacy/ds-button-legacy.tsx +1 -7
  231. package/src/components/ds-button/versions/ds-button-new/ds-button-new.tsx +4 -2
  232. package/src/components/ds-chip-group/hooks/use-chip-row-calculation.ts +5 -0
  233. package/src/components/ds-date-input/ds-date-input.module.scss +1 -0
  234. package/src/components/ds-date-input/ds-date-input.utils.ts +16 -2
  235. package/src/components/ds-drawer/ds-drawer.tsx +4 -1
  236. package/src/components/ds-dropdown-menu/ds-dropdown-menu.types.tsx +4 -1
  237. package/src/components/ds-file-upload/utils/format-file-size.ts +1 -1
  238. package/src/components/ds-form-control/ds-form-control.tsx +9 -2
  239. package/src/components/ds-loader/ds-loader.module.scss +57 -0
  240. package/src/components/ds-loader/ds-loader.tsx +18 -0
  241. package/src/components/ds-loader/ds-loader.types.ts +24 -0
  242. package/src/components/ds-loader/index.ts +2 -0
  243. package/src/components/ds-loader/pulsing-icon.tsx +17 -0
  244. package/src/components/ds-loader/spinner-icon.tsx +37 -0
  245. package/src/components/ds-modal/ds-modal.tsx +7 -1
  246. package/src/components/ds-select/ds-select.tsx +1 -1
  247. package/src/components/ds-skeleton/ds-skeleton-circle.tsx +29 -0
  248. package/src/components/ds-skeleton/ds-skeleton-rect.tsx +36 -0
  249. package/src/components/ds-skeleton/ds-skeleton-text.tsx +49 -0
  250. package/src/components/ds-skeleton/ds-skeleton.config.ts +68 -0
  251. package/src/components/ds-skeleton/ds-skeleton.module.scss +72 -0
  252. package/src/components/ds-skeleton/ds-skeleton.tsx +9 -0
  253. package/src/components/ds-skeleton/ds-skeleton.types.ts +92 -0
  254. package/src/components/ds-skeleton/index.ts +5 -0
  255. package/src/components/ds-spinner/ds-spinner.tsx +1 -1
  256. package/src/components/ds-table/components/core-table/core-table.tsx +16 -16
  257. package/src/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.tsx +10 -13
  258. package/src/components/ds-table/components/ds-table-row/ds-table-row.tsx +0 -2
  259. package/src/components/ds-table/ds-table.tsx +6 -5
  260. package/src/components/ds-table/ds-table.types.ts +0 -5
  261. package/src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx +2 -4
  262. package/src/components/ds-table/filters/hooks/use-table-filters.ts +10 -5
  263. package/src/components/ds-table/utils/story-data-generator.ts +7 -7
  264. package/src/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.module.scss +18 -0
  265. package/src/components/ds-tabs/components/ds-tabs-content/ds-tabs-content.tsx +12 -0
  266. package/src/components/ds-tabs/components/ds-tabs-content/index.ts +1 -0
  267. package/src/components/ds-tabs/components/ds-tabs-list/ds-tabs-indicator.module.scss +31 -0
  268. package/src/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.module.scss +27 -0
  269. package/src/components/ds-tabs/components/ds-tabs-list/ds-tabs-list.tsx +14 -0
  270. package/src/components/ds-tabs/components/ds-tabs-list/index.ts +1 -0
  271. package/src/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.module.scss +242 -0
  272. package/src/components/ds-tabs/components/ds-tabs-tab/ds-tabs-tab.tsx +130 -0
  273. package/src/components/ds-tabs/components/ds-tabs-tab/index.ts +1 -0
  274. package/src/components/ds-tabs/ds-tabs.module.scss +14 -0
  275. package/src/components/ds-tabs/ds-tabs.tsx +46 -0
  276. package/src/components/ds-tabs/ds-tabs.types.ts +97 -0
  277. package/src/components/ds-tabs/index.ts +2 -0
  278. package/src/index.ts +3 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drivenets/design-system",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.cts",
@@ -97,6 +97,7 @@
97
97
  "sass-embedded": "^1.97.0",
98
98
  "storybook": "^10.1.9",
99
99
  "tsdown": "^0.18.0",
100
+ "typed-scss-modules": "^8.1.1",
100
101
  "typescript": "^5.9.3",
101
102
  "typescript-plugin-css-modules": "^5.2.0",
102
103
  "vite": "^7.3.0",
@@ -105,8 +106,9 @@
105
106
  "@drivenets/vite-plugin-design-system": "0.0.4"
106
107
  },
107
108
  "scripts": {
108
- "lint": "eslint --max-warnings=0 .",
109
- "typecheck": "tsc",
109
+ "lint": "pnpm generate-scss-dts; eslint --max-warnings=0 .",
110
+ "typecheck": "pnpm generate-scss-dts; tsc",
111
+ "generate-scss-dts": "typed-scss-modules ./src -o ./.scss-dts --nameFormat all --exportType default > /dev/null 2>&1",
110
112
  "storybook": "storybook dev -p 6006",
111
113
  "test": "vitest",
112
114
  "build": "tsdown",
@@ -16,13 +16,7 @@ const DsButton: React.FC<DsButtonProps> = ({
16
16
  children,
17
17
  ...props
18
18
  }) => {
19
- const buttonClass = classNames(
20
- styles.button,
21
- styles[`${schema}-${variant}`],
22
- styles[size],
23
- { [styles.disabled]: disabled },
24
- className,
25
- );
19
+ const buttonClass = classNames(styles.button, styles[`${schema}-${variant}`], styles[size], className);
26
20
 
27
21
  return (
28
22
  <button type="button" className={buttonClass} disabled={disabled} {...props}>
@@ -33,10 +33,12 @@ const DsButton: React.FC<DsButtonProps> = ({
33
33
  const buttonClass = classNames(
34
34
  styles.button,
35
35
  { [styles.iconButton]: isIconOnly(children) },
36
- styles[`${type}-${variant}`],
37
36
  styles[size],
38
- { [styles.disabled]: disabled },
39
37
  className,
38
+
39
+ // @ts-expect-error: we don't have all variations of classnames defined
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
41
+ styles[`${type}-${variant}`],
40
42
  );
41
43
 
42
44
  return (
@@ -33,6 +33,11 @@ export const useChipRowCalculation = ({ chipsWrapperRef, totalFilters }: UseChip
33
33
 
34
34
  for (index = 0; index < children.length; index++) {
35
35
  const current = children[index];
36
+
37
+ if (!current) {
38
+ continue;
39
+ }
40
+
36
41
  const offset = current.offsetWidth === wrapper.clientWidth ? 0 : gap;
37
42
  const next = offset + current.offsetWidth;
38
43
 
@@ -73,6 +73,7 @@
73
73
  .content {
74
74
  @include dropdown.dropdown-content;
75
75
  padding: var(--spacing-standard);
76
+ min-width: fit-content;
76
77
  }
77
78
 
78
79
  .viewControl {
@@ -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>
@@ -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;
@@ -40,7 +40,13 @@ const DsModal = ({
40
40
  <Dialog.Positioner>
41
41
  <Dialog.Content
42
42
  style={style}
43
- className={classNames(styles.modal, styles[`cols-${String(columns)}`], className)}
43
+ className={classNames(
44
+ styles.modal,
45
+ className,
46
+
47
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
48
+ styles[`cols-${columns}`],
49
+ )}
44
50
  >
45
51
  <div className={classNames(styles.content)}>{children}</div>
46
52
  </Dialog.Content>
@@ -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;
@@ -0,0 +1,49 @@
1
+ import type { CSSProperties } from 'react';
2
+ import classNames from 'classnames';
3
+ import type { DsSkeletonTextProps } from './ds-skeleton.types';
4
+ import { typographyHeightMap, DEFAULT_LINE_GAP, radiusMap } from './ds-skeleton.config';
5
+ import styles from './ds-skeleton.module.scss';
6
+
7
+ /**
8
+ * Text skeleton component - matches typography variants
9
+ * It renders pill-shaped lines that match the height of text content
10
+ */
11
+ const DsSkeletonText = ({
12
+ typographyVariant = 'body-sm-reg',
13
+ color = 'gray',
14
+ lines = 1,
15
+ width,
16
+ radius = 'default',
17
+ className,
18
+ style,
19
+ }: DsSkeletonTextProps) => {
20
+ const height = typographyHeightMap[typographyVariant];
21
+ const borderRadius = typeof radius === 'number' ? radius : radiusMap[radius];
22
+
23
+ const getLineWidth = (): string | number => {
24
+ if (width !== undefined) {
25
+ return width;
26
+ }
27
+
28
+ return '100%';
29
+ };
30
+
31
+ const lineClassName = classNames(styles.skeleton, styles.text, styles[color], className);
32
+
33
+ const createLineStyle = (lineWidth: string | number): CSSProperties => ({
34
+ height,
35
+ width: typeof lineWidth === 'number' ? String(lineWidth) + 'px' : lineWidth,
36
+ borderRadius,
37
+ ...style,
38
+ });
39
+
40
+ return (
41
+ <div aria-hidden="true" className={styles.container} style={{ gap: DEFAULT_LINE_GAP }}>
42
+ {Array.from({ length: lines }, (_, index) => (
43
+ <span key={index} className={lineClassName} style={createLineStyle(getLineWidth())} />
44
+ ))}
45
+ </div>
46
+ );
47
+ };
48
+
49
+ export default DsSkeletonText;
@@ -0,0 +1,68 @@
1
+ import type { DsAvatarSize } from '../ds-avatar';
2
+ import type { SemanticVariant } from '../ds-typography';
3
+ import type { SkeletonRadiusVariant } from './ds-skeleton.types';
4
+
5
+ /**
6
+ * Circle size mapping matching DsAvatar component
7
+ * Maps semantic size names to pixel values
8
+ */
9
+ export const circleSizeMap: Record<DsAvatarSize, number> = Object.freeze({
10
+ xsm: 24,
11
+ sm: 32,
12
+ regular: 40,
13
+ md: 48,
14
+ lg: 64,
15
+ xl: 80,
16
+ });
17
+
18
+ /**
19
+ * Typography variant height mapping
20
+ * Maps semantic variants to approximate heights in pixels
21
+ * Based on line-height values from design system
22
+ */
23
+ export const typographyHeightMap: Record<SemanticVariant, number> = Object.freeze({
24
+ // Body variants - based on line-height
25
+ 'body-md-reg': 20,
26
+ 'body-md-md': 20,
27
+ 'body-md-semi-bold': 20,
28
+ 'body-md-bold': 20,
29
+ 'body-md-link': 20,
30
+
31
+ 'body-sm-reg': 18,
32
+ 'body-sm-md': 18,
33
+ 'body-sm-semi-bold': 18,
34
+ 'body-sm-bold': 18,
35
+ 'body-sm-link': 18,
36
+
37
+ 'body-xs-reg': 16,
38
+ 'body-xs-md': 16,
39
+ 'body-xs-semi-bold': 16,
40
+ 'body-xs-bold': 16,
41
+ 'body-xs-link': 16,
42
+
43
+ // Code variants
44
+ 'code-sm-reg': 18,
45
+ 'code-sm-semi-bold': 18,
46
+ 'code-xs-reg': 16,
47
+ 'code-xs-semi-bold': 16,
48
+
49
+ // Heading variants - based on line-height
50
+ heading1: 64,
51
+ heading2: 54,
52
+ heading3: 48,
53
+ heading4: 36,
54
+ });
55
+
56
+ /**
57
+ * Border radius mapping
58
+ * Maps semantic radius names to pixel values
59
+ */
60
+ export const radiusMap: Record<SkeletonRadiusVariant, number> = Object.freeze({
61
+ default: 4, // Standard button/card radius
62
+ round: 999, // Pill-shaped (fully rounded)
63
+ });
64
+
65
+ /**
66
+ * Default gap between skeleton lines in pixels
67
+ */
68
+ export const DEFAULT_LINE_GAP = 8;
@@ -0,0 +1,72 @@
1
+ .skeleton {
2
+ animation: shimmer 2s linear infinite;
3
+ }
4
+
5
+ .gray {
6
+ --skeleton-gray-base: #f3f5fa;
7
+ --skeleton-gray-accent: #e3e3e3;
8
+
9
+ background: linear-gradient(
10
+ 90deg,
11
+ var(--skeleton-gray-base) 0%,
12
+ var(--skeleton-gray-base) 33%,
13
+ var(--skeleton-gray-accent) 50%,
14
+ var(--skeleton-gray-base) 66%,
15
+ var(--skeleton-gray-base) 100%
16
+ );
17
+ background-size: 300% 100%;
18
+ }
19
+
20
+ .blue {
21
+ --skeleton-blue-accent: #759cec;
22
+ --skeleton-blue-base: #dfe9ff;
23
+
24
+ background: linear-gradient(
25
+ 90deg,
26
+ var(--skeleton-blue-base) 0%,
27
+ var(--skeleton-blue-base) 33%,
28
+ var(--skeleton-blue-accent) 50%,
29
+ var(--skeleton-blue-base) 66%,
30
+ var(--skeleton-blue-base) 100%
31
+ );
32
+ background-size: 300% 100%;
33
+ }
34
+
35
+ .text {
36
+ display: block;
37
+ margin-bottom: var(--spacing-xs);
38
+
39
+ &:last-child {
40
+ margin-bottom: 0;
41
+ }
42
+ }
43
+
44
+ .circle {
45
+ display: inline-block;
46
+ border-radius: 50%;
47
+ flex-shrink: 0;
48
+ }
49
+
50
+ .rectangle {
51
+ display: inline-block;
52
+ flex-shrink: 0;
53
+ }
54
+
55
+ .container {
56
+ display: flex;
57
+ flex-direction: column;
58
+ }
59
+
60
+ @keyframes shimmer {
61
+ 0% {
62
+ background-position: 100% 0;
63
+ }
64
+
65
+ 60% {
66
+ background-position: 0 0;
67
+ }
68
+
69
+ 100% {
70
+ background-position: 0 0;
71
+ }
72
+ }
@@ -0,0 +1,9 @@
1
+ import DsSkeletonText from './ds-skeleton-text';
2
+ import DsSkeletonCircle from './ds-skeleton-circle';
3
+ import DsSkeletonRect from './ds-skeleton-rect';
4
+
5
+ export default {
6
+ Text: DsSkeletonText,
7
+ Circle: DsSkeletonCircle,
8
+ Rect: DsSkeletonRect,
9
+ };