design-system-next 2.13.6 → 2.14.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.
Files changed (31) hide show
  1. package/dist/design-system-next.es.js +15070 -10299
  2. package/dist/design-system-next.es.js.gz +0 -0
  3. package/dist/design-system-next.umd.js +22 -13
  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 +3 -2
  8. package/package.json +3 -2
  9. package/src/App.vue +1671 -71
  10. package/src/assets/styles/tailwind.css +4 -0
  11. package/src/components/dropdown/dropdown.ts +3 -2
  12. package/src/components/dropdown/dropdown.vue +2 -2
  13. package/src/components/dropdown/use-dropdown.ts +89 -70
  14. package/src/components/list/ladderized-list/ladderized-list-back.vue +2 -1
  15. package/src/components/list/ladderized-list/ladderized-list.vue +3 -18
  16. package/src/components/list/ladderized-list/use-ladderized-list.ts +33 -21
  17. package/src/components/list/list.ts +4 -1
  18. package/src/components/list/list.vue +155 -136
  19. package/src/components/select/select-ladderized/select-ladderized.ts +19 -0
  20. package/src/components/select/select-ladderized/select-ladderized.vue +12 -11
  21. package/src/components/select/select-ladderized/use-select-ladderized.ts +20 -21
  22. package/src/components/select/select-multiple/select-multiple.ts +19 -0
  23. package/src/components/select/select-multiple/select-multiple.vue +74 -77
  24. package/src/components/select/select-multiple/use-select-multiple.ts +5 -15
  25. package/src/components/select/select.ts +19 -0
  26. package/src/components/select/select.vue +50 -53
  27. package/src/components/select/use-select.ts +4 -13
  28. package/src/components/sidenav/use-sidenav.ts +10 -3
  29. package/src/components/table/table.ts +33 -3
  30. package/src/components/table/table.vue +150 -98
  31. package/src/components/table/use-table.ts +63 -7
@@ -8,13 +8,13 @@
8
8
  </label>
9
9
 
10
10
  <Menu
11
- :shown="multiSelectPopperState"
11
+ v-model:shown="multiSelectPopperState"
12
12
  aria-id="multi-select-wrapper"
13
13
  distance="4"
14
14
  :placement="props.placement"
15
- :triggers="[]"
16
- :popper-hide-triggers="[]"
17
- :auto-hide="false"
15
+ :triggers="props.triggers"
16
+ :popper-triggers="props.popperTriggers"
17
+ :auto-hide="props.autoHide"
18
18
  :disabled="isMultiSelectPopperDisabled"
19
19
  :container="`#${props.id}`"
20
20
  :strategy="
@@ -27,66 +27,26 @@
27
27
  }"
28
28
  >
29
29
  <div ref="multiSelectRef">
30
- <div @click="handleOptionsToggle">
31
- <template v-if="props.chipped">
32
- <div :class="multiSelectClasses.chippedInputTextBaseClasses">
33
- <div ref="chippedInputTextRef" :class="multiSelectClasses.chippedInputTextClasses">
34
- <div class="spr-h-auto spr-w-full">
35
- <template v-if="multiSelectedListItems.length > 0">
36
- <template v-for="item in multiSelectedListItems" :key="item.value">
37
- <spr-chips
38
- class="spr-m-1 spr-inline-block"
39
- :label="String(item.text)"
40
- closable
41
- visible
42
- @close="handleChippedRemoveItem(String(item.value))"
43
- />
44
- </template>
45
- </template>
46
- <template v-else>
47
- <span class="spr-placeholder spr-px-3 spr-text-gray-400">{{ props.placeholder }}</span>
48
- </template>
49
- </div>
50
- <div :class="multiSelectClasses.chippedIconClasses">
51
- <div class="spr-flex spr-items-center spr-gap-1">
52
- <Icon
53
- v-if="props.clearable && inputText"
54
- class="spr-cursor-pointer"
55
- icon="ph:x"
56
- @click.stop="handleClear"
30
+ <template v-if="props.chipped">
31
+ <div :class="multiSelectClasses.chippedInputTextBaseClasses">
32
+ <div ref="chippedInputTextRef" :class="multiSelectClasses.chippedInputTextClasses">
33
+ <div class="spr-h-auto spr-w-full">
34
+ <template v-if="multiSelectedListItems.length > 0">
35
+ <template v-for="item in multiSelectedListItems" :key="item.value">
36
+ <spr-chips
37
+ class="spr-m-1 spr-inline-block"
38
+ :label="String(item.text)"
39
+ closable
40
+ visible
41
+ @close="handleChippedRemoveItem(String(item.value))"
57
42
  />
