@drivenets/design-system 0.16.0 → 0.18.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 (176) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/index.cjs +1893 -824
  3. package/dist/index.d.cts +363 -247
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.ts +363 -247
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1896 -829
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.css +1 -1
  10. package/package.json +25 -25
  11. package/src/components/ds-alert-banner/ds-alert-banner-global.figma.ts +49 -0
  12. package/src/components/ds-alert-banner/ds-alert-banner.figma.ts +51 -0
  13. package/src/components/ds-alert-banner/ds-alert-banner.tsx +7 -6
  14. package/src/components/ds-autocomplete/ds-autocomplete.figma.ts +2 -2
  15. package/src/components/ds-autocomplete/ds-autocomplete.module.scss +15 -4
  16. package/src/components/ds-autocomplete/ds-autocomplete.tsx +10 -3
  17. package/src/components/ds-autocomplete/ds-autocomplete.types.ts +8 -0
  18. package/src/components/ds-avatar/ds-avatar.figma.ts +2 -2
  19. package/src/components/ds-avatar-group/ds-avatar-group.figma.ts +2 -2
  20. package/src/components/ds-breadcrumb/ds-breadcrumb.figma.ts +2 -2
  21. package/src/components/ds-button-v3/ds-button-v3.figma.ts +7 -5
  22. package/src/components/ds-button-v3/ds-button-v3.module.scss +84 -17
  23. package/src/components/ds-button-v3/ds-button-v3.tsx +2 -0
  24. package/src/components/ds-button-v3/ds-button-v3.types.ts +11 -2
  25. package/src/components/ds-button-v3/ds-button-v4.figma.ts +121 -0
  26. package/src/components/ds-card/figma/ds-card-content.figma.ts +2 -2
  27. package/src/components/ds-card/figma/ds-card-footer.figma.ts +2 -2
  28. package/src/components/ds-card/figma/ds-card-header.figma.ts +2 -2
  29. package/src/components/ds-card/figma/ds-card.figma.ts +2 -2
  30. package/src/components/ds-catalog-layout/ds-catalog-layout.figma.ts +51 -0
  31. package/src/components/ds-catalog-layout/ds-catalog-layout.tsx +9 -8
  32. package/src/components/ds-checkbox/ds-checkbox-level-2.figma.ts +2 -2
  33. package/src/components/ds-checkbox/ds-checkbox.figma.ts +2 -2
  34. package/src/components/ds-checkbox-group/ds-checkbox-group.figma.ts +2 -2
  35. package/src/components/ds-comment-bubble/ds-comment-bubble.figma.ts +52 -0
  36. package/src/components/ds-comment-card/ds-comment-card.figma.ts +36 -0
  37. package/src/components/ds-comment-indicator/ds-comment-indicator.figma.ts +32 -0
  38. package/src/components/ds-comments-drawer/components/comments-filter-modal/index.ts +0 -1
  39. package/src/components/ds-comments-drawer/ds-comments-drawer.figma.ts +19 -0
  40. package/src/components/ds-confirmation/ds-confirmation.tsx +13 -11
  41. package/src/components/ds-date-picker/ds-date-picker.figma.ts +2 -2
  42. package/src/components/ds-divider/ds-divider.figma.ts +2 -2
  43. package/src/components/ds-drawer/ds-drawer.tsx +11 -10
  44. package/src/components/ds-drawer/figma/ds-drawer-content.figma.ts +2 -2
  45. package/src/components/ds-drawer/figma/ds-drawer-footer.figma.ts +2 -2
  46. package/src/components/ds-drawer/figma/ds-drawer-header.figma.ts +2 -2
  47. package/src/components/ds-drawer/figma/ds-drawer.figma.ts +2 -2
  48. package/src/components/ds-dropdown-menu/figma/ds-dropdown-menu-footer.figma.ts +2 -2
  49. package/src/components/ds-dropdown-menu/figma/ds-dropdown-menu-group.figma.ts +2 -2
  50. package/src/components/ds-dropdown-menu/figma/ds-dropdown-menu-item.figma.ts +2 -2
  51. package/src/components/ds-dropdown-menu/figma/ds-dropdown-menu-separator.figma.ts +2 -2
  52. package/src/components/ds-dropdown-menu/figma/ds-dropdown-menu.figma.ts +2 -2
  53. package/src/components/ds-expandable-text-input/ds-expandable-text-input.figma.ts +2 -2
  54. package/src/components/ds-file-upload/components/file-upload-item/index.ts +0 -1
  55. package/src/components/ds-file-upload/ds-file-upload.figma.ts +2 -2
  56. package/src/components/ds-filter-status-icon/ds-filter-status-icon.figma.ts +2 -2
  57. package/src/components/ds-form-control/ds-form-control.figma.ts +2 -2
  58. package/src/components/ds-form-control/ds-form-control.tsx +15 -13
  59. package/src/components/ds-icon/figma/ds-icon-material.figma.batch.ts +1 -1
  60. package/src/components/ds-icon/figma/ds-icon-special.figma.batch.ts +1 -1
  61. package/src/components/ds-key-value-pair/ds-key-value-pair.figma.ts +2 -2
  62. package/src/components/ds-loader/ds-loader.figma.ts +2 -2
  63. package/src/components/ds-modal/ds-modal.tsx +10 -9
  64. package/src/components/ds-modal/figma/ds-modal-content.figma.ts +2 -2
  65. package/src/components/ds-modal/figma/ds-modal-footer.figma.ts +2 -2
  66. package/src/components/ds-modal/figma/ds-modal-header.figma.ts +2 -2
  67. package/src/components/ds-modal/figma/ds-modal.figma.ts +2 -2
  68. package/src/components/ds-number-input/ds-number-input.tsx +1 -0
  69. package/src/components/ds-panel/ds-panel.figma.ts +2 -2
  70. package/src/components/ds-popover/figma/ds-popover-content-item.figma.ts +2 -2
  71. package/src/components/ds-popover/figma/ds-popover-content.figma.ts +2 -2
  72. package/src/components/ds-popover/figma/ds-popover-footer.figma.ts +2 -2
  73. package/src/components/ds-popover/figma/ds-popover-header.figma.ts +2 -2
  74. package/src/components/ds-popover/figma/ds-popover.figma.ts +2 -2
  75. package/src/components/ds-progress-arc/ds-progress-arc.figma.ts +2 -2
  76. package/src/components/ds-progress-donut/ds-progress-donut.figma.ts +2 -2
  77. package/src/components/ds-progress-linear/ds-progress-linear.figma.ts +2 -2
  78. package/src/components/ds-progress-task-bar/ds-progress-task-bar.figma.ts +2 -2
  79. package/src/components/ds-radio-group/figma/ds-radio-group-item.figma.ts +2 -2
  80. package/src/components/ds-radio-group/figma/ds-radio-group.figma.ts +2 -2
  81. package/src/components/ds-segment-group/figma/ds-segment-group-item.figma.ts +2 -2
  82. package/src/components/ds-segment-group/figma/ds-segment-group.figma.ts +2 -2
  83. package/src/components/ds-select/ds-select.figma.ts +4 -3
  84. package/src/components/ds-select/ds-select.tsx +6 -1
  85. package/src/components/ds-select/ds-select.types.ts +2 -1
  86. package/src/components/ds-site-node/ds-site-node.figma.ts +2 -2
  87. package/src/components/ds-slider/ds-slider.figma.ts +29 -0
  88. package/src/components/ds-slider/ds-slider.module.scss +104 -0
  89. package/src/components/ds-slider/ds-slider.tsx +118 -0
  90. package/src/components/ds-slider/ds-slider.types.ts +102 -0
  91. package/src/components/ds-slider/ds-slider.utils.ts +14 -0
  92. package/src/components/ds-slider/index.ts +11 -0
  93. package/src/components/ds-smart-tabs/ds-smart-tabs.tsx +5 -4
  94. package/src/components/ds-smart-tabs/figma/ds-smart-tabs-tab.figma.ts +83 -0
  95. package/src/components/ds-smart-tabs/figma/ds-smart-tabs.figma.ts +23 -0
  96. package/src/components/ds-spinner/ds-spinner.figma.ts +2 -2
  97. package/src/components/ds-split-button/ds-split-button.figma.ts +2 -2
  98. package/src/components/ds-status-badge-v2/ds-status-badge-v2.figma.ts +2 -2
  99. package/src/components/ds-stepper/ds-stepper.figma.ts +2 -2
  100. package/src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.module.scss +5 -1
  101. package/src/components/ds-table/components/ds-table-group-header-cell/ds-table-group-header-cell.tsx +15 -3
  102. package/src/components/ds-table/components/ds-table-group-header-cell/index.ts +0 -1
  103. package/src/components/ds-table/components/ds-table-header/ds-table-header.module.scss +17 -3
  104. package/src/components/ds-table/components/ds-table-header/ds-table-header.tsx +30 -9
  105. package/src/components/ds-table/components/ds-table-resize-handle/ds-table-resize-handle.module.scss +23 -0
  106. package/src/components/ds-table/components/ds-table-resize-handle/ds-table-resize-handle.tsx +218 -0
  107. package/src/components/ds-table/components/ds-table-resize-handle/ds-table-resize-handle.types.ts +14 -0
  108. package/src/components/ds-table/components/ds-table-resize-handle/index.ts +1 -0
  109. package/src/components/ds-table/components/ds-table-resize-overlay/ds-table-resize-overlay.module.scss +18 -0
  110. package/src/components/ds-table/components/ds-table-resize-overlay/ds-table-resize-overlay.tsx +16 -0
  111. package/src/components/ds-table/components/ds-table-resize-overlay/ds-table-resize-overlay.types.ts +13 -0
  112. package/src/components/ds-table/components/ds-table-resize-overlay/index.ts +1 -0
  113. package/src/components/ds-table/components/ds-table-row/ds-table-row.module.scss +1 -1
  114. package/src/components/ds-table/components/ds-table-row/ds-table-row.tsx +9 -2
  115. package/src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.module.scss +2 -1
  116. package/src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.tsx +9 -2
  117. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-checkbox.tsx +2 -2
  118. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-date.tsx +2 -1
  119. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-number.tsx +2 -1
  120. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-select.tsx +2 -1
  121. package/src/components/ds-table/components/edit/cell-editors/ds-table-edit-cell-text.tsx +2 -1
  122. package/src/components/ds-table/components/edit/ds-table-editing-cell/ds-table-editing-cell.tsx +12 -3
  123. package/src/components/ds-table/context/ds-table-context.tsx +208 -0
  124. package/src/components/ds-table/ds-table-defaults.ts +42 -0
  125. package/src/components/ds-table/ds-table.module.scss +19 -1
  126. package/src/components/ds-table/ds-table.tsx +163 -235
  127. package/src/components/ds-table/ds-table.types.ts +59 -47
  128. package/src/components/ds-table/figma/ds-table-expandable.figma.ts +2 -2
  129. package/src/components/ds-table/figma/ds-table.figma.ts +2 -2
  130. package/src/components/ds-table/grouping/utils/column-group.ts +7 -5
  131. package/src/components/ds-table/hooks/use-cell-editor.ts +5 -1
  132. package/src/components/ds-table/hooks/use-column-resize.ts +385 -0
  133. package/src/components/ds-table/hooks/use-editing-state.ts +190 -0
  134. package/src/components/ds-table/index.ts +1 -0
  135. package/src/components/ds-table/styles/_variables.scss +2 -1
  136. package/src/components/ds-table/utils/column-size-meta.augmentation.ts +16 -0
  137. package/src/components/ds-table/utils/column-size.ts +213 -10
  138. package/src/components/ds-table/utils/column-size.unit.test.ts +213 -0
  139. package/src/components/ds-table/utils/constants.ts +28 -0
  140. package/src/components/ds-table/utils/frozen-body.ts +33 -0
  141. package/src/components/ds-table/utils/frozen-body.unit.test.ts +44 -0
  142. package/src/components/ds-table/utils/table-api.ts +42 -0
  143. package/src/components/ds-table/utils/table-api.unit.test.ts +82 -0
  144. package/src/components/ds-table/utils/table-columns.tsx +119 -0
  145. package/src/components/ds-table/utils/table-columns.unit.test.ts +199 -0
  146. package/src/components/ds-tabs/figma/ds-tabs-tab-vertical.figma.ts +2 -2
  147. package/src/components/ds-tabs/figma/ds-tabs-tab.figma.ts +2 -2
  148. package/src/components/ds-tabs/figma/ds-tabs-vertical.figma.ts +2 -2
  149. package/src/components/ds-tabs/figma/ds-tabs.figma.ts +2 -2
  150. package/src/components/ds-tag/ds-tag.figma.ts +51 -0
  151. package/src/components/ds-tag-filter/ds-tag-filter.figma.ts +16 -0
  152. package/src/components/ds-text-input/ds-input-field-v02.figma.ts +31 -6
  153. package/src/components/ds-text-input/ds-text-input.figma.ts +5 -4
  154. package/src/components/ds-text-input/ds-text-input.tsx +1 -0
  155. package/src/components/ds-text-input/ds-text-input.types.ts +1 -1
  156. package/src/components/ds-time-picker/ds-time-picker.figma.ts +2 -2
  157. package/src/components/ds-toast/ds-toast.figma.ts +3 -3
  158. package/src/components/ds-toggle/ds-toggle.figma.ts +2 -2
  159. package/src/components/ds-tooltip/ds-tooltip.figma.ts +2 -2
  160. package/src/components/ds-tree/ds-tree.figma.ts +54 -0
  161. package/src/components/ds-tree/ds-tree.module.scss +2 -2
  162. package/src/components/ds-tree/ds-tree.tsx +6 -0
  163. package/src/components/ds-tree/ds-tree.types.ts +16 -0
  164. package/src/components/ds-typography/ds-typography.figma.ts +2 -2
  165. package/src/components/ds-user-card/ds-user-card.figma.ts +2 -2
  166. package/src/components/ds-vertical-tabs/ds-vertical-tabs.tsx +13 -6
  167. package/src/components/ds-workspace-layout/ds-workspace-layout.figma.ts +99 -0
  168. package/src/components/ds-workspace-layout/ds-workspace-layout.module.scss +1 -8
  169. package/src/components/ds-workspace-layout/ds-workspace-layout.tsx +11 -10
  170. package/src/index.ts +1 -0
  171. package/src/styles/_gradients.scss +19 -0
  172. package/src/styles/_root.scss +39 -15
  173. package/src/styles/_typography.scss +1 -0
  174. package/src/styles/shared/_input.scss +10 -0
  175. package/src/styles/styles.scss +1 -0
  176. package/src/components/ds-table/context/ds-table-context.ts +0 -112
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drivenets/design-system",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.cts",
@@ -41,14 +41,14 @@
41
41
  "@dnd-kit/modifiers": "^9.0.0",
