@cloudparker/moldex.js 0.0.27 → 0.0.29

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 (79) hide show
  1. package/dist/services/dialog/dialog-service.d.ts +16 -0
  2. package/dist/services/dialog/dialog-service.js +23 -1
  3. package/dist/services/utils/utils-service.d.ts +3 -0
  4. package/dist/services/utils/utils-service.js +26 -0
  5. package/dist/tailwind.css +1 -1
  6. package/dist/views/core/button/components/button/button.svelte +5 -3
  7. package/dist/views/core/button/components/button/button.svelte.d.ts +19 -18
  8. package/dist/views/core/button/components/button-back/button-back.svelte +32 -0
  9. package/dist/views/core/button/components/button-back/button-back.svelte.d.ts +24 -0
  10. package/dist/views/core/button/components/button-close/button-close.svelte +5 -0
  11. package/dist/views/core/button/components/button-close/button-close.svelte.d.ts +19 -0
  12. package/dist/views/core/button/components/button-close-icon/button-close-icon.svelte +33 -0
  13. package/dist/views/core/button/components/button-close-icon/button-close-icon.svelte.d.ts +25 -0
  14. package/dist/views/core/button/components/button-list-item/button-list-item.svelte +28 -24
  15. package/dist/views/core/button/components/button-list-item/button-list-item.svelte.d.ts +11 -11
  16. package/dist/views/core/button/components/button-menu/button-menu.svelte +19 -20
  17. package/dist/views/core/button/components/button-menu/button-menu.svelte.d.ts +7 -7
  18. package/dist/views/core/button/components/button-ok/button-ok.svelte +5 -0
  19. package/dist/views/core/button/components/button-ok/button-ok.svelte.d.ts +19 -0
  20. package/dist/views/core/button/index.d.ts +5 -1
  21. package/dist/views/core/button/index.js +10 -1
  22. package/dist/views/core/dialog/components/dialog/dialog.svelte +94 -84
  23. package/dist/views/core/dialog/components/dialog/dialog.svelte.d.ts +4 -3
  24. package/dist/views/core/dialog/components/list-dialog/list-picker-dialog.svelte +145 -0
  25. package/dist/views/core/dialog/components/list-dialog/list-picker-dialog.svelte.d.ts +41 -0
  26. package/dist/views/core/icon/components/icon/icon.svelte +5 -3
  27. package/dist/views/core/icon/components/icon/icon.svelte.d.ts +1 -0
  28. package/dist/views/core/icon/services/icon-path-service.d.ts +6 -0
  29. package/dist/views/core/icon/services/icon-path-service.js +6 -0
  30. package/dist/views/core/index.d.ts +2 -0
  31. package/dist/views/core/index.js +2 -0
  32. package/dist/views/core/input/components/color-field/color-field.svelte +104 -0
  33. package/dist/views/core/input/components/color-field/color-field.svelte.d.ts +23 -0
  34. package/dist/views/core/input/components/combobox-field/combobox-field.svelte +385 -0
  35. package/dist/views/core/input/components/combobox-field/combobox-field.svelte.d.ts +63 -0
  36. package/dist/views/core/input/components/date-field/date-field.svelte +9 -0
  37. package/dist/views/core/input/components/date-field/date-field.svelte.d.ts +21 -0
  38. package/dist/views/core/input/components/datetime-field/datetime-field.svelte +9 -0
  39. package/dist/views/core/input/components/datetime-field/datetime-field.svelte.d.ts +21 -0
  40. package/dist/views/core/input/components/email-field/email-field.svelte +9 -0
  41. package/dist/views/core/input/components/email-field/email-field.svelte.d.ts +21 -0
  42. package/dist/views/core/input/components/file-field/file-field.svelte +80 -0
  43. package/dist/views/core/input/components/file-field/file-field.svelte.d.ts +25 -0
  44. package/dist/views/core/input/components/input-field/input-field.svelte +282 -0
  45. package/dist/views/core/input/components/input-field/input-field.svelte.d.ts +81 -0
  46. package/dist/views/core/{form → input}/components/label/label.svelte +1 -3
  47. package/dist/views/core/input/components/number-field/number-field.svelte +9 -0
  48. package/dist/views/core/input/components/number-field/number-field.svelte.d.ts +21 -0
  49. package/dist/views/core/input/components/password-field/password-field.svelte +72 -0
  50. package/dist/views/core/input/components/password-field/password-field.svelte.d.ts +24 -0
  51. package/dist/views/core/input/components/phone-field/phone-field.svelte +76 -0
  52. package/dist/views/core/input/components/phone-field/phone-field.svelte.d.ts +24 -0
  53. package/dist/views/core/input/components/range-field/range-field.svelte +53 -0
  54. package/dist/views/core/{form/components/input-field/input-field.svelte.d.ts → input/components/range-field/range-field.svelte.d.ts} +16 -29
  55. package/dist/views/core/input/components/search-field/search-field.svelte +53 -0
  56. package/dist/views/core/input/components/search-field/search-field.svelte.d.ts +24 -0
  57. package/dist/views/core/input/components/text-field/text-field.svelte +9 -0
  58. package/dist/views/core/{form → input}/components/text-field/text-field.svelte.d.ts +5 -12
  59. package/dist/views/core/input/components/textarea-field/textarea-field.svelte +9 -0
  60. package/dist/views/core/input/components/textarea-field/textarea-field.svelte.d.ts +21 -0
  61. package/dist/views/core/input/components/time-field/time-field.svelte +9 -0
  62. package/dist/views/core/input/components/time-field/time-field.svelte.d.ts +21 -0
  63. package/dist/views/core/input/index.d.ts +19 -0
  64. package/dist/views/core/input/index.js +19 -0
  65. package/dist/views/core/navbar/components/navbar/navbar.svelte +11 -11
  66. package/dist/views/core/navbar/components/navbar/navbar.svelte.d.ts +3 -3
  67. package/dist/views/core/no-data/components/no-data/no-data.svelte +34 -0
  68. package/dist/views/core/no-data/components/no-data/no-data.svelte.d.ts +27 -0
  69. package/dist/views/core/no-data/index.d.ts +2 -0
  70. package/dist/views/core/no-data/index.js +2 -0
  71. package/dist/views/core/text/components/text-country/text-country.svelte +2 -1
  72. package/dist/views/core/text/components/text-country-state/text-country-state.svelte +1 -1
  73. package/dist/views/core/toast/components/toast/toast.svelte +1 -1
  74. package/package.json +2 -2
  75. package/dist/views/core/form/components/input-field/input-field.svelte +0 -85
  76. package/dist/views/core/form/components/text-field/text-field.svelte +0 -26
  77. package/dist/views/core/form/index.d.ts +0 -0
  78. package/dist/views/core/form/index.js +0 -1
  79. /package/dist/views/core/{form → input}/components/label/label.svelte.d.ts +0 -0