58
- <Icon icon="ph:caret-down" />
59
- </div>
60
- </div>
61
- </div>
62
- </div>
63
- <div v-if="props.displayHelper" :class="multiSelectClasses.chippedHelperContainerClasses">
64
- <div v-if="props.displayHelper" :class="multiSelectClasses.chippedHelperClasses">
65
- <slot name="helperMessage">
66
- <Icon v-if="props.helperIcon" :icon="props.helperIcon" width="20px" height="20px" />
67
- <span>{{ props.helperText }}</span>
68
- </slot>
43
+ </template>
44
+ </template>
45
+ <template v-else>
46
+ <span class="spr-placeholder spr-px-3 spr-text-gray-400">{{ props.placeholder }}</span>
47
+ </template>
69
48
  </div>
70
- </div>
71
- </template>
72
- <template v-else>
73
- <spr-input
74
- :id="`input-${props.id}`"
75
- v-model="inputText"
76
- :class="{
77
- 'spr-cursor-pointer': true,
78
- }"
79
- :placeholder="props.placeholder"
80
- autocomplete="off"
81
- :helper-text="props.helperText"
82
- :helper-icon="props.helperIcon"
83
- :display-helper="props.displayHelper"
84
- :active="props.active"
85
- :readonly="true"
86
- :disabled="props.disabled"
87
- :error="props.error"
88
- >
89
- <template #icon>
49
+ <div :class="multiSelectClasses.chippedIconClasses">
90
50
  <div class="spr-flex spr-items-center spr-gap-1">
91
51
  <Icon
92
52
  v-if="props.clearable && inputText"
@@ -96,21 +56,59 @@
96
56
  />
97
57
  <Icon icon="ph:caret-down" />
98
58
  </div>
99
- </template>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ <div v-if="props.displayHelper" :class="multiSelectClasses.chippedHelperContainerClasses">
63
+ <div v-if="props.displayHelper" :class="multiSelectClasses.chippedHelperClasses">
64
+ <slot name="helperMessage">
65
+ <Icon v-if="props.helperIcon" :icon="props.helperIcon" width="20px" height="20px" />
66
+ <span>{{ props.helperText }}</span>
67
+ </slot>
68
+ </div>
69
+ </div>
70
+ </template>
71
+ <template v-else>
72
+ <spr-input
73
+ :id="`input-${props.id}`"
74
+ v-model="inputText"
75
+ :class="{
76
+ 'spr-cursor-pointer': true,
77
+ }"
78
+ :placeholder="props.placeholder"
79
+ autocomplete="off"
80
+ :helper-text="props.helperText"
81
+ :helper-icon="props.helperIcon"
82
+ :display-helper="props.displayHelper"
83
+ :active="props.active"
84
+ :readonly="true"
85
+ :disabled="props.disabled"
86
+ :error="props.error"
87
+ >
88
+ <template #icon>
89
+ <div class="spr-flex spr-items-center spr-gap-1">
90
+ <Icon
91
+ v-if="props.clearable && inputText"
92
+ class="spr-cursor-pointer"
93
+ icon="ph:x"
94
+ @click.stop="handleClear"
95
+ />
96
+ <Icon icon="ph:caret-down" />
97
+ </div>
98
+ </template>
100
99
 
101
- <template #helperMessage>
102
- <slot name="helperMessage" />
103
- </template>
104
- </spr-input>
105
- </template>
100
+ <template #helperMessage>
101
+ <slot name="helperMessage" />
102
+ </template>
103
+ </spr-input>
104
+ </template>
106
105
 
