@getmicdrop/svelte-components 5.5.4 → 5.6.0

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 (512) 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/AboutShow/AboutShow.svelte +172 -172
  5. package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts +2 -0
  6. package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts.map +1 -0
  7. package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +1191 -0
  8. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
  9. package/dist/calendar/FAQs/FAQs.spec.d.ts +2 -0
  10. package/dist/calendar/FAQs/FAQs.spec.d.ts.map +1 -0
  11. package/dist/calendar/FAQs/FAQs.spec.js +238 -0
  12. package/dist/calendar/FAQs/FAQs.svelte +75 -75
  13. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts +2 -0
  14. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts.map +1 -0
  15. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.js +420 -0
  16. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
  17. package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts +2 -0
  18. package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts.map +1 -0
  19. package/dist/calendar/OrderSummary/OrderSummary.spec.js +808 -0
  20. package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
  21. package/dist/calendar/PublicCard/PublicCard.spec.d.ts +2 -0
  22. package/dist/calendar/PublicCard/PublicCard.spec.d.ts.map +1 -0
  23. package/dist/calendar/PublicCard/PublicCard.spec.js +301 -0
  24. package/dist/calendar/PublicCard/PublicCard.svelte +134 -134
  25. package/dist/calendar/ShowCard/ShowCard.spec.d.ts +2 -0
  26. package/dist/calendar/ShowCard/ShowCard.spec.d.ts.map +1 -0
  27. package/dist/calendar/ShowCard/ShowCard.spec.js +714 -0
  28. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  29. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts +2 -0
  30. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts.map +1 -0
  31. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +241 -0
  32. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  33. package/dist/components/Layout/AppShell.svelte +104 -0
  34. package/dist/components/Layout/AppShell.svelte.d.ts +26 -0
  35. package/dist/components/Layout/AppShell.svelte.d.ts.map +1 -0
  36. package/dist/components/Layout/ContentSection.svelte +80 -0
  37. package/dist/components/Layout/ContentSection.svelte.d.ts +23 -0
  38. package/dist/components/Layout/ContentSection.svelte.d.ts.map +1 -0
  39. package/dist/components/Layout/Grid.svelte +4 -4
  40. package/dist/components/Layout/Heading.svelte +81 -0
  41. package/dist/components/Layout/Heading.svelte.d.ts +24 -0
  42. package/dist/components/Layout/Heading.svelte.d.ts.map +1 -0
  43. package/dist/components/Layout/PageContainer.svelte +69 -0
  44. package/dist/components/Layout/PageContainer.svelte.d.ts +23 -0
  45. package/dist/components/Layout/PageContainer.svelte.d.ts.map +1 -0
  46. package/dist/components/Layout/Responsive.svelte +75 -0
  47. package/dist/components/Layout/Responsive.svelte.d.ts +19 -0
  48. package/dist/components/Layout/Responsive.svelte.d.ts.map +1 -0
  49. package/dist/components/Layout/Section.spec.d.ts +2 -0
  50. package/dist/components/Layout/Section.spec.d.ts.map +1 -0
  51. package/dist/components/Layout/Section.spec.js +149 -0
  52. package/dist/components/Layout/Section.svelte +80 -80
  53. package/dist/components/Layout/ShowOnDesktop.svelte +37 -0
  54. package/dist/components/Layout/ShowOnDesktop.svelte.d.ts +16 -0
  55. package/dist/components/Layout/ShowOnDesktop.svelte.d.ts.map +1 -0
  56. package/dist/components/Layout/ShowOnMobile.svelte +37 -0
  57. package/dist/components/Layout/ShowOnMobile.svelte.d.ts +16 -0
  58. package/dist/components/Layout/ShowOnMobile.svelte.d.ts.map +1 -0
  59. package/dist/components/Layout/Sidebar.spec.d.ts +2 -0
  60. package/dist/components/Layout/Sidebar.spec.d.ts.map +1 -0
  61. package/dist/components/Layout/Sidebar.spec.js +186 -0
  62. package/dist/components/Layout/Sidebar.svelte +108 -108
  63. package/dist/components/Layout/Stack.spec.js +2 -2
  64. package/dist/components/Layout/Stack.svelte +6 -6
  65. package/dist/components/Layout/Text.svelte +87 -0
  66. package/dist/components/Layout/Text.svelte.d.ts +28 -0
  67. package/dist/components/Layout/Text.svelte.d.ts.map +1 -0
  68. package/dist/components/Layout/TwoColumn.svelte +108 -0
  69. package/dist/components/Layout/TwoColumn.svelte.d.ts +28 -0
  70. package/dist/components/Layout/TwoColumn.svelte.d.ts.map +1 -0
  71. package/dist/components/Layout/__tests__/Heading.test.d.ts +2 -0
  72. package/dist/components/Layout/__tests__/Heading.test.d.ts.map +1 -0
  73. package/dist/components/Layout/__tests__/Heading.test.js +123 -0
  74. package/dist/components/Layout/__tests__/ShowOnDesktop.test.d.ts +2 -0
  75. package/dist/components/Layout/__tests__/ShowOnDesktop.test.d.ts.map +1 -0
  76. package/dist/components/Layout/__tests__/ShowOnDesktop.test.js +84 -0
  77. package/dist/components/Layout/__tests__/ShowOnMobile.test.d.ts +2 -0
  78. package/dist/components/Layout/__tests__/ShowOnMobile.test.d.ts.map +1 -0
  79. package/dist/components/Layout/__tests__/ShowOnMobile.test.js +80 -0
  80. package/dist/components/Layout/__tests__/Text.test.d.ts +2 -0
  81. package/dist/components/Layout/__tests__/Text.test.d.ts.map +1 -0
  82. package/dist/components/Layout/__tests__/Text.test.js +146 -0
  83. package/dist/components/Layout/__tests__/TwoColumn.test.d.ts +2 -0
  84. package/dist/components/Layout/__tests__/TwoColumn.test.d.ts.map +1 -0
  85. package/dist/components/Layout/__tests__/TwoColumn.test.js +129 -0
  86. package/dist/constants/formOptions.spec.js +9 -5
  87. package/dist/constants/validation.js +91 -91
  88. package/dist/constants/validation.spec.js +64 -64
  89. package/dist/datetime/__tests__/timezone.test.js +123 -1
  90. package/dist/forms/createFieldTracker.spec.d.ts +2 -0
  91. package/dist/forms/createFieldTracker.spec.d.ts.map +1 -0
  92. package/dist/forms/createFieldTracker.spec.js +343 -0
  93. package/dist/forms/createFormStore.spec.d.ts +2 -0
  94. package/dist/forms/createFormStore.spec.d.ts.map +1 -0
  95. package/dist/forms/createFormStore.spec.js +689 -0
  96. package/dist/index.d.ts +4 -112
  97. package/dist/index.js +40 -226
  98. package/dist/patterns/data/DataGrid.spec.d.ts +2 -0
  99. package/dist/patterns/data/DataGrid.spec.d.ts.map +1 -0
  100. package/dist/patterns/data/DataGrid.spec.js +159 -0
  101. package/dist/patterns/data/DataGrid.svelte +45 -45
  102. package/dist/patterns/data/DataList.spec.d.ts +2 -0
  103. package/dist/patterns/data/DataList.spec.d.ts.map +1 -0
  104. package/dist/patterns/data/DataList.spec.js +158 -0
  105. package/dist/patterns/data/DataList.svelte +24 -24
  106. package/dist/patterns/data/DataTable.spec.d.ts +2 -0
  107. package/dist/patterns/data/DataTable.spec.d.ts.map +1 -0
  108. package/dist/patterns/data/DataTable.spec.js +196 -0
  109. package/dist/patterns/data/DataTable.svelte +36 -36
  110. package/dist/patterns/forms/FormActions.spec.js +95 -88
  111. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  112. package/dist/patterns/forms/FormActions.svelte +46 -46
  113. package/dist/patterns/forms/FormGrid.spec.d.ts +2 -0
  114. package/dist/patterns/forms/FormGrid.spec.d.ts.map +1 -0
  115. package/dist/patterns/forms/FormGrid.spec.js +125 -0
  116. package/dist/patterns/forms/FormGrid.svelte +33 -33
  117. package/dist/patterns/forms/FormSection.spec.d.ts +2 -0
  118. package/dist/patterns/forms/FormSection.spec.d.ts.map +1 -0
  119. package/dist/patterns/forms/FormSection.spec.js +153 -0
  120. package/dist/patterns/forms/FormSection.svelte +32 -32
  121. package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
  122. package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
  123. package/dist/patterns/layout/Sidebar.spec.d.ts +2 -0
  124. package/dist/patterns/layout/Sidebar.spec.d.ts.map +1 -0
  125. package/dist/patterns/layout/Sidebar.spec.js +159 -0
  126. package/dist/patterns/layout/Sidebar.svelte +39 -39
  127. package/dist/patterns/layout/index.d.ts +9 -0
  128. package/dist/patterns/layout/index.js +22 -0
  129. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  130. package/dist/patterns/navigation/BottomNav.svelte +64 -64
  131. package/dist/patterns/navigation/Header.spec.js +33 -24
  132. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  133. package/dist/patterns/navigation/Header.svelte +193 -193
  134. package/dist/patterns/page/PageHeader.spec.d.ts +2 -0
  135. package/dist/patterns/page/PageHeader.spec.d.ts.map +1 -0
  136. package/dist/patterns/page/PageHeader.spec.js +167 -0
  137. package/dist/patterns/page/PageHeader.svelte +18 -18
  138. package/dist/patterns/page/PageLayout.spec.d.ts +2 -0
  139. package/dist/patterns/page/PageLayout.spec.d.ts.map +1 -0
  140. package/dist/patterns/page/PageLayout.spec.js +145 -0
  141. package/dist/patterns/page/PageLayout.svelte +40 -40
  142. package/dist/patterns/page/PageLoader.spec.js +57 -54
  143. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  144. package/dist/patterns/page/PageLoader.svelte +24 -24
  145. package/dist/patterns/page/SectionHeader.spec.d.ts +2 -0
  146. package/dist/patterns/page/SectionHeader.spec.d.ts.map +1 -0
  147. package/dist/patterns/page/SectionHeader.spec.js +197 -0
  148. package/dist/patterns/page/SectionHeader.svelte +29 -29
  149. package/dist/presets/badges.js +112 -112
  150. package/dist/presets/badges.spec.d.ts +2 -0
  151. package/dist/presets/badges.spec.d.ts.map +1 -0
  152. package/dist/presets/badges.spec.js +172 -0
  153. package/dist/presets/buttons.js +76 -76
  154. package/dist/presets/buttons.spec.d.ts +2 -0
  155. package/dist/presets/buttons.spec.d.ts.map +1 -0
  156. package/dist/presets/buttons.spec.js +135 -0
  157. package/dist/presets/index.js +9 -9
  158. package/dist/primitives/Accordion/Accordion.spec.d.ts +2 -0
  159. package/dist/primitives/Accordion/Accordion.spec.d.ts.map +1 -0
  160. package/dist/primitives/Accordion/Accordion.spec.js +83 -0
  161. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  162. package/dist/primitives/Accordion/Accordion.svelte +42 -42
  163. package/dist/primitives/Accordion/AccordionItem.spec.d.ts +2 -0
  164. package/dist/primitives/Accordion/AccordionItem.spec.d.ts.map +1 -0
  165. package/dist/primitives/Accordion/AccordionItem.spec.js +661 -0
  166. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  167. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -0
  168. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +35 -0
  169. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -0
  170. package/dist/primitives/Alert/Alert.spec.js +173 -170
  171. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  172. package/dist/primitives/Alert/Alert.svelte +27 -27
  173. package/dist/primitives/Avatar/Avatar.spec.d.ts +2 -0
  174. package/dist/primitives/Avatar/Avatar.spec.d.ts.map +1 -0
  175. package/dist/primitives/Avatar/Avatar.spec.js +211 -0
  176. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  177. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  178. package/dist/primitives/Badges/Badge.spec.js +144 -103
  179. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  180. package/dist/primitives/Badges/Badge.svelte +79 -79
  181. package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -127
  182. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  183. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  184. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte +13 -0
  185. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts +7 -0
  186. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts.map +1 -0
  187. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -120
  188. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  189. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  190. package/dist/primitives/Button/Button.spec.js +223 -211
  191. package/dist/primitives/Button/Button.stories.svelte +76 -76
  192. package/dist/primitives/Button/Button.svelte +270 -270
  193. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -48
  194. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  195. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts +2 -0
  196. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts.map +1 -0
  197. package/dist/primitives/Button/ButtonVariantShowcase.spec.js +202 -0
  198. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  199. package/dist/primitives/Card.spec.js +49 -49
  200. package/dist/primitives/Card.stories.svelte +22 -22
  201. package/dist/primitives/Card.svelte +28 -28
  202. package/dist/primitives/Checkbox/Checkbox.spec.d.ts +2 -0
  203. package/dist/primitives/Checkbox/Checkbox.spec.d.ts.map +1 -0
  204. package/dist/primitives/Checkbox/Checkbox.spec.js +252 -0
  205. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  206. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  207. package/dist/primitives/DarkModeToggle.spec.js +390 -357
  208. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  209. package/dist/primitives/DarkModeToggle.svelte +136 -136
  210. package/dist/primitives/Drawer/Drawer.spec.d.ts +2 -0
  211. package/dist/primitives/Drawer/Drawer.spec.d.ts.map +1 -0
  212. package/dist/primitives/Drawer/Drawer.spec.js +212 -0
  213. package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
  214. package/dist/primitives/Drawer/Drawer.svelte +120 -120
  215. package/dist/primitives/Dropdown/Dropdown.spec.d.ts +2 -0
  216. package/dist/primitives/Dropdown/Dropdown.spec.d.ts.map +1 -0
  217. package/dist/primitives/Dropdown/Dropdown.spec.js +366 -0
  218. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  219. package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
  220. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts +2 -0
  221. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts.map +1 -0
  222. package/dist/primitives/Dropdown/DropdownItem.spec.js +182 -0
  223. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  224. package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
  225. package/dist/primitives/Icons/ArrowRight.svelte +8 -8
  226. package/dist/primitives/Icons/Availability.svelte +14 -14
  227. package/dist/primitives/Icons/Back.svelte +14 -14
  228. package/dist/primitives/Icons/CheckCircle.svelte +6 -6
  229. package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
  230. package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
  231. package/dist/primitives/Icons/ChevronRight.svelte +4 -4
  232. package/dist/primitives/Icons/Copy.svelte +15 -15
  233. package/dist/primitives/Icons/Cross.svelte +5 -5
  234. package/dist/primitives/Icons/DownArrow.svelte +8 -8
  235. package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
  236. package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
  237. package/dist/primitives/Icons/Home.svelte +15 -15
  238. package/dist/primitives/Icons/Icon.spec.js +169 -169
  239. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  240. package/dist/primitives/Icons/Icon.svelte +52 -52
  241. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  242. package/dist/primitives/Icons/Info.svelte +7 -7
  243. package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
  244. package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
  245. package/dist/primitives/Icons/Message.svelte +15 -15
  246. package/dist/primitives/Icons/MoonIcon.svelte +5 -5
  247. package/dist/primitives/Icons/More.svelte +21 -21
  248. package/dist/primitives/Icons/MoreHori.spec.js +61 -61
  249. package/dist/primitives/Icons/MoreHori.svelte +22 -22
  250. package/dist/primitives/Icons/Notification.svelte +14 -14
  251. package/dist/primitives/Icons/Payment.svelte +14 -14
  252. package/dist/primitives/Icons/Profile.svelte +21 -21
  253. package/dist/primitives/Icons/Reload.svelte +29 -29
  254. package/dist/primitives/Icons/Shows.svelte +21 -21
  255. package/dist/primitives/Icons/Signout.svelte +21 -21
  256. package/dist/primitives/Icons/SunIcon.svelte +8 -8
  257. package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
  258. package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
  259. package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
  260. package/dist/primitives/Icons/WarningIcon.svelte +5 -5
  261. package/dist/primitives/Icons/iconTestUtils.spec.d.ts +2 -0
  262. package/dist/primitives/Icons/iconTestUtils.spec.d.ts.map +1 -0
  263. package/dist/primitives/Icons/iconTestUtils.spec.js +235 -0
  264. package/dist/primitives/Input/Input.spec.js +573 -573
  265. package/dist/primitives/Input/Input.stories.svelte +139 -139
  266. package/dist/primitives/Input/Input.svelte +418 -431
  267. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  268. package/dist/primitives/Input/Select.spec.js +212 -218
  269. package/dist/primitives/Input/Select.stories.svelte +112 -112
  270. package/dist/primitives/Input/Select.svelte +128 -128
  271. package/dist/primitives/Input/Textarea.spec.d.ts +2 -0
  272. package/dist/primitives/Input/Textarea.spec.d.ts.map +1 -0
  273. package/dist/primitives/Input/Textarea.spec.js +255 -0
  274. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  275. package/dist/primitives/Input/Textarea.svelte +35 -35
  276. package/dist/primitives/Label/Label.spec.d.ts +2 -0
  277. package/dist/primitives/Label/Label.spec.d.ts.map +1 -0
  278. package/dist/primitives/Label/Label.spec.js +157 -0
  279. package/dist/primitives/Label/Label.svelte +37 -37
  280. package/dist/primitives/Modal/Modal.spec.js +99 -95
  281. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  282. package/dist/primitives/Modal/Modal.svelte +158 -158
  283. package/dist/primitives/Modal/ModalTestWrapper.svelte +65 -0
  284. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts +23 -0
  285. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts.map +1 -0
  286. package/dist/primitives/NumberInput/NumberInput.spec.d.ts +2 -0
  287. package/dist/primitives/NumberInput/NumberInput.spec.d.ts.map +1 -0
  288. package/dist/primitives/NumberInput/NumberInput.spec.js +235 -0
  289. package/dist/primitives/NumberInput/NumberInput.svelte +106 -106
  290. package/dist/primitives/Pagination/Pagination.spec.d.ts +2 -0
  291. package/dist/primitives/Pagination/Pagination.spec.d.ts.map +1 -0
  292. package/dist/primitives/Pagination/Pagination.spec.js +266 -0
  293. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  294. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  295. package/dist/primitives/Radio/Radio.spec.d.ts +2 -0
  296. package/dist/primitives/Radio/Radio.spec.d.ts.map +1 -0
  297. package/dist/primitives/Radio/Radio.spec.js +206 -0
  298. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  299. package/dist/primitives/Radio/Radio.svelte +67 -67
  300. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts +2 -0
  301. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts.map +1 -0
  302. package/dist/primitives/Skeleton/CardPlaceholder.spec.js +156 -0
  303. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  304. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts +2 -0
  305. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts.map +1 -0
  306. package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +120 -0
  307. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  308. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts +2 -0
  309. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts.map +1 -0
  310. package/dist/primitives/Skeleton/ListPlaceholder.spec.js +220 -0
  311. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  312. package/dist/primitives/Skeleton/Skeleton.spec.d.ts +2 -0
  313. package/dist/primitives/Skeleton/Skeleton.spec.d.ts.map +1 -0
  314. package/dist/primitives/Skeleton/Skeleton.spec.js +173 -0
  315. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  316. package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
  317. package/dist/primitives/Spinner/Spinner.spec.js +71 -75
  318. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  319. package/dist/primitives/Spinner/Spinner.svelte +20 -20
  320. package/dist/primitives/Tabs/TabItem.spec.d.ts +2 -0
  321. package/dist/primitives/Tabs/TabItem.spec.d.ts.map +1 -0
  322. package/dist/primitives/Tabs/TabItem.spec.js +130 -0
  323. package/dist/primitives/Tabs/TabItem.svelte +49 -49
  324. package/dist/primitives/Tabs/Tabs.spec.d.ts +2 -0
  325. package/dist/primitives/Tabs/Tabs.spec.d.ts.map +1 -0
  326. package/dist/primitives/Tabs/Tabs.spec.js +295 -0
  327. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  328. package/dist/primitives/Tabs/Tabs.svelte +123 -123
  329. package/dist/primitives/Tabs/TabsWithItems.test.svelte +18 -0
  330. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts +16 -0
  331. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts.map +1 -0
  332. package/dist/primitives/Toggle.spec.js +143 -127
  333. package/dist/primitives/Toggle.stories.svelte +92 -92
  334. package/dist/primitives/Toggle.svelte +71 -71
  335. package/dist/primitives/Typography/Typography.spec.d.ts +2 -0
  336. package/dist/primitives/Typography/Typography.spec.d.ts.map +1 -0
  337. package/dist/primitives/Typography/Typography.spec.js +183 -0
  338. package/dist/primitives/Typography/Typography.svelte +53 -53
  339. package/dist/primitives/ValidationError.spec.js +103 -103
  340. package/dist/primitives/ValidationError.stories.svelte +69 -69
  341. package/dist/primitives/ValidationError.svelte +29 -29
  342. package/dist/primitives/index.d.ts +1 -0
  343. package/dist/primitives/index.js +84 -81
  344. package/dist/recipes/CropImage/CropImage.spec.js +208 -216
  345. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  346. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  347. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts +2 -0
  348. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts.map +1 -0
  349. package/dist/recipes/ImageUploader/ImageUploader.spec.js +1351 -0
  350. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  351. package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
  352. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts +2 -0
  353. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts.map +1 -0
  354. package/dist/recipes/SuperLogin/SuperLogin.spec.js +1436 -0
  355. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  356. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts +2 -0
  357. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts.map +1 -0
  358. package/dist/recipes/feedback/EmptyState/EmptyState.spec.js +202 -0
  359. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  360. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  361. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
  362. package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
  363. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -129
  364. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
  365. package/dist/recipes/fields/CheckboxField.spec.d.ts +2 -0
  366. package/dist/recipes/fields/CheckboxField.spec.d.ts.map +1 -0
  367. package/dist/recipes/fields/CheckboxField.spec.js +135 -0
  368. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  369. package/dist/recipes/fields/FormField.spec.d.ts +2 -0
  370. package/dist/recipes/fields/FormField.spec.d.ts.map +1 -0
  371. package/dist/recipes/fields/FormField.spec.js +159 -0
  372. package/dist/recipes/fields/FormField.svelte +58 -58
  373. package/dist/recipes/fields/RadioGroup.spec.d.ts +2 -0
  374. package/dist/recipes/fields/RadioGroup.spec.d.ts.map +1 -0
  375. package/dist/recipes/fields/RadioGroup.spec.js +199 -0
  376. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  377. package/dist/recipes/fields/SelectField.spec.d.ts +2 -0
  378. package/dist/recipes/fields/SelectField.spec.d.ts.map +1 -0
  379. package/dist/recipes/fields/SelectField.spec.js +188 -0
  380. package/dist/recipes/fields/SelectField.svelte +80 -80
  381. package/dist/recipes/fields/TextareaField.spec.d.ts +2 -0
  382. package/dist/recipes/fields/TextareaField.spec.d.ts.map +1 -0
  383. package/dist/recipes/fields/TextareaField.spec.js +205 -0
  384. package/dist/recipes/fields/TextareaField.svelte +97 -97
  385. package/dist/recipes/fields/ToggleField.spec.d.ts +2 -0
  386. package/dist/recipes/fields/ToggleField.spec.d.ts.map +1 -0
  387. package/dist/recipes/fields/ToggleField.spec.js +153 -0
  388. package/dist/recipes/fields/ToggleField.svelte +60 -60
  389. package/dist/recipes/fields/index.js +7 -7
  390. package/dist/recipes/inputs/MultiSelect.spec.js +258 -257
  391. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  392. package/dist/recipes/inputs/MultiSelect.svelte +256 -249
  393. package/dist/recipes/inputs/MultiSelect.svelte.d.ts +2 -0
  394. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  395. package/dist/recipes/inputs/OTPInput.spec.js +251 -238
  396. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  397. package/dist/recipes/inputs/OTPInput.svelte +29 -29
  398. package/dist/recipes/inputs/PasswordInput.spec.d.ts +2 -0
  399. package/dist/recipes/inputs/PasswordInput.spec.d.ts.map +1 -0
  400. package/dist/recipes/inputs/PasswordInput.spec.js +410 -0
  401. package/dist/recipes/inputs/PasswordInput.svelte +22 -22
  402. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +253 -173
  403. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
  404. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +71 -0
  405. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts +9 -0
  406. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts.map +1 -0
  407. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +1246 -300
  408. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
  409. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +326 -326
  410. package/dist/recipes/inputs/Search.spec.d.ts +2 -0
  411. package/dist/recipes/inputs/Search.spec.d.ts.map +1 -0
  412. package/dist/recipes/inputs/Search.spec.js +177 -0
  413. package/dist/recipes/inputs/Search.svelte +37 -37
  414. package/dist/recipes/inputs/SelectDropdown.spec.d.ts +2 -0
  415. package/dist/recipes/inputs/SelectDropdown.spec.d.ts.map +1 -0
  416. package/dist/recipes/inputs/SelectDropdown.spec.js +512 -0
  417. package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
  418. package/dist/recipes/modals/AlertModal.spec.d.ts +2 -0
  419. package/dist/recipes/modals/AlertModal.spec.d.ts.map +1 -0
  420. package/dist/recipes/modals/AlertModal.spec.js +432 -0
  421. package/dist/recipes/modals/AlertModal.svelte +130 -130
  422. package/dist/recipes/modals/ConfirmationModal.spec.js +206 -191
  423. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  424. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  425. package/dist/recipes/modals/InputModal.spec.d.ts +2 -0
  426. package/dist/recipes/modals/InputModal.spec.d.ts.map +1 -0
  427. package/dist/recipes/modals/InputModal.spec.js +872 -0
  428. package/dist/recipes/modals/InputModal.svelte +182 -182
  429. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  430. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  431. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts +2 -0
  432. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts.map +1 -0
  433. package/dist/recipes/modals/ModalTestWrapper.spec.js +502 -0
  434. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  435. package/dist/recipes/modals/StatusModal.spec.d.ts +2 -0
  436. package/dist/recipes/modals/StatusModal.spec.d.ts.map +1 -0
  437. package/dist/recipes/modals/StatusModal.spec.js +599 -0
  438. package/dist/recipes/modals/StatusModal.svelte +206 -206
  439. package/dist/services/EventService.js +75 -75
  440. package/dist/services/EventService.spec.js +217 -217
  441. package/dist/services/ShowService.spec.js +345 -342
  442. package/dist/stores/auth.js +36 -36
  443. package/dist/stores/auth.spec.js +139 -139
  444. package/dist/stores/toaster.js +13 -13
  445. package/dist/stories/ButtonAuditDashboard.spec.d.ts +2 -0
  446. package/dist/stories/ButtonAuditDashboard.spec.d.ts.map +1 -0
  447. package/dist/stories/ButtonAuditDashboard.spec.js +913 -0
  448. package/dist/stories/ButtonAuditReview.spec.d.ts +2 -0
  449. package/dist/stories/ButtonAuditReview.spec.d.ts.map +1 -0
  450. package/dist/stories/ButtonAuditReview.spec.js +422 -0
  451. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  452. package/dist/stories/ButtonAuditReview.svelte +427 -427
  453. package/dist/stories/ButtonGridView.spec.d.ts +2 -0
  454. package/dist/stories/ButtonGridView.spec.d.ts.map +1 -0
  455. package/dist/stories/ButtonGridView.spec.js +667 -0
  456. package/dist/stories/ButtonShowcase.spec.d.ts +2 -0
  457. package/dist/stories/ButtonShowcase.spec.d.ts.map +1 -0
  458. package/dist/stories/ButtonShowcase.spec.js +499 -0
  459. package/dist/stories/PatternsGallery.spec.d.ts +2 -0
  460. package/dist/stories/PatternsGallery.spec.d.ts.map +1 -0
  461. package/dist/stories/PatternsGallery.spec.js +514 -0
  462. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  463. package/dist/stories/PatternsGallery.svelte +206 -206
  464. package/dist/stories/PrimitivesGallery.spec.d.ts +2 -0
  465. package/dist/stories/PrimitivesGallery.spec.d.ts.map +1 -0
  466. package/dist/stories/PrimitivesGallery.spec.js +813 -0
  467. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  468. package/dist/stories/PrimitivesGallery.svelte +725 -725
  469. package/dist/stories/RecipesGallery.spec.d.ts +2 -0
  470. package/dist/stories/RecipesGallery.spec.d.ts.map +1 -0
  471. package/dist/stories/RecipesGallery.spec.js +299 -0
  472. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  473. package/dist/stories/RecipesGallery.svelte +271 -271
  474. package/dist/stories/button-audit-manifest.json +11186 -11186
  475. package/dist/stripe/useStripeTheme.spec.d.ts +2 -0
  476. package/dist/stripe/useStripeTheme.spec.d.ts.map +1 -0
  477. package/dist/stripe/useStripeTheme.spec.js +793 -0
  478. package/dist/tailwind/preset.cjs +82 -82
  479. package/dist/telemetry.d.ts.map +1 -1
  480. package/dist/telemetry.js +405 -404
  481. package/dist/telemetry.spec.js +1144 -661
  482. package/dist/tokens/__tests__/colors.test.d.ts +2 -0
  483. package/dist/tokens/__tests__/colors.test.d.ts.map +1 -0
  484. package/dist/tokens/__tests__/colors.test.js +152 -0
  485. package/dist/tokens/__tests__/radius.test.d.ts +2 -0
  486. package/dist/tokens/__tests__/radius.test.d.ts.map +1 -0
  487. package/dist/tokens/__tests__/radius.test.js +118 -0
  488. package/dist/tokens/__tests__/shadows.test.d.ts +2 -0
  489. package/dist/tokens/__tests__/shadows.test.d.ts.map +1 -0
  490. package/dist/tokens/__tests__/shadows.test.js +105 -0
  491. package/dist/tokens/__tests__/spacing.test.js +11 -8
  492. package/dist/tokens/__tests__/typography-base.test.d.ts +2 -0
  493. package/dist/tokens/__tests__/typography-base.test.d.ts.map +1 -0
  494. package/dist/tokens/__tests__/typography-base.test.js +138 -0
  495. package/dist/tokens/__tests__/typography.test.d.ts +2 -0
  496. package/dist/tokens/__tests__/typography.test.d.ts.map +1 -0
  497. package/dist/tokens/__tests__/typography.test.js +156 -0
  498. package/dist/tokens/__tests__/z-index.test.d.ts +2 -0
  499. package/dist/tokens/__tests__/z-index.test.d.ts.map +1 -0
  500. package/dist/tokens/__tests__/z-index.test.js +121 -0
  501. package/dist/tokens/tokens.css +87 -87
  502. package/dist/tokens/typography-base.css +163 -0
  503. package/dist/utils/apiConfig.spec.js +219 -118
  504. package/dist/utils/formatters.spec.d.ts +2 -0
  505. package/dist/utils/formatters.spec.d.ts.map +1 -0
  506. package/dist/utils/formatters.spec.js +82 -0
  507. package/dist/utils/transitions.js +62 -62
  508. package/dist/utils/transitions.spec.d.ts +2 -0
  509. package/dist/utils/transitions.spec.d.ts.map +1 -0
  510. package/dist/utils/transitions.spec.js +130 -0
  511. package/dist/utils/utils.js +354 -354
  512. package/package.json +292 -286
