@drivenets/design-system 0.9.0 → 0.9.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drivenets/design-system",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.cts",
@@ -36,7 +36,7 @@
36
36
  "directory": "/packages/design-system"
37
37
  },
38
38
  "dependencies": {
39
- "@ark-ui/react": "^5.34.1",
39
+ "@ark-ui/react": "^5.36.1",
40
40
  "@dnd-kit/core": "^6.3.1",
41
41
  "@dnd-kit/modifiers": "^9.0.0",
42
42
  "@dnd-kit/sortable": "^10.0.0",
@@ -51,9 +51,9 @@
51
51
  "@radix-ui/react-tooltip": "^1.2.8",
52
52
  "@radix-ui/react-visually-hidden": "^1.2.4",
53
53
  "@tanstack/react-table": "^8.21.3",
54
- "@tanstack/react-virtual": "^3.13.23",
55
- "@zag-js/react": "^1.37.0",
56
- "@zag-js/steps": "^1.37.0",
54
+ "@tanstack/react-virtual": "^3.13.24",
55
+ "@zag-js/react": "^1.40.0",
56
+ "@zag-js/steps": "^1.40.0",
57
57
  "classnames": "^2.5.1",
58
58
  "csstype": "^3.2.3"
59
59
  },
@@ -79,6 +79,7 @@
79
79
  "@types/eslint-plugin-jsx-a11y": "^6.10.1",
80
80
  "@types/react": "^19.2.14",
81
81
  "@types/react-dom": "^19.2.3",
82
+ "@typescript/native-preview": "7.0.0-dev.20260331.1",
82
83
  "@vitejs/plugin-react": "^6.0.1",
83
84
  "@vitest/browser-playwright": "^4.1.0",
84
85
  "@vitest/coverage-v8": "^4.1.0",
@@ -98,7 +99,7 @@
98
99
  "storybook": "^10.2.19",
99
100
  "tsdown": "^0.21.6",
100
101
  "typed-scss-modules": "^8.1.1",
101
- "typescript": "^5.9.3",
102
+ "typescript": "^6.0.2",
102
103
  "typescript-plugin-css-modules": "^5.2.0",
103
104
  "vite": "8.0.5",
104
105
  "vitest": "^4.1.0",
@@ -112,7 +113,7 @@
112
113
  "lint": "pnpm generate-scss-dts && eslint --max-warnings=0 ${ESLINT_ARGS-} .; EXIT_CODE=$?; rm -rf .scss-dts; exit $EXIT_CODE",
113
114
  "//": "ESLINT_ARGS is used to pass arguments to eslint. We're using it so we don't need to duplicate the lint script.",
114
115
  "lint:fix": "ESLINT_ARGS=--fix pnpm lint",
115
- "typecheck": "pnpm generate-scss-dts && tsc; EXIT_CODE=$?; rm -rf .scss-dts; exit $EXIT_CODE",
116
+ "typecheck": "pnpm generate-scss-dts && tsgo; EXIT_CODE=$?; rm -rf .scss-dts; exit $EXIT_CODE",
116
117
  "generate-scss-dts": "typed-scss-modules ./src -o ./.scss-dts --nameFormat all --exportType default > /dev/null 2>&1",
117
118
  "storybook": "storybook dev -p 6006",
118
119
  "test": "vitest --project=\"!requires-build\"",
@@ -199,28 +199,28 @@ $focus-ring-width: 2px;
199
199
  }
200
200
  }
201
201
 