107
- <!-- Hidden Select for QA automation -->
108
- <select v-if="multiSelectOptions && multiSelectOptions.length" v-model="multiSelectModel" multiple hidden>
109
- <option v-for="option in multiSelectOptions" :key="option.value" :value="option.value">
110
- {{ option.text }}
111
- </option>
112
- </select>
113
- </div>
106
+ <!-- Hidden Select for QA automation -->
107
+ <select v-if="multiSelectOptions && multiSelectOptions.length" v-model="multiSelectModel" multiple hidden>
108
+ <option v-for="option in multiSelectOptions" :key="option.value" :value="option.value">
109
+ {{ option.text }}
110
+ </option>
111
+ </select>
114
112
 
115
113
  <!-- This div used to poppulate popper menu -->
116
114
  <div
@@ -124,7 +122,7 @@
124
122
  <template #popper>
125
123
  <div
126
124
  ref="multipleSelectPopperRef"
127
- class="spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden spr-p-2"
125
+ class="spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden"
128
126
  >
129
127
  <spr-list
130
128
  v-model="multiSelectedListItems"
@@ -176,6 +174,5 @@ const {
176
174
  handleMultiSelectedItem,
177
175
  handleChippedRemoveItem,
178
176
  handleClear,
179
- handleOptionsToggle,
180
177
  } = useMultiSelect(props, emit);
181
178
  </script>
@@ -33,7 +33,7 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
33
33
  });
34
34
 
35
35
  const chippedInputTextBaseClasses = classNames(
36
- 'spr-relative spr-flex spr-items-center spr-min-h-9 spr-rounded-border-radius-md spr-border-[1.5px] spr-border-solid',
36
+ 'spr-relative spr-flex spr-items-center spr-min-h-10 spr-rounded-border-radius-md spr-border-[1.5px] spr-border-solid',
37
37
  {
38
38
  'spr-cursor-pointer': !disabled.value,
39
39
 
@@ -188,15 +188,6 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
188
188
  multiSelectOptions.value = options.value as MenuListType[];
189
189
  };
190
190
 
191
- /**
192
- * Opens the multi-select options.
193
- */
194
- const handleOptionsToggle = () => {
195
- multiSelectPopperState.value = !multiSelectPopperState.value;
196
-
197
- emit('popper-state', !multiSelectPopperState.value);
198
- };
199
-
200
191
  /**
201
192
  * Handles selection changes from the multi-select and updates the model value.
202
193
  * Converts stringified objects back to objects if needed.
@@ -330,8 +321,6 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
330
321
  multiSelectedListItems.value = [];
331
322
  inputText.value = '';
332
323
  multiSelectPopperState.value = false;
333
-
334
- emit('popper-state', false);
335
324
  };
336
325
 
337
326
  watch(multiSelectModel, () => {
@@ -360,6 +349,10 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
360
349
  search.value = searchInput.value;
361
350
  });
362
351
 
352
+ watch(multiSelectPopperState, (newState) => {
353
+ emit('popper-state', newState);
354
+ });
355
+
363
356
  /**
364
357
  * Handles closing the multi-select when clicking outside.
365
358
  */
@@ -367,8 +360,6 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
367
360
  multiSelectPopperState.value = false;
368
361
 
369
362
  updateMultiSelectedItemsFromValue();
370
-
371
- emit('popper-state', false);
372
363
  });
373
364
 
374
365
  useInfiniteScroll(
@@ -404,6 +395,5 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
404
395
  handleMultiSelectedItem,
405
396
  handleChippedRemoveItem,
406
397
  handleClear,
407
- handleOptionsToggle,
408
398
  };
409
399
  };
@@ -24,6 +24,7 @@ const PLACEMENTS_TYPES = [
24
24
  ] as const;
25
25
 
26
26
  const POPPER_STRATEGY_TYPES = ['fixed', 'absolute'] as const;
27
+ const TRIGGER_EVENTS = ['click', 'hover', 'focus', 'touch'] as const;
27
28
 
