@drivenets/design-system 0.7.2 → 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.
- package/CHANGELOG.md +31 -0
- package/dist/index.cjs +4489 -3807
- package/dist/index.d.cts +1269 -990
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +1269 -990
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4490 -3814
- package/dist/index.js.map +1 -1
- package/dist/index.min.css +1 -1
- package/package.json +19 -20
- package/src/components/ds-autocomplete/ds-autocomplete.module.scss +1 -1
- package/src/components/ds-autocomplete/ds-autocomplete.tsx +13 -8
- package/src/components/ds-autocomplete/ds-autocomplete.types.ts +2 -1
- package/src/components/ds-comment-bubble/ds-comment-bubble.module.scss +6 -2
- package/src/components/ds-comment-bubble/ds-comment-bubble.tsx +22 -15
- package/src/components/ds-comment-bubble/ds-comment-bubble.types.ts +1 -0
- package/src/components/ds-date-input/ds-date-input.tsx +3 -4
- package/src/components/ds-date-input/ds-date-input.types.ts +3 -1
- package/src/components/ds-date-input/index.ts +10 -0
- package/src/components/ds-date-picker/components/calendar-table.module.scss +93 -0
- package/src/components/ds-date-picker/components/calendar-view-control/calendar-view-control.module.scss +48 -0
- package/src/components/ds-date-picker/components/calendar-view-control/calendar-view-control.tsx +20 -0
- package/src/components/ds-date-picker/components/calendar-view-control/index.ts +1 -0
- package/src/components/ds-date-picker/components/day-view/day-view.module.scss +12 -0
- package/src/components/ds-date-picker/components/day-view/day-view.tsx +45 -0
- package/src/components/ds-date-picker/components/day-view/index.ts +1 -0
- package/src/components/ds-date-picker/components/month-view/index.ts +1 -0
- package/src/components/ds-date-picker/components/month-view/month-view.module.scss +4 -0
- package/src/components/ds-date-picker/components/month-view/month-view.tsx +35 -0
- package/src/components/ds-date-picker/components/year-view/index.ts +1 -0
- package/src/components/ds-date-picker/components/year-view/year-view.module.scss +4 -0
- package/src/components/ds-date-picker/components/year-view/year-view.tsx +35 -0
- package/src/components/ds-date-picker/ds-date-picker.module.scss +19 -0
- package/src/components/ds-date-picker/ds-date-picker.tsx +209 -0
- package/src/components/ds-date-picker/ds-date-picker.types.ts +94 -0
- package/src/components/ds-date-picker/ds-date-picker.utils.ts +87 -0
- package/src/components/ds-date-picker/ds-date-picker.utils.unit.test.ts +226 -0
- package/src/components/ds-date-picker/index.ts +2 -0
- package/src/components/ds-date-range-picker/ds-date-range-picker.module.scss +20 -0
- package/src/components/ds-date-range-picker/ds-date-range-picker.tsx +101 -0
- package/src/components/ds-date-range-picker/ds-date-range-picker.types.ts +95 -0
- package/src/components/ds-date-range-picker/ds-date-range-picker.utils.ts +19 -0
- package/src/components/ds-date-range-picker/ds-date-range-picker.utils.unit.test.ts +48 -0
- package/src/components/ds-date-range-picker/index.ts +9 -0
- package/src/components/ds-file-upload/ds-file-upload-api.types.ts +1 -0
- package/src/components/ds-file-upload/hooks/use-file-upload.ts +1 -1
- package/src/components/ds-file-upload/index.ts +6 -1
- package/src/components/ds-file-upload/utils/file-factory.ts +1 -0
- package/src/components/ds-file-upload/utils/file-factory.unit.test.ts +37 -0
- package/src/components/ds-form-control/ds-form-control.tsx +5 -0
- package/src/components/ds-key-value-pair/ds-key-value-pair.module.scss +72 -0
- package/src/components/ds-key-value-pair/ds-key-value-pair.tsx +47 -0
- package/src/components/ds-key-value-pair/ds-key-value-pair.types.ts +24 -0
- package/src/components/ds-key-value-pair/index.ts +3 -0
- package/src/components/ds-loader/ds-loader.tsx +1 -1
- package/src/components/ds-status-badge/ds-status-badge.module.scss +1 -1
- package/src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.tsx +14 -7
- package/src/components/ds-table/components/ds-table-body-virtualized/ds-table-body-virtualized.types.ts +5 -3
- package/src/components/ds-table/components/ds-table-row/ds-table-row.tsx +5 -3
- package/src/components/ds-table/components/ds-table-row/ds-table-row.types.ts +4 -0
- package/src/components/ds-table/components/ds-table-row-selectable-cell/ds-table-row-selectable-cell.tsx +2 -1
- package/src/components/ds-table/components/ds-table-row-selectable-cell/ds-table-row-selectable-cell.types.ts +1 -0
- package/src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.tsx +5 -2
- package/src/components/ds-table/components/ds-table-row-virtualized/ds-table-row-virtualized.types.ts +4 -2
- package/src/components/ds-table/ds-table.tsx +4 -1
- package/src/components/ds-time-picker/components/time-item/index.ts +1 -0
- package/src/components/ds-time-picker/components/time-item/time-item.module.scss +37 -0
- package/src/components/ds-time-picker/components/time-item/time-item.tsx +26 -0
- package/src/components/ds-time-picker/components/time-item/time-item.types.ts +10 -0
- package/src/components/ds-time-picker/components/time-scroller/index.ts +2 -0
- package/src/components/ds-time-picker/components/time-scroller/time-scroller.module.scss +25 -0
- package/src/components/ds-time-picker/components/time-scroller/time-scroller.tsx +61 -0
- package/src/components/ds-time-picker/components/time-scroller/time-scroller.types.ts +17 -0
- package/src/components/ds-time-picker/components/time-scroller/time-scroller.utils.ts +44 -0
- package/src/components/ds-time-picker/ds-time-picker.tsx +158 -0
- package/src/components/ds-time-picker/ds-time-picker.types.ts +48 -0
- package/src/components/ds-time-picker/ds-time-picker.utils.ts +176 -0
- package/src/components/ds-time-picker/ds-time-picker.utils.unit.test.ts +316 -0
- package/src/components/ds-time-picker/index.ts +3 -0
- package/src/components/ds-tooltip/ds-tooltip.module.scss +1 -7
- package/src/components/ds-tooltip/ds-tooltip.tsx +9 -9
- package/src/components/ds-tooltip/ds-tooltip.types.ts +7 -1
- package/src/index.ts +4 -0
- package/src/styles/_root_updated.scss +593 -0
- package/src/styles/shared/_dropdown.scss +4 -1
- package/src/utils/use-controlled.browser.test.ts +79 -0
- 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
|
+
};
|