@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,295 @@
1
+ import { render, screen } from '@testing-library/svelte';
2
+ import { expect, describe, test } from 'vitest';
3
+ import Tabs from './Tabs.svelte';
4
+ import TabsWithItems from './TabsWithItems.test.svelte';
5
+
6
+ describe('Tabs Component', () => {
7
+ test('renders a wrapper div', () => {
8
+ const { container } = render(Tabs);
9
+ expect(container.querySelector('div.flex.flex-col')).toBeInTheDocument();
10
+ });
11
+
12
+ test('renders a tablist ul', () => {
13
+ const { container } = render(Tabs);
14
+ expect(container.querySelector('ul[role="tablist"]')).toBeInTheDocument();
15
+ });
16
+
17
+ test('renders content area with pt-4 padding', () => {
18
+ const { container } = render(Tabs);
19
+ expect(container.querySelector('.pt-4')).toBeInTheDocument();
20
+ });
21
+
22
+ test('applies custom className', () => {
23
+ const { container } = render(Tabs, { props: { class: 'custom-tabs' } });
24
+ const wrapper = container.querySelector('div.flex.flex-col');
25
+ expect(wrapper).toHaveClass('custom-tabs');
26
+ });
27
+
28
+ test('passes through additional props', () => {
29
+ const { container } = render(Tabs, { props: { 'data-testid': 'my-tabs' } });
30
+ const wrapper = container.querySelector('[data-testid="my-tabs"]');
31
+ expect(wrapper).toBeInTheDocument();
32
+ });
33
+
34
+ test('applies contentClass to content div', () => {
35
+ const { container } = render(Tabs, { props: { contentClass: 'custom-content' } });
36
+ expect(container.querySelector('.custom-content')).toBeInTheDocument();
37
+ });
38
+ });
39
+
40
+ describe('Tabs Styles - Underline', () => {
41
+ test('underline style has border-b class', () => {
42
+ const { container } = render(Tabs, { props: { tabStyle: 'underline' } });
43
+ const tablist = container.querySelector('ul[role="tablist"]');
44
+ expect(tablist).toHaveClass('border-b');
45
+ expect(tablist).toHaveClass('border-gray-200');
46
+ });
47
+
48
+ test('underline style has -mb-px class', () => {
49
+ const { container } = render(Tabs, { props: { tabStyle: 'underline' } });
50
+ const tablist = container.querySelector('ul[role="tablist"]');
51
+ expect(tablist).toHaveClass('-mb-px');
52
+ });
53
+
54
+ test('underline is default style', () => {
55
+ const { container } = render(Tabs);
56
+ const tablist = container.querySelector('ul[role="tablist"]');
57
+ expect(tablist).toHaveClass('border-b');
58
+ });
59
+ });
60
+
61
+ describe('Tabs Styles - Pills', () => {
62
+ test('pills style has gap-2 class', () => {
63
+ const { container } = render(Tabs, { props: { tabStyle: 'pills' } });
64
+ const tablist = container.querySelector('ul[role="tablist"]');
65
+ expect(tablist).toHaveClass('gap-2');
66
+ });
67
+
68
+ test('pills style does not have border-b', () => {
69
+ const { container } = render(Tabs, { props: { tabStyle: 'pills' } });
70
+ const tablist = container.querySelector('ul[role="tablist"]');
71
+ expect(tablist).not.toHaveClass('border-b');
72
+ });
73
+ });
74
+
75
+ describe('Tabs Styles - Full', () => {
76
+ test('full style has divide-x class', () => {
77
+ const { container } = render(Tabs, { props: { tabStyle: 'full' } });
78
+ const tablist = container.querySelector('ul[role="tablist"]');
79
+ expect(tablist).toHaveClass('divide-x');
80
+ expect(tablist).toHaveClass('divide-gray-200');
81
+ });
82
+
83
+ test('full style has rounded-lg class', () => {
84
+ const { container } = render(Tabs, { props: { tabStyle: 'full' } });
85
+ const tablist = container.querySelector('ul[role="tablist"]');
86
+ expect(tablist).toHaveClass('rounded-lg');
87
+ });
88
+
89
+ test('full style has shadow class', () => {
90
+ const { container } = render(Tabs, { props: { tabStyle: 'full' } });
91
+ const tablist = container.querySelector('ul[role="tablist"]');
92
+ expect(tablist).toHaveClass('shadow');
93
+ });
94
+
95
+ test('full style has overflow-hidden', () => {
96
+ const { container } = render(Tabs, { props: { tabStyle: 'full' } });
97
+ const tablist = container.querySelector('ul[role="tablist"]');
98
+ expect(tablist).toHaveClass('overflow-hidden');
99
+ });
100
+ });
101
+
102
+ describe('Tabs Common Styling', () => {
103
+ test('tablist has flex class', () => {
104
+ const { container } = render(Tabs);
105
+ const tablist = container.querySelector('ul[role="tablist"]');
106
+ expect(tablist).toHaveClass('flex');
107
+ });
108
+
109
+ test('tablist has flex-wrap class', () => {
110
+ const { container } = render(Tabs);
111
+ const tablist = container.querySelector('ul[role="tablist"]');
112
+ expect(tablist).toHaveClass('flex-wrap');
113
+ });
114
+
115
+ test('tablist has text-center class', () => {
116
+ const { container } = render(Tabs);
117
+ const tablist = container.querySelector('ul[role="tablist"]');
118
+ expect(tablist).toHaveClass('text-center');
119
+ });
120
+
121
+ test('tablist has font-medium class', () => {
122
+ const { container } = render(Tabs);
123
+ const tablist = container.querySelector('ul[role="tablist"]');
124
+ expect(tablist).toHaveClass('font-medium');
125
+ });
126
+ });
127
+
128
+ describe('Tabs Props', () => {
129
+ test('tabStyle defaults to underline', () => {
130
+ const { container } = render(Tabs);
131
+ const tablist = container.querySelector('ul[role="tablist"]');
132
+ expect(tablist).toHaveClass('border-b');
133
+ });
134
+
135
+ test('contentClass is applied to content div', () => {
136
+ const { container } = render(Tabs, { props: { contentClass: 'my-content-class' } });
137
+ expect(container.querySelector('.my-content-class')).toBeInTheDocument();
138
+ });
139
+
140
+ test('activeTabValue can be set', () => {
141
+ const { container } = render(Tabs, { props: { activeTabValue: 'tab1' } });
142
+ // Component accepts the prop without error
143
+ expect(container.querySelector('div.flex.flex-col')).toBeInTheDocument();
144
+ });
145
+ });
146
+
147
+ describe('Tabs Accessibility', () => {
148
+ test('tablist has role="tablist"', () => {
149
+ const { container } = render(Tabs);
150
+ expect(container.querySelector('[role="tablist"]')).toBeInTheDocument();
151
+ });
152
+ });
153
+
154
+ describe('Tabs Dark Mode', () => {
155
+ test('underline has dark mode border class', () => {
156
+ const { container } = render(Tabs, { props: { tabStyle: 'underline' } });
157
+ const tablist = container.querySelector('ul[role="tablist"]');
158
+ expect(tablist).toHaveClass('dark:border-gray-700');
159
+ });
160
+
161
+ test('full style has dark mode divide class', () => {
162
+ const { container } = render(Tabs, { props: { tabStyle: 'full' } });
163
+ const tablist = container.querySelector('ul[role="tablist"]');
164
+ expect(tablist).toHaveClass('dark:divide-gray-700');
165
+ });
166
+ });
167
+
168
+ describe('Tabs with TabItems - registerTab functionality', () => {
169
+ test('auto-selects first tab when no active tab is set', async () => {
170
+ const { container } = render(TabsWithItems);
171
+
172
+ // Wait for tabs to register and render
173
+ await new Promise(resolve => setTimeout(resolve, 50));
174
+
175
+ // First tab content should be visible
176
+ expect(screen.getByTestId('tab1-content')).toBeInTheDocument();
177
+
178
+ // First tab button should be active
179
+ const buttons = container.querySelectorAll('button[role="tab"]');
180
+ expect(buttons[0]).toHaveAttribute('aria-selected', 'true');
181
+ });
182
+
183
+ test('respects open prop on TabItem', async () => {
184
+ const { container } = render(TabsWithItems, { props: { withOpen: true } });
185
+
186
+ // Wait for tabs to register
187
+ await new Promise(resolve => setTimeout(resolve, 50));
188
+
189
+ // First tab with open=true should be active
190
+ expect(screen.getByTestId('tab1-content')).toBeInTheDocument();
191
+
192
+ const buttons = container.querySelectorAll('button[role="tab"]');
193
+ expect(buttons[0]).toHaveAttribute('aria-selected', 'true');
194
+ });
195
+
196
+ test('registerTab prevents duplicate tab registration', async () => {
197
+ const { container } = render(TabsWithItems);
198
+
199
+ await new Promise(resolve => setTimeout(resolve, 50));
200
+
201
+ // Should only have 3 tabs, not duplicates
202
+ const buttons = container.querySelectorAll('button[role="tab"]');
203
+ expect(buttons).toHaveLength(3);
204
+ });
205
+
206
+ test('can switch between tabs', async () => {
207
+ const { container } = render(TabsWithItems);
208
+
209
+ await new Promise(resolve => setTimeout(resolve, 50));
210
+
211
+ // Click second tab
212
+ const buttons = container.querySelectorAll('button[role="tab"]');
213
+ buttons[1].click();
214
+
215
+ await new Promise(resolve => setTimeout(resolve, 50));
216
+
217
+ // Second tab content should be visible
218
+ expect(screen.getByTestId('tab2-content')).toBeInTheDocument();
219
+ expect(buttons[1]).toHaveAttribute('aria-selected', 'true');
220
+ });
221
+
222
+ test('activeTabValue can be set to specific tab', async () => {
223
+ const { container } = render(TabsWithItems, {
224
+ props: {
225
+ activeTabValue: 'tab2'
226
+ }
227
+ });
228
+
229
+ await new Promise(resolve => setTimeout(resolve, 50));
230
+
231
+ // Second tab should be active
232
+ expect(screen.getByTestId('tab2-content')).toBeInTheDocument();
233
+
234
+ const buttons = container.querySelectorAll('button[role="tab"]');
235
+ expect(buttons[1]).toHaveAttribute('aria-selected', 'true');
236
+ });
237
+
238
+ test('renders tab titles correctly', async () => {
239
+ const { container } = render(TabsWithItems);
240
+
241
+ await new Promise(resolve => setTimeout(resolve, 50));
242
+
243
+ const buttons = container.querySelectorAll('button[role="tab"]');
244
+ expect(buttons[0]).toHaveTextContent('First Tab');
245
+ expect(buttons[1]).toHaveTextContent('Second Tab');
246
+ expect(buttons[2]).toHaveTextContent('Third Tab');
247
+ });
248
+
249
+ test('pills style applies correct active classes', async () => {
250
+ const { container } = render(TabsWithItems, { props: { tabStyle: 'pills' } });
251
+
252
+ await new Promise(resolve => setTimeout(resolve, 50));
253
+
254
+ const buttons = container.querySelectorAll('button[role="tab"]');
255
+
256
+ // Active tab should have pills active classes
257
+ expect(buttons[0]).toHaveClass('bg-blue-600');
258
+ expect(buttons[0]).toHaveClass('text-white');
259
+ expect(buttons[0]).toHaveClass('rounded-lg');
260
+
261
+ // Inactive tabs should have pills inactive classes
262
+ expect(buttons[1]).toHaveClass('rounded-lg');
263
+ expect(buttons[1]).not.toHaveClass('bg-blue-600');
264
+ });
265
+
266
+ test('pills style inactive tab hover state', async () => {
267
+ const { container } = render(TabsWithItems, { props: { tabStyle: 'pills' } });
268
+
269
+ await new Promise(resolve => setTimeout(resolve, 50));
270
+
271
+ const buttons = container.querySelectorAll('button[role="tab"]');
272
+
273
+ // Check that inactive button has hover classes in its className
274
+ const inactiveButton = buttons[1];
275
+ expect(inactiveButton.className).toContain('hover:text-gray-900');
276
+ expect(inactiveButton.className).toContain('hover:bg-gray-100');
277
+ });
278
+
279
+ test('full style applies correct classes', async () => {
280
+ const { container } = render(TabsWithItems, { props: { tabStyle: 'full' } });
281
+
282
+ await new Promise(resolve => setTimeout(resolve, 50));
283
+
284
+ const buttons = container.querySelectorAll('button[role="tab"]');
285
+
286
+ // Active tab should have full active classes
287
+ expect(buttons[0]).toHaveClass('w-full');
288
+ expect(buttons[0]).toHaveClass('bg-gray-100');
289
+ expect(buttons[0]).toHaveClass('text-gray-900');
290
+
291
+ // Inactive tabs should have full inactive classes
292
+ expect(buttons[1]).toHaveClass('w-full');
293
+ expect(buttons[1]).toHaveClass('bg-white');
294
+ });
295
+ });
@@ -0,0 +1,18 @@
1
+ <script>
2
+ import Tabs from './Tabs.svelte';
3
+ import TabItem from './TabItem.svelte';
4
+
5
+ let { activeTabValue = $bindable(), tabStyle = 'underline', withOpen = false } = $props();
6
+ </script>
7
+
8
+ <Tabs bind:activeTabValue {tabStyle}>
9
+ <TabItem title="First Tab" value="tab1" open={withOpen}>
10
+ <div data-testid="tab1-content">First Tab Content</div>
11
+ </TabItem>
12
+ <TabItem title="Second Tab" value="tab2">
13
+ <div data-testid="tab2-content">Second Tab Content</div>
14
+ </TabItem>
15
+ <TabItem title="Third Tab" value="tab3">
16
+ <div data-testid="tab3-content">Third Tab Content</div>
17
+ </TabItem>
18
+ </Tabs>
@@ -0,0 +1,16 @@
1
+ export default TabsWithItems;
2
+ type TabsWithItems = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<$$ComponentProps>): void;
5
+ };
6
+ declare const TabsWithItems: import("svelte").Component<{
7
+ activeTabValue?: any;
8
+ tabStyle?: string;
9
+ withOpen?: boolean;
10
+ }, {}, "activeTabValue">;
11
+ type $$ComponentProps = {
12
+ activeTabValue?: any;
13
+ tabStyle?: string;
14
+ withOpen?: boolean;
15
+ };
16
+ //# sourceMappingURL=TabsWithItems.test.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsWithItems.test.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Tabs/TabsWithItems.test.svelte.js"],"names":[],"mappings":";;;;;AA2BA;qBAjBsC,GAAG;eAAa,MAAM;eAAa,OAAO;yBAiBpB;wBAjBzC;IAAE,cAAc,CAAC,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE"}
@@ -3,125 +3,141 @@ import { render, fireEvent } from '@testing-library/svelte';
3
3
  import Toggle from './Toggle.svelte';
