@cloudparker/moldex.js 4.1.7 → 4.1.9

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 (222) hide show
  1. package/dist/actions/badge.d.ts +12 -0
  2. package/dist/actions/badge.js +22 -0
  3. package/dist/actions/index.d.ts +3 -0
  4. package/dist/actions/index.js +3 -0
  5. package/dist/actions/no-context-menu.d.ts +3 -0
  6. package/dist/actions/no-context-menu.js +11 -0
  7. package/dist/actions/ripple.css +29 -0
  8. package/dist/actions/ripple.d.ts +7 -0
  9. package/dist/actions/ripple.js +74 -0
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.js +4 -0
  12. package/dist/services/date/date-service.d.ts +52 -0
  13. package/dist/services/date/date-service.js +206 -0
  14. package/dist/services/dialog/dialog-service.d.ts +96 -0
  15. package/dist/services/dialog/dialog-service.js +350 -0
  16. package/dist/services/index.d.ts +12 -0
  17. package/dist/services/index.js +12 -0
  18. package/dist/services/navigation/navigation-service.d.ts +39 -0
  19. package/dist/services/navigation/navigation-service.js +100 -0
  20. package/dist/services/screen/screen-service.d.ts +17 -0
  21. package/dist/services/screen/screen-service.js +40 -0
  22. package/dist/services/toast/toast-service.d.ts +5 -0
  23. package/dist/services/toast/toast-service.js +26 -0
  24. package/dist/services/utils/color-service.d.ts +46 -0
  25. package/dist/services/utils/color-service.js +73 -0
  26. package/dist/services/utils/currency-service.d.ts +91 -0
  27. package/dist/services/utils/currency-service.js +140 -0
  28. package/dist/services/utils/download-service.d.ts +91 -0
  29. package/dist/services/utils/download-service.js +159 -0
  30. package/dist/services/utils/file-service.d.ts +140 -0
  31. package/dist/services/utils/file-service.js +301 -0
  32. package/dist/services/utils/http-service.d.ts +77 -0
  33. package/dist/services/utils/http-service.js +158 -0
  34. package/dist/services/utils/image-service.d.ts +107 -0
  35. package/dist/services/utils/image-service.js +260 -0
  36. package/dist/services/utils/melody-service.d.ts +5 -0
  37. package/dist/services/utils/melody-service.js +41 -0
  38. package/dist/services/utils/utils-service.d.ts +260 -0
  39. package/dist/services/utils/utils-service.js +413 -0
  40. package/dist/stores/referrer-store/referrer-store.svelte.d.ts +3 -0
  41. package/dist/stores/referrer-store/referrer-store.svelte.js +11 -0
  42. package/dist/stores/screen-size/screen-size-store.svelte.d.ts +11 -0
  43. package/dist/stores/screen-size/screen-size-store.svelte.js +33 -0
  44. package/dist/types.d.ts +14 -0
  45. package/dist/types.js +16 -0
  46. package/dist/views/core/button/components/button/button.svelte +161 -0
  47. package/dist/views/core/button/components/button/button.svelte.d.ts +4 -0
  48. package/dist/views/core/button/components/button-back/button-back.svelte +46 -0
  49. package/dist/views/core/button/components/button-back/button-back.svelte.d.ts +11 -0
  50. package/dist/views/core/button/components/button-close/button-close.svelte +8 -0
  51. package/dist/views/core/button/components/button-close/button-close.svelte.d.ts +4 -0
  52. package/dist/views/core/button/components/button-close-icon/button-close-icon.svelte +47 -0
  53. package/dist/views/core/button/components/button-close-icon/button-close-icon.svelte.d.ts +11 -0
  54. package/dist/views/core/button/components/button-dropdown/button-dropdown.svelte +149 -0
  55. package/dist/views/core/button/components/button-dropdown/button-dropdown.svelte.d.ts +24 -0
  56. package/dist/views/core/button/components/button-list-item/button-list-item.svelte +136 -0
  57. package/dist/views/core/button/components/button-list-item/button-list-item.svelte.d.ts +4 -0
  58. package/dist/views/core/button/components/button-menu/button-menu.svelte +105 -0
  59. package/dist/views/core/button/components/button-menu/button-menu.svelte.d.ts +21 -0
  60. package/dist/views/core/button/components/button-ok/button-ok.svelte +9 -0
  61. package/dist/views/core/button/components/button-ok/button-ok.svelte.d.ts +4 -0
  62. package/dist/views/core/button/components/button-search/button-search.svelte +72 -0
  63. package/dist/views/core/button/components/button-search/button-search.svelte.d.ts +21 -0
  64. package/dist/views/core/button/components/switch/switch.svelte +62 -0
  65. package/dist/views/core/button/components/switch/switch.svelte.d.ts +4 -0
  66. package/dist/views/core/button/index.d.ts +12 -0
  67. package/dist/views/core/button/index.js +12 -0
  68. package/dist/views/core/button/types.d.ts +100 -0
  69. package/dist/views/core/button/types.js +1 -0
  70. package/dist/views/core/common/components/content-area/content-area.svelte +47 -0
  71. package/dist/views/core/common/components/content-area/content-area.svelte.d.ts +12 -0
  72. package/dist/views/core/common/components/loading/loading.svelte +14 -0
  73. package/dist/views/core/common/components/loading/loading.svelte.d.ts +7 -0
  74. package/dist/views/core/common/components/virtual-scrolling/virtual-scrolling-list.svelte +60 -0
  75. package/dist/views/core/common/components/virtual-scrolling/virtual-scrolling-list.svelte.d.ts +11 -0
  76. package/dist/views/core/common/index.d.ts +4 -0
  77. package/dist/views/core/common/index.js +4 -0
  78. package/dist/views/core/dialog/components/cropper-dialog/cropper-dialog.svelte +51 -0
  79. package/dist/views/core/dialog/components/cropper-dialog/cropper-dialog.svelte.d.ts +5 -0
  80. package/dist/views/core/dialog/components/dialog/dialog.svelte +370 -0
  81. package/dist/views/core/dialog/components/dialog/dialog.svelte.d.ts +19 -0
  82. package/dist/views/core/dialog/components/loading-dialog/loading-dialog.svelte +42 -0
  83. package/dist/views/core/dialog/components/loading-dialog/loading-dialog.svelte.d.ts +12 -0
  84. package/dist/views/core/dialog/components/msg-dialog/msg-dialog.svelte +22 -0
  85. package/dist/views/core/dialog/components/msg-dialog/msg-dialog.svelte.d.ts +9 -0
  86. package/dist/views/core/dialog/components/number-field-dialog/number-field-dialog.svelte +57 -0
  87. package/dist/views/core/dialog/components/number-field-dialog/number-field-dialog.svelte.d.ts +14 -0
  88. package/dist/views/core/dialog/components/picker-dialog/picker-dialog.svelte +181 -0
  89. package/dist/views/core/dialog/components/picker-dialog/picker-dialog.svelte.d.ts +5 -0
  90. package/dist/views/core/dialog/components/text-field-dialog/text-field-dialog.svelte +56 -0
  91. package/dist/views/core/dialog/components/text-field-dialog/text-field-dialog.svelte.d.ts +15 -0
  92. package/dist/views/core/dialog/components/textarea-field-dialog/textarea-field-dialog.svelte +56 -0
  93. package/dist/views/core/dialog/components/textarea-field-dialog/textarea-field-dialog.svelte.d.ts +15 -0
  94. package/dist/views/core/dialog/index.d.ts +9 -0
  95. package/dist/views/core/dialog/index.js +9 -0
  96. package/dist/views/core/dialog/types.d.ts +105 -0
  97. package/dist/views/core/dialog/types.js +1 -0
  98. package/dist/views/core/drawer/components/drawer/drawer.svelte +110 -0
  99. package/dist/views/core/drawer/components/drawer/drawer.svelte.d.ts +19 -0
  100. package/dist/views/core/drawer/index.d.ts +2 -0
  101. package/dist/views/core/drawer/index.js +2 -0
  102. package/dist/views/core/icon/components/icon/icon.svelte +27 -0
  103. package/dist/views/core/icon/components/icon/icon.svelte.d.ts +12 -0
  104. package/dist/views/core/icon/components/icon-circle/icon-circle.svelte +17 -0
  105. package/dist/views/core/icon/components/icon-circle/icon-circle.svelte.d.ts +8 -0
  106. package/dist/views/core/icon/index.d.ts +4 -0
  107. package/dist/views/core/icon/index.js +4 -0
  108. package/dist/views/core/icon/services/icon-path-service.d.ts +23 -0
  109. package/dist/views/core/icon/services/icon-path-service.js +24 -0
  110. package/dist/views/core/index.d.ts +16 -0
  111. package/dist/views/core/index.js +16 -0
  112. package/dist/views/core/input/components/checkbox-field/checkbox-field.svelte +83 -0
  113. package/dist/views/core/input/components/checkbox-field/checkbox-field.svelte.d.ts +19 -0
  114. package/dist/views/core/input/components/color-field/color-field.svelte +135 -0
  115. package/dist/views/core/input/components/color-field/color-field.svelte.d.ts +11 -0
  116. package/dist/views/core/input/components/combobox-field/combobox-field.svelte +492 -0
  117. package/dist/views/core/input/components/combobox-field/combobox-field.svelte.d.ts +7 -0
  118. package/dist/views/core/input/components/date-field/date-field.svelte +40 -0
  119. package/dist/views/core/input/components/date-field/date-field.svelte.d.ts +11 -0
  120. package/dist/views/core/input/components/datetime-field/datetime-field.svelte +22 -0
  121. package/dist/views/core/input/components/datetime-field/datetime-field.svelte.d.ts +8 -0
  122. package/dist/views/core/input/components/email-field/email-field.svelte +27 -0
  123. package/dist/views/core/input/components/email-field/email-field.svelte.d.ts +8 -0
  124. package/dist/views/core/input/components/file-field/file-field.svelte +106 -0
  125. package/dist/views/core/input/components/file-field/file-field.svelte.d.ts +13 -0
  126. package/dist/views/core/input/components/input-field/input-field.svelte +336 -0
  127. package/dist/views/core/input/components/input-field/input-field.svelte.d.ts +9 -0
  128. package/dist/views/core/input/components/label/label.svelte +48 -0
  129. package/dist/views/core/input/components/label/label.svelte.d.ts +14 -0
  130. package/dist/views/core/input/components/number-field/number-field.svelte +22 -0
  131. package/dist/views/core/input/components/number-field/number-field.svelte.d.ts +8 -0
  132. package/dist/views/core/input/components/password-field/password-field.svelte +100 -0
  133. package/dist/views/core/input/components/password-field/password-field.svelte.d.ts +12 -0
  134. package/dist/views/core/input/components/phone-field/phone-field.svelte +187 -0
  135. package/dist/views/core/input/components/phone-field/phone-field.svelte.d.ts +12 -0
  136. package/dist/views/core/input/components/radio-field/radio-field.svelte +127 -0
  137. package/dist/views/core/input/components/radio-field/radio-field.svelte.d.ts +4 -0
  138. package/dist/views/core/input/components/range-field/range-field.svelte +120 -0
  139. package/dist/views/core/input/components/range-field/range-field.svelte.d.ts +23 -0
  140. package/dist/views/core/input/components/search-field/search-field.svelte +80 -0
  141. package/dist/views/core/input/components/search-field/search-field.svelte.d.ts +12 -0
  142. package/dist/views/core/input/components/text-field/text-field.svelte +31 -0
  143. package/dist/views/core/input/components/text-field/text-field.svelte.d.ts +11 -0
  144. package/dist/views/core/input/components/textarea-field/textarea-field.svelte +27 -0
  145. package/dist/views/core/input/components/textarea-field/textarea-field.svelte.d.ts +8 -0
  146. package/dist/views/core/input/components/time-field/time-field.svelte +21 -0
  147. package/dist/views/core/input/components/time-field/time-field.svelte.d.ts +8 -0
  148. package/dist/views/core/input/index.d.ts +20 -0
  149. package/dist/views/core/input/index.js +20 -0
  150. package/dist/views/core/input/types.d.ts +159 -0
  151. package/dist/views/core/input/types.js +1 -0
  152. package/dist/views/core/navbar/components/navbar/navbar.svelte +133 -0
  153. package/dist/views/core/navbar/components/navbar/navbar.svelte.d.ts +4 -0
  154. package/dist/views/core/navbar/index.d.ts +3 -0
  155. package/dist/views/core/navbar/index.js +3 -0
  156. package/dist/views/core/navbar/types.d.ts +35 -0
  157. package/dist/views/core/navbar/types.js +1 -0
  158. package/dist/views/core/no-data/components/no-data/no-data.svelte +47 -0
  159. package/dist/views/core/no-data/components/no-data/no-data.svelte.d.ts +13 -0
  160. package/dist/views/core/no-data/index.d.ts +2 -0
  161. package/dist/views/core/no-data/index.js +2 -0
  162. package/dist/views/core/pagination/components/pagination/pagination.svelte +151 -0
  163. package/dist/views/core/pagination/components/pagination/pagination.svelte.d.ts +16 -0
  164. package/dist/views/core/pagination/index.d.ts +2 -0
  165. package/dist/views/core/pagination/index.js +2 -0
  166. package/dist/views/core/progressbar/components/progressbar/progressbar.svelte +55 -0
  167. package/dist/views/core/progressbar/components/progressbar/progressbar.svelte.d.ts +11 -0
  168. package/dist/views/core/progressbar/index.d.ts +2 -0
  169. package/dist/views/core/progressbar/index.js +2 -0
  170. package/dist/views/core/ruler/components/vertical-ruler/verticcal-ruler.svelte +8 -0
  171. package/dist/views/core/ruler/components/vertical-ruler/verticcal-ruler.svelte.d.ts +6 -0
  172. package/dist/views/core/ruler/index.d.ts +2 -0
  173. package/dist/views/core/ruler/index.js +2 -0
  174. package/dist/views/core/screen-detector/components/screen-detector.svelte +17 -0
  175. package/dist/views/core/screen-detector/components/screen-detector.svelte.d.ts +3 -0
  176. package/dist/views/core/screen-detector/index.d.ts +2 -0
  177. package/dist/views/core/screen-detector/index.js +2 -0
  178. package/dist/views/core/sidebar/components/sidebar.svelte +49 -0
  179. package/dist/views/core/sidebar/components/sidebar.svelte.d.ts +12 -0
  180. package/dist/views/core/sidebar/index.d.ts +2 -0
  181. package/dist/views/core/sidebar/index.js +2 -0
  182. package/dist/views/core/spinner/components/spinner/spinner.svelte +21 -0
  183. package/dist/views/core/spinner/components/spinner/spinner.svelte.d.ts +6 -0
  184. package/dist/views/core/spinner/index.d.ts +2 -0
  185. package/dist/views/core/spinner/index.js +2 -0
  186. package/dist/views/core/text/components/text-await/text-await.svelte +23 -0
  187. package/dist/views/core/text/components/text-await/text-await.svelte.d.ts +10 -0
  188. package/dist/views/core/text/components/text-copy/text-copy.svelte +40 -0
  189. package/dist/views/core/text/components/text-copy/text-copy.svelte.d.ts +10 -0
  190. package/dist/views/core/text/components/text-currency/text-currency.svelte +24 -0
  191. package/dist/views/core/text/components/text-currency/text-currency.svelte.d.ts +11 -0
  192. package/dist/views/core/text/components/text-date/text-date.svelte +40 -0
  193. package/dist/views/core/text/components/text-date/text-date.svelte.d.ts +10 -0
  194. package/dist/views/core/text/components/text-email/text-email.svelte +22 -0
  195. package/dist/views/core/text/components/text-email/text-email.svelte.d.ts +9 -0
  196. package/dist/views/core/text/components/text-html/text-html.svelte +7 -0
  197. package/dist/views/core/text/components/text-html/text-html.svelte.d.ts +6 -0
  198. package/dist/views/core/text/components/text-phone/text-phone.svelte +25 -0
  199. package/dist/views/core/text/components/text-phone/text-phone.svelte.d.ts +9 -0
  200. package/dist/views/core/text/index.d.ts +8 -0
  201. package/dist/views/core/text/index.js +8 -0
  202. package/dist/views/core/toast/components/toast/toast.svelte +46 -0
  203. package/dist/views/core/toast/components/toast/toast.svelte.d.ts +7 -0
  204. package/dist/views/core/toast/index.d.ts +3 -0
  205. package/dist/views/core/toast/index.js +3 -0
  206. package/dist/views/core/toast/types.d.ts +8 -0
  207. package/dist/views/core/toast/types.js +1 -0
  208. package/dist/views/extra/fields/country-combobox-field.svelte +42 -0
  209. package/dist/views/extra/fields/country-combobox-field.svelte.d.ts +8 -0
  210. package/dist/views/extra/index.d.ts +6 -0
  211. package/dist/views/extra/index.js +6 -0
  212. package/dist/views/extra/loaders/country-loader.svelte +38 -0
  213. package/dist/views/extra/loaders/country-loader.svelte.d.ts +12 -0
  214. package/dist/views/extra/texts/text-country-state.svelte +48 -0
  215. package/dist/views/extra/texts/text-country-state.svelte.d.ts +6 -0
  216. package/dist/views/extra/texts/text-country.svelte +22 -0
  217. package/dist/views/extra/texts/text-country.svelte.d.ts +6 -0
  218. package/dist/views/extra/types.d.ts +5 -0
  219. package/dist/views/extra/types.js +1 -0
  220. package/dist/views/index.d.ts +2 -0
  221. package/dist/views/index.js +2 -0
  222. package/package.json +2 -1
