@likable-hair/svelte 4.2.4 → 4.3.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 (120) hide show
  1. package/dist/components/composed/buttons/ActivableButton.svelte +25 -7
  2. package/dist/components/composed/common/HeadersDrawer.svelte +66 -28
  3. package/dist/components/composed/common/HeadersDrawer.svelte.d.ts +22 -12
  4. package/dist/components/composed/common/MenuOrDrawer.svelte +40 -12
  5. package/dist/components/composed/common/MenuOrDrawerOptions.svelte +51 -27
  6. package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +15 -10
  7. package/dist/components/composed/common/QuickActions.css +5 -5
  8. package/dist/components/composed/common/QuickActions.svelte +76 -33
  9. package/dist/components/composed/common/ToolTip.svelte +51 -32
  10. package/dist/components/composed/dashboard/DashboardShaper.svelte +280 -147
  11. package/dist/components/composed/dashboard/DashboardShaper.svelte.d.ts +54 -45
  12. package/dist/components/composed/forms/AsyncAutocomplete.svelte +81 -30
  13. package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +17 -5
  14. package/dist/components/composed/forms/AvatarDropdown.svelte +146 -70
  15. package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +27 -22
  16. package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +65 -19
  17. package/dist/components/composed/forms/CountriesAutocomplete.svelte +33 -4
  18. package/dist/components/composed/forms/DatePickerTextField.svelte +266 -161
  19. package/dist/components/composed/forms/Dropdown.svelte +89 -22
  20. package/dist/components/composed/forms/Dropdown.svelte.d.ts +18 -13
  21. package/dist/components/composed/forms/IconsDropdown.svelte +85 -40
  22. package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +15 -8
  23. package/dist/components/composed/forms/LabelAndSelect.svelte +46 -5
  24. package/dist/components/composed/forms/LabelAndTextField.svelte +56 -3
  25. package/dist/components/composed/forms/PeriodPicker.svelte +38 -18
  26. package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +32 -7
  27. package/dist/components/composed/forms/PeriodSelector.svelte +427 -312
  28. package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +20 -13
  29. package/dist/components/composed/forms/ToggleList.svelte +71 -37
  30. package/dist/components/composed/forms/ToggleList.svelte.d.ts +14 -7
  31. package/dist/components/composed/forms/YearPickerTextField.svelte +154 -82
  32. package/dist/components/composed/list/DynamicTable.svelte +1377 -808
  33. package/dist/components/composed/list/DynamicTable.svelte.d.ts +85 -70
  34. package/dist/components/composed/list/EnhancedPaginatedTable.svelte +75 -32
  35. package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +16 -6
  36. package/dist/components/composed/list/PaginatedTable.svelte +325 -120
  37. package/dist/components/composed/list/PaginatedTable.svelte.d.ts +26 -22
  38. package/dist/components/composed/progress/HorizontalStackedProgress.svelte +67 -29
  39. package/dist/components/composed/search/DynamicFilters.svelte +126 -91
  40. package/dist/components/composed/search/FilterEditor.svelte +178 -115
  41. package/dist/components/composed/search/Filters.svelte +441 -301
  42. package/dist/components/composed/search/GlobalSearchTextField.svelte +102 -42
  43. package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +23 -20
  44. package/dist/components/composed/search/MobileFilterEditor.svelte +174 -120
  45. package/dist/components/composed/search/QuickFilters.svelte +133 -23
  46. package/dist/components/composed/search/SearchBar.svelte +42 -3
  47. package/dist/components/composed/search/SearchResults.svelte +48 -5
  48. package/dist/components/composed/search/SearchResults.svelte.d.ts +17 -17
  49. package/dist/components/layouts/CollapsibleSideBarLayout.svelte +100 -24
  50. package/dist/components/layouts/StableDividedSideBarLayout.svelte +74 -24
  51. package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +140 -57
  52. package/dist/components/simple/buttons/Button.svelte +86 -36
  53. package/dist/components/simple/buttons/LinkButton.svelte +81 -25
  54. package/dist/components/simple/charts/BarChart.svelte +137 -105
  55. package/dist/components/simple/charts/LineChart.svelte +124 -92
  56. package/dist/components/simple/charts/PieChart.svelte +51 -23
  57. package/dist/components/simple/common/CollapsibleDivider.svelte +58 -26
  58. package/dist/components/simple/common/Divider.svelte +2 -1
  59. package/dist/components/simple/common/InfiniteScroll.svelte +60 -34
  60. package/dist/components/simple/common/MediaQuery.svelte +28 -3
  61. package/dist/components/simple/common/Menu.svelte +516 -390
  62. package/dist/components/simple/common/NoData.svelte +18 -4
  63. package/dist/components/simple/common/VerticalDraggableList.svelte +52 -26
  64. package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +20 -9
  65. package/dist/components/simple/dashboards/DashboardGridShaper.svelte +28 -22
  66. package/dist/components/simple/dates/Calendar.svelte +142 -72
  67. package/dist/components/simple/dates/DatePicker.svelte +138 -71
  68. package/dist/components/simple/dates/MonthSelector.svelte +49 -13
  69. package/dist/components/simple/dates/YearSelector.svelte +73 -30
  70. package/dist/components/simple/dialogs/Dialog.svelte +109 -59
  71. package/dist/components/simple/forms/Autocomplete.css +3 -0
  72. package/dist/components/simple/forms/Autocomplete.svelte +366 -164
  73. package/dist/components/simple/forms/Autocomplete.svelte.d.ts +31 -19
  74. package/dist/components/simple/forms/Checkbox.svelte +57 -29
  75. package/dist/components/simple/forms/FileInput.svelte +103 -58
  76. package/dist/components/simple/forms/FileInputList.svelte +115 -51
  77. package/dist/components/simple/forms/RadioButton.svelte +36 -3
  78. package/dist/components/simple/forms/Select.svelte +30 -3
  79. package/dist/components/simple/forms/SimpleTextField.svelte +94 -4
  80. package/dist/components/simple/forms/Switch.svelte +33 -11
  81. package/dist/components/simple/forms/Textarea.svelte +22 -5
  82. package/dist/components/simple/forms/VerticalSwitch.svelte +19 -2
  83. package/dist/components/simple/forms/VerticalTextSwitch.svelte +35 -3
  84. package/dist/components/simple/lists/BoxList.svelte +42 -11
  85. package/dist/components/simple/lists/ColorInvertedSelector.svelte +83 -25
  86. package/dist/components/simple/lists/HierarchyMenu.svelte +55 -20
  87. package/dist/components/simple/lists/Paginator.svelte +53 -34
  88. package/dist/components/simple/lists/SelectableMenuList.svelte +52 -16
  89. package/dist/components/simple/lists/SelectableVerticalList.svelte +169 -85
  90. package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +21 -14
  91. package/dist/components/simple/lists/SidebarMenuList.svelte +127 -79
  92. package/dist/components/simple/lists/SimpleTable.svelte +449 -239
  93. package/dist/components/simple/lists/SimpleTable.svelte.d.ts +31 -22
  94. package/dist/components/simple/loaders/CircularLoader.css +1 -1
  95. package/dist/components/simple/loaders/CircularLoader.svelte +11 -3
  96. package/dist/components/simple/loaders/Skeleton.svelte +3 -2
  97. package/dist/components/simple/media/Avatar.svelte +35 -15
  98. package/dist/components/simple/media/DescriptiveAvatar.svelte +30 -4
  99. package/dist/components/simple/media/FlagIcon.svelte +13 -3
  100. package/dist/components/simple/media/Icon.svelte +21 -6
  101. package/dist/components/simple/navigation/Breadcrumb.svelte +41 -9
  102. package/dist/components/simple/navigation/Chip.css +1 -1
  103. package/dist/components/simple/navigation/Chip.svelte +65 -36
  104. package/dist/components/simple/navigation/Drawer.svelte +132 -71
  105. package/dist/components/simple/navigation/HeaderMenu.svelte +69 -25
  106. package/dist/components/simple/navigation/Navigator.svelte +45 -11
  107. package/dist/components/simple/navigation/TabSwitcher.svelte +60 -19
  108. package/dist/components/simple/notifiers/AlertBanner.svelte +59 -11
  109. package/dist/components/simple/progress/ProgressBar.svelte +26 -10
  110. package/dist/components/simple/timeline/SimpleTimeLine.svelte +52 -5
  111. package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +16 -9
  112. package/dist/components/simple/typography/Code.svelte +41 -12
  113. package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -1
  114. package/dist/stores/layouts/unstableSidebarOpened.js +1 -1
  115. package/dist/stores/theme.js +2 -2
  116. package/dist/utils/filters/builder.d.ts +2 -2
  117. package/dist/utils/filters/builder.js +7 -7
  118. package/dist/utils/filters/modifiers/where.d.ts +1 -1
  119. package/dist/utils/teleporter.js +4 -4
  120. package/package.json +39 -33
