@getmicdrop/svelte-components 2.8.0 → 3.0.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 (104) hide show
  1. package/dist/components/Alert/Alert.svelte +24 -12
  2. package/dist/components/Alert/Alert.svelte.d.ts +15 -45
  3. package/dist/components/Alert/Alert.svelte.d.ts.map +1 -1
  4. package/dist/components/Badges/Badge.svelte +53 -37
  5. package/dist/components/Badges/Badge.svelte.d.ts +60 -48
  6. package/dist/components/Badges/Badge.svelte.d.ts.map +1 -1
  7. package/dist/components/BottomSheet/BottomSheet.svelte +37 -20
  8. package/dist/components/BottomSheet/BottomSheet.svelte.d.ts +45 -47
  9. package/dist/components/BottomSheet/BottomSheet.svelte.d.ts.map +1 -1
  10. package/dist/components/Breadcrumb/Breadcrumb.svelte +22 -16
  11. package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts +50 -31
  12. package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
  13. package/dist/components/Button/Button.svelte +179 -134
  14. package/dist/components/Button/Button.svelte.d.ts +37 -78
  15. package/dist/components/Button/Button.svelte.d.ts.map +1 -1
  16. package/dist/components/Checkbox/Checkbox.svelte +71 -41
  17. package/dist/components/Checkbox/Checkbox.svelte.d.ts +34 -62
  18. package/dist/components/Checkbox/Checkbox.svelte.d.ts.map +1 -1
  19. package/dist/components/Drawer/Drawer.svelte +63 -46
  20. package/dist/components/Drawer/Drawer.svelte.d.ts +110 -54
  21. package/dist/components/Drawer/Drawer.svelte.d.ts.map +1 -1
  22. package/dist/components/Dropdown/Dropdown.svelte +203 -193
  23. package/dist/components/Dropdown/Dropdown.svelte.d.ts +44 -42
  24. package/dist/components/Dropdown/Dropdown.svelte.d.ts.map +1 -1
  25. package/dist/components/Dropdown/DropdownItem.svelte +124 -111
  26. package/dist/components/Dropdown/DropdownItem.svelte.d.ts +39 -43
  27. package/dist/components/Dropdown/DropdownItem.svelte.d.ts.map +1 -1
  28. package/dist/components/Dropdown/SelectDropdown.svelte +31 -25
  29. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts +48 -29
  30. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts.map +1 -1
  31. package/dist/components/Input/Input.svelte +141 -98
  32. package/dist/components/Input/Input.svelte.d.ts +94 -110
  33. package/dist/components/Input/Input.svelte.d.ts.map +1 -1
  34. package/dist/components/Input/MultiSelect.svelte +58 -39
  35. package/dist/components/Input/MultiSelect.svelte.d.ts +101 -40
  36. package/dist/components/Input/MultiSelect.svelte.d.ts.map +1 -1
  37. package/dist/components/Input/OTPInput.svelte +30 -17
  38. package/dist/components/Input/OTPInput.svelte.d.ts +45 -36
  39. package/dist/components/Input/OTPInput.svelte.d.ts.map +1 -1
  40. package/dist/components/Input/Search.svelte +196 -173
  41. package/dist/components/Input/Search.svelte.d.ts +36 -65
  42. package/dist/components/Input/Search.svelte.d.ts.map +1 -1
  43. package/dist/components/Input/Select.svelte +49 -35
  44. package/dist/components/Input/Select.svelte.d.ts +44 -46
  45. package/dist/components/Input/Select.svelte.d.ts.map +1 -1
  46. package/dist/components/Input/Textarea.svelte +187 -160
  47. package/dist/components/Input/Textarea.svelte.d.ts +56 -66
  48. package/dist/components/Input/Textarea.svelte.d.ts.map +1 -1
  49. package/dist/components/Modal/ConfirmationModal.svelte +103 -78
  50. package/dist/components/Modal/ConfirmationModal.svelte.d.ts +132 -47
  51. package/dist/components/Modal/ConfirmationModal.svelte.d.ts.map +1 -1
  52. package/dist/components/Modal/InputModal.svelte +157 -132
  53. package/dist/components/Modal/InputModal.svelte.d.ts +181 -48
  54. package/dist/components/Modal/InputModal.svelte.d.ts.map +1 -1
  55. package/dist/components/Modal/Modal.svelte +83 -45
  56. package/dist/components/Modal/Modal.svelte.d.ts +56 -41
  57. package/dist/components/Modal/Modal.svelte.d.ts.map +1 -1
  58. package/dist/components/Modal/ModalTestWrapper.svelte.d.ts +2 -2
  59. package/dist/components/Modal/StatusModal.svelte +149 -122
  60. package/dist/components/Modal/StatusModal.svelte.d.ts +126 -47
  61. package/dist/components/Modal/StatusModal.svelte.d.ts.map +1 -1
  62. package/dist/components/OrderSummary/OrderSummary.svelte +68 -59
  63. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts +72 -60
  64. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts.map +1 -1
  65. package/dist/components/Pagination/Pagination.svelte +49 -39
  66. package/dist/components/Pagination/Pagination.svelte.d.ts +89 -36
  67. package/dist/components/Pagination/Pagination.svelte.d.ts.map +1 -1
  68. package/dist/components/PublicCard/PublicCard.svelte +22 -12
  69. package/dist/components/PublicCard/PublicCard.svelte.d.ts +14 -32
  70. package/dist/components/PublicCard/PublicCard.svelte.d.ts.map +1 -1
  71. package/dist/components/Radio/Radio.svelte +35 -21
  72. package/dist/components/Radio/Radio.svelte.d.ts +22 -51
  73. package/dist/components/Radio/Radio.svelte.d.ts.map +1 -1
  74. package/dist/components/ShowCard/ShowCard.svelte +47 -40
  75. package/dist/components/ShowCard/ShowCard.svelte.d.ts +30 -36
  76. package/dist/components/ShowCard/ShowCard.svelte.d.ts.map +1 -1
  77. package/dist/components/ShowTimeCard/ShowTimeCard.svelte +23 -14
  78. package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts +20 -34
  79. package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -1
  80. package/dist/components/SuperLogin/SuperLogin.svelte +1282 -0
  81. package/dist/components/SuperLogin/SuperLogin.svelte.d.ts +44 -0
  82. package/dist/components/SuperLogin/SuperLogin.svelte.d.ts.map +1 -0
  83. package/dist/components/SuperLogin/index.d.ts +2 -0
  84. package/dist/components/SuperLogin/index.d.ts.map +1 -0
  85. package/dist/components/SuperLogin/index.js +1 -0
  86. package/dist/components/Toggle.spec.js +21 -52
  87. package/dist/components/Toggle.svelte +11 -9
  88. package/dist/components/Toggle.svelte.d.ts +17 -30
  89. package/dist/components/Toggle.svelte.d.ts.map +1 -1
  90. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte +45 -32
  91. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts +22 -36
  92. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts.map +1 -1
  93. package/dist/components/pages/shows/TabNavigation.svelte +16 -8
  94. package/dist/components/pages/shows/TabNavigation.svelte.d.ts +20 -30
  95. package/dist/components/pages/shows/TabNavigation.svelte.d.ts.map +1 -1
  96. package/dist/constants/validation.d.ts +55 -0
  97. package/dist/constants/validation.d.ts.map +1 -0
  98. package/dist/constants/validation.js +91 -0
  99. package/dist/constants/validation.spec.d.ts +2 -0
  100. package/dist/constants/validation.spec.d.ts.map +1 -0
  101. package/dist/constants/validation.spec.js +64 -0
  102. package/dist/index.d.ts +2 -0
  103. package/dist/index.js +4 -0
  104. package/package.json +1 -1
