@drivenets/design-system 0.7.3 → 0.8.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 (79) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/index.cjs +4445 -3769
  3. package/dist/index.d.cts +1224 -945
  4. package/dist/index.d.cts.map +1 -1
  5. package/dist/index.d.ts +1224 -945
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4446 -3776
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.css +1 -1
  10. package/package.json +7 -8
  11. package/src/components/ds-autocomplete/ds-autocomplete.module.scss +1 -1
  12. package/src/components/ds-autocomplete/ds-autocomplete.tsx +13 -8
  13. package/src/components/ds-autocomplete/ds-autocomplete.types.ts +2 -1
  14. package/src/components/ds-comment-bubble/ds-comment-bubble.module.scss +6 -2
  15. package/src/components/ds-comment-bubble/ds-comment-bubble.tsx +22 -15
  16. package/src/components/ds-comment-bubble/ds-comment-bubble.types.ts +1 -0
  17. package/src/components/ds-date-input/ds-date-input.tsx +3 -4
  18. package/src/components/ds-date-input/ds-date-input.types.ts +3 -1
  19. package/src/components/ds-date-input/index.ts +10 -0
  20. package/src/components/ds-date-picker/components/calendar-table.module.scss +93 -0
  21. package/src/components/ds-date-picker/components/calendar-view-control/calendar-view-control.module.scss +48 -0
  22. package/src/components/ds-date-picker/components/calendar-view-control/calendar-view-control.tsx +20 -0
  23. package/src/components/ds-date-picker/components/calendar-view-control/index.ts +1 -0
  24. package/src/components/ds-date-picker/components/day-view/day-view.module.scss +12 -0
  25. package/src/components/ds-date-picker/components/day-view/day-view.tsx +45 -0
  26. package/src/components/ds-date-picker/components/day-view/index.ts +1 -0
  27. package/src/components/ds-date-picker/components/month-view/index.ts +1 -0
  28. package/src/components/ds-date-picker/components/month-view/month-view.module.scss +4 -0
  29. package/src/components/ds-date-picker/components/month-view/month-view.tsx +35 -0
  30. package/src/components/ds-date-picker/components/year-view/index.ts +1 -0
  31. package/src/components/ds-date-picker/components/year-view/year-view.module.scss +4 -0
  32. package/src/components/ds-date-picker/components/year-view/year-view.tsx +35 -0
  33. package/src/components/ds-date-picker/ds-date-picker.module.scss +19 -0
  34. package/src/components/ds-date-picker/ds-date-picker.tsx +209 -0
  35. package/src/components/ds-date-picker/ds-date-picker.types.ts +94 -0
  36. package/src/components/ds-date-picker/ds-date-picker.utils.ts +87 -0
  37. package/src/components/ds-date-picker/ds-date-picker.utils.unit.test.ts +226 -0
  38. package/src/components/ds-date-picker/index.ts +2 -0
  39. package/src/components/ds-date-range-picker/ds-date-range-picker.module.scss +20 -0
  40. package/src/components/ds-date-range-picker/ds-date-range-picker.tsx +101 -0
  41. package/src/components/ds-date-range-picker/ds-date-range-picker.types.ts +95 -0
  42. package/src/components/ds-date-range-picker/ds-date-range-picker.utils.ts +19 -0
  43. package/src/components/ds-date-range-picker/ds-date-range-picker.utils.unit.test.ts +48 -0
  44. package/src/components/ds-date-range-picker/index.ts +9 -0
  45. package/src/components/ds-file-upload/ds-file-upload-api.types.ts +1 -0
  46. package/src/components/ds-file-upload/hooks/use-file-upload.ts +1 -1
  47. package/src/components/ds-file-upload/index.ts +6 -1
  48. package/src/components/ds-file-upload/utils/file-factory.ts +1 -0
  49. package/src/components/ds-file-upload/utils/file-factory.unit.test.ts +37 -0
  50. package/src/components/ds-form-control/ds-form-control.tsx +5 -0
  51. package/src/components/ds-key-value-pair/ds-key-value-pair.module.scss +72 -0
  52. package/src/components/ds-key-value-pair/ds-key-value-pair.tsx +47 -0
  53. package/src/components/ds-key-value-pair/ds-key-value-pair.types.ts +24 -0
  54. package/src/components/ds-key-value-pair/index.ts +3 -0
  55. package/src/components/ds-loader/ds-loader.tsx +1 -1
  56. package/src/components/ds-status-badge/ds-status-badge.module.scss +1 -1
  57. package/src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.tsx +4 -2
  58. package/src/components/ds-time-picker/components/time-item/index.ts +1 -0
  59. package/src/components/ds-time-picker/components/time-item/time-item.module.scss +37 -0
  60. package/src/components/ds-time-picker/components/time-item/time-item.tsx +26 -0
  61. package/src/components/ds-time-picker/components/time-item/time-item.types.ts +10 -0
  62. package/src/components/ds-time-picker/components/time-scroller/index.ts +2 -0
  63. package/src/components/ds-time-picker/components/time-scroller/time-scroller.module.scss +25 -0
  64. package/src/components/ds-time-picker/components/time-scroller/time-scroller.tsx +61 -0
  65. package/src/components/ds-time-picker/components/time-scroller/time-scroller.types.ts +17 -0
  66. package/src/components/ds-time-picker/components/time-scroller/time-scroller.utils.ts +44 -0
  67. package/src/components/ds-time-picker/ds-time-picker.tsx +158 -0
  68. package/src/components/ds-time-picker/ds-time-picker.types.ts +48 -0
  69. package/src/components/ds-time-picker/ds-time-picker.utils.ts +176 -0
  70. package/src/components/ds-time-picker/ds-time-picker.utils.unit.test.ts +316 -0
  71. package/src/components/ds-time-picker/index.ts +3 -0
  72. package/src/components/ds-tooltip/ds-tooltip.module.scss +1 -7
  73. package/src/components/ds-tooltip/ds-tooltip.tsx +9 -9
  74. package/src/components/ds-tooltip/ds-tooltip.types.ts +7 -1
  75. package/src/index.ts +4 -0
  76. package/src/styles/_root_updated.scss +593 -0
  77. package/src/styles/shared/_dropdown.scss +4 -1
  78. package/src/utils/use-controlled.browser.test.ts +79 -0
  79. package/src/utils/use-controlled.ts +18 -0
