@getmicdrop/svelte-components 5.18.0 β†’ 5.18.2

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 (142) 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/Checkbox/Checkbox.spec.js +4 -15
  60. package/dist/primitives/Checkbox/Checkbox.svelte +4 -4
  61. package/dist/primitives/DarkModeToggle.svelte +16 -5
  62. package/dist/primitives/DarkModeToggle.svelte.d.ts +9 -3
  63. package/dist/primitives/DarkModeToggle.svelte.d.ts.map +1 -1
  64. package/dist/primitives/Dropdown/Dropdown.svelte +11 -2
  65. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts +7 -4
  66. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts.map +1 -1
  67. package/dist/primitives/Input/Input.svelte +19 -6
  68. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  69. package/dist/primitives/NumberInput/NumberInput.svelte +10 -2
  70. package/dist/primitives/NumberInput/NumberInput.svelte.d.ts.map +1 -1
  71. package/dist/primitives/Pagination/Pagination.svelte +21 -7
  72. package/dist/primitives/Pagination/Pagination.svelte.d.ts +14 -6
  73. package/dist/primitives/Pagination/Pagination.svelte.d.ts.map +1 -1
  74. package/dist/primitives/Skeleton/CardPlaceholder.svelte +11 -2
  75. package/dist/primitives/Skeleton/CardPlaceholder.svelte.d.ts +8 -5
  76. package/dist/primitives/Skeleton/CardPlaceholder.svelte.d.ts.map +1 -1
  77. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +11 -2
  78. package/dist/primitives/Skeleton/ImagePlaceholder.svelte.d.ts +8 -5
  79. package/dist/primitives/Skeleton/ImagePlaceholder.svelte.d.ts.map +1 -1
  80. package/dist/primitives/Skeleton/ListPlaceholder.svelte +11 -2
  81. package/dist/primitives/Skeleton/ListPlaceholder.svelte.d.ts +8 -5
  82. package/dist/primitives/Skeleton/ListPlaceholder.svelte.d.ts.map +1 -1
  83. package/dist/primitives/Skeleton/Skeleton.svelte +11 -2
  84. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts +7 -4
  85. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts.map +1 -1
  86. package/dist/primitives/Spinner/Spinner.svelte +9 -1
  87. package/dist/primitives/Spinner/Spinner.svelte.d.ts +6 -4
  88. package/dist/primitives/Spinner/Spinner.svelte.d.ts.map +1 -1
  89. package/dist/recipes/ImageUploader/ImageUploader.svelte +5 -3
  90. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts +1 -0
  91. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts.map +1 -1
  92. package/dist/recipes/SuperLogin/SuperLogin.svelte +25 -23
  93. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  94. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +12 -3
  95. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts +7 -4
  96. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -1
  97. package/dist/recipes/inputs/MultiSelect.svelte +10 -2
  98. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  99. package/dist/recipes/inputs/OTPInput.svelte +14 -3
  100. package/dist/recipes/inputs/OTPInput.svelte.d.ts +14 -12
  101. package/dist/recipes/inputs/OTPInput.svelte.d.ts.map +1 -1
  102. package/dist/recipes/inputs/PasswordInput.svelte +10 -1
  103. package/dist/recipes/inputs/PasswordInput.svelte.d.ts +7 -4
  104. package/dist/recipes/inputs/PasswordInput.svelte.d.ts.map +1 -1
  105. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +21 -10
  106. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts +8 -3
  107. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts.map +1 -1
  108. package/dist/recipes/inputs/PhoneInput.svelte +1 -5
  109. package/dist/recipes/inputs/PhoneInput.svelte.d.ts +0 -2
  110. package/dist/recipes/inputs/PhoneInput.svelte.d.ts.map +1 -1
  111. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +22 -9
  112. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts +21 -16
  113. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
  114. package/dist/recipes/inputs/Search.svelte +10 -2
  115. package/dist/recipes/inputs/Search.svelte.d.ts +7 -5
  116. package/dist/recipes/inputs/Search.svelte.d.ts.map +1 -1
  117. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +9 -66
  118. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte.d.ts +0 -2
  119. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte.d.ts.map +1 -1
  120. package/dist/recipes/inputs/phoneInput/countryData.d.ts +0 -2
  121. package/dist/recipes/inputs/phoneInput/countryData.d.ts.map +1 -1
  122. package/dist/recipes/inputs/phoneInput/countryData.js +3 -3
  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/utils.js +25 -16
  142. package/package.json +1 -1
