@getmicdrop/svelte-components 5.5.4 → 5.5.5

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 (290) hide show
  1. package/dist/calendar/AboutShow/AboutShow.spec.d.ts +2 -0
  2. package/dist/calendar/AboutShow/AboutShow.spec.d.ts.map +1 -0
  3. package/dist/calendar/AboutShow/AboutShow.spec.js +791 -0
  4. package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts +2 -0
  5. package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts.map +1 -0
  6. package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +1191 -0
  7. package/dist/calendar/FAQs/FAQs.spec.d.ts +2 -0
  8. package/dist/calendar/FAQs/FAQs.spec.d.ts.map +1 -0
  9. package/dist/calendar/FAQs/FAQs.spec.js +238 -0
  10. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts +2 -0
  11. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts.map +1 -0
  12. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.js +420 -0
  13. package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts +2 -0
  14. package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts.map +1 -0
  15. package/dist/calendar/OrderSummary/OrderSummary.spec.js +808 -0
  16. package/dist/calendar/PublicCard/PublicCard.spec.d.ts +2 -0
  17. package/dist/calendar/PublicCard/PublicCard.spec.d.ts.map +1 -0
  18. package/dist/calendar/PublicCard/PublicCard.spec.js +301 -0
  19. package/dist/calendar/ShowCard/ShowCard.spec.d.ts +2 -0
  20. package/dist/calendar/ShowCard/ShowCard.spec.d.ts.map +1 -0
  21. package/dist/calendar/ShowCard/ShowCard.spec.js +714 -0
  22. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts +2 -0
  23. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts.map +1 -0
  24. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +241 -0
  25. package/dist/components/Layout/Section.spec.d.ts +2 -0
  26. package/dist/components/Layout/Section.spec.d.ts.map +1 -0
  27. package/dist/components/Layout/Section.spec.js +149 -0
  28. package/dist/components/Layout/Sidebar.spec.d.ts +2 -0
  29. package/dist/components/Layout/Sidebar.spec.d.ts.map +1 -0
  30. package/dist/components/Layout/Sidebar.spec.js +186 -0
  31. package/dist/components/Layout/Stack.spec.js +3 -3
  32. package/dist/constants/formOptions.spec.js +9 -5
  33. package/dist/datetime/__tests__/format.test.js +1 -1
  34. package/dist/datetime/__tests__/parse.test.js +1 -1
  35. package/dist/datetime/__tests__/timezone.test.js +124 -2
  36. package/dist/datetime/parse.js +1 -1
  37. package/dist/forms/createFieldTracker.spec.d.ts +2 -0
  38. package/dist/forms/createFieldTracker.spec.d.ts.map +1 -0
  39. package/dist/forms/createFieldTracker.spec.js +343 -0
  40. package/dist/forms/createFormStore.spec.d.ts +2 -0
  41. package/dist/forms/createFormStore.spec.d.ts.map +1 -0
  42. package/dist/forms/createFormStore.spec.js +689 -0
  43. package/dist/forms/createFormStore.svelte.js +0 -1
  44. package/dist/index.d.ts +4 -112
  45. package/dist/index.js +4 -190
  46. package/dist/patterns/data/DataGrid.spec.d.ts +2 -0
  47. package/dist/patterns/data/DataGrid.spec.d.ts.map +1 -0
  48. package/dist/patterns/data/DataGrid.spec.js +159 -0
  49. package/dist/patterns/data/DataList.spec.d.ts +2 -0
  50. package/dist/patterns/data/DataList.spec.d.ts.map +1 -0
  51. package/dist/patterns/data/DataList.spec.js +158 -0
  52. package/dist/patterns/data/DataTable.spec.d.ts +2 -0
  53. package/dist/patterns/data/DataTable.spec.d.ts.map +1 -0
  54. package/dist/patterns/data/DataTable.spec.js +196 -0
  55. package/dist/patterns/forms/FormActions.spec.js +10 -3
  56. package/dist/patterns/forms/FormGrid.spec.d.ts +2 -0
  57. package/dist/patterns/forms/FormGrid.spec.d.ts.map +1 -0
  58. package/dist/patterns/forms/FormGrid.spec.js +125 -0
  59. package/dist/patterns/forms/FormSection.spec.d.ts +2 -0
  60. package/dist/patterns/forms/FormSection.spec.d.ts.map +1 -0
  61. package/dist/patterns/forms/FormSection.spec.js +153 -0
  62. package/dist/patterns/layout/Sidebar.spec.d.ts +2 -0
  63. package/dist/patterns/layout/Sidebar.spec.d.ts.map +1 -0
  64. package/dist/patterns/layout/Sidebar.spec.js +159 -0
  65. package/dist/patterns/navigation/BottomNav.svelte +4 -4
  66. package/dist/patterns/navigation/Header.spec.js +33 -24
  67. package/dist/patterns/page/PageHeader.spec.d.ts +2 -0
  68. package/dist/patterns/page/PageHeader.spec.d.ts.map +1 -0
  69. package/dist/patterns/page/PageHeader.spec.js +167 -0
  70. package/dist/patterns/page/PageLayout.spec.d.ts +2 -0
  71. package/dist/patterns/page/PageLayout.spec.d.ts.map +1 -0
  72. package/dist/patterns/page/PageLayout.spec.js +145 -0
  73. package/dist/patterns/page/PageLoader.spec.js +5 -2
  74. package/dist/patterns/page/SectionHeader.spec.d.ts +2 -0
  75. package/dist/patterns/page/SectionHeader.spec.d.ts.map +1 -0
  76. package/dist/patterns/page/SectionHeader.spec.js +197 -0
  77. package/dist/presets/badges.spec.d.ts +2 -0
  78. package/dist/presets/badges.spec.d.ts.map +1 -0
  79. package/dist/presets/badges.spec.js +172 -0
  80. package/dist/presets/buttons.spec.d.ts +2 -0
  81. package/dist/presets/buttons.spec.d.ts.map +1 -0
  82. package/dist/presets/buttons.spec.js +135 -0
  83. package/dist/primitives/Accordion/Accordion.spec.d.ts +2 -0
  84. package/dist/primitives/Accordion/Accordion.spec.d.ts.map +1 -0
  85. package/dist/primitives/Accordion/Accordion.spec.js +83 -0
  86. package/dist/primitives/Accordion/AccordionItem.spec.d.ts +2 -0
  87. package/dist/primitives/Accordion/AccordionItem.spec.d.ts.map +1 -0
  88. package/dist/primitives/Accordion/AccordionItem.spec.js +661 -0
  89. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -0
  90. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +35 -0
  91. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -0
  92. package/dist/primitives/Alert/Alert.spec.js +5 -2
  93. package/dist/primitives/Avatar/Avatar.spec.d.ts +2 -0
  94. package/dist/primitives/Avatar/Avatar.spec.d.ts.map +1 -0
  95. package/dist/primitives/Avatar/Avatar.spec.js +211 -0
  96. package/dist/primitives/Badges/Badge.spec.js +109 -68
  97. package/dist/primitives/BottomSheet/BottomSheet.spec.js +36 -27
  98. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte +13 -0
  99. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts +7 -0
  100. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts.map +1 -0
  101. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +15 -13
  102. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +5 -5
  103. package/dist/primitives/Button/Button.spec.js +83 -71
  104. package/dist/primitives/Button/ButtonSaveDemo.spec.js +100 -2
  105. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts +2 -0
  106. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts.map +1 -0
  107. package/dist/primitives/Button/ButtonVariantShowcase.spec.js +202 -0
  108. package/dist/primitives/Card.spec.js +1 -1
  109. package/dist/primitives/Checkbox/Checkbox.spec.d.ts +2 -0
  110. package/dist/primitives/Checkbox/Checkbox.spec.d.ts.map +1 -0
  111. package/dist/primitives/Checkbox/Checkbox.spec.js +252 -0
  112. package/dist/primitives/DarkModeToggle.spec.js +84 -51
  113. package/dist/primitives/Drawer/Drawer.spec.d.ts +2 -0
  114. package/dist/primitives/Drawer/Drawer.spec.d.ts.map +1 -0
  115. package/dist/primitives/Drawer/Drawer.spec.js +212 -0
  116. package/dist/primitives/Dropdown/Dropdown.spec.d.ts +2 -0
  117. package/dist/primitives/Dropdown/Dropdown.spec.d.ts.map +1 -0
  118. package/dist/primitives/Dropdown/Dropdown.spec.js +366 -0
  119. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts +2 -0
  120. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts.map +1 -0
  121. package/dist/primitives/Dropdown/DropdownItem.spec.js +182 -0
  122. package/dist/primitives/Icons/iconTestUtils.spec.d.ts +2 -0
  123. package/dist/primitives/Icons/iconTestUtils.spec.d.ts.map +1 -0
  124. package/dist/primitives/Icons/iconTestUtils.spec.js +235 -0
  125. package/dist/primitives/Input/Input.spec.js +14 -14
  126. package/dist/primitives/Input/Input.svelte +1 -14
  127. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  128. package/dist/primitives/Input/Select.spec.js +11 -17
  129. package/dist/primitives/Input/Textarea.spec.d.ts +2 -0
  130. package/dist/primitives/Input/Textarea.spec.d.ts.map +1 -0
  131. package/dist/primitives/Input/Textarea.spec.js +255 -0
  132. package/dist/primitives/Label/Label.spec.d.ts +2 -0
  133. package/dist/primitives/Label/Label.spec.d.ts.map +1 -0
  134. package/dist/primitives/Label/Label.spec.js +157 -0
  135. package/dist/primitives/Modal/Modal.spec.js +29 -25
  136. package/dist/primitives/Modal/ModalTestWrapper.svelte +65 -0
  137. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts +23 -0
  138. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts.map +1 -0
  139. package/dist/primitives/NumberInput/NumberInput.spec.d.ts +2 -0
  140. package/dist/primitives/NumberInput/NumberInput.spec.d.ts.map +1 -0
  141. package/dist/primitives/NumberInput/NumberInput.spec.js +235 -0
  142. package/dist/primitives/Pagination/Pagination.spec.d.ts +2 -0
  143. package/dist/primitives/Pagination/Pagination.spec.d.ts.map +1 -0
  144. package/dist/primitives/Pagination/Pagination.spec.js +266 -0
  145. package/dist/primitives/Radio/Radio.spec.d.ts +2 -0
  146. package/dist/primitives/Radio/Radio.spec.d.ts.map +1 -0
  147. package/dist/primitives/Radio/Radio.spec.js +206 -0
  148. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts +2 -0
  149. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts.map +1 -0
  150. package/dist/primitives/Skeleton/CardPlaceholder.spec.js +156 -0
  151. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts +2 -0
  152. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts.map +1 -0
  153. package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +120 -0
  154. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts +2 -0
  155. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts.map +1 -0
  156. package/dist/primitives/Skeleton/ListPlaceholder.spec.js +220 -0
  157. package/dist/primitives/Skeleton/Skeleton.spec.d.ts +2 -0
  158. package/dist/primitives/Skeleton/Skeleton.spec.d.ts.map +1 -0
  159. package/dist/primitives/Skeleton/Skeleton.spec.js +173 -0
  160. package/dist/primitives/Spinner/Spinner.spec.js +25 -29
  161. package/dist/primitives/Tabs/TabItem.spec.d.ts +2 -0
  162. package/dist/primitives/Tabs/TabItem.spec.d.ts.map +1 -0
  163. package/dist/primitives/Tabs/TabItem.spec.js +130 -0
  164. package/dist/primitives/Tabs/Tabs.spec.d.ts +2 -0
  165. package/dist/primitives/Tabs/Tabs.spec.d.ts.map +1 -0
  166. package/dist/primitives/Tabs/Tabs.spec.js +295 -0
  167. package/dist/primitives/Tabs/TabsWithItems.test.svelte +18 -0
  168. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts +16 -0
  169. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts.map +1 -0
  170. package/dist/primitives/Toggle.spec.js +93 -77
  171. package/dist/primitives/Typography/Typography.spec.d.ts +2 -0
  172. package/dist/primitives/Typography/Typography.spec.d.ts.map +1 -0
  173. package/dist/primitives/Typography/Typography.spec.js +183 -0
  174. package/dist/primitives/ValidationError.spec.js +1 -1
  175. package/dist/primitives/index.d.ts +1 -0
  176. package/dist/primitives/index.js +3 -0
  177. package/dist/recipes/CropImage/CropImage.spec.js +1 -9
  178. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts +2 -0
  179. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts.map +1 -0
  180. package/dist/recipes/ImageUploader/ImageUploader.spec.js +1351 -0
  181. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts +2 -0
  182. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts.map +1 -0
  183. package/dist/recipes/SuperLogin/SuperLogin.spec.js +1436 -0
  184. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts +2 -0
  185. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts.map +1 -0
  186. package/dist/recipes/feedback/EmptyState/EmptyState.spec.js +202 -0
  187. package/dist/recipes/feedback/ErrorDisplay.spec.js +6 -6
  188. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +21 -17
  189. package/dist/recipes/fields/CheckboxField.spec.d.ts +2 -0
  190. package/dist/recipes/fields/CheckboxField.spec.d.ts.map +1 -0
  191. package/dist/recipes/fields/CheckboxField.spec.js +135 -0
  192. package/dist/recipes/fields/FormField.spec.d.ts +2 -0
  193. package/dist/recipes/fields/FormField.spec.d.ts.map +1 -0
  194. package/dist/recipes/fields/FormField.spec.js +159 -0
  195. package/dist/recipes/fields/RadioGroup.spec.d.ts +2 -0
  196. package/dist/recipes/fields/RadioGroup.spec.d.ts.map +1 -0
  197. package/dist/recipes/fields/RadioGroup.spec.js +199 -0
  198. package/dist/recipes/fields/SelectField.spec.d.ts +2 -0
  199. package/dist/recipes/fields/SelectField.spec.d.ts.map +1 -0
  200. package/dist/recipes/fields/SelectField.spec.js +188 -0
  201. package/dist/recipes/fields/TextareaField.spec.d.ts +2 -0
  202. package/dist/recipes/fields/TextareaField.spec.d.ts.map +1 -0
  203. package/dist/recipes/fields/TextareaField.spec.js +205 -0
  204. package/dist/recipes/fields/ToggleField.spec.d.ts +2 -0
  205. package/dist/recipes/fields/ToggleField.spec.d.ts.map +1 -0
  206. package/dist/recipes/fields/ToggleField.spec.js +153 -0
  207. package/dist/recipes/inputs/MultiSelect.spec.js +4 -3
  208. package/dist/recipes/inputs/MultiSelect.svelte +10 -3
  209. package/dist/recipes/inputs/MultiSelect.svelte.d.ts +2 -0
  210. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  211. package/dist/recipes/inputs/OTPInput.spec.js +52 -39
  212. package/dist/recipes/inputs/PasswordInput.spec.d.ts +2 -0
  213. package/dist/recipes/inputs/PasswordInput.spec.d.ts.map +1 -0
  214. package/dist/recipes/inputs/PasswordInput.spec.js +410 -0
  215. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +253 -173
  216. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +71 -0
  217. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts +9 -0
  218. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts.map +1 -0
  219. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +1246 -300
  220. package/dist/recipes/inputs/Search.spec.d.ts +2 -0
  221. package/dist/recipes/inputs/Search.spec.d.ts.map +1 -0
  222. package/dist/recipes/inputs/Search.spec.js +177 -0
  223. package/dist/recipes/inputs/SelectDropdown.spec.d.ts +2 -0
  224. package/dist/recipes/inputs/SelectDropdown.spec.d.ts.map +1 -0
  225. package/dist/recipes/inputs/SelectDropdown.spec.js +512 -0
  226. package/dist/recipes/modals/AlertModal.spec.d.ts +2 -0
  227. package/dist/recipes/modals/AlertModal.spec.d.ts.map +1 -0
  228. package/dist/recipes/modals/AlertModal.spec.js +432 -0
  229. package/dist/recipes/modals/ConfirmationModal.spec.js +36 -21
  230. package/dist/recipes/modals/InputModal.spec.d.ts +2 -0
  231. package/dist/recipes/modals/InputModal.spec.d.ts.map +1 -0
  232. package/dist/recipes/modals/InputModal.spec.js +872 -0
  233. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts +2 -0
  234. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts.map +1 -0
  235. package/dist/recipes/modals/ModalTestWrapper.spec.js +502 -0
  236. package/dist/recipes/modals/StatusModal.spec.d.ts +2 -0
  237. package/dist/recipes/modals/StatusModal.spec.d.ts.map +1 -0
  238. package/dist/recipes/modals/StatusModal.spec.js +599 -0
  239. package/dist/services/ShowService.spec.js +18 -15
  240. package/dist/stories/ButtonAuditDashboard.spec.d.ts +2 -0
  241. package/dist/stories/ButtonAuditDashboard.spec.d.ts.map +1 -0
  242. package/dist/stories/ButtonAuditDashboard.spec.js +913 -0
  243. package/dist/stories/ButtonAuditReview.spec.d.ts +2 -0
  244. package/dist/stories/ButtonAuditReview.spec.d.ts.map +1 -0
  245. package/dist/stories/ButtonAuditReview.spec.js +422 -0
  246. package/dist/stories/ButtonGridView.spec.d.ts +2 -0
  247. package/dist/stories/ButtonGridView.spec.d.ts.map +1 -0
  248. package/dist/stories/ButtonGridView.spec.js +667 -0
  249. package/dist/stories/ButtonShowcase.spec.d.ts +2 -0
  250. package/dist/stories/ButtonShowcase.spec.d.ts.map +1 -0
  251. package/dist/stories/ButtonShowcase.spec.js +499 -0
  252. package/dist/stories/PatternsGallery.spec.d.ts +2 -0
  253. package/dist/stories/PatternsGallery.spec.d.ts.map +1 -0
  254. package/dist/stories/PatternsGallery.spec.js +514 -0
  255. package/dist/stories/PrimitivesGallery.spec.d.ts +2 -0
  256. package/dist/stories/PrimitivesGallery.spec.d.ts.map +1 -0
  257. package/dist/stories/PrimitivesGallery.spec.js +813 -0
  258. package/dist/stories/RecipesGallery.spec.d.ts +2 -0
  259. package/dist/stories/RecipesGallery.spec.d.ts.map +1 -0
  260. package/dist/stories/RecipesGallery.spec.js +299 -0
  261. package/dist/stripe/useStripeTheme.spec.d.ts +2 -0
  262. package/dist/stripe/useStripeTheme.spec.d.ts.map +1 -0
  263. package/dist/stripe/useStripeTheme.spec.js +793 -0
  264. package/dist/telemetry.d.ts.map +1 -1
  265. package/dist/telemetry.js +6 -5
  266. package/dist/telemetry.spec.js +495 -12
  267. package/dist/tokens/__tests__/colors.test.d.ts +2 -0
  268. package/dist/tokens/__tests__/colors.test.d.ts.map +1 -0
  269. package/dist/tokens/__tests__/colors.test.js +152 -0
  270. package/dist/tokens/__tests__/radius.test.d.ts +2 -0
  271. package/dist/tokens/__tests__/radius.test.d.ts.map +1 -0
  272. package/dist/tokens/__tests__/radius.test.js +118 -0
  273. package/dist/tokens/__tests__/shadows.test.d.ts +2 -0
  274. package/dist/tokens/__tests__/shadows.test.d.ts.map +1 -0
  275. package/dist/tokens/__tests__/shadows.test.js +105 -0
  276. package/dist/tokens/__tests__/spacing.test.js +11 -8
  277. package/dist/tokens/__tests__/typography.test.d.ts +2 -0
  278. package/dist/tokens/__tests__/typography.test.d.ts.map +1 -0
  279. package/dist/tokens/__tests__/typography.test.js +156 -0
  280. package/dist/tokens/__tests__/z-index.test.d.ts +2 -0
  281. package/dist/tokens/__tests__/z-index.test.d.ts.map +1 -0
  282. package/dist/tokens/__tests__/z-index.test.js +121 -0
  283. package/dist/utils/apiConfig.spec.js +102 -1
  284. package/dist/utils/formatters.spec.d.ts +2 -0
  285. package/dist/utils/formatters.spec.d.ts.map +1 -0
  286. package/dist/utils/formatters.spec.js +82 -0
  287. package/dist/utils/transitions.spec.d.ts +2 -0
  288. package/dist/utils/transitions.spec.d.ts.map +1 -0
  289. package/dist/utils/transitions.spec.js +130 -0
  290. package/package.json +8 -3