@@ -1,204 +1,381 @@
1
- <script module lang="ts">export {};
1
+ <script module lang="ts">
2
+ export type Item<Data = any> = {
3
+ value: string | number;
4
+ label?: string | number;
5
+ icon?: string
6
+ data?: Data;
7
+ };
2
8
  </script>
3
9
 
4
- <script lang="ts" generics="Data">import "../../../css/main.css";
5
- import "./Autocomplete.css";
6
- import { scrollInMenu } from "../common/scroller";
7
- let { values = $bindable(), items = [], searchFunction = undefined, multiple = false, disabled = false, mandatory = false, placeholder = "", width = "auto", height = "auto", maxWidth = undefined, minWidth = "200px", openingId = $bindable("autocomplete-menu"), searchText = $bindable(), maxVisibleChips = undefined, menuOpened = $bindable(false), closeOnSelect = !multiple, emptySearchTextOnMenuClose = true, menuBoxShadow = "rgb(var(--global-color-background-300), .5) 0px 2px 4px", menuBorderRadius = "5px", mobileDrawer = false, menuWidth = undefined, menuAnchor = 'bottom-center', class: clazz = {}, menuStayInViewport, menuFlipOnOverflow = true, menuMaxHeight = '300px', adaptInputWidth = true, selectionContainerSnippet, selectionSnippet, chipLabelSnippet, exceedCounterSnippet, menuSnippet, itemLabelSnippet, itemSnippet, onchange, onfocus, onblur, onkeydown, onclose, } = $props();
8
- let notVisibleChipNumber = $derived(Math.max(((values || []).length || 0) - (maxVisibleChips || 0), 0));
9
- function select(item) {
10
- if (disabled)
11
- return;
12
- const alreadyPresent = (values || []).findIndex((i) => i.value === item.value) !== -1;
10
+ <script lang="ts" generics="Data">
11
+ import "../../../css/main.css";
12
+ import "./Autocomplete.css";
13
+ import { scrollInMenu } from "../common/scroller";
14
+
15
+ type ItemData = Item<Data>;
16
+ interface Props {
17
+ values?: ItemData[];
18
+ items?: ItemData[];
19
+ searchFunction?: (
20
+ item: ItemData,
21
+ searchText: string | undefined,
22
+ ) => boolean;
23
+ multiple?: boolean;
24
+ disabled?: boolean;
25
+ mandatory?: boolean;
26
+ placeholder?: string;
27
+ width?: string;
28
+ height?: string;
29
+ maxWidth?: string;
30
+ minWidth?: string;
31
+ openingId?: string;
32
+ searchText?: string;
33
+ maxVisibleChips?: number;
34
+ menuOpened?: boolean;
35
+ closeOnSelect?: boolean;
36
+ emptySearchTextOnMenuClose?: boolean;
37
+ menuBoxShadow?: string;
38
+ menuBorderRadius?: string;
39
+ mobileDrawer?: boolean;
40
+ menuWidth?: string | null;
41
+ menuAnchor?: ComponentProps<typeof Menu>['anchor']
42
+ menuStayInViewport?: ComponentProps<typeof Menu>['stayInViewport']
43
+ menuFlipOnOverflow?: ComponentProps<typeof Menu>['flipOnOverflow']
44
+ menuMaxHeight?: string
45
+ adaptInputWidth?: boolean
46
+ hint?: string
47
+ class?: {
48
+ activator?: string;
49
+ menu?: string;
50
+ simpleTextfield?: ComponentProps<typeof SimpleTextField>["class"];
51
+ hint?: string
52
+ };
53
+ selectionContainerSnippet?: Snippet<
54
+ [
55
+ {
56
+ values: ItemData[];
57
+ searchText: string | undefined;
58
+ disabled: boolean;
59
+ openMenu: () => void;
60
+ handleKeyDown: (event: KeyboardEvent) => void;
61
+ unselect: (item: ItemData) => void;
62
+ select: (item: ItemData) => void;
63
+ },
64
+ ]
65
+ >;
66
+ selectionSnippet?: Snippet<
67
+ [
68
+ {
69
+ selection: ItemData;
70
+ unselect: (item: ItemData) => void;
71
+ },
72
+ ]
73
+ >;
74
+ chipLabelSnippet?: Snippet<
75
+ [
76
+ {
77
+ selection: ItemData;
78
+ },
79
+ ]
80
+ >;
81
+ exceedCounterSnippet?: Snippet<
82
+ [
83
+ {
84
+ notVisibleChipNumber: number;
85
+ maxVisibleChips: number;
86
+ values: ItemData[];
87
+ searchText: string | undefined;
88
+ disabled: boolean;
89
+ },
90
+ ]
91
+ >;
92
+ menuSnippet?: Snippet<[]>;
93
+ itemLabelSnippet?: Snippet<
94
+ [
95
+ {
96
+ item: ItemData;
97
+ },
98
+ ]
99
+ >;
100
+ itemSnippet?: Snippet<
101
+ [
102
+ {
103
+ item: ItemData;
104
+ index: number;
105
+ selected: boolean;
106
+ },
107
+ ]
108
+ >;
109
+ hintSnippet?: Snippet<[{
110
+ hint?: string
111
+ }]>
112
+ onchange?: (event: {
113
+ detail: {
114
+ unselect: ItemData | undefined;
115
+ select: ItemData | undefined;
116
+ selection: ItemData[];
117
+ };
118
+ }) => void;
119
+ onfocus?: () => void;
120
+ onblur?: () => void;
121
+ onkeydown?: (e: KeyboardEvent) => void;
122
+ onclose?: ComponentProps<typeof Drawer>["onclose"];
123
+ }
124
+
125
+ let {
126
+ values = $bindable(),
127
+ items = [],
128
+ searchFunction = undefined,
129
+ multiple = false,
130
+ disabled = false,
131
+ mandatory = false,
132
+ placeholder = "",
133
+ width = "auto",
134
+ height = "auto",
135
+ maxWidth = undefined,
136
+ minWidth = "200px",
137
+ openingId = $bindable("autocomplete-menu"),
138
+ searchText = $bindable(),
139
+ maxVisibleChips = undefined,
140
+ menuOpened = $bindable(false),
141
+ closeOnSelect = !multiple,
142
+ emptySearchTextOnMenuClose = true,
143
+ menuBoxShadow = "rgb(var(--global-color-background-300), .5) 0px 2px 4px",
144
+ menuBorderRadius = "5px",
145
+ mobileDrawer = false,
146
+ menuWidth = undefined,
147
+ menuAnchor = 'bottom-center',
148
+ class: clazz = {},
149
+ menuStayInViewport,
150
+ menuFlipOnOverflow = true,
151
+ menuMaxHeight = '300px',
152
+ adaptInputWidth = true,
153
+ hint,
154
+ selectionContainerSnippet,
155
+ selectionSnippet,
156
+ chipLabelSnippet,
157
+ exceedCounterSnippet,
158
+ menuSnippet,
159
+ itemLabelSnippet,
160
+ itemSnippet,
161
+ hintSnippet,
162
+ onchange,
163
+ onfocus,
164
+ onblur,
165
+ onkeydown,
166
+ onclose,
167
+ }: Props = $props();
168
+
169
+ let notVisibleChipNumber = $derived(
170
+ Math.max(((values || []).length || 0) - (maxVisibleChips || 0), 0),
171
+ );
172
+
173
+ function select(item: ItemData) {
174
+ if (disabled) return;
175
+
176
+ const alreadyPresent =
177
+ (values || []).findIndex((i) => i.value === item.value) !== -1;
178
+
13
179
  if (!alreadyPresent) {
14
- if (multiple)
15
- values = [...(values || []), item];
16
- else
17
- values = [item];
18
- refreshMenuWidth();
19
- if (onchange) {
20
- onchange({
21
- detail: {
22
- unselect: undefined,
23
- select: item,
24
- selection: values,
25
- },
26
- });
27
- }
180
+ if (multiple) values = [...(values || []), item];
181
+ else values = [item];
182
+ refreshMenuWidth();
183
+
184
+ if (onchange) {
185
+ onchange({
186
+ detail: {
187
+ unselect: undefined,
188
+ select: item,
189
+ selection: values,
190
+ },
191
+ });
192
+ }
28
193
  }
29
- if (!multiple && closeOnSelect)
30
- menuOpened = false;
31
- }
32
- function unselect(item) {
33
- if (disabled)
34
- return;
35
- if (!!values && values.length == 1 && mandatory)
36
- return;
194
+
195
+ if (!multiple && closeOnSelect) menuOpened = false;
196
+ }
197
+
198
+ function unselect(item: ItemData) {
199
+ if (disabled) return;
200
+
201
+ if (!!values && values.length == 1 && mandatory) return;
37
202
  values = (values || []).filter((i) => i.value != item.value);
38
203
  refreshMenuWidth();
204
+
39
205
  if (onchange) {
40
- onchange({
41
- detail: {
42
- unselect: item,
43
- select: undefined,
44
- selection: values || [],
45
- },
46
- });
206
+ onchange({
207
+ detail: {
208
+ unselect: item,
209
+ select: undefined,
210
+ selection: values || [],
211
+ },
212
+ });
47
213
  }
48
- }
49
- function pop() {
50
- if (!!values && values.length == 1 && mandatory)
51
- return;
214
+ }
215
+
216
+ function pop() {
217
+ if (!!values && values.length == 1 && mandatory) return;
52
218
  let poppedElement = (values || []).pop();
53
219
  values = [...(values || [])];
54
220
  refreshMenuWidth();
221
+
55
222
  if (onchange) {
56
- onchange({
57
- detail: {
58
- unselect: poppedElement,
59
- select: undefined,
60
- selection: values,
61
- },
62
- });
223
+ onchange({
224
+ detail: {
225
+ unselect: poppedElement,
226
+ select: undefined,
227
+ selection: values,
228
+ },
229
+ });
63
230
  }
64
- }
65
- function toggle(item) {
66
- const alreadyPresent = (values || []).findIndex((i) => i.value === item.value) != -1;
67
- if (alreadyPresent)
68
- unselect(item);
69
- else
70
- select(item);
71
- }
72
- let localMenuWidth = $state(undefined), menuHeight = "auto", refreshPosition = $state(false);
73
- function openMenu() {
231
+ }
232
+
233
+ function toggle(item: ItemData) {
234
+ const alreadyPresent =
235
+ (values || []).findIndex((i) => i.value === item.value) != -1;
236
+
237
+ if (alreadyPresent) unselect(item);
238
+ else select(item);
239
+ }
240
+
241
+ let localMenuWidth: string | undefined | null = $state(undefined),
242
+ menuHeight = "auto",
243
+ refreshPosition = $state(false);
244
+
245
+ function openMenu() {
74
246
  refreshMenuWidth();
75
247
  menuOpened = true;
76
- }
77
- function refreshMenuWidth() {
248
+ }
249
+
250
+ function refreshMenuWidth() {
78
251
  setTimeout(() => {
79
- if (menuWidth !== undefined)
80
- localMenuWidth = menuWidth;
81
- else if (!!activator)
82
- localMenuWidth = activator.offsetWidth + "px";
83
- setTimeout(() => {
84
- refreshPosition = true;
85
- }, 1);
252
+ if (menuWidth !== undefined) localMenuWidth = menuWidth;
253
+ else if (!!activator) localMenuWidth = activator.offsetWidth + "px";
254
+
255
+ setTimeout(() => {
256
+ refreshPosition = true;
257
+ }, 1);
86
258
  }, 1);
87
- }
88
- let activator = $state(), focusedIndex = $state(undefined);
89
- function handleTextFieldFocus() {
259
+ }
260
+
261
+ let activator: HTMLElement | undefined = $state(),
262
+ focusedIndex: number | undefined = $state(undefined);
263
+ function handleTextFieldFocus() {
90
264
  if (onfocus) {
91
- onfocus();
265
+ onfocus();
92
266
  }
93
- if (disabled)
94
- return;
267
+
268
+ if (disabled) return;
95
269
  focusedIndex = undefined;
96
270
  openMenu();
97
- }
98
- function handleTextFieldBlur() {
271
+ }
272
+
273
+ function handleTextFieldBlur() {
99
274
  if (onblur) {
100
- onblur();
275
+ onblur();
101
276
  }
102
277
  // closeMenu()
103
- }
104
- let menuElement = $state();
105
- function handleKeyDown(event) {
278
+ }
279
+
280
+ let menuElement: HTMLElement | undefined = $state();
281
+ function handleKeyDown(event: KeyboardEvent) {
106
282
  if (onkeydown) {
107
- onkeydown(event);
108
- }
109
- if (disabled)
110
- return;
111
- if (event.key == "ArrowDown" &&
112
- (focusedIndex === undefined || focusedIndex < filteredItems.length - 1)) {
113
- if (focusedIndex === undefined)
114
- focusedIndex = 0;
115
- else
116
- focusedIndex += 1;
117
- }
118
- else if (event.key == "ArrowUp" &&
119
- (focusedIndex === undefined || focusedIndex > 0)) {
120
- if (focusedIndex === undefined)
121
- focusedIndex = filteredItems.length - 1;
122
- else
123
- focusedIndex -= 1;
124
- }
125
- else if (event.key == "Enter" && focusedIndex != undefined) {
126
- toggle(filteredItems[focusedIndex]);
283
+ onkeydown(event);
127
284
  }
128
- else if (event.key == "Backspace" && searchText == "") {
129
- pop();
130
- }
131
- else if (event.key == "Escape" || event.key == "Tab") {
132
- if (emptySearchTextOnMenuClose)
133
- searchText = "";
134
- if (!!input)
135
- input.blur();
136
- menuOpened = false;
285
+
286
+ if (disabled) return;
287
+
288
+ if (
289
+ event.key == "ArrowDown" &&
290
+ (focusedIndex === undefined || focusedIndex < filteredItems.length - 1)
291
+ ) {
292
+ if (focusedIndex === undefined) focusedIndex = 0;
293
+ else focusedIndex += 1;
294
+ } else if (
295
+ event.key == "ArrowUp" &&
296
+ (focusedIndex === undefined || focusedIndex > 0)
297
+ ) {
298
+ if (focusedIndex === undefined) focusedIndex = filteredItems.length - 1;
299
+ else focusedIndex -= 1;
300
+ } else if (event.key == "Enter" && focusedIndex != undefined) {
301
+ toggle(filteredItems[focusedIndex]);
302
+ } else if (event.key == "Backspace" && searchText == "") {
303
+ pop();
304
+ } else if (event.key == "Escape" || event.key == "Tab") {
305
+ if(emptySearchTextOnMenuClose) searchText = "";
306
+ if (!!input) input.blur();
307
+ menuOpened = false;
137
308
  }
309
+
138
310
  if (focusedIndex !== undefined && !!menuElement) {
139
- let child = menuElement.querySelector(".item-" + focusedIndex);
140
- if (!!child)
141
- scrollInMenu(menuElement, child, "instant");
311
+ let child = menuElement.querySelector<HTMLElement>(
312
+ ".item-" + focusedIndex,
313
+ );
314
+
315
+ if (!!child) scrollInMenu(menuElement, child, "instant");
142
316
  }
143
- }
144
- let input = $state();
145
- function handleContainerClick() {
146
- if (disabled)
147
- return;
317
+ }
318
+
319
+ let input: HTMLElement | undefined = $state();
320
+ function handleContainerClick() {
321
+ if (disabled) return;
322
+
148
323
  if (!menuOpened) {
149
- if (!!input)
150
- input.focus();
151
- // had to timeout because it was catching click outside
152
- setTimeout(() => {
153
- openMenu();
154
- }, 50);
324
+ if (!!input) input.focus();
325
+
326
+ // had to timeout because it was catching click outside
327
+ setTimeout(() => {
328
+ openMenu();
329
+ }, 50);
155
330
  }
156
- }
157
- let filteredItems = $state(items);
158
- $effect(() => {
331
+ }
332
+
333
+ let filteredItems: ItemData[] = $state(items);
334
+ $effect(() => {
159
335
  if (searchText) {
160
- focusedIndex = undefined;
161
- filteredItems = items.filter((it) => {
162
- if (searchFunction)
163
- return searchFunction(it, searchText);
164
- else
165
- return (!!searchText &&
166
- it.label
167
- ?.toString()
168
- .toLowerCase()
169
- .includes(searchText.toLowerCase()));
170
- });
171
- }
172
- else {
173
- filteredItems = items;
336
+ focusedIndex = undefined;
337
+ filteredItems = items.filter((it) => {
338
+ if (searchFunction) return searchFunction(it, searchText);
339
+ else
340
+ return (
341
+ !!searchText &&
342
+ it.label
343
+ ?.toString()
344
+ .toLowerCase()
345
+ .includes(searchText.toLowerCase())
346
+ );
347
+ });
348
+ } else {
349
+ filteredItems = items;
174
350
  }
175
- });
176
- $effect(() => {
351
+ });
352
+
353
+ $effect(() => {
177
354
  if (!menuOpened && emptySearchTextOnMenuClose) {
178
- setTimeout(() => {
179
- if (!menuOpened && emptySearchTextOnMenuClose)
180
- searchText = undefined;
181
- }, 10);
355
+ setTimeout(() => {
356
+ if (!menuOpened && emptySearchTextOnMenuClose) searchText = undefined;
357
+ }, 10);
182
358
  }
183
- });
184
- $effect(() => {
359
+ });
360
+
361
+ $effect(() => {
185
362
  if (!!input && adaptInputWidth) {
186
- if ((values || []).length !== 0) {
187
- input.style.width =
188
- Math.max(searchText?.length || placeholder?.length, 1) + "ch";
189
- }
190
- else {
191
- input.style.width = "auto";
192
- }
363
+ if ((values || []).length !== 0) {
364
+ input.style.width =
365
+ Math.max(searchText?.length || placeholder?.length, 1) + "ch";
366
+ } else {
367
+ input.style.width = "";
368
+ }
193
369
  }
194
- });
195
- import Chip from "../navigation/Chip.svelte";
196
- import Menu from "../common/Menu.svelte";
197
- import {} from "svelte";
198
- import SimpleTextField from "./SimpleTextField.svelte";
199
- import MenuOrDrawer from "../../composed/common/MenuOrDrawer.svelte";
200
- import Drawer from "../navigation/Drawer.svelte";
201
- import Icon from "../media/Icon.svelte";
370
+ });
371
+
372
+ import Chip from "../navigation/Chip.svelte";
373
+ import Menu from "../common/Menu.svelte";
374
+ import { type ComponentProps, type Snippet } from "svelte";
375
+ import SimpleTextField from "./SimpleTextField.svelte";
376
+ import MenuOrDrawer from "../../composed/common/MenuOrDrawer.svelte";
377
+ import Drawer from "../navigation/Drawer.svelte";
378
+ import Icon from "../media/Icon.svelte";
202
379
  </script>
203
380
 
204
381
  <svelte:window />
@@ -275,6 +452,16 @@ import Icon from "../media/Icon.svelte";
275
452
  bind:this={input}
276
453
  />
277
454
  </div>
455
+
456
+ {#if hintSnippet}
457
+ {@render hintSnippet({ hint })}
458
+ {:else}
459
+ <div class="{clazz?.hint || ''}">
460
+ {#if !!hint}
461
+ <span class="hint">{hint}</span>
462
+ {/if}
463
+ </div>
464
+ {/if}
278
465
  {/if}
279
466
  </div>
280
467
 
@@ -501,4 +688,19 @@ import Icon from "../media/Icon.svelte";
501
688
  border: none;
502
689
  color: inherit;
503
690
  }
691
+
692
+ .hint {
693
+ margin-left: var(
694
+ --autocomplete-hint-margin-left,
695
+ var(--autocomplete-default-hint-margin-left)
696
+ );
697
+ font-size: var(
698
+ --autocomplete-hint-font-size,
699
+ var(--autocomplete-default-hint-font-size)
700
+ );
701
+ color: var(
702
+ --autocomplete-hint-color,
703
+ var(--autocomplete-default-hint-color)
704
+ );
705
+ }
504
706
  </style>
@@ -10,11 +10,11 @@ import Menu from "../common/Menu.svelte";
10
10
  import { type ComponentProps, type Snippet } from "svelte";
11
11
  import SimpleTextField from "./SimpleTextField.svelte";
12
12
  import Drawer from "../navigation/Drawer.svelte";
13
- declare class __sveltets_Render<Data> {
14
- props(): {
15
- values?: Item<Data>[] | undefined;
16
- items?: Item<Data>[] | undefined;
17
- searchFunction?: ((item: Item<Data>, searchText: string | undefined) => boolean) | undefined;
13
+ declare function $$render<Data>(): {
14
+ props: {
15
+ values?: Item<Data>[];
16
+ items?: Item<Data>[];
17
+ searchFunction?: (item: Item<Data>, searchText: string | undefined) => boolean;
18
18
  multiple?: boolean;
19
19
  disabled?: boolean;
20
20
  mandatory?: boolean;
@@ -38,11 +38,13 @@ declare class __sveltets_Render<Data> {
38
38
  menuFlipOnOverflow?: ComponentProps<typeof Menu>["flipOnOverflow"];
39
39
  menuMaxHeight?: string;
40
40
  adaptInputWidth?: boolean;
41
+ hint?: string;
41
42
  class?: {
42
43
  activator?: string;
43
44
  menu?: string;
44
45
  simpleTextfield?: ComponentProps<typeof SimpleTextField>["class"];
45
- } | undefined;
46
+ hint?: string;
47
+ };
46
48
  selectionContainerSnippet?: Snippet<[{
47
49
  values: Item<Data>[];
48
50
  searchText: string | undefined;
@@ -51,44 +53,54 @@ declare class __sveltets_Render<Data> {
51
53
  handleKeyDown: (event: KeyboardEvent) => void;
52
54
  unselect: (item: Item<Data>) => void;
53
55
  select: (item: Item<Data>) => void;
54
- }]> | undefined;
56
+ }]>;
55
57
  selectionSnippet?: Snippet<[{
56
58
  selection: Item<Data>;
57
59
  unselect: (item: Item<Data>) => void;
58
- }]> | undefined;
60
+ }]>;
59
61
  chipLabelSnippet?: Snippet<[{
60
62
  selection: Item<Data>;
61
- }]> | undefined;
63
+ }]>;
62
64
  exceedCounterSnippet?: Snippet<[{
63
65
  notVisibleChipNumber: number;
64
66
  maxVisibleChips: number;
65
67
  values: Item<Data>[];
66
68
  searchText: string | undefined;
67
69
  disabled: boolean;
68
- }]> | undefined;
70
+ }]>;
69
71
  menuSnippet?: Snippet<[]>;
