@getmicdrop/svelte-components 5.17.4 → 5.18.1

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 (145) hide show
  1. package/dist/calendar/AboutShow/AboutShow.svelte +9 -5
  2. package/dist/calendar/AboutShow/AboutShow.svelte.d.ts +2 -2
  3. package/dist/calendar/AboutShow/AboutShow.svelte.d.ts.map +1 -1
  4. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +39 -18
  5. package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts +4 -0
  6. package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
  7. package/dist/calendar/FAQs/FAQs.svelte +16 -5
  8. package/dist/calendar/FAQs/FAQs.svelte.d.ts +6 -4
  9. package/dist/calendar/FAQs/FAQs.svelte.d.ts.map +1 -1
  10. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +19 -4
  11. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte.d.ts +2 -0
  12. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte.d.ts.map +1 -1
  13. package/dist/calendar/OrderSummary/OrderSummary.spec.js +3 -3
  14. package/dist/calendar/OrderSummary/OrderSummary.svelte +17 -13
  15. package/dist/calendar/OrderSummary/OrderSummary.svelte.d.ts +4 -2
  16. package/dist/calendar/OrderSummary/OrderSummary.svelte.d.ts.map +1 -1
  17. package/dist/calendar/PublicCard/PublicCard.svelte +11 -2
  18. package/dist/calendar/PublicCard/PublicCard.svelte.d.ts +4 -0
  19. package/dist/calendar/PublicCard/PublicCard.svelte.d.ts.map +1 -1
  20. package/dist/calendar/ShowCard/ShowCard.svelte +25 -11
  21. package/dist/calendar/ShowCard/ShowCard.svelte.d.ts +4 -0
  22. package/dist/calendar/ShowCard/ShowCard.svelte.d.ts.map +1 -1
  23. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +12 -4
  24. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte.d.ts +4 -0
  25. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -0
  29. package/dist/patterns/chat/ChatBubble.svelte +9 -1
  30. package/dist/patterns/chat/ChatBubble.svelte.d.ts +6 -4
  31. package/dist/patterns/chat/ChatBubble.svelte.d.ts.map +1 -1
  32. package/dist/patterns/chat/ChatInvitationBubble.svelte +10 -1
  33. package/dist/patterns/chat/ChatInvitationBubble.svelte.d.ts +6 -3
  34. package/dist/patterns/chat/ChatInvitationBubble.svelte.d.ts.map +1 -1
  35. package/dist/patterns/chat/ChatInvitationNotice.svelte +10 -1
  36. package/dist/patterns/chat/ChatInvitationNotice.svelte.d.ts +6 -3
  37. package/dist/patterns/chat/ChatInvitationNotice.svelte.d.ts.map +1 -1
  38. package/dist/patterns/forms/FormValidationSummary.svelte +9 -1
  39. package/dist/patterns/forms/FormValidationSummary.svelte.d.ts +5 -3
  40. package/dist/patterns/forms/FormValidationSummary.svelte.d.ts.map +1 -1
  41. package/dist/patterns/navigation/BottomNav.svelte +9 -1
  42. package/dist/patterns/navigation/BottomNav.svelte.d.ts +10 -9
  43. package/dist/patterns/navigation/BottomNav.svelte.d.ts.map +1 -1
  44. package/dist/patterns/navigation/Header.svelte +20 -8
  45. package/dist/patterns/navigation/Header.svelte.d.ts +17 -9
  46. package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
  47. package/dist/patterns/page/PageLoader.svelte +12 -3
  48. package/dist/patterns/page/PageLoader.svelte.d.ts +6 -3
  49. package/dist/patterns/page/PageLoader.svelte.d.ts.map +1 -1
  50. package/dist/primitives/Accordion/AccordionItem.svelte +9 -1
  51. package/dist/primitives/Accordion/AccordionItem.svelte.d.ts +6 -4
  52. package/dist/primitives/Accordion/AccordionItem.svelte.d.ts.map +1 -1
  53. package/dist/primitives/Alert/Alert.svelte +10 -2
  54. package/dist/primitives/Alert/Alert.svelte.d.ts +6 -4
  55. package/dist/primitives/Alert/Alert.svelte.d.ts.map +1 -1
  56. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +9 -1
  57. package/dist/primitives/Breadcrumb/Breadcrumb.svelte.d.ts +13 -9
  58. package/dist/primitives/Breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
  59. package/dist/primitives/DarkModeToggle.svelte +16 -5
  60. package/dist/primitives/DarkModeToggle.svelte.d.ts +9 -3
  61. package/dist/primitives/DarkModeToggle.svelte.d.ts.map +1 -1
  62. package/dist/primitives/Dropdown/Dropdown.svelte +11 -2
  63. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts +7 -4
  64. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts.map +1 -1
  65. package/dist/primitives/Input/Input.svelte +19 -6
  66. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  67. package/dist/primitives/NumberInput/NumberInput.svelte +10 -2
  68. package/dist/primitives/NumberInput/NumberInput.svelte.d.ts.map +1 -1
  69. package/dist/primitives/Pagination/Pagination.svelte +21 -7
  70. package/dist/primitives/Pagination/Pagination.svelte.d.ts +14 -6
  71. package/dist/primitives/Pagination/Pagination.svelte.d.ts.map +1 -1
  72. package/dist/primitives/Skeleton/CardPlaceholder.svelte +11 -2
  73. package/dist/primitives/Skeleton/CardPlaceholder.svelte.d.ts +8 -5
  74. package/dist/primitives/Skeleton/CardPlaceholder.svelte.d.ts.map +1 -1
  75. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +11 -2
  76. package/dist/primitives/Skeleton/ImagePlaceholder.svelte.d.ts +8 -5
  77. package/dist/primitives/Skeleton/ImagePlaceholder.svelte.d.ts.map +1 -1
  78. package/dist/primitives/Skeleton/ListPlaceholder.svelte +11 -2
  79. package/dist/primitives/Skeleton/ListPlaceholder.svelte.d.ts +8 -5
  80. package/dist/primitives/Skeleton/ListPlaceholder.svelte.d.ts.map +1 -1
  81. package/dist/primitives/Skeleton/Skeleton.svelte +11 -2
  82. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts +7 -4
  83. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts.map +1 -1
  84. package/dist/primitives/Spinner/Spinner.svelte +9 -1
  85. package/dist/primitives/Spinner/Spinner.svelte.d.ts +6 -4
  86. package/dist/primitives/Spinner/Spinner.svelte.d.ts.map +1 -1
  87. package/dist/recipes/ImageUploader/ImageUploader.svelte +5 -3
  88. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts +1 -0
  89. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts.map +1 -1
  90. package/dist/recipes/SuperLogin/SuperLogin.svelte +25 -23
  91. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  92. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +12 -3
  93. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts +7 -4
  94. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -1
  95. package/dist/recipes/inputs/MultiSelect.svelte +10 -2
  96. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  97. package/dist/recipes/inputs/OTPInput.svelte +14 -3
  98. package/dist/recipes/inputs/OTPInput.svelte.d.ts +14 -12
  99. package/dist/recipes/inputs/OTPInput.svelte.d.ts.map +1 -1
  100. package/dist/recipes/inputs/PasswordInput.svelte +10 -1
  101. package/dist/recipes/inputs/PasswordInput.svelte.d.ts +7 -4
  102. package/dist/recipes/inputs/PasswordInput.svelte.d.ts.map +1 -1
  103. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +21 -10
  104. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts +8 -3
  105. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts.map +1 -1
  106. package/dist/recipes/inputs/PhoneInput.svelte +254 -0
  107. package/dist/recipes/inputs/PhoneInput.svelte.d.ts +40 -0
  108. package/dist/recipes/inputs/PhoneInput.svelte.d.ts.map +1 -0
  109. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +22 -9
  110. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts +21 -16
  111. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
  112. package/dist/recipes/inputs/Search.svelte +10 -2
  113. package/dist/recipes/inputs/Search.svelte.d.ts +7 -5
  114. package/dist/recipes/inputs/Search.svelte.d.ts.map +1 -1
  115. package/dist/recipes/inputs/index.d.ts +1 -0
  116. package/dist/recipes/inputs/index.js +1 -0
  117. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +240 -0
  118. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte.d.ts +15 -0
  119. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte.d.ts.map +1 -0
  120. package/dist/recipes/inputs/phoneInput/countryData.d.ts +18 -0
  121. package/dist/recipes/inputs/phoneInput/countryData.d.ts.map +1 -0
  122. package/dist/recipes/inputs/phoneInput/countryData.js +211 -0
  123. package/dist/recipes/modals/AlertModal.svelte +11 -2
  124. package/dist/recipes/modals/AlertModal.svelte.d.ts +4 -2
  125. package/dist/recipes/modals/AlertModal.svelte.d.ts.map +1 -1
  126. package/dist/recipes/modals/ConfirmationModal.svelte +8 -1
  127. package/dist/recipes/modals/ConfirmationModal.svelte.d.ts +2 -0
  128. package/dist/recipes/modals/ConfirmationModal.svelte.d.ts.map +1 -1
  129. package/dist/recipes/modals/InputModal.svelte +19 -7
  130. package/dist/recipes/modals/InputModal.svelte.d.ts +6 -4
  131. package/dist/recipes/modals/InputModal.svelte.d.ts.map +1 -1
  132. package/dist/recipes/modals/StatusModal.svelte +14 -4
  133. package/dist/recipes/modals/StatusModal.svelte.d.ts +4 -2
  134. package/dist/recipes/modals/StatusModal.svelte.d.ts.map +1 -1
  135. package/dist/tokens/__tests__/variants.test.js +12 -4
  136. package/dist/tokens/variants.d.ts +4 -4
  137. package/dist/tokens/variants.js +4 -4
  138. package/dist/utils/formatters.d.ts +6 -0
  139. package/dist/utils/formatters.d.ts.map +1 -1
  140. package/dist/utils/formatters.js +8 -0
  141. package/dist/utils/phoneUtils.d.ts +35 -0
  142. package/dist/utils/phoneUtils.d.ts.map +1 -0
  143. package/dist/utils/phoneUtils.js +104 -0
  144. package/dist/utils/utils.js +25 -16
  145. package/package.json +6 -1