28
29
  export const selectPropTypes = {
29
30
  id: {
@@ -74,6 +75,24 @@ export const selectPropTypes = {
74
75
  validator: (value: (typeof PLACEMENTS_TYPES)[number]) => PLACEMENTS_TYPES.includes(value),
75
76
  default: 'bottom',
76
77
  },
78
+ triggers: {
79
+ type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
80
+ validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
81
+ return value.every((val) => TRIGGER_EVENTS.includes(val));
82
+ },
83
+ default: () => ['click'],
84
+ },
85
+ popperTriggers: {
86
+ type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
87
+ validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
88
+ return value.every((val) => TRIGGER_EVENTS.includes(val));
89
+ },
90
+ default: () => [],
91
+ },
92
+ autoHide: {
93
+ type: Boolean,
94
+ default: true,
95
+ },
77
96
  popperStrategy: {
78
97
  type: String,
79
98
  validator: (value: 'fixed' | 'absolute') => POPPER_STRATEGY_TYPES.includes(value),
@@ -8,13 +8,13 @@
8
8
  </label>
9
9
 
10
10
  <Menu
11
- :shown="selectPopperState"
11
+ v-model:shown="selectPopperState"
12
12
  aria-id="select-wrapper"
13
13
  distance="4"
14
14
  :placement="props.placement"
15
- :triggers="[]"
16
- :popper-hide-triggers="[]"
17
- :auto-hide="false"
15
+ :triggers="props.triggers"
16
+ :popper-triggers="props.popperTriggers"
17
+ :auto-hide="props.autoHide"
18
18
  :disabled="isSelectPopperDisabled"
19
19
  :container="`#${props.id}`"
20
20
  :strategy="
@@ -27,55 +27,53 @@
27
27
  }"
28
28
  >
29
29
  <div ref="selectRef">
30
- <div @click="handleOptionsToggle">
31
- <spr-input
32
- :id="`input-${props.id}`"
33
- v-model="inputText"
34
- :class="{
35
- 'spr-cursor-pointer': !props.searchable,
36
- }"
37
- :placeholder="props.placeholder"
38
- autocomplete="off"
39
- :helper-text="props.helperText"
40
- :helper-icon="props.helperIcon"
41
- :display-helper="props.displayHelper"
42
- :active="props.active"
43
- :readonly="!props.searchable"
44
- :disabled="props.disabled"
45
- :error="props.error"
46
- @keyup="handleSearch"
47
- >
48
- <template #icon>
49
- <div class="spr-flex spr-cursor-pointer spr-items-center">
50
- <Icon
51
- v-if="props.clearable && inputText"
52
- class="spr-cursor-pointer"
53
- icon="ph:x"
54
- @click.stop="handleClear"
55
- />
56
- <Icon icon="ph:caret-down" />
57
- </div>
58
- </template>
30
+ <spr-input
31
+ :id="`input-${props.id}`"
32
+ v-model="inputText"
33
+ :class="{
34
+ 'spr-cursor-pointer': !props.searchable,
35
+ }"
36
+ :placeholder="props.placeholder"
37
+ autocomplete="off"
38
+ :helper-text="props.helperText"
39
+ :helper-icon="props.helperIcon"
40
+ :display-helper="props.displayHelper"
41
+ :active="props.active"
42
+ :readonly="!props.searchable"
43
+ :disabled="props.disabled"
44
+ :error="props.error"
45
+ @keyup="handleSearch"
46
+ >
47
+ <template #icon>
48
+ <div class="spr-flex spr-cursor-pointer spr-items-center">
49
+ <Icon
50
+ v-if="props.clearable && inputText"
51
+ class="spr-cursor-pointer"
52
+ icon="ph:x"
53
+ @click.stop="handleClear"
54
+ />
55
+ <Icon icon="ph:caret-down" />
56
+ </div>
57
+ </template>
59
58
 
60
- <template #helperMessage>
61
- <slot name="helperMessage" />
62
- </template>
63
- </spr-input>
59
+ <template #helperMessage>
60
+ <slot name="helperMessage" />
61
+ </template>
62
+ </spr-input>
64
63
 