@@ -1,173 +1,196 @@
1
- <script>
2
- import { createEventDispatcher } from "svelte";
3
-
4
- const dispatch = createEventDispatcher();
5
-
6
- // API compatible with flowbite-svelte Search
7
- export let value = "";
8
- export let placeholder = "Search";
9
- export let size = "lg"; // sm, md, lg
10
- export let disabled = false;
11
- export let id = "";
12
- export let name = "";
13
-
14
- // Additional props
15
- let className = "";
16
- export { className as class };
17
-
18
- const sizes = {
19
- sm: { icon: "w-3.5 h-3.5", input: "h-8 text-xs pl-8", wrapper: "h-8" },
20
- md: { icon: "w-4 h-4", input: "h-10 text-sm pl-9", wrapper: "h-10" },
21
- lg: { icon: "w-5 h-5", input: "h-11 text-sm pl-10", wrapper: "h-11" }
22
- };
23
-
24
- $: sizeConfig = sizes[size] || sizes.lg;
25
-
26
- function handleInput(event) {
27
- value = event.target.value;
28
- dispatch("input", event);
29
- }
30
-
31
- function handleChange(event) {
32
- dispatch("change", event);
33
- }
34
-
35
- function handleKeydown(event) {
36
- dispatch("keydown", event);
37
- }
38
-
39
- function handleKeyup(event) {
40
- dispatch("keyup", event);
41
- }
42
-
43
- function handleFocus(event) {
44
- dispatch("focus", event);
45
- }
46
-
47
- function handleBlur(event) {
48
- dispatch("blur", event);
49
- }
50
- </script>
51
-
52
- <div class="search-wrapper {sizeConfig.wrapper} {className}">
53
- <div class="search-icon-wrapper">
54
- <svg
55
- class="search-icon {sizeConfig.icon}"
56
- fill="currentColor"
57
- viewBox="0 0 20 20"
58
- xmlns="http://www.w3.org/2000/svg"
59
- >
60
- <path
61
- fill-rule="evenodd"
62
- d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"
63
- clip-rule="evenodd"
64
- />
65
- </svg>
66
- </div>
67
- <input
68
- type="search"
69
- {id}
70
- {name}
71
- {placeholder}
72
- {disabled}
73
- class="search-input {sizeConfig.input}"
74
- bind:value
75
- on:input={handleInput}
76
- on:change={handleChange}
77
- on:keydown={handleKeydown}
78
- on:keyup={handleKeyup}
79
- on:focus={handleFocus}
80
- on:blur={handleBlur}
81
- {...$$restProps}
82
- />
83
- {#if $$slots.default}
84
- <div class="search-actions">
85
- <slot />
86
- </div>
87
- {/if}
88
- </div>
89
-
90
- <style>
91
- .search-wrapper {
92
- --search-bg: #f9fafb;
93
- --search-text: #0d1526;
94
- --search-text-placeholder: #6b7280;
95
- --search-border: #e5e7eb;
96
- --search-focus-ring: #3b82f6;
97
- --search-icon-color: #6b7280;
98
- position: relative;
99
- width: 100%;
100
- }
101
-
102
- .search-icon-wrapper {
103
- position: absolute;
104
- inset-y: 0;
105
- left: 0;
106
- display: flex;
107
- align-items: center;
108
- padding-left: 0.75rem;
109
- pointer-events: none;
110
- }
111
-
112
- .search-icon {
113
- color: var(--search-icon-color);
114
- }
115
-
116
- .search-input {
117
- width: 100%;
118
- padding-right: 0.75rem;
119
- background-color: var(--search-bg);
120
- color: var(--search-text);
121
- font-weight: 500;
122
- border: 1px solid var(--search-border);
123
- border-radius: 0.5rem;
124
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
125
- }
126
-
127
- .search-input:focus {
128
- outline: none;
129
- box-shadow: 0 0 0 2px var(--search-focus-ring);
130
- border-color: var(--search-focus-ring);
131
- }
132
-
133
- .search-input:hover:not(:focus):not(:disabled) {
134
- border-color: var(--search-focus-ring);
135
- }
136
-
137
- .search-input:disabled {
138
- opacity: 0.5;
139
- cursor: not-allowed;
140
- }
141
-
142
- .search-input::-moz-placeholder {
143
- color: var(--search-text-placeholder);
144
- }
145
-
146
- .search-input::placeholder {
147
- color: var(--search-text-placeholder);
148
- }
149
-
150
- /* Hide browser's default clear button on search inputs */
151
- .search-input::-webkit-search-cancel-button {
152
- -webkit-appearance: none;
153
- appearance: none;
154
- }
155
-
156
- .search-actions {
157
- position: absolute;
158
- inset-y: 0;
159
- right: 0;
160
- display: flex;
161
- align-items: center;
162
- color: var(--search-icon-color);
163
- }
164
-
165
- /* Dark mode overrides */
166
- :global(.dark) .search-wrapper {
167
- --search-bg: #111827;
168
- --search-text: #f7f7f8;
169
- --search-text-placeholder: #9ca3af;
170
- --search-border: #374151;
171
- --search-icon-color: #9ca3af;
172
- }
173
- </style>
1
+ <script>
2
+ /**
3
+ * @type {{
4
+ * value?: string,
5
+ * placeholder?: string,
6
+ * size?: 'sm' | 'md' | 'lg',
7
+ * disabled?: boolean,
8
+ * id?: string,
9
+ * name?: string,
10
+ * class?: string,
11
+ * oninput?: (e: Event) => void,
12
+ * onchange?: (e: Event) => void,
13
+ * onkeydown?: (e: KeyboardEvent) => void,
14
+ * onkeyup?: (e: KeyboardEvent) => void,
15
+ * onfocus?: (e: FocusEvent) => void,
16
+ * onblur?: (e: FocusEvent) => void,
17
+ * children?: import('svelte').Snippet,
18
+ * [key: string]: unknown
19
+ * }}
20
+ */
21
+ let {
22
+ value = $bindable(""),
23
+ placeholder = "Search",
24
+ size = "lg",
25
+ disabled = false,
26
+ id = "",
27
+ name = "",
28
+ class: className = "",
29
+ oninput,
30
+ onchange,
31
+ onkeydown,
32
+ onkeyup,
33
+ onfocus,
34
+ onblur,
35
+ children,
36
+ ...restProps
37
+ } = $props();
38
+
39
+ const sizes = {
40
+ sm: { icon: "w-3.5 h-3.5", input: "h-8 text-xs pl-8", wrapper: "h-8" },
41
+ md: { icon: "w-4 h-4", input: "h-10 text-sm pl-9", wrapper: "h-10" },
42
+ lg: { icon: "w-5 h-5", input: "h-11 text-sm pl-10", wrapper: "h-11" }
43
+ };
44
+
45
+ let sizeConfig = $derived(sizes[size] || sizes.lg);
46
+
47
+ function handleInput(event) {
48
+ value = event.target.value;
49
+ oninput?.(event);
50
+ }
51
+
52
+ function handleChange(event) {
53
+ onchange?.(event);
54
+ }
55
+
56
+ function handleKeydown(event) {
57
+ onkeydown?.(event);
58
+ }
59
+
60
+ function handleKeyup(event) {
61
+ onkeyup?.(event);
62
+ }
63
+
64
+ function handleFocus(event) {
65
+ onfocus?.(event);
66
+ }
67
+
68
+ function handleBlur(event) {
69
+ onblur?.(event);
70
+ }
71
+ </script>
72
+
73
+ <div class="search-wrapper {sizeConfig.wrapper} {className}">
74
+ <div class="search-icon-wrapper">
75
+ <svg
76
+ class="search-icon {sizeConfig.icon}"
77
+ fill="currentColor"
78
+ viewBox="0 0 20 20"
79
+ xmlns="http://www.w3.org/2000/svg"
80
+ >
81
+ <path
82
+ fill-rule="evenodd"
83
+ d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"
84
+ clip-rule="evenodd"
85
+ />
86
+ </svg>
87
+ </div>
88
+ <input
89
+ type="search"
90
+ {id}
91
+ {name}
92
+ {placeholder}
93
+ {disabled}
94
+ class="search-input {sizeConfig.input}"
95
+ bind:value
96
+ oninput={handleInput}
97
+ onchange={handleChange}
98
+ onkeydown={handleKeydown}
99
+ onkeyup={handleKeyup}
100
+ onfocus={handleFocus}
101
+ onblur={handleBlur}
102
+ {...restProps}
103
+ />
104
+ {#if children}
105
+ <div class="search-actions">
106
+ {@render children()}
107
+ </div>
108
+ {/if}
109
+ </div>
110
+
111
+ <style>
112
+ .search-wrapper {
113
+ --search-bg: #f9fafb;
114
+ --search-text: #0d1526;
115
+ --search-text-placeholder: #6b7280;
116
+ --search-border: #e5e7eb;
117
+ --search-focus-ring: #3b82f6;
118
+ --search-icon-color: #6b7280;
119
+ position: relative;
120
+ width: 100%;
121
+ }
122
+
123
+ .search-icon-wrapper {
124
+ position: absolute;
125
+ top: 0;
126
+ bottom: 0;
127
+ left: 0;
128
+ display: flex;
129
+ align-items: center;
130
+ padding-left: 0.75rem;
131
+ pointer-events: none;
132
+ }
133
+
134
+ .search-icon {
135
+ color: var(--search-icon-color);
136
+ }
137
+
138
+ .search-input {
139
+ width: 100%;
140
+ padding-right: 0.75rem;
141
+ background-color: var(--search-bg);
142
+ color: var(--search-text);
143
+ font-weight: 500;
144
+ border: 1px solid var(--search-border);
145
+ border-radius: 0.5rem;
146
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
147
+ }
148
+
149
+ .search-input:focus {
150
+ outline: none;
151
+ box-shadow: 0 0 0 2px var(--search-focus-ring);
152
+ border-color: var(--search-focus-ring);
153
+ }
154
+
155
+ .search-input:hover:not(:focus):not(:disabled) {
156
+ border-color: var(--search-focus-ring);
157
+ }
158
+
159
+ .search-input:disabled {
160
+ opacity: 0.5;
161
+ cursor: not-allowed;
162
+ }
163
+
164
+ .search-input::-moz-placeholder {
165
+ color: var(--search-text-placeholder);
166
+ }
167
+
168
+ .search-input::placeholder {
169
+ color: var(--search-text-placeholder);
170
+ }
171
+
172
+ /* Hide browser's default clear button on search inputs */
173
+ .search-input::-webkit-search-cancel-button {
174
+ -webkit-appearance: none;
175
+ appearance: none;
176
+ }
177
+
178
+ .search-actions {
179
+ position: absolute;
180
+ top: 0;
181
+ bottom: 0;
182
+ right: 0;
183
+ display: flex;
184
+ align-items: center;
185
+ color: var(--search-icon-color);
186
+ }
187
+
188
+ /* Dark mode overrides */
189
+ :global(.dark) .search-wrapper {
190
+ --search-bg: #111827;
191
+ --search-text: #f7f7f8;
192
+ --search-text-placeholder: #9ca3af;
193
+ --search-border: #374151;
194
+ --search-icon-color: #9ca3af;
195
+ }
196
+ </style>
@@ -1,68 +1,39 @@
1
1
  export default Search;
2
- type Search = SvelteComponent<$$__sveltets_2_PropsWithChildren<{
3
- [x: string]: any;
4
- class?: string | undefined;
5
- size?: string | undefined;
6
- disabled?: boolean | undefined;
7
- value?: string | undefined;
8
- name?: string | undefined;
9
- id?: string | undefined;
10
- placeholder?: string | undefined;
11
- }, {
12
- default: {};
13
- }>, {
14
- input: CustomEvent<any>;
15
- change: CustomEvent<any>;
16
- keydown: CustomEvent<any>;
17
- keyup: CustomEvent<any>;
18
- focus: CustomEvent<any>;
19
- blur: CustomEvent<any>;
20
- } & {
21
- [evt: string]: CustomEvent<any>;
22
- }, {
23
- default: {};
24
- }> & {
25
- $$bindings?: string | undefined;
2
+ type Search = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<{
5
+ [key: string]: unknown;
6
+ value?: string | undefined;
7
+ placeholder?: string | undefined;
8
+ size?: "lg" | "md" | "sm" | undefined;
9
+ disabled?: boolean | undefined;
10
+ id?: string | undefined;
11
+ name?: string | undefined;
12
+ class?: string | undefined;
13
+ oninput?: ((e: Event) => void) | undefined;
14
+ onchange?: ((e: Event) => void) | undefined;
15
+ onkeydown?: ((e: KeyboardEvent) => void) | undefined;
16
+ onkeyup?: ((e: KeyboardEvent) => void) | undefined;
17
+ onfocus?: ((e: FocusEvent) => void) | undefined;
18
+ onblur?: ((e: FocusEvent) => void) | undefined;
19
+ children?: Snippet<[]> | undefined;
20
+ }>): void;
26
21
  };
27
- declare const Search: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
28
- [x: string]: any;
29
- class?: string | undefined;
30
- size?: string | undefined;
31
- disabled?: boolean | undefined;
32
- value?: string | undefined;
33
- name?: string | undefined;
34
- id?: string | undefined;
35
- placeholder?: string | undefined;
36
- }, {
37
- default: {};
38
- }>, {
39
- input: CustomEvent<any>;
40
- change: CustomEvent<any>;
41
- keydown: CustomEvent<any>;
42
- keyup: CustomEvent<any>;
43
- focus: CustomEvent<any>;
44
- blur: CustomEvent<any>;
45
- } & {
46
- [evt: string]: CustomEvent<any>;
47
- }, {
48
- default: {};
49
- }, {}, string>;
50
- type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
51
- default: any;
52
- } ? Props extends Record<string, never> ? any : {
53
- children?: any;
54
- } : {});
55
- 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> {
56
- new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
57
- $$bindings?: Bindings;
58
- } & Exports;
59
- (internal: unknown, props: Props & {
60
- $$events?: Events;
61
- $$slots?: Slots;
62
- }): Exports & {
63
- $set?: any;
64
- $on?: any;
65
- };
66
- z_$$bindings?: Bindings;
67
- }
22
+ declare const Search: import("svelte").Component<{
23
+ [key: string]: unknown;
24
+ value?: string;
25
+ placeholder?: string;
26
+ size?: "sm" | "md" | "lg";
27
+ disabled?: boolean;
28
+ id?: string;
29
+ name?: string;
30
+ class?: string;
31
+ oninput?: (e: Event) => void;
32
+ onchange?: (e: Event) => void;
33
+ onkeydown?: (e: KeyboardEvent) => void;
34
+ onkeyup?: (e: KeyboardEvent) => void;
35
+ onfocus?: (e: FocusEvent) => void;
36
+ onblur?: (e: FocusEvent) => void;
37
+ children?: import("svelte").Snippet;
38
+ }, {}, "value">;
68
39
  //# sourceMappingURL=Search.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Search.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Input/Search.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwFA;;;;;;;;;;;;;;;;;;;;;;eAAgM;sCAT1J,KAAK,EAAE,KAAK;;;;;6CALL,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Search.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Input/Search.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+GA;;YAjBe,MAAM;kBACA,MAAM;WACb,IAAI,GAAG,IAAI,GAAG,IAAI;eACd,OAAO;SACb,MAAM;WACJ,MAAM;YACL,MAAM;cACJ,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI;eACjB,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI;gBACjB,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI;cAC5B,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI;cAC1B,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI;aACxB,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI;eACrB,OAAO,QAAQ,EAAE,OAAO;gBAIW"}