@@ -4,6 +4,15 @@
4
4
  import { PUBLIC_GOOGLE_MAPS_API_KEY } from '../../../config.js';
5
5
  import { typography } from '../../../tokens/typography';
6
6
  import { bloom } from '../../../utils/transitions.js';
7
+
8
+ const defaultLabels = {
9
+ anErrorOccurred: 'An error occurred',
10
+ seeConsoleForDetails: 'see console for details.',
11
+ errorFetchingPlaceDetails: 'error fetching place details',
12
+ errorFetchToken: 'error fetch token',
13
+ errorLoadingGoogleMapsApi: 'Error loading Google Maps API',
14
+ googleMapsApiKeyRequired: 'Google Maps API key is required',
15
+ };
7
16
  /** Google Places API address component */ interface AddressComponent { longText: string; shortText: string; types: string[]; } /** Google Places API response data */ interface PlaceData { formattedAddress?: string; addressComponents?: AddressComponent[]; text?: string; [key: string]: unknown; } /** Google Places autocomplete suggestion */ interface AutocompleteSuggestion { placePrediction: { types: string[]; text: { toString(): string }; toPlace(): PlaceObject; }; } /** Google Places place object */ interface PlaceObject { fetchFields(options: { fields: string[] }): Promise<void>; toJSON(): PlaceData; } /** Google Places API interface */ interface PlacesApiInterface { AutocompleteSessionToken: new () => AutocompleteSessionToken; AutocompleteSuggestion: { fetchAutocompleteSuggestions(request: AutocompleteRequest): Promise<{ suggestions: AutocompleteSuggestion[] }>; }; } /** Google Places autocomplete session token */ interface AutocompleteSessionToken {} /** Autocomplete request parameters */ interface AutocompleteRequest { input: string; language: string; region: string; sessionToken: AutocompleteSessionToken | string; } /** Search result item */ interface SearchResult { to_place: PlaceObject; text: string; originalText?: string; }
8
17
 
9
18
  interface Props {
@@ -18,6 +27,7 @@
18
27
  mode?: 'full' | 'cityState';
19
28
  animateFocus?: boolean;
20
29
  disabled?: boolean;
30
+ labels?: Partial<typeof defaultLabels>;
21
31
  }
22
32
 
23
33
  let {
@@ -32,8 +42,11 @@
32
42
  mode = 'full',
33
43
  animateFocus = true,
34
44
  disabled = false,
45
+ labels: userLabels = {},
35
46
  }: Props = $props();
36
47
 
48
+ let labels = $derived({ ...defaultLabels, ...userLabels });
49
+
37
50
  let shouldAnimate = $derived(animateFocus && !disabled);
38
51
 
39
52
  let inputRef: HTMLInputElement;
@@ -131,9 +144,9 @@
131
144
  } catch (e: unknown) {
132
145
  const error = e as { name?: string; message?: string };
133
146
  onError(
134
- (error.name || 'An error occurred') +
147
+ (error.name || labels.anErrorOccurred) +
135
148
  ' - ' +
136
- (error.message || 'see console for details.')
149
+ (error.message || labels.seeConsoleForDetails)
137
150
  );
138
151
  }
139
152
  };
@@ -156,9 +169,9 @@
156
169
  } catch (e: unknown) {
157
170
  const error = e as { name?: string; message?: string };
158
171
  onError(
159
- (error.name || 'An error occurred') +
172
+ (error.name || labels.anErrorOccurred) +
160
173
  ' - ' +
161
- (error.message || 'error fetching place details')
174
+ (error.message || labels.errorFetchingPlaceDetails)
162
175
  );
163
176
  }