42
42
  "@dnd-kit/sortable": "^10.0.0",
43
43
  "@dnd-kit/utilities": "^3.2.2",
44
- "@radix-ui/react-collapsible": "^1.1.13",
45
- "@radix-ui/react-dialog": "^1.1.16",
46
- "@radix-ui/react-dropdown-menu": "^2.1.17",
47
- "@radix-ui/react-visually-hidden": "^1.2.5",
44
+ "@radix-ui/react-collapsible": "^1.1.17",
45
+ "@radix-ui/react-dialog": "^1.1.20",
46
+ "@radix-ui/react-dropdown-menu": "^2.1.21",
47
+ "@radix-ui/react-visually-hidden": "^1.2.8",
48
48
  "@tanstack/react-table": "^8.21.3",
49
- "@tanstack/react-virtual": "^3.14.2",
50
- "@zag-js/react": "^1.41.2",
51
- "@zag-js/steps": "^1.41.2",
49
+ "@tanstack/react-virtual": "^3.14.6",
50
+ "@zag-js/react": "^1.42.0",
51
+ "@zag-js/steps": "^1.42.0",
52
52
  "classnames": "^2.5.1",
53
53
  "csstype": "^3.2.3"
54
54
  },
@@ -61,25 +61,25 @@
61
61
  "devDependencies": {
62
62
  "@arethetypeswrong/cli": "^0.18.2",
63
63
  "@eslint/compat": "^2.1.0",
64
- "@faker-js/faker": "^10.3.0",
65
- "@figma/code-connect": "^1.4.8",
64
+ "@faker-js/faker": "^10.5.0",
65
+ "@figma/code-connect": "^1.4.9",
66
66
  "@github-ui/storybook-addon-performance-panel": "^1.1.4",
67
- "@hookform/resolvers": "^5.4.0",
67
+ "@hookform/resolvers": "^5.4.2",
68
68
  "@rolldown/plugin-babel": "^0.2.3",
69
69
  "@storybook/addon-a11y": "^10.4.1",
70
70
  "@storybook/addon-docs": "^10.4.1",
71
71
  "@storybook/addon-mcp": "^0.6.0",
72
72
  "@storybook/addon-vitest": "^10.4.1",
73
73
  "@storybook/react-vite": "^10.4.1",
74
- "@tanstack/react-query": "^5.100.14",
75
- "@tanstack/react-router": "^1.170.8",
76
- "@tsdown/css": "^0.22.12",
74
+ "@tanstack/react-query": "^5.101.4",
75
+ "@tanstack/react-router": "^1.170.18",
76
+ "@tsdown/css": "^0.22.14",
77
77
  "@types/eslint-plugin-jsx-a11y": "^6.10.1",
78
- "@types/react": "^19.2.15",
78
+ "@types/react": "^19.2.17",
79
79
  "@types/react-dom": "^19.2.3",
80
80
  "@types/serve-handler": "^6.1.4",
81
81
  "@typescript/native": "npm:typescript@^7.0.2",
82
- "@vitejs/plugin-react": "^6.0.2",
82
+ "@vitejs/plugin-react": "^6.0.4",
83
83
  "@vitest/browser-playwright": "^4.1.10",
84
84
  "@vitest/coverage-v8": "^4.1.10",
85
85
  "babel-plugin-react-compiler": "^1.0.0",
@@ -87,27 +87,27 @@
87
87
  "eslint-plugin-jsx-a11y": "^6.10.2",
88
88
  "eslint-plugin-react": "^7.37.5",
89
89
  "eslint-plugin-react-hooks": "^7.1.1",
90
- "eslint-plugin-storybook": "^10.4.1",
90
+ "eslint-plugin-storybook": "^10.5.0",
91
91
  "mockdate": "^3.0.5",
92
- "playwright": "^1.60.0",
93
- "publint": "^0.3.21",
94
- "react": "^19.2.6",
95
- "react-dom": "^19.2.6",
96
- "react-hook-form": "^7.76.1",
92
+ "playwright": "^1.62.0",
93
+ "publint": "^0.3.22",
94
+ "react": "^19.2.8",
95
+ "react-dom": "^19.2.8",
96
+ "react-hook-form": "^7.83.0",
97
97
  "remark-gfm": "^4.0.1",
98
98
  "sass-embedded": "^1.100.0",
99
99
  "serve-handler": "^6.1.7",
100
100
  "storybook": "^10.4.1",
101
- "tsdown": "^0.22.12",
101
+ "tsdown": "^0.22.14",
102
102
  "typed-scss-modules": "^8.1.1",
103
103
  "typescript": "npm:@typescript/typescript6",
104
104
  "typescript-plugin-css-modules": "^5.2.0",
105
- "vite": "8.0.14",
105
+ "vite": "8.1.5",
106
106
  "vitest": "^4.1.10",
107
107
  "vitest-browser-react": "^2.1.0",
108
108
  "zod": "^4.4.3",
109
109
  "@drivenets/eslint-plugin-internal": "0.0.0",
110
- "@drivenets/vite-plugin-design-system": "0.0.10"
110
+ "@drivenets/vite-plugin-design-system": "0.0.11"
111
111
  },