@@ -0,0 +1,492 @@
1
+
2
+ <script lang="ts">
3
+ import ButtonListItem from '../../../button/components/button-list-item/button-list-item.svelte';
4
+ import Button from '../../../button/components/button/button.svelte';
5
+
6
+ import VirtualScrollingList from '../../../common/components/virtual-scrolling/virtual-scrolling-list.svelte';
7
+ import Icon from '../../../icon/components/icon/icon.svelte';
8
+ import { mdiCheckCircle, mdiCheckCircleOutline, mdiUnfoldMoreHorizontal } from '../../../icon/index.js';
9
+ import NoData from '../../../no-data/components/no-data/no-data.svelte';
10
+ import { SvelteSet } from 'svelte/reactivity';
11
+ import InputField from '../input-field/input-field.svelte';
12
+ import SearchField from '../search-field/search-field.svelte';
13
+ import type { ComboboxFieldProps, InputFieldProps } from '../../types';
14
+
15
+ let {
16
+ appearance,
17
+ chipClassName,
18
+ className,
19
+ comboboxIconClassName,
20
+ comboboxIconPath = mdiUnfoldMoreHorizontal,
21
+ contentSnippet,
22
+ createButtonClassName,
23
+ createButtonLabel = 'Add',
24
+ displayClassName,
25
+ displayFieldName = 'name',
26
+ displayItemsCount,
27
+ dropdownBodyClassName,
28
+ dropdownBodySnippet,
29
+ dropdownClassName,
30
+ dropdownFooterClassName,
31
+ dropdownFooterSnippet,
32
+ dropdownHeaderClassName,
33
+ dropdownHeaderSnippet,
34
+ emptyMessage = 'No items exists!',
35
+ emptyMessageSnippet,
36
+ hasComboboxIcon = true,
37
+ hasDropdownFooter,
38
+ hasDropdownFooterCreateButton,
39
+ hasDropdownHeader,
40
+ hasDropdownHeaderSearch,
41
+ hasCheckbox,
42
+ iconClassName,
43
+ iconPathFieldName,
44
+ id,
45
+ identityFieldName = '_id',
46
+ itemClassName,
47
+ items,
48
+ multiple,
49
+ name,
50
+ onCreateButtonClick,
51
+ onSearch,
52
+ searchClassName,
53
+ searchFieldName = 'name',
54
+ searchPlaceholder = 'Search...',
55
+ showChip,
56
+ size,
57
+ subtitleClassName,
58
+ subtitleFieldName,
59
+ titleClassName,
60
+ titleFieldName = 'name',
61
+ value = $bindable(null),
62
+ checkboxIconPath = mdiCheckCircle,
63
+ uncheckboxIconPath = mdiCheckCircleOutline,
64
+ checkboxIconClassName = '',
65
+ uncheckboxIconClassName = '',
66
+ checkboxClassName = '',
67
+ dropPosition = 'bottom',
68
+ itemTileSnippet,
69
+ onChange,
70
+ ...props
71
+ }: InputFieldProps & ComboboxFieldProps = $props();
72
+
73
+ let searchFieldRef: any | null = $state(null);
74
+
75
+ let isPlaced = $state(false);
76
+ let searchText: string = $state('');
77
+ let dropdownHeight = $state(0);
78
+ let windowScrollY = $state(0);
79
+ let bodyHeight: number = $state(0);
80
+
81
+ let placementClassName = $derived.by(() => {
82
+ if (!isPlaced) return 'mt-1';
83
+
84
+ const rect = inputFieldRef.getBoundingClientRect();
85
+ const spaceBelow = window.innerHeight - rect.bottom;
86
+ const spaceAbove = rect.top;
87
+
88
+ let placement;
89
+
90
+ switch (dropPosition) {
91
+ case 'top':
92
+ placement = 'bottom-full mb-1';
93
+ break;
94
+ case 'middle':
95
+ placement = '-translate-y-1/2 top-1/2';
96
+ break;
97
+ default:
98
+ placement = 'mt-1';
99
+ }
100
+
101
+ if (dropPosition === 'bottom' && spaceBelow < dropdownHeight && spaceAbove > dropdownHeight) {
102
+ placement = 'bottom-full mb-1';
103
+ } else if (
104
+ dropPosition === 'top' &&
105
+ spaceAbove < dropdownHeight &&
106
+ spaceBelow > dropdownHeight
107
+ ) {
108
+ placement = 'mt-1';
109
+ } else if (dropPosition === 'middle') {
110
+ const spaceNeeded = dropdownHeight / 2;
111
+ if (spaceAbove < spaceNeeded || spaceBelow < spaceNeeded) {
112
+ placement = spaceAbove > spaceBelow ? 'bottom-full mb-1' : 'mt-1';
113
+ }
114
+ }
115
+
116
+ return placement;
117
+ });
118
+
119
+ let selectedItemsSet: SvelteSet<any> = $derived(
120
+ value ? new SvelteSet<any>(Array.isArray(value) ? value : [value]) : new SvelteSet<any>()
121
+ );
122
+
123
+ let comboboxIconSizeClassName = $derived.by(() => {
124
+ if (size) {
125
+ switch (size) {
126
+ case 'lg':
127
+ return '!h-7 !w-7';
128
+ case 'md':
129
+ return '!h-6 !w-6';
130
+ case 'sm':
131
+ return '!h-5 !w-5';
132
+ case 'xs':
133
+ return '!h-4 !w-4';
134
+ }
135
+ }
136
+ });
137
+
138
+ let hasPrimitiveItemsData = $derived.by(() => {
139
+ if (items) {
140
+ let firstItem = items[0];
141
+ return (
142
+ typeof firstItem == 'string' || typeof firstItem == 'number' || firstItem instanceof Date
143
+ );
144
+ }
145
+ return false;
146
+ });
147
+
148
+ let _value = $derived.by(() => {
149
+ return selectedItemsSet?.size ? '&nbsp;' : '';
150
+ });
151
+
152
+ let displayItems: string[] = $derived.by(() => {
153
+ let array = Array.from(selectedItemsSet);
154
+ let results = array.map((id) => {
155
+ if (hasPrimitiveItemsData) {
156
+ return id;
157
+ } else {
158
+ let item = itemsIdentityMap[id];
159
+ if (item) {
160
+ if (displayFieldName && item.hasOwnProperty(displayFieldName)) {
161
+ return item[displayFieldName];
162
+ }
163
+ }
164
+ }
165
+ });
166
+ return results;
167
+ });
168
+
169
+ let displayItemsTitle = $derived(displayItems.join(', '));
170
+
171
+ let displayText: string = $derived.by(() => {
172
+ let results: string[] = displayItems;
173
+ if (!showChip) {
174
+ if (results?.length) {
175
+ if (multiple) {
176
+ let res: string = results.join(', ');
177
+ if (displayItemsCount != null && displayItemsCount > 1) {
178
+ res = results.slice(0, displayItemsCount).join(', ');
179
+ if (results.length > displayItemsCount) {
180
+ res += `<span class="text-gray-400 px-2">+ ${results.length - displayItemsCount} </span>`;
181
+ }
182
+ }
183
+ return res;
184
+ } else {
185
+ return results[0] || '';
186
+ }
187
+ }
188
+ }
189
+
190
+ return '';
191
+ });
192
+
193
+ let preparedItems = $derived.by(() => {
194
+ return (items || []).map((item, index) => {
195
+ let res: any = {};
196
+ if (hasPrimitiveItemsData) {
197
+ res[identityFieldName] = item;
198
+ res[titleFieldName] = item;
199
+ res[searchFieldName] = item;
200
+ } else {
201
+ res = item;
202
+ }
203
+ return res;
204
+ });
205
+ });
206
+
207
+ let itemsIdentityMap: any = $derived.by(() => {
208
+ return preparedItems.reduce((acc, val) => {
209
+ acc[val[identityFieldName]] = val;
210
+ return acc;
211
+ }, {});
212
+ });
213
+
214
+ let filteredItems = $derived.by(() => {
215
+ if (searchText) {
216
+ return preparedItems.filter((item: any) => {
217
+ return (item[searchFieldName] || '').toLowerCase().indexOf(searchText) >= 0;
218
+ });
219
+ } else {
220
+ return [...preparedItems];
221
+ }
222
+ });
223
+
224
+ let inputFieldRef: any | null = $state(null);
225
+
226
+ export function focus() {
227
+ inputFieldRef?.focus();
228
+ }
229
+
230
+ function toggleDropdown() {
231
+ if (isPlaced) {
232
+ closeDropdown();
233
+ } else {
234
+ openDropdown();
235
+ }
236
+ }
237
+
238
+ function closeDropdown() {
239
+ searchText = '';
240
+ isPlaced = false;
241
+ focus();
242
+ }
243
+
244
+ function openDropdown() {
245
+ isPlaced = true;
246
+ }
247
+
248
+ function handleInputClick() {
249
+ toggleDropdown();
250
+ }
251
+
252
+ function handleBackdropClick() {
253
+ toggleDropdown();
254
+ }
255
+
256
+ function handleKeyDown(event: KeyboardEvent) {
257
+ if (event.key === 'Escape') {
258
+ closeDropdown();
259
+ } else if (event.key === 'Enter' || event.key === ' ') {
260
+ event.preventDefault(); // Prevent default action for spacebar to avoid scrolling
261
+ toggleDropdown();
262
+ } else if (/^[a-zA-Z0-9]$/.test(event.key)) {
263
+ searchFieldRef && searchFieldRef.focus();
264
+ } else if (event.key === 'Backspace' || event.key === 'Delete') {
265
+ event.preventDefault(); // Prevent default action for these keys if necessary
266
+ selectedItemsSet.clear();
267
+ value = null;
268
+ }
269
+ }
270
+
271
+ function handleDropdownKeyDown(event: KeyboardEvent) {
272
+ if (event.key === 'Escape') {
273
+ closeDropdown();
274
+ }
275
+ }
276
+
277
+ function handleSearch(value: string) {
278
+ searchText = value;
279
+ }
280
+
281
+ function handleItemClick(ev: MouseEvent, item: any, index: number) {
282
+ let id = item[identityFieldName];
283
+ if (multiple) {
284
+ if (selectedItemsSet.has(id)) {
285
+ selectedItemsSet.delete(id);
286
+ } else {
287
+ selectedItemsSet.add(id);
288
+ }
289
+ } else {
290
+ selectedItemsSet.clear();
291
+ selectedItemsSet.add(id);
292
+ }
293
+
294
+ items = [...(items || [])];
295
+
296
+ let array = Array.from(selectedItemsSet);
297
+ if (array.length) {
298
+ value = multiple ? array : array[0];
299
+ } else {
300
+ value = null;
301
+ }
302
+
303
+ if (!multiple) {
304
+ closeDropdown();
305
+ }
306
+
307
+ onChange && onChange(value);
308
+
309
+ // console.log('handleItemClick', selectedItemsSet, value);
310
+ }
311
+ </script>
312
+
313
+ {#snippet rightIcon()}
314
+ <div class="px-1">
315
+ {#if hasComboboxIcon}
316
+ <Icon
317
+ path={comboboxIconPath}
318
+ className=" text-neutral-500 {comboboxIconSizeClassName} {comboboxIconClassName}"
319
+ />
320
+ {/if}
321
+ </div>
322
+ {/snippet}
323
+
324
+ {#snippet comboboxContentSnippet()}
325
+ {#if contentSnippet}
326
+ {@render contentSnippet()}
327
+ {:else if showChip}
328
+ <div class="flex items-center {displayClassName}" title={displayItemsTitle}>
329
+ {#each displayItems?.slice(0, displayItemsCount) as item, index}
330
+ <div
331
+ class="inline-flex items-center bg-neutral-200 text-neutral-700 text-sm font-medium px-2 mx-1 rounded-full text-nowrap {chipClassName}"
332
+ >
333
+ {item}
334
+ </div>
335
+ {/each}
336
+ {#if displayItemsCount && displayItems?.length > (displayItemsCount || 1)}
337
+ <div class="px-2 text-neutral-400">+ {displayItems?.length - (displayItemsCount || 1)}</div>
338
+ {/if}
339
+ </div>
340
+ {:else}
341
+ <div class="flex items-center {displayClassName}" title={displayItemsTitle}>
342
+ {@html displayText}
343
+ </div>
344
+ {/if}
345
+ {/snippet}
346
+
347
+ <svelte:window bind:scrollY={windowScrollY} />
348
+
349
+ <div class="relative">
350
+ <InputField
351
+ bind:this={inputFieldRef}
352
+ {...props}
353
+ value={_value}
354
+ type="text"
355
+ role="combobox"
356
+ onClick={handleInputClick}
357
+ className="pr-8 text-transparent {className}"
358
+ rightSnippet={rightIcon}
359
+ rightSnippetContainerClassName="pointer-events-none"
360
+ readonly
361
+ {id}
362
+ {name}
363
+ {size}
364
+ {appearance}
365
+ ariaControls="options"
366
+ ariaExpanded={isPlaced}
367
+ onKeyDown={handleKeyDown}
368
+ contentSnippet={comboboxContentSnippet}
369
+ title={displayItemsTitle || ''}
370
+ />
371
+ {#if isPlaced}
372
+ <button
373
+ id="backdrop"
374
+ class="fixed inset-0 z-10"
375
+ onclick={handleBackdropClick}
376
+ tabindex="-1"
377
+ aria-label="backdrop"
378
+ ></button>
379
+ <!-- svelte-ignore a11y_interactive_supports_focus -->
380
+ <div
381
+ bind:clientHeight={dropdownHeight}
382
+ class="absolute z-10 {placementClassName} max-h-80 w-full flex flex-col rounded-md bg-white dark:bg-neutral-900 text-neutral-600 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm {hasDropdownHeader
383
+ ? ''
384
+ : 'pt-1'} {hasDropdownFooter ? '' : 'pb-1'} {dropdownClassName}"
385
+ id="options"
386
+ role="listbox"
387
+ onkeydown={handleDropdownKeyDown}
388
+ >
389
+ {#if hasDropdownHeader}
390
+ <div
391
+ id="dropdown-header"
392
+ class=" flex items-center p-2 px-3 my-1 w-full {dropdownHeaderClassName}"
393
+ >
394
+ {#if dropdownHeaderSnippet}
395
+ {@render dropdownHeaderSnippet()}
396
+ {:else if hasDropdownHeaderSearch}
397
+ <SearchField
398
+ bind:this={searchFieldRef}
399
+ value={searchText}
400
+ name="search"
401
+ placeholder={searchPlaceholder}
402
+ className="w-full {searchClassName}"
403
+ onSearch={handleSearch}
404
+ />
405
+ {/if}
406
+ </div>
407
+ {/if}
408
+ <div
409
+ id="dropdown-body"
410
+ class="flex-grow overflow-y-auto h-60 {dropdownBodyClassName}"
411
+ bind:clientHeight={bodyHeight}
412
+ >
413
+ {#if dropdownBodySnippet}
414
+ {@render dropdownBodySnippet()}
415
+ {:else if filteredItems?.length}
416
+ <ul>
417
+ <VirtualScrollingList
418
+ items={filteredItems}
419
+ itemHeight={56}
420
+ containerHeight={bodyHeight}
421
+ >
422
+ {#snippet itemSnippet(item, index)}
423
+ {@const isSelected = selectedItemsSet.has(item[identityFieldName])}
424
+ <li
425
+ class="select-none h-full"
426
+ id="item-{index}"
427
+ role="option"
428
+ tabindex="-1"
429
+ aria-selected={item.isChecked}
430
+ >
431
+ {#if itemTileSnippet}
432
+ <ButtonListItem
433
+ onClick={(ev) => handleItemClick(ev, item, index)}
434
+ className="h-full"
435
+ >
436
+ {@render itemTileSnippet(item, index)}
437
+ {#if hasCheckbox}
438
+ <div>
439
+ <Icon
440
+ path={isSelected ? checkboxIconPath : uncheckboxIconPath}
441
+ className="w-5 h-5 {checkboxClassName} {isSelected
442
+ ? `text-primary ${checkboxIconClassName}`
443
+ : `text-neutral-400 ${uncheckboxIconClassName}`}"
444
+ />
445
+ </div>
446
+ {/if}
447
+ </ButtonListItem>
448
+ {:else}
449
+ <ButtonListItem
450
+ title={item[titleFieldName] || ''}
451
+ subtitle={item[subtitleFieldName || ''] || ''}
452
+ {index}
453
+ {hasCheckbox}
454
+ className=" {itemClassName}"
455
+ titleClassName=" {titleClassName}"
456
+ subtitleClassName=" {subtitleClassName}"
457
+ isChecked={isSelected}
458
+ {checkboxIconPath}
459
+ {uncheckboxIconPath}
460
+ {checkboxIconClassName}
461
+ {uncheckboxIconClassName}
462
+ {checkboxClassName}
463
+ onClick={(ev) => handleItemClick(ev, item, index)}
464
+ />
465
+ {/if}
466
+ </li>
467
+ {/snippet}
468
+ </VirtualScrollingList>
469
+ </ul>
470
+ {:else if emptyMessageSnippet}
471
+ {@render emptyMessageSnippet()}
472
+ {:else}
473
+ <NoData message={emptyMessage} />
474
+ {/if}
475
+ </div>
476
+
477
+ {#if hasDropdownFooter}
478
+ <div id="dropdown-footer" class="flex justify-end gap-3 p-2 px-3 {dropdownFooterClassName}">
479
+ {#if dropdownFooterSnippet}
480
+ {@render dropdownFooterSnippet()}
481
+ {:else if hasDropdownFooterCreateButton}
482
+ <Button
483
+ label={createButtonLabel}
484
+ className="px-3 py-1 {createButtonClassName}"
485
+ onClick={onCreateButtonClick}
486
+ />
487
+ {/if}
488
+ </div>
489
+ {/if}
490
+ </div>
491
+ {/if}
492
+ </div>
@@ -0,0 +1,7 @@
1
+ import type { ComboboxFieldProps, InputFieldProps } from '../../types';
2
+ type $$ComponentProps = InputFieldProps & ComboboxFieldProps;
3
+ declare const ComboboxField: import("svelte").Component<$$ComponentProps, {
4
+ focus: () => void;
5
+ }, "value">;
6
+ type ComboboxField = ReturnType<typeof ComboboxField>;
7
+ export default ComboboxField;
@@ -0,0 +1,40 @@
1
+ <script lang="ts">
2
+ import { dateFormat, toDate } from '../../../../../services/index.js';
3
+ import type { InputFieldProps } from '../../types';
4
+ import InputField from '../input-field/input-field.svelte';
5
+
6
+ let {
7
+ value = $bindable(null),
8
+ ...props
9
+ }: InputFieldProps & { value?: Date | string | number | null | undefined } = $props();
10
+
11
+ let _value: string | undefined = $derived.by(() => {
12
+ if (value) {
13
+ return dateFormat(toDate(value)!, 'YYYY-MM-DD') as string;
14
+ }
15
+ });
16
+
17
+ let inputFieldRef: any | null = $state(null);
18
+
19
+ export function focus() {
20
+ inputFieldRef?.focus();
21
+ }
22
+
23
+ export function getElement() {
24
+ return inputFieldRef;
25
+ }
26
+
27
+ export function select() {
28
+ inputFieldRef && inputFieldRef.select();
29
+ }
30
+
31
+ function handleInput(ev: Event) {
32
+ let target: HTMLInputElement = ev?.target as HTMLInputElement;
33
+ if (target?.value) {
34
+ value = toDate(target?.value) as Date;
35
+ console.log('handleInput value', value);
36
+ }
37
+ }
38
+ </script>
39
+
40
+ <InputField bind:this={inputFieldRef} {...props} type="date" value={_value} onInput={handleInput} />
@@ -0,0 +1,11 @@
1
+ import type { InputFieldProps } from '../../types';
2
+ type $$ComponentProps = InputFieldProps & {
3
+ value?: Date | string | number | null | undefined;
4
+ };
5
+ declare const DateField: import("svelte").Component<$$ComponentProps, {
6
+ focus: () => void;
7
+ getElement: () => any;
8
+ select: () => void;
9
+ }, "value">;
10
+ type DateField = ReturnType<typeof DateField>;
11
+ export default DateField;
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import InputField from '../input-field/input-field.svelte';
3
+ import type { InputFieldProps } from '../../types';
4
+
5
+ let { value = $bindable(), ...props }: InputFieldProps = $props();
6
+
7
+ let inputFieldRef: any | null = $state(null);
8
+
9
+ export function focus() {
10
+ inputFieldRef?.focus();
11
+ }
12
+
13
+ export function getElement() {
14
+ return inputFieldRef;
15
+ }
16
+
17
+ export function select() {
18
+ inputFieldRef && inputFieldRef.select();
19
+ }
20
+ </script>
21
+
22
+ <InputField bind:this={inputFieldRef} {...props} type="datetime-local" bind:value />
@@ -0,0 +1,8 @@
1
+ import type { InputFieldProps } from '../../types';
2
+ declare const DatetimeField: import("svelte").Component<InputFieldProps, {
3
+ focus: () => void;
4
+ getElement: () => any;
5
+ select: () => void;
6
+ }, "value">;
7
+ type DatetimeField = ReturnType<typeof DatetimeField>;
8
+ export default DatetimeField;
@@ -0,0 +1,27 @@
1
+ <script lang="ts">
2
+ import InputField from '../input-field/input-field.svelte';
3
+ import type { InputFieldProps } from '../../types';
4
+
5
+ let { value = $bindable(''), ...props }: InputFieldProps = $props();
6
+ let inputFieldRef: any | null = $state(null);
7
+
8
+ export function focus() {
9
+ inputFieldRef?.focus();
10
+ }
11
+
12
+ export function getElement() {
13
+ return inputFieldRef;
14
+ }
15
+
16
+ export function select() {
17
+ inputFieldRef && inputFieldRef.select();
18
+ }
19
+ </script>
20
+
21
+ <InputField
22
+ bind:this={inputFieldRef}
23
+ {...props}
24
+ type="email"
25
+ maxlength={props?.maxlength || 80}
26
+ bind:value
27
+ />
@@ -0,0 +1,8 @@
1
+ import type { InputFieldProps } from '../../types';
2
+ declare const EmailField: import("svelte").Component<InputFieldProps, {
3
+ focus: () => void;
4
+ getElement: () => any;
5
+ select: () => void;
6
+ }, "value">;
7
+ type EmailField = ReturnType<typeof EmailField>;
8
+ export default EmailField;