70
72
  itemLabelSnippet?: Snippet<[{
71
73
  item: Item<Data>;
72
- }]> | undefined;
74
+ }]>;
73
75
  itemSnippet?: Snippet<[{
74
76
  item: Item<Data>;
75
77
  index: number;
76
78
  selected: boolean;
77
- }]> | undefined;
78
- onchange?: ((event: {
79
+ }]>;
80
+ hintSnippet?: Snippet<[{
81
+ hint?: string;
82
+ }]>;
83
+ onchange?: (event: {
79
84
  detail: {
80
85
  unselect: Item<Data> | undefined;
81
86
  select: Item<Data> | undefined;
82
87
  selection: Item<Data>[];
83
88
  };
84
- }) => void) | undefined;
85
- onfocus?: (() => void) | undefined;
86
- onblur?: (() => void) | undefined;
87
- onkeydown?: ((e: KeyboardEvent) => void) | undefined;
89
+ }) => void;
90
+ onfocus?: () => void;
91
+ onblur?: () => void;
92
+ onkeydown?: (e: KeyboardEvent) => void;
88
93
  onclose?: ComponentProps<typeof Drawer>["onclose"];
89
94
  };
90
- events(): {};
91
- slots(): {};
95
+ exports: {};
96
+ bindings: "openingId" | "values" | "menuOpened" | "searchText";
97
+ slots: {};
98
+ events: {};
99
+ };
100
+ declare class __sveltets_Render<Data> {
101
+ props(): ReturnType<typeof $$render<Data>>['props'];
102
+ events(): ReturnType<typeof $$render<Data>>['events'];
103
+ slots(): ReturnType<typeof $$render<Data>>['slots'];
92
104
  bindings(): "openingId" | "values" | "menuOpened" | "searchText";
93
105
  exports(): {};
94
106
  }