@@ -2,43 +2,57 @@
2
2
  /**
3
3
  * Custom Select component - drop-in replacement for native select
4
4
  *
5
- * @fires change - Dispatched when selection changes
6
- * Event detail: { value: any, item: { name: string, value: any } }
7
- * Usage: on:change={(e) => handleChange(e.detail.value)}
8
- * Note: Use e.detail.value, NOT e.target.value (this is a custom component, not native select)
5
+ * @prop onchange - Callback when selection changes
6
+ * Signature: (data: { value: any, item: { name: string, value: any } }) => void
7
+ * Usage: onchange={(data) => handleChange(data.value)}
9
8
  */
10
- import { createEventDispatcher, onMount } from "svelte";
9
+ import { onMount } from "svelte";
11
10
 
12
- const dispatch = createEventDispatcher();
13
-
14
- // Props matching old Flowbite wrapper for drop-in replacement
15
- export let value = "";
16
- export let items = []; // Array of { name: string, value: any }
17
- export let placeholder = "Select an option";
18
- export let label = "";
19
- export let required = false;
20
- export let disabled = false;
21
- export let error = "";
22
- export let name = "";
23
- export let id = "";
24
- export let animateFocus = true; // Enable focus animation effect (auto-disabled when disabled)
25
-
26
- $: shouldAnimate = animateFocus && !disabled;
27
-
28
- let isOpen = false;
29
- let triggerElement;
30
- let dropdownElement;
31
- let focusedIndex = -1;
11
+ /**
12
+ * @typedef {{ name: string, value: any }} SelectItem
13
+ * @type {{
14
+ * value?: any,
15
+ * items?: SelectItem[],
16
+ * placeholder?: string,
17
+ * label?: string,
18
+ * required?: boolean,
19
+ * disabled?: boolean,
20
+ * error?: string,
21
+ * name?: string,
22
+ * id?: string,
23
+ * animateFocus?: boolean,
24
+ * onchange?: (data: { value: any, item: SelectItem }) => void
25
+ * }}
26
+ */
27
+ let {
28
+ value = $bindable(""),
29
+ items = [],
30
+ placeholder = "Select an option",
31
+ label = "",
32
+ required = false,
33
+ disabled = false,
34
+ error = "",
35
+ name = "",
36
+ id = "",
37
+ animateFocus = true,
38
+ onchange
39
+ } = $props();
40
+
41
+ let shouldAnimate = $derived(animateFocus && !disabled);
42
+
43
+ let isOpen = $state(false);
44
+ let triggerElement = $state(null);
45
+ let dropdownElement = $state(null);
46
+ let focusedIndex = $state(-1);
32
47
 