@@ -0,0 +1,153 @@
1
+ import { render, screen } from '@testing-library/svelte';
2
+ import { expect, describe, test } from 'vitest';
3
+ import ToggleField from './ToggleField.svelte';
4
+
5
+ describe('ToggleField Component', () => {
6
+ test('renders a wrapper div', () => {
7
+ const { container } = render(ToggleField);
8
+ expect(container.querySelector('div')).toBeInTheDocument();
9
+ });
10
+
11
+ test('applies custom className', () => {
12
+ const { container } = render(ToggleField, { props: { class: 'custom-toggle-field' } });
13
+ const wrapper = container.firstElementChild;
14
+ expect(wrapper).toHaveClass('custom-toggle-field');
15
+ });
16
+
17
+ test('renders a toggle switch', () => {
18
+ const { container } = render(ToggleField);
19
+ const toggle = container.querySelector('[role="switch"]');
20
+ expect(toggle).toBeInTheDocument();
21
+ });
22
+ });
23
+
24
+ describe('ToggleField Label', () => {
25
+ test('no label renders no label text', () => {
26
+ render(ToggleField);
27
+ expect(screen.queryByText(/test/i)).not.toBeInTheDocument();
28
+ });
29
+
30
+ test('label prop displays label text', () => {
31
+ render(ToggleField, { props: { label: 'Enable notifications' } });
32
+ expect(screen.getByText('Enable notifications')).toBeInTheDocument();
33
+ });
34
+
35
+ test('error state applies error styling to label', () => {
36
+ const { container } = render(ToggleField, { props: { label: 'Test', error: 'Required' } });
37
+ const labelSpan = container.querySelector('span');
38
+ expect(labelSpan).toHaveClass('text-red-500');
39
+ });
40
+ });
41
+
42
+ describe('ToggleField Description', () => {
43
+ test('no description renders no description text', () => {
44
+ const { container } = render(ToggleField, { props: { label: 'Test' } });
45
+ const spans = container.querySelectorAll('span');
46
+ expect(spans.length).toBe(1); // Just the label
47
+ });
48
+
49
+ test('description prop displays description text', () => {
50
+ render(ToggleField, { props: { description: 'Get daily updates' } });
51
+ expect(screen.getByText('Get daily updates')).toBeInTheDocument();
52
+ });
53
+
54
+ test('label and description together', () => {
55
+ render(ToggleField, { props: { label: 'Notifications', description: 'Stay informed' } });
56
+ expect(screen.getByText('Notifications')).toBeInTheDocument();
57
+ expect(screen.getByText('Stay informed')).toBeInTheDocument();
58
+ });
59
+ });
60
+
61
+ describe('ToggleField Error', () => {
62
+ test('no error shows no validation message', () => {
63
+ const { container } = render(ToggleField);
64
+ const errorDiv = container.querySelector('.text-red-600');
65
+ expect(errorDiv).not.toBeInTheDocument();
66
+ });
67
+
68
+ test('error prop shows validation message', () => {
69
+ render(ToggleField, { props: { error: 'Please enable this option' } });
70
+ expect(screen.getByText('Please enable this option')).toBeInTheDocument();
71
+ });
72
+ });
73
+
74
+ describe('ToggleField Disabled', () => {
75
+ test('disabled prop disables toggle', () => {
76
+ const { container } = render(ToggleField, { props: { disabled: true } });
77
+ const input = container.querySelector('input[type="checkbox"]');
78
+ expect(input).toBeDisabled();
79
+ });
80
+
81
+ test('not disabled by default', () => {
82
+ const { container } = render(ToggleField);
83
+ const input = container.querySelector('input[type="checkbox"]');
84
+ expect(input).not.toBeDisabled();
85
+ });
86
+ });
87
+
88
+ describe('ToggleField Size', () => {
89
+ test('default size is md', () => {
90
+ const { container } = render(ToggleField);
91
+ expect(container.querySelector('[role="switch"]')).toBeInTheDocument();
92
+ });
93
+
94
+ test('size sm works', () => {
95
+ const { container } = render(ToggleField, { props: { size: 'sm' } });
96
+ expect(container.querySelector('[role="switch"]')).toBeInTheDocument();
97
+ });
98
+
99
+ test('size lg works', () => {
100
+ const { container } = render(ToggleField, { props: { size: 'lg' } });
101
+ expect(container.querySelector('[role="switch"]')).toBeInTheDocument();
102
+ });
103
+ });
104
+
105
+ describe('ToggleField Layout', () => {
106
+ test('has flex container for label and toggle', () => {
107
+ const { container } = render(ToggleField, { props: { label: 'Test' } });
108
+ const flexDiv = container.querySelector('.flex.items-start');
109
+ expect(flexDiv).toBeInTheDocument();
110
+ });
111
+
112
+ test('has justify-between', () => {
113
+ const { container } = render(ToggleField, { props: { label: 'Test' } });
114
+ const flexDiv = container.querySelector('.flex.items-start');
115
+ expect(flexDiv).toHaveClass('justify-between');
116
+ });
117
+
118
+ test('has gap-4', () => {
119
+ const { container } = render(ToggleField, { props: { label: 'Test' } });
120
+ const flexDiv = container.querySelector('.flex.items-start');
121
+ expect(flexDiv).toHaveClass('gap-4');
122
+ });
123
+ });
124
+
125
+ describe('ToggleField Combinations', () => {
126
+ test('label and description with toggle', () => {
127
+ render(ToggleField, {
128
+ props: { label: 'Dark mode', description: 'Use dark color scheme' }
129
+ });
130
+ expect(screen.getByText('Dark mode')).toBeInTheDocument();
131
+ expect(screen.getByText('Use dark color scheme')).toBeInTheDocument();
132
+ });
133
+
134
+ test('all props together', () => {
135
+ const { container } = render(ToggleField, {
136
+ props: {
137
+ label: 'Settings',
138
+ description: 'Configure options',
139
+ error: 'Please select',
140
+ disabled: true,
141
+ size: 'lg',
142
+ class: 'custom-class'
143
+ }
144
+ });
145
+ const wrapper = container.firstElementChild;
146
+ expect(wrapper).toHaveClass('custom-class');
147
+ expect(screen.getByText('Settings')).toBeInTheDocument();
148
+ expect(screen.getByText('Configure options')).toBeInTheDocument();
149
+ expect(screen.getByText('Please select')).toBeInTheDocument();
150
+ const input = container.querySelector('input[type="checkbox"]');
151
+ expect(input).toBeDisabled();
152
+ });
153
+ });
@@ -117,16 +117,17 @@ describe("MultiSelect Component Tests", () => {
117
117
  });
