design-system-next 2.11.11 → 2.11.17

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 (98) hide show
  1. package/dist/design-system-next.es.js +9372 -8159
  2. package/dist/design-system-next.es.js.gz +0 -0
  3. package/dist/design-system-next.umd.js +12 -12
  4. package/dist/design-system-next.umd.js.gz +0 -0
  5. package/dist/main.css +1 -1
  6. package/dist/main.css.gz +0 -0
  7. package/dist/package.json.d.ts +1 -1
  8. package/package.json +1 -1
  9. package/src/assets/scripts/border-radius.ts +15 -15
  10. package/src/assets/scripts/colors.ts +134 -134
  11. package/src/assets/scripts/max-width.ts +11 -11
  12. package/src/assets/scripts/spacing.ts +23 -23
  13. package/src/assets/scripts/utilities.ts +15 -15
  14. package/src/assets/styles/tailwind.css +20 -0
  15. package/src/components/accordion/accordion.ts +43 -43
  16. package/src/components/accordion/use-accordion.ts +43 -43
  17. package/src/components/avatar/avatar.ts +64 -64
  18. package/src/components/badge/badge.ts +43 -43
  19. package/src/components/banner/banner.ts +20 -20
  20. package/src/components/button/button.ts +72 -72
  21. package/src/components/button/button.vue +15 -15
  22. package/src/components/calendar/calendar.ts +89 -89
  23. package/src/components/card/card.ts +52 -52
  24. package/src/components/checkbox/checkbox.ts +45 -45
  25. package/src/components/chips/chips.ts +95 -95
  26. package/src/components/collapsible/collapsible.ts +21 -21
  27. package/src/components/collapsible/collapsible.vue +27 -27
  28. package/src/components/date-picker/__tests__/date-picker.test.ts +112 -112
  29. package/src/components/date-picker/date-picker.ts +157 -157
  30. package/src/components/date-picker/date-range-picker/date-range-picker.ts +193 -0
  31. package/src/components/date-picker/date-range-picker/date-range-picker.vue +412 -0
  32. package/src/components/date-picker/date-range-picker/use-date-range-picker.ts +957 -0
  33. package/src/components/dropdown/__tests__/dropdown-fixes.spec.ts +106 -106
  34. package/src/components/dropdown/__tests__/dropdown-value-types.spec.ts +213 -213
  35. package/src/components/dropdown/fix-multi-number.ts +92 -92
  36. package/src/components/dropdown/use-dropdown.ts +488 -488
  37. package/src/components/empty-state/empty-state.ts +50 -50
  38. package/src/components/file-upload/file-upload.ts +87 -87
  39. package/src/components/floating-action/floating-action.ts +12 -12
  40. package/src/components/input/input-contact-number/input-contact-number.ts +83 -83
  41. package/src/components/input/input-email/input-email.vue +17 -17
  42. package/src/components/input/input-password/use-input-password.ts +19 -19
  43. package/src/components/input/input-search/input-search.vue +13 -13
  44. package/src/components/input/input-url/input-url.vue +20 -20
  45. package/src/components/input/input-username/input-username.vue +17 -17
  46. package/src/components/input/input.vue +72 -72
  47. package/src/components/list/ladderized-list/ladderized-list.ts +39 -39
  48. package/src/components/list/ladderized-list/use-ladderized-list.ts +92 -9
  49. package/src/components/list/list.ts +1 -1
  50. package/src/components/list/list.vue +95 -73
  51. package/src/components/list/use-list.ts +214 -77
  52. package/src/components/logo/logo.ts +43 -43
  53. package/src/components/logo/logo.vue +14 -14
  54. package/src/components/logo/use-logo.ts +41 -41
  55. package/src/components/lozenge/lozenge.ts +61 -61
  56. package/src/components/modal/modal.ts +45 -45
  57. package/src/components/progress-bar/progress-bar.ts +39 -39
  58. package/src/components/radio/radio.ts +42 -42
  59. package/src/components/select/select-ladderized/select-ladderized.ts +2 -0
  60. package/src/components/select/select-ladderized/select-ladderized.vue +2 -2
  61. package/src/components/select/select-ladderized/use-select-ladderized.ts +53 -3
  62. package/src/components/select/select-multiple/select-multiple.ts +1 -1
  63. package/src/components/select/select.ts +144 -144
  64. package/src/components/sidenav/sidenav.ts +173 -173
  65. package/src/components/sidepanel/sidepanel.ts +100 -100
  66. package/src/components/sidepanel/sidepanel.vue +55 -55
  67. package/src/components/sidepanel/stacking-sidepanel/stacking-sidepanel.ts +16 -16
  68. package/src/components/sidepanel/stacking-sidepanel/stacking-sidepanel.vue +39 -39
  69. package/src/components/slider/slider.ts +38 -38
  70. package/src/components/snackbar/snack/snack.ts +71 -71
  71. package/src/components/snackbar/use-snackbar.ts +34 -34
  72. package/src/components/status/status.ts +19 -19
  73. package/src/components/status/status.vue +13 -13
  74. package/src/components/stepper/step/step.ts +47 -47
  75. package/src/components/stepper/stepper.ts +47 -47
  76. package/src/components/stepper/stepper.vue +34 -34
  77. package/src/components/switch/switch.ts +42 -42
  78. package/src/components/table/table-actions/table-actions.ts +42 -42
  79. package/src/components/table/table-actions/table-actions.vue +40 -40
  80. package/src/components/table/table-chips-title/table-chips-title.ts +27 -27
  81. package/src/components/table/table-chips-title/table-chips-title.vue +32 -32
  82. package/src/components/table/table-chips-title/use-table-chips-title.ts +22 -22
  83. package/src/components/table/table-lozenge-title/table-lozenge-title.ts +23 -23
  84. package/src/components/table/table-lozenge-title/table-lozenge-title.vue +26 -26
  85. package/src/components/table/table-lozenge-title/use-table-lozenge-title.ts +21 -21
  86. package/src/components/table/table-pagination/table-pagination.ts +63 -63
  87. package/src/components/table/table-pagination/table-pagination.vue +72 -72
  88. package/src/components/table/table.ts +173 -173
  89. package/src/components/tabs/tabs.ts +43 -43
  90. package/src/components/tabs/use-tabs.ts +16 -2
  91. package/src/components/textarea/textarea.ts +72 -72
  92. package/src/components/textarea/textarea.vue +45 -45
  93. package/src/components/time-picker/time-picker.ts +69 -69
  94. package/src/components/tooltip/tooltip.ts +46 -46
  95. package/src/components/tooltip/use-tooltip.ts +13 -13
  96. package/src/examples/dropdown-number-multi-select.vue +76 -76
  97. package/src/stores/useSnackbarStore.ts +44 -44
  98. package/src/vite-env.d.ts +6 -0
