@drivenets/design-system 0.0.1

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 (242) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +201 -0
  3. package/dist/index.cjs +5394 -0
  4. package/dist/index.css +1 -0
  5. package/dist/index.d.cts +9157 -0
  6. package/dist/index.d.cts.map +1 -0
  7. package/dist/index.d.ts +9157 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +5335 -0
  10. package/dist/index.js.map +1 -0
  11. package/package.json +104 -0
  12. package/src/components/ds-alert-banner/ds-alert-banner.module.scss +116 -0
  13. package/src/components/ds-alert-banner/ds-alert-banner.tsx +115 -0
  14. package/src/components/ds-alert-banner/ds-alert-banner.types.tsx +47 -0
  15. package/src/components/ds-alert-banner/index.tsx +2 -0
  16. package/src/components/ds-breadcrumb/ds-breadcrumb.module.scss +99 -0
  17. package/src/components/ds-breadcrumb/ds-breadcrumb.tsx +94 -0
  18. package/src/components/ds-breadcrumb/ds-breadcrumb.types.tsx +32 -0
  19. package/src/components/ds-breadcrumb/index.tsx +2 -0
  20. package/src/components/ds-button/ds-button.tsx +12 -0
  21. package/src/components/ds-button/ds-button.types.ts +6 -0
  22. package/src/components/ds-button/index.ts +2 -0
  23. package/src/components/ds-button/versions/ds-button-legacy/ds-button-legacy.module.scss +257 -0
  24. package/src/components/ds-button/versions/ds-button-legacy/ds-button-legacy.tsx +34 -0
  25. package/src/components/ds-button/versions/ds-button-legacy/ds-button-legacy.types.ts +41 -0
  26. package/src/components/ds-button/versions/ds-button-legacy/index.ts +2 -0
  27. package/src/components/ds-button/versions/ds-button-new/ds-button-new.module.scss +580 -0
  28. package/src/components/ds-button/versions/ds-button-new/ds-button-new.tsx +49 -0
  29. package/src/components/ds-button/versions/ds-button-new/ds-button-new.types.ts +41 -0
  30. package/src/components/ds-button/versions/ds-button-new/index.ts +2 -0
  31. package/src/components/ds-checkbox/ds-checkbox.module.scss +130 -0
  32. package/src/components/ds-checkbox/ds-checkbox.tsx +55 -0
  33. package/src/components/ds-checkbox/ds-checkbox.types.tsx +27 -0
  34. package/src/components/ds-checkbox/index.tsx +2 -0
  35. package/src/components/ds-chip/ds-chip.module.scss +71 -0
  36. package/src/components/ds-chip/ds-chip.tsx +73 -0
  37. package/src/components/ds-chip/ds-chip.types.tsx +46 -0
  38. package/src/components/ds-chip/index.tsx +2 -0
  39. package/src/components/ds-chip-group/ds-chip-group.module.scss +59 -0
  40. package/src/components/ds-chip-group/ds-chip-group.tsx +122 -0
  41. package/src/components/ds-chip-group/ds-chip-group.types.ts +52 -0
  42. package/src/components/ds-chip-group/hooks/use-chip-row-calculation.ts +76 -0
  43. package/src/components/ds-chip-group/index.ts +2 -0
  44. package/src/components/ds-confirmation/ds-confirmation.module.scss +58 -0
  45. package/src/components/ds-confirmation/ds-confirmation.tsx +121 -0
  46. package/src/components/ds-confirmation/ds-confirmation.types.tsx +28 -0
  47. package/src/components/ds-confirmation/index.ts +2 -0
  48. package/src/components/ds-dialog/ds-dialog.module.scss +50 -0
  49. package/src/components/ds-dialog/ds-dialog.tsx +70 -0
  50. package/src/components/ds-dialog/ds-dialog.types.tsx +48 -0
  51. package/src/components/ds-dialog/index.tsx +2 -0
  52. package/src/components/ds-drawer/ds-drawer.module.scss +212 -0
  53. package/src/components/ds-drawer/ds-drawer.tsx +160 -0
  54. package/src/components/ds-drawer/ds-drawer.types.tsx +54 -0
  55. package/src/components/ds-drawer/index.ts +2 -0
  56. package/src/components/ds-dropdown-menu/ds-dropdown-menu.module.scss +123 -0
  57. package/src/components/ds-dropdown-menu/ds-dropdown-menu.tsx +396 -0
  58. package/src/components/ds-dropdown-menu/ds-dropdown-menu.types.tsx +262 -0
  59. package/src/components/ds-dropdown-menu/index.tsx +2 -0
  60. package/src/components/ds-expandable-text-input/ds-expandable-text-input.module.scss +70 -0
  61. package/src/components/ds-expandable-text-input/ds-expandable-text-input.tsx +106 -0
  62. package/src/components/ds-expandable-text-input/ds-expandable-text-input.types.tsx +19 -0
  63. package/src/components/ds-expandable-text-input/index.ts +2 -0
  64. package/src/components/ds-file-upload/components/file-upload/file-upload.module.scss +90 -0
  65. package/src/components/ds-file-upload/components/file-upload/file-upload.tsx +106 -0
  66. package/src/components/ds-file-upload/components/file-upload/file-upload.types.tsx +94 -0
  67. package/src/components/ds-file-upload/components/file-upload/index.ts +2 -0
  68. package/src/components/ds-file-upload/components/file-upload-item/file-upload-item.module.scss +125 -0
  69. package/src/components/ds-file-upload/components/file-upload-item/file-upload-item.tsx +143 -0
  70. package/src/components/ds-file-upload/components/file-upload-item/file-upload-item.types.tsx +26 -0
  71. package/src/components/ds-file-upload/components/file-upload-item/index.ts +2 -0
  72. package/src/components/ds-file-upload/ds-file-upload-api.types.ts +38 -0
  73. package/src/components/ds-file-upload/ds-file-upload.tsx +46 -0
  74. package/src/components/ds-file-upload/ds-file-upload.types.tsx +54 -0
  75. package/src/components/ds-file-upload/errors/file-upload-errors.ts +27 -0
  76. package/src/components/ds-file-upload/hooks/index.ts +2 -0
  77. package/src/components/ds-file-upload/hooks/use-file-upload.ts +350 -0
  78. package/src/components/ds-file-upload/index.ts +7 -0
  79. package/src/components/ds-file-upload/types/accept-types.ts +106 -0
  80. package/src/components/ds-file-upload/utils/accept-utils.ts +25 -0
  81. package/src/components/ds-file-upload/utils/constants.ts +21 -0
  82. package/src/components/ds-file-upload/utils/file-factory.ts +18 -0
  83. package/src/components/ds-file-upload/utils/format-file-size.ts +15 -0
  84. package/src/components/ds-file-upload/utils/generate-helper-text.ts +39 -0
  85. package/src/components/ds-file-upload/utils/get-error-message.ts +17 -0
  86. package/src/components/ds-file-upload/utils/is-file-equal.ts +8 -0
  87. package/src/components/ds-form-control/ds-form-control.module.scss +135 -0
  88. package/src/components/ds-form-control/ds-form-control.tsx +94 -0
  89. package/src/components/ds-form-control/ds-form-control.types.tsx +58 -0
  90. package/src/components/ds-form-control/index.tsx +2 -0
  91. package/src/components/ds-grid/ds-grid.module.scss +0 -0
  92. package/src/components/ds-grid/ds-grid.tsx +43 -0
  93. package/src/components/ds-grid/ds-grid.types.ts +55 -0
  94. package/src/components/ds-grid/index.ts +2 -0
  95. package/src/components/ds-icon/ds-icon.module.scss +25 -0
  96. package/src/components/ds-icon/ds-icon.tsx +33 -0
  97. package/src/components/ds-icon/ds-icon.types.ts +53 -0
  98. package/src/components/ds-icon/index.ts +2 -0
  99. package/src/components/ds-icon/material-icons.ts +6203 -0
  100. package/src/components/ds-modal/ds-modal.module.scss +100 -0
  101. package/src/components/ds-modal/ds-modal.tsx +136 -0
  102. package/src/components/ds-modal/ds-modal.types.tsx +44 -0
  103. package/src/components/ds-modal/index.tsx +2 -0
  104. package/src/components/ds-number-input/ds-number-input.module.scss +15 -0
  105. package/src/components/ds-number-input/ds-number-input.tsx +74 -0
  106. package/src/components/ds-number-input/ds-number-input.types.tsx +76 -0
  107. package/src/components/ds-number-input/index.tsx +2 -0
  108. package/src/components/ds-panel/ds-panel.module.scss +95 -0
  109. package/src/components/ds-panel/ds-panel.tsx +46 -0
  110. package/src/components/ds-panel/ds-panel.types.ts +17 -0
  111. package/src/components/ds-panel/index.tsx +2 -0
  112. package/src/components/ds-password-input/ds-password-input.module.scss +10 -0
  113. package/src/components/ds-password-input/ds-password-input.tsx +67 -0
  114. package/src/components/ds-password-input/ds-password-input.types.tsx +62 -0
  115. package/src/components/ds-password-input/index.tsx +2 -0
  116. package/src/components/ds-popover/ds-popover.module.scss +23 -0
  117. package/src/components/ds-popover/ds-popover.tsx +33 -0
  118. package/src/components/ds-popover/ds-popover.types.tsx +24 -0
  119. package/src/components/ds-popover/index.tsx +2 -0
  120. package/src/components/ds-radio-group/ds-radio-group.module.scss +138 -0
  121. package/src/components/ds-radio-group/ds-radio-group.tsx +115 -0
  122. package/src/components/ds-radio-group/ds-radio-group.types.tsx +93 -0
  123. package/src/components/ds-radio-group/index.tsx +2 -0
  124. package/src/components/ds-select/ds-select.module.scss +66 -0
  125. package/src/components/ds-select/ds-select.tsx +239 -0
  126. package/src/components/ds-select/ds-select.types.tsx +80 -0
  127. package/src/components/ds-select/index.tsx +2 -0
  128. package/src/components/ds-select/select-items-chips.tsx +56 -0
  129. package/src/components/ds-smart-tabs/ds-smart-tabs.module.scss +69 -0
  130. package/src/components/ds-smart-tabs/ds-smart-tabs.tsx +113 -0
  131. package/src/components/ds-smart-tabs/ds-smart-tabs.types.tsx +74 -0
  132. package/src/components/ds-smart-tabs/index.tsx +2 -0
  133. package/src/components/ds-spinner/ds-spinner.module.scss +39 -0
  134. package/src/components/ds-spinner/ds-spinner.tsx +51 -0
  135. package/src/components/ds-spinner/ds-spinner.types.tsx +20 -0
  136. package/src/components/ds-spinner/index.tsx +2 -0
  137. package/src/components/ds-status-badge/ds-status-badge.module.scss +79 -0
  138. package/src/components/ds-status-badge/ds-status-badge.tsx +42 -0
  139. package/src/components/ds-status-badge/ds-status-badge.types.tsx +46 -0
  140. package/src/components/ds-status-badge/index.tsx +2 -0
  141. package/src/components/ds-stepper/components/ds-step-content.tsx +32 -0
  142. package/src/components/ds-stepper/components/ds-step-description.tsx +6 -0
  143. package/src/components/ds-stepper/components/ds-step-label.tsx +6 -0
  144. package/src/components/ds-stepper/components/ds-step-next-button.tsx +13 -0
  145. package/src/components/ds-stepper/components/ds-step.tsx +59 -0
  146. package/src/components/ds-stepper/ds-stepper.module.scss +134 -0
  147. package/src/components/ds-stepper/ds-stepper.tsx +34 -0
  148. package/src/components/ds-stepper/ds-stepper.types.ts +12 -0
  149. package/src/components/ds-stepper/hooks/use-stepper.ts +20 -0
  150. package/src/components/ds-stepper/hooks/use-steps.ts +18 -0
  151. package/src/components/ds-stepper/index.tsx +6 -0
  152. package/src/components/ds-system-status/ds-system-status.module.scss +87 -0
  153. package/src/components/ds-system-status/ds-system-status.tsx +33 -0
  154. package/src/components/ds-system-status/ds-system-status.types.tsx +37 -0
  155. package/src/components/ds-system-status/index.tsx +10 -0
  156. package/src/components/ds-table/components/core-table/core-table.module.scss +32 -0
  157. package/src/components/ds-table/components/core-table/core-table.tsx +83 -0
  158. package/src/components/ds-table/components/core-table/index.ts +1 -0
  159. package/src/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.module.scss +115 -0
  160. package/src/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.tsx +70 -0
  161. package/src/components/ds-table/components/ds-table-bulk-actions/ds-table-bulk-actions.types.ts +41 -0
  162. package/src/components/ds-table/components/ds-table-bulk-actions/index.ts +2 -0
  163. package/src/components/ds-table/components/ds-table-cell/ds-table-cell.module.scss +53 -0
  164. package/src/components/ds-table/components/ds-table-cell/ds-table-cell.tsx +95 -0
  165. package/src/components/ds-table/components/ds-table-cell/ds-table-cell.types.ts +67 -0
  166. package/src/components/ds-table/components/ds-table-cell/index.ts +2 -0
  167. package/src/components/ds-table/components/ds-table-header/ds-table-header.module.scss +81 -0
  168. package/src/components/ds-table/components/ds-table-header/ds-table-header.tsx +99 -0
  169. package/src/components/ds-table/components/ds-table-header/ds-table-header.types.ts +11 -0
  170. package/src/components/ds-table/components/ds-table-header/index.ts +2 -0
  171. package/src/components/ds-table/components/ds-table-row/ds-table-row.module.scss +137 -0
  172. package/src/components/ds-table/components/ds-table-row/ds-table-row.tsx +205 -0
  173. package/src/components/ds-table/components/ds-table-row/ds-table-row.types.ts +22 -0
  174. package/src/components/ds-table/components/ds-table-row/index.ts +2 -0
  175. package/src/components/ds-table/context/ds-table-context.tsx +39 -0
  176. package/src/components/ds-table/ds-table.module.scss +60 -0
  177. package/src/components/ds-table/ds-table.tsx +312 -0
  178. package/src/components/ds-table/ds-table.types.ts +377 -0
  179. package/src/components/ds-table/filters/adapters/create-checkbox-filter-adapter.tsx +116 -0
  180. package/src/components/ds-table/filters/adapters/create-dual-range-filter-adapter.tsx +171 -0
  181. package/src/components/ds-table/filters/adapters/create-filter-adapter.ts +131 -0
  182. package/src/components/ds-table/filters/adapters/index.ts +12 -0
  183. package/src/components/ds-table/filters/components/checkbox-filter/checkbox-filter.tsx +43 -0
  184. package/src/components/ds-table/filters/components/checkbox-filter/index.ts +2 -0
  185. package/src/components/ds-table/filters/components/range-filter/index.ts +2 -0
  186. package/src/components/ds-table/filters/components/range-filter/range-filter.module.scss +25 -0
  187. package/src/components/ds-table/filters/components/range-filter/range-filter.tsx +79 -0
  188. package/src/components/ds-table/filters/hooks/index.ts +1 -0
  189. package/src/components/ds-table/filters/hooks/use-table-filters.ts +234 -0
  190. package/src/components/ds-table/filters/index.ts +50 -0
  191. package/src/components/ds-table/filters/types/filter-adapter.types.ts +111 -0
  192. package/src/components/ds-table/hooks/use-drag-and-drop.tsx +107 -0
  193. package/src/components/ds-table/index.ts +4 -0
  194. package/src/components/ds-table/styles/_variables.scss +17 -0
  195. package/src/components/ds-table/styles/shared/ds-table-shared.module.scss +16 -0
  196. package/src/components/ds-table/utils/column-styling.ts +30 -0
  197. package/src/components/ds-table/utils/create-columns-grid-template.ts +23 -0
  198. package/src/components/ds-table/utils/merge-refs.ts +15 -0
  199. package/src/components/ds-table/utils/story-data-generator.ts +91 -0
  200. package/src/components/ds-text-input/ds-text-input.module.scss +27 -0
  201. package/src/components/ds-text-input/ds-text-input.tsx +75 -0
  202. package/src/components/ds-text-input/ds-text-input.types.tsx +110 -0
  203. package/src/components/ds-text-input/index.ts +2 -0
  204. package/src/components/ds-textarea/ds-textarea.module.scss +5 -0
  205. package/src/components/ds-textarea/ds-textarea.tsx +49 -0
  206. package/src/components/ds-textarea/ds-textarea.types.tsx +67 -0
  207. package/src/components/ds-textarea/index.tsx +2 -0
  208. package/src/components/ds-toast/ds-toast-context.tsx +79 -0
  209. package/src/components/ds-toast/ds-toast.module.scss +134 -0
  210. package/src/components/ds-toast/ds-toast.tsx +54 -0
  211. package/src/components/ds-toast/ds-toast.types.tsx +53 -0
  212. package/src/components/ds-toast/index.ts +3 -0
  213. package/src/components/ds-tooltip/ds-tooltip.module.scss +19 -0
  214. package/src/components/ds-tooltip/ds-tooltip.tsx +33 -0
  215. package/src/components/ds-tooltip/ds-tooltip.types.tsx +12 -0
  216. package/src/components/ds-tooltip/index.tsx +2 -0
  217. package/src/components/ds-typography/ds-typography.config.ts +32 -0
  218. package/src/components/ds-typography/ds-typography.module.scss +93 -0
  219. package/src/components/ds-typography/ds-typography.tsx +27 -0
  220. package/src/components/ds-typography/ds-typography.types.tsx +27 -0
  221. package/src/components/ds-typography/index.tsx +2 -0
  222. package/src/components/ds-vertical-tabs/ds-vertical-tabs.module.scss +60 -0
  223. package/src/components/ds-vertical-tabs/ds-vertical-tabs.tsx +80 -0
  224. package/src/components/ds-vertical-tabs/ds-vertical-tabs.types.ts +69 -0
  225. package/src/components/ds-vertical-tabs/index.ts +7 -0
  226. package/src/index.ts +34 -0
  227. package/src/styles/_colors.scss +65 -0
  228. package/src/styles/_grid.scss +111 -0
  229. package/src/styles/_mixin.scss +1 -0
  230. package/src/styles/_reset.scss +38 -0
  231. package/src/styles/_root.scss +390 -0
  232. package/src/styles/_scrollbars.scss +41 -0
  233. package/src/styles/_spacing.scss +47 -0
  234. package/src/styles/_typography.scss +301 -0
  235. package/src/styles/_utilities.scss +33 -0
  236. package/src/styles/_variables.scss +44 -0
  237. package/src/styles/mixins/_bounding-box.scss +53 -0
  238. package/src/styles/mixins/_list.scss +74 -0
  239. package/src/styles/shared/_dropdown.scss +89 -0
  240. package/src/styles/shared/_input.scss +365 -0
  241. package/src/styles/shared/_modal.scss +123 -0
  242. package/src/styles/styles.scss +12 -0