202
- .root[data-color='negative'][data-variant='primary'] {
203
- background-color: var(--background-background-negative);
202
+ .root[data-color='error'][data-variant='primary'] {
203
+ background-color: var(--background-background-error);
204
204
  color: var(--font-font-on-action);
205
205
  border-color: transparent;
206
206
 
207
207
  &:hover:not(:disabled):not(:active):not([data-selected='true']) {
208
- background-color: var(--background-background-negative-hover);
208
+ background-color: var(--background-background-error-hover);
209
209
  }
210
210
 
211
211
  &:active:not(:disabled) {
212
- background-color: var(--background-background-negative-selected);
212
+ background-color: var(--background-background-error-selected);
213
213
  }
214
214
 
215
215
  &:focus-visible {
216
- @include focus-ring(var(--border-border-negative));
216
+ @include focus-ring(var(--border-border-error));
217
217
 
218
- background-color: var(--background-background-negative-hover);
218
+ background-color: var(--background-background-error-hover);
219
219
  border-color: var(--border-border-inverse);
220
220
  }
221
221
 
222
222
  &[data-selected='true'] {
223
- background-color: var(--background-background-negative-selected);
223
+ background-color: var(--background-background-error-selected);
224
224
  }
225
225
 
226
226
  &:disabled:not([data-loading]) {
@@ -229,31 +229,31 @@ $focus-ring-width: 2px;
229
229
  }
230
230
  }
231
231
 
232
- .root[data-color='negative'][data-variant='secondary'] {
232
+ .root[data-color='error'][data-variant='secondary'] {
233
233
  background-color: var(--background-background-action-secondary);
234
- color: var(--font-font-negative);
235
- border-color: var(--border-border-negative);
234
+ color: var(--font-font-error);
235
+ border-color: var(--border-border-error);
236
236
 
237
237
  &:hover:not(:disabled):not(:active):not([data-selected='true']) {
238
- background-color: var(--background-background-negative-secondary-hover);
239
- border-color: var(--border-border-negative-hover);
238
+ background-color: var(--background-background-error-secondary-hover);
239
+ border-color: var(--border-border-error-hover);
240
240
  }
241
241
 
242
242
  &:active:not(:disabled) {
243
- background-color: var(--background-background-negative-secondary-selected);
244
- border-color: var(--border-border-negative-hover);
243
+ background-color: var(--background-background-error-secondary-selected);
244
+ border-color: var(--border-border-error-hover);
245
245
  }
246
246
 
247
247
  &:focus-visible {
248
- @include focus-ring(var(--border-border-negative));
248
+ @include focus-ring(var(--border-border-error));
249
249
 
250
- background-color: var(--background-background-negative-secondary-hover);
250
+ background-color: var(--background-background-error-secondary-hover);
251
251
  border-color: var(--border-border-inverse);
252
252
  }
253
253
 
254
254
  &[data-selected='true'] {
255
- background-color: var(--background-background-negative-secondary-selected);
256
- border-color: var(--border-border-negative-hover);
255
+ background-color: var(--background-background-error-secondary-selected);
256
+ border-color: var(--border-border-error-hover);
257
257
  }
258
258
 
259
259
  &:disabled:not([data-loading]) {
@@ -263,28 +263,28 @@ $focus-ring-width: 2px;
263
263
  }
264
264
  }
265
265
 
266
- .root[data-color='negative'][data-variant='tertiary'] {
266
+ .root[data-color='error'][data-variant='tertiary'] {
267
267
  background-color: transparent;
268
- color: var(--font-font-negative);
268
+ color: var(--font-font-error);
269
269
  border-color: transparent;
270
270
 
271
271
  &:hover:not(:disabled):not(:active):not([data-selected='true']) {
272
- background-color: var(--background-background-negative-secondary-hover);
272
+ background-color: var(--background-background-error-secondary-hover);
273
273
  }
274
274
 
275
275
  &:active:not(:disabled) {
276
- background-color: var(--background-background-negative-secondary-selected);
276
+ background-color: var(--background-background-error-secondary-selected);
277
277
  }
278
278
 
279
279
  &:focus-visible {
280
- @include focus-ring(var(--border-border-negative));
280
+ @include focus-ring(var(--border-border-error));
281
281
 
282
- background-color: var(--background-background-negative-secondary-hover);
282
+ background-color: var(--background-background-error-secondary-hover);
283
283
  border-color: var(--border-border-inverse);
284
284
  }
285
285
 
286
286
  &[data-selected='true'] {
287
- background-color: var(--background-background-negative-secondary-selected);
287
+ background-color: var(--background-background-error-secondary-selected);
288
288
  }
289
289
 
290
290
  &:disabled:not([data-loading]) {
@@ -2,7 +2,7 @@ import classNames from 'classnames';
2
2
  import { DsIcon, type IconSize } from '../ds-icon';
3
3
  import { DsSpinner } from '../ds-spinner';
4
4
  import styles from './ds-button-v3.module.scss';
5
- import type { ButtonV3Size, DsButtonV3Props } from './ds-button-v3.types.ts';
5
+ import type { ButtonV3Size, DsButtonV3BaseProps } from './ds-button-v3.types.ts';
6
6
 
7
7
  const iconSizeMap: Record<ButtonV3Size, IconSize> = Object.freeze({
8
8
  large: 'small',
@@ -25,7 +25,7 @@ const DsButtonV3 = ({
25
25
  selected = false,
26
26
  type = 'button',
27
27
  ...rest
28
- }: DsButtonV3Props) => {
28
+ }: DsButtonV3BaseProps) => {
29
29
  const isIconOnly = icon !== undefined && !children;
30
30
 
31
31
  return (
@@ -1,21 +1,22 @@
1
1
  import type { ButtonHTMLAttributes, Ref } from 'react';
2
2
  import type { IconType } from '../ds-icon';
3
+ import type { ResponsiveValue } from '../../utils/responsive';
3
4
 
4
5
  export const buttonV3Variants = ['primary', 'secondary', 'tertiary'] as const;
5
6
  export type ButtonV3Variant = (typeof buttonV3Variants)[number];
6
7
 
7
- export const buttonV3Colors = ['default', 'negative', 'light'] as const;
8
+ export const buttonV3Colors = ['default', 'error', 'light'] as const;
8
9
  export type ButtonV3Color = (typeof buttonV3Colors)[number];
9
10
 
10
11
  export const buttonV3Sizes = ['large', 'medium', 'small', 'tiny'] as const;
11
12
  export type ButtonV3Size = (typeof buttonV3Sizes)[number];
12
13
 
13
- export interface DsButtonV3Props extends ButtonHTMLAttributes<HTMLButtonElement> {
14
+ export interface DsButtonV3BaseProps extends ButtonHTMLAttributes<HTMLButtonElement> {
14
15
  ref?: Ref<HTMLButtonElement>;
15
16
 
16
17
  /**
17
18
  * - `default` — standard light-UI palette
18
- * - `negative` — destructive / danger palette (red tones)
19
+ * - `error` — destructive / danger palette (red tones)
19
20
  * - `light` — palette for dark-background surfaces (Figma **Type** onDark)
20
21
  * @default 'default'
21
22
  */
@@ -47,3 +48,11 @@ export interface DsButtonV3Props extends ButtonHTMLAttributes<HTMLButtonElement>
47
48
  */
48
49
  loading?: boolean;
49
50
  }
51
+
52
+ export interface DsButtonV3Props extends Omit<DsButtonV3BaseProps, 'size'> {
53
+ /**
54
+ * Size of the button. Accepts a static value or a responsive object.
55
+ * @default 'medium'
56
+ */
57
+ size?: ResponsiveValue<ButtonV3Size>;
58
+ }
@@ -1,2 +1,6 @@
1
- export { default as DsButtonV3 } from './ds-button-v3';
1
+ import { withResponsiveProps } from '../../utils/responsive';
2
+ import DsButtonV3Base from './ds-button-v3';
3
+
4
+ export const DsButtonV3 = withResponsiveProps(DsButtonV3Base, ['size']);
5
+
2
6
  export * from './ds-button-v3.types';
@@ -1,4 +1,4 @@
1
- @import '../../styles/mixin';
1
+ @use '../../styles/mixin' as mixins;
2
2
 
3
3
  $side-color-width: 4px;
4
4
  $border-width: 1px;
@@ -30,7 +30,7 @@ $transition-duration: 0.2s;
30
30
  }
31
31
  }
32
32
 
33
- @include disabled-overlay;
33
+ @include mixins.disabled-overlay;
34
34
  }
35
35
 
36
36
  .sideColor {
@@ -19,13 +19,16 @@ export const DsTableCell = <TData, TValue>({
19
19
  primaryRowActions = [],
20
20
  secondaryRowActions = [],
21
21
  }: DsTableCellProps<TData, TValue>) => {
22
- if (primaryRowActions.length || secondaryRowActions.length) {
23
- const hasSecondaryRowActions = secondaryRowActions.some((action) => !action.disabled?.(row.original));
22
+ const visiblePrimary = primaryRowActions.filter((action) => !action.hidden?.(row.original));
23
+ const visibleSecondary = secondaryRowActions.filter((action) => !action.hidden?.(row.original));
24
+
25
+ if (visiblePrimary.length || visibleSecondary.length) {
26
+ const hasSecondaryRowActions = visibleSecondary.length > 0;
24
27
  return (
25
28
  <div className={styles.lastCell}>
26
29
  <DsDefaultTableCell cell={cell} />
27
30
  <div className={styles.cellActions}>
28
- {primaryRowActions.map((action, i) => {
31
+ {visiblePrimary.map((action, i) => {
29
32
  const isDisabled = action.disabled?.(row.original);
30
33
  const label = typeof action.label === 'function' ? action.label(row.original) : action.label;
31
34
  return (
@@ -67,7 +70,7 @@ export const DsTableCell = <TData, TValue>({
67
70
  </button>
68
71
  </DsDropdownMenu.Trigger>
69
72
  <DsDropdownMenu.Content>
70
- {secondaryRowActions.map((action, i) => {
73
+ {visibleSecondary.map((action, i) => {
71
74
  const label =
72
75
  typeof action.label === 'function' ? action.label(row.original) : action.label;
73
76
  const isDisabled = action.disabled?.(row.original);
@@ -20,6 +20,12 @@ export interface RowAction<TData> {
20
20
  */
21
21
  tooltip?: string;
22
22
 
23
+ /**
24
+ * Optional function to determine if the action should be hidden for a specific row.
25
+ * When it returns `true`, the action is omitted from that row's menu. Takes precedence over `disabled`.
26
+ */
27
+ hidden?: (row: TData) => boolean;
28
+
23
29
  /**
24
30
  * Optional function to determine if the action should be disabled for a specific row
25
31
  */
@@ -15,12 +15,12 @@ export interface DsTreeNode {
15
15
  export const dsTreeSizes = ['medium', 'small'] as const;
16
16
  export type DsTreeSize = (typeof dsTreeSizes)[number];
17
17
 
18
- interface DsTreeBaseProps {
18
+ export interface DsTreeBaseProps {
19
19
  className?: string;
20
20
  style?: CSSProperties;
21
21
  }
22
22
 
23
- interface DsTreeBasePropsWithChildren extends DsTreeBaseProps {
23
+ export interface DsTreeBasePropsWithChildren extends DsTreeBaseProps {
24
24
  children?: ReactNode;
25
25
  }
26
26
 
@@ -19,7 +19,11 @@
19
19
  @for $i from 1 through grid-vars.$columns {
20
20
  // Margins are added to all column spans to ensure proper alignment
21
21
  // The last column span (full width) receives 2 margins (left + right), others receive 1 margin (typically left)
22
- $margins: if($i == grid-vars.$columns, 2, 1);
22
+ $margins: 1;
23
+
24
+ @if $i == grid-vars.$columns {
25
+ $margins: 2;
26
+ }
23
27
 
24
28
  // Calculate total width for spanning i columns:
25
29
  // - i columns × column width
@@ -1,2 +1,2 @@
1
- @import './mixins/disabled';
2
- @import './mixins/list';
1
+ @forward './mixins/disabled';
2
+ @forward './mixins/list';
@@ -181,15 +181,15 @@
181
181
  --positive-050: var(--color-dap-green-050); // was --color-positive-050
182
182
  --positive-700-default: var(--color-dap-green-700); // was --color-positive-700-default
183
183
 
184
- /* Alias - negative */
185
- --negative-100: var(--color-dap-red-100); // ⚠ NEW VALUE (was #f5c2bf in --color-negative-100)
186
- --negative-200: var(--color-dap-red-200); // was --color-negative-200
187
- --negative-300: var(--color-dap-red-300); // was --color-negative-300
188
- --negative-500: var(--color-dap-red-500); // was --color-negative-500
189
- --negative-600: var(--color-dap-red-600); // was --color-negative-600
190
- --negative-700: var(--color-dap-red-700); // was --color-negative-700
191
- --negative-050: var(--color-dap-red-050); // was --color-negative-050
192
- --negative-400-default: var(--color-dap-red-400); // was --color-negative-400-default
184
+ /* Alias - error */
185
+ --error-100: var(--color-dap-red-100); // ⚠ NEW VALUE (was #f5c2bf in --color-negative-100)
186
+ --error-200: var(--color-dap-red-200); // was --color-negative-200
187
+ --error-300: var(--color-dap-red-300); // was --color-negative-300
188
+ --error-500: var(--color-dap-red-500); // was --color-negative-500
189
+ --error-600: var(--color-dap-red-600); // was --color-negative-600
190
+ --error-700: var(--color-dap-red-700); // was --color-negative-700
191
+ --error-050: var(--color-dap-red-050); // was --color-negative-050
192
+ --error-400-default: var(--color-dap-red-400); // was --color-negative-400-default
193
193
 
194
194
  /* Alias - warning */
195
195
  --warning-100: var(--color-dap-orange-100); // was --color-warning-100
@@ -268,11 +268,11 @@
268
268
  --background-background-info-strong: var(--primary-800); // was --color-background-info-strong
269
269
  --background-background-warning: var(--warning-100); // was --color-background-warning
270
270
  --background-background-warning-strong: var(--warning-600-default); // was --color-background-warning-strong
271
- --background-background-negative: var(--negative-400-default); // was --color-negative-400-default
272
- --background-background-negative-hover: var(--negative-500); // was --color-background-danger-strong-hover
273
- --background-background-negative-selected: var(--negative-600); // was --color-negative-600
274
- --background-background-negative-secondary-hover: var(--negative-050); // was --color-negative-050
275
- --background-background-negative-secondary-selected: var(--negative-100);
271
+ --background-background-error: var(--error-400-default); // was --color-negative-400-default
272
+ --background-background-error-hover: var(--error-500); // was --color-background-danger-strong-hover
273
+ --background-background-error-selected: var(--error-600); // was --color-negative-600
274
+ --background-background-error-secondary-hover: var(--error-050); // was --color-negative-050
275
+ --background-background-error-secondary-selected: var(--error-100);
276
276
  --background-background-active-moderate: var(--primary-400); // was --color-background-active-moderate
277
277
  --background-background-transparent-hover: rgba(255, 255, 255, 0.15);
278
278
  --background-background-transparent-active: rgba(255, 255, 255, 0.3);
@@ -298,9 +298,9 @@
298
298
  --border-border-action-secondary-hover: var(--brand-400); // was --color-border-action-secondary-hover
299
299
  --border-border-positive: var(--positive-600); // was --color-positive-600
300
300
  --border-border-warning-strong: var(--warning-600-default); // was --color-background-warning-strong
301
- --border-border-negative-weak: var(--negative-100);
302
- --border-border-negative: var(--negative-400-default); // was --color-negative-400-default
303
- --border-border-negative-hover: var(--negative-500); // was --color-negative-500
301
+ --border-border-error-weak: var(--error-100);
302
+ --border-border-error: var(--error-400-default); // was --color-negative-400-default
303
+ --border-border-error-hover: var(--error-500); // was --color-negative-500
304
304
  --border-border-inverse: var(--secondary-050); // was --color-border-inverse
305
305
  --border-border-field: var(--secondary-200); // was --color-border-disabled
306
306
  --border-border-field-hover: var(--brand-600); // was --color-background-action-hover
@@ -320,7 +320,7 @@
320
320
  --font-font-on-disabled: var(--secondary-800); // was --color-font-on-disabled
321
321
  --font-font-positive: var(--positive-700-default); // was --color-font-success
322
322
  --font-font-warning: var(--warning-700); // was --color-font-warning
323
- --font-font-negative: var(--negative-500); // was --color-font-danger
323
+ --font-font-error: var(--error-500); // was --color-font-danger
324
324
  --font-font-code: var(--primary-900); // was --color-font-code
325
325
  --font-font-highlight: var(--color-dap-data-deep-fuchsia); // was --color-font-highlight
326
326
  --font-font-placeholder: var(--secondary-500-net-4); // was --color-font-disabled
@@ -339,7 +339,7 @@
339
339
  --icon-icon-positive: var(--positive-700-default); // was --color-icon-success
340
340
  --icon-icon-warning-light: var(--warning-400); // was --color-warning-400
341
341
  --icon-icon-warning: var(--warning-600-default); // was --color-icon-warning
342
- --icon-icon-negative: var(--negative-500); // was --color-negative-500
342
+ --icon-icon-error: var(--error-500); // was --color-negative-500
343
343
  --icon-icon-pause: var(--paused-600); // was --color-data-blue
344
344
  --icon-icon-information-main: var(--secondary-500-net-4); // was --color-icon-information-main
345
345
  --icon-icon-information-secondary: var(--primary-600); // was --color-icon-information-secondary
@@ -397,7 +397,7 @@
397
397
  --status-bg-pending: var(--warning-100); // was --color-status-bg-pending
398
398
  --status-bg-warning: var(--warning-200); // was --color-status-bg-warning
399
399
  --status-bg-inactive: var(--background-background-tertiary-selected-weak);
400
- --status-bg-failed: var(--background-background-negative-secondary-hover);
400
+ --status-bg-failed: var(--background-background-error-secondary-hover);
401
401
 
402
402
  /* Semantic - Dark Buttons */
403
403
  --dark-buttons-primary: var(--darks-400); // was --color-dark-buttons-primary
@@ -25,7 +25,12 @@ $scrollbar-thin-size: 4px;
25
25
 
26
26
  @mixin firefox-scrollbar($size) {
27
27
  @-moz-document url-prefix() {
28
- scrollbar-width: if($size == $scrollbar-thin-size, thin, auto);
28
+ @if $size == $scrollbar-thin-size {
29
+ scrollbar-width: thin;
30
+ } @else {
31
+ scrollbar-width: auto;
32
+ }
33
+
29
34
  scrollbar-color: var(--color-background-deselected-hover) var(--color-background-secondary);
30
35
  }
31
36
  }