@@ -0,0 +1,79 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { renderHook } from 'vitest-browser-react';
3
+
4
+ import { useControlled } from './use-controlled';
5
+
6
+ describe('useControlled', () => {
7
+ describe('controlled mode', () => {
8
+ it('should return the controlled value', async () => {
9
+ const setValue = vi.fn();
10
+ const { result } = await renderHook(() => useControlled('hello', setValue, undefined));
11
+
12
+ expect(result.current[0]).toBe('hello');
13
+ });
14
+
15
+ it('should call the provided setValue', async () => {
16
+ const setValue = vi.fn();
17
+ const { result, act } = await renderHook(() => useControlled<string>('hello', setValue, ''));
18
+
19
+ await act(() => {
20
+ result.current[1]('world');
21
+ });
22
+
23
+ expect(setValue).toHaveBeenCalledWith('world');
24
+ });
25
+
26
+ it('should ignore the defaultValue when controlled', async () => {
27
+ const setValue = vi.fn();
28
+ const { result } = await renderHook(() => useControlled('controlled', setValue, 'default'));
29
+
30
+ expect(result.current[0]).toBe('controlled');
31
+ });
32
+ });
33
+
34
+ describe('uncontrolled mode', () => {
35
+ it('should use defaultValue as the initial value', async () => {
36
+ const { result } = await renderHook(() => useControlled<string>(undefined, undefined, 'fallback'));
37
+
38
+ expect(result.current[0]).toBe('fallback');
39
+ });
40
+
41
+ it('should update internal state via the setter', async () => {
42
+ const { result, act } = await renderHook(() => useControlled<string>(undefined, undefined, 'fallback'));
43
+
44
+ expect(result.current[0]).toBe('fallback');
45
+
46
+ await act(() => {
47
+ result.current[1]('updated');
48
+ });
49
+
50
+ expect(result.current[0]).toBe('updated');
51
+ });
52
+ });
53
+
54
+ describe('edge cases', () => {
55
+ it('should treat value-only (no setValue) as uncontrolled', async () => {
56
+ const { result, act } = await renderHook(() => useControlled('initial', undefined, undefined));
57
+
58
+ await act(() => {
59
+ result.current[1]('updated');
60
+ });
61
+
62
+ expect(result.current[0]).toBe('updated');
63
+ });
64
+
65
+ it('should treat setValue-only (no value) as uncontrolled', async () => {
66
+ const setValue = vi.fn();
67
+ const { result, act } = await renderHook(() => useControlled<string>(undefined, setValue, 'default'));
68
+
69
+ expect(result.current[0]).toBe('default');
70
+
71
+ await act(() => {
72
+ result.current[1]('updated');
73
+ });
74
+
75
+ expect(result.current[0]).toBe('updated');
76
+ expect(setValue).not.toHaveBeenCalled();
77
+ });
78
+ });
79
+ });
@@ -0,0 +1,18 @@
1
+ import { useState } from 'react';
2
+
3
+ /**
4
+ * A hook that manages a controlled or uncontrolled value.
5
+ * It is considered controlled if both value and setValue are provided.
6
+ */
7
+ export const useControlled = <T>(
8
+ value: T | undefined,
9
+ setValue: ((value: T) => void) | undefined,
10
+ defaultValue: T,
11
+ ) => {
12
+ const isControlled = value !== undefined && setValue !== undefined;
13
+ const [internalValue, setInternalValue] = useState<T>(value ?? defaultValue);
14
+ const resolvedValue = isControlled ? value : internalValue;
15
+ const resolvedSetValue = isControlled ? setValue : setInternalValue;
16
+
17
+ return [resolvedValue, resolvedSetValue] as const;
18
+ };