@@ -1,61 +1,61 @@
1
- import type { PropType, ExtractPropTypes } from 'vue';
2
-
3
- export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
-
5
- export const LOZENGE_TONE = ['plain', 'pending', 'information', 'success', 'danger', 'neutral', 'caution'] as const;
6
-
7
- export const lozengePropTypes = {
8
- /**
9
- * @description Lozenge Label
10
- */
11
- label: {
12
- type: String,
13
- default: 'label',
14
- },
15
- /**
16
- * @description Lozenge tone
17
- */
18
- tone: {
19
- type: String as PropType<(typeof LOZENGE_TONE)[number]>,
20
- validator: (value: (typeof LOZENGE_TONE)[number]) => LOZENGE_TONE.includes(value),
21
- default: 'plain',
22
- },
23
- /**
24
- * @description Lozenge type (fill or outline)
25
- */
26
- fill: {
27
- type: Boolean,
28
- default: false,
29
- },
30
- /**
31
- * @description Lozenge removable
32
- */
33
- removable: {
34
- type: Boolean,
35
- default: false,
36
- },
37
- /**
38
- * @description avatar image url
39
- */
40
- url: {
41
- type: String,
42
- default: '',
43
- },
44
- /**
45
- * @description handler if the lozenge is visible
46
- */
47
- visible: {
48
- type: Boolean,
49
- default: true,
50
- },
51
- loading: {
52
- type: Boolean,
53
- default: false,
54
- },
55
- };
56
-
57
- export type LozengePropTypes = ExtractPropTypes<typeof lozengePropTypes>;
58
- export const removeEmitTypes = {
59
- onRemove: (evt: MouseEvent): evt is MouseEvent => evt instanceof MouseEvent,
60
- };
61
- export type RemoveEmitTypes = typeof removeEmitTypes;
1
+ import type { PropType, ExtractPropTypes } from 'vue';
2
+
3
+ export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
+
5
+ export const LOZENGE_TONE = ['plain', 'pending', 'information', 'success', 'danger', 'neutral', 'caution'] as const;
6
+
7
+ export const lozengePropTypes = {
8
+ /**
9
+ * @description Lozenge Label
10
+ */
11
+ label: {
12
+ type: String,
13
+ default: 'label',
14
+ },
15
+ /**
16
+ * @description Lozenge tone
17
+ */
18
+ tone: {
19
+ type: String as PropType<(typeof LOZENGE_TONE)[number]>,
20
+ validator: (value: (typeof LOZENGE_TONE)[number]) => LOZENGE_TONE.includes(value),
21
+ default: 'plain',
22
+ },
23
+ /**
24
+ * @description Lozenge type (fill or outline)
25
+ */
26
+ fill: {
27
+ type: Boolean,
28
+ default: false,
29
+ },
30
+ /**
31
+ * @description Lozenge removable
32
+ */
33
+ removable: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ /**
38
+ * @description avatar image url
39
+ */
40
+ url: {
41
+ type: String,
42
+ default: '',
43
+ },
44
+ /**
45
+ * @description handler if the lozenge is visible
46
+ */
47
+ visible: {
48
+ type: Boolean,
49
+ default: true,
50
+ },
51
+ loading: {
52
+ type: Boolean,
53
+ default: false,
54
+ },
55
+ };
56
+
57
+ export type LozengePropTypes = ExtractPropTypes<typeof lozengePropTypes>;
58
+ export const removeEmitTypes = {
59
+ onRemove: (evt: MouseEvent): evt is MouseEvent => evt instanceof MouseEvent,
60
+ };
61
+ export type RemoveEmitTypes = typeof removeEmitTypes;
@@ -1,45 +1,45 @@
1
- import type { PropType, ExtractPropTypes } from 'vue';
2
-
3
- export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
-
5
- const MODAL_SIZE = ['sm', 'md', 'lg', 'xl'] as const;
6
-
7
- export const modalPropTypes = {
8
- modelValue: {
9
- type: Boolean,
10
- default: false,
11
- },
12
- title: {
13
- type: String,
14
- default: '',
15
- },
16
- closeButtonX: {
17
- type: Boolean,
18
- default: true,
19
- },
20
- contentPadding: {
21
- type: Boolean,
22
- default: true,
23
- },
24
- hasFooter: {
25
- type: Boolean,
26
- default: true,
27
- },
28
- size: {
29
- type: String as PropType<(typeof MODAL_SIZE)[number]>,
30
- validator: (value: (typeof MODAL_SIZE)[number]) => MODAL_SIZE.includes(value),
31
- default: 'md',
32
- },
33
- staticBackdrop: {
34
- type: Boolean,
35
- default: false,
36
- },
37
- };
38
-
39
- export type ModalPropTypes = ExtractPropTypes<typeof modalPropTypes>;
40
-
41
- export const modalEmitTypes = {
42
- 'update:modelValue': (value: boolean) => value,
43
- };
44
-
45
- export type ModalEmitTypes = typeof modalEmitTypes;
1
+ import type { PropType, ExtractPropTypes } from 'vue';
2
+
3
+ export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
+
5
+ const MODAL_SIZE = ['sm', 'md', 'lg', 'xl'] as const;
6
+
7
+ export const modalPropTypes = {
8
+ modelValue: {
9
+ type: Boolean,
10
+ default: false,
11
+ },
12
+ title: {
13
+ type: String,
14
+ default: '',
15
+ },
16
+ closeButtonX: {
17
+ type: Boolean,
18
+ default: true,
19
+ },
20
+ contentPadding: {
21
+ type: Boolean,
22
+ default: true,
23
+ },
24
+ hasFooter: {
25
+ type: Boolean,
26
+ default: true,
27
+ },
28
+ size: {
29
+ type: String as PropType<(typeof MODAL_SIZE)[number]>,
30
+ validator: (value: (typeof MODAL_SIZE)[number]) => MODAL_SIZE.includes(value),
31
+ default: 'md',
32
+ },
33
+ staticBackdrop: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ };
38
+
39
+ export type ModalPropTypes = ExtractPropTypes<typeof modalPropTypes>;
40
+
41
+ export const modalEmitTypes = {
42
+ 'update:modelValue': (value: boolean) => value,
43
+ };
44
+
45
+ export type ModalEmitTypes = typeof modalEmitTypes;
@@ -1,39 +1,39 @@
1
- import { PropType, ExtractPropTypes } from 'vue';
2
-
3
- const PROGRESS_BAR_SIZES = ['xs', 'sm', 'lg'] as const;
4
-
5
- export const progressBarPropTypes = {
6
- size: {
7
- type: String as PropType<(typeof PROGRESS_BAR_SIZES)[number]>,
8
- validator: (value: (typeof PROGRESS_BAR_SIZES)[number]) => PROGRESS_BAR_SIZES.includes(value),
9
- default: 'lg',
10
- },
11
- label: {
12
- type: Boolean,
13
- default: true,
14
- },
15
- value: {
16
- type: Number,
17
- default: 0,
18
- validator(value: number, props: { max: number }) {
19
- if (value < 0 || value > props.max) {
20
- console.error(`Invalid prop: "value" (${value}) must be between 0 and ${props.max}.`);
21
- return false;
22
- }
23
- return true;
24
- },
25
- },
26
- max: {
27
- type: Number,
28
- default: 100,
29
- validator(value: number) {
30
- if (value <= 0 || value > 100) {
31
- console.error('Invalid prop: "max" must be between 1 and 100.');
32
- return false;
33
- }
34
- return true;
35
- },
36
- },
37
- };
38
-
39
- export type ProgressBarPropTypes = ExtractPropTypes<typeof progressBarPropTypes>;
1
+ import { PropType, ExtractPropTypes } from 'vue';
2
+
3
+ const PROGRESS_BAR_SIZES = ['xs', 'sm', 'lg'] as const;
4
+
5
+ export const progressBarPropTypes = {
6
+ size: {
7
+ type: String as PropType<(typeof PROGRESS_BAR_SIZES)[number]>,
8
+ validator: (value: (typeof PROGRESS_BAR_SIZES)[number]) => PROGRESS_BAR_SIZES.includes(value),
9
+ default: 'lg',
10
+ },
11
+ label: {
12
+ type: Boolean,
13
+ default: true,
14
+ },
15
+ value: {
16
+ type: Number,
17
+ default: 0,
18
+ validator(value: number, props: { max: number }) {
19
+ if (value < 0 || value > props.max) {
20
+ console.error(`Invalid prop: "value" (${value}) must be between 0 and ${props.max}.`);
21
+ return false;
22
+ }
23
+ return true;
24
+ },
25
+ },
26
+ max: {
27
+ type: Number,
28
+ default: 100,
29
+ validator(value: number) {
30
+ if (value <= 0 || value > 100) {
31
+ console.error('Invalid prop: "max" must be between 1 and 100.');
32
+ return false;
33
+ }
34
+ return true;
35
+ },
36
+ },
37
+ };
38
+
39
+ export type ProgressBarPropTypes = ExtractPropTypes<typeof progressBarPropTypes>;
@@ -1,42 +1,42 @@
1
- import type { PropType, ExtractPropTypes } from 'vue';
2
-
3
- export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
-
5
- export const radioPropTypes = {
6
- id: {
7
- type: String,
8
- required: true,
9
- },
10
- modelValue: {
11
- type: [String, Number, Boolean],
12
- },
13
- disabled: {
14
- type: Boolean,
15
- default: false,
16
- },
17
- name: {
18
- type: String,
19
- required: true,
20
- },
21
- value: {
22
- type: [String, Number, Boolean],
23
- required: true,
24
- },
25
- description: {
26
- type: String,
27
- },
28
- bordered: {
29
- type: Boolean,
30
- default: false,
31
- },
32
- fullWidth: {
33
- type: Boolean,
34
- default: false,
35
- }
36
- };
37
-
38
- export const radioEmitTypes = ['update:modelValue'];
39
-
40
- export type RadioPropTypes = ExtractPropTypes<typeof radioPropTypes>;
41
-
42
- export type RadioEmitTypes = typeof radioEmitTypes;
1
+ import type { PropType, ExtractPropTypes } from 'vue';
2
+
3
+ export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
+
5
+ export const radioPropTypes = {
6
+ id: {
7
+ type: String,
8
+ required: true,
9
+ },
10
+ modelValue: {
11
+ type: [String, Number, Boolean],
12
+ },
13
+ disabled: {
14
+ type: Boolean,
15
+ default: false,
16
+ },
17
+ name: {
18
+ type: String,
19
+ required: true,
20
+ },
21
+ value: {
22
+ type: [String, Number, Boolean],
23
+ required: true,
24
+ },
25
+ description: {
26
+ type: String,
27
+ },
28
+ bordered: {
29
+ type: Boolean,
30
+ default: false,
31
+ },
32
+ fullWidth: {
33
+ type: Boolean,
34
+ default: false,
35
+ }
36
+ };
37
+
38
+ export const radioEmitTypes = ['update:modelValue'];
39
+
40
+ export type RadioPropTypes = ExtractPropTypes<typeof radioPropTypes>;
41
+
42
+ export type RadioEmitTypes = typeof radioEmitTypes;
@@ -105,5 +105,7 @@ export const selectLadderizedEmitTypes = {
105
105
  'update:modelValue': (_value: unknown) => true,
106
106
  };