164
177
 
@@ -175,9 +188,9 @@
175
188
  } catch (e: unknown) {
176
189
  const error = e as { name?: string; message?: string };
177
190
  onError(
178
- (error.name || 'An error occurred') +
191
+ (error.name || labels.anErrorOccurred) +
179
192
  ' - ' +
180
- (error.message || 'error fetch token')
193
+ (error.message || labels.errorFetchToken)
181
194
  );
182
195
  return req;
183
196
  }
@@ -236,7 +249,7 @@
236
249
  // Initialize Google Maps API
237
250
  const initGoogleMaps = async () => {
238
251
  if (!PUBLIC_GOOGLE_MAPS_API_KEY) {
239
- onError('Google Maps API key is required');
252
+ onError(labels.googleMapsApiKeyRequired);
240
253
  return;
241
254
  }
242
255
 
@@ -255,9 +268,9 @@
255
268
  } catch (e: unknown) {
256
269
  const error = e as { name?: string; message?: string };
257
270
  onError(
258
- (error.name || 'An error occurred') +
271
+ (error.name || labels.anErrorOccurred) +
259
272
  ' - ' +
260
- (error.message || 'Error loading Google Maps API')
273
+ (error.message || labels.errorLoadingGoogleMapsApi)
261
274
  );
262
275
  }
263
276
  };
@@ -1,28 +1,33 @@
1
- /** Google Places API address component */ interface AddressComponent {
2
- longText: string;
3
- shortText: string;
4
- types: string[];
5
- }
6
- /** Google Places API response data */ interface PlaceData {
7
- formattedAddress?: string;
8
- addressComponents?: AddressComponent[];
9
- text?: string;
10
- [key: string]: unknown;
11
- }
12
- interface Props {
1
+ declare const PlaceAutocomplete: import("svelte").Component<{
13
2
  fetchFields?: string[];
14
3
  placeholder?: string;
15
4
  language?: string;
16
5
  region?: string;
17
6
  autocomplete?: string;
18
7
  initialValue?: string;
19
- onResponse?: (data: PlaceData) => void;
8
+ onResponse?: (data: {
9
+ [key: string]: unknown;
10
+ formattedAddress?: string;
11
+ addressComponents?: {
12
+ longText: string;
13
+ shortText: string;
14
+ types: string[];
15
+ }[];
16
+ text?: string;
17
+ }) => void;
20
18
  onError?: (error: string) => void;
21
- mode?: 'full' | 'cityState';
19
+ mode?: "full" | "cityState";
22
20
  animateFocus?: boolean;
23
21
  disabled?: boolean;
24
- }
25
- declare const PlaceAutocomplete: import("svelte").Component<Props, {}, "placeholder">;
22
+ labels?: Partial<{
23
+ anErrorOccurred: string;
24
+ seeConsoleForDetails: string;
25
+ errorFetchingPlaceDetails: string;
26
+ errorFetchToken: string;
27
+ errorLoadingGoogleMapsApi: string;
28
+ googleMapsApiKeyRequired: string;
29
+ }>;
30
+ }, {}, "placeholder">;
26
31
  type PlaceAutocomplete = ReturnType<typeof PlaceAutocomplete>;
27
32
  export default PlaceAutocomplete;