@@ -0,0 +1,580 @@
1
+ @use '../../../../styles/typography';
2
+
3
+ $button-size-small: 28px;
4
+ $button-size-default: 32px;
5
+ $button-size-large: 40px;
6
+
7
+ .button {
8
+ @include typography.body-sm-md;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ white-space: nowrap;
13
+ cursor: pointer;
14
+ background: none;
15
+ outline: none;
16
+ padding-block: 0;
17
+ padding-inline: 0;
18
+ align-self: stretch;
19
+ border: 2px solid transparent;
20
+ border-radius: var(--exo-spacing-2x-small);
21
+
22
+ .content {
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ gap: var(--exo-spacing-2x-small);
27
+ padding: 0 var(--spacing-sm);
28
+ border: 1px solid transparent;
29
+ border-radius: var(--exo-spacing-2x-small);
30
+ flex-grow: 1;
31
+ }
32
+
33
+ &.small .content {
34
+ @include typography.body-xs-md;
35
+ height: $button-size-small;
36
+ }
37
+
38
+ &.medium .content {
39
+ height: $button-size-default;
40
+ }
41
+
42
+ &.large .content {
43
+ @include typography.body-md-md;
44
+ height: $button-size-large;
45
+ }
46
+
47
+ &.iconButton {
48
+ aspect-ratio: 1 / 1;
49
+ align-items: stretch;
50
+
51
+ .content {
52
+ flex: 1;
53
+ padding: 0;
54
+ }
55
+
56
+ &.large .content {
57
+ height: $button-size-large;
58
+ width: $button-size-large;
59
+ }
60
+
61
+ &.medium .content {
62
+ height: $button-size-default;
63
+ width: $button-size-default;
64
+ }
65
+
66
+ &.small .content {
67
+ height: $button-size-small;
68
+ width: $button-size-small;
69
+ }
70
+ }
71
+
72
+ &.primary-filled {
73
+ border: 2px solid transparent;
74
+ color: var(--color-font-on-action);
75
+
76
+ .content {
77
+ background: var(--color-background-selected);
78
+ }
79
+
80
+ &:hover {
81
+ .content {
82
+ background: var(--color-background-selected-hover);
83
+ }
84
+ }
85
+
86
+ &:focus-visible {
87
+ border-color: var(--color-background-selected);
88
+
89
+ .content {
90
+ border-color: var(--color-background);
91
+ border-radius: calc(var(--exo-spacing-2x-small) / 2);
92
+ }
93
+ }
94
+
95
+ &:disabled {
96
+ cursor: not-allowed;
97
+
98
+ .content {
99
+ background: var(--color-background-disable);
100
+ border-color: var(--color-background-disable);
101
+ }
102
+ }
103
+ }
104
+
105
+ &.secondary-filled {
106
+ background: transparent;
107
+ border: 2px solid transparent;
108
+ color: var(--color-background-action);
109
+
110
+ .content {
111
+ background: var(--color-background);
112
+ border-color: var(--color-border);
113
+ }
114
+
115
+ &:hover {
116
+ &:not(:disabled) {
117
+ .content {
118
+ border-color: var(--color-background-action-hover);
119
+ background: var(--color-background-action-hover-weak);
120
+ }
121
+ }
122
+
123
+ &:focus-visible {
124
+ background: var(--color-background);
125
+
126
+ .content {
127
+ border-color: var(--color-background-action-secondary);
128
+ }
129
+ }
130
+ }
131
+
132
+ &:focus-visible {
133
+ background: var(--color-background);
134
+ border-color: var(--color-background-action-hover);
135
+
136
+ .content {
137
+ border-color: var(--color-background);
138
+ background: var(--color-background-action-hover-weak);
139
+ }
140
+ }
141
+
142
+ &:disabled {
143
+ cursor: not-allowed;
144
+ color: var(--color-background-disable);
145
+
146
+ .content {
147
+ border-color: var(--color-background-disable);
148
+ }
149
+ }
150
+ }
151
+
152
+ &.tertiary-filled {
153
+ background: transparent;
154
+ border: 2px solid transparent;
155
+ color: var(--color-background-action);
156
+
157
+ .content {
158
+ background: var(--color-background);
159
+ border-color: transparent;
160
+ }
161
+
162
+ &:hover:not(:disabled) {
163
+ .content {
164
+ border-color: var(--color-border);
165
+ background: var(--color-background-action-hover-weak);
166
+ }
167
+ }
168
+
169
+ &:active {
170
+ .content {
171
+ border-color: var(--color-border);
172
+ }
173
+ }
174
+
175
+ &:focus-visible {
176
+ background: var(--color-background);
177
+ border-color: var(--color-background-action-hover);
178
+
179
+ .content {
180
+ border-color: var(--color-background);
181
+ background: var(--color-background-action-hover-weak);
182
+ border-radius: calc(var(--exo-spacing-2x-small) / 2);
183
+ }
184
+ }
185
+
186
+ &:disabled {
187
+ cursor: not-allowed;
188
+ color: var(--color-background-disable);
189
+ }
190
+ }
191
+
192
+ &.secondary-ghost {
193
+ background: transparent;
194
+ border: 2px solid transparent;
195
+ color: var(--color-background-selected);
196
+
197
+ .content {
198
+ background: var(--color-background-action-secondary);
199
+ border-color: var(--color-background-selected);
200
+ }
201
+
202
+ &:hover {
203
+ &:not(:disabled) {
204
+ .content {
205
+ background: var(--color-background-action-secondary-hover);
206
+ }
207
+ }
208
+
209
+ &:focus-visible {
210
+ .content {
211
+ border-color: var(--color-background-action-secondary);
212
+ }
213
+ }
214
+ }
215
+
216
+ &:focus-visible {
217
+ background: var(--color-background);
218
+ border-color: var(--color-background-selected);
219
+
220
+ .content {
221
+ border-color: var(--color-background);
222
+ background: var(--color-background-action-secondary-hover);
223
+ }
224
+ }
225
+
226
+ &:disabled {
227
+ cursor: not-allowed;
228
+ color: var(--color-background-disable);
229
+
230
+ .content {
231
+ border-color: var(--color-background-disable);
232
+ }
233
+ }
234
+ }
235
+
236
+ &.tertiary-ghost {
237
+ background: transparent;
238
+ border: 2px solid transparent;
239
+ color: var(--color-background-selected);
240
+
241
+ .content {
242
+ background: var(--color-background);
243
+ border-color: transparent;
244
+ }
245
+
246
+ &:hover:not(:disabled) {
247
+ .content {
248
+ background: var(--color-background-action-secondary-hover);
249
+ }
250
+ }
251
+
252
+ &:active {
253
+ .content {
254
+ border-color: var(--color-border);
255
+ }
256
+ }
257
+
258
+ &:focus-visible {
259
+ background: var(--color-background);
260
+ border-color: var(--color-background-selected);
261
+
262
+ .content {
263
+ border-color: var(--color-background);
264
+ background: var(--color-background-action-secondary-hover);
265
+ }
266
+ }
267
+
268
+ &:disabled {
269
+ cursor: not-allowed;
270
+ color: var(--color-background-disable);
271
+
272
+ .content {
273
+ border-color: var(--color-background);
274
+ }
275
+ }
276
+ }
277
+
278
+ &.primary-danger {
279
+ border: 2px solid transparent;
280
+ color: var(--color-font-on-action);
281
+
282
+ .content {
283
+ background: var(--color-background-danger-strong);
284
+ }
285
+
286
+ &:hover {
287
+ .content {
288
+ background: var(--color-background-danger-strong-hover);
289
+ }
290
+ }
291
+
292
+ &:focus-visible {
293
+ border-color: var(--color-background-danger-strong);
294
+
295
+ .content {
296
+ border-color: var(--color-background);
297
+ border-radius: calc(var(--exo-spacing-2x-small) / 2);
298
+ }
299
+ }
300
+
301
+ &:disabled {
302
+ cursor: not-allowed;
303
+
304
+ .content {
305
+ background: var(--color-background-disable);
306
+ border-color: var(--color-background-disable);
307
+ }
308
+ }
309
+ }
310
+
311
+ &.secondary-danger {
312
+ background: transparent;
313
+ border: 2px solid transparent;
314
+ color: var(--color-background-danger-strong);
315
+
316
+ .content {
317
+ background: var(--color-background);
318
+ border-color: var(--color-background-danger-strong);
319
+ }
320
+
321
+ &:hover {
322
+ &:not(:disabled) {
323
+ color: var(--color-background-danger-strong-hover);
324
+
325
+ .content {
326
+ border-color: var(--color-background-danger-strong-hover);
327
+ background: var(--color-background-danger-weak);
328
+ }
329
+ }
330
+
331
+ &:focus-visible {
332
+ .content {
333
+ border-color: var(--color-background-action-secondary);
334
+ }
335
+ }
336
+ }
337
+
338
+ &:focus-visible {
339
+ background: var(--color-background);
340
+ border-color: var(--color-background-danger-strong);
341
+
342
+ .content {
343
+ color: var(--color-background-danger-strong-hover);
344
+ border-color: var(--color-background);
345
+ background: var(--color-background-danger-weak);
346
+ }
347
+ }
348
+
349
+ &:disabled {
350
+ cursor: not-allowed;
351
+ color: var(--color-background-disable);
352
+
353
+ .content {
354
+ border-color: var(--color-background-disable);
355
+ }
356
+ }
357
+ }
358
+
359
+ &.tertiary-danger {
360
+ background: transparent;
361
+ border: 2px solid transparent;
362
+ color: var(--color-background-danger-strong);
363
+
364
+ .content {
365
+ background: var(--color-background);
366
+ border-color: transparent;
367
+ }
368
+
369
+ &:hover:not(:disabled) {
370
+ .content {
371
+ border-color: var(--color-background-danger-strong-hover);
372
+ background: var(--color-background-danger-weak);
373
+ }
374
+
375
+ &:focus-visible {
376
+ background: var(--color-background);
377
+
378
+ .content {
379
+ border-color: var(--color-background);
380
+ }
381
+ }
382
+ }
383
+
384
+ &:focus-visible {
385
+ background: var(--color-background);
386
+ border-color: var(--color-background-danger-strong);
387
+
388
+ .content {
389
+ border-color: var(--color-background);
390
+ background: var(--color-background-danger-weak);
391
+ }
392
+ }
393
+
394
+ &:disabled {
395
+ cursor: not-allowed;
396
+ background: var(--color-background);
397
+ color: var(--color-background-disable);
398
+ }
399
+ }
400
+
401
+ &.primary-dark {
402
+ border: 2px solid transparent;
403
+ color: var(--color-font-on-action);
404
+
405
+ .content {
406
+ background: var(--color-dark-buttons-primary);
407
+ }
408
+
409
+ &:hover:not(:disabled) {
410
+ .content {
411
+ background: var(--color-dark-buttons-primary-hover);
412
+ }
413
+ }
414
+
415
+ &:active:not(:disabled) {
416
+ .content {
417
+ background: var(--color-dark-buttons-primary-hover);
418
+ }
419
+ }
420
+
421
+ &:focus-visible {
422
+ background: var(--color-background-brand);
423
+ border-color: var(--color-dark-buttons-primary);
424
+
425
+ .content {
426
+ border-color: var(--color-font-on-action);
427
+ border-radius: calc(var(--exo-spacing-2x-small) / 2);
428
+ }
429
+ }
430
+
431
+ &:disabled {
432
+ cursor: not-allowed;
433
+
434
+ .content {
435
+ background: var(--color-background-action-inverse);
436
+ color: var(--color-background-deselected);
437
+ }
438
+ }
439
+ }
440
+
441
+ &.secondary-dark {
442
+ background: transparent;
443
+ border: 2px solid transparent;
444
+ color: var(--color-dark-buttons-primary-hover);
445
+
446
+ .content {
447
+ background: transparent;
448
+ border-color: var(--color-dark-buttons-primary-hover);
449
+ }
450
+
451
+ &:hover:not(:disabled) {
452
+ .content {
453
+ background: var(--color-dark-buttons-secondary-background);
454
+ border-color: var(--color-dark-buttons-secondary-hover);
455
+ color: var(--color-dark-buttons-secondary-hover);
456
+ }
457
+ }
458
+
459
+ &:active:not(:disabled) {
460
+ .content {
461
+ background: transparent;
462
+ border-color: var(--color-dark-buttons-secondary-hover);
463
+ color: var(--color-dark-buttons-secondary-hover);
464
+ }
465
+ }
466
+
467
+ &:focus-visible {
468
+ background: transparent;
469
+ border-color: var(--color-dark-buttons-secondary-hover);
470
+
471
+ .content {
472
+ border-color: transparent;
473
+ background: var(--color-dark-buttons-secondary-background);
474
+ color: var(--color-dark-buttons-secondary-hover);
475
+ border-radius: calc(var(--exo-spacing-2x-small) / 2);
476
+ }
477
+ }
478
+
479
+ &:disabled {
480
+ cursor: not-allowed;
481
+ color: var(--color-background-deselected);
482
+
483
+ .content {
484
+ border-color: var(--color-background-deselected);
485
+ }
486
+ }
487
+ }
488
+
489
+ &.secondary-light-dark {
490
+ background: transparent;
491
+ border: 2px solid transparent;
492
+ color: var(--color-dark-buttons-secondary-light);
493
+
494
+ .content {
495
+ background: transparent;
496
+ border-color: var(--color-dark-buttons-secondary-light);
497
+ }
498
+
499
+ &:hover:not(:disabled) {
500
+ .content {
501
+ background: var(--color-dark-buttons-secondary-light-hover-background);
502
+ border-color: var(--color-border);
503
+ color: var(--color-dark-buttons-tertiary);
504
+ }
505
+ }
506
+
507
+ &:active:not(:disabled) {
508
+ .content {
509
+ background: transparent;
510
+ border-color: var(--color-background-secondary);
511
+ color: var(--color-font-on-action);
512
+ }
513
+ }
514
+
515
+ &:focus-visible {
516
+ background: transparent;
517
+ border-color: var(--color-dark-buttons-tertiary);
518
+ border-radius: var(--spacing-2xs);
519
+
520
+ .content {
521
+ background: var(--Dark-Buttons-secondary-light-hover-background);
522
+ color: var(--color-dark-buttons-tertiary);
523
+ border-radius: var(--exo-spacing-2x-small);
524
+ }
525
+ }
526
+
527
+ &:disabled {
528
+ cursor: not-allowed;
529
+ color: var(--color-background-deselected);
530
+
531
+ .content {
532
+ border-color: var(--color-background-deselected);
533
+ }
534
+ }
535
+ }
536
+
537
+ &.tertiary-dark {
538
+ background: transparent;
539
+ border: 2px solid transparent;
540
+ color: var(--color-dark-buttons-tertiary);
541
+
542
+ .content {
543
+ background: transparent;
544
+ border-color: transparent;
545
+ }
546
+
547
+ &:hover:not(:disabled) {
548
+ .content {
549
+ background: var(--color-dark-buttons-secondary-light-hover-background);
550
+ border-color: var(--color-border);
551
+ color: var(--color-dark-buttons-tertiary);
552
+ }
553
+ }
554
+
555
+ &:active:not(:disabled) {
556
+ .content {
557
+ background: transparent;
558
+ border-color: var(--color-background-secondary);
559
+ color: var(--color-font-on-action);
560
+ }
561
+ }
562
+
563
+ &:focus-visible {
564
+ background: transparent;
565
+ border-color: var(--color-dark-buttons-tertiary);
566
+ border-radius: var(--spacing-2xs);
567
+
568
+ .content {
569
+ background: var(--Dark-Buttons-secondary-light-hover-background);
570
+ color: var(--color-dark-buttons-tertiary);
571
+ border-radius: var(--exo-spacing-2x-small);
572
+ }
573
+ }
574
+
575
+ &:disabled {
576
+ cursor: not-allowed;
577
+ color: var(--color-background-deselected);
578
+ }
579
+ }
580
+ }
@@ -0,0 +1,49 @@
1
+ import classNames from 'classnames';
2
+ import type React from 'react';
3
+ import { Children, isValidElement } from 'react';
4
+ import styles from './ds-button-new.module.scss';
5
+ import type { DsButtonProps } from './ds-button-new.types';
6
+ import DsIcon from '../../../ds-icon/ds-icon';
7
+
8
+ const isIconOnly = (children: React.ReactNode) => {
9
+ if (Children.count(children) !== 1) {
10
+ return false;
11
+ }
12
+
13
+ const childArray = Children.toArray(children);
14
+ const onlyChild = childArray[0];
15
+
16
+ return isValidElement(onlyChild) && onlyChild.type === DsIcon;
17
+ };
18
+
19
+ /**
20
+ * Design system Button component
21
+ */
22
+ const DsButton: React.FC<DsButtonProps> = ({
23
+ buttonType,
24
+ variant = 'filled',
25
+ size = 'medium',
26
+ disabled = false,
27
+ className,
28
+ contentClassName,
29
+ children,
30
+ ...props
31
+ }) => {
32
+ const type = buttonType ?? (variant === 'ghost' ? 'secondary' : 'primary');
33
+ const buttonClass = classNames(
34
+ styles.button,
35
+ { [styles.iconButton]: isIconOnly(children) },
36
+ styles[`${type}-${variant}`],
37
+ styles[size],
38
+ { [styles.disabled]: disabled },
39
+ className,
40
+ );
41
+
42
+ return (
43
+ <button type="button" className={buttonClass} disabled={disabled} {...props}>
44
+ <span className={classNames(styles.content, contentClassName)}>{children}</span>
45
+ </button>
46
+ );
47
+ };
48
+
49
+ export default DsButton;
@@ -0,0 +1,41 @@
1
+ import type React from 'react';
2
+
3
+ export const buttonTypes = ['primary', 'secondary', 'secondary-light', 'tertiary'] as const;
4
+ export type ButtonType = (typeof buttonTypes)[number];
5
+
6
+ export const buttonVariants = ['filled', 'ghost', 'danger', 'dark'] as const;
7
+ export type ButtonVariant = (typeof buttonVariants)[number];
8
+
9
+ export const buttonSizes = ['large', 'medium', 'small'] as const;
10
+ export type ButtonSize = (typeof buttonSizes)[number];
11
+
12
+ export interface DsButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
13
+ /**
14
+ * Type of the button
15
+ * @default 'primary'
16
+ */
17
+ buttonType?: ButtonType;
18
+
19
+ /**
20
+ * Visual variant of the button
21
+ * @default 'filled'
22
+ */
23
+ variant?: ButtonVariant;
24
+
25
+ /**
26
+ * Size of the button
27
+ * @default 'medium'
28
+ */
29
+ size?: ButtonSize;
30
+
31
+ /**
32
+ * Whether the button is disabled
33
+ * @default false
34
+ */
35
+ disabled?: boolean;
36
+
37
+ /**
38
+ * Class name for the button content
39
+ */
40
+ contentClassName?: string;
41
+ }
@@ -0,0 +1,2 @@
1
+ export { default as DsButtonNew } from './ds-button-new';
2
+ export * from './ds-button-new.types';