@@ -21,8 +21,8 @@ let {
21
21
  rightIconClassName = "",
22
22
  dropIconPath = mdiChevronDown,
23
23
  dropIconClassName = "",
24
- labelClassName = "",
25
- label = "Button",
24
+ titleClassName = "",
25
+ title = "Button",
26
26
  dropdownStyle = "",
27
27
  dropdownClassName = "",
28
28
  hasCheck = false,
@@ -39,15 +39,15 @@ let {
39
39
  checkClassName = "",
40
40
  listIconClassName = "",
41
41
  listImgClassName = "",
42
- listLabelClassName = "",
43
- listDescClassName = "",
42
+ listTitleClassName = "",
43
+ listSubtitleClassName = "",
44
44
  dividerClassName = "",
45
45
  onmenuclick = (ev, item, index) => {
46
46
  },
47
47
  children,
48
- buttonChildren,
49
- menuItemChildren,
50
- menuItemInnerChildren
48
+ buttonSnippet,
49
+ menuItemSnippet,
50
+ menuItemInnerSnippet
51
51
  } = $props();
52
52
  let expanded = $state(false);
53
53
  let dropdownState = $state(1 /* CLOSED */);
@@ -103,8 +103,8 @@ $effect(() => {
103
103
  >
104
104
  <span class="sr-only">{screenOnlyDesc}</span>
105
105
  <div class="flex items-center flex-nowrap gap-2">
106
- {#if buttonChildren}
107
- {@render buttonChildren()}
106
+ {#if buttonSnippet}
107
+ {@render buttonSnippet()}
108
108
  {:else}
109
109
  {#if imgSrc}
110
110
  <img class="h-8 w-8 rounded-full bg-gray-50 {imgClassName}" src={imgSrc} alt={imgAlt} />
@@ -112,9 +112,9 @@ $effect(() => {
112
112
  {#if leftIconPath}
113
113
  <Icon path={leftIconPath} className={leftIconClassName} />
114
114
  {/if}
115
- {#if label}
116
- <span class="text-nowrap {labelClassName}">
117
- {@html label}
115
+ {#if title}
116
+ <span class="text-nowrap {titleClassName}">
117
+ {@html title}
118
118
  </span>
119
119
  {/if}
120
120
  {#if rightIconPath}
@@ -152,15 +152,14 @@ $effect(() => {
152
152
  {#each options as menu, index (menu.id || index)}
153
153
  {#if menu?.divider}
154
154
  <div class="border-t border-gray-200 {dividerClassName}"></div>
155
- {:else if menuItemChildren}
156
- {@render menuItemChildren(menu, index)}
155
+ {:else if menuItemSnippet}
156
+ {@render menuItemSnippet(menu, index)}
157
157
  {:else}
158
158
  <ButtonListItem
159
159
  item={menu}
160
160
  {index}
161
- checked={selectedMenu == menu}
162
161
  {hasCheck}
163
- listId={id}
162
+ id={id}
164
163
  className={menuItemClassName}
165
164
  {uncheckIconPath}
166
165
  {checkIconPath}
@@ -169,10 +168,10 @@ $effect(() => {
169
168
  {checkClassName}
170
169
  iconClassName={listIconClassName}
171
170
  imgClassName={listImgClassName}
172
- labelClassName={listLabelClassName}
173
- descClassName={listDescClassName}
174
- children={menuItemInnerChildren}
175
- onclick={handlemenuItemClick}
171
+ titleClassName={listTitleClassName}
172
+ subtitleClassName={listSubtitleClassName}
173
+ children={menuItemInnerSnippet}
174
+ onClick={handlemenuItemClick}
176
175
  />
177
176
  {/if}
178
177
  {/each}
@@ -27,8 +27,8 @@ declare const ButtonMenu: $$__sveltets_2_IsomorphicComponent<{
27
27
  leftIconClassName?: string;
28
28
  rightIconPath?: string;
29
29
  rightIconClassName?: string;
30
- label?: string | any;
31
- labelClassName?: string;
30
+ title?: string | any;
31
+ titleClassName?: string;
32
32
  dropdownClassName?: string;
33
33
  dropdownStyle?: string;
34
34
  hasCheck?: boolean;
@@ -45,16 +45,16 @@ declare const ButtonMenu: $$__sveltets_2_IsomorphicComponent<{
45
45
  checkClassName?: string;
46
46
  listIconClassName?: string;
47
47
  listImgClassName?: string;
48
- listLabelClassName?: string;
49
- listDescClassName?: string;
48
+ listTitleClassName?: string;
49
+ listSubtitleClassName?: string;
50
50
  dividerClassName?: string;
51
51
  dropIconPath?: string;
52
52
  dropIconClassName?: string;
53
53
  onmenuclick?: (ev: MouseEvent, item: string | ListItemType, index: number) => void;
54
54
  children?: Snippet;
55
- buttonChildren?: Snippet;
56
- menuItemChildren?: Snippet<[ListItemType, number]>;
57
- menuItemInnerChildren?: Snippet<[ListItemType, number]>;
55
+ buttonSnippet?: Snippet;
56
+ menuItemSnippet?: Snippet<[ListItemType, number]>;
57
+ menuItemInnerSnippet?: Snippet<[ListItemType, number]>;
58
58
  }, {
59
59
  [evt: string]: CustomEvent<any>;
60
60
  }, {}, {}, "">;
@@ -0,0 +1,5 @@
1
+ <script lang="ts">import Button, {} from "../button/button.svelte";
2
+ let { className, ...props } = $props();
3
+ </script>
4
+
5
+ <Button {...props} className="bg-indigo-600 focus:bg-indigo-700 text-white p-2 px-4 {className}" />
@@ -0,0 +1,19 @@
1
+ import { type ButtonPropsType } from '../button/button.svelte';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
12
+ };
13
+ z_$$bindings?: Bindings;
14
+ }
15
+ declare const ButtonOk: $$__sveltets_2_IsomorphicComponent<ButtonPropsType, {
16
+ [evt: string]: CustomEvent<any>;
17
+ }, {}, {}, "">;
18
+ type ButtonOk = InstanceType<typeof ButtonOk>;
19
+ export default ButtonOk;
@@ -1,4 +1,8 @@
1
1
  import Button from './components/button/button.svelte';
2
+ import ButtonBack from './components/button-back/button-back.svelte';
3
+ import ButtonClose from './components/button-close/button-close.svelte';
4
+ import ButtonCloseIcon from './components/button-close-icon/button-close-icon.svelte';
2
5
  import ButtonListItem from './components/button-list-item/button-list-item.svelte';
3
6
  import ButtonMenu from './components/button-menu/button-menu.svelte';
4
- export { Button, ButtonListItem, ButtonMenu };
7
+ import ButtonOk from './components/button-ok/button-ok.svelte';
8
+ export { Button, ButtonBack, ButtonClose, ButtonCloseIcon, ButtonListItem, ButtonMenu, ButtonOk };
@@ -1,9 +1,18 @@
1
+ import ButtonBack from './components/button-back/button-back.svelte';
2
+ import ButtonCloseIcon from './components/button-close-icon/button-close-icon.svelte';
3
+ import ButtonClose from './components/button-close/button-close.svelte';
1
4
  import ButtonListItem from './components/button-list-item/button-list-item.svelte';
2
5
  import ButtonMenu from './components/button-menu/button-menu.svelte';
6
+ import ButtonOk from './components/button-ok/button-ok.svelte';
3
7
  import Button from './components/button/button.svelte';
4
8
 
5
9
  export {
6
10
  Button,
11
+ ButtonBack,
12
+ ButtonClose,
13
+ ButtonCloseIcon,
7
14
  ButtonListItem,
8
- ButtonMenu
15
+ ButtonMenu,
16
+ ButtonOk
9
17
  };
18
+
@@ -1,4 +1,6 @@
1
- <script lang="ts" context="module">export var DialogSizeEnum = /* @__PURE__ */ ((DialogSizeEnum2) => {
1
+ <script module lang="ts">import ButtonBack from "../../../button/components/button-back/button-back.svelte";
2
+ import ButtonClose from "../../../button/components/button-close-icon/button-close-icon.svelte";
3
+ export var DialogSizeEnum = /* @__PURE__ */ ((DialogSizeEnum2) => {
2
4
  DialogSizeEnum2["SM"] = "sm";
3
5
  DialogSizeEnum2["MD"] = "md";
4
6
  DialogSizeEnum2["LG"] = "lg";
@@ -49,12 +51,13 @@ let {
49
51
  submitButtonFormId = void 0,
50
52
  size = DialogSizeEnum.SM,
51
53
  bodyClassName = "",
54
+ bodyComponent,
52
55
  component,
53
56
  props = {},
54
57
  children,
55
- headerChildren,
56
- bodyChildren,
57
- footerChildren,
58
+ headerSnippet,
59
+ bodySnippet,
60
+ footerSnippet,
58
61
  onClose,
59
62
  onResult,
60
63
  onOkClick,
@@ -71,6 +74,7 @@ let dialogExports = {
71
74
  let isPlaced = $state(false);
72
75
  let isOpened = $state(false);
73
76
  let CustomComponent = $state(null);
77
+ let BodyComponent = $state(null);
74
78
  let result;
75
79
  let smSizeClassName = "w-11/12 sm:w-3/4 md:w-1/2 lg:w-1/3 xl:w-1/4";
76
80
  let mdSizeClassName = "w-11/12 sm:w-3/4 md:w-2/3 lg:w-1/2 xl:w-1/3";
@@ -148,6 +152,9 @@ function handleOkClick(event) {
148
152
  onOkClick(event, dialogExports);
149
153
  }
150
154
  }
155
+ $effect(() => {
156
+ BodyComponent = bodyComponent;
157
+ });
151
158
  $effect(() => {
152
159
  CustomComponent = component;
153
160
  });
@@ -167,93 +174,96 @@ $effect(() => {
167
174
  : 'rounded-lg shadow-xl'} {className}"
168
175
  onclick={(ev: MouseEvent) => ev.stopPropagation()}
169
176
  >
170
- {#if hasHeader}
171
- <div
172
- class="flex items-start gap-4 w-full cursor-default py-2 {hasHeaderShadow
173
- ? 'border-b shadow-sm'
174
- : ''} {headerClassName}"
175
- >
176
- <div>
177
- {#if hasHeaderBack}
177
+ {#if CustomComponent?.length == 2}
178
+ <CustomComponent {...{ ...props }} {...{ ...dialogExports }} />
179
+ {:else}
180
+ {#if hasHeader}
181
+ <div
182
+ class="flex items-start gap-4 w-full cursor-default py-2 {hasHeaderShadow
183
+ ? 'border-b shadow-sm'
184
+ : ''} {headerClassName}"
185
+ >
186
+ <div>
187
+ {#if hasHeaderBack}
188
+ <ButtonBack
189
+ iconPath={headerBackIconPath}
190
+ iconClassName={headerBackIconClassName}
191
+ className={headerBackButtonClassName}
192
+ onClick={handleClose}
193
+ />
194
+ {/if}
195
+ </div>
196
+ <div class="py-2">
197
+ {#if hasTitle}
198
+ <div class="text-xl {titleClassName}">{title || ''}</div>
199
+ {/if}
200
+ {#if hasSubtitle}
201
+ <div class="text-sm text-gray-500 {subtitleClassName}">{subtitle || ''}</div>
202
+ {/if}
203
+ </div>
204
+ <div class="flex-grow">
205
+ {#if headerSnippet}
206
+ {@render headerSnippet(dialogExports)}
207
+ {/if}
208
+ </div>
209
+ <div>
210
+ {#if hasHeaderClose}
211
+ <ButtonClose
212
+ className={headerCloseButtonClassName}
213
+ iconPath={headerCloseIconPath}
214
+ iconClassName={headerCloseIconClassName}
215
+ onClick={handleClose}
216
+ />
217
+ {/if}
218
+ </div>
219
+ </div>
220
+ {/if}
221
+
222
+ <div class="flex-grow overflow-y-auto {bodyClassName}">
223
+ {#if children}
224
+ {@render children()}
225
+ {:else if bodySnippet}
226
+ {@render bodySnippet(dialogExports)}
227
+ {:else if BodyComponent?.length == 2}
228
+ <BodyComponent {...{ ...props }} {...{ ...dialogExports }} />
229
+ {/if}
230
+ </div>
231
+
232
+ {#if hasFooter}
233
+ <div
234
+ class="flex items-center justify-end p-4 gap-4 {hasFooterShadow
235
+ ? 'border-t'
236
+ : ''} {footerClassName}"
237
+ >
238
+ <div class="flex-grow">
239
+ {#if footerSnippet}
240
+ {@render footerSnippet(dialogExports)}
241
+ {/if}
242
+ </div>
243
+ {#if hasFooterOkButton}
178
244
  <Button
179
- iconPath={headerBackIconPath}
180
- className="w-12 h-12 p-3 rounded-full text-gray-500 hover:text-gray-600 hover:bg-gray-50 {headerBackButtonClassName}"
181
- iconClassName={headerBackIconClassName}
182
- onclick={handleClose}
245
+ id="btn-ok"
246
+ form={submitButtonFormId}
247
+ type={submitButtonFormId ? 'submit' : footerOkButtonType}
248
+ className="p-2 px-5 rounded bg-indigo-600 hover:bg-indigo-700 focus:bg-indigo-700 text-white {footerOkButtonClassName}"
249
+ label={footerOkLable}
250
+ disabled={footerOkButtonDisabled}
251
+ spinner={footerOkButtonSpinner}
252
+ spinnerClassName="text-white w-4 h-4"
253
+ onClick={handleOkClick}
183
254
  />
184
255
  {/if}
185
- </div>
186
- <div class="py-2">
187
- {#if hasTitle}
188
- <div class="text-xl {titleClassName}">{title || ''}</div>
189
- {/if}
190
- {#if hasSubtitle}
191
- <div class="text-sm text-gray-500 {subtitleClassName}">{subtitle || ''}</div>
192
- {/if}
193
- </div>
194
- <div class="flex-grow">
195
- {#if headerChildren}
196
- {@render headerChildren(dialogExports)}
197
- {/if}
198
- </div>
199
- <div>
200
- {#if hasHeaderClose}
256
+ {#if hasFooterCloseButton}
201
257
  <Button
202
- id="close"
203
- className="w-12 h-12 p-3 rounded-full text-gray-500 hover:text-gray-600 hover:bg-gray-50 {headerCloseButtonClassName}"
204
- iconPath={headerCloseIconPath}
205
- iconClassName={headerCloseIconClassName}
206
- onclick={handleClose}
207
- ></Button>
258
+ id="btn-close"
259
+ type="button"
260
+ className="p-2 px-5 rounded bg-gray-100 hover:bg-gray-200 {footerCloseButtonClassName}"
261
+ label={footerCloseLabel}
262
+ onClick={handleClose}
263
+ />
208
264
  {/if}
209
265
  </div>
210
- </div>
211
- {/if}
212
-
213
- <div class="flex-grow overflow-y-auto {bodyClassName}">
214
- {#if children}
215
- {@render children()}
216
- {:else if bodyChildren}
217
- {@render bodyChildren(dialogExports)}
218
- {:else if CustomComponent?.length == 2}
219
- <CustomComponent {...{ ...props }} {...{ ...dialogExports }} />
220
266
  {/if}
221
- </div>
222
-
223
- {#if hasFooter}
224
- <div
225
- class="flex items-center justify-end p-4 gap-4 {hasFooterShadow
226
- ? 'border-t'
227
- : ''} {footerClassName}"
228
- >
229
- <div class="flex-grow">
230
- {#if footerChildren}
231
- {@render footerChildren(dialogExports)}
232
- {/if}
233
- </div>
234
- {#if hasFooterOkButton}
235
- <Button
236
- id="btn-ok"
237
- form={submitButtonFormId}
238
- type={submitButtonFormId ? 'submit' : footerOkButtonType}
239
- className="p-2 px-5 rounded bg-indigo-600 hover:bg-indigo-700 focus:bg-indigo-700 text-white {footerOkButtonClassName}"
240
- label={footerOkLable}
241
- disabled={footerOkButtonDisabled}
242
- spinner={footerOkButtonSpinner}
243
- spinnerClassName="text-white w-4 h-4"
244
- onclick={handleOkClick}
245
- />
246
- {/if}
247
- {#if hasFooterCloseButton}
248
- <Button
249
- id="btn-close"
250
- type="button"
251
- className="p-2 px-5 rounded bg-gray-100 hover:bg-gray-200 {footerCloseButtonClassName}"
252
- label={footerCloseLabel}
253
- onclick={handleClose}
254
- />
255
- {/if}
256
- </div>
257
267
  {/if}
258
268
  </div>
259
269
  {/snippet}
@@ -47,13 +47,14 @@ export type DialogPropsType = {
47
47
  footerOkButtonDisabled?: boolean;
48
48
  submitButtonFormId?: string;
49
49
  bodyClassName?: string;
50
+ bodyComponent?: any;
50
51
  component?: any;
51
52
  props?: any;
52
53
  size?: DialogSizeEnum;
53
54
  children?: Snippet;
54
- headerChildren?: Snippet<[dialogExports: DialogExportsType]>;
55
- bodyChildren?: Snippet<[dialogExports: DialogExportsType]>;
56
- footerChildren?: Snippet<[dialogExports: DialogExportsType]>;
55
+ headerSnippet?: Snippet<[dialogExports: DialogExportsType]>;
56
+ bodySnippet?: Snippet<[dialogExports: DialogExportsType]>;
57
+ footerSnippet?: Snippet<[dialogExports: DialogExportsType]>;
57
58
  onClose?: () => void;
58
59
  onResult?: (value: any) => void;
59
60
  onOkClick?: (ev: MouseEvent | TouchEvent, options: DialogExportsType) => void;
@@ -0,0 +1,145 @@
1
+ <script lang="ts">import { ButtonListItem } from "../../..";
2
+ import ButtonBack from "../../../button/components/button-back/button-back.svelte";
3
+ import ButtonCloseIcon from "../../../button/components/button-close-icon/button-close-icon.svelte";
4
+ import ButtonClose from "../../../button/components/button-close/button-close.svelte";
5
+ import ButtonOk from "../../../button/components/button-ok/button-ok.svelte";
6
+ import SearchField from "../../../input/components/search-field/search-field.svelte";
7
+ let {
8
+ value,
9
+ multiple = false,
10
+ items,
11
+ itemTitle,
12
+ itemSubtitle,
13
+ hasCheckbox,
14
+ hasArrow,
15
+ search,
16
+ identity,
17
+ itemTitleClassName,
18
+ itemSubtitleClassName,
19
+ okButtonLable = "Select",
20
+ okButtonClassName = "",
21
+ closeButtonLabel = "Close",
22
+ closeButtonClassName = "",
23
+ itemSnippet,
24
+ closeDialog,
25
+ setResult
26
+ } = $props();
27
+ let searchText = $state("");
28
+ let idField = Symbol("_id");
29
+ let searchField = Symbol("_search");
30
+ let selectedItemsSet = $derived.by(() => {
31
+ let set = /* @__PURE__ */ new Set();
32
+ if (value != null) {
33
+ if (Array.isArray(value)) {
34
+ value.forEach((v) => set.add(v));
35
+ } else {
36
+ set.add(value);
37
+ }
38
+ }
39
+ return set;
40
+ });
41
+ let preparedItems = $derived.by(() => {
42
+ return (items || []).map((item, index) => {
43
+ let res = {
44
+ [idField]: identity && item.hasOwnProperty(identity) ? item[identity] : index
45
+ };
46
+ if (itemTitle) {
47
+ res.title = item.hasOwnProperty(itemTitle) ? item[itemTitle] : itemTitle;
48
+ }
49
+ if (itemSubtitle) {
50
+ res.subtitle = item.hasOwnProperty(itemSubtitle) ? item[itemSubtitle] : itemSubtitle;
51
+ }
52
+ if (search) {
53
+ res[searchField] = (item[search] || "").trim().toLowerCase();
54
+ } else {
55
+ res[searchField] = `${res.title || ""} ${res.subtitle || ""}`.trim().toLowerCase();
56
+ }
57
+ if (selectedItemsSet.has(res[idField])) {
58
+ res.isChecked = true;
59
+ } else {
60
+ res.isChecked = false;
61
+ }
62
+ return res;
63
+ });
64
+ });
65
+ let filteredItems = $derived.by(() => {
66
+ if (searchText) {
67
+ return preparedItems.filter((item) => {
68
+ return item[searchField].indexOf(searchText) >= 0;
69
+ });
70
+ } else {
71
+ return [...preparedItems];
72
+ }
73
+ });
74
+ function handleSearch(text) {
75
+ searchText = text;
76
+ }
77
+ function handleItemSelected(ev, item, index) {
78
+ let id = item[idField];
79
+ if (multiple) {
80
+ if (selectedItemsSet.has(id)) {
81
+ selectedItemsSet.delete(id);
82
+ } else {
83
+ selectedItemsSet.add(id);
84
+ }
85
+ } else {
86
+ selectedItemsSet.clear();
87
+ selectedItemsSet.add(id);
88
+ }
89
+ items = [...items || []];
90
+ if (!multiple) {
91
+ if (selectedItemsSet.size) {
92
+ setTimeout(() => {
93
+ setResult(Array.from(selectedItemsSet)[0]);
94
+ closeDialog();
95
+ }, 300);
96
+ }
97
+ }
98
+ }
99
+ function handleClose() {
100
+ closeDialog();
101
+ }
102
+ function handleOk() {
103
+ setResult(Array.from(selectedItemsSet));
104
+ closeDialog();
105
+ }
106
+ $effect(() => {
107
+ setResult(null);
108
+ });
109
+ </script>
110
+
111
+ <div class="flex gap-3 p-3">
112
+ <ButtonBack onlyMobile onClick={handleClose} />
113
+ <div class="flex-grow">
114
+ <SearchField
115
+ name="search"
116
+ className="rounded-full"
117
+ onSearch={handleSearch}
118
+ placeholder="Search..."
119
+ />
120
+ </div>
121
+ <ButtonCloseIcon onlyWeb onClick={handleClose} />
122
+ </div>
123
+ <div class="flex-grow overflow-y-auto">
124
+ {#each filteredItems as item, index}
125
+ <div>
126
+ <ButtonListItem
127
+ {item}
128
+ id="list"
129
+ {index}
130
+ titleClassName={itemTitleClassName}
131
+ subtitleClassName={itemSubtitleClassName}
132
+ {hasArrow}
133
+ {hasCheckbox}
134
+ onClick={(ev) => handleItemSelected(ev, item, index)}
135
+ className="px-4"
136
+ />
137
+ </div>
138
+ {/each}
139
+ </div>
140
+ {#if multiple}
141
+ <div class="flex items-center justify-end gap-3 p-4">
142
+ <ButtonOk label={okButtonLable} className={okButtonClassName} onClick={handleOk} />
143
+ <ButtonClose label={closeButtonLabel} className={closeButtonClassName} onClick={handleClose} />
144
+ </div>
145
+ {/if}
@@ -0,0 +1,41 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { DialogExportsType } from '../dialog/dialog.svelte';
3
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
4
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
+ $$bindings?: Bindings;
6
+ } & Exports;
7
+ (internal: unknown, props: Props & {
8
+ $$events?: Events;
9
+ $$slots?: Slots;
10
+ }): Exports & {
11
+ $set?: any;
12
+ $on?: any;
13
+ };
14
+ z_$$bindings?: Bindings;
15
+ }
16
+ declare const ListPickerDialog: $$__sveltets_2_IsomorphicComponent<{
17
+ value?: any | any[];
18
+ multiple?: boolean;
19
+ items?: any[];
20
+ itemSnippet?: Snippet<[any, number]>;
21
+ itemTitle?: string;
22
+ itemSubtitle?: string;
23
+ search?: string;
24
+ identity?: string;
25
+ iconPath?: string;
26
+ hasCheckbox?: boolean;
27
+ hasArrow?: boolean;
28
+ itemTitleClassName?: string;
29
+ itemSubtitleClassName?: string;
30
+ okButtonLable?: string;
31
+ okButtonClassName?: string;
32
+ closeButtonLabel?: string;
33
+ closeButtonClassName?: string;
34
+ } & DialogExportsType & {
35
+ items?: any[];
36
+ itemSnippet?: Snippet<[any, number]>;
37
+ }, {
38
+ [evt: string]: CustomEvent<any>;
39
+ }, {}, {}, "">;
40
+ type ListPickerDialog = InstanceType<typeof ListPickerDialog>;
41
+ export default ListPickerDialog;
@@ -1,16 +1,18 @@
1
- <script lang="ts">import "../../../../../tailwind.css";
1
+ <script lang="ts">import ColorField from "../../../input/components/color-field/color-field.svelte";
2
+ import "../../../../../tailwind.css";
2
3
  let {
3
4
  path,
4
5
  className = "",
5
6
  size = 24,
6
7
  fill = "currentColor",
7
- viewBox = ""
8
+ viewBox = "",
9
+ color
8
10
  } = $props();
9
11
  $effect(() => {
10
12
  viewBox = viewBox || `0 0 ${size} ${size}`;
11
13
  });
12
14
  </script>
13
15
 
14
- <svg class="w-6 h-6 align-middle {className}" {viewBox} fill="currentColor">
16
+ <svg class="w-6 h-6 align-middle {className}" {viewBox} fill={color || fill}>
15
17
  <path d={path} />
16
18
  </svg>
@@ -18,6 +18,7 @@ declare const Icon: $$__sveltets_2_IsomorphicComponent<{
18
18
  size?: number;
19
19
  fill?: string;
20
20
  viewBox?: string;
21
+ color?: string;
21
22
  }, {
22
23
  [evt: string]: CustomEvent<any>;
23
24
  }, {}, {}, "">;
@@ -1,4 +1,5 @@
1
1
  export declare const mdiArrowLeft = "M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z";
2
+ export declare const mdiAttachment = "M7.5,18A5.5,5.5 0 0,1 2,12.5A5.5,5.5 0 0,1 7.5,7H18A4,4 0 0,1 22,11A4,4 0 0,1 18,15H9.5A2.5,2.5 0 0,1 7,12.5A2.5,2.5 0 0,1 9.5,10H17V11.5H9.5A1,1 0 0,0 8.5,12.5A1,1 0 0,0 9.5,13.5H18A2.5,2.5 0 0,0 20.5,11A2.5,2.5 0 0,0 18,8.5H7.5A4,4 0 0,0 3.5,12.5A4,4 0 0,0 7.5,16.5H17V18H7.5Z";
2
3
  export declare const mdiBellOutline = "M10 21H14C14 22.1 13.1 23 12 23S10 22.1 10 21M21 19V20H3V19L5 17V11C5 7.9 7 5.2 10 4.3V4C10 2.9 10.9 2 12 2S14 2.9 14 4V4.3C17 5.2 19 7.9 19 11V17L21 19M17 11C17 8.2 14.8 6 12 6S7 8.2 7 11V18H17V11Z";
3
4
  export declare const mdiCheckCircle = "M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z";
4
5
  export declare const mdiCheckCircleOutline = "M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M12 20C7.59 20 4 16.41 4 12S7.59 4 12 4 20 7.59 20 12 16.41 20 12 20M16.59 7.58L10 14.17L7.41 11.59L6 13L10 17L18 9L16.59 7.58Z";
@@ -8,8 +9,13 @@ export declare const mdiChevronRight = "M8.59,16.58L13.17,12L8.59,7.41L10,6L16,1
8
9
  export declare const mdiClose = "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z";
9
10
  export declare const mdiContentCopy = "M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z";
10
11
  export declare const mdiEmailOutline = "M22 6C22 4.9 21.1 4 20 4H4C2.9 4 2 4.9 2 6V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V6M20 6L12 11L4 6H20M20 18H4V8L12 13L20 8V18Z";
12
+ export declare const mdiEyeOffOutline = "M2,5.27L3.28,4L20,20.72L18.73,22L15.65,18.92C14.5,19.3 13.28,19.5 12,19.5C7,19.5 2.73,16.39 1,12C1.69,10.24 2.79,8.69 4.19,7.46L2,5.27M12,9A3,3 0 0,1 15,12C15,12.35 14.94,12.69 14.83,13L11,9.17C11.31,9.06 11.65,9 12,9M12,4.5C17,4.5 21.27,7.61 23,12C22.18,14.08 20.79,15.88 19,17.19L17.58,15.76C18.94,14.82 20.06,13.54 20.82,12C19.17,8.64 15.76,6.5 12,6.5C10.91,6.5 9.84,6.68 8.84,7L7.3,5.47C8.74,4.85 10.33,4.5 12,4.5M3.18,12C4.83,15.36 8.24,17.5 12,17.5C12.69,17.5 13.37,17.43 14,17.29L11.72,15C10.29,14.85 9.15,13.71 9,12.28L5.6,8.87C4.61,9.72 3.78,10.78 3.18,12Z";
13
+ export declare const mdiEyeOutline = "M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9M12,4.5C17,4.5 21.27,7.61 23,12C21.27,16.39 17,19.5 12,19.5C7,19.5 2.73,16.39 1,12C2.73,7.61 7,4.5 12,4.5M3.18,12C4.83,15.36 8.24,17.5 12,17.5C15.76,17.5 19.17,15.36 20.82,12C19.17,8.64 15.76,6.5 12,6.5C8.24,6.5 4.83,8.64 3.18,12Z";
11
14
  export declare const mdiFlowerTulip = "M3,13A9,9 0 0,0 12,22A9,9 0 0,0 3,13M12,22A9,9 0 0,0 21,13A9,9 0 0,0 12,22M18,3V8A6,6 0 0,1 12,14A6,6 0 0,1 6,8V3C6.74,3 7.47,3.12 8.16,3.39C8.71,3.62 9.2,3.96 9.61,4.39L12,2L14.39,4.39C14.8,3.96 15.29,3.62 15.84,3.39C16.53,3.12 17.26,3 18,3Z";
15
+ export declare const mdiMagnify = "M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z";
12
16
  export declare const mdiMenu = "M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z";
13
17
  export declare const mdiPageFirst = "M18.41,16.59L13.82,12L18.41,7.41L17,6L11,12L17,18L18.41,16.59M6,6H8V18H6V6Z";
14
18
  export declare const mdiPageLast = "M5.59,7.41L10.18,12L5.59,16.59L7,18L13,12L7,6L5.59,7.41M16,6H18V18H16V6Z";
15
19
  export declare const mdiPhone = "M6.62,10.79C8.06,13.62 10.38,15.94 13.21,17.38L15.41,15.18C15.69,14.9 16.08,14.82 16.43,14.93C17.55,15.3 18.75,15.5 20,15.5A1,1 0 0,1 21,16.5V20A1,1 0 0,1 20,21A17,17 0 0,1 3,4A1,1 0 0,1 4,3H7.5A1,1 0 0,1 8.5,4C8.5,5.25 8.7,6.45 9.07,7.57C9.18,7.92 9.1,8.31 8.82,8.59L6.62,10.79Z";
20
+ export declare const mdiSquare = "M3,3V21H21V3";
21
+ export declare const mdiUnfoldMoreHorizontal = "M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z";