4
4
 
5
5
  describe('Toggle Component', () => {
6
- it('renders a toggle button', () => {
6
+ it('renders a toggle with label element', () => {
7
7
  const { container } = render(Toggle);
8
- const button = container.querySelector('button');
9
- expect(button).toBeTruthy();
10
- expect(button.getAttribute('role')).toBe('switch');
8
+ const label = container.querySelector('label');
9
+ expect(label).toBeTruthy();
10
+ expect(label).toHaveClass('inline-flex');
11
+ expect(label).toHaveClass('items-center');
12
+ });
13
+
14
+ it('renders a hidden checkbox input', () => {
15
+ const { container } = render(Toggle);
16
+ const input = container.querySelector('input[type="checkbox"]');
17
+ expect(input).toBeTruthy();
18
+ expect(input).toHaveClass('sr-only');
19
+ expect(input).toHaveClass('peer');
20
+ });
21
+
22
+ it('renders switch element with role switch', () => {
23
+ const { container } = render(Toggle);
24
+ const switchEl = container.querySelector('[role="switch"]');
25
+ expect(switchEl).toBeTruthy();
11
26
  });
12
27
 
13
28
  it('has aria-checked false by default', () => {
14
29
  const { container } = render(Toggle);
15
- const button = container.querySelector('button');
16
- expect(button.getAttribute('aria-checked')).toBe('false');
30
+ const switchEl = container.querySelector('[role="switch"]');
31
+ expect(switchEl.getAttribute('aria-checked')).toBe('false');
17
32
  });
18
33
 
19
34
  it('has aria-checked true when checked', () => {
20
- const { container } = render(Toggle, { props: { checked: true } });
21
- const button = container.querySelector('button');
22
- expect(button.getAttribute('aria-checked')).toBe('true');
35
+ const { container } = render(Toggle, { checked: true });
36
+ const switchEl = container.querySelector('[role="switch"]');
37
+ expect(switchEl.getAttribute('aria-checked')).toBe('true');
23
38
  });
24
39
 
25
- it('toggles checked state on click', async () => {
26
- const onchange = vi.fn();
27
- const { container } = render(Toggle, { props: { onchange } });
28
- const button = container.querySelector('button');
29
-
30
- await fireEvent.click(button);
40
+ it('checkbox reflects checked state', () => {
41
+ const { container } = render(Toggle, { checked: true });
42
+ const input = container.querySelector('input[type="checkbox"]');
43
+ expect(input.checked).toBe(true);
44
+ });
31
45
 
32
- expect(onchange).toHaveBeenCalledWith({ checked: true });
33
- expect(button.getAttribute('aria-checked')).toBe('true');
46
+ it('checkbox reflects unchecked state', () => {
47
+ const { container } = render(Toggle, { checked: false });
48
+ const input = container.querySelector('input[type="checkbox"]');
49
+ expect(input.checked).toBe(false);
34
50
  });
35
51
 
36
- it('toggles from checked to unchecked on click', async () => {
52
+ it('toggles checked state on change', async () => {
37
53
  const onchange = vi.fn();
38
- const { container } = render(Toggle, { props: { checked: true, onchange } });
39
- const button = container.querySelector('button');
54
+ const { container } = render(Toggle, { onchange });
55
+ const input = container.querySelector('input[type="checkbox"]');
40
56
 
41
- await fireEvent.click(button);
57
+ await fireEvent.click(input);
42
58
 
43
- expect(onchange).toHaveBeenCalledWith({ checked: false });
44
- expect(button.getAttribute('aria-checked')).toBe('false');
59
+ expect(onchange).toHaveBeenCalledWith({ checked: true });
45
60
  });
46
61
 
47
- it('does not toggle when disabled', async () => {
62
+ it('toggles from checked to unchecked', async () => {
48
63
  const onchange = vi.fn();
49
- const { container } = render(Toggle, { props: { disabled: true, onchange } });
50
- const button = container.querySelector('button');
64
+ const { container } = render(Toggle, { checked: true, onchange });
65
+ const input = container.querySelector('input[type="checkbox"]');
51
66
 
52
- await fireEvent.click(button);
67
+ await fireEvent.click(input);
53
68
 
54
- expect(onchange).not.toHaveBeenCalled();
55
- expect(button.getAttribute('aria-checked')).toBe('false');
69
+ expect(onchange).toHaveBeenCalledWith({ checked: false });
56
70
  });
57
71
 
58
- it('has toggle-checked class when checked', () => {
59
- const { container } = render(Toggle, { props: { checked: true } });
60
- const button = container.querySelector('button');
61
- expect(button.classList.contains('toggle-checked')).toBe(true);
72
+ it('has disabled attribute when disabled', () => {
73
+ const { container } = render(Toggle, { disabled: true });
74
+ const input = container.querySelector('input[type="checkbox"]');
75
+ expect(input.disabled).toBe(true);
62
76
  });
63
77
 
64
- it('does not have toggle-checked class when unchecked', () => {
65
- const { container } = render(Toggle, { props: { checked: false } });
66
- const button = container.querySelector('button');
67
- expect(button.classList.contains('toggle-checked')).toBe(false);
78
+ it('has disabled styling on label when disabled', () => {
79
+ const { container } = render(Toggle, { disabled: true });
80
+ const label = container.querySelector('label');
81
+ expect(label).toHaveClass('cursor-not-allowed');
82
+ expect(label).toHaveClass('opacity-50');
68
83
  });
69
84
 
70
- it('has toggle-disabled class when disabled', () => {
71
- const { container } = render(Toggle, { props: { disabled: true } });
72
- const button = container.querySelector('button');
73
- expect(button.classList.contains('toggle-disabled')).toBe(true);
85
+ it('has pointer cursor when not disabled', () => {
86
+ const { container } = render(Toggle, { disabled: false });
87
+ const label = container.querySelector('label');
88
+ expect(label).toHaveClass('cursor-pointer');
74
89
  });
75
90
 
76
- it('has toggle-thumb element', () => {
91
+ it('has switch element with rounded-full class', () => {
77
92
  const { container } = render(Toggle);
78
- const thumb = container.querySelector('.toggle-thumb');
79
- expect(thumb).toBeTruthy();
93
+ const switchEl = container.querySelector('[role="switch"]');
94
+ expect(switchEl).toHaveClass('rounded-full');
80
95
  });
81
96
 
82
- it('toggles on Enter key press', async () => {
83
- const onchange = vi.fn();
84
- const { container } = render(Toggle, { props: { onchange } });
85
- const button = container.querySelector('button');
86
-
87
- await fireEvent.keyDown(button, { key: 'Enter' });
88
-
89
- expect(onchange).toHaveBeenCalledWith({ checked: true });
97
+ it('has default md size track dimensions', () => {
98
+ const { container } = render(Toggle, { size: 'md' });
99
+ const switchEl = container.querySelector('[role="switch"]');
100
+ expect(switchEl).toHaveClass('w-11');
101
+ expect(switchEl).toHaveClass('h-6');
90
102
  });
91
103
 
92
- it('toggles on Space key press', async () => {
93
- const onchange = vi.fn();
94
- const { container } = render(Toggle, { props: { onchange } });
95
- const button = container.querySelector('button');
96
-
97
- await fireEvent.keyDown(button, { key: ' ' });
98
-
99
- expect(onchange).toHaveBeenCalledWith({ checked: true });
104
+ it('has sm size track dimensions', () => {
105
+ const { container } = render(Toggle, { size: 'sm' });
106
+ const switchEl = container.querySelector('[role="switch"]');
107
+ expect(switchEl).toHaveClass('w-9');
108
+ expect(switchEl).toHaveClass('h-5');
100
109
  });
101
110
 
102
- it('does not toggle on other key press', async () => {
103
- const onchange = vi.fn();
104
- const { container } = render(Toggle, { props: { onchange } });
105
- const button = container.querySelector('button');
106
-
107
- await fireEvent.keyDown(button, { key: 'Tab' });
108
-
109
- expect(onchange).not.toHaveBeenCalled();
111
+ it('has lg size track dimensions', () => {
112
+ const { container } = render(Toggle, { size: 'lg' });
113
+ const switchEl = container.querySelector('[role="switch"]');
114
+ expect(switchEl).toHaveClass('w-14');
115
+ expect(switchEl).toHaveClass('h-7');
110
116
  });
111
117
 
112
- it('does not toggle on keypress when disabled', async () => {
113
- const onchange = vi.fn();
114
- const { container } = render(Toggle, { props: { disabled: true, onchange } });
115
- const button = container.querySelector('button');
118
+ it('has dark mode classes', () => {
119
+ const { container } = render(Toggle);
120
+ const switchEl = container.querySelector('[role="switch"]');
121
+ expect(switchEl).toHaveClass('dark:bg-gray-700');
122
+ expect(switchEl).toHaveClass('dark:peer-focus:ring-blue-800');
123
+ });
116
124
 
117
- await fireEvent.keyDown(button, { key: 'Enter' });
125
+ it('accepts custom class', () => {
126
+ const { container } = render(Toggle, { class: 'custom-class' });
127
+ const label = container.querySelector('label');
128
+ expect(label).toHaveClass('custom-class');
129
+ });
118
130
 
119
- expect(onchange).not.toHaveBeenCalled();
131
+ it('has peer focus ring classes', () => {
132
+ const { container } = render(Toggle);
133
+ const switchEl = container.querySelector('[role="switch"]');
134
+ expect(switchEl).toHaveClass('peer-focus:ring-4');
135
+ expect(switchEl).toHaveClass('peer-focus:ring-blue-300');
120
136
  });
121
137
 
122
- it('has type="button" attribute', () => {
138
+ it('has blue background when checked', () => {
123
139
  const { container } = render(Toggle);
124
- const button = container.querySelector('button');
125
- expect(button.getAttribute('type')).toBe('button');
140
+ const switchEl = container.querySelector('[role="switch"]');
141
+ expect(switchEl).toHaveClass('peer-checked:bg-blue-600');
126
142
  });
127
143
  });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Typography.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Typography.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Typography/Typography.spec.js"],"names":[],"mappings":""}