107
107
 
108
+ export type SelectLadderizedEmitFn = (event: string, ...args: unknown[]) => void;
109
+
108
110
  export type SelectLadderizedPropTypes = ExtractPropTypes<typeof selectLadderizedPropTypes>;
109
111
  export type SelectLadderizedEmitTypes = typeof selectLadderizedEmitTypes;
@@ -90,7 +90,7 @@ import 'floating-vue/dist/style.css';
90
90
  import SprInput from '@/components/input/input.vue';
91
91
  import SprLadderizedList from '@/components/list/ladderized-list/ladderized-list.vue';
92
92
 
93
- import { selectLadderizedPropTypes, selectLadderizedEmitTypes } from './select-ladderized';
93
+ import { selectLadderizedPropTypes, selectLadderizedEmitTypes, SelectLadderizedEmitFn } from './select-ladderized';
94
94
  import { useSelectLadderized } from './use-select-ladderized';
95
95
 
96
96
  const props = defineProps(selectLadderizedPropTypes);
@@ -108,5 +108,5 @@ const {
108
108
  handleSearch,
109
109
  handleClear,
110
110
  handleOptionsToggle,
111
- } = useSelectLadderized(props, emit);
111
+ } = useSelectLadderized(props, emit as SelectLadderizedEmitFn);
112
112
  </script>