118
118
 
119
119
  test("Dispatches change event on selection", async () => {
120
- const { user, component } = setupTest();
121
120
  const changeSpy = vi.fn();
122
- component.$on("change", changeSpy);
121
+ const { user } = setupTest({
122
+ onchange: changeSpy,
123
+ });
123
124
 
124
125
  const trigger = screen.getByRole("button", { name: /select options/i });
125
126
  await user.click(trigger);
126
127
  await user.click(screen.getByText("Option 2"));
127
128
 
128
129
  expect(changeSpy).toHaveBeenCalled();
129
- expect(changeSpy.mock.calls[0][0].detail.value).toContain("opt2");
130
+ expect(changeSpy.mock.calls[0][0].value).toContain("opt2");
130
131
  });
131
132
 
132
133
  test("Shows required indicator when required", () => {
@@ -18,6 +18,7 @@
18
18
  id = "",
19
19
  /** @type {'sm' | 'md' | 'lg'} */
20
20
  size = "md",
21
+ animateFocus = true, // Show focus animation
21
22
  // Callbacks
22
23
  onchange,
23
24
  } = $props();
@@ -27,7 +28,12 @@
27
28
  let dropdownElement = $state();
28
29
  let focusedIndex = $state(-1);
29
30
 
30
- // Ensure value is always an array
31
+ // Ensure value is always an array (initialize immediately)
32
+ if (!Array.isArray(value)) {
33
+ value = [];
34
+ }
35
+
36
+ // Keep value as array
31
37
  $effect(() => {
32
38
  if (!Array.isArray(value)) {
33
39
  value = [];
@@ -159,7 +165,8 @@
159
165
  {name}
160
166
  class="flex items-center justify-between gap-2 w-full {sizeClass} bg-gray-50 dark:bg-gray-800 border rounded-lg cursor-pointer text-left transition-all focus:outline-none focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800
161
167
  {error ? 'border-red-500 dark:border-red-500' : 'border-gray-300 dark:border-gray-600 hover:border-blue-500 dark:hover:border-blue-500 focus:border-blue-500 dark:focus:border-blue-500'}
162
- {disabled ? 'opacity-50 cursor-not-allowed' : ''}"
168
+ {disabled ? 'opacity-50 cursor-not-allowed' : ''}
169
+ {animateFocus ? 'multiselect-animate-focus' : ''}"
163
170
  {disabled}
164
171
  aria-haspopup="listbox"
165
172
  aria-expanded={isOpen}
@@ -231,7 +238,7 @@
231
238
  <input
232
239
  type="checkbox"
233
240
  checked={value.includes(item.value)}
234
- class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-700 dark:focus:ring-offset-gray-700 focus:ring-2 dark:bg-gray-600 dark:border-gray-500"
241
+ class="multiselect-checkbox w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-700 dark:focus:ring-offset-gray-700 focus:ring-2 dark:bg-gray-600 dark:border-gray-500 {value.includes(item.value) ? 'multiselect-checkbox-checked' : ''}"
235
242
  tabindex="-1"
236
243
  onclick={(e) => { e.stopPropagation(); toggleItem(item); }}
237
244
  />
@@ -17,6 +17,7 @@ declare const MultiSelect: import("svelte").Component<{
17
17
  name?: string;
18
18
  id?: string;
19
19
  size?: string;
20
+ animateFocus?: boolean;
20
21
  onchange: any;
21
22
  }, {}, "value">;
22
23
  type $$ComponentProps = {
@@ -33,6 +34,7 @@ type $$ComponentProps = {
33
34
  name?: string;
34
35
  id?: string;
35
36
  size?: string;
37
+ animateFocus?: boolean;
36
38
  onchange: any;
37
39
  };
38
40
  //# sourceMappingURL=MultiSelect.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/MultiSelect.svelte.js"],"names":[],"mappings":";;;;;AAwNA;YA7M6B,GAAG,EAAE;YAAU,GAAG,EAAE;kBAAgB,MAAM;YAAU,MAAM;eAAa,OAAO;eAAa,OAAO;YAAU,MAAM;gBAAc,OAAO;qBAAmB,OAAO;mBAAiB,OAAO;WAAS,MAAM;SAAO,MAAM;WAAS,MAAM;cAAY,GAAG;gBA6MtN;wBA7MvC;IAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE"}
1
+ {"version":3,"file":"MultiSelect.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/MultiSelect.svelte.js"],"names":[],"mappings":";;;;;AA+NA;YApN6B,GAAG,EAAE;YAAU,GAAG,EAAE;kBAAgB,MAAM;YAAU,MAAM;eAAa,OAAO;eAAa,OAAO;YAAU,MAAM;gBAAc,OAAO;qBAAmB,OAAO;mBAAiB,OAAO;WAAS,MAAM;SAAO,MAAM;WAAS,MAAM;mBAAiB,OAAO;cAAY,GAAG;gBAoN9O;wBApNvC;IAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE"}
@@ -50,33 +50,37 @@ describe('OTPInput Component', () => {
50
50
  });
51
51
 
52
52
  it('accepts digit input', async () => {
53
- const { container, component } = render(OTPInput);
54
- const inputs = container.querySelectorAll('input');
55
-
56
53
  let changeEvent = null;
57
- component.$on('change', (e) => {
58
- changeEvent = e;
54
+ const { container } = render(OTPInput, {
55
+ props: {
56
+ onchange: (e) => {
57
+ changeEvent = e;
58
+ },
59
+ },
59
60
  });
61
+ const inputs = container.querySelectorAll('input');
60
62
 
61
63
  await fireEvent.input(inputs[0], { target: { value: '5' } });
62
64
 
63
65
  expect(changeEvent).toBeTruthy();
64
- expect(changeEvent.detail.value[0]).toBe('5');
66
+ expect(changeEvent.value[0]).toBe('5');
65
67
  });
66
68
 
67
69
  it('rejects non-digit input', async () => {
68
- const { container, component } = render(OTPInput);
69
- const inputs = container.querySelectorAll('input');
70
-
71
70
  let changeEvent = null;
72
- component.$on('change', (e) => {
73
- changeEvent = e;
71
+ const { container } = render(OTPInput, {
72
+ props: {
73
+ onchange: (e) => {
74
+ changeEvent = e;
75
+ },
76
+ },
74
77
  });
78
+ const inputs = container.querySelectorAll('input');
75
79
 
76
80
  await fireEvent.input(inputs[0], { target: { value: 'a' } });
77
81
 
78
82
  // Change event should not include the non-digit
79
- expect(changeEvent?.detail?.value[0] || '').toBe('');
83
+ expect(changeEvent?.value[0] || '').toBe('');
80
84
  });
81
85
 
82
86
  it('auto-advances to next input on valid digit', async () => {
@@ -91,13 +95,15 @@ describe('OTPInput Component', () => {
91
95
  });
92
96
 
93
97
  it('dispatches complete event when all digits entered', async () => {
94
- const { container, component } = render(OTPInput);
95
- const inputs = container.querySelectorAll('input');
96
-
97
98
  let completeEvent = null;
98
- component.$on('complete', (e) => {
99
- completeEvent = e;
99
+ const { container } = render(OTPInput, {
100
+ props: {
101
+ oncomplete: (e) => {
102
+ completeEvent = e;
103
+ },
104
+ },
100
105
  });
106
+ const inputs = container.querySelectorAll('input');
101
107
 
102
108
  // Fill all inputs
103
109
  for (let i = 0; i < 6; i++) {
@@ -105,7 +111,7 @@ describe('OTPInput Component', () => {
105
111
  }
106
112
 
107
113
  expect(completeEvent).toBeTruthy();
108
- expect(completeEvent.detail.code).toBe('123456');
114
+ expect(completeEvent.code).toBe('123456');
109
115
  });
110
116
 
111
117
  it('moves focus back on backspace when current input is empty', async () => {
@@ -139,13 +145,15 @@ describe('OTPInput Component', () => {
139
145
 
140
146
  it('handles paste of complete code', async () => {
141
147
  vi.useFakeTimers();
142
- const { container, component } = render(OTPInput);
143
- const inputs = container.querySelectorAll('input');
144
-
145
148
  let completeEvent = null;
146
- component.$on('complete', (e) => {
147
- completeEvent = e;
149
+ const { container } = render(OTPInput, {
150
+ props: {
151
+ oncomplete: (e) => {
152
+ completeEvent = e;
153
+ },
154
+ },
148
155
  });
156
+ const inputs = container.querySelectorAll('input');
149
157
 
150
158
  await fireEvent.paste(inputs[0], {
151
159
  clipboardData: { getData: () => '123456' },
@@ -154,18 +162,20 @@ describe('OTPInput Component', () => {
154
162
  vi.advanceTimersByTime(150);
155
163
 
156
164
  expect(completeEvent).toBeTruthy();
157
- expect(completeEvent.detail.code).toBe('123456');
165
+ expect(completeEvent.code).toBe('123456');
158
166
  vi.useRealTimers();
159
167
  });
160
168
 
161
169
  it('ignores paste if code length does not match', async () => {
162
- const { container, component } = render(OTPInput);
163
- const inputs = container.querySelectorAll('input');
164
-
165
170
  let completeEvent = null;
166
- component.$on('complete', (e) => {
167
- completeEvent = e;
171
+ const { container } = render(OTPInput, {
172
+ props: {
173
+ oncomplete: (e) => {
174
+ completeEvent = e;
175
+ },
176
+ },
168
177
  });
178
+ const inputs = container.querySelectorAll('input');
169
179
 
170
180
  await fireEvent.paste(inputs[0], {
171
181
  clipboardData: { getData: () => '12345' }, // Only 5 digits
@@ -176,13 +186,15 @@ describe('OTPInput Component', () => {
176
186
 
177
187
  it('strips non-digits from pasted content', async () => {
178
188
  vi.useFakeTimers();
179
- const { container, component } = render(OTPInput);
180
- const inputs = container.querySelectorAll('input');
181
-
182
189
  let completeEvent = null;
183
- component.$on('complete', (e) => {
184
- completeEvent = e;
190
+ const { container } = render(OTPInput, {
191
+ props: {
192
+ oncomplete: (e) => {
193
+ completeEvent = e;
194
+ },
195
+ },
185
196
  });
197
+ const inputs = container.querySelectorAll('input');
186
198
 
187
199
  await fireEvent.paste(inputs[0], {
188
200
  clipboardData: { getData: () => '1-2-3-4-5-6' }, // Code with dashes
@@ -191,7 +203,7 @@ describe('OTPInput Component', () => {
191
203
  vi.advanceTimersByTime(150);
192
204
 
193
205
  expect(completeEvent).toBeTruthy();
194
- expect(completeEvent.detail.code).toBe('123456');
206
+ expect(completeEvent.code).toBe('123456');
195
207
  vi.useRealTimers();
196
208
  });
197
209
 
@@ -217,13 +229,14 @@ describe('OTPInput Component', () => {
217
229
  expect(instructions.classList.contains('sr-only')).toBe(true);
218
230
  });
219
231
 
220
- it('initializes value array when length changes', () => {
221
- const { container, component } = render(OTPInput, { props: { length: 4 } });
232
+ it('initializes value array when length changes', async () => {
233
+ const { container, rerender } = render(OTPInput, { props: { length: 4 } });
222
234
  let inputs = container.querySelectorAll('input');
223
235
  expect(inputs.length).toBe(4);
224
236
 
225
- component.$set({ length: 8 });
226
- // Trigger reactivity
237
+ await rerender({ length: 8 });
238
+ inputs = container.querySelectorAll('input');
239
+ expect(inputs.length).toBe(8);
227
240
  });
228
241
 
229
242
  it('exposes focus method', () => {
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PasswordInput.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordInput.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/PasswordInput.spec.js"],"names":[],"mappings":""}