33
48
  // Unique ID for this Select instance to coordinate with other Selects
34
49
  const instanceId = Math.random().toString(36).substring(2, 9);
35
50
 
36
- $: selectedItem = items.find((item) => item.value === value);
37
- $: displayText = selectedItem ? selectedItem.name : placeholder;
51
+ let selectedItem = $derived(items.find((item) => item.value === value));
52
+ let displayText = $derived(selectedItem ? selectedItem.name : placeholder);
38
53
 
39
54
  function toggle() {
40
55
  if (disabled) return;
41
- const wasOpen = isOpen;
42
56
  isOpen = !isOpen;
43
57
  if (isOpen) {
44
58
  focusedIndex = items.findIndex((item) => item.value === value);
@@ -61,7 +75,7 @@
61
75
 
62
76
  function selectItem(item) {
63
77
  value = item.value;
64
- dispatch("change", { value: item.value, item });
78
+ onchange?.({ value: item.value, item });
65
79
  close();
66
80
  triggerElement?.focus();
67
81
  }
@@ -158,8 +172,8 @@
158
172
  aria-haspopup="listbox"
159
173
  aria-expanded={isOpen}
160
174
  aria-labelledby={label ? `${id || name}-label` : undefined}
161
- on:click={toggle}
162
- on:keydown={handleKeydown}
175
+ onclick={toggle}
176
+ onkeydown={handleKeydown}
163
177
  >
164
178
  <span class="select-value">{displayText}</span>
165
179
  <svg
@@ -180,7 +194,7 @@
180
194
  </button>
181
195
 
182
196
  {#if isOpen}
183
- <!-- svelte-ignore a11y-no-noninteractive-tabindex -->
197
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
184
198
  <ul
185
199
  bind:this={dropdownElement}
186
200
  class="select-dropdown"
@@ -191,7 +205,7 @@
191
205
  : undefined}
192
206
  >
193
207
  {#each items as item, index}
194
- <!-- svelte-ignore a11y-click-events-have-key-events -->
208
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
195
209
  <li
196
210
  id="{id || name}-option-{index}"
197
211
  class="select-option"
@@ -199,8 +213,8 @@
199
213
  class:select-option-focused={index === focusedIndex}
200
214
  role="option"
201
215
  aria-selected={item.value === value}
202
- on:click={() => selectItem(item)}
203
- on:mouseenter={() => (focusedIndex = index)}
216
+ onclick={() => selectItem(item)}
217
+ onmouseenter={() => (focusedIndex = index)}
204
218
  >
205
219
  <span class="select-option-text">{item.name}</span>
206
220
  {#if item.value === value}