@@ -0,0 +1,791 @@
1
+ import { describe, it, expect, vi, afterEach } from 'vitest';
2
+ import { render, screen, cleanup, fireEvent } from '@testing-library/svelte';
3
+ import AboutShow from './AboutShow.svelte';
4
+
5
+ describe('AboutShow Component', () => {
6
+ afterEach(() => {
7
+ cleanup();
8
+ });
9
+
10
+ describe('basic rendering', () => {
11
+ it('renders with default props', () => {
12
+ render(AboutShow);
13
+ expect(screen.getByText('About the Show')).toBeInTheDocument();
14
+ });
15
+
16
+ it('renders custom title', () => {
17
+ render(AboutShow, { props: { title: 'Show Details' } });
18
+ expect(screen.getByText('Show Details')).toBeInTheDocument();
19
+ });
20
+
21
+ it('hides title when showTitle is false', () => {
22
+ render(AboutShow, { props: { showTitle: false } });
23
+ expect(screen.queryByText('About the Show')).not.toBeInTheDocument();
24
+ });
25
+
26
+ it('renders without crashing with empty props', () => {
27
+ const { container } = render(AboutShow);
28
+ expect(container.querySelector('.flex.flex-col.gap-3')).toBeInTheDocument();
29
+ });
30
+ });
31
+
32
+ describe('show image', () => {
33
+ it('renders show image when ShowImage and description are provided', () => {
34
+ render(AboutShow, {
35
+ props: {
36
+ ShowImage: 'https://example.com/image.jpg',
37
+ description: 'Test description'
38
+ }
39
+ });
40
+ const img = screen.getByAltText('');
41
+ expect(img).toBeInTheDocument();
42
+ expect(img).toHaveAttribute('src', 'https://example.com/image.jpg');
43
+ });
44
+
45
+ it('does not render image when ShowImage is empty', () => {
46
+ render(AboutShow, {
47
+ props: {
48
+ ShowImage: '',
49
+ description: 'Test description'
50
+ }
51
+ });
52
+ expect(screen.queryByRole('img')).not.toBeInTheDocument();
53
+ });
54
+
55
+ it('does not render image when description is empty', () => {
56
+ render(AboutShow, {
57
+ props: {
58
+ ShowImage: 'https://example.com/image.jpg',
59
+ description: ''
60
+ }
61
+ });
62
+ expect(screen.queryByRole('img', { name: '' })).not.toBeInTheDocument();
63
+ });
64
+
65
+ it('applies correct styling to show image', () => {
66
+ render(AboutShow, {
67
+ props: {
68
+ ShowImage: 'https://example.com/image.jpg',
69
+ description: 'Test description'
70
+ }
71
+ });
72
+ const img = screen.getByAltText('');
73
+ expect(img.className).toContain('rounded-lg');
74
+ expect(img.className).toContain('object-contain');
75
+ expect(img.className).toContain('w-full');
76
+ });
77
+ });
78
+
79
+ describe('description display', () => {
80
+ it('renders short description without read more', () => {
81
+ const shortDescription = 'This is a short description';
82
+ render(AboutShow, { props: { description: shortDescription } });
83
+ expect(screen.getByText(shortDescription)).toBeInTheDocument();
84
+ expect(screen.queryByText('Show more')).not.toBeInTheDocument();
85
+ });
86
+
87
+ it('renders truncated long description with show more button', () => {
88
+ const longDescription = 'a'.repeat(1600);
89
+ render(AboutShow, { props: { description: longDescription } });
90
+ expect(screen.getByText(/^a+\.\.\.$/)).toBeInTheDocument();
91
+ expect(screen.getByText('Show more')).toBeInTheDocument();
92
+ });
93
+
94
+ it('expands description when show more is clicked', async () => {
95
+ const longDescription = 'a'.repeat(1600);
96
+ render(AboutShow, { props: { description: longDescription } });
97
+
98
+ const showMoreButton = screen.getByText('Show more');
99
+ await fireEvent.click(showMoreButton);
100
+
101
+ expect(screen.getByText('Show less')).toBeInTheDocument();
102
+ expect(screen.queryByText('Show more')).not.toBeInTheDocument();
103
+ });
104
+
105
+ it('collapses description when show less is clicked', async () => {
106
+ const longDescription = 'a'.repeat(1600);
107
+ render(AboutShow, { props: { description: longDescription } });
108
+
109
+ const showMoreButton = screen.getByText('Show more');
110
+ await fireEvent.click(showMoreButton);
111
+
112
+ const showLessButton = screen.getByText('Show less');
113
+ await fireEvent.click(showLessButton);
114
+
115
+ expect(screen.getByText('Show more')).toBeInTheDocument();
116
+ expect(screen.queryByText('Show less')).not.toBeInTheDocument();
117
+ });
118
+
119
+ it('does not show read more when showReadMore is false', () => {
120
+ const longDescription = 'a'.repeat(1600);
121
+ render(AboutShow, {
122
+ props: {
123
+ description: longDescription,
124
+ showReadMore: false
125
+ }
126
+ });
127
+ expect(screen.queryByText('Show more')).not.toBeInTheDocument();
128
+ expect(screen.getByText(longDescription)).toBeInTheDocument();
129
+ });
130
+
131
+ it('preserves whitespace in description with whitespace-pre-line', () => {
132
+ const descriptionWithNewlines = 'Line 1\nLine 2\nLine 3';
133
+ const { container } = render(AboutShow, {
134
+ props: { description: descriptionWithNewlines }
135
+ });
136
+ const paragraph = container.querySelector('p');
137
+ expect(paragraph.className).toContain('whitespace-pre-line');
138
+ });
139
+
140
+ it('does not render description when empty', () => {
141
+ const { container } = render(AboutShow, { props: { description: '' } });
142
+ const paragraphs = container.querySelectorAll('p');
143
+ const descriptionParagraphs = Array.from(paragraphs).filter(p =>
144
+ p.className.includes('whitespace-pre-line')
145
+ );
146
+ expect(descriptionParagraphs.length).toBe(0);
147
+ });
148
+ });
149
+
150
+ describe('performers filtering', () => {
151
+ it('filters out unconfirmed performers', () => {
152
+ const performers = [
153
+ {
154
+ ID: 1,
155
+ acceptedState: 1,
156
+ shouldBeHidden: false,
157
+ RosterPerformer: {
158
+ User: {
159
+ performerProfile: {
160
+ firstName: 'John',
161
+ lastName: 'Doe',
162
+ profileImage: 'image1.jpg'
163
+ }
164
+ }
165
+ }
166
+ }
167
+ ];
168
+ render(AboutShow, { props: { performers } });
169
+ expect(screen.queryByText('John Doe')).not.toBeInTheDocument();
170
+ });
171
+
172
+ it('filters out hidden performers', () => {
173
+ const performers = [
174
+ {
175
+ ID: 1,
176
+ acceptedState: 2,
177
+ shouldBeHidden: true,
178
+ RosterPerformer: {
179
+ User: {
180
+ performerProfile: {
181
+ firstName: 'Jane',
182
+ lastName: 'Smith',
183
+ profileImage: 'image2.jpg'
184
+ }
185
+ }
186
+ }
187
+ }
188
+ ];
189
+ render(AboutShow, { props: { performers } });
190
+ expect(screen.queryByText('Jane Smith')).not.toBeInTheDocument();
191
+ });
192
+
193
+ it('filters out performers without names', () => {
194
+ const performers = [
195
+ {
196
+ ID: 1,
197
+ acceptedState: 2,
198
+ shouldBeHidden: false,
199
+ RosterPerformer: {
200
+ User: {
201
+ performerProfile: {
202
+ profileImage: 'image3.jpg'
203
+ }
204
+ }
205
+ }
206
+ }
207
+ ];
208
+ render(AboutShow, { props: { performers } });
209
+ const performerCards = screen.queryAllByRole('img');
210
+ expect(performerCards.length).toBe(0);
211
+ });
212
+
213
+ it('shows confirmed, non-hidden performers with names', () => {
214
+ const performers = [
215
+ {
216
+ ID: 1,
217
+ acceptedState: 2,
218
+ shouldBeHidden: false,
219
+ RosterPerformer: {
220
+ User: {
221
+ performerProfile: {
222
+ firstName: 'Alice',
223
+ lastName: 'Wonder',
224
+ profileImage: 'alice.jpg'
225
+ }
226
+ }
227
+ }
228
+ }
229
+ ];
230
+ render(AboutShow, { props: { performers } });
231
+ expect(screen.getByText('Alice Wonder')).toBeInTheDocument();
232
+ });
233
+
234
+ it('does not render performers section when no valid performers', () => {
235
+ const { container } = render(AboutShow, { props: { performers: [] } });
236
+ const performerSection = container.querySelector('.py-2');
237
+ expect(performerSection).not.toBeInTheDocument();
238
+ });
239
+ });
240
+
241
+ describe('performer display', () => {
242
+ const validPerformer = {
243
+ ID: 1,
244
+ acceptedState: 2,
245
+ shouldBeHidden: false,
246
+ RosterPerformer: {
247
+ User: {
248
+ performerProfile: {
249
+ firstName: 'Bob',
250
+ lastName: 'Builder',
251
+ profileImage: 'bob.jpg'
252
+ }
253
+ }
254
+ }
255
+ };
256
+
257
+ it('displays performer name', () => {
258
+ render(AboutShow, { props: { performers: [validPerformer] } });
259
+ expect(screen.getByText('Bob Builder')).toBeInTheDocument();
260
+ });
261
+
262
+ it('uses stage name when useStageName is true', () => {
263
+ const performerWithStageName = {
264
+ ...validPerformer,
265
+ RosterPerformer: {
266
+ User: {
267
+ performerProfile: {
268
+ firstName: 'Bob',
269
+ lastName: 'Builder',
270
+ stageName: 'The Builder',
271
+ useStageName: true,
272
+ profileImage: 'bob.jpg'
273
+ }
274
+ }
275
+ }
276
+ };
277
+ render(AboutShow, { props: { performers: [performerWithStageName] } });
278
+ expect(screen.getByText('The Builder')).toBeInTheDocument();
279
+ expect(screen.queryByText('Bob Builder')).not.toBeInTheDocument();
280
+ });
281
+
282
+ it('uses first and last name when useStageName is false', () => {
283
+ const performerWithStageName = {
284
+ ...validPerformer,
285
+ RosterPerformer: {
286
+ User: {
287
+ performerProfile: {
288
+ firstName: 'Bob',
289
+ lastName: 'Builder',
290
+ stageName: 'The Builder',
291
+ useStageName: false,
292
+ profileImage: 'bob.jpg'
293
+ }
294
+ }
295
+ }
296
+ };
297
+ render(AboutShow, { props: { performers: [performerWithStageName] } });
298
+ expect(screen.getByText('Bob Builder')).toBeInTheDocument();
299
+ expect(screen.queryByText('The Builder')).not.toBeInTheDocument();
300
+ });
301
+
302
+ it('uses getImageUrl function for performer images', () => {
303
+ const mockGetImageUrl = vi.fn((url) => `https://cdn.example.com/${url}`);
304
+ render(AboutShow, {
305
+ props: {
306
+ performers: [validPerformer],
307
+ getImageUrl: mockGetImageUrl
308
+ }
309
+ });
310
+ expect(mockGetImageUrl).toHaveBeenCalledWith('bob.jpg');
311
+ });
312
+
313
+ it('handles performer without profileImage', () => {
314
+ const performerNoImage = {
315
+ ...validPerformer,
316
+ RosterPerformer: {
317
+ User: {
318
+ performerProfile: {
319
+ firstName: 'Charlie',
320
+ lastName: 'Brown'
321
+ }
322
+ }
323
+ }
324
+ };
325
+ const { container } = render(AboutShow, {
326
+ props: { performers: [performerNoImage] }
327
+ });
328
+ const img = screen.getByAltText('Charlie Brown');
329
+ expect(img).toHaveAttribute('src', '');
330
+ expect(img.className).toContain('bg-gray-50');
331
+ });
332
+
333
+ it('renders multiple performers', () => {
334
+ const performers = [
335
+ validPerformer,
336
+ {
337
+ ID: 2,
338
+ acceptedState: 2,
339
+ shouldBeHidden: false,
340
+ RosterPerformer: {
341
+ User: {
342
+ performerProfile: {
343
+ firstName: 'Alice',
344
+ lastName: 'Wonder',
345
+ profileImage: 'alice.jpg'
346
+ }
347
+ }
348
+ }
349
+ }
350
+ ];
351
+ render(AboutShow, { props: { performers } });
352
+ expect(screen.getByText('Bob Builder')).toBeInTheDocument();
353
+ expect(screen.getByText('Alice Wonder')).toBeInTheDocument();
354
+ });
355
+ });
356
+
357
+ describe('performer interaction', () => {
358
+ const validPerformer = {
359
+ ID: 1,
360
+ acceptedState: 2,
361
+ shouldBeHidden: false,
362
+ RosterPerformer: {
363
+ User: {
364
+ performerProfile: {
365
+ firstName: 'Bob',
366
+ lastName: 'Builder',
367
+ biography: 'Bob is a builder who builds things.',
368
+ instagram: 'https://instagram.com/bob',
369
+ twitter: 'https://twitter.com/bob',
370
+ profileImage: 'bob.jpg'
371
+ }
372
+ }
373
+ }
374
+ };
375
+
376
+ it('shows performer biography when clicked', async () => {
377
+ render(AboutShow, { props: { performers: [validPerformer] } });
378
+
379
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
380
+ await fireEvent.click(performerCard);
381
+
382
+ expect(screen.getByText('Bob is a builder who builds things.')).toBeInTheDocument();
383
+ });
384
+
385
+ it('hides performer biography when clicked again', async () => {
386
+ render(AboutShow, { props: { performers: [validPerformer] } });
387
+
388
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
389
+ await fireEvent.click(performerCard);
390
+ expect(screen.getByText('Bob is a builder who builds things.')).toBeInTheDocument();
391
+
392
+ await fireEvent.click(performerCard);
393
+ expect(screen.queryByText('Bob is a builder who builds things.')).not.toBeInTheDocument();
394
+ });
395
+
396
+ it('closes performer popup when close button is clicked', async () => {
397
+ render(AboutShow, { props: { performers: [validPerformer] } });
398
+
399
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
400
+ await fireEvent.click(performerCard);
401
+
402
+ const closeButton = screen.getByLabelText('Close');
403
+ await fireEvent.click(closeButton);
404
+
405
+ expect(screen.queryByText('Bob is a builder who builds things.')).not.toBeInTheDocument();
406
+ });
407
+
408
+ it('closes performer popup when backdrop is clicked', async () => {
409
+ const { container } = render(AboutShow, { props: { performers: [validPerformer] } });
410
+
411
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
412
+ await fireEvent.click(performerCard);
413
+
414
+ const backdrop = container.querySelector('.fixed.inset-0.z-40');
415
+ await fireEvent.click(backdrop);
416
+
417
+ expect(screen.queryByText('Bob is a builder who builds things.')).not.toBeInTheDocument();
418
+ });
419
+
420
+ it('stops propagation when clicking inside popup', async () => {
421
+ const { container } = render(AboutShow, { props: { performers: [validPerformer] } });
422
+
423
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
424
+ await fireEvent.click(performerCard);
425
+
426
+ const popup = screen.getByText('Bob is a builder who builds things.').closest('.absolute');
427
+ await fireEvent.click(popup);
428
+
429
+ // Popup should still be visible
430
+ expect(screen.getByText('Bob is a builder who builds things.')).toBeInTheDocument();
431
+ });
432
+
433
+ it('highlights active performer card', async () => {
434
+ render(AboutShow, { props: { performers: [validPerformer] } });
435
+
436
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
437
+ expect(performerCard.className).toContain('border-gray-200');
438
+
439
+ await fireEvent.click(performerCard);
440
+ // Check for the active state border (not the hover state)
441
+ const activeClassPattern = /border-blue-700(?!\s*dark:hover)/;
442
+ expect(performerCard.className).toMatch(activeClassPattern);
443
+ });
444
+
445
+ it('closes other performer when new one is opened', async () => {
446
+ const performers = [
447
+ validPerformer,
448
+ {
449
+ ID: 2,
450
+ acceptedState: 2,
451
+ shouldBeHidden: false,
452
+ RosterPerformer: {
453
+ User: {
454
+ performerProfile: {
455
+ firstName: 'Alice',
456
+ lastName: 'Wonder',
457
+ biography: 'Alice wonders about things.',
458
+ profileImage: 'alice.jpg'
459
+ }
460
+ }
461
+ }
462
+ }
463
+ ];
464
+ render(AboutShow, { props: { performers } });
465
+
466
+ const bobCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
467
+ const aliceCard = screen.getByText('Alice Wonder').closest('.cursor-pointer');
468
+
469
+ await fireEvent.click(bobCard);
470
+ expect(screen.getByText('Bob is a builder who builds things.')).toBeInTheDocument();
471
+
472
+ await fireEvent.click(aliceCard);
473
+ expect(screen.queryByText('Bob is a builder who builds things.')).not.toBeInTheDocument();
474
+ expect(screen.getByText('Alice wonders about things.')).toBeInTheDocument();
475
+ });
476
+ });
477
+
478
+ describe('social media links', () => {
479
+ const performerWithSocials = {
480
+ ID: 1,
481
+ acceptedState: 2,
482
+ shouldBeHidden: false,
483
+ RosterPerformer: {
484
+ User: {
485
+ performerProfile: {
486
+ firstName: 'Bob',
487
+ lastName: 'Builder',
488
+ biography: 'Bob is a builder.',
489
+ instagram: 'https://instagram.com/bob',
490
+ twitter: 'https://twitter.com/bob',
491
+ profileImage: 'bob.jpg'
492
+ }
493
+ }
494
+ }
495
+ };
496
+
497
+ it('displays instagram link when available', async () => {
498
+ render(AboutShow, { props: { performers: [performerWithSocials] } });
499
+
500
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
501
+ await fireEvent.click(performerCard);
502
+
503
+ const instagramLink = screen.getByLabelText('Instagram profile');
504
+ expect(instagramLink).toBeInTheDocument();
505
+ expect(instagramLink).toHaveAttribute('href', 'https://instagram.com/bob');
506
+ expect(instagramLink).toHaveAttribute('target', '_blank');
507
+ expect(instagramLink).toHaveAttribute('rel', 'noopener noreferrer');
508
+ });
509
+
510
+ it('displays twitter link when available', async () => {
511
+ render(AboutShow, { props: { performers: [performerWithSocials] } });
512
+
513
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
514
+ await fireEvent.click(performerCard);
515
+
516
+ const twitterLink = screen.getByLabelText('Twitter profile');
517
+ expect(twitterLink).toBeInTheDocument();
518
+ expect(twitterLink).toHaveAttribute('href', 'https://twitter.com/bob');
519
+ expect(twitterLink).toHaveAttribute('target', '_blank');
520
+ expect(twitterLink).toHaveAttribute('rel', 'noopener noreferrer');
521
+ });
522
+
523
+ it('does not display social section when no socials available', async () => {
524
+ const performerNoSocials = {
525
+ ...performerWithSocials,
526
+ RosterPerformer: {
527
+ User: {
528
+ performerProfile: {
529
+ firstName: 'Bob',
530
+ lastName: 'Builder',
531
+ biography: 'Bob is a builder.',
532
+ profileImage: 'bob.jpg'
533
+ }
534
+ }
535
+ }
536
+ };
537
+ render(AboutShow, { props: { performers: [performerNoSocials] } });
538
+
539
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
540
+ await fireEvent.click(performerCard);
541
+
542
+ expect(screen.queryByText(/Follow/)).not.toBeInTheDocument();
543
+ });
544
+
545
+ it('displays only instagram when twitter not available', async () => {
546
+ const performerInstagramOnly = {
547
+ ...performerWithSocials,
548
+ RosterPerformer: {
549
+ User: {
550
+ performerProfile: {
551
+ firstName: 'Bob',
552
+ lastName: 'Builder',
553
+ biography: 'Bob is a builder.',
554
+ instagram: 'https://instagram.com/bob',
555
+ profileImage: 'bob.jpg'
556
+ }
557
+ }
558
+ }
559
+ };
560
+ render(AboutShow, { props: { performers: [performerInstagramOnly] } });
561
+
562
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
563
+ await fireEvent.click(performerCard);
564
+
565
+ expect(screen.getByLabelText('Instagram profile')).toBeInTheDocument();
566
+ expect(screen.queryByLabelText('Twitter profile')).not.toBeInTheDocument();
567
+ });
568
+
569
+ it('displays only twitter when instagram not available', async () => {
570
+ const performerTwitterOnly = {
571
+ ...performerWithSocials,
572
+ RosterPerformer: {
573
+ User: {
574
+ performerProfile: {
575
+ firstName: 'Bob',
576
+ lastName: 'Builder',
577
+ biography: 'Bob is a builder.',
578
+ twitter: 'https://twitter.com/bob',
579
+ profileImage: 'bob.jpg'
580
+ }
581
+ }
582
+ }
583
+ };
584
+ render(AboutShow, { props: { performers: [performerTwitterOnly] } });
585
+
586
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
587
+ await fireEvent.click(performerCard);
588
+
589
+ expect(screen.getByLabelText('Twitter profile')).toBeInTheDocument();
590
+ expect(screen.queryByLabelText('Instagram profile')).not.toBeInTheDocument();
591
+ });
592
+
593
+ it('displays follow text with performer first name', async () => {
594
+ render(AboutShow, { props: { performers: [performerWithSocials] } });
595
+
596
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
597
+ await fireEvent.click(performerCard);
598
+
599
+ expect(screen.getByText('Follow Bob:')).toBeInTheDocument();
600
+ });
601
+ });
602
+
603
+ describe('popup positioning', () => {
604
+ const performers = [
605
+ {
606
+ ID: 1,
607
+ acceptedState: 2,
608
+ shouldBeHidden: false,
609
+ RosterPerformer: {
610
+ User: {
611
+ performerProfile: {
612
+ firstName: 'First',
613
+ lastName: 'Performer',
614
+ biography: 'First performer bio.',
615
+ profileImage: 'first.jpg'
616
+ }
617
+ }
618
+ }
619
+ },
620
+ {
621
+ ID: 2,
622
+ acceptedState: 2,
623
+ shouldBeHidden: false,
624
+ RosterPerformer: {
625
+ User: {
626
+ performerProfile: {
627
+ firstName: 'Second',
628
+ lastName: 'Performer',
629
+ biography: 'Second performer bio.',
630
+ profileImage: 'second.jpg'
631
+ }
632
+ }
633
+ }
634
+ }
635
+ ];
636
+
637
+ it('positions first performer popup differently', async () => {
638
+ const { container } = render(AboutShow, { props: { performers } });
639
+
640
+ const firstCard = screen.getByText('First Performer').closest('.cursor-pointer');
641
+ await fireEvent.click(firstCard);
642
+
643
+ const popup = screen.getByText('First performer bio.').closest('.absolute');
644
+ expect(popup.className).toContain('left-[190%]');
645
+ });
646
+
647
+ it('positions non-first performer popup centered', async () => {
648
+ const { container } = render(AboutShow, { props: { performers } });
649
+
650
+ const secondCard = screen.getByText('Second Performer').closest('.cursor-pointer');
651
+ await fireEvent.click(secondCard);
652
+
653
+ const popup = screen.getByText('Second performer bio.').closest('.absolute');
654
+ expect(popup.className).toContain('left-1/2');
655
+ expect(popup.className).toContain('-translate-x-1/2');
656
+ });
657
+ });
658
+
659
+ describe('dark mode styling', () => {
660
+ it('has dark mode classes for title', () => {
661
+ const { container } = render(AboutShow);
662
+ const title = screen.getByText('About the Show');
663
+ expect(title.className).toContain('dark:text-white');
664
+ });
665
+
666
+ it('has dark mode classes for show image background', () => {
667
+ render(AboutShow, {
668
+ props: {
669
+ ShowImage: 'https://example.com/image.jpg',
670
+ description: 'Test description'
671
+ }
672
+ });
673
+ const img = screen.getByAltText('');
674
+ expect(img.className).toContain('dark:bg-gray-800');
675
+ });
676
+
677
+ it('has dark mode classes for description', () => {
678
+ const { container } = render(AboutShow, {
679
+ props: { description: 'Test description' }
680
+ });
681
+ const paragraph = screen.getByText('Test description');
682
+ expect(paragraph.className).toContain('dark:text-white');
683
+ });
684
+
685
+ it('has dark mode classes for read more button', () => {
686
+ const longDescription = 'a'.repeat(1600);
687
+ render(AboutShow, { props: { description: longDescription } });
688
+ const button = screen.getByText('Show more');
689
+ expect(button.className).toContain('dark:text-blue-500');
690
+ });
691
+
692
+ it('has dark mode classes for performer card', () => {
693
+ const performer = {
694
+ ID: 1,
695
+ acceptedState: 2,
696
+ shouldBeHidden: false,
697
+ RosterPerformer: {
698
+ User: {
699
+ performerProfile: {
700
+ firstName: 'Bob',
701
+ lastName: 'Builder',
702
+ profileImage: 'bob.jpg'
703
+ }
704
+ }
705
+ }
706
+ };
707
+ render(AboutShow, { props: { performers: [performer] } });
708
+ const card = screen.getByText('Bob Builder').closest('.cursor-pointer');
709
+ expect(card.className).toContain('dark:bg-gray-800');
710
+ expect(card.className).toContain('dark:border-gray-600');
711
+ expect(card.className).toContain('dark:hover:border-blue-500');
712
+ });
713
+ });
714
+
715
+ describe('accessibility', () => {
716
+ it('uses semantic heading for title', () => {
717
+ render(AboutShow);
718
+ expect(screen.getByRole('heading', { name: 'About the Show' })).toBeInTheDocument();
719
+ });
720
+
721
+ it('has proper alt text for performer images', () => {
722
+ const performer = {
723
+ ID: 1,
724
+ acceptedState: 2,
725
+ shouldBeHidden: false,
726
+ RosterPerformer: {
727
+ User: {
728
+ performerProfile: {
729
+ firstName: 'Bob',
730
+ lastName: 'Builder',
731
+ profileImage: 'bob.jpg'
732
+ }
733
+ }
734
+ }
735
+ };
736
+ render(AboutShow, { props: { performers: [performer] } });
737
+ expect(screen.getByAltText('Bob Builder')).toBeInTheDocument();
738
+ });
739
+
740
+ it('has aria-label for close button', async () => {
741
+ const performer = {
742
+ ID: 1,
743
+ acceptedState: 2,
744
+ shouldBeHidden: false,
745
+ RosterPerformer: {
746
+ User: {
747
+ performerProfile: {
748
+ firstName: 'Bob',
749
+ lastName: 'Builder',
750
+ biography: 'Bio',
751
+ profileImage: 'bob.jpg'
752
+ }
753
+ }
754
+ }
755
+ };
756
+ render(AboutShow, { props: { performers: [performer] } });
757
+
758
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
759
+ await fireEvent.click(performerCard);
760
+
761
+ expect(screen.getByLabelText('Close')).toBeInTheDocument();
762
+ });
763
+
764
+ it('has aria-label for social media links', async () => {
765
+ const performer = {
766
+ ID: 1,
767
+ acceptedState: 2,
768
+ shouldBeHidden: false,
769
+ RosterPerformer: {
770
+ User: {
771
+ performerProfile: {
772
+ firstName: 'Bob',
773
+ lastName: 'Builder',
774
+ biography: 'Bio',
775
+ instagram: 'https://instagram.com/bob',
776
+ twitter: 'https://twitter.com/bob',
777
+ profileImage: 'bob.jpg'
778
+ }
779
+ }
780
+ }
781
+ };
782
+ render(AboutShow, { props: { performers: [performer] } });
783
+
784
+ const performerCard = screen.getByText('Bob Builder').closest('.cursor-pointer');
785
+ await fireEvent.click(performerCard);
786
+
787
+ expect(screen.getByLabelText('Instagram profile')).toBeInTheDocument();
788
+ expect(screen.getByLabelText('Twitter profile')).toBeInTheDocument();
789
+ });
790
+ });
791
+ });