@@ -55,23 +55,70 @@ export const useSelectLadderized = (
55
55
 
56
56
  const handleSelectedLadderizedItem = (selectedItems: string[], selectedItem?: MenuListType) => {
57
57
  wasCleared.value = false;
58
+
59
+ // If the selectedItems is a single value (leaf from search), reconstruct the full path
60
+ let fullPath: string[] | null = null;
61
+
62
+ if (selectedItems.length === 1) {
63
+ // Find the full path from root to leaf
64
+ fullPath = findPathToValue(ladderizedSelectOptions.value, selectedItems[0]);
65
+
66
+ if (fullPath) {
67
+ // Traverse the tree by path, always matching the next text in the sublevel
68
+ let currentLevel = ladderizedSelectOptions.value;
69
+ const valuePath: (string | number)[] = [];
70
+
71
+ for (const text of fullPath) {
72
+ const found = currentLevel.find((item) => item.text === text);
73
+
74
+ if (found) {
75
+ valuePath.push(found.value);
76
+ currentLevel = found.sublevel || [];
77
+ } else {
78
+ break;
79
+ }
80
+ }
81
+
82
+ ladderizedSelectModel.value = valuePath.map(String);
83
+ inputText.value = fullPath.join(' > ');
84
+
85
+ // Find the actual item object for the last value in the path
86
+ let leafItem: MenuListType | undefined = undefined;
87
+ let leafLevel = ladderizedSelectOptions.value;
88
+
89
+ for (const text of fullPath) {
90
+ const found = leafLevel.find((item) => item.text === text);
91
+
92
+ if (found) {
93
+ leafItem = found;
94
+ leafLevel = found.sublevel || [];
95
+ } else {
96
+ break;
97
+ }
98
+ }
99
+
100
+ if (leafItem && isLeafNode(leafItem)) {
101
+ ladderizedSelectPopperState.value = false;
102
+ }
103
+
104
+ return;
105
+ }
106
+ }
107
+
58
108
  ladderizedSelectModel.value = selectedItems;
59
109
 
60
110
  let itemToCheck = selectedItem;
61
111
 
62
- // Fallback: if selectedItem is not provided, try to find it from the value
63
112
  if (!itemToCheck && selectedItems.length > 0) {
64
113
  const findItemByValue = (items: MenuListType[], value: string | number): MenuListType | undefined => {
65
114
  for (const item of items) {
66
115
  if (item.value === value) return item;
67
-
68
116
  if (item.sublevel) {
69
117
  const found = findItemByValue(item.sublevel, value);
70
118
 
71
119
  if (found) return found;
72
120
  }
73
121
  }
74
-
75
122
  return undefined;
76
123
  };
77
124
 
@@ -122,6 +169,7 @@ export const useSelectLadderized = (
122
169
  if (wasCleared.value) {
123
170
  inputText.value = '';
124
171
  wasCleared.value = false;
172
+
125
173
  return;
126
174
  }
127
175
 
@@ -133,7 +181,9 @@ export const useSelectLadderized = (
133
181
 
134
182
  for (const value of newVal) {
135
183
  const found = currentLevel.find((item) => item.value === value);
184
+
136
185
  if (!found) break;
186
+
137
187
  pathTexts.push(found.text);
138
188
  currentLevel = found.sublevel || [];
139
189
  }
@@ -142,7 +142,7 @@ export const multiSelectPropTypes = {
142
142
  export const multiSelectEmitTypes = {
143
143
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
144
144
  'update:modelValue': (_value: unknown) => true,
145
- 'update:search': (value: string) => typeof value === 'string',
145
+ 'update:searchValue': (value: string) => typeof value === 'string',
146
146
  'infinite-scroll-trigger': Boolean,
147
147
  };
148
148