65
- <!-- Hidden Select for QA automation -->
66
- <select
67
- v-if="selectOptions && selectOptions.length"
68
- :value="Array.isArray(selectModel) ? selectModel[0] : selectModel"
69
- data-testid="qa-hidden-select"
70
- tabindex="-1"
71
- aria-hidden="true"
72
- hidden
73
- >
74
- <option v-for="item in selectOptions" :key="item.value" :value="item.value">
75
- {{ item.text }}
76
- </option>
77
- </select>
78
- </div>
64
+ <!-- Hidden Select for QA automation -->
65
+ <select
66
+ v-if="selectOptions && selectOptions.length"
67
+ :value="Array.isArray(selectModel) ? selectModel[0] : selectModel"
68
+ data-testid="qa-hidden-select"
69
+ tabindex="-1"
70
+ aria-hidden="true"
71
+ hidden
72
+ >
73
+ <option v-for="item in selectOptions" :key="item.value" :value="item.value">
74
+ {{ item.text }}
75
+ </option>
76
+ </select>
79
77
 
80
78
  <!-- This div used to poppulate popper menu -->
81
79
  <div
@@ -89,7 +87,7 @@
89
87
  <template #popper>
90
88
  <div
91
89
  ref="selectPopperRef"
92
- class="spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden spr-p-2"
90
+ class="spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden"
93
91
  >
94
92
  <template v-if="isSearching">
95
93
  <template v-if="!props.disabledLocalSearch">
@@ -178,6 +176,5 @@ const {
178
176
  handleSelectedItem,
179
177
  handleSearch,
180
178
  handleClear,
181
- handleOptionsToggle,
182
179
  } = useSelect(props, emit);
183
180
  </script>
@@ -159,15 +159,6 @@ export const useSelect = (props: SelectPropTypes, emit: SetupContext<SelectEmitT
159
159
  emit('search-string', inputText.value);
160
160
  }, 300);
161
161
 
162
- // Toggle options popper state
163
- const handleOptionsToggle = () => {
164
- selectPopperState.value = !selectPopperState.value;
165
-
166
- isSearching.value = false;
167
-
168
- emit('popper-state', !selectPopperState.value);
169
- };
170
-
171
162
  // Handle selected item for simple list component