112
112
  "scripts": {
113
113
  "start": "storybook dev -p 6006",
@@ -0,0 +1,49 @@
1
+ // url=https://www.figma.com/design/nha3m67y7S57cHCSuQO2gp/DAP-Design-System-1.2?node-id=15271-7357
2
+ // source=https://github.com/drivenets/design-system/tree/main/packages/design-system/src/components/ds-alert-banner
3
+ // component=DsAlertBanner
4
+ //
5
+ // `DsAlertBannerGlobalV1` is the full-width bar pinned to the top of the viewport. It
6
+ // maps to the same `DsAlertBanner` as the inline card but without `inline` (the
7
+ // default `global` layout) and with no title. See `ds-alert-banner.figma.ts` for the
8
+ // inline variant.
9
+ import figma from 'figma';
10
+
11
+ const instance = figma.selectedInstance;
12
+
13
+ const variant = instance.getEnum('Type', {
14
+ 'info neutral': 'info-neutral',
15
+ 'info blue': 'info-blue',
16
+ warning: 'warning',
17
+ error: 'error',
18
+ success: 'success',
19
+ });
20
+
21
+ // The status icon is set automatically by `Type` in Figma; mirror that mapping so the
22
+ // snippet passes the matching `DsIcon` name.
23
+ const icon = instance.getEnum('Type', {
24
+ 'info neutral': 'info',
25
+ 'info blue': 'info',
26
+ warning: 'warning',
27
+ error: 'error',
28
+ success: 'check_circle',
29
+ });
30
+
31
+ const closable = instance.getBoolean('Show Dismiss Button');
32
+ const showActions = instance.getBoolean('Show Actions');
33
+
34
+ const closableAttr = closable ? ' closable' : '';
35
+ const actionsBlock = showActions
36
+ ? `\n\t<DsAlertBanner.Actions>\n\t\t<DsButtonV3 variant="secondary" size="small">Action</DsButtonV3>\n\t</DsAlertBanner.Actions>`
37
+ : '';
38
+
39
+ export default {
40
+ example: figma.code`<DsAlertBanner open onOpenChange={() => {}} variant="${variant}" icon="${icon}"${closableAttr}>
41
+ <DsAlertBanner.Body>Description</DsAlertBanner.Body>${actionsBlock}
42
+ </DsAlertBanner>`,
43
+ imports: [
44
+ "import { DsAlertBanner } from '@drivenets/design-system';",
45
+ "import { DsButtonV3 } from '@drivenets/design-system';",
46
+ ],
47
+ id: 'ds-alert-banner-global',
48
+ metadata: { nestable: false },
49
+ } satisfies figma.Template;
@@ -0,0 +1,51 @@
1
+ // url=https://www.figma.com/design/nha3m67y7S57cHCSuQO2gp/DAP-Design-System-1.2?node-id=14850-7088
2
+ // source=https://github.com/drivenets/design-system/tree/main/packages/design-system/src/components/ds-alert-banner
3
+ // component=DsAlertBanner
4
+ //
5
+ // `DsAlertBannerInlineV1` is the inline (bordered card) banner that sits in normal
6
+ // document flow. It maps to the controlled `DsAlertBanner` with `inline`. The
7
+ // full-width, top-of-viewport `DsAlertBannerGlobalV1` maps to the same component
8
+ // without `inline` — see `ds-alert-banner-global.figma.ts`.
9
+ import figma from 'figma';
10
+
11
+ const instance = figma.selectedInstance;
12
+
13
+ const variant = instance.getEnum('Type', {
14
+ 'Info Neutral': 'info-neutral',
15
+ 'Info Blue': 'info-blue',
16
+ Warning: 'warning',
17
+ Error: 'error',
18
+ Success: 'success',
19
+ });
20
+
21
+ // The status icon is set automatically by `Type` in Figma; mirror that mapping so the
22
+ // snippet passes the matching `DsIcon` name.
23
+ const icon = instance.getEnum('Type', {
24
+ 'Info Neutral': 'info',
25
+ 'Info Blue': 'info',
26
+ Warning: 'warning',
27
+ Error: 'error',
28
+ Success: 'check_circle',
29
+ });
30
+
31
+ const closable = instance.getBoolean('Show Dismiss Button');
32
+ const showTitle = instance.getBoolean('Show Titles');
33
+ const showActions = instance.getBoolean('Show Actions');
34
+
35
+ const closableAttr = closable ? ' closable' : '';
36
+ const titleLine = showTitle ? `\n\t<DsAlertBanner.Title>Title</DsAlertBanner.Title>` : '';
37
+ const actionsBlock = showActions
38
+ ? `\n\t<DsAlertBanner.Actions>\n\t\t<DsButtonV3 variant="secondary" size="small">Action</DsButtonV3>\n\t</DsAlertBanner.Actions>`
39
+ : '';
40
+
41
+ export default {
42
+ example: figma.code`<DsAlertBanner open onOpenChange={() => {}} inline variant="${variant}" icon="${icon}"${closableAttr}>${titleLine}
43
+ <DsAlertBanner.Body>Description</DsAlertBanner.Body>${actionsBlock}
44
+ </DsAlertBanner>`,
45
+ imports: [
46
+ "import { DsAlertBanner } from '@drivenets/design-system';",
47
+ "import { DsButtonV3 } from '@drivenets/design-system';",
48
+ ],
49
+ id: 'ds-alert-banner',
50
+ metadata: { nestable: false },
51
+ } satisfies figma.Template;
@@ -12,7 +12,7 @@ import { DsTypography } from '../ds-typography';
12
12
  * severity variants, an optional icon, and an optional close button. Compose the
13
13
  * content with `DsAlertBanner.Title`, `DsAlertBanner.Body`, and `DsAlertBanner.Actions`.
14
14
  */
15
- const DsAlertBanner = ({
15
+ const DsAlertBannerRoot = ({
16
16
  open,
17
17
  onOpenChange,
18
18
  inline = false,
@@ -115,10 +115,11 @@ Title.displayName = 'DsAlertBanner.Title';
115
115
  Body.displayName = 'DsAlertBanner.Body';
116
116
  Actions.displayName = 'DsAlertBanner.Actions';
117
117
 
118
- DsAlertBanner.Title = Title;
119
- DsAlertBanner.Body = Body;
120
- DsAlertBanner.Actions = Actions;
121
-
122
- DsAlertBanner.displayName = 'DsAlertBanner';
118
+ const DsAlertBanner = Object.assign(DsAlertBannerRoot, {
119
+ displayName: 'DsAlertBanner',
120
+ Title,
121
+ Body,
122
+ Actions,
123
+ });
123
124
 
124
125
  export default DsAlertBanner;
@@ -30,7 +30,7 @@ const attrs = [
30
30
 
31
31
  export default {
32
32
  example: figma.code`<DsAutocomplete ${attrs} />`,
33
- imports: ["import { DsAutocomplete } from '@drivenets/design-system'"],
33
+ imports: ["import { DsAutocomplete } from '@drivenets/design-system';"],
34
34
  id: 'ds-autocomplete',
35
35
  metadata: { nestable: true },
36
- };
36
+ } satisfies figma.Template;
@@ -1,7 +1,6 @@
1
1
  @use '../../styles/shared/dropdown';
2
2
  @use '../../styles/shared/input';
3
3
 
4
- $autocomplete-input-height: 36px;
5
4
  $autocomplete-max-visible-items: 4;
6
5
  $autocomplete-item-height: 38px;
7
6
  $autocomplete-dropdown-max-height: calc($autocomplete-max-visible-items * $autocomplete-item-height);
@@ -29,9 +28,21 @@ $autocomplete-opacity-visible: 1;
29
28
  display: flex;
30
29
  align-items: center;
31
30
  gap: var(--3xs);
32
- height: $autocomplete-input-height;
33
- min-height: $autocomplete-input-height;
34
- max-height: $autocomplete-input-height;
31
+ height: input.$input-text-height-default;
32
+ min-height: input.$input-text-height-default;
33
+ max-height: input.$input-text-height-default;
34
+
35
+ &.small {
36
+ height: input.$input-text-height-small;
37
+ min-height: input.$input-text-height-small;
38
+ max-height: input.$input-text-height-small;
39
+ }
40
+
41
+ &.large {
42
+ height: input.$input-text-height-large;
43
+ min-height: input.$input-text-height-large;
44
+ max-height: input.$input-text-height-large;
45
+ }
35
46
 
36
47
  &[data-focus] {
37
48
  border-color: var(--form-control-border-color, var(--border-action-primary)) !important;
@@ -12,6 +12,7 @@ export const DsAutocomplete = ({
12
12
  id,
13
13
  options = [],
14
14
  loading = false,
15
+ size = 'default',
15
16
  style,
16
17
  className,
17
18
  placeholder = 'Start typing to search...',
@@ -74,7 +75,13 @@ export const DsAutocomplete = ({
74
75
  onOpenChange={handleOpenChange}
75
76
  closeOnSelect
76
77
  >
77
- <Combobox.Control className={styles.control}>
78
+ <Combobox.Control
79
+ className={classNames(
80
+ styles.control,
81
+ size === 'small' && styles.small,
82
+ size === 'large' && styles.large,
83
+ )}
84
+ >
78
85
  {startAdornment && <span className={styles.startAdornment}>{startAdornment}</span>}
79
86
 
80
87
  <Combobox.Input className={styles.input} placeholder={placeholder} />
@@ -92,13 +99,13 @@ export const DsAutocomplete = ({
92
99
  combobox.setInputValue('');
93
100
  }}
94
101
  >
95
- <DsIcon icon="close" size="medium" />
102
+ <DsIcon icon="close" size={size === 'small' ? 'small' : 'medium'} />
96
103
  </button>
97
104
  )}
98
105
 
99
106
  {showTrigger && (
100
107
  <Combobox.Trigger className={styles.trigger} aria-label="Toggle dropdown">
101
- <DsIcon icon="keyboard_arrow_down" size="medium" />
108
+ <DsIcon icon="keyboard_arrow_down" size={size === 'small' ? 'small' : 'medium'} />
102
109
  </Combobox.Trigger>
103
110
  )}
104
111
  </div>
@@ -1,6 +1,9 @@
1
1
  import type React from 'react';
2
2
  import type { IconName } from '../ds-icon';
3
3
 
4
+ export const autocompleteSizes = ['small', 'default', 'large'] as const;
5
+ export type AutocompleteSize = (typeof autocompleteSizes)[number];
6
+
4
7
  export interface DsAutocompleteOption {
5
8
  /**
6
9
  * Label to display in the autocomplete dropdown
@@ -31,6 +34,11 @@ export interface DsAutocompleteProps {
31
34
  * When true, a loading message is shown in the dropdown.
32
35
  */
33
36
  loading?: boolean;
37
+ /**
38
+ * The size of the autocomplete control
39
+ * @default 'default'
40
+ */
41
+ size?: AutocompleteSize;
34
42
 
35
43
  /**
36
44
  * Additional styles to apply to the component
@@ -24,7 +24,7 @@ const type = instance.getEnum('Type', { Circle: 'circle', Rounded: 'rounded' })
24
24
 
25
25
  export default {
26
26
  example: figma.code`<DsAvatar name="Full Name" size="${size}" type="${type}" />`,
27
- imports: ["import { DsAvatar } from '@drivenets/design-system'"],
27
+ imports: ["import { DsAvatar } from '@drivenets/design-system';"],
28
28
  id: 'ds-avatar',
29
29
  metadata: { nestable: true },
30
- };
30
+ } satisfies figma.Template;
@@ -21,7 +21,7 @@ const size =
21
21
 
22
22
  export default {
23
23
  example: figma.code`<DsAvatarGroup avatars={[]} size="${size}" />`,
24
- imports: ["import { DsAvatarGroup } from '@drivenets/design-system'"],
24
+ imports: ["import { DsAvatarGroup } from '@drivenets/design-system';"],
25
25
  id: 'ds-avatar-group',
26
26
  metadata: { nestable: true },
27
- };
27
+ } satisfies figma.Template;
@@ -13,7 +13,7 @@ import figma from 'figma';
13
13
 
14
14
  export default {
15
15
  example: figma.code`<DsBreadcrumb items={[]} />`,
16
- imports: ["import { DsBreadcrumb } from '@drivenets/design-system'"],
16
+ imports: ["import { DsBreadcrumb } from '@drivenets/design-system';"],
17
17
  id: 'ds-breadcrumb',
18
18
  metadata: { nestable: true },
19
- };
19
+ } satisfies figma.Template;
@@ -7,6 +7,7 @@ const instance = figma.selectedInstance;
7
7
 
8
8
  const variant = instance.getEnum('buttonType', {
9
9
  primary: 'primary',
10
+ 'primary-subtle': 'primary-subtle',
10
11
  secondary: 'secondary',
11
12
  tertiary: 'tertiary',
12
13
  });
@@ -86,14 +87,15 @@ const labelNode = instance.findText('Button', { traverseInstances: true });
86
87
  const label = labelNode.type === 'TEXT' ? labelNode.textContent : 'Button';
87
88
 
88
89
  const iconProp = icon ? figma.code` icon="${icon}"` : '';
90
+ const disabledProp = disabled ? ' disabled' : '';
89
91
 
90
92
  export default {
91
93
  example: iconOnly
92
- ? figma.code`<DsButtonV3 variant="${variant}" color="${color}" size="${size}" ${disabled ? 'disabled' : ''}${iconProp} aria-label="${label}" />`
94
+ ? figma.code`<DsButtonV3 variant="${variant}" color="${color}" size="${size}"${disabledProp}${iconProp} aria-label="${label}" />`
93
95
  : showIcon && icon
94
- ? figma.code`<DsButtonV3 variant="${variant}" color="${color}" size="${size}" ${disabled ? 'disabled' : ''} icon="${icon}">${label}</DsButtonV3>`
95
- : figma.code`<DsButtonV3 variant="${variant}" color="${color}" size="${size}" ${disabled ? 'disabled' : ''}>${label}</DsButtonV3>`,
96
- imports: ["import { DsButtonV3 } from '@drivenets/design-system'"],
96
+ ? figma.code`<DsButtonV3 variant="${variant}" color="${color}" size="${size}"${disabledProp} icon="${icon}">${label}</DsButtonV3>`
97
+ : figma.code`<DsButtonV3 variant="${variant}" color="${color}" size="${size}"${disabledProp}>${label}</DsButtonV3>`,
98
+ imports: ["import { DsButtonV3 } from '@drivenets/design-system';"],
97
99
  id: 'ds-button-v3',
98
100
  metadata: { nestable: true },
99
- };
101
+ } satisfies figma.Template;
@@ -3,7 +3,8 @@
3
3
  $height-large: 40px;
4
4
  $height-medium: 36px;
5
5
  $height-small: 28px;
6
- $border-radius: 4px;
6
+ $border-radius: var(--3xs);
7
+ $border-radius-high-emphasis: var(--sm);
7
8
  $focus-ring-width: 2px;
8
9
 
9
10
  @mixin focus-ring($outer-color) {
@@ -34,6 +35,10 @@ $focus-ring-width: 2px;
34
35
  cursor: not-allowed;
35
36
  }
36
37
 
38
+ &[data-high-emphasis] {
39
+ border-radius: $border-radius-high-emphasis;
40
+ }
41
+
37
42
  &[data-loading] {
38
43
  cursor: default;
39
44
  pointer-events: none;
@@ -126,6 +131,37 @@ $focus-ring-width: 2px;
126
131
  }
127
132
  }
128
133
 
134
+ .root[data-color='default'][data-variant='primary-subtle'] {
135
+ background-color: var(--background-primary-subtle);
136
+ color: var(--font-action);
137
+ border-color: var(--border-action-primary);
138
+
139
+ &:hover:not(:disabled):not(:active):not([data-selected='true']) {
140
+ background-color: var(--background-primary-subtle-hover);
141
+ }
142
+
143
+ &:active:not(:disabled) {
144
+ background-color: var(--background-primary-subtle-active);
145
+ }
146
+
147
+ &:focus-visible {
148
+ @include focus-ring(var(--border-action-primary));
149
+
150
+ background-color: var(--background-primary-subtle-hover);
151
+ border-color: var(--border-inverse);
152
+ }
153
+
154
+ &[data-selected='true'] {
155
+ background-color: var(--background-primary-subtle-active);
156
+ }
157
+
158
+ &:disabled:not([data-loading]) {
159
+ background-color: var(--background-primary-subtle-disabled);
160
+ color: var(--font-disabled);
161
+ border-color: var(--border-disabled);
162
+ }
163
+ }
164
+
129
165
  .root[data-color='default'][data-variant='secondary'] {
130
166
  background-color: var(--background-action-secondary);
131
167
  color: var(--font-main);
@@ -228,19 +264,50 @@ $focus-ring-width: 2px;
228
264
  }
229
265
  }
230
266
 
267
+ .root[data-color='error'][data-variant='primary-subtle'] {
268
+ background-color: var(--background-error-subtle);
269
+ color: var(--font-error);
270
+ border-color: var(--border-error);
271
+
272
+ &:hover:not(:disabled):not(:active):not([data-selected='true']) {
273
+ background-color: var(--background-error-subtle-hover);
274
+ }
275
+
276
+ &:active:not(:disabled) {
277
+ background-color: var(--background-error-subtle-active);
278
+ }
279
+
280
+ &:focus-visible {
281
+ @include focus-ring(var(--border-error));
282
+
283
+ background-color: var(--background-error-subtle-hover);
284
+ border-color: var(--border-inverse);
285
+ }
286
+
287
+ &[data-selected='true'] {
288
+ background-color: var(--background-error-subtle-active);
289
+ }
290
+
291
+ &:disabled:not([data-loading]) {
292
+ background-color: var(--background-error-subtle-disabled);
293
+ color: var(--font-disabled);
294
+ border-color: var(--border-disabled);
295
+ }
296
+ }
297
+
231
298
  .root[data-color='error'][data-variant='secondary'] {
232
299
  background-color: var(--background-action-secondary);
233
300
  color: var(--font-error);
234
- border-color: var(--border-error);
301
+ border-color: var(--border-error-weak);
235
302
 
236
303
  &:hover:not(:disabled):not(:active):not([data-selected='true']) {
237
304
  background-color: var(--background-error-secondary-hover);
238
- border-color: var(--border-error-hover);
305
+ border-color: var(--border-error-medium);
239
306
  }
240
307
 
241
308
  &:active:not(:disabled) {
242
- background-color: var(--background-error-secondary-selected);
243
- border-color: var(--border-error-hover);
309
+ background-color: var(--background-error-secondary-active);
310
+ border-color: var(--border-error-medium);
244
311
  }
245
312
 
246
313
  &:focus-visible {
@@ -251,8 +318,8 @@ $focus-ring-width: 2px;
251
318
  }
252
319
 
253
320
  &[data-selected='true'] {
254
- background-color: var(--background-error-secondary-selected);
255
- border-color: var(--border-error-hover);
321
+ background-color: var(--background-error-secondary-active);
322
+ border-color: var(--border-error-medium);
256
323
  }
257
324
 
258
325
  &:disabled:not([data-loading]) {
@@ -293,32 +360,32 @@ $focus-ring-width: 2px;
293
360
  }
294
361
 
295
362
  .root[data-color='light'][data-variant='primary'] {
296
- background-color: var(--background-light-primary);
363
+ background-color: var(--background-light-subtle);
297
364
  color: var(--font-on-action);
298
- border-color: transparent;
365
+ border-color: var(--border-inverse);
299
366
 
300
367
  &:hover:not(:disabled):not(:active):not([data-selected='true']) {
301
- background-color: var(--background-light-primary-hover);
368
+ background-color: var(--background-light-hover);
302
369
  }
303
370
 
304
371
  &:active:not(:disabled) {
305
- background-color: var(--background-light-primary-selected);
372
+ background-color: var(--background-light-active);
306
373
  }
307
374
 
308
375
  &:focus-visible {
309
- @include focus-ring(var(--outline-inverse));
376
+ @include focus-ring(var(--border-action-primary));
310
377
 
311
- background-color: var(--background-light-primary-hover);
312
- border-color: var(--border-action-secondary);
378
+ background-color: var(--background-light-hover);
313
379
  }
314
380
 
315
381
  &[data-selected='true'] {
316
- background-color: var(--background-light-primary-selected);
382
+ background-color: var(--background-light-active);
317
383
  }
318
384
 
319
385
  &:disabled:not([data-loading]) {
320
- background-color: var(--background-light-disabled);
321
- color: var(--font-light-disabled);
386
+ background-color: transparent;
387
+ color: var(--font-disabled);
388
+ border-color: var(--border-disabled);
322
389
  }
323
390
  }
324
391
 
@@ -29,6 +29,7 @@ const DsButtonV3 = ({
29
29
  variant = 'primary',
30
30
  size = 'medium',
31
31
  selected = false,
32
+ highEmphasis = false,
32
33
  type = 'button',
33
34
  ...rest
34
35
  }: DsButtonV3BaseProps) => {
@@ -48,6 +49,7 @@ const DsButtonV3 = ({
48
49
  data-variant={variant}
49
50
  data-size={size}
50
51
  data-selected={selected ? 'true' : undefined}
52
+ data-high-emphasis={highEmphasis ? 'true' : undefined}
51
53
  data-icon-only={isIconOnly || undefined}
52
54
  data-loading={loading && !disabled ? '' : undefined}
53
55
  {...rest}
@@ -2,7 +2,7 @@ import type { ButtonHTMLAttributes, Ref } from 'react';
2
2
  import type { IconType } from '../ds-icon';
3
3
  import type { ResponsiveValue } from '../../utils/responsive';
4
4
 
5
- export const buttonV3Variants = ['primary', 'secondary', 'tertiary'] as const;
5
+ export const buttonV3Variants = ['primary', 'primary-subtle', 'secondary', 'tertiary'] as const;
6
6
  export type ButtonV3Variant = (typeof buttonV3Variants)[number];
7
7
 
8
8
  export const buttonV3Colors = ['default', 'error', 'light'] as const;
@@ -24,7 +24,8 @@ export interface DsButtonV3BaseProps extends ButtonHTMLAttributes<HTMLButtonElem
24
24
 
25
25
  /**
26
26
  * Visual variant of the button:
27
- * - `primary` — filled, highest-emphasis action
27
+ * - `primary` — highest-emphasis action; filled for `default`/`error`, subtle outline for `color="light"`
28
+ * - `primary-subtle` — subtle-filled, colored border and text (emphasis outline); `default`/`error` only
28
29
  * - `secondary` — outlined, medium-emphasis action
29
30
  * - `tertiary` — borderless, low-emphasis action (text-like)
30
31
  * @default 'primary'
@@ -44,6 +45,14 @@ export interface DsButtonV3BaseProps extends ButtonHTMLAttributes<HTMLButtonElem
44
45
  */
45
46
  selected?: boolean;
46
47
 
48
+ /**
49
+ * Raises the corner radius for high-emphasis surfaces such as
50
+ * Sign in, Landing, and NetGen. Purely a rounding change — does not affect
51
+ * color or priority.
52
+ * @default false
53
+ */
54
+ highEmphasis?: boolean;
55
+
47
56
  /**
48
57
  * Leading icon. When set without children, renders as icon-only (square) layout.
49
58
  */