@cloudparker/moldex.js 0.0.73 → 0.0.74
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.
|
@@ -17,7 +17,7 @@ let {
|
|
|
17
17
|
createButtonClassName,
|
|
18
18
|
createButtonLabel = "Add",
|
|
19
19
|
displayClassName,
|
|
20
|
-
displayFieldName,
|
|
20
|
+
displayFieldName = "name",
|
|
21
21
|
displayItemsCount,
|
|
22
22
|
dropdownBodyClassName,
|
|
23
23
|
dropdownBodySnippet,
|
|
@@ -33,11 +33,11 @@ let {
|
|
|
33
33
|
hasDropdownFooterCreateButton,
|
|
34
34
|
hasDropdownHeader,
|
|
35
35
|
hasDropdownHeaderSearch,
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
hasCheckbox,
|
|
37
|
+
iconClassName,
|
|
38
38
|
iconPathFieldName,
|
|
39
39
|
id,
|
|
40
|
-
identityFieldName,
|
|
40
|
+
identityFieldName = "_id",
|
|
41
41
|
itemClassName,
|
|
42
42
|
items,
|
|
43
43
|
multiple,
|
|
@@ -45,23 +45,34 @@ let {
|
|
|
45
45
|
onCreateButtonClick,
|
|
46
46
|
onSearch,
|
|
47
47
|
searchClassName,
|
|
48
|
-
searchFieldName,
|
|
48
|
+
searchFieldName = "name",
|
|
49
49
|
searchPlaceholder = "Search...",
|
|
50
50
|
showChip,
|
|
51
51
|
size,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
subtitleClassName,
|
|
53
|
+
subtitleFieldName,
|
|
54
|
+
titleClassName,
|
|
55
|
+
titleFieldName = "name",
|
|
56
56
|
value = $bindable(),
|
|
57
57
|
...props
|
|
58
58
|
} = $props();
|
|
59
|
-
let idFieldSymbol = Symbol("_id");
|
|
60
|
-
let searchFieldSymbol = Symbol("_search");
|
|
61
59
|
let searchFieldRef = $state(null);
|
|
62
|
-
let comboboxIconSizeClassName = $state("");
|
|
63
60
|
let isPlaced = $state(false);
|
|
64
61
|
let searchText = $state("");
|
|
62
|
+
let comboboxIconSizeClassName = $derived.by(() => {
|
|
63
|
+
if (size) {
|
|
64
|
+
switch (size) {
|
|
65
|
+
case "lg":
|
|
66
|
+
return "!h-7 !w-7";
|
|
67
|
+
case "md":
|
|
68
|
+
return "!h-6 !w-6";
|
|
69
|
+
case "sm":
|
|
70
|
+
return "!h-5 !w-5";
|
|
71
|
+
case "xs":
|
|
72
|
+
return "!h-4 !w-4";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
65
76
|
let hasPrimitiveItemsData = $derived.by(() => {
|
|
66
77
|
if (items) {
|
|
67
78
|
let firstItem = items[0];
|
|
@@ -69,7 +80,6 @@ let hasPrimitiveItemsData = $derived.by(() => {
|
|
|
69
80
|
}
|
|
70
81
|
return false;
|
|
71
82
|
});
|
|
72
|
-
let itemsIdentityMap = {};
|
|
73
83
|
let _value = $derived.by(() => {
|
|
74
84
|
return selectedItemsSet?.size ? " " : "";
|
|
75
85
|
});
|
|
@@ -77,7 +87,7 @@ let displayItems = $derived.by(() => {
|
|
|
77
87
|
let array = Array.from(selectedItemsSet);
|
|
78
88
|
let results = array.map((id2) => {
|
|
79
89
|
if (hasPrimitiveItemsData) {
|
|
80
|
-
return
|
|
90
|
+
return id2;
|
|
81
91
|
} else {
|
|
82
92
|
let item = itemsIdentityMap[id2];
|
|
83
93
|
if (item) {
|
|
@@ -125,65 +135,30 @@ let preparedItems = $derived.by(() => {
|
|
|
125
135
|
return (items || []).map((item, index) => {
|
|
126
136
|
let res = {};
|
|
127
137
|
if (hasPrimitiveItemsData) {
|
|
128
|
-
res
|
|
129
|
-
res[
|
|
130
|
-
res[
|
|
131
|
-
} else {
|
|
132
|
-
if (identityFieldName && item.hasOwnProperty(identityFieldName)) {
|
|
133
|
-
res[idFieldSymbol] = item[identityFieldName];
|
|
134
|
-
} else {
|
|
135
|
-
res[idFieldSymbol] = index;
|
|
136
|
-
}
|
|
137
|
-
itemsIdentityMap[res[idFieldSymbol]] = item;
|
|
138
|
-
if (itemTitleFieldName && item.hasOwnProperty(itemTitleFieldName)) {
|
|
139
|
-
res.title = item[itemTitleFieldName];
|
|
140
|
-
}
|
|
141
|
-
if (itemSubtitleFieldName && item.hasOwnProperty(itemSubtitleFieldName)) {
|
|
142
|
-
res.subtitle = item[itemSubtitleFieldName];
|
|
143
|
-
}
|
|
144
|
-
if (searchFieldName) {
|
|
145
|
-
if (item.hasOwnProperty(searchFieldName)) {
|
|
146
|
-
res[searchFieldSymbol] = (item[searchFieldName] || "").toLowerCase().trim();
|
|
147
|
-
}
|
|
148
|
-
} else {
|
|
149
|
-
res[searchFieldSymbol] = `${item.title || ""} ${item.subtitle || ""}`;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
if (selectedItemsSet.has(res[idFieldSymbol])) {
|
|
153
|
-
res.isChecked = true;
|
|
138
|
+
res[identityFieldName] = item;
|
|
139
|
+
res[titleFieldName] = item;
|
|
140
|
+
res[searchFieldName] = item;
|
|
154
141
|
} else {
|
|
155
|
-
res
|
|
142
|
+
res = item;
|
|
156
143
|
}
|
|
157
144
|
return res;
|
|
158
145
|
});
|
|
159
146
|
});
|
|
147
|
+
let itemsIdentityMap = $derived.by(() => {
|
|
148
|
+
return preparedItems.reduce((acc, val) => {
|
|
149
|
+
acc[val[identityFieldName]] = val;
|
|
150
|
+
return acc;
|
|
151
|
+
}, {});
|
|
152
|
+
});
|
|
160
153
|
let filteredItems = $derived.by(() => {
|
|
161
154
|
if (searchText) {
|
|
162
155
|
return preparedItems.filter((item) => {
|
|
163
|
-
return item[
|
|
156
|
+
return (item[searchFieldName] || "").toLowerCase().indexOf(searchText) >= 0;
|
|
164
157
|
});
|
|
165
158
|
} else {
|
|
166
159
|
return [...preparedItems];
|
|
167
160
|
}
|
|
168
161
|
});
|
|
169
|
-
$effect(() => {
|
|
170
|
-
if (size) {
|
|
171
|
-
switch (size) {
|
|
172
|
-
case "lg":
|
|
173
|
-
comboboxIconSizeClassName = "!h-7 !w-7";
|
|
174
|
-
break;
|
|
175
|
-
case "md":
|
|
176
|
-
comboboxIconSizeClassName = "!h-6 !w-6";
|
|
177
|
-
break;
|
|
178
|
-
case "sm":
|
|
179
|
-
comboboxIconSizeClassName = "!h-5 !w-5";
|
|
180
|
-
break;
|
|
181
|
-
case "xs":
|
|
182
|
-
comboboxIconSizeClassName = "!h-4 !w-4";
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
162
|
let inputFieldRef = $state(null);
|
|
188
163
|
export function focus() {
|
|
189
164
|
inputFieldRef?.focus();
|
|
@@ -231,8 +206,8 @@ function handleDropdownKeyDown(event) {
|
|
|
231
206
|
function handleSearch(value2) {
|
|
232
207
|
searchText = value2;
|
|
233
208
|
}
|
|
234
|
-
function
|
|
235
|
-
let id2 = item[
|
|
209
|
+
function handleItemClick(ev, item, index) {
|
|
210
|
+
let id2 = item[identityFieldName];
|
|
236
211
|
if (multiple) {
|
|
237
212
|
if (selectedItemsSet.has(id2)) {
|
|
238
213
|
selectedItemsSet.delete(id2);
|
|
@@ -362,14 +337,14 @@ function handleItemSelected(ev, item, index) {
|
|
|
362
337
|
aria-selected={item.isChecked}
|
|
363
338
|
>
|
|
364
339
|
<ButtonListItem
|
|
365
|
-
title={item
|
|
366
|
-
subtitle={item
|
|
340
|
+
title={item[titleFieldName] || ''}
|
|
341
|
+
subtitle={item[subtitleFieldName || ''] || ''}
|
|
367
342
|
{index}
|
|
368
|
-
hasCheckbox
|
|
343
|
+
{hasCheckbox}
|
|
369
344
|
className=" {itemClassName}"
|
|
370
|
-
titleClassName=" {
|
|
371
|
-
subtitleClassName=" {
|
|
372
|
-
onClick={(ev) =>
|
|
345
|
+
titleClassName=" {titleClassName}"
|
|
346
|
+
subtitleClassName=" {subtitleClassName}"
|
|
347
|
+
onClick={(ev) => handleItemClick(ev, item, index)}
|
|
373
348
|
/>
|
|
374
349
|
</li>
|
|
375
350
|
{/each}
|
|
@@ -21,8 +21,8 @@ export type ComboboxFieldProps = {
|
|
|
21
21
|
hasDropdownFooterCreateButton?: boolean;
|
|
22
22
|
hasDropdownHeader?: boolean;
|
|
23
23
|
hasDropdownHeaderSearch?: boolean;
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
hasCheckbox?: boolean;
|
|
25
|
+
iconClassName?: string;
|
|
26
26
|
iconPathFieldName?: string;
|
|
27
27
|
identityFieldName?: string;
|
|
28
28
|
itemClassName?: string;
|
|
@@ -34,10 +34,10 @@ export type ComboboxFieldProps = {
|
|
|
34
34
|
searchFieldName?: string;
|
|
35
35
|
searchPlaceholder?: string;
|
|
36
36
|
showChip?: boolean;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
subtitleClassName?: string;
|
|
38
|
+
subtitleFieldName?: string;
|
|
39
|
+
titleClassName?: string;
|
|
40
|
+
titleFieldName?: string;
|
|
41
41
|
};
|
|
42
42
|
import type { Snippet } from 'svelte';
|
|
43
43
|
import { type InputFieldProps } from '../input-field/input-field.svelte';
|