@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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ShowTimeCard.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShowTimeCard.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/calendar/ShowTimeCard/ShowTimeCard.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,241 @@
1
+ import { describe, it, expect, vi, afterEach } from 'vitest';
2
+ import { render, screen, cleanup, fireEvent } from '@testing-library/svelte';
3
+ import ShowTimeCard from './ShowTimeCard.svelte';
4
+
5
+ describe('ShowTimeCard Component', () => {
6
+ afterEach(() => {
7
+ cleanup();
8
+ });
9
+
10
+ describe('rendering', () => {
11
+ it('renders a button element', () => {
12
+ render(ShowTimeCard);
13
+ const button = screen.getByRole('button');
14
+ expect(button).toBeInTheDocument();
15
+ });
16
+
17
+ it('displays the day', () => {
18
+ render(ShowTimeCard, { props: { day: 'Monday' } });
19
+ expect(screen.getByText('Monday')).toBeInTheDocument();
20
+ });
21
+
22
+ it('displays formatted date', () => {
23
+ render(ShowTimeCard, { props: { date: '2024-03-15' } });
24
+ // Date may vary by timezone, just check the format
25
+ const button = screen.getByRole('button');
26
+ expect(button.textContent).toMatch(/Mar 1[45]/);
27
+ });
28
+
29
+ it('displays formatted time', () => {
30
+ render(ShowTimeCard, { props: { time: '19:30:00' } });
31
+ expect(screen.getByText('7:30 PM')).toBeInTheDocument();
32
+ });
33
+
34
+ it('handles empty values gracefully', () => {
35
+ const { container } = render(ShowTimeCard);
36
+ expect(container.querySelector('[role="button"]')).toBeInTheDocument();
37
+ });
38
+ });
39
+
40
+ describe('date formatting', () => {
41
+ it('formats valid date string', () => {
42
+ render(ShowTimeCard, { props: { date: '2024-12-25' } });
43
+ // Date may show as Dec 24 or Dec 25 depending on timezone
44
+ const button = screen.getByRole('button');
45
+ expect(button.textContent).toMatch(/Dec 2[45]/);
46
+ });
47
+
48
+ it('returns original string for invalid date', () => {
49
+ render(ShowTimeCard, { props: { date: 'invalid-date' } });
50
+ expect(screen.getByText('invalid-date')).toBeInTheDocument();
51
+ });
52
+
53
+ it('handles empty date', () => {
54
+ render(ShowTimeCard, { props: { date: '' } });
55
+ const button = screen.getByRole('button');
56
+ expect(button).toBeInTheDocument();
57
+ });
58
+ });
59
+
60
+ describe('time formatting', () => {
61
+ it('formats morning time', () => {
62
+ render(ShowTimeCard, { props: { time: '09:00:00' } });
63
+ expect(screen.getByText('9:00 AM')).toBeInTheDocument();
64
+ });
65
+
66
+ it('formats afternoon time', () => {
67
+ render(ShowTimeCard, { props: { time: '14:30:00' } });
68
+ expect(screen.getByText('2:30 PM')).toBeInTheDocument();
69
+ });
70
+
71
+ it('formats midnight', () => {
72
+ render(ShowTimeCard, { props: { time: '00:00:00' } });
73
+ expect(screen.getByText('12:00 AM')).toBeInTheDocument();
74
+ });
75
+
76
+ it('formats noon', () => {
77
+ render(ShowTimeCard, { props: { time: '12:00:00' } });
78
+ expect(screen.getByText('12:00 PM')).toBeInTheDocument();
79
+ });
80
+
81
+ it('returns original string for invalid time', () => {
82
+ render(ShowTimeCard, { props: { time: 'invalid' } });
83
+ expect(screen.getByText('invalid')).toBeInTheDocument();
84
+ });
85
+
86
+ it('handles empty time', () => {
87
+ render(ShowTimeCard, { props: { time: '' } });
88
+ const button = screen.getByRole('button');
89
+ expect(button).toBeInTheDocument();
90
+ });
91
+ });
92
+
93
+ describe('selection state', () => {
94
+ it('is not selected by default', () => {
95
+ render(ShowTimeCard);
96
+ const button = screen.getByRole('button');
97
+ expect(button).toHaveAttribute('aria-pressed', 'false');
98
+ });
99
+
100
+ it('shows selected state when isSelected is true', () => {
101
+ render(ShowTimeCard, { props: { isSelected: true } });
102
+ const button = screen.getByRole('button');
103
+ expect(button).toHaveAttribute('aria-pressed', 'true');
104
+ });
105
+
106
+ it('applies selected border class', () => {
107
+ const { container } = render(ShowTimeCard, { props: { isSelected: true } });
108
+ const card = container.querySelector('[role="button"]');
109
+ expect(card.className).toContain('border-blue-700');
110
+ });
111
+
112
+ it('applies unselected border class when not selected', () => {
113
+ const { container } = render(ShowTimeCard, { props: { isSelected: false } });
114
+ const card = container.querySelector('[role="button"]');
115
+ expect(card.className).toContain('border-gray-200');
116
+ });
117
+ });
118
+
119
+ describe('click handling', () => {
120
+ it('calls onselect when clicked', async () => {
121
+ const onselect = vi.fn();
122
+ render(ShowTimeCard, { props: { onselect, date: '2024-03-15' } });
123
+
124
+ const button = screen.getByRole('button');
125
+ await fireEvent.click(button);
126
+
127
+ expect(onselect).toHaveBeenCalledWith({ date: '2024-03-15' });
128
+ });
129
+
130
+ it('does not throw when onselect is not provided', async () => {
131
+ render(ShowTimeCard);
132
+ const button = screen.getByRole('button');
133
+
134
+ await expect(fireEvent.click(button)).resolves.not.toThrow();
135
+ });
136
+ });
137
+
138
+ describe('keyboard handling', () => {
139
+ it('calls onselect when Enter is pressed', async () => {
140
+ const onselect = vi.fn();
141
+ render(ShowTimeCard, { props: { onselect, date: '2024-03-15' } });
142
+
143
+ const button = screen.getByRole('button');
144
+ await fireEvent.keyDown(button, { key: 'Enter' });
145
+
146
+ expect(onselect).toHaveBeenCalledWith({ date: '2024-03-15' });
147
+ });
148
+
149
+ it('calls onselect when Space is pressed', async () => {
150
+ const onselect = vi.fn();
151
+ render(ShowTimeCard, { props: { onselect, date: '2024-03-15' } });
152
+
153
+ const button = screen.getByRole('button');
154
+ await fireEvent.keyDown(button, { key: ' ' });
155
+
156
+ expect(onselect).toHaveBeenCalledWith({ date: '2024-03-15' });
157
+ });
158
+
159
+ it('does not call onselect for other keys', async () => {
160
+ const onselect = vi.fn();
161
+ render(ShowTimeCard, { props: { onselect, date: '2024-03-15' } });
162
+
163
+ const button = screen.getByRole('button');
164
+ await fireEvent.keyDown(button, { key: 'Tab' });
165
+
166
+ expect(onselect).not.toHaveBeenCalled();
167
+ });
168
+ });
169
+
170
+ describe('accessibility', () => {
171
+ it('has aria-label with day, date, and time', () => {
172
+ render(ShowTimeCard, {
173
+ props: { day: 'Monday', date: '2024-03-15', time: '19:30:00' }
174
+ });
175
+
176
+ const button = screen.getByRole('button');
177
+ const ariaLabel = button.getAttribute('aria-label');
178
+ expect(ariaLabel).toContain('Monday');
179
+ expect(ariaLabel).toContain('Mar');
180
+ expect(ariaLabel).toContain('7:30 PM');
181
+ });
182
+
183
+ it('includes selected in aria-label when selected', () => {
184
+ render(ShowTimeCard, {
185
+ props: { day: 'Monday', date: '2024-03-15', time: '19:30:00', isSelected: true }
186
+ });
187
+
188
+ const button = screen.getByRole('button');
189
+ const ariaLabel = button.getAttribute('aria-label');
190
+ expect(ariaLabel).toContain('selected');
191
+ });
192
+
193
+ it('is focusable', () => {
194
+ render(ShowTimeCard);
195
+ const button = screen.getByRole('button');
196
+ expect(button).toHaveAttribute('tabindex', '0');
197
+ });
198
+ });
199
+
200
+ describe('styling', () => {
201
+ it('has correct base classes', () => {
202
+ const { container } = render(ShowTimeCard);
203
+ const card = container.querySelector('[role="button"]');
204
+ expect(card).toHaveClass('w-full', 'h-28', 'rounded-lg');
205
+ });
206
+
207
+ it('has flex layout', () => {
208
+ const { container } = render(ShowTimeCard);
209
+ const card = container.querySelector('[role="button"]');
210
+ expect(card).toHaveClass('flex', 'flex-col', 'justify-center', 'items-center');
211
+ });
212
+
213
+ it('has cursor pointer', () => {
214
+ const { container } = render(ShowTimeCard);
215
+ const card = container.querySelector('[role="button"]');
216
+ expect(card).toHaveClass('cursor-pointer');
217
+ });
218
+
219
+ it('has transition', () => {
220
+ const { container } = render(ShowTimeCard);
221
+ const card = container.querySelector('[role="button"]');
222
+ expect(card).toHaveClass('transition-colors');
223
+ });
224
+
225
+ it('includes dark mode background', () => {
226
+ const { container } = render(ShowTimeCard);
227
+ const card = container.querySelector('[role="button"]');
228
+ expect(card.className).toContain('dark:bg-gray-800');
229
+ });
230
+
231
+ it('applies selected text color when selected', () => {
232
+ const { container } = render(ShowTimeCard, {
233
+ props: { date: '2024-03-15', isSelected: true }
234
+ });
235
+ // Find the date span (middle one) which gets the selected color
236
+ const spans = container.querySelectorAll('span');
237
+ const dateSpan = spans[1]; // Second span is the date
238
+ expect(dateSpan.className).toContain('text-blue-700');
239
+ });
240
+ });
241
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Section.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Layout/Section.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,149 @@
1
+ import { render, screen } from '@testing-library/svelte';
2
+ import { expect, describe, test } from 'vitest';
3
+ import Section from './Section.svelte';
4
+
5
+ describe('Section Component', () => {
6
+ test('renders a section element', () => {
7
+ const { container } = render(Section);
8
+ expect(container.querySelector('section')).toBeInTheDocument();
9
+ });
10
+
11
+ test('applies custom className', () => {
12
+ const { container } = render(Section, { props: { class: 'custom-section' } });
13
+ const section = container.querySelector('section');
14
+ expect(section).toHaveClass('custom-section');
15
+ });
16
+ });
17
+
18
+ describe('Section Title', () => {
19
+ test('no title renders no h2', () => {
20
+ const { container } = render(Section);
21
+ expect(container.querySelector('h2')).not.toBeInTheDocument();
22
+ });
23
+
24
+ test('title prop renders h2', () => {
25
+ render(Section, { props: { title: 'Recent Orders' } });
26
+ expect(screen.getByText('Recent Orders')).toBeInTheDocument();
27
+ });
28
+
29
+ test('title is in h2 element', () => {
30
+ const { container } = render(Section, { props: { title: 'Test Title' } });
31
+ const h2 = container.querySelector('h2');
32
+ expect(h2).toBeInTheDocument();
33
+ expect(h2).toHaveTextContent('Test Title');
34
+ });
35
+
36
+ test('title adds aria-label to section', () => {
37
+ const { container } = render(Section, { props: { title: 'Orders Section' } });
38
+ const section = container.querySelector('section');
39
+ expect(section).toHaveAttribute('aria-label', 'Orders Section');
40
+ });
41
+
42
+ test('no aria-label when no title', () => {
43
+ const { container } = render(Section);
44
+ const section = container.querySelector('section');
45
+ expect(section).not.toHaveAttribute('aria-label');
46
+ });
47
+ });
48
+
49
+ describe('Section Title Size', () => {
50
+ test('default titleSize=md applies h3 typography', () => {
51
+ const { container } = render(Section, { props: { title: 'Test' } });
52
+ const h2 = container.querySelector('h2');
53
+ // Check that h2 exists and has some styling
54
+ expect(h2).toBeInTheDocument();
55
+ });
56
+
57
+ test('titleSize=sm applies smaller typography', () => {
58
+ const { container } = render(Section, { props: { title: 'Test', titleSize: 'sm' } });
59
+ const h2 = container.querySelector('h2');
60
+ expect(h2).toBeInTheDocument();
61
+ });
62
+
63
+ test('titleSize=lg applies larger typography', () => {
64
+ const { container } = render(Section, { props: { title: 'Test', titleSize: 'lg' } });
65
+ const h2 = container.querySelector('h2');
66
+ expect(h2).toBeInTheDocument();
67
+ });
68
+ });
69
+
70
+ describe('Section Title Class', () => {
71
+ test('titleClass applies to h2', () => {
72
+ const { container } = render(Section, { props: { title: 'Test', titleClass: 'custom-title' } });
73
+ const h2 = container.querySelector('h2');
74
+ expect(h2).toHaveClass('custom-title');
75
+ });
76
+ });
77
+
78
+ describe('Section Gap', () => {
79
+ test('gap applies when title present', () => {
80
+ const { container } = render(Section, { props: { title: 'Test', gap: '4' } });
81
+ const section = container.querySelector('section');
82
+ expect(section).toHaveClass('space-y-4');
83
+ });
84
+
85
+ test('gap=2 applies space-y-2', () => {
86
+ const { container } = render(Section, { props: { title: 'Test', gap: '2' } });
87
+ const section = container.querySelector('section');
88
+ expect(section).toHaveClass('space-y-2');
89
+ });
90
+
91
+ test('gap=3 applies space-y-3', () => {
92
+ const { container } = render(Section, { props: { title: 'Test', gap: '3' } });
93
+ const section = container.querySelector('section');
94
+ expect(section).toHaveClass('space-y-3');
95
+ });
96
+
97
+ test('gap=6 applies space-y-6', () => {
98
+ const { container } = render(Section, { props: { title: 'Test', gap: '6' } });
99
+ const section = container.querySelector('section');
100
+ expect(section).toHaveClass('space-y-6');
101
+ });
102
+
103
+ test('no gap class when no title', () => {
104
+ const { container } = render(Section);
105
+ const section = container.querySelector('section');
106
+ expect(section).not.toHaveClass('space-y-4');
107
+ expect(section).not.toHaveClass('space-y-2');
108
+ });
109
+ });
110
+
111
+ describe('Section Combinations', () => {
112
+ test('title and titleSize', () => {
113
+ render(Section, { props: { title: 'Products', titleSize: 'lg' } });
114
+ expect(screen.getByText('Products')).toBeInTheDocument();
115
+ });
116
+
117
+ test('title with titleClass and custom class', () => {
118
+ const { container } = render(Section, {
119
+ props: {
120
+ title: 'Orders',
121
+ titleClass: 'text-blue-500',
122
+ class: 'my-section'
123
+ }
124
+ });
125
+ const section = container.querySelector('section');
126
+ const h2 = container.querySelector('h2');
127
+ expect(section).toHaveClass('my-section');
128
+ expect(h2).toHaveClass('text-blue-500');
129
+ });
130
+
131
+ test('all props together', () => {
132
+ const { container } = render(Section, {
133
+ props: {
134
+ title: 'Statistics',
135
+ titleSize: 'lg',
136
+ gap: '6',
137
+ class: 'bg-white',
138
+ titleClass: 'font-bold'
139
+ }
140
+ });
141
+ const section = container.querySelector('section');
142
+ expect(section).toHaveClass('bg-white');
143
+ expect(section).toHaveClass('space-y-6');
144
+ expect(section).toHaveAttribute('aria-label', 'Statistics');
145
+ const h2 = container.querySelector('h2');
146
+ expect(h2).toHaveClass('font-bold');
147
+ expect(h2).toHaveTextContent('Statistics');
148
+ });
149
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Sidebar.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Layout/Sidebar.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,186 @@
1
+ import { render } from '@testing-library/svelte';
2
+ import { expect, describe, test } from 'vitest';
3
+ import Sidebar from './Sidebar.svelte';
4
+
5
+ describe('Sidebar Component', () => {
6
+ test('renders a grid container', () => {
7
+ const { container } = render(Sidebar);
8
+ const grid = container.querySelector('div');
9
+ expect(grid).toHaveClass('grid');
10
+ });
11
+
12
+ test('has lg:grid-cols-12', () => {
13
+ const { container } = render(Sidebar);
14
+ const grid = container.querySelector('div');
15
+ expect(grid).toHaveClass('lg:grid-cols-12');
16
+ });
17
+
18
+ test('applies custom className', () => {
19
+ const { container } = render(Sidebar, { props: { class: 'custom-sidebar' } });
20
+ const grid = container.querySelector('div');
21
+ expect(grid).toHaveClass('custom-sidebar');
22
+ });
23
+
24
+ test('renders main content area', () => {
25
+ const { container } = render(Sidebar);
26
+ const divs = container.querySelectorAll('div');
27
+ // Main container + main content div + aside
28
+ expect(divs.length).toBeGreaterThanOrEqual(2);
29
+ });
30
+
31
+ test('renders aside element', () => {
32
+ const { container } = render(Sidebar);
33
+ expect(container.querySelector('aside')).toBeInTheDocument();
34
+ });
35
+ });
36
+
37
+ describe('Sidebar Stack On Mobile', () => {
38
+ test('default stackOnMobile=true applies grid-cols-1', () => {
39
+ const { container } = render(Sidebar);
40
+ const grid = container.querySelector('div');
41
+ expect(grid).toHaveClass('grid-cols-1');
42
+ });
43
+
44
+ test('stackOnMobile=false does not apply grid-cols-1', () => {
45
+ const { container } = render(Sidebar, { props: { stackOnMobile: false } });
46
+ const grid = container.querySelector('div');
47
+ expect(grid).not.toHaveClass('grid-cols-1');
48
+ });
49
+ });
50
+
51
+ describe('Sidebar Width', () => {
52
+ test('default sidebarWidth=medium applies lg:col-span-4 to sidebar', () => {
53
+ const { container } = render(Sidebar);
54
+ const aside = container.querySelector('aside');
55
+ expect(aside).toHaveClass('lg:col-span-4');
56
+ });
57
+
58
+ test('default sidebarWidth=medium applies lg:col-span-8 to main', () => {
59
+ const { container } = render(Sidebar);
60
+ const grid = container.querySelector('.grid');
61
+ const mainDiv = grid.querySelector('div.col-span-1');
62
+ expect(mainDiv).toHaveClass('lg:col-span-8');
63
+ });
64
+
65
+ test('sidebarWidth=narrow applies lg:col-span-3 to sidebar', () => {
66
+ const { container } = render(Sidebar, { props: { sidebarWidth: 'narrow' } });
67
+ const aside = container.querySelector('aside');
68
+ expect(aside).toHaveClass('lg:col-span-3');
69
+ });
70
+
71
+ test('sidebarWidth=narrow applies lg:col-span-9 to main', () => {
72
+ const { container } = render(Sidebar, { props: { sidebarWidth: 'narrow' } });
73
+ const grid = container.querySelector('.grid');
74
+ const mainDiv = grid.querySelector('div.col-span-1');
75
+ expect(mainDiv).toHaveClass('lg:col-span-9');
76
+ });
77
+
78
+ test('sidebarWidth=wide applies lg:col-span-5 to sidebar', () => {
79
+ const { container } = render(Sidebar, { props: { sidebarWidth: 'wide' } });
80
+ const aside = container.querySelector('aside');
81
+ expect(aside).toHaveClass('lg:col-span-5');
82
+ });
83
+
84
+ test('sidebarWidth=wide applies lg:col-span-7 to main', () => {
85
+ const { container } = render(Sidebar, { props: { sidebarWidth: 'wide' } });
86
+ const grid = container.querySelector('.grid');
87
+ const mainDiv = grid.querySelector('div.col-span-1');
88
+ expect(mainDiv).toHaveClass('lg:col-span-7');
89
+ });
90
+ });
91
+
92
+ describe('Sidebar Position', () => {
93
+ test('default sidebarPosition=right applies lg:order-2 to sidebar', () => {
94
+ const { container } = render(Sidebar);
95
+ const aside = container.querySelector('aside');
96
+ expect(aside).toHaveClass('lg:order-2');
97
+ });
98
+
99
+ test('default sidebarPosition=right applies lg:order-1 to main', () => {
100
+ const { container } = render(Sidebar);
101
+ const grid = container.querySelector('.grid');
102
+ const mainDiv = grid.querySelector('div.col-span-1');
103
+ expect(mainDiv).toHaveClass('lg:order-1');
104
+ });
105
+
106
+ test('sidebarPosition=left applies lg:order-1 to sidebar', () => {
107
+ const { container } = render(Sidebar, { props: { sidebarPosition: 'left' } });
108
+ const aside = container.querySelector('aside');
109
+ expect(aside).toHaveClass('lg:order-1');
110
+ });
111
+
112
+ test('sidebarPosition=left applies lg:order-2 to main', () => {
113
+ const { container } = render(Sidebar, { props: { sidebarPosition: 'left' } });
114
+ const grid = container.querySelector('.grid');
115
+ const mainDiv = grid.querySelector('div.col-span-1');
116
+ expect(mainDiv).toHaveClass('lg:order-2');
117
+ });
118
+ });
119
+
120
+ describe('Sidebar Gap', () => {
121
+ test('default gap=6 applies gap-6', () => {
122
+ const { container } = render(Sidebar);
123
+ const grid = container.querySelector('div');
124
+ expect(grid).toHaveClass('gap-6');
125
+ });
126
+
127
+ test('gap=4 applies gap-4', () => {
128
+ const { container } = render(Sidebar, { props: { gap: '4' } });
129
+ const grid = container.querySelector('div');
130
+ expect(grid).toHaveClass('gap-4');
131
+ });
132
+
133
+ test('gap=8 applies gap-8', () => {
134
+ const { container } = render(Sidebar, { props: { gap: '8' } });
135
+ const grid = container.querySelector('div');
136
+ expect(grid).toHaveClass('gap-8');
137
+ });
138
+ });
139
+
140
+ describe('Sidebar Combinations', () => {
141
+ test('narrow left sidebar', () => {
142
+ const { container } = render(Sidebar, {
143
+ props: { sidebarWidth: 'narrow', sidebarPosition: 'left' }
144
+ });
145
+ const aside = container.querySelector('aside');
146
+ expect(aside).toHaveClass('lg:col-span-3');
147
+ expect(aside).toHaveClass('lg:order-1');
148
+ });
149
+
150
+ test('wide right sidebar with gap', () => {
151
+ const { container } = render(Sidebar, {
152
+ props: { sidebarWidth: 'wide', gap: '8' }
153
+ });
154
+ const grid = container.querySelector('div');
155
+ const aside = container.querySelector('aside');
156
+ expect(grid).toHaveClass('gap-8');
157
+ expect(aside).toHaveClass('lg:col-span-5');
158
+ });
159
+
160
+ test('all props together', () => {
161
+ const { container } = render(Sidebar, {
162
+ props: {
163
+ sidebarWidth: 'wide',
164
+ sidebarPosition: 'left',
165
+ gap: '8',
166
+ stackOnMobile: false,
167
+ class: 'custom-layout'
168
+ }
169
+ });
170
+ const grid = container.querySelector('.grid');
171
+ const aside = container.querySelector('aside');
172
+ const mainDiv = grid.querySelector('div.col-span-1');
173
+
174
+ expect(grid).toHaveClass('grid');
175
+ expect(grid).toHaveClass('lg:grid-cols-12');
176
+ expect(grid).toHaveClass('gap-8');
177
+ expect(grid).toHaveClass('custom-layout');
178
+ expect(grid).not.toHaveClass('grid-cols-1');
179
+
180
+ expect(aside).toHaveClass('lg:col-span-5');
181
+ expect(aside).toHaveClass('lg:order-1');
182
+
183
+ expect(mainDiv).toHaveClass('lg:col-span-7');
184
+ expect(mainDiv).toHaveClass('lg:order-2');
185
+ });
186
+ });
@@ -1,4 +1,4 @@
1
- import { render, screen } from '@testing-library/svelte';
1
+ import { render } from '@testing-library/svelte';
2
2
  import { expect, describe, test } from 'vitest';
3
3
  import Stack from './Stack.svelte';
4
4
  describe('Stack Component', () => {
@@ -25,9 +25,9 @@ describe('Stack Component', () => {
25
25
  });
26
26
  });
27
27
  describe('Gap - Semantic Names', () => {
28
- test('tight gap (4px)', () => {
28
+ test('tight gap (16px)', () => {
29
29
  const { container } = render(Stack, { gap: 'tight' });
30
- expect(container.querySelector('div')).toHaveClass('gap-1');
30
+ expect(container.querySelector('div')).toHaveClass('gap-4');
31
31
  });
32
32
  test('compact gap (6px)', () => {
33
33
  const { container } = render(Stack, { gap: 'compact' });
@@ -6,8 +6,8 @@ describe('formOptions', () => {
6
6
  expect(GENDER_OPTIONS).toBeDefined();
7
7
  expect(Array.isArray(GENDER_OPTIONS)).toBe(true);
8
8
  });
9
- it('has three options', () => {
10
- expect(GENDER_OPTIONS.length).toBe(3);
9
+ it('has five options (including empty placeholder and rather not say)', () => {
10
+ expect(GENDER_OPTIONS.length).toBe(5);
11
11
  });
12
12
  it('contains Male option with value 1', () => {
13
13
  const male = GENDER_OPTIONS.find(opt => opt.name === 'Male');
@@ -19,17 +19,21 @@ describe('formOptions', () => {
19
19
  expect(female).toBeDefined();
20
20
  expect(female.value).toBe(2);
21
21
  });
22
- it('contains Non-Binary option with value 3', () => {
23
- const nonBinary = GENDER_OPTIONS.find(opt => opt.name === 'Non-Binary');
22
+ it('contains Non-binary option with value 3', () => {
23
+ const nonBinary = GENDER_OPTIONS.find(opt => opt.name === 'Non-binary');
24
24
  expect(nonBinary).toBeDefined();
25
25
  expect(nonBinary.value).toBe(3);
26
26
  });
27
+ it('contains Rather not say option with value 4', () => {
28
+ const ratherNotSay = GENDER_OPTIONS.find(opt => opt.name === 'Rather not say');
29
+ expect(ratherNotSay).toBeDefined();
30
+ expect(ratherNotSay.value).toBe(4);
31
+ });
27
32
  it('each option has name and value properties', () => {
28
33
  GENDER_OPTIONS.forEach(option => {
29
34
  expect(option).toHaveProperty('name');
30
35
  expect(option).toHaveProperty('value');
31
36
  expect(typeof option.name).toBe('string');
32
- expect(typeof option.value).toBe('number');
33
37
  });
34
38
  });
35
39
  });
@@ -1,6 +1,6 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
2
  import { formatCleanTimeRange, formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatHour, formatMonth, formatNotificationTime, formatRelativeTime, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, isToday, } from '../format';
3
- import { DateTimeError, DateTimeErrorCode } from '../types';
3
+ import { DateTimeError } from '../types';
4
4
  describe('format utilities', () => {
5
5
  describe('formatEventTime', () => {
6
6
  it('formats time in specified timezone', () => {
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from 'vitest';
2
2
  import { combineDateAndTime, formatDateTimeForAPI, isNextDayTime, minutesToTimeString, parseDateTimeFromAPI, parseEndOfDay, parseLocalToUTC, parseStartOfDay, parseTimeToMinutes, parseUTCToLocal, stripNextDayPrefix, } from '../parse';
3
- import { DateTimeError, DateTimeErrorCode } from '../types';
3
+ import { DateTimeError } from '../types';
4
4
  describe('parse utilities', () => {
5
5
  describe('parseLocalToUTC', () => {
6
6
  it('converts local datetime to UTC', () => {