28
33
  //# sourceMappingURL=PlaceAutocomplete.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlaceAutocomplete.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.ts"],"names":[],"mappings":"AASA,0CAA0C,CAAE,UAAU,gBAAgB;IAAM,QAAQ,EAAE,MAAM,CAAC;IAAI,SAAS,EAAE,MAAM,CAAC;IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;CAAG;AACzI,sCAAsC,CAAE,UAAU,SAAS;IAAM,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAI,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAAG;AAMrL,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA8SH,QAAA,MAAM,iBAAiB,sDAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"PlaceAutocomplete.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.ts"],"names":[],"mappings":"AA8UA,QAAA,MAAM,iBAAiB;kBAnTL,MAAM,EAAE;kBACR,MAAM;eACT,MAAM;aACR,MAAM;mBACA,MAAM;mBACN,MAAM;iBACR,CAAC,IAAI;;2BATkM,MAAM;4BAAyB;sBAArK,MAAM;uBAAgB,MAAM;mBAAY,MAAM,EAAE;WAAuI;eAAY,MAAM;KAS1P,KAAK,IAAI;cAC5B,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;WAC1B,MAAM,GAAG,WAAW;mBACZ,OAAO;eACX,OAAO;aACT,OAAO;;;;;;;MAAsB;qBAwSqB,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
@@ -3,6 +3,10 @@
3
3
  import { SearchOutline } from "../../primitives/Icons";
4
4
  import { typography } from '../../tokens/typography';
5
5
 
6
+ const defaultLabels = {
7
+ placeholder: 'Search',
8
+ };
9
+
6
10
  interface Props {
7
11
  value?: unknown;
8
12
  placeholder?: string;
@@ -18,13 +22,14 @@
18
22
  onfocus?: (event: FocusEvent) => void;
19
23
  onblur?: (event: FocusEvent) => void;
20
24
  children?: Snippet;
25
+ labels?: Partial<typeof defaultLabels>;
21
26
  [key: string]: unknown;
22
27
  }
23
28
 
24
29
  // API compatible with flowbite-svelte Search
25
30
  let {
26
31
  value = $bindable(""),
27
- placeholder = "Search",
32
+ placeholder = undefined,
28
33
  size = "lg",
29
34
  disabled = false,
30
35
  id = "",
@@ -37,9 +42,12 @@
37
42
  onfocus,
38
43
  onblur,
39
44
  children,
45
+ labels: userLabels = {},
40
46
  ...restProps
41
47
  }: Props = $props();
42
48
 
