@getmicdrop/svelte-components 5.19.0 → 5.20.1

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 (389) hide show
  1. package/dist/base.css +18 -0
  2. package/dist/calendar/AboutShow/AboutShow.svelte +191 -191
  3. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +803 -801
  4. package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
  5. package/dist/calendar/FAQs/FAQs.svelte +88 -88
  6. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +140 -140
  7. package/dist/calendar/OrderSummary/OrderSummary.svelte +461 -461
  8. package/dist/calendar/PublicCard/PublicCard.svelte +164 -164
  9. package/dist/calendar/ShowCard/ShowCard.svelte +180 -180
  10. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +80 -80
  11. package/dist/calendar/index.js +15 -15
  12. package/dist/components/Heading.spec.js +89 -89
  13. package/dist/components/Heading.svelte +66 -60
  14. package/dist/components/Heading.svelte.d.ts +1 -0
  15. package/dist/components/Heading.svelte.d.ts.map +1 -1
  16. package/dist/components/Layout/AppShell.svelte +104 -104
  17. package/dist/components/Layout/ContentSection.svelte +80 -80
  18. package/dist/components/Layout/Grid.svelte +101 -101
  19. package/dist/components/Layout/Heading.svelte +81 -81
  20. package/dist/components/Layout/PageContainer.svelte +69 -69
  21. package/dist/components/Layout/Responsive.svelte +75 -75
  22. package/dist/components/Layout/Section.svelte +80 -80
  23. package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
  24. package/dist/components/Layout/ShowOnMobile.svelte +37 -37
  25. package/dist/components/Layout/Sidebar.svelte +108 -108
  26. package/dist/components/Layout/Stack.spec.js +1 -1
  27. package/dist/components/Layout/Stack.svelte +52 -52
  28. package/dist/components/Layout/Text.svelte +87 -87
  29. package/dist/components/Layout/TwoColumn.svelte +108 -108
  30. package/dist/components/Text.spec.js +89 -89
  31. package/dist/components/Text.svelte +64 -53
  32. package/dist/components/Text.svelte.d.ts +2 -1
  33. package/dist/components/Text.svelte.d.ts.map +1 -1
  34. package/dist/config.d.ts +13 -2
  35. package/dist/config.d.ts.map +1 -1
  36. package/dist/config.js +160 -151
  37. package/dist/config.spec.js +29 -29
  38. package/dist/constants/formOptions.d.ts +2 -5
  39. package/dist/constants/formOptions.d.ts.map +1 -1
  40. package/dist/constants/formOptions.js +48 -48
  41. package/dist/constants/formOptions.spec.js +2 -7
  42. package/dist/constants/validation.js +91 -91
  43. package/dist/constants/validation.spec.js +64 -64
  44. package/dist/datetime/README.md +323 -323
  45. package/dist/datetime/__tests__/format.test.js +1 -1
  46. package/dist/datetime/__tests__/parse.test.js +1 -1
  47. package/dist/datetime/__tests__/timezone.test.js +1 -1
  48. package/dist/datetime/parse.js +1 -1
  49. package/dist/forms/createFormStore.svelte.js +0 -1
  50. package/dist/forms/createFormStore.svelte.spec.js +0 -1
  51. package/dist/index.d.ts +6 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +85 -66
  54. package/dist/index.spec.js +369 -369
  55. package/dist/patterns/chat/ChatActivityNotice.spec.js +59 -59
  56. package/dist/patterns/chat/ChatActivityNotice.svelte +41 -41
  57. package/dist/patterns/chat/ChatBubble.spec.js +91 -91
  58. package/dist/patterns/chat/ChatBubble.svelte +103 -103
  59. package/dist/patterns/chat/ChatContainer.spec.js +30 -30
  60. package/dist/patterns/chat/ChatContainer.svelte +46 -46
  61. package/dist/patterns/chat/ChatDateDivider.spec.js +30 -30
  62. package/dist/patterns/chat/ChatDateDivider.svelte +27 -27
  63. package/dist/patterns/chat/ChatInvitationBubble.spec.js +46 -46
  64. package/dist/patterns/chat/ChatInvitationBubble.svelte +46 -46
  65. package/dist/patterns/chat/ChatInvitationNotice.spec.js +32 -32
  66. package/dist/patterns/chat/ChatInvitationNotice.svelte +36 -36
  67. package/dist/patterns/chat/ChatMessageGroup.spec.js +58 -58
  68. package/dist/patterns/chat/ChatMessageGroup.svelte +57 -57
  69. package/dist/patterns/chat/ChatSlotUpdate.spec.js +65 -65
  70. package/dist/patterns/chat/ChatSlotUpdate.svelte +46 -46
  71. package/dist/patterns/chat/ChatStatusBadge.spec.js +79 -79
  72. package/dist/patterns/chat/ChatStatusBadge.svelte +91 -91
  73. package/dist/patterns/chat/ChatStatusTransition.spec.js +81 -81
  74. package/dist/patterns/chat/ChatStatusTransition.svelte +64 -64
  75. package/dist/patterns/chat/ChatTextBubble.spec.js +35 -35
  76. package/dist/patterns/chat/ChatTextBubble.svelte +41 -41
  77. package/dist/patterns/chat/index.js +22 -22
  78. package/dist/patterns/data/DataGrid.svelte +45 -45
  79. package/dist/patterns/data/DataList.svelte +24 -24
  80. package/dist/patterns/data/DataTable.svelte +45 -45
  81. package/dist/patterns/data/index.js +4 -4
  82. package/dist/patterns/forms/FormActions.spec.js +95 -95
  83. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  84. package/dist/patterns/forms/FormActions.svelte +46 -46
  85. package/dist/patterns/forms/FormGrid.svelte +33 -33
  86. package/dist/patterns/forms/FormSection.svelte +33 -32
  87. package/dist/patterns/forms/FormSection.svelte.d.ts +2 -0
  88. package/dist/patterns/forms/FormSection.svelte.d.ts.map +1 -1
  89. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  90. package/dist/patterns/forms/FormValidationSummary.svelte +82 -82
  91. package/dist/patterns/forms/index.js +5 -5
  92. package/dist/patterns/index.js +21 -21
  93. package/dist/patterns/layout/Sidebar.svelte +39 -39
  94. package/dist/patterns/layout/SidebarTestWrapper.svelte +34 -34
  95. package/dist/patterns/layout/Stack.svelte +61 -61
  96. package/dist/patterns/layout/index.js +29 -29
  97. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  98. package/dist/patterns/navigation/BottomNav.svelte +82 -82
  99. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  100. package/dist/patterns/navigation/Header.svelte +263 -263
  101. package/dist/patterns/navigation/index.js +3 -3
  102. package/dist/patterns/page/PageHeader.svelte +49 -49
  103. package/dist/patterns/page/PageLayout.svelte +40 -40
  104. package/dist/patterns/page/PageLoader.spec.js +57 -57
  105. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  106. package/dist/patterns/page/PageLoader.svelte +62 -62
  107. package/dist/patterns/page/SectionHeader.svelte +51 -51
  108. package/dist/patterns/page/index.js +5 -5
  109. package/dist/presets/badges.js +112 -112
  110. package/dist/presets/buttons.js +76 -76
  111. package/dist/presets/index.js +9 -9
  112. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  113. package/dist/primitives/Accordion/Accordion.svelte +62 -62
  114. package/dist/primitives/Accordion/AccordionItem.svelte +103 -103
  115. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -107
  116. package/dist/primitives/Accordion/AccordionToggleWrapper.test.svelte +28 -28
  117. package/dist/primitives/Alert/Alert.spec.js +173 -173
  118. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  119. package/dist/primitives/Alert/Alert.svelte +72 -72
  120. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  121. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  122. package/dist/primitives/AvatarButton/AvatarButton.svelte +57 -57
  123. package/dist/primitives/Badges/Badge.spec.js +144 -144
  124. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  125. package/dist/primitives/Badges/Badge.svelte +99 -99
  126. package/dist/primitives/BottomSheet/BottomSheet.spec.js +238 -238
  127. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  128. package/dist/primitives/BottomSheet/BottomSheet.svelte +115 -115
  129. package/dist/primitives/BottomSheet/BottomSheetWithActions.test.svelte +20 -20
  130. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +123 -123
  131. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  132. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +107 -107
  133. package/dist/primitives/Button/Button.spec.js +225 -225
  134. package/dist/primitives/Button/Button.stories.svelte +76 -76
  135. package/dist/primitives/Button/Button.svelte +278 -278
  136. package/dist/primitives/Button/ButtonGroup.spec.js +44 -44
  137. package/dist/primitives/Button/ButtonGroup.svelte +50 -50
  138. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
  139. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  140. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  141. package/dist/primitives/Card.spec.js +49 -49
  142. package/dist/primitives/Card.stories.svelte +22 -22
  143. package/dist/primitives/Card.svelte +28 -28
  144. package/dist/primitives/CardAction/CardAction.svelte +68 -68
  145. package/dist/primitives/Checkbox/Checkbox.spec.js +4 -15
  146. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  147. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  148. package/dist/primitives/DarkModeToggle.spec.js +390 -390
  149. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  150. package/dist/primitives/DarkModeToggle.svelte +147 -147
  151. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  152. package/dist/primitives/Drawer/Drawer.svelte +224 -224
  153. package/dist/primitives/Drawer/DrawerTestWrapper.svelte +86 -86
  154. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  155. package/dist/primitives/Dropdown/Dropdown.svelte +179 -179
  156. package/dist/primitives/Dropdown/DropdownDivider.spec.js +30 -30
  157. package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
  158. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  159. package/dist/primitives/Dropdown/DropdownItemTestWrapper.svelte +43 -43
  160. package/dist/primitives/Helper/Helper.spec.js +57 -57
  161. package/dist/primitives/Helper/Helper.svelte +33 -33
  162. package/dist/primitives/Icons/ArrowLeft.svelte +21 -21
  163. package/dist/primitives/Icons/ArrowRight.svelte +21 -21
  164. package/dist/primitives/Icons/Availability.svelte +27 -27
  165. package/dist/primitives/Icons/Back.svelte +27 -27
  166. package/dist/primitives/Icons/CheckCircle.svelte +19 -19
  167. package/dist/primitives/Icons/CheckCircleOutline.svelte +28 -28
  168. package/dist/primitives/Icons/ChevronLeft.svelte +17 -17
  169. package/dist/primitives/Icons/ChevronRight.svelte +17 -17
  170. package/dist/primitives/Icons/Copy.svelte +28 -28
  171. package/dist/primitives/Icons/Cross.svelte +18 -18
  172. package/dist/primitives/Icons/DownArrow.svelte +21 -21
  173. package/dist/primitives/Icons/ErrorCircle.svelte +19 -19
  174. package/dist/primitives/Icons/FacebookIcon.svelte +15 -15
  175. package/dist/primitives/Icons/Home.svelte +28 -28
  176. package/dist/primitives/Icons/Icon.spec.js +175 -175
  177. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  178. package/dist/primitives/Icons/Icon.svelte +79 -79
  179. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  180. package/dist/primitives/Icons/ImageOutline.svelte +21 -21
  181. package/dist/primitives/Icons/Info.svelte +20 -20
  182. package/dist/primitives/Icons/InstagramIcon.svelte +21 -21
  183. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  184. package/dist/primitives/Icons/Message.svelte +28 -28
  185. package/dist/primitives/Icons/MoonIcon.svelte +18 -18
  186. package/dist/primitives/Icons/More.svelte +34 -34
  187. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  188. package/dist/primitives/Icons/MoreHori.svelte +35 -35
  189. package/dist/primitives/Icons/Notification.svelte +27 -27
  190. package/dist/primitives/Icons/Payment.svelte +27 -27
  191. package/dist/primitives/Icons/Profile.svelte +34 -34
  192. package/dist/primitives/Icons/Reload.svelte +42 -42
  193. package/dist/primitives/Icons/Shows.svelte +34 -34
  194. package/dist/primitives/Icons/Signout.svelte +34 -34
  195. package/dist/primitives/Icons/SunIcon.svelte +21 -21
  196. package/dist/primitives/Icons/TiktokIcon.svelte +15 -15
  197. package/dist/primitives/Icons/TrashBinOutline.svelte +21 -21
  198. package/dist/primitives/Icons/TwitterIcon.svelte +15 -15
  199. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  200. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  201. package/dist/primitives/Input/Input.spec.js +1237 -1237
  202. package/dist/primitives/Input/Input.stories.svelte +139 -139
  203. package/dist/primitives/Input/Input.svelte +444 -444
  204. package/dist/primitives/Input/Select.spec.js +632 -632
  205. package/dist/primitives/Input/Select.stories.svelte +112 -112
  206. package/dist/primitives/Input/Select.svelte +252 -252
  207. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  208. package/dist/primitives/Input/Textarea.svelte +105 -105
  209. package/dist/primitives/Label/Label.svelte +37 -37
  210. package/dist/primitives/LandingButton/LandingButton.spec.js +61 -61
  211. package/dist/primitives/LandingButton/LandingButton.svelte +92 -92
  212. package/dist/primitives/MenuItem/MenuItem.spec.js +130 -130
  213. package/dist/primitives/MenuItem/MenuItem.svelte +85 -85
  214. package/dist/primitives/Modal/Modal.spec.js +314 -314
  215. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  216. package/dist/primitives/Modal/Modal.svelte +181 -181
  217. package/dist/primitives/NavItem/NavItem.spec.js +97 -97
  218. package/dist/primitives/NavItem/NavItem.svelte +75 -75
  219. package/dist/primitives/NumberInput/NumberInput.svelte +113 -113
  220. package/dist/primitives/Pagination/DotIndicator.svelte +66 -0
  221. package/dist/primitives/Pagination/DotIndicator.svelte.d.ts +18 -0
  222. package/dist/primitives/Pagination/DotIndicator.svelte.d.ts.map +1 -0
  223. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  224. package/dist/primitives/Pagination/Pagination.svelte +275 -275
  225. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  226. package/dist/primitives/Radio/Radio.svelte +67 -67
  227. package/dist/primitives/SearchResultItem/SearchResultItem.spec.js +78 -78
  228. package/dist/primitives/SearchResultItem/SearchResultItem.svelte +109 -109
  229. package/dist/primitives/SidebarToggle/SidebarToggle.spec.js +61 -61
  230. package/dist/primitives/SidebarToggle/SidebarToggle.svelte +55 -55
  231. package/dist/primitives/Skeleton/CardPlaceholder.svelte +96 -96
  232. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +68 -68
  233. package/dist/primitives/Skeleton/ListPlaceholder.svelte +85 -85
  234. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  235. package/dist/primitives/Skeleton/Skeleton.svelte +55 -55
  236. package/dist/primitives/Spinner/Spinner.spec.js +84 -84
  237. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  238. package/dist/primitives/Spinner/Spinner.svelte +52 -52
  239. package/dist/primitives/Tabs/TabItem.svelte +52 -52
  240. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  241. package/dist/primitives/Tabs/Tabs.svelte +137 -137
  242. package/dist/primitives/Toggle.spec.js +221 -221
  243. package/dist/primitives/Toggle.stories.svelte +92 -92
  244. package/dist/primitives/Toggle.svelte +141 -141
  245. package/dist/primitives/ToggleTestWrapper.svelte +30 -30
  246. package/dist/primitives/Tooltip/Tooltip.spec.js +126 -126
  247. package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
  248. package/dist/primitives/Typography/Typography.svelte +53 -53
  249. package/dist/primitives/ValidationError.spec.js +103 -103
  250. package/dist/primitives/ValidationError.stories.svelte +112 -112
  251. package/dist/primitives/ValidationError.svelte +29 -29
  252. package/dist/primitives/index.d.ts +1 -0
  253. package/dist/primitives/index.js +114 -113
  254. package/dist/recipes/CropImage/CropImage.spec.js +208 -208
  255. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  256. package/dist/recipes/CropImage/CropImage.svelte +241 -241
  257. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  258. package/dist/recipes/ImageUploader/ImageUploader.svelte +994 -994
  259. package/dist/recipes/SuperLogin/SuperLogin.svelte +5 -4
  260. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  261. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  262. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +75 -75
  263. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  264. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +113 -113
  265. package/dist/recipes/feedback/ErrorDisplay.svelte +67 -67
  266. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
  267. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +176 -176
  268. package/dist/recipes/feedback/index.js +4 -4
  269. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  270. package/dist/recipes/fields/FormField.svelte +58 -58
  271. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  272. package/dist/recipes/fields/SelectField.svelte +82 -82
  273. package/dist/recipes/fields/TextareaField.svelte +101 -101
  274. package/dist/recipes/fields/ToggleField.svelte +60 -60
  275. package/dist/recipes/fields/index.js +7 -7
  276. package/dist/recipes/index.js +24 -24
  277. package/dist/recipes/inputs/MultiSelect.spec.js +263 -263
  278. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  279. package/dist/recipes/inputs/MultiSelect.svelte +291 -291
  280. package/dist/recipes/inputs/OTPInput.spec.js +251 -251
  281. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  282. package/dist/recipes/inputs/OTPInput.svelte +128 -128
  283. package/dist/recipes/inputs/PasswordInput.svelte +130 -130
  284. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +142 -142
  285. package/dist/recipes/inputs/PhoneInput.svelte +254 -254
  286. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -170
  287. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +349 -349
  288. package/dist/recipes/inputs/Search.svelte +110 -110
  289. package/dist/recipes/inputs/index.js +8 -8
  290. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +240 -240
  291. package/dist/recipes/modals/AlertModal.svelte +139 -139
  292. package/dist/recipes/modals/ConfirmationModal.spec.js +396 -396
  293. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  294. package/dist/recipes/modals/ConfirmationModal.svelte +169 -169
  295. package/dist/recipes/modals/FeedbackModal.svelte +205 -0
  296. package/dist/recipes/modals/FeedbackModal.svelte.d.ts +24 -0
  297. package/dist/recipes/modals/FeedbackModal.svelte.d.ts.map +1 -0
  298. package/dist/recipes/modals/InputModal.svelte +194 -194
  299. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  300. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  301. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  302. package/dist/recipes/modals/StatusModal.svelte +216 -216
  303. package/dist/recipes/modals/index.d.ts +1 -0
  304. package/dist/recipes/modals/index.js +8 -7
  305. package/dist/schemas/common.js +1 -1
  306. package/dist/schemas/event.js +1 -1
  307. package/dist/schemas/order.js +0 -1
  308. package/dist/schemas/performer.js +1 -1
  309. package/dist/schemas/promo.js +2 -2
  310. package/dist/schemas/ticket.js +1 -1
  311. package/dist/schemas/user.js +1 -2
  312. package/dist/services/show.service.d.ts +46 -46
  313. package/dist/stores/auth.d.ts +8 -8
  314. package/dist/stores/auth.svelte.spec.js +1 -1
  315. package/dist/stores/index.js +9 -9
  316. package/dist/stores/toaster.d.ts +3 -3
  317. package/dist/stores/toaster.js +13 -13
  318. package/dist/stores/toaster.spec.js +59 -59
  319. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  320. package/dist/stories/ButtonAuditReview.svelte +427 -427
  321. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  322. package/dist/stories/PatternsGallery.svelte +399 -399
  323. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  324. package/dist/stories/PrimitivesGallery.svelte +756 -756
  325. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  326. package/dist/stories/RecipesGallery.svelte +454 -454
  327. package/dist/stories/button-audit-manifest.json +11186 -11186
  328. package/dist/tailwind/preset.cjs +87 -82
  329. package/dist/tailwind/preset.d.cts +2 -0
  330. package/dist/tailwind/preset.d.cts.map +1 -1
  331. package/dist/telemetry.d.ts +5 -5
  332. package/dist/telemetry.d.ts.map +1 -1
  333. package/dist/telemetry.js +401 -402
  334. package/dist/telemetry.server.js +212 -212
  335. package/dist/telemetry.server.spec.js +437 -437
  336. package/dist/telemetry.spec.js +1273 -1173
  337. package/dist/tokens/__tests__/spacing.test.js +2 -2
  338. package/dist/tokens/__tests__/variants.test.js +12 -4
  339. package/dist/tokens/base-resets.css +124 -0
  340. package/dist/tokens/spacing.d.ts +2 -0
  341. package/dist/tokens/spacing.d.ts.map +1 -1
  342. package/dist/tokens/spacing.js +1 -0
  343. package/dist/tokens/tokens.css +87 -87
  344. package/dist/tokens/typography-base.css +163 -163
  345. package/dist/tokens/utilities.css +430 -353
  346. package/dist/tokens/variants.d.ts +4 -4
  347. package/dist/tokens/variants.js +4 -4
  348. package/dist/utils/__tests__/auth.test.js +431 -431
  349. package/dist/utils/apiConfig.d.ts +29 -29
  350. package/dist/utils/apiConfig.js +142 -117
  351. package/dist/utils/auth.d.ts +46 -46
  352. package/dist/utils/auth.js +195 -195
  353. package/dist/utils/clickOutside.d.ts +4 -0
  354. package/dist/utils/clickOutside.d.ts.map +1 -0
  355. package/dist/utils/clickOutside.js +13 -0
  356. package/dist/utils/feedbackContext.d.ts +24 -0
  357. package/dist/utils/feedbackContext.d.ts.map +1 -0
  358. package/dist/utils/feedbackContext.js +19 -0
  359. package/dist/utils/fetchHelpers.d.ts.map +1 -1
  360. package/dist/utils/fetchHelpers.js +1 -0
  361. package/dist/utils/focusTrap.d.ts +20 -0
  362. package/dist/utils/focusTrap.d.ts.map +1 -0
  363. package/dist/utils/focusTrap.js +130 -0
  364. package/dist/utils/formatters.js +1 -1
  365. package/dist/utils/greetings.js +187 -187
  366. package/dist/utils/greetings.spec.js +337 -337
  367. package/dist/utils/haptic.spec.js +1 -1
  368. package/dist/utils/imageValidation.js +121 -121
  369. package/dist/utils/imageValidation.spec.js +223 -223
  370. package/dist/utils/logger.d.ts +25 -1
  371. package/dist/utils/logger.d.ts.map +1 -1
  372. package/dist/utils/logger.js +60 -1
  373. package/dist/utils/logger.spec.js +99 -1
  374. package/dist/utils/portal.d.ts +11 -11
  375. package/dist/utils/portal.js +25 -25
  376. package/dist/utils/portal.spec.js +143 -143
  377. package/dist/utils/transitions.d.ts +99 -1
  378. package/dist/utils/transitions.d.ts.map +1 -1
  379. package/dist/utils/transitions.js +148 -6
  380. package/dist/utils/utils/utils.d.ts +2 -2
  381. package/dist/utils/utils/utils.js +3 -3
  382. package/dist/utils/utils/utils.spec.js +698 -698
  383. package/dist/utils/utils.d.ts +41 -41
  384. package/dist/utils/utils.js +59 -59
  385. package/dist/utils/utils.spec.js +643 -643
  386. package/package.json +306 -301
  387. package/dist/utils/apiConfig.spec.d.ts +0 -2
  388. package/dist/utils/apiConfig.spec.d.ts.map +0 -1
  389. package/dist/utils/apiConfig.spec.js +0 -219
package/dist/telemetry.js CHANGED
@@ -1,402 +1,401 @@
1
- // @ts-nocheck
2
- import { ZoneContextManager } from '@opentelemetry/context-zone';
3
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
4
- import { registerInstrumentations } from '@opentelemetry/instrumentation';
5
- import { DocumentLoadInstrumentation } from '@opentelemetry/instrumentation-document-load';
6
- import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
7
- import { UserInteractionInstrumentation } from '@opentelemetry/instrumentation-user-interaction';
8
- import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
9
- import { B3Propagator } from '@opentelemetry/propagator-b3';
10
- import { resourceFromAttributes } from '@opentelemetry/resources';
11
- import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
12
- import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
13
- import {
14
- ATTR_SERVICE_NAME,
15
- ATTR_SERVICE_VERSION,
16
- } from '@opentelemetry/semantic-conventions';
17
-
18
- /**
19
- * Telemetry configuration from environment variables.
20
- * Each app can override these via VITE_* environment variables.
21
- */
22
- const TELEMETRY_CONFIG = {
23
- serviceName: import.meta.env.VITE_OTEL_SERVICE_NAME || 'micdrop-app',
24
- serviceVersion: import.meta.env.VITE_OTEL_SERVICE_VERSION || '1.0.0',
25
- environment: import.meta.env.VITE_ENVIRONMENT || 'development',
26
- otlpEndpoint: import.meta.env.VITE_OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4318/v1/traces',
27
- tracesEnabled: import.meta.env.VITE_OTEL_TRACES_ENABLED !== 'false',
28
- sampleRate: parseFloat(import.meta.env.VITE_OTEL_TRACES_SAMPLER_ARG || '0.1'), // 10% sampling by default
29
- consoleDebug: import.meta.env.VITE_OTEL_DEBUG === 'true',
30
- // Portal type for distinguishing apps in traces (e.g., 'frontend', 'performers')
31
- portalType: import.meta.env.VITE_PORTAL_TYPE || 'unknown',
32
- };
33
-
34
- // Default CORS URLs for trace propagation - apps can extend this
35
- const DEFAULT_CORS_URLS = [
36
- /^http:\/\/localhost:8080\/.*/,
37
- /^https:\/\/api\.jetbook\.com\/.*/,
38
- /^https:\/\/api\.micdrop\.com\/.*/,
39
- /^https:\/\/.*\.get-micdrop\.com\/.*/,
40
- ];
41
-
42
- let tracer = null;
43
- let tracerProvider = null;
44
-
45
- // Helper to log telemetry events when debugging
46
- function debugLog(message, data) {
47
- if (TELEMETRY_CONFIG.consoleDebug) {
48
- console.log(`[Telemetry] ${message}`, data || '');
49
- }
50
- }
51
-
52
- /**
53
- * Initialize OpenTelemetry with optional custom configuration
54
- * @param {Object} customConfig - Override default config
55
- */
56
- export function initTelemetry(customConfig = {}) {
57
- const config = { ...TELEMETRY_CONFIG, ...customConfig };
58
-
59
- if (!config.tracesEnabled) {
60
- debugLog('Tracing is disabled');
61
- return;
62
- }
63
-
64
- try {
65
- // Create resource with service information
66
- const resource = resourceFromAttributes({
67
- [ATTR_SERVICE_NAME]: config.serviceName,
68
- [ATTR_SERVICE_VERSION]: config.serviceVersion,
69
- 'deployment.environment': config.environment,
70
- 'browser.user_agent': navigator.userAgent,
71
- 'browser.language': navigator.language,
72
- 'browser.platform': navigator.platform,
73
- 'portal.type': config.portalType,
74
- });
75
-
76
- // Configure OTLP exporter
77
- const exporter = new OTLPTraceExporter({
78
- url: config.otlpEndpoint,
79
- headers: {
80
- 'Content-Type': 'application/json',
81
- },
82
- });
83
-
84
- // Create tracer provider with span processors
85
- tracerProvider = new WebTracerProvider({
86
- resource,
87
- sampler: {
88
- shouldSample: () => {
89
- return {
90
- decision: Math.random() < config.sampleRate ? 1 : 0,
91
- attributes: [],
92
- };
93
- },
94
- },
95
- spanProcessors: [
96
- new BatchSpanProcessor(exporter, {
97
- maxQueueSize: 100,
98
- maxExportBatchSize: 50,
99
- scheduledDelayMillis: 500,
100
- exportTimeoutMillis: 30000,
101
- }),
102
- ],
103
- });
104
-
105
- // Set global provider
106
- tracerProvider.register({
107
- contextManager: new ZoneContextManager(),
108
- propagator: new B3Propagator(),
109
- });
110
-
111
- // Get CORS URLs (allow custom via config)
112
- const corsUrls = config.corsUrls || DEFAULT_CORS_URLS;
113
-
114
- // Register instrumentations
115
- registerInstrumentations({
116
- instrumentations: [
117
- // Document load instrumentation
118
- new DocumentLoadInstrumentation({
119
- applyCustomAttributesOnSpan: {
120
- documentLoad: span => {
121
- span.setAttribute('page.path', window.location.pathname);
122
- span.setAttribute('page.search', window.location.search);
123
- span.setAttribute('page.hash', window.location.hash);
124
- span.setAttribute('portal.type', config.portalType);
125
- },
126
- documentFetch: span => {
127
- span.setAttribute('document.referrer', document.referrer);
128
- },
129
- },
130
- }),
131
-
132
- // Fetch instrumentation for API calls
133
- new FetchInstrumentation({
134
- propagateTraceHeaderCorsUrls: corsUrls,
135
- clearTimingResources: true,
136
- applyCustomAttributesOnSpan: (span, request, response) => {
137
- const url = new URL(request.url || '');
138
- span.setAttribute('http.url.pathname', url.pathname);
139
- span.setAttribute('http.url.search', url.search);
140
- span.setAttribute('portal.type', config.portalType);
141
-
142
- if (response) {
143
- span.setAttribute('http.response.status', response.status);
144
- span.setAttribute(
145
- 'http.response.content_length',
146
- response.headers?.get('content-length') || 0
147
- );
148
- }
149
- },
150
- }),
151
-
152
- // XHR instrumentation for legacy AJAX calls
153
- new XMLHttpRequestInstrumentation({
154
- propagateTraceHeaderCorsUrls: corsUrls,
155
- clearTimingResources: true,
156
- }),
157
-
158
- // User interaction instrumentation
159
- new UserInteractionInstrumentation({
160
- eventNames: ['click', 'submit', 'change'],
161
- shouldPreventSpanCreation: (eventType, element, span) => {
162
- // Skip telemetry for certain elements
163
- if (element.classList?.contains('no-telemetry')) {
164
- return true;
165
- }
166
- // Skip very frequent events
167
- if (
168
- eventType === 'change' &&
169
- element.tagName === 'INPUT' &&
170
- element.type === 'text'
171
- ) {
172
- return true;
173
- }
174
- return false;
175
- },
176
- }),
177
- ],
178
- });
179
-
180
- // Get tracer instance
181
- tracer = tracerProvider.getTracer(config.serviceName, config.serviceVersion);
182
-
183
- debugLog('Telemetry initialized', config);
184
- debugLog(`Initialized ${config.serviceName} with ${config.sampleRate * 100}% sampling rate`);
185
- } catch (error) {
186
- console.error('[Telemetry] Failed to initialize:', error);
187
- }
188
- }
189
-
190
- // Create custom span for tracking specific operations
191
- export function startSpan(name, options = {}) {
192
- if (!tracer) return null;
193
-
194
- const span = tracer.startSpan(name, {
195
- ...options,
196
- attributes: {
197
- 'span.kind': 'internal',
198
- 'portal.type': TELEMETRY_CONFIG.portalType,
199
- ...options.attributes,
200
- },
201
- });
202
-
203
- debugLog(`Started span: ${name}`, options.attributes);
204
- return span;
205
- }
206
-
207
- // End a span and set its status
208
- export function endSpan(span, status = { code: 0 }) {
209
- if (!span) return;
210
-
211
- span.setStatus(status);
212
- span.end();
213
- debugLog(`Ended span: ${span.name}`, status);
214
- }
215
-
216
- // Track page views (for SPAs)
217
- export function trackPageView(pagePath, pageTitle) {
218
- if (!tracer) return;
219
-
220
- const span = tracer.startSpan('page_view', {
221
- attributes: {
222
- 'page.path': pagePath,
223
- 'page.title': pageTitle || document.title,
224
- 'page.url': window.location.href,
225
- 'page.referrer': document.referrer,
226
- 'portal.type': TELEMETRY_CONFIG.portalType,
227
- },
228
- });
229
-
230
- span.end();
231
- debugLog(`Tracked page view: ${pagePath}`);
232
- }
233
-
234
- // Track custom events
235
- export function trackEvent(eventName, attributes = {}) {
236
- if (!tracer) return;
237
-
238
- const span = tracer.startSpan(`event.${eventName}`, {
239
- attributes: {
240
- 'event.name': eventName,
241
- 'event.timestamp': new Date().toISOString(),
242
- 'portal.type': TELEMETRY_CONFIG.portalType,
243
- ...attributes,
244
- },
245
- });
246
-
247
- span.end();
248
- debugLog(`Tracked event: ${eventName}`, attributes);
249
- }
250
-
251
- // Track errors
252
- export function trackError(error, context = {}) {
253
- if (!tracer) return;
254
-
255
- const span = tracer.startSpan('error', {
256
- attributes: {
257
- 'error.message': error.message || String(error),
258
- 'error.stack': error.stack,
259
- 'error.type': error.name || 'Error',
260
- 'error.context': JSON.stringify(context),
261
- 'page.url': window.location.href,
262
- 'portal.type': TELEMETRY_CONFIG.portalType,
263
- },
264
- });
265
-
266
- span.setStatus({ code: 2, message: error.message });
267
- span.recordException(error);
268
- span.end();
269
-
270
- debugLog(`Tracked error: ${error.message}`, context);
271
- }
272
-
273
- // Track API calls with custom attributes
274
- export function trackAPICall(method, endpoint, status, duration, attributes = {}) {
275
- if (!tracer) return;
276
-
277
- const span = tracer.startSpan('api_call', {
278
- attributes: {
279
- 'http.method': method,
280
- 'http.url': endpoint,
281
- 'http.status_code': status,
282
- 'http.duration_ms': duration,
283
- 'portal.type': TELEMETRY_CONFIG.portalType,
284
- ...attributes,
285
- },
286
- });
287
-
288
- span.setStatus({ code: status >= 400 ? 2 : 0 });
289
- span.end();
290
-
291
- debugLog(`Tracked API call: ${method} ${endpoint}`, { status, duration });
292
- }
293
-
294
- // Track user actions
295
- export function trackUserAction(action, metadata = {}) {
296
- if (!tracer) return;
297
-
298
- const span = tracer.startSpan(`user.${action}`, {
299
- attributes: {
300
- 'user.action': action,
301
- 'user.metadata': JSON.stringify(metadata),
302
- 'page.url': window.location.href,
303
- 'portal.type': TELEMETRY_CONFIG.portalType,
304
- timestamp: new Date().toISOString(),
305
- },
306
- });
307
-
308
- span.end();
309
- debugLog(`Tracked user action: ${action}`, metadata);
310
- }
311
-
312
- // Track performer-specific actions (for performers portal)
313
- export function trackPerformerAction(action, metadata = {}) {
314
- if (!tracer) return;
315
-
316
- const span = tracer.startSpan(`performer.${action}`, {
317
- attributes: {
318
- 'performer.action': action,
319
- 'performer.metadata': JSON.stringify(metadata),
320
- 'page.url': window.location.href,
321
- 'portal.type': TELEMETRY_CONFIG.portalType,
322
- timestamp: new Date().toISOString(),
323
- },
324
- });
325
-
326
- span.end();
327
- debugLog(`Tracked performer action: ${action}`, metadata);
328
- }
329
-
330
- // Shutdown telemetry gracefully
331
- export async function shutdownTelemetry() {
332
- if (tracerProvider) {
333
- try {
334
- await tracerProvider.shutdown();
335
- debugLog('Shutdown complete');
336
- } catch (error) {
337
- console.error('[Telemetry] Shutdown error:', error);
338
- }
339
- }
340
- }
341
-
342
- // Connect client spans with SSR spans using trace context
343
- function connectWithSSRTrace() {
344
- // Check if we have trace context from SSR
345
- const ssrTraceContext = window.__TRACE_CONTEXT__;
346
- if (ssrTraceContext && tracer) {
347
- // Create a span linked to the SSR span
348
- const span = tracer.startSpan('client.init', {
349
- attributes: {
350
- 'span.kind': 'client',
351
- 'client.type': 'browser',
352
- 'portal.type': TELEMETRY_CONFIG.portalType,
353
- 'ssr.trace_id': ssrTraceContext.traceId,
354
- 'ssr.span_id': ssrTraceContext.spanId,
355
- },
356
- links: [
357
- {
358
- context: {
359
- traceId: ssrTraceContext.traceId,
360
- spanId: ssrTraceContext.spanId,
361
- traceFlags: ssrTraceContext.traceFlags || 0,
362
- },
363
- },
364
- ],
365
- });
366
-
367
- span.end();
368
- debugLog('Connected to SSR trace', ssrTraceContext);
369
- }
370
- }
371
-
372
- /**
373
- * Auto-initialize telemetry (call this in your app's entry point)
374
- * This sets up auto-initialization and cleanup handlers
375
- */
376
- export function setupAutoTelemetry() {
377
- if (typeof window === 'undefined') return;
378
-
379
- // Initialize telemetry when DOM is ready
380
- if (document.readyState === 'loading') {
381
- document.addEventListener('DOMContentLoaded', () => {
382
- initTelemetry();
383
- connectWithSSRTrace();
384
- });
385
- } else {
386
- initTelemetry();
387
- connectWithSSRTrace();
388
- }
389
-
390
- // Cleanup on page unload
391
- window.addEventListener('beforeunload', () => {
392
- shutdownTelemetry();
393
- });
394
- }
395
-
396
- // Export config for testing/debugging
397
- export function getTelemetryConfig() {
398
- return { ...TELEMETRY_CONFIG };
399
- }
400
-
401
- // Auto-initialize telemetry on module load
402
- setupAutoTelemetry();
1
+ // @ts-nocheck
2
+ import { ZoneContextManager } from '@opentelemetry/context-zone';
3
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
4
+ import { registerInstrumentations } from '@opentelemetry/instrumentation';
5
+ import { DocumentLoadInstrumentation } from '@opentelemetry/instrumentation-document-load';
6
+ import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
7
+ import { UserInteractionInstrumentation } from '@opentelemetry/instrumentation-user-interaction';
8
+ import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
9
+ import { B3Propagator } from '@opentelemetry/propagator-b3';
10
+ import { resourceFromAttributes } from '@opentelemetry/resources';
11
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
12
+ import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
13
+ import {
14
+ ATTR_SERVICE_NAME,
15
+ ATTR_SERVICE_VERSION,
16
+ } from '@opentelemetry/semantic-conventions';
17
+
18
+ /**
19
+ * Default telemetry configuration.
20
+ * Apps should pass their config to initTelemetry() at startup.
21
+ */
22
+ const TELEMETRY_CONFIG = {
23
+ serviceName: 'micdrop-app',
24
+ serviceVersion: '1.0.0',
25
+ environment: 'development',
26
+ otlpEndpoint: 'http://localhost:4318/v1/traces',
27
+ tracesEnabled: false,
28
+ sampleRate: 0.1,
29
+ consoleDebug: false,
30
+ portalType: 'unknown',
31
+ };
32
+
33
+ // Default CORS URLs for trace propagation - apps can extend this
34
+ const DEFAULT_CORS_URLS = [
35
+ /^http:\/\/localhost:8080\/.*/,
36
+ /^https:\/\/api\.jetbook\.com\/.*/,
37
+ /^https:\/\/api\.micdrop\.com\/.*/,
38
+ /^https:\/\/.*\.get-micdrop\.com\/.*/,
39
+ ];
40
+
41
+ let tracer = null;
42
+ let tracerProvider = null;
43
+
44
+ // Helper to log telemetry events when debugging
45
+ function debugLog(message, data) {
46
+ if (TELEMETRY_CONFIG.consoleDebug) {
47
+ console.log(`[Telemetry] ${message}`, data || '');
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Initialize OpenTelemetry with optional custom configuration
53
+ * @param {Object} customConfig - Override default config
54
+ */
55
+ export function initTelemetry(customConfig = {}) {
56
+ const config = { ...TELEMETRY_CONFIG, ...customConfig };
57
+
58
+ if (!config.tracesEnabled) {
59
+ debugLog('Tracing is disabled');
60
+ return;
61
+ }
62
+
63
+ try {
64
+ // Create resource with service information
65
+ const resource = resourceFromAttributes({
66
+ [ATTR_SERVICE_NAME]: config.serviceName,
67
+ [ATTR_SERVICE_VERSION]: config.serviceVersion,
68
+ 'deployment.environment': config.environment,
69
+ 'browser.user_agent': navigator.userAgent,
70
+ 'browser.language': navigator.language,
71
+ 'browser.platform': navigator.platform,
72
+ 'portal.type': config.portalType,
73
+ });
74
+
75
+ // Configure OTLP exporter
76
+ const exporter = new OTLPTraceExporter({
77
+ url: config.otlpEndpoint,
78
+ headers: {
79
+ 'Content-Type': 'application/json',
80
+ },
81
+ });
82
+
83
+ // Create tracer provider with span processors
84
+ tracerProvider = new WebTracerProvider({
85
+ resource,
86
+ sampler: {
87
+ shouldSample: () => {
88
+ return {
89
+ decision: Math.random() < config.sampleRate ? 1 : 0,
90
+ attributes: [],
91
+ };
92
+ },
93
+ },
94
+ spanProcessors: [
95
+ new BatchSpanProcessor(exporter, {
96
+ maxQueueSize: 100,
97
+ maxExportBatchSize: 50,
98
+ scheduledDelayMillis: 500,
99
+ exportTimeoutMillis: 30000,
100
+ }),
101
+ ],
102
+ });
103
+
104
+ // Set global provider
105
+ tracerProvider.register({
106
+ contextManager: new ZoneContextManager(),
107
+ propagator: new B3Propagator(),
108
+ });
109
+
110
+ // Get CORS URLs (allow custom via config)
111
+ const corsUrls = config.corsUrls || DEFAULT_CORS_URLS;
112
+
113
+ // Register instrumentations
114
+ registerInstrumentations({
115
+ instrumentations: [
116
+ // Document load instrumentation
117
+ new DocumentLoadInstrumentation({
118
+ applyCustomAttributesOnSpan: {
119
+ documentLoad: span => {
120
+ span.setAttribute('page.path', window.location.pathname);
121
+ span.setAttribute('page.search', window.location.search);
122
+ span.setAttribute('page.hash', window.location.hash);
123
+ span.setAttribute('portal.type', config.portalType);
124
+ },
125
+ documentFetch: span => {
126
+ span.setAttribute('document.referrer', document.referrer);
127
+ },
128
+ },
129
+ }),
130
+
131
+ // Fetch instrumentation for API calls
132
+ new FetchInstrumentation({
133
+ propagateTraceHeaderCorsUrls: corsUrls,
134
+ clearTimingResources: true,
135
+ applyCustomAttributesOnSpan: (span, request, response) => {
136
+ const url = new URL(request.url || '');
137
+ span.setAttribute('http.url.pathname', url.pathname);
138
+ span.setAttribute('http.url.search', url.search);
139
+ span.setAttribute('portal.type', config.portalType);
140
+
141
+ if (response) {
142
+ span.setAttribute('http.response.status', response.status);
143
+ span.setAttribute(
144
+ 'http.response.content_length',
145
+ response.headers?.get('content-length') || 0
146
+ );
147
+ }
148
+ },
149
+ }),
150
+
151
+ // XHR instrumentation for legacy AJAX calls
152
+ new XMLHttpRequestInstrumentation({
153
+ propagateTraceHeaderCorsUrls: corsUrls,
154
+ clearTimingResources: true,
155
+ }),
156
+
157
+ // User interaction instrumentation
158
+ new UserInteractionInstrumentation({
159
+ eventNames: ['click', 'submit', 'change'],
160
+ shouldPreventSpanCreation: (eventType, element, span) => {
161
+ // Skip telemetry for certain elements
162
+ if (element.classList?.contains('no-telemetry')) {
163
+ return true;
164
+ }
165
+ // Skip very frequent events
166
+ if (
167
+ eventType === 'change' &&
168
+ element.tagName === 'INPUT' &&
169
+ element.type === 'text'
170
+ ) {
171
+ return true;
172
+ }
173
+ return false;
174
+ },
175
+ }),
176
+ ],
177
+ });
178
+
179
+ // Get tracer instance
180
+ tracer = tracerProvider.getTracer(config.serviceName, config.serviceVersion);
181
+
182
+ debugLog('Telemetry initialized', config);
183
+ debugLog(`Initialized ${config.serviceName} with ${config.sampleRate * 100}% sampling rate`);
184
+ } catch (error) {
185
+ console.error('[Telemetry] Failed to initialize:', error);
186
+ }
187
+ }
188
+
189
+ // Create custom span for tracking specific operations
190
+ export function startSpan(name, options = {}) {
191
+ if (!tracer) return null;
192
+
193
+ const span = tracer.startSpan(name, {
194
+ ...options,
195
+ attributes: {
196
+ 'span.kind': 'internal',
197
+ 'portal.type': TELEMETRY_CONFIG.portalType,
198
+ ...options.attributes,
199
+ },
200
+ });
201
+
202
+ debugLog(`Started span: ${name}`, options.attributes);
203
+ return span;
204
+ }
205
+
206
+ // End a span and set its status
207
+ export function endSpan(span, status = { code: 0 }) {
208
+ if (!span) return;
209
+
210
+ span.setStatus(status);
211
+ span.end();
212
+ debugLog(`Ended span: ${span.name}`, status);
213
+ }
214
+
215
+ // Track page views (for SPAs)
216
+ export function trackPageView(pagePath, pageTitle) {
217
+ if (!tracer) return;
218
+
219
+ const span = tracer.startSpan('page_view', {
220
+ attributes: {
221
+ 'page.path': pagePath,
222
+ 'page.title': pageTitle || document.title,
223
+ 'page.url': window.location.href,
224
+ 'page.referrer': document.referrer,
225
+ 'portal.type': TELEMETRY_CONFIG.portalType,
226
+ },
227
+ });
228
+
229
+ span.end();
230
+ debugLog(`Tracked page view: ${pagePath}`);
231
+ }
232
+
233
+ // Track custom events
234
+ export function trackEvent(eventName, attributes = {}) {
235
+ if (!tracer) return;
236
+
237
+ const span = tracer.startSpan(`event.${eventName}`, {
238
+ attributes: {
239
+ 'event.name': eventName,
240
+ 'event.timestamp': new Date().toISOString(),
241
+ 'portal.type': TELEMETRY_CONFIG.portalType,
242
+ ...attributes,
243
+ },
244
+ });
245
+
246
+ span.end();
247
+ debugLog(`Tracked event: ${eventName}`, attributes);
248
+ }
249
+
250
+ // Track errors
251
+ export function trackError(error, context = {}) {
252
+ if (!tracer) return;
253
+
254
+ const span = tracer.startSpan('error', {
255
+ attributes: {
256
+ 'error.message': error.message || String(error),
257
+ 'error.stack': error.stack,
258
+ 'error.type': error.name || 'Error',
259
+ 'error.context': JSON.stringify(context),
260
+ 'page.url': window.location.href,
261
+ 'portal.type': TELEMETRY_CONFIG.portalType,
262
+ },
263
+ });
264
+
265
+ span.setStatus({ code: 2, message: error.message });
266
+ span.recordException(error);
267
+ span.end();
268
+
269
+ debugLog(`Tracked error: ${error.message}`, context);
270
+ }
271
+
272
+ // Track API calls with custom attributes
273
+ export function trackAPICall(method, endpoint, status, duration, attributes = {}) {
274
+ if (!tracer) return;
275
+
276
+ const span = tracer.startSpan('api_call', {
277
+ attributes: {
278
+ 'http.method': method,
279
+ 'http.url': endpoint,
280
+ 'http.status_code': status,
281
+ 'http.duration_ms': duration,
282
+ 'portal.type': TELEMETRY_CONFIG.portalType,
283
+ ...attributes,
284
+ },
285
+ });
286
+
287
+ span.setStatus({ code: status >= 400 ? 2 : 0 });
288
+ span.end();
289
+
290
+ debugLog(`Tracked API call: ${method} ${endpoint}`, { status, duration });
291
+ }
292
+
293
+ // Track user actions
294
+ export function trackUserAction(action, metadata = {}) {
295
+ if (!tracer) return;
296
+
297
+ const span = tracer.startSpan(`user.${action}`, {
298
+ attributes: {
299
+ 'user.action': action,
300
+ 'user.metadata': JSON.stringify(metadata),
301
+ 'page.url': window.location.href,
302
+ 'portal.type': TELEMETRY_CONFIG.portalType,
303
+ timestamp: new Date().toISOString(),
304
+ },
305
+ });
306
+
307
+ span.end();
308
+ debugLog(`Tracked user action: ${action}`, metadata);
309
+ }
310
+
311
+ // Track performer-specific actions (for performers portal)
312
+ export function trackPerformerAction(action, metadata = {}) {
313
+ if (!tracer) return;
314
+
315
+ const span = tracer.startSpan(`performer.${action}`, {
316
+ attributes: {
317
+ 'performer.action': action,
318
+ 'performer.metadata': JSON.stringify(metadata),
319
+ 'page.url': window.location.href,
320
+ 'portal.type': TELEMETRY_CONFIG.portalType,
321
+ timestamp: new Date().toISOString(),
322
+ },
323
+ });
324
+
325
+ span.end();
326
+ debugLog(`Tracked performer action: ${action}`, metadata);
327
+ }
328
+
329
+ // Shutdown telemetry gracefully
330
+ export async function shutdownTelemetry() {
331
+ if (tracerProvider) {
332
+ try {
333
+ await tracerProvider.shutdown();
334
+ debugLog('Shutdown complete');
335
+ } catch (error) {
336
+ console.error('[Telemetry] Shutdown error:', error);
337
+ }
338
+ }
339
+ }
340
+
341
+ // Connect client spans with SSR spans using trace context
342
+ function connectWithSSRTrace() {
343
+ // Check if we have trace context from SSR
344
+ const ssrTraceContext = window.__TRACE_CONTEXT__;
345
+ if (ssrTraceContext && tracer) {
346
+ // Create a span linked to the SSR span
347
+ const span = tracer.startSpan('client.init', {
348
+ attributes: {
349
+ 'span.kind': 'client',
350
+ 'client.type': 'browser',
351
+ 'portal.type': TELEMETRY_CONFIG.portalType,
352
+ 'ssr.trace_id': ssrTraceContext.traceId,
353
+ 'ssr.span_id': ssrTraceContext.spanId,
354
+ },
355
+ links: [
356
+ {
357
+ context: {
358
+ traceId: ssrTraceContext.traceId,
359
+ spanId: ssrTraceContext.spanId,
360
+ traceFlags: ssrTraceContext.traceFlags || 0,
361
+ },
362
+ },
363
+ ],
364
+ });
365
+
366
+ span.end();
367
+ debugLog('Connected to SSR trace', ssrTraceContext);
368
+ }
369
+ }
370
+
371
+ /**
372
+ * Auto-initialize telemetry (call this in your app's entry point)
373
+ * This sets up auto-initialization and cleanup handlers
374
+ */
375
+ export function setupAutoTelemetry() {
376
+ if (typeof window === 'undefined') return;
377
+
378
+ // Initialize telemetry when DOM is ready
379
+ if (document.readyState === 'loading') {
380
+ document.addEventListener('DOMContentLoaded', () => {
381
+ initTelemetry();
382
+ connectWithSSRTrace();
383
+ });
384
+ } else {
385
+ initTelemetry();
386
+ connectWithSSRTrace();
387
+ }
388
+
389
+ // Cleanup on page unload
390
+ window.addEventListener('beforeunload', () => {
391
+ shutdownTelemetry();
392
+ });
393
+ }
394
+
395
+ // Export config for testing/debugging
396
+ export function getTelemetryConfig() {
397
+ return { ...TELEMETRY_CONFIG };
398
+ }
399
+
400
+ // Auto-initialize telemetry on module load
401
+ setupAutoTelemetry();