@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
@@ -69,40 +69,44 @@ describe("DarkModeToggle Component Tests", () => {
69
69
 
70
70
  test("Contains sun icon SVG", () => {
71
71
  const { container } = setupTest();
72
- const sunIcon = container.querySelector(".sun-icon");
72
+ const sunIcon = container.querySelector('span.text-amber-500 svg');
73
73
  expect(sunIcon).toBeInTheDocument();
74
74
  });
75
75
 
76
76
  test("Contains moon icon SVG", () => {
77
77
  const { container } = setupTest();
78
- const moonIcon = container.querySelector(".moon-icon");
78
+ const moonIcon = container.querySelector('span:not(.text-amber-500) svg');
79
79
  expect(moonIcon).toBeInTheDocument();
80
80
  });
81
81
 
82
- test("Contains auto icon container", () => {
82
+ test("Contains auto mode split icon", () => {
83
83
  const { container } = setupTest();
84
- const autoIcon = container.querySelector(".auto-icon-container");
85
- expect(autoIcon).toBeInTheDocument();
84
+ // In auto mode, there should be a div with absolute positioning containing the split icon
85
+ const autoDiv = container.querySelector('div.absolute.inset-0');
86
+ expect(autoDiv).toBeInTheDocument();
86
87
  });
87
88
 
88
89
  test("Auto icon is visible in auto mode (default)", () => {
89
90
  const { container } = setupTest();
90
- const autoIcon = container.querySelector(".auto-icon-container");
91
- expect(autoIcon).toBeInTheDocument();
91
+ const autoDiv = container.querySelector('div.absolute.inset-0');
92
+ expect(autoDiv).toBeInTheDocument();
92
93
  });
93
94
 
94
- test("Sun and moon icons are hidden in auto mode", () => {
95
+ test("Sun and moon single icons have hidden classes in auto mode", () => {
95
96
  const { container } = setupTest();
96
- const sunIcon = container.querySelector(".sun-icon");
97
- const moonIcon = container.querySelector(".moon-icon");
98
- expect(sunIcon).toHaveClass("hidden");
99
- expect(moonIcon).toHaveClass("hidden");
97
+ // In auto mode, the main sun/moon icons should have opacity-0 and scale-0 classes
98
+ const sunIcon = container.querySelector('span.text-amber-500');
99
+ const moonIcon = container.querySelectorAll('span')[1]; // Second span is moon
100
+ expect(sunIcon).toHaveClass('opacity-0');
101
+ expect(sunIcon).toHaveClass('scale-0');
102
+ expect(moonIcon).toHaveClass('opacity-0');
103
+ expect(moonIcon).toHaveClass('scale-0');
100
104
  });
101
105
 
102
- test("Button has theme-toggle-btn class", () => {
106
+ test("Button has relative class for positioning", () => {
103
107
  setupTest();
104
108
  const button = screen.getByRole("button");
105
- expect(button).toHaveClass("theme-toggle-btn");
109
+ expect(button).toHaveClass("relative");
106
110
  });
107
111
 
108
112
  test("Button has focus outline removed", () => {
@@ -111,44 +115,47 @@ describe("DarkModeToggle Component Tests", () => {
111
115
  expect(button).toHaveClass("focus:outline-none");
112
116
  });
113
117
 
114
- test("Button blurs after touch to remove focus state", async () => {
115
- setupTest();
118
+ test("Button click handler is called on interaction", async () => {
119
+ const { user } = setupTest();
116
120
  const button = screen.getByRole("button");
117
121
 
118
- // Simulate touchend
119
- const blurSpy = vi.spyOn(button, "blur");
120
- fireEvent.touchEnd(button);
122
+ // Verify button is interactive
123
+ await user.click(button);
121
124
 
122
- expect(blurSpy).toHaveBeenCalled();
125
+ // After click, localStorage should be updated (auto -> light)
126
+ expect(localStorageMock.setItem).toHaveBeenCalled();
123
127
  });
124
128
 
125
129
  test("SVG icons have correct dimensions", () => {
126
130
  const { container } = setupTest();
127
- const sunIconSvg = container.querySelector(".sun-icon svg");
128
- const moonIconSvg = container.querySelector(".moon-icon svg");
129
-
130
- expect(sunIconSvg).toHaveAttribute("width", "20");
131
- expect(sunIconSvg).toHaveAttribute("height", "20");
132
- expect(moonIconSvg).toHaveAttribute("width", "20");
133
- expect(moonIconSvg).toHaveAttribute("height", "20");
131
+ const svgs = container.querySelectorAll('svg');
132
+ // All SVGs should have width and height of either 20 (main icons) or 12 (auto mode icons)
133
+ expect(svgs.length).toBeGreaterThan(0);
134
+ svgs.forEach(svg => {
135
+ const width = svg.getAttribute('width');
136
+ const height = svg.getAttribute('height');
137
+ expect(['20', '12']).toContain(width);
138
+ expect(['20', '12']).toContain(height);
139
+ });
134
140
  });
135
141
 
136
- test("Sun icon has correct class for color", () => {
142
+ test("Sun icon has correct color class", () => {
137
143
  const { container } = setupTest();
138
- const sunIcon = container.querySelector(".sun-icon");
139
- expect(sunIcon).toHaveClass("sun-icon");
144
+ const sunIcon = container.querySelector('span.text-amber-500');
145
+ expect(sunIcon).toHaveClass("text-amber-500");
140
146
  });
141
147
 
142
- test("Moon icon has correct class for color", () => {
143
- const { container } = setupTest();
144
- const moonIcon = container.querySelector(".moon-icon");
145
- expect(moonIcon).toHaveClass("moon-icon");
148
+ test("Button has overflow hidden for auto icon", () => {
149
+ setupTest();
150
+ const button = screen.getByRole("button");
151
+ expect(button).toHaveClass("overflow-hidden");
146
152
  });
147
153
 
148
- test("Auto icon container has correct class", () => {
154
+ test("Auto mode div has absolute positioning", () => {
149
155
  const { container } = setupTest();
150
- const autoIcon = container.querySelector(".auto-icon-container");
151
- expect(autoIcon).toHaveClass("auto-icon-container");
156
+ const autoDiv = container.querySelector('div.absolute.inset-0');
157
+ expect(autoDiv).toHaveClass("absolute");
158
+ expect(autoDiv).toHaveClass("inset-0");
152
159
  });
153
160
  });
154
161
 
@@ -203,23 +210,32 @@ describe("DarkModeToggle 3-State Cycle", () => {
203
210
  const { user, container } = setupTest();
204
211
  const button = screen.getByRole("button");
205
212
 
206
- // Initially auto - auto icon container should exist
207
- expect(container.querySelector(".auto-icon-container")).toBeInTheDocument();
213
+ // Initially auto - auto div should exist
214
+ expect(container.querySelector("div.absolute.inset-0")).toBeInTheDocument();
208
215
 
209
216
  // Click 1: auto -> light
210
217
  await user.click(button);
211
- expect(container.querySelector(".sun-icon")).not.toHaveClass("hidden");
212
- expect(container.querySelector(".auto-icon-container")).not.toBeInTheDocument();
218
+ const sunSpan = container.querySelector('span.text-amber-500');
219
+ // In light mode, sun should be visible (no opacity-0 class)
220
+ expect(sunSpan.classList.contains("opacity-0")).toBe(false);
221
+ expect(container.querySelector("div.absolute.inset-0")).not.toBeInTheDocument();
213
222
 
214
223
  // Click 2: light -> dark
215
224
  await user.click(button);
216
- expect(container.querySelector(".moon-icon")).not.toHaveClass("hidden");
217
- expect(container.querySelector(".sun-icon")).toHaveClass("hidden");
225
+ // Find the direct child spans of the button (not nested spans)
226
+ const buttonSpans = Array.from(button.querySelectorAll(':scope > span'));
227
+ const moonSpan = buttonSpans.find(
228
+ span => !span.classList.contains('text-amber-500')
229
+ );
230
+ // In dark mode, moon should be visible (no opacity-0)
231
+ expect(moonSpan.classList.contains("opacity-0")).toBe(false);
232
+ expect(sunSpan.classList.contains("opacity-0")).toBe(true);
218
233
 
219
234
  // Click 3: dark -> auto
220
235
  await user.click(button);
221
- expect(container.querySelector(".auto-icon-container")).toBeInTheDocument();
222
- expect(container.querySelector(".moon-icon")).toHaveClass("hidden");
236
+ expect(container.querySelector("div.absolute.inset-0")).toBeInTheDocument();
237
+ // After returning to auto, both icons should be hidden
238
+ expect(sunSpan.classList.contains("opacity-0")).toBe(true);
223
239
  });
224
240
 
225
241
  test("Dark class applied when switching to dark mode", async () => {
@@ -264,22 +280,39 @@ describe("DarkModeToggle Initial State", () => {
264
280
 
265
281
  test("Initializes to auto mode when no localStorage value", () => {
266
282
  const { container } = setupTest();
267
- const autoIcon = container.querySelector(".auto-icon-container");
268
- expect(autoIcon).toBeInTheDocument();
283
+ const autoDiv = container.querySelector("div.absolute.inset-0");
284
+ expect(autoDiv).toBeInTheDocument();
269
285
  });
270
286
 
271
287
  test("Initializes to dark mode when localStorage has 'dark'", () => {
272
288
  localStorageMock.store.theme = "dark";
273
289
  const { container } = setupTest();
274
- const moonIcon = container.querySelector(".moon-icon");
275
- expect(moonIcon).not.toHaveClass("hidden");
290
+ const button = screen.getByRole("button");
291
+ const buttonSpans = Array.from(button.querySelectorAll(':scope > span'));
292
+ const moonSpan = buttonSpans.find(
293
+ span => !span.classList.contains('text-amber-500')
294
+ );
295
+ // In dark mode, moon should be visible (no opacity-0)
296
+ expect(moonSpan.classList.contains("opacity-0")).toBe(false);
297
+ // Sun should be hidden
298
+ const sunSpan = container.querySelector('span.text-amber-500');
299
+ expect(sunSpan.classList.contains("opacity-0")).toBe(true);
276
300
  });
277
301
 
278
302
  test("Initializes to light mode when localStorage has 'light'", () => {
279
303
  localStorageMock.store.theme = "light";
280
304
  const { container } = setupTest();
281
- const sunIcon = container.querySelector(".sun-icon");
282
- expect(sunIcon).not.toHaveClass("hidden");
305
+ const button = screen.getByRole("button");
306
+ const sunSpan = container.querySelector('span.text-amber-500');
307
+ // In light mode, sun should be visible (no opacity-0)
308
+ expect(sunSpan.classList.contains("opacity-0")).toBe(false);
309
+ // Moon should be hidden - need to check all spans that have transition-all
310
+ const allSpansWithTransition = Array.from(button.querySelectorAll('span.transition-all'));
311
+ const moonSpan = allSpansWithTransition.find(
312
+ span => !span.classList.contains('text-amber-500')
313
+ );
314
+ expect(moonSpan).toBeDefined();
315
+ expect(moonSpan.classList.contains("opacity-0")).toBe(true);
283
316
  });
284
317
 
285
318
  test("Reads from localStorage on mount", () => {
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Drawer.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Drawer/Drawer.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,212 @@
1
+ import { render, screen, waitFor } from '@testing-library/svelte';
2
+ import userEvent from '@testing-library/user-event';
3
+ import { expect, describe, test, vi, beforeEach, afterEach } from 'vitest';
4
+ import Drawer from './Drawer.svelte';
5
+
6
+ describe('Drawer Component', () => {
7
+ beforeEach(() => {
8
+ // Reset body overflow before each test
9
+ document.body.style.overflow = '';
10
+ });
11
+
12
+ afterEach(() => {
13
+ // Clean up body overflow after each test
14
+ document.body.style.overflow = '';
15
+ });
16
+
17
+ test('does not render when show is false and hidden is true', () => {
18
+ const { container } = render(Drawer, { props: { show: false, hidden: true } });
19
+ expect(container.querySelector('[role="dialog"]')).not.toBeInTheDocument();
20
+ });
21
+
22
+ test('renders when show is true', () => {
23
+ const { container } = render(Drawer, { props: { show: true } });
24
+ expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
25
+ });
26
+
27
+ test('renders when hidden is false', () => {
28
+ const { container } = render(Drawer, { props: { hidden: false } });
29
+ expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
30
+ });
31
+
32
+ test('has role="dialog" and aria-modal="true"', () => {
33
+ const { container } = render(Drawer, { props: { show: true } });
34
+ const dialog = container.querySelector('[role="dialog"]');
35
+ expect(dialog).toHaveAttribute('aria-modal', 'true');
36
+ });
37
+
38
+ test('renders title when provided', () => {
39
+ render(Drawer, { props: { show: true, title: 'Test Drawer', id: 'test-drawer' } });
40
+ expect(screen.getByText('Test Drawer')).toBeInTheDocument();
41
+ });
42
+
43
+ test('applies custom className', () => {
44
+ const { container } = render(Drawer, { props: { show: true, class: 'custom-drawer' } });
45
+ const dialog = container.querySelector('[role="dialog"]');
46
+ expect(dialog).toHaveClass('custom-drawer');
47
+ });
48
+
49
+ test('renders backdrop by default when visible', () => {
50
+ const { container } = render(Drawer, { props: { show: true } });
51
+ const backdrop = container.querySelector('[role="presentation"]');
52
+ expect(backdrop).toBeInTheDocument();
53
+ });
54
+
55
+ test('does not render backdrop when backdrop is false', () => {
56
+ const { container } = render(Drawer, { props: { show: true, backdrop: false } });
57
+ const backdrop = container.querySelector('[role="presentation"]');
58
+ expect(backdrop).not.toBeInTheDocument();
59
+ });
60
+
61
+ test('passes through id prop', () => {
62
+ const { container } = render(Drawer, { props: { show: true, id: 'my-drawer' } });
63
+ const dialog = container.querySelector('#my-drawer');
64
+ expect(dialog).toBeInTheDocument();
65
+ });
66
+ });
67
+
68
+ describe('Drawer Placements', () => {
69
+ test('left placement has left-0 class', () => {
70
+ const { container } = render(Drawer, { props: { show: true, placement: 'left' } });
71
+ const dialog = container.querySelector('[role="dialog"]');
72
+ expect(dialog).toHaveClass('left-0');
73
+ });
74
+
75
+ test('right placement has right-0 class', () => {
76
+ const { container } = render(Drawer, { props: { show: true, placement: 'right' } });
77
+ const dialog = container.querySelector('[role="dialog"]');
78
+ expect(dialog).toHaveClass('right-0');
79
+ });
80
+
81
+ test('top placement has top-0 class', () => {
82
+ const { container } = render(Drawer, { props: { show: true, placement: 'top' } });
83
+ const dialog = container.querySelector('[role="dialog"]');
84
+ expect(dialog).toHaveClass('top-0');
85
+ });
86
+
87
+ test('bottom placement has bottom-0 class', () => {
88
+ const { container } = render(Drawer, { props: { show: true, placement: 'bottom' } });
89
+ const dialog = container.querySelector('[role="dialog"]');
90
+ expect(dialog).toHaveClass('bottom-0');
91
+ });
92
+ });
93
+
94
+ describe('Drawer Widths', () => {
95
+ test('sm width applies w-64', () => {
96
+ const { container } = render(Drawer, { props: { show: true, width: 'sm' } });
97
+ const dialog = container.querySelector('[role="dialog"]');
98
+ expect(dialog).toHaveClass('w-64');
99
+ });
100
+
101
+ test('md width applies w-80 (default)', () => {
102
+ const { container } = render(Drawer, { props: { show: true } });
103
+ const dialog = container.querySelector('[role="dialog"]');
104
+ expect(dialog).toHaveClass('w-80');
105
+ });
106
+
107
+ test('lg width applies w-96', () => {
108
+ const { container } = render(Drawer, { props: { show: true, width: 'lg' } });
109
+ const dialog = container.querySelector('[role="dialog"]');
110
+ expect(dialog).toHaveClass('w-96');
111
+ });
112
+
113
+ test('full width applies w-full', () => {
114
+ const { container } = render(Drawer, { props: { show: true, width: 'full' } });
115
+ const dialog = container.querySelector('[role="dialog"]');
116
+ expect(dialog).toHaveClass('w-full');
117
+ });
118
+ });
119
+
120
+ describe('Drawer Accessibility', () => {
121
+ test('has tabindex="-1" for focus management', () => {
122
+ const { container } = render(Drawer, { props: { show: true } });
123
+ const dialog = container.querySelector('[role="dialog"]');
124
+ expect(dialog).toHaveAttribute('tabindex', '-1');
125
+ });
126
+
127
+ test('has aria-labelledby when title and id are provided', () => {
128
+ const { container } = render(Drawer, { props: { show: true, title: 'Test', id: 'test-drawer' } });
129
+ const dialog = container.querySelector('[role="dialog"]');
130
+ expect(dialog).toHaveAttribute('aria-labelledby', 'test-drawer-label');
131
+ });
132
+ });
133
+
134
+ describe('Drawer Styling', () => {
135
+ test('has fixed positioning', () => {
136
+ const { container } = render(Drawer, { props: { show: true } });
137
+ const dialog = container.querySelector('[role="dialog"]');
138
+ expect(dialog).toHaveClass('fixed');
139
+ });
140
+
141
+ test('has z-40 for stacking', () => {
142
+ const { container } = render(Drawer, { props: { show: true } });
143
+ const dialog = container.querySelector('[role="dialog"]');
144
+ expect(dialog).toHaveClass('z-40');
145
+ });
146
+
147
+ test('has flex flex-col layout', () => {
148
+ const { container } = render(Drawer, { props: { show: true } });
149
+ const dialog = container.querySelector('[role="dialog"]');
150
+ expect(dialog).toHaveClass('flex');
151
+ expect(dialog).toHaveClass('flex-col');
152
+ });
153
+
154
+ test('has bg-white background', () => {
155
+ const { container } = render(Drawer, { props: { show: true } });
156
+ const dialog = container.querySelector('[role="dialog"]');
157
+ expect(dialog).toHaveClass('bg-white');
158
+ });
159
+
160
+ test('has dark mode background', () => {
161
+ const { container } = render(Drawer, { props: { show: true } });
162
+ const dialog = container.querySelector('[role="dialog"]');
163
+ expect(dialog).toHaveClass('dark:bg-gray-800');
164
+ });
165
+ });
166
+
167
+ describe('Drawer Edge Mode', () => {
168
+ test('shows edge trigger when edge=true, placement=bottom, and not visible', () => {
169
+ const { container } = render(Drawer, { props: { edge: true, placement: 'bottom', show: false, hidden: true } });
170
+ const edgeTrigger = container.querySelector('.cursor-pointer');
171
+ expect(edgeTrigger).toBeInTheDocument();
172
+ });
173
+
174
+ test('hides edge trigger when drawer is visible', () => {
175
+ const { container } = render(Drawer, { props: { edge: true, placement: 'bottom', show: true } });
176
+ // Edge trigger should not be visible when drawer is open
177
+ const edgeTriggers = container.querySelectorAll('.cursor-pointer.fixed');
178
+ // The drawer itself might have cursor classes, so check for the specific edge trigger pattern
179
+ expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
180
+ });
181
+ });
182
+
183
+ describe('Drawer Callbacks', () => {
184
+ test('onclose prop is accepted', () => {
185
+ const onclose = vi.fn();
186
+ const { container } = render(Drawer, {
187
+ props: { show: true, closeOnBackdropClick: true, onclose }
188
+ });
189
+ // Verify drawer renders with onclose callback
190
+ expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
191
+ });
192
+
193
+ test('closeOnBackdropClick prop defaults to true', () => {
194
+ const { container } = render(Drawer, { props: { show: true } });
195
+ // Drawer renders with default closeOnBackdropClick behavior
196
+ expect(container.querySelector('[role="presentation"]')).toBeInTheDocument();
197
+ });
198
+
199
+ test('closeOnEscape prop defaults to true', () => {
200
+ const { container } = render(Drawer, { props: { show: true } });
201
+ // Drawer accepts closeOnEscape prop
202
+ expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
203
+ });
204
+
205
+ test('onopen prop is accepted', () => {
206
+ const onopen = vi.fn();
207
+ const { container } = render(Drawer, {
208
+ props: { show: true, onopen }
209
+ });
210
+ expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
211
+ });
212
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Dropdown.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Dropdown/Dropdown.spec.js"],"names":[],"mappings":""}