49
+ let labels = $derived({ ...defaultLabels, ...userLabels });
50
+
43
51
  const sizes = {
44
52
  sm: { icon: "w-3.5 h-3.5", input: `h-8 ${typography.xs} pl-8`, wrapper: "h-8" },
45
53
  md: { icon: "w-4 h-4", input: `h-10 ${typography.sm} pl-9`, wrapper: "h-10" },
@@ -82,7 +90,7 @@
82
90
  type="search"
83
91
  {id}
84
92
  {name}
85
- {placeholder}
93
+ placeholder={placeholder ?? labels.placeholder}
86
94
  {disabled}
87
95
  class="w-full pr-3 bg-gray-50 dark:bg-gray-700 font-medium border border-gray-300 dark:border-gray-600 rounded-lg transition-colors focus:outline-hidden focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800 focus:border-blue-500 hover:border-blue-500 placeholder-gray-500 dark:placeholder-gray-400 [&::-webkit-search-cancel-button]:appearance-none {sizeConfig.input} {disabled ? 'opacity-50 cursor-not-allowed' : ''}"
88
96
  bind:value
@@ -1,8 +1,9 @@
1
1
  import type { Snippet } from 'svelte';
2
- interface Props {
2
+ declare const Search: import("svelte").Component<{
3
+ [key: string]: unknown;
3
4
  value?: unknown;
4
5
  placeholder?: string;
5
- size?: 'sm' | 'md' | 'lg';
6
+ size?: "sm" | "md" | "lg";
6
7
  disabled?: boolean;
7
8
  id?: string;
8
9
  name?: string;
@@ -14,9 +15,10 @@ interface Props {
14
15
  onfocus?: (event: FocusEvent) => void;
15
16
  onblur?: (event: FocusEvent) => void;
16
17
  children?: Snippet;
17
- [key: string]: unknown;
18
- }
19
- declare const Search: import("svelte").Component<Props, {}, "value">;
18
+ labels?: Partial<{
19
+ placeholder: string;
20
+ }>;
21
+ }, {}, "value">;
20
22
  type Search = ReturnType<typeof Search>;
21
23
  export default Search;
22
24
  //# sourceMappingURL=Search.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Search.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/Search.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKpC,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA0EH,QAAA,MAAM,MAAM,gDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Search.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/Search.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAsGtC,QAAA,MAAM,MAAM;;YAxFA,OAAO;kBACD,MAAM;WACb,IAAI,GAAG,IAAI,GAAG,IAAI;eACd,OAAO;SACb,MAAM;WACJ,MAAM;YACL,MAAM;cACJ,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;eACrB,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;gBACrB,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI;cAChC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI;cAC9B,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI;aAC5B,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI;eACzB,OAAO;aACT,OAAO;;MAAsB;eA0EU,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
@@ -1,10 +1,9 @@
1
1
  <script lang="ts">
2
2
  import { onMount, tick } from "svelte";
3
3
  import { ChevronDownOutline } from "../../../primitives/Icons";
4
- import { portal as portalAction } from "../../../utils/portal.js";
5
4
  import { typography } from "../../../tokens/typography";
6
5
  import { bloom } from "../../../utils/transitions.js";
7
- import { COUNTRIES, getSuggestedCountries, type Country } from "./countryData";
6
+ import { COUNTRIES, type Country } from "./countryData";
8
7
 
9
8
  interface Props {
10
9
  country?: Country;
@@ -14,17 +13,13 @@
14
13
  searchPlaceholder?: string;
15
14
  noResults?: string;
16
15
  countrySelector?: string;
17
- suggested?: string;
18
- allCountries?: string;
19
16
  };
20
17
  }
21
18
 
22
19
  const defaultLabels = {
23
- searchPlaceholder: 'Search countries...',
20
+ searchPlaceholder: 'Search...',
24
21
  noResults: 'No countries found',
25
22
  countrySelector: 'Select country',
26
- suggested: 'Suggested',
27
- allCountries: 'All countries',
28
23
  };
29
24
 
30
25
  let {
@@ -45,7 +40,6 @@
45
40
  let dropdownPosition = $state({ top: 0, left: 0, width: 0 });
46
41
 
47
42
  const instanceId = Math.random().toString(36).substring(2, 9);
48
- const suggestedCountries = getSuggestedCountries();
49
43
 
50
44
  let filteredCountries = $derived.by(() => {
51
45
  if (!searchQuery) return COUNTRIES;
@@ -58,18 +52,6 @@
58
52
  );
59
53
  });
60
54
 
61
- let showSuggested = $derived(!searchQuery);
62
-
63
- // Build flat list of visible items for keyboard nav
64
- let flatItems = $derived.by(() => {
65
- const items: Country[] = [];
66
- if (showSuggested) {
67
- items.push(...suggestedCountries);
68
- }
69
- items.push(...filteredCountries);
70
- return items;
71
- });
72
-
73
55
  const sizeMap = {
74
56
  sm: 'h-9 px-2 text-sm gap-1',
75
57
  md: 'h-10 px-2.5 text-sm gap-1.5',
@@ -126,8 +108,8 @@
126
108
  switch (event.key) {
127
109
  case "Enter":
128
110
  event.preventDefault();
129
- if (isOpen && focusedIndex >= 0 && focusedIndex < flatItems.length) {
130
- selectCountry(flatItems[focusedIndex]);
111
+ if (isOpen && focusedIndex >= 0 && focusedIndex < filteredCountries.length) {
112
+ selectCountry(filteredCountries[focusedIndex]);
131
113
  } else if (!isOpen) {
132
114
  toggle();
133
115
  }
@@ -137,7 +119,7 @@
137
119
  if (!isOpen) {
138
120
  toggle();
139
121
  } else {
140
- focusedIndex = Math.min(focusedIndex + 1, flatItems.length - 1);
122
+ focusedIndex = Math.min(focusedIndex + 1, filteredCountries.length - 1);
141
123
  scrollToFocused();
142
124
  }
143
125
  break;
@@ -189,14 +171,6 @@
189
171
  window.removeEventListener("resize", updateDropdownPosition);
190
172
  };
191
173
  });
192
-
193
- let itemIndex = 0;
194
- function resetIndex() {
195
- itemIndex = 0;
196
- }
197
- function nextIndex() {
198
- return itemIndex++;
199
- }
200
174
  </script>
201
175
 
202
176
  <div class="relative shrink-0">
@@ -220,7 +194,6 @@
220
194
  <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
221
195
  <div
222
196
  bind:this={dropdownElement}
223
- use:portalAction
224
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"
225
198
  style="top: {dropdownPosition.top}px; left: {dropdownPosition.left}px; width: {dropdownPosition.width}px;"
226
199
  role="listbox"
@@ -233,7 +206,7 @@
233
206
  <input
234
207
  bind:this={searchInputElement}
235
208
  type="text"
236
- 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 focus:outline-hidden focus:ring-2 focus:ring-blue-300 dark:focus:ring-blue-800 {typography.sm} placeholder-gray-400 dark:placeholder-gray-500"
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"
237
210
  placeholder={labels.searchPlaceholder}
238
211
  bind:value={searchQuery}
239
212
  onkeydown={handleKeydown}
@@ -242,40 +215,10 @@
242
215
 
243
216
  <!-- List -->
244
217
  <div class="max-h-60 overflow-y-auto py-1">
245
- {resetIndex()}
246
-
247
- {#if showSuggested}
248
- <div class="px-3 py-1.5">
249
- <span class="text-xs font-semibold uppercase tracking-wider {typography.textMuted}">{labels.suggested}</span>
250
- </div>
251
- {#each suggestedCountries as c}
252
- {@const idx = nextIndex()}
253
- <!-- svelte-ignore a11y_click_events_have_key_events -->
254
- <li
255
- class="flex items-center gap-3 px-3 py-2 cursor-pointer {typography.sm} transition-colors {c.code === country.code ? 'bg-blue-50 dark:bg-blue-900/30' : ''} {idx === focusedIndex ? 'bg-gray-100 dark:bg-gray-600' : 'hover:bg-gray-100 dark:hover:bg-gray-600'}"
256
- role="option"
257
- aria-selected={c.code === country.code}
258
- data-index={idx}
259
- onclick={() => selectCountry(c)}
260
- onmouseenter={() => (focusedIndex = idx)}
261
- >
262
- <span class="text-lg leading-none">{c.flag}</span>
263
- <span class="flex-1">{c.name}</span>
264
- <span class={typography.textMuted}>{c.dialCode}</span>
265
- </li>
266
- {/each}
267
-
268
- <div class="border-t border-gray-200 dark:border-gray-600 mx-3 my-1"></div>
269
- <div class="px-3 py-1.5">
270
- <span class="text-xs font-semibold uppercase tracking-wider {typography.textMuted}">{labels.allCountries}</span>
271
- </div>
272
- {/if}
273
-
274
- {#each filteredCountries as c}
275
- {@const idx = nextIndex()}
218
+ {#each filteredCountries as c, idx}
276
219
  <!-- svelte-ignore a11y_click_events_have_key_events -->
277
220
  <li
278
- class="flex items-center gap-3 px-3 py-2 cursor-pointer {typography.sm} transition-colors {c.code === country.code ? 'bg-blue-50 dark:bg-blue-900/30' : ''} {idx === focusedIndex ? 'bg-gray-100 dark:bg-gray-600' : 'hover:bg-gray-100 dark:hover:bg-gray-600'}"
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'}`}
279
222
  role="option"
280
223
  aria-selected={c.code === country.code}
281
224
  data-index={idx}
@@ -287,7 +230,7 @@
287
230
  <span class={typography.textMuted}>{c.dialCode}</span>
288
231
  </li>
289
232
  {:else}
290
- <div class="px-3 py-4 text-center {typography.textMuted}">
233
+ <div class={`px-3 py-4 text-center ${typography.textMuted}`}>
291
234
  {labels.noResults}
292
235
  </div>
293
236
  {/each}
@@ -7,8 +7,6 @@ interface Props {
7
7
  searchPlaceholder?: string;
8
8
  noResults?: string;
9
9
  countrySelector?: string;
10
- suggested?: string;
11
- allCountries?: string;
12
10
  };
13
11
  }
14
12
  declare const CountrySelector: import("svelte").Component<Props, {}, "country">;
@@ -1 +1 @@
1
- {"version":3,"file":"CountrySelector.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/recipes/inputs/phoneInput/CountrySelector.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoC,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7E,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;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAyPH,QAAA,MAAM,eAAe,kDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
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"}
@@ -10,8 +10,6 @@ export interface Country {
10
10
  /** Priority for shared dial codes (lower = higher priority) */
11
11
  priority?: number;
12
12
  }
13
- /** Countries pinned to the top of the selector */
14
- export declare const SUGGESTED_CODES: string[];
15
13
  export declare const COUNTRIES: Country[];
16
14
  /** Get a country by ISO code */
17
15
  export declare function getCountry(code: string): Country | undefined;
@@ -1 +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,kDAAkD;AAClD,eAAO,MAAM,eAAe,UAAiC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,OAAO,EAwM9B,CAAC;AAEF,gCAAgC;AAChC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE5D;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,IAAI,OAAO,EAAE,CAEjD"}
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"}
@@ -1,6 +1,5 @@
1
- /** Countries pinned to the top of the selector */
2
- export const SUGGESTED_CODES = ['US', 'CA', 'GB', 'MX', 'AU'];
3
1
  export const COUNTRIES = [
2
+ { code: 'US', name: 'United States', dialCode: '+1', flag: 'πŸ‡ΊπŸ‡Έ', priority: 0 },
4
3
  { code: 'AF', name: 'Afghanistan', dialCode: '+93', flag: 'πŸ‡¦πŸ‡«' },
5
4
  { code: 'AL', name: 'Albania', dialCode: '+355', flag: 'πŸ‡¦πŸ‡±' },
6
5
  { code: 'DZ', name: 'Algeria', dialCode: '+213', flag: 'πŸ‡©πŸ‡Ώ' },
@@ -190,7 +189,6 @@ export const COUNTRIES = [
190
189
  { code: 'UA', name: 'Ukraine', dialCode: '+380', flag: 'πŸ‡ΊπŸ‡¦' },
191
190
  { code: 'AE', name: 'United Arab Emirates', dialCode: '+971', flag: 'πŸ‡¦πŸ‡ͺ' },
192
191
  { code: 'GB', name: 'United Kingdom', dialCode: '+44', flag: 'πŸ‡¬πŸ‡§' },
193
- { code: 'US', name: 'United States', dialCode: '+1', flag: 'πŸ‡ΊπŸ‡Έ', priority: 0 },
194
192
  { code: 'UY', name: 'Uruguay', dialCode: '+598', flag: 'πŸ‡ΊπŸ‡Ύ' },
195
193
  { code: 'UZ', name: 'Uzbekistan', dialCode: '+998', flag: 'πŸ‡ΊπŸ‡Ώ' },
196
194
  { code: 'VU', name: 'Vanuatu', dialCode: '+678', flag: 'πŸ‡»πŸ‡Ί' },
@@ -205,6 +203,8 @@ export const COUNTRIES = [
205
203
  export function getCountry(code) {
206
204
  return COUNTRIES.find((c) => c.code === code);
207
205
  }
206
+ /** Country codes pinned to top of the country selector */
207
+ const SUGGESTED_CODES = ['US', 'CA', 'GB', 'AU'];
208
208
  /** Get the suggested countries (pinned to top of selector) */
209
209
  export function getSuggestedCountries() {
210
210
  return SUGGESTED_CODES.map((code) => COUNTRIES.find((c) => c.code === code)).filter(Boolean);
@@ -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"}