172
163
  const handleSelectedItem = (selectedItems: MenuListType[]) => {
173
164
  if (selectedItems.length === 0) {
@@ -207,7 +198,6 @@ export const useSelect = (props: SelectPropTypes, emit: SetupContext<SelectEmitT
207
198
  // Always close select for single selection
208
199
  setTimeout(() => {
209
200
  selectPopperState.value = false;
210
- emit('popper-state', false);
211
201
  }, 10);
212
202
  };
213
203
 
@@ -332,6 +322,10 @@ export const useSelect = (props: SelectPropTypes, emit: SetupContext<SelectEmitT
332
322
  { deep: true },
333
323
  );
334
324
 
325
+ watch(selectPopperState, (newState) => {
326
+ emit('popper-state', newState);
327
+ });
328
+
335
329
  onClickOutside(selectRef, () => {
336
330
  selectPopperState.value = false;
337
331
 
@@ -341,8 +335,6 @@ export const useSelect = (props: SelectPropTypes, emit: SetupContext<SelectEmitT
341
335
  }
342
336
 
343
337
  isSearching.value = false;
344
-
345
- emit('popper-state', false);
346
338
  });
347
339
 
348
340
  useInfiniteScroll(
@@ -377,7 +369,6 @@ export const useSelect = (props: SelectPropTypes, emit: SetupContext<SelectEmitT
377
369
  inputText,
378
370
  isSelectPopperDisabled,
379
371
  isSearching,
380
- handleOptionsToggle,
381
372
  handleSelectedItem,
382
373
  handleSearch,
383
374
  handleClear,
@@ -37,9 +37,13 @@ export const useSidenav = (props: SidenavPropTypes, emit: SetupContext<SidenavEm
37
37
  const handleRedirect = (objectItem: ObjectItem, parentNav: string, menu: string, submenu: string) => {
38
38
  if (objectItem && objectItem.redirect) {
39
39
  if (objectItem.redirect.openInNewTab) {
40
- window.open(objectItem.redirect.link, '_blank');
40
+ if (typeof window !== 'undefined') {
41
+ window.open(objectItem.redirect.link, '_blank');
42
+ }
41
43
  } else if (objectItem.redirect.isAbsoluteURL) {
42
- location.href = objectItem.redirect.link;
44
+ if (typeof window !== 'undefined' && typeof location !== 'undefined') {
45
+ location.href = objectItem.redirect.link;
46
+ }
43
47
  } else {
44
48
  const modifiedObjectItem = { ...objectItem };
45
49
 
@@ -72,9 +76,12 @@ export const useSidenav = (props: SidenavPropTypes, emit: SetupContext<SidenavEm
72
76
  };
73
77
 
74
78
  const confirmIfOwnDomain = (url: string) => {
79
+ // Guard against SSR where location is undefined
80
+ if (typeof window === 'undefined') return false;
81
+
75
82
  const domain = window.location.hostname;
76
83
  const urlHostname = new URL(url).hostname;
77
- const isOwnDomain = domain === urlHostname || window.location.hostname === 'localhost';
84
+ const isOwnDomain = domain === urlHostname || domain === 'localhost';
78
85
 
79
86
  return isOwnDomain;
80
87
  };
@@ -48,6 +48,25 @@ interface SortEvent {
48
48
  sortOrder: TABLE_SORT;
49
49
  }
50
50
 
51
+ export interface DragOnChangeEvent {
52
+ added?: DragOnChangeAddedProperties;
53
+ removed?: DragOnChangeRemovedProperties;
54
+ }
55
+
56
+ interface DragOnChangeAddedProperties {
57
+ element: TableData;
58
+ newIndex: number;
59
+ }
60
+
61
+ interface DragOnChangeRemovedProperties {
62
+ element: TableData;
63
+ oldIndex: number;
64
+ }
65
+
66
+ interface DragOnChangeEmit extends DragOnChangeEvent {
67
+ updatedList: TableData[];
68
+ }
69
+
51
70
  const TABLE_SORT = ['asc', 'desc'] as const;
52
71
  const TABLE_VARIANT = ['surface', 'white'] as const;
53
72
  export type TABLE_SORT = (typeof TABLE_SORT)[number];
@@ -86,11 +105,11 @@ export const tablePropTypes = {
86
105
  },
87
106
  emptyStateCustomClasses: {
88
107
  type: String,
89
- default: ''
108
+ default: '',
90
109
  },
91
110
  tableActionSlotCustomClasses: {
92
111
  type: String,
93
- default: ''
112
+ default: '',
94
113
  },
95
114
  loading: {
96
115
  type: Boolean as PropType<boolean>,
@@ -121,7 +140,7 @@ export const tablePropTypes = {
121
140
  sortOrder: {
122
141
  type: String as PropType<(typeof TABLE_SORT)[number]>,
123
142
  validator: (value: (typeof TABLE_SORT)[number]) => TABLE_SORT.includes(value),
124
- default: 'asc'
143
+ default: 'asc',
125
144
  },
126
145
 
127
146
  variant: {
@@ -154,6 +173,14 @@ export const tablePropTypes = {
154
173
  type: Boolean,
155
174
  default: false,
156
175
  },
176
+ allowSelfDrag: {
177
+ type: Boolean,
178
+ default: false,
179
+ },
180
+ isDraggable: {
181
+ type: Boolean,
182
+ default: false,
183
+ }
157
184
  };
158
185
 
159
186
  export const tableEmitTypes = {
@@ -169,6 +196,9 @@ export const tableEmitTypes = {
169
196
  value.every(
170
197
  (item) => (typeof item === 'object' || typeof item === 'string' || typeof item === 'number') && item !== null,
171
198
  ),
199
+ onDropToEmptyZone: (event: DragOnChangeEvent['added']): event is DragOnChangeEvent['added'] => event !== undefined,
200
+ onDragChange: (event: DragOnChangeEmit): event is DragOnChangeEmit =>
201
+ event !== undefined && Array.isArray(event.updatedList),
172
202
  };
173
203
 
174
204
  export type TablePropTypes = ExtractPropTypes<typeof tablePropTypes>;