@@ -0,0 +1,240 @@
1
+ <script lang="ts">
2
+ import { onMount, tick } from "svelte";
3
+ import { ChevronDownOutline } from "../../../primitives/Icons";
4
+ import { typography } from "../../../tokens/typography";
5
+ import { bloom } from "../../../utils/transitions.js";
6
+ import { COUNTRIES, type Country } from "./countryData";
7
+
8
+ interface Props {
9
+ country?: Country;
10
+ disabled?: boolean;
11
+ size?: "sm" | "md" | "lg";
12
+ labels?: {
13
+ searchPlaceholder?: string;
14
+ noResults?: string;
15
+ countrySelector?: string;
16
+ };
17
+ }
18
+
19
+ const defaultLabels = {
20
+ searchPlaceholder: 'Search...',
21
+ noResults: 'No countries found',
22
+ countrySelector: 'Select country',
23
+ };
24
+
25
+ let {
26
+ country = $bindable(COUNTRIES.find((c) => c.code === 'US')!),
27
+ disabled = false,
28
+ size = "md",
29
+ labels: userLabels = {},
30
+ }: Props = $props();
31
+
32
+ let labels = $derived({ ...defaultLabels, ...userLabels });
33
+
34
+ let isOpen = $state(false);
35
+ let searchQuery = $state('');
36
+ let triggerElement = $state<HTMLButtonElement | null>(null);
37
+ let dropdownElement = $state<HTMLDivElement | null>(null);
38
+ let searchInputElement = $state<HTMLInputElement | null>(null);
39
+ let focusedIndex = $state(-1);
40
+ let dropdownPosition = $state({ top: 0, left: 0, width: 0 });
41
+
42
+ const instanceId = Math.random().toString(36).substring(2, 9);
43
+
44
+ let filteredCountries = $derived.by(() => {
45
+ if (!searchQuery) return COUNTRIES;
46
+ const q = searchQuery.toLowerCase();
47
+ return COUNTRIES.filter(
48
+ (c) =>
49
+ c.name.toLowerCase().includes(q) ||
50
+ c.dialCode.includes(q) ||
51
+ c.code.toLowerCase().includes(q)
52
+ );
53
+ });
54
+
55
+ const sizeMap = {
56
+ sm: 'h-9 px-2 text-sm gap-1',
57
+ md: 'h-10 px-2.5 text-sm gap-1.5',
58
+ lg: 'h-12 px-3 text-base gap-2',
59
+ } as const;
60
+
61
+ let sizeClass = $derived(sizeMap[size] || sizeMap.md);
62
+
63
+ function updateDropdownPosition() {
64
+ if (!triggerElement) return;
65
+ const rect = triggerElement.getBoundingClientRect();
66
+ dropdownPosition = {
67
+ top: rect.bottom + 4,
68
+ left: rect.left,
69
+ width: Math.max(280, rect.width),
70
+ };
71
+ }
72
+
73
+ async function toggle() {
74
+ if (disabled) return;
75
+ isOpen = !isOpen;
76
+ if (isOpen) {
77
+ searchQuery = '';
78
+ focusedIndex = -1;
79
+ window.dispatchEvent(new CustomEvent('select-opened', { detail: { instanceId } }));
80
+ await tick();
81
+ updateDropdownPosition();
82
+ searchInputElement?.focus();
83
+ }
84
+ }
85
+
86
+ function handleOtherSelectOpened(event: Event) {
87
+ const customEvent = event as CustomEvent<{ instanceId: string }>;
88
+ if (customEvent.detail.instanceId !== instanceId && isOpen) {
89
+ close();
90
+ }
91
+ }
92
+
93
+ function close() {
94
+ isOpen = false;
95
+ searchQuery = '';
96
+ focusedIndex = -1;
97
+ }
98
+
99
+ function selectCountry(c: Country) {
100
+ country = c;
101
+ close();
102
+ triggerElement?.focus();
103
+ }
104
+
105
+ function handleKeydown(event: KeyboardEvent) {
106
+ if (disabled) return;
107
+
108
+ switch (event.key) {
109
+ case "Enter":
110
+ event.preventDefault();
111
+ if (isOpen && focusedIndex >= 0 && focusedIndex < filteredCountries.length) {
112
+ selectCountry(filteredCountries[focusedIndex]);
113
+ } else if (!isOpen) {
114
+ toggle();
115
+ }
116
+ break;
117
+ case "ArrowDown":
118
+ event.preventDefault();
119
+ if (!isOpen) {
120
+ toggle();
121
+ } else {
122
+ focusedIndex = Math.min(focusedIndex + 1, filteredCountries.length - 1);
123
+ scrollToFocused();
124
+ }
125
+ break;
126
+ case "ArrowUp":
127
+ event.preventDefault();
128
+ if (isOpen) {
129
+ focusedIndex = Math.max(focusedIndex - 1, 0);
130
+ scrollToFocused();
131
+ }
132
+ break;
133
+ case "Escape":
134
+ event.preventDefault();
135
+ close();
136
+ triggerElement?.focus();
137
+ break;
138
+ case "Tab":
139
+ close();
140
+ break;
141
+ }
142
+ }
143
+
144
+ function scrollToFocused() {
145
+ tick().then(() => {
146
+ const el = dropdownElement?.querySelector(`[data-index="${focusedIndex}"]`);
147
+ el?.scrollIntoView({ block: 'nearest' });
148
+ });
149
+ }
150
+
151
+ function handleClickOutside(event: MouseEvent) {
152
+ if (!isOpen) return;
153
+ const target = event.target as Node;
154
+ const clickedOutsideTrigger = triggerElement && !triggerElement.contains(target);
155
+ const clickedOutsideDropdown = !dropdownElement || !dropdownElement.contains(target);
156
+ if (clickedOutsideTrigger && clickedOutsideDropdown) {
157
+ close();
158
+ }
159
+ }
160
+
161
+ onMount(() => {
162
+ document.addEventListener("click", handleClickOutside, true);
163
+ window.addEventListener("select-opened", handleOtherSelectOpened);
164
+ window.addEventListener("scroll", updateDropdownPosition, true);
165
+ window.addEventListener("resize", updateDropdownPosition);
166
+
167
+ return () => {
168
+ document.removeEventListener("click", handleClickOutside, true);
169
+ window.removeEventListener("select-opened", handleOtherSelectOpened);
170
+ window.removeEventListener("scroll", updateDropdownPosition, true);
171
+ window.removeEventListener("resize", updateDropdownPosition);
172
+ };
173
+ });
174
+ </script>
175
+
176
+ <div class="relative shrink-0">
177
+ <button
178
+ type="button"
179
+ bind:this={triggerElement}
180
+ class="flex items-center {sizeClass} bg-gray-50 dark:bg-gray-800 border border-r-0 rounded-l-lg cursor-pointer transition-colors text-left focus:outline-hidden focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800 border-gray-300 dark:border-gray-600 hover:border-blue-500 dark:hover:border-blue-500 {disabled ? 'opacity-50 cursor-not-allowed' : ''}"
181
+ {disabled}
182
+ aria-haspopup="listbox"
183
+ aria-expanded={isOpen}
184
+ aria-label={labels.countrySelector}
185
+ onclick={toggle}
186
+ onkeydown={handleKeydown}
187
+ >
188
+ <span class="text-lg leading-none">{country.flag}</span>
189
+ <span class={`${typography.sm} whitespace-nowrap`}>{country.dialCode}</span>
190
+ <ChevronDownOutline class="w-3 h-3 shrink-0 {typography.iconMuted} transition-transform duration-200 {isOpen ? 'rotate-180' : ''}" />
191
+ </button>
192
+
193
+ {#if isOpen}
194
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
195
+ <div
196
+ bind:this={dropdownElement}
197
+ class="fixed z-[9999] bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-lg shadow-lg overflow-hidden"
198
+ style="top: {dropdownPosition.top}px; left: {dropdownPosition.left}px; width: {dropdownPosition.width}px;"
199
+ role="listbox"
200
+ tabindex="-1"
201
+ aria-label={labels.countrySelector}
202
+ transition:bloom={{ origin: "top left" }}
203
+ >
204
+ <!-- Search -->
205
+ <div class="p-2 border-b border-gray-200 dark:border-gray-600">
206
+ <input
207
+ bind:this={searchInputElement}
208
+ type="text"
209
+ class="w-full px-3 py-2 text-sm bg-gray-50 dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg text-gray-900 dark:text-white focus:outline-hidden focus:ring-2 focus:ring-blue-300 dark:focus:ring-blue-800 placeholder-gray-400 dark:placeholder-gray-500"
210
+ placeholder={labels.searchPlaceholder}
211
+ bind:value={searchQuery}
212
+ onkeydown={handleKeydown}
213
+ />
214
+ </div>
215
+
216
+ <!-- List -->
217
+ <div class="max-h-60 overflow-y-auto py-1">
218
+ {#each filteredCountries as c, idx}
219
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
220
+ <li
221
+ class={`flex items-center gap-3 px-3 py-2 cursor-pointer ${typography.sm} transition-colors ${c.code === country.code ? '' : typography.textMuted} ${idx === focusedIndex ? 'bg-gray-100 dark:bg-gray-600' : 'hover:bg-gray-100 dark:hover:bg-gray-600'}`}
222
+ role="option"
223
+ aria-selected={c.code === country.code}
224
+ data-index={idx}
225
+ onclick={() => selectCountry(c)}
226
+ onmouseenter={() => (focusedIndex = idx)}
227
+ >
228
+ <span class="text-lg leading-none">{c.flag}</span>
229
+ <span class="flex-1">{c.name}</span>
230
+ <span class={typography.textMuted}>{c.dialCode}</span>
231
+ </li>
232
+ {:else}
233
+ <div class={`px-3 py-4 text-center ${typography.textMuted}`}>
234
+ {labels.noResults}
235
+ </div>
236
+ {/each}
237
+ </div>
238
+ </div>
239
+ {/if}
240
+ </div>
@@ -0,0 +1,15 @@
1
+ import { type Country } from "./countryData";
2
+ interface Props {
3
+ country?: Country;
4
+ disabled?: boolean;
5
+ size?: "sm" | "md" | "lg";
6
+ labels?: {
7
+ searchPlaceholder?: string;
8
+ noResults?: string;
9
+ countrySelector?: string;
10
+ };
11
+ }
12
+ declare const CountrySelector: import("svelte").Component<Props, {}, "country">;
13
+ type CountrySelector = ReturnType<typeof CountrySelector>;
14
+ export default CountrySelector;
15
+ //# sourceMappingURL=CountrySelector.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CountrySelector.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/recipes/inputs/phoneInput/CountrySelector.svelte.ts"],"names":[],"mappings":"AAOA,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAGtD,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE;QACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AA0MH,QAAA,MAAM,eAAe,kDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface Country {
2
+ /** ISO 3166-1 alpha-2 code */
3
+ code: string;
4
+ /** Display name */
5
+ name: string;
6
+ /** Dial code with + prefix */
7
+ dialCode: string;
8
+ /** Emoji flag */
9
+ flag: string;
10
+ /** Priority for shared dial codes (lower = higher priority) */
11
+ priority?: number;
12
+ }
13
+ export declare const COUNTRIES: Country[];
14
+ /** Get a country by ISO code */
15
+ export declare function getCountry(code: string): Country | undefined;
16
+ /** Get the suggested countries (pinned to top of selector) */
17
+ export declare function getSuggestedCountries(): Country[];
18
+ //# sourceMappingURL=countryData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countryData.d.ts","sourceRoot":"","sources":["../../../../src/lib/recipes/inputs/phoneInput/countryData.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,SAAS,EAAE,OAAO,EAwM9B,CAAC;AAEF,gCAAgC;AAChC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5D;AAKD,8DAA8D;AAC9D,wBAAgB,qBAAqB,IAAI,OAAO,EAAE,CAEjD"}
@@ -0,0 +1,211 @@
1
+ export const COUNTRIES = [
2
+ { code: 'US', name: 'United States', dialCode: '+1', flag: '🇺🇸', priority: 0 },
3
+ { code: 'AF', name: 'Afghanistan', dialCode: '+93', flag: '🇦🇫' },
4
+ { code: 'AL', name: 'Albania', dialCode: '+355', flag: '🇦🇱' },
5
+ { code: 'DZ', name: 'Algeria', dialCode: '+213', flag: '🇩🇿' },
6
+ { code: 'AD', name: 'Andorra', dialCode: '+376', flag: '🇦🇩' },
7
+ { code: 'AO', name: 'Angola', dialCode: '+244', flag: '🇦🇴' },
8
+ { code: 'AG', name: 'Antigua and Barbuda', dialCode: '+1268', flag: '🇦🇬' },
9
+ { code: 'AR', name: 'Argentina', dialCode: '+54', flag: '🇦🇷' },
10
+ { code: 'AM', name: 'Armenia', dialCode: '+374', flag: '🇦🇲' },
11
+ { code: 'AU', name: 'Australia', dialCode: '+61', flag: '🇦🇺' },
12
+ { code: 'AT', name: 'Austria', dialCode: '+43', flag: '🇦🇹' },
13
+ { code: 'AZ', name: 'Azerbaijan', dialCode: '+994', flag: '🇦🇿' },
14
+ { code: 'BS', name: 'Bahamas', dialCode: '+1242', flag: '🇧🇸' },
15
+ { code: 'BH', name: 'Bahrain', dialCode: '+973', flag: '🇧🇭' },
16
+ { code: 'BD', name: 'Bangladesh', dialCode: '+880', flag: '🇧🇩' },
17
+ { code: 'BB', name: 'Barbados', dialCode: '+1246', flag: '🇧🇧' },
18
+ { code: 'BY', name: 'Belarus', dialCode: '+375', flag: '🇧🇾' },
19
+ { code: 'BE', name: 'Belgium', dialCode: '+32', flag: '🇧🇪' },
20
+ { code: 'BZ', name: 'Belize', dialCode: '+501', flag: '🇧🇿' },
21
+ { code: 'BJ', name: 'Benin', dialCode: '+229', flag: '🇧🇯' },
22
+ { code: 'BT', name: 'Bhutan', dialCode: '+975', flag: '🇧🇹' },
23
+ { code: 'BO', name: 'Bolivia', dialCode: '+591', flag: '🇧🇴' },
24
+ { code: 'BA', name: 'Bosnia and Herzegovina', dialCode: '+387', flag: '🇧🇦' },
25
+ { code: 'BW', name: 'Botswana', dialCode: '+267', flag: '🇧🇼' },
26
+ { code: 'BR', name: 'Brazil', dialCode: '+55', flag: '🇧🇷' },
27
+ { code: 'BN', name: 'Brunei', dialCode: '+673', flag: '🇧🇳' },
28
+ { code: 'BG', name: 'Bulgaria', dialCode: '+359', flag: '🇧🇬' },
29
+ { code: 'BF', name: 'Burkina Faso', dialCode: '+226', flag: '🇧🇫' },
30
+ { code: 'BI', name: 'Burundi', dialCode: '+257', flag: '🇧🇮' },
31
+ { code: 'CV', name: 'Cabo Verde', dialCode: '+238', flag: '🇨🇻' },
32
+ { code: 'KH', name: 'Cambodia', dialCode: '+855', flag: '🇰🇭' },
33
+ { code: 'CM', name: 'Cameroon', dialCode: '+237', flag: '🇨🇲' },
34
+ { code: 'CA', name: 'Canada', dialCode: '+1', flag: '🇨🇦', priority: 1 },
35
+ { code: 'CF', name: 'Central African Republic', dialCode: '+236', flag: '🇨🇫' },
36
+ { code: 'TD', name: 'Chad', dialCode: '+235', flag: '🇹🇩' },
37
+ { code: 'CL', name: 'Chile', dialCode: '+56', flag: '🇨🇱' },
38
+ { code: 'CN', name: 'China', dialCode: '+86', flag: '🇨🇳' },
39
+ { code: 'CO', name: 'Colombia', dialCode: '+57', flag: '🇨🇴' },
40
+ { code: 'KM', name: 'Comoros', dialCode: '+269', flag: '🇰🇲' },
41
+ { code: 'CG', name: 'Congo', dialCode: '+242', flag: '🇨🇬' },
42
+ { code: 'CD', name: 'Congo (DRC)', dialCode: '+243', flag: '🇨🇩' },
43
+ { code: 'CR', name: 'Costa Rica', dialCode: '+506', flag: '🇨🇷' },
44
+ { code: 'CI', name: "Côte d'Ivoire", dialCode: '+225', flag: '🇨🇮' },
45
+ { code: 'HR', name: 'Croatia', dialCode: '+385', flag: '🇭🇷' },
46
+ { code: 'CU', name: 'Cuba', dialCode: '+53', flag: '🇨🇺' },
47
+ { code: 'CY', name: 'Cyprus', dialCode: '+357', flag: '🇨🇾' },
48
+ { code: 'CZ', name: 'Czech Republic', dialCode: '+420', flag: '🇨🇿' },
49
+ { code: 'DK', name: 'Denmark', dialCode: '+45', flag: '🇩🇰' },
50
+ { code: 'DJ', name: 'Djibouti', dialCode: '+253', flag: '🇩🇯' },
51
+ { code: 'DM', name: 'Dominica', dialCode: '+1767', flag: '🇩🇲' },
52
+ { code: 'DO', name: 'Dominican Republic', dialCode: '+1809', flag: '🇩🇴' },
53
+ { code: 'EC', name: 'Ecuador', dialCode: '+593', flag: '🇪🇨' },
54
+ { code: 'EG', name: 'Egypt', dialCode: '+20', flag: '🇪🇬' },
55
+ { code: 'SV', name: 'El Salvador', dialCode: '+503', flag: '🇸🇻' },
56
+ { code: 'GQ', name: 'Equatorial Guinea', dialCode: '+240', flag: '🇬🇶' },
57
+ { code: 'ER', name: 'Eritrea', dialCode: '+291', flag: '🇪🇷' },
58
+ { code: 'EE', name: 'Estonia', dialCode: '+372', flag: '🇪🇪' },
59
+ { code: 'SZ', name: 'Eswatini', dialCode: '+268', flag: '🇸🇿' },
60
+ { code: 'ET', name: 'Ethiopia', dialCode: '+251', flag: '🇪🇹' },
61
+ { code: 'FJ', name: 'Fiji', dialCode: '+679', flag: '🇫🇯' },
62
+ { code: 'FI', name: 'Finland', dialCode: '+358', flag: '🇫🇮' },
63
+ { code: 'FR', name: 'France', dialCode: '+33', flag: '🇫🇷' },
64
+ { code: 'GA', name: 'Gabon', dialCode: '+241', flag: '🇬🇦' },
65
+ { code: 'GM', name: 'Gambia', dialCode: '+220', flag: '🇬🇲' },
66
+ { code: 'GE', name: 'Georgia', dialCode: '+995', flag: '🇬🇪' },
67
+ { code: 'DE', name: 'Germany', dialCode: '+49', flag: '🇩🇪' },
68
+ { code: 'GH', name: 'Ghana', dialCode: '+233', flag: '🇬🇭' },
69
+ { code: 'GR', name: 'Greece', dialCode: '+30', flag: '🇬🇷' },
70
+ { code: 'GD', name: 'Grenada', dialCode: '+1473', flag: '🇬🇩' },
71
+ { code: 'GT', name: 'Guatemala', dialCode: '+502', flag: '🇬🇹' },
72
+ { code: 'GN', name: 'Guinea', dialCode: '+224', flag: '🇬🇳' },
73
+ { code: 'GW', name: 'Guinea-Bissau', dialCode: '+245', flag: '🇬🇼' },
74
+ { code: 'GY', name: 'Guyana', dialCode: '+592', flag: '🇬🇾' },
75
+ { code: 'HT', name: 'Haiti', dialCode: '+509', flag: '🇭🇹' },
76
+ { code: 'HN', name: 'Honduras', dialCode: '+504', flag: '🇭🇳' },
77
+ { code: 'HK', name: 'Hong Kong', dialCode: '+852', flag: '🇭🇰' },
78
+ { code: 'HU', name: 'Hungary', dialCode: '+36', flag: '🇭🇺' },
79
+ { code: 'IS', name: 'Iceland', dialCode: '+354', flag: '🇮🇸' },
80
+ { code: 'IN', name: 'India', dialCode: '+91', flag: '🇮🇳' },
81
+ { code: 'ID', name: 'Indonesia', dialCode: '+62', flag: '🇮🇩' },
82
+ { code: 'IR', name: 'Iran', dialCode: '+98', flag: '🇮🇷' },
83
+ { code: 'IQ', name: 'Iraq', dialCode: '+964', flag: '🇮🇶' },
84
+ { code: 'IE', name: 'Ireland', dialCode: '+353', flag: '🇮🇪' },
85
+ { code: 'IL', name: 'Israel', dialCode: '+972', flag: '🇮🇱' },
86
+ { code: 'IT', name: 'Italy', dialCode: '+39', flag: '🇮🇹' },
87
+ { code: 'JM', name: 'Jamaica', dialCode: '+1876', flag: '🇯🇲' },
88
+ { code: 'JP', name: 'Japan', dialCode: '+81', flag: '🇯🇵' },
89
+ { code: 'JO', name: 'Jordan', dialCode: '+962', flag: '🇯🇴' },
90
+ { code: 'KZ', name: 'Kazakhstan', dialCode: '+7', flag: '🇰🇿', priority: 1 },
91
+ { code: 'KE', name: 'Kenya', dialCode: '+254', flag: '🇰🇪' },
92
+ { code: 'KI', name: 'Kiribati', dialCode: '+686', flag: '🇰🇮' },
93
+ { code: 'KP', name: 'North Korea', dialCode: '+850', flag: '🇰🇵' },
94
+ { code: 'KR', name: 'South Korea', dialCode: '+82', flag: '🇰🇷' },
95
+ { code: 'KW', name: 'Kuwait', dialCode: '+965', flag: '🇰🇼' },
96
+ { code: 'KG', name: 'Kyrgyzstan', dialCode: '+996', flag: '🇰🇬' },
97
+ { code: 'LA', name: 'Laos', dialCode: '+856', flag: '🇱🇦' },
98
+ { code: 'LV', name: 'Latvia', dialCode: '+371', flag: '🇱🇻' },
99
+ { code: 'LB', name: 'Lebanon', dialCode: '+961', flag: '🇱🇧' },
100
+ { code: 'LS', name: 'Lesotho', dialCode: '+266', flag: '🇱🇸' },
101
+ { code: 'LR', name: 'Liberia', dialCode: '+231', flag: '🇱🇷' },
102
+ { code: 'LY', name: 'Libya', dialCode: '+218', flag: '🇱🇾' },
103
+ { code: 'LI', name: 'Liechtenstein', dialCode: '+423', flag: '🇱🇮' },
104
+ { code: 'LT', name: 'Lithuania', dialCode: '+370', flag: '🇱🇹' },
105
+ { code: 'LU', name: 'Luxembourg', dialCode: '+352', flag: '🇱🇺' },
106
+ { code: 'MO', name: 'Macao', dialCode: '+853', flag: '🇲🇴' },
107
+ { code: 'MG', name: 'Madagascar', dialCode: '+261', flag: '🇲🇬' },
108
+ { code: 'MW', name: 'Malawi', dialCode: '+265', flag: '🇲🇼' },
109
+ { code: 'MY', name: 'Malaysia', dialCode: '+60', flag: '🇲🇾' },
110
+ { code: 'MV', name: 'Maldives', dialCode: '+960', flag: '🇲🇻' },
111
+ { code: 'ML', name: 'Mali', dialCode: '+223', flag: '🇲🇱' },
112
+ { code: 'MT', name: 'Malta', dialCode: '+356', flag: '🇲🇹' },
113
+ { code: 'MH', name: 'Marshall Islands', dialCode: '+692', flag: '🇲🇭' },
114
+ { code: 'MR', name: 'Mauritania', dialCode: '+222', flag: '🇲🇷' },
115
+ { code: 'MU', name: 'Mauritius', dialCode: '+230', flag: '🇲🇺' },
116
+ { code: 'MX', name: 'Mexico', dialCode: '+52', flag: '🇲🇽' },
117
+ { code: 'FM', name: 'Micronesia', dialCode: '+691', flag: '🇫🇲' },
118
+ { code: 'MD', name: 'Moldova', dialCode: '+373', flag: '🇲🇩' },
119
+ { code: 'MC', name: 'Monaco', dialCode: '+377', flag: '🇲🇨' },
120
+ { code: 'MN', name: 'Mongolia', dialCode: '+976', flag: '🇲🇳' },
121
+ { code: 'ME', name: 'Montenegro', dialCode: '+382', flag: '🇲🇪' },
122
+ { code: 'MA', name: 'Morocco', dialCode: '+212', flag: '🇲🇦' },
123
+ { code: 'MZ', name: 'Mozambique', dialCode: '+258', flag: '🇲🇿' },
124
+ { code: 'MM', name: 'Myanmar', dialCode: '+95', flag: '🇲🇲' },
125
+ { code: 'NA', name: 'Namibia', dialCode: '+264', flag: '🇳🇦' },
126
+ { code: 'NR', name: 'Nauru', dialCode: '+674', flag: '🇳🇷' },
127
+ { code: 'NP', name: 'Nepal', dialCode: '+977', flag: '🇳🇵' },
128
+ { code: 'NL', name: 'Netherlands', dialCode: '+31', flag: '🇳🇱' },
129
+ { code: 'NZ', name: 'New Zealand', dialCode: '+64', flag: '🇳🇿' },
130
+ { code: 'NI', name: 'Nicaragua', dialCode: '+505', flag: '🇳🇮' },
131
+ { code: 'NE', name: 'Niger', dialCode: '+227', flag: '🇳🇪' },
132
+ { code: 'NG', name: 'Nigeria', dialCode: '+234', flag: '🇳🇬' },
133
+ { code: 'MK', name: 'North Macedonia', dialCode: '+389', flag: '🇲🇰' },
134
+ { code: 'NO', name: 'Norway', dialCode: '+47', flag: '🇳🇴' },
135
+ { code: 'OM', name: 'Oman', dialCode: '+968', flag: '🇴🇲' },
136
+ { code: 'PK', name: 'Pakistan', dialCode: '+92', flag: '🇵🇰' },
137
+ { code: 'PW', name: 'Palau', dialCode: '+680', flag: '🇵🇼' },
138
+ { code: 'PS', name: 'Palestine', dialCode: '+970', flag: '🇵🇸' },
139
+ { code: 'PA', name: 'Panama', dialCode: '+507', flag: '🇵🇦' },
140
+ { code: 'PG', name: 'Papua New Guinea', dialCode: '+675', flag: '🇵🇬' },
141
+ { code: 'PY', name: 'Paraguay', dialCode: '+595', flag: '🇵🇾' },
142
+ { code: 'PE', name: 'Peru', dialCode: '+51', flag: '🇵🇪' },
143
+ { code: 'PH', name: 'Philippines', dialCode: '+63', flag: '🇵🇭' },
144
+ { code: 'PL', name: 'Poland', dialCode: '+48', flag: '🇵🇱' },
145
+ { code: 'PT', name: 'Portugal', dialCode: '+351', flag: '🇵🇹' },
146
+ { code: 'PR', name: 'Puerto Rico', dialCode: '+1787', flag: '🇵🇷' },
147
+ { code: 'QA', name: 'Qatar', dialCode: '+974', flag: '🇶🇦' },
148
+ { code: 'RO', name: 'Romania', dialCode: '+40', flag: '🇷🇴' },
149
+ { code: 'RU', name: 'Russia', dialCode: '+7', flag: '🇷🇺', priority: 0 },
150
+ { code: 'RW', name: 'Rwanda', dialCode: '+250', flag: '🇷🇼' },
151
+ { code: 'KN', name: 'Saint Kitts and Nevis', dialCode: '+1869', flag: '🇰🇳' },
152
+ { code: 'LC', name: 'Saint Lucia', dialCode: '+1758', flag: '🇱🇨' },
153
+ { code: 'VC', name: 'Saint Vincent and the Grenadines', dialCode: '+1784', flag: '🇻🇨' },
154
+ { code: 'WS', name: 'Samoa', dialCode: '+685', flag: '🇼🇸' },
155
+ { code: 'SM', name: 'San Marino', dialCode: '+378', flag: '🇸🇲' },
156
+ { code: 'ST', name: 'São Tomé and Príncipe', dialCode: '+239', flag: '🇸🇹' },
157
+ { code: 'SA', name: 'Saudi Arabia', dialCode: '+966', flag: '🇸🇦' },
158
+ { code: 'SN', name: 'Senegal', dialCode: '+221', flag: '🇸🇳' },
159
+ { code: 'RS', name: 'Serbia', dialCode: '+381', flag: '🇷🇸' },
160
+ { code: 'SC', name: 'Seychelles', dialCode: '+248', flag: '🇸🇨' },
161
+ { code: 'SL', name: 'Sierra Leone', dialCode: '+232', flag: '🇸🇱' },
162
+ { code: 'SG', name: 'Singapore', dialCode: '+65', flag: '🇸🇬' },
163
+ { code: 'SK', name: 'Slovakia', dialCode: '+421', flag: '🇸🇰' },
164
+ { code: 'SI', name: 'Slovenia', dialCode: '+386', flag: '🇸🇮' },
165
+ { code: 'SB', name: 'Solomon Islands', dialCode: '+677', flag: '🇸🇧' },
166
+ { code: 'SO', name: 'Somalia', dialCode: '+252', flag: '🇸🇴' },
167
+ { code: 'ZA', name: 'South Africa', dialCode: '+27', flag: '🇿🇦' },
168
+ { code: 'SS', name: 'South Sudan', dialCode: '+211', flag: '🇸🇸' },
169
+ { code: 'ES', name: 'Spain', dialCode: '+34', flag: '🇪🇸' },
170
+ { code: 'LK', name: 'Sri Lanka', dialCode: '+94', flag: '🇱🇰' },
171
+ { code: 'SD', name: 'Sudan', dialCode: '+249', flag: '🇸🇩' },
172
+ { code: 'SR', name: 'Suriname', dialCode: '+597', flag: '🇸🇷' },
173
+ { code: 'SE', name: 'Sweden', dialCode: '+46', flag: '🇸🇪' },
174
+ { code: 'CH', name: 'Switzerland', dialCode: '+41', flag: '🇨🇭' },
175
+ { code: 'SY', name: 'Syria', dialCode: '+963', flag: '🇸🇾' },
176
+ { code: 'TW', name: 'Taiwan', dialCode: '+886', flag: '🇹🇼' },
177
+ { code: 'TJ', name: 'Tajikistan', dialCode: '+992', flag: '🇹🇯' },
178
+ { code: 'TZ', name: 'Tanzania', dialCode: '+255', flag: '🇹🇿' },
179
+ { code: 'TH', name: 'Thailand', dialCode: '+66', flag: '🇹🇭' },
180
+ { code: 'TL', name: 'Timor-Leste', dialCode: '+670', flag: '🇹🇱' },
181
+ { code: 'TG', name: 'Togo', dialCode: '+228', flag: '🇹🇬' },
182
+ { code: 'TO', name: 'Tonga', dialCode: '+676', flag: '🇹🇴' },
183
+ { code: 'TT', name: 'Trinidad and Tobago', dialCode: '+1868', flag: '🇹🇹' },
184
+ { code: 'TN', name: 'Tunisia', dialCode: '+216', flag: '🇹🇳' },
185
+ { code: 'TR', name: 'Turkey', dialCode: '+90', flag: '🇹🇷' },
186
+ { code: 'TM', name: 'Turkmenistan', dialCode: '+993', flag: '🇹🇲' },
187
+ { code: 'TV', name: 'Tuvalu', dialCode: '+688', flag: '🇹🇻' },
188
+ { code: 'UG', name: 'Uganda', dialCode: '+256', flag: '🇺🇬' },
189
+ { code: 'UA', name: 'Ukraine', dialCode: '+380', flag: '🇺🇦' },
190
+ { code: 'AE', name: 'United Arab Emirates', dialCode: '+971', flag: '🇦🇪' },
191
+ { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: '🇬🇧' },
192
+ { code: 'UY', name: 'Uruguay', dialCode: '+598', flag: '🇺🇾' },
193
+ { code: 'UZ', name: 'Uzbekistan', dialCode: '+998', flag: '🇺🇿' },
194
+ { code: 'VU', name: 'Vanuatu', dialCode: '+678', flag: '🇻🇺' },
195
+ { code: 'VA', name: 'Vatican City', dialCode: '+379', flag: '🇻🇦' },
196
+ { code: 'VE', name: 'Venezuela', dialCode: '+58', flag: '🇻🇪' },
197
+ { code: 'VN', name: 'Vietnam', dialCode: '+84', flag: '🇻🇳' },
198
+ { code: 'YE', name: 'Yemen', dialCode: '+967', flag: '🇾🇪' },
199
+ { code: 'ZM', name: 'Zambia', dialCode: '+260', flag: '🇿🇲' },
200
+ { code: 'ZW', name: 'Zimbabwe', dialCode: '+263', flag: '🇿🇼' },
201
+ ];
202
+ /** Get a country by ISO code */
203
+ export function getCountry(code) {
204
+ return COUNTRIES.find((c) => c.code === code);
205
+ }
206
+ /** Country codes pinned to top of the country selector */
207
+ const SUGGESTED_CODES = ['US', 'CA', 'GB', 'AU'];
208
+ /** Get the suggested countries (pinned to top of selector) */
209
+ export function getSuggestedCountries() {
210
+ return SUGGESTED_CODES.map((code) => COUNTRIES.find((c) => c.code === code)).filter(Boolean);
211
+ }
@@ -19,6 +19,10 @@
19
19
  import { CheckOutline, CloseOutline, ExclamationTriangleOutline, InfoCircleOutline } from '../../primitives/Icons';
20
20
  import { typography } from '../../tokens/typography';
21
21
 
22
+ const defaultLabels = {
23
+ ok: 'OK',
24
+ };
25
+
22
26
  let {
23
27
  /** Whether the modal is visible */
24
28
  open = $bindable(false),
@@ -29,7 +33,7 @@
29
33
  /** Alert message */
30
34
  message = '',
31
35
  /** Button text */
32
- buttonText = 'OK',
36
+ buttonText = undefined,
33
37
  /** Auto-close delay in milliseconds (0 to disable) */
34
38
  autoClose = 0,
35
39
  /** Modal size */
@@ -37,8 +41,13 @@
37
41
  /** Callbacks */
38
42
  onclose,
39
43
  onconfirm,
44
+ /** Override user-visible strings */
45
+ labels: userLabels = {},
40
46
  } = $props();
41
47
 
48
+ let labels = $derived({ ...defaultLabels, ...userLabels });
49
+ let effectiveButtonText = $derived(buttonText ?? labels.ok);
50
+
42
51
  // Variant styles
43
52
  const variantStyles = {
44
53
  success: {
@@ -123,7 +132,7 @@
123
132
  variant={styles.button}
124
133
  onclick={handleConfirm}
125
134
  >
126
- {buttonText}
135
+ {effectiveButtonText}
127
136
  </Button>
128
137
  </div>
129
138
  {/snippet}
@@ -8,21 +8,23 @@ declare const AlertModal: import("svelte").Component<{
8
8
  variant?: string;
9
9
  title?: string;
10
10
  message?: string;
11
- buttonText?: string;
11
+ buttonText?: any;
12
12
  autoClose?: number;
13
13
  size?: string;
14
14
  onclose: any;
15
15
  onconfirm: any;
16
+ labels?: Record<string, any>;
16
17
  }, {}, "open">;
17
18
  type $$ComponentProps = {
18
19
  open?: boolean;
19
20
  variant?: string;
20
21
  title?: string;
21
22
  message?: string;
22
- buttonText?: string;
23
+ buttonText?: any;
23
24
  autoClose?: number;
24
25
  size?: string;
25
26
  onclose: any;
26
27
  onconfirm: any;
28
+ labels?: Record<string, any>;
27
29
  };
28
30
  //# sourceMappingURL=AlertModal.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AlertModal.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/modals/AlertModal.svelte.js"],"names":[],"mappings":";;;;;AA0IA;WA5G4B,OAAO;cAAY,MAAM;YAAU,MAAM;cAAY,MAAM;iBAAe,MAAM;gBAAc,MAAM;WAAS,MAAM;aAAW,GAAG;eAAa,GAAG;eA4GpH;wBA5GtC;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAA;CAAE"}
1
+ {"version":3,"file":"AlertModal.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/modals/AlertModal.svelte.js"],"names":[],"mappings":";;;;;AAmJA;WAjH4B,OAAO;cAAY,MAAM;YAAU,MAAM;cAAY,MAAM;iBAAe,GAAG;gBAAc,MAAM;WAAS,MAAM;aAAW,GAAG;eAAa,GAAG;aAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;eAiH/I;wBAjHtC;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE"}
@@ -5,6 +5,10 @@
5
5
  import { typography } from '../../tokens/typography';
6
6
  import { triggerHaptic } from '../../utils/haptic.js';
7
7
 
8
+ const defaultLabels = {
9
+ close: 'Close',
10
+ };
11
+
8
12
  let {
9
13
  open = $bindable(false),
10
14
  size = "md",
@@ -25,9 +29,12 @@
25
29
  onconfirm,
26
30
  oncancel,
27
31
  onclose,
32
+ labels: userLabels = {},
28
33
  ...restProps
29
34
  } = $props();
30
35
 
36
+ let labels = $derived({ ...defaultLabels, ...userLabels });
37
+
31
38
  let resolvedIcon = $derived(customIcon || icon);
32
39
 
33
40
  let resolvedActions = $derived(actions.length > 0 ? actions : buildActionsFromProps());
@@ -113,7 +120,7 @@
113
120
  {#if closeBtn}
114
121
  <div class="flex justify-end -mt-2 -mr-2 mb-2">
115
122
  <Button variant="icon" size="xs" onclick={handleClose} {disabled}>
116
- <img src={Cancel} alt="Close" class="w-5 h-5" />
123
+ <img src={Cancel} alt={labels.close} class="w-5 h-5" />
117
124
  </Button>
118
125
  </div>
119
126
  {/if}
@@ -22,6 +22,7 @@ declare const ConfirmationModal: import("svelte").Component<{
22
22
  onconfirm: any;
23
23
  oncancel: any;
24
24
  onclose: any;
25
+ labels?: Record<string, any>;
25
26
  } & Record<string, any>, {}, "open">;
26
27
  type $$ComponentProps = {
27
28
  open?: boolean;
@@ -42,5 +43,6 @@ type $$ComponentProps = {
42
43
  onconfirm: any;
43
44
  oncancel: any;
44
45
  onclose: any;
46
+ labels?: Record<string, any>;
45
47
  } & Record<string, any>;
46
48
  //# sourceMappingURL=ConfirmationModal.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationModal.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/modals/ConfirmationModal.svelte.js"],"names":[],"mappings":";;;;;AAuKA;WAvJ4B,OAAO;WAAS,MAAM;YAAU,MAAM;kBAAgB,MAAM;kBAAgB,MAAM;cAAY,GAAG,EAAE;WAAS,GAAG;iBAAe,GAAG;eAAa,OAAO;wBAAsB,MAAM;0BAAwB,MAAM;cAAY,MAAM;cAAY,OAAO;eAAa,OAAO;aAAW,OAAO;eAAa,GAAG;cAAY,GAAG;aAAW,GAAG;qCAuJnS;wBAvJ7C;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC"}
1
+ {"version":3,"file":"ConfirmationModal.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/modals/ConfirmationModal.svelte.js"],"names":[],"mappings":";;;;;AA8KA;WA1J4B,OAAO;WAAS,MAAM;YAAU,MAAM;kBAAgB,MAAM;kBAAgB,MAAM;cAAY,GAAG,EAAE;WAAS,GAAG;iBAAe,GAAG;eAAa,OAAO;wBAAsB,MAAM;0BAAwB,MAAM;cAAY,MAAM;cAAY,OAAO;eAAa,OAAO;aAAW,OAAO;eAAa,GAAG;cAAY,GAAG;aAAW,GAAG;aAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;qCA0JjU;wBA1J7C;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC"}