@pxlabz/tracey-react 0.0.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 (135) hide show
  1. package/README.md +83 -0
  2. package/dist/LauncherTrigger-5pNAvA05.js +1056 -0
  3. package/dist/LauncherTrigger-5pNAvA05.js.map +1 -0
  4. package/dist/LauncherTrigger-DjXDXHTm.cjs +1055 -0
  5. package/dist/LauncherTrigger-DjXDXHTm.cjs.map +1 -0
  6. package/dist/__tests__/api-client.test.d.ts +2 -0
  7. package/dist/__tests__/api-client.test.d.ts.map +1 -0
  8. package/dist/__tests__/events.test.d.ts +2 -0
  9. package/dist/__tests__/events.test.d.ts.map +1 -0
  10. package/dist/__tests__/survey-logic.test.d.ts +2 -0
  11. package/dist/__tests__/survey-logic.test.d.ts.map +1 -0
  12. package/dist/components/announcements/AnnouncementBell.d.ts +9 -0
  13. package/dist/components/announcements/AnnouncementBell.d.ts.map +1 -0
  14. package/dist/components/announcements/AnnouncementList.d.ts +7 -0
  15. package/dist/components/announcements/AnnouncementList.d.ts.map +1 -0
  16. package/dist/components/announcements/AnnouncementModal.d.ts +9 -0
  17. package/dist/components/announcements/AnnouncementModal.d.ts.map +1 -0
  18. package/dist/components/announcements/headless/AnnouncementClose.d.ts +9 -0
  19. package/dist/components/announcements/headless/AnnouncementClose.d.ts.map +1 -0
  20. package/dist/components/announcements/headless/AnnouncementContent.d.ts +7 -0
  21. package/dist/components/announcements/headless/AnnouncementContent.d.ts.map +1 -0
  22. package/dist/components/announcements/headless/AnnouncementNavigation.d.ts +15 -0
  23. package/dist/components/announcements/headless/AnnouncementNavigation.d.ts.map +1 -0
  24. package/dist/components/announcements/headless/AnnouncementPortal.d.ts +7 -0
  25. package/dist/components/announcements/headless/AnnouncementPortal.d.ts.map +1 -0
  26. package/dist/components/announcements/headless/AnnouncementRoot.d.ts +24 -0
  27. package/dist/components/announcements/headless/AnnouncementRoot.d.ts.map +1 -0
  28. package/dist/components/announcements/headless/AnnouncementSlidePrimitive.d.ts +14 -0
  29. package/dist/components/announcements/headless/AnnouncementSlidePrimitive.d.ts.map +1 -0
  30. package/dist/components/announcements/headless/AnnouncementTrigger.d.ts +9 -0
  31. package/dist/components/announcements/headless/AnnouncementTrigger.d.ts.map +1 -0
  32. package/dist/components/announcements/headless/index.d.ts +8 -0
  33. package/dist/components/announcements/headless/index.d.ts.map +1 -0
  34. package/dist/components/announcements/index.d.ts +4 -0
  35. package/dist/components/announcements/index.d.ts.map +1 -0
  36. package/dist/components/feedback/FeedbackForm.d.ts +8 -0
  37. package/dist/components/feedback/FeedbackForm.d.ts.map +1 -0
  38. package/dist/components/feedback/FeedbackWidget.d.ts +9 -0
  39. package/dist/components/feedback/FeedbackWidget.d.ts.map +1 -0
  40. package/dist/components/feedback/headless/FeedbackClose.d.ts +9 -0
  41. package/dist/components/feedback/headless/FeedbackClose.d.ts.map +1 -0
  42. package/dist/components/feedback/headless/FeedbackContent.d.ts +6 -0
  43. package/dist/components/feedback/headless/FeedbackContent.d.ts.map +1 -0
  44. package/dist/components/feedback/headless/FeedbackFormPrimitive.d.ts +28 -0
  45. package/dist/components/feedback/headless/FeedbackFormPrimitive.d.ts.map +1 -0
  46. package/dist/components/feedback/headless/FeedbackPortal.d.ts +7 -0
  47. package/dist/components/feedback/headless/FeedbackPortal.d.ts.map +1 -0
  48. package/dist/components/feedback/headless/FeedbackRoot.d.ts +16 -0
  49. package/dist/components/feedback/headless/FeedbackRoot.d.ts.map +1 -0
  50. package/dist/components/feedback/headless/FeedbackTrigger.d.ts +9 -0
  51. package/dist/components/feedback/headless/FeedbackTrigger.d.ts.map +1 -0
  52. package/dist/components/feedback/headless/index.d.ts +7 -0
  53. package/dist/components/feedback/headless/index.d.ts.map +1 -0
  54. package/dist/components/feedback/index.d.ts +4 -0
  55. package/dist/components/feedback/index.d.ts.map +1 -0
  56. package/dist/components/index.d.ts +5 -0
  57. package/dist/components/index.d.ts.map +1 -0
  58. package/dist/components/launcher/TraceyLauncher.d.ts +8 -0
  59. package/dist/components/launcher/TraceyLauncher.d.ts.map +1 -0
  60. package/dist/components/launcher/headless/LauncherBadge.d.ts +8 -0
  61. package/dist/components/launcher/headless/LauncherBadge.d.ts.map +1 -0
  62. package/dist/components/launcher/headless/LauncherMenu.d.ts +6 -0
  63. package/dist/components/launcher/headless/LauncherMenu.d.ts.map +1 -0
  64. package/dist/components/launcher/headless/LauncherMenuItem.d.ts +9 -0
  65. package/dist/components/launcher/headless/LauncherMenuItem.d.ts.map +1 -0
  66. package/dist/components/launcher/headless/LauncherPanel.d.ts +6 -0
  67. package/dist/components/launcher/headless/LauncherPanel.d.ts.map +1 -0
  68. package/dist/components/launcher/headless/LauncherPortal.d.ts +7 -0
  69. package/dist/components/launcher/headless/LauncherPortal.d.ts.map +1 -0
  70. package/dist/components/launcher/headless/LauncherRoot.d.ts +21 -0
  71. package/dist/components/launcher/headless/LauncherRoot.d.ts.map +1 -0
  72. package/dist/components/launcher/headless/LauncherTab.d.ts +8 -0
  73. package/dist/components/launcher/headless/LauncherTab.d.ts.map +1 -0
  74. package/dist/components/launcher/headless/LauncherTabContent.d.ts +8 -0
  75. package/dist/components/launcher/headless/LauncherTabContent.d.ts.map +1 -0
  76. package/dist/components/launcher/headless/LauncherTrigger.d.ts +10 -0
  77. package/dist/components/launcher/headless/LauncherTrigger.d.ts.map +1 -0
  78. package/dist/components/launcher/headless/index.d.ts +10 -0
  79. package/dist/components/launcher/headless/index.d.ts.map +1 -0
  80. package/dist/components/launcher/index.d.ts +3 -0
  81. package/dist/components/launcher/index.d.ts.map +1 -0
  82. package/dist/components/surveys/SurveyWidget.d.ts +10 -0
  83. package/dist/components/surveys/SurveyWidget.d.ts.map +1 -0
  84. package/dist/components/surveys/index.d.ts +2 -0
  85. package/dist/components/surveys/index.d.ts.map +1 -0
  86. package/dist/core/api-client.d.ts +33 -0
  87. package/dist/core/api-client.d.ts.map +1 -0
  88. package/dist/core/events.d.ts +11 -0
  89. package/dist/core/events.d.ts.map +1 -0
  90. package/dist/core/index.d.ts +4 -0
  91. package/dist/core/index.d.ts.map +1 -0
  92. package/dist/core/screenshot.d.ts +12 -0
  93. package/dist/core/screenshot.d.ts.map +1 -0
  94. package/dist/core/survey-logic.d.ts +7 -0
  95. package/dist/core/survey-logic.d.ts.map +1 -0
  96. package/dist/headless.cjs +100 -0
  97. package/dist/headless.cjs.map +1 -0
  98. package/dist/headless.d.ts +11 -0
  99. package/dist/headless.d.ts.map +1 -0
  100. package/dist/headless.js +101 -0
  101. package/dist/headless.js.map +1 -0
  102. package/dist/hooks/index.d.ts +7 -0
  103. package/dist/hooks/index.d.ts.map +1 -0
  104. package/dist/hooks/useAnnouncements.d.ts +14 -0
  105. package/dist/hooks/useAnnouncements.d.ts.map +1 -0
  106. package/dist/hooks/useFeedback.d.ts +10 -0
  107. package/dist/hooks/useFeedback.d.ts.map +1 -0
  108. package/dist/hooks/useMyFeedback.d.ts +16 -0
  109. package/dist/hooks/useMyFeedback.d.ts.map +1 -0
  110. package/dist/hooks/useSurvey.d.ts +22 -0
  111. package/dist/hooks/useSurvey.d.ts.map +1 -0
  112. package/dist/hooks/useTracey.d.ts +3 -0
  113. package/dist/hooks/useTracey.d.ts.map +1 -0
  114. package/dist/hooks/useTraceyEvents.d.ts +14 -0
  115. package/dist/hooks/useTraceyEvents.d.ts.map +1 -0
  116. package/dist/index.cjs +4913 -0
  117. package/dist/index.cjs.map +1 -0
  118. package/dist/index.d.ts +19 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +4892 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/lib/utils.d.ts +3 -0
  123. package/dist/lib/utils.d.ts.map +1 -0
  124. package/dist/provider/MockTraceyProvider.d.ts +14 -0
  125. package/dist/provider/MockTraceyProvider.d.ts.map +1 -0
  126. package/dist/provider/TraceyProvider.d.ts +11 -0
  127. package/dist/provider/TraceyProvider.d.ts.map +1 -0
  128. package/dist/provider/context.d.ts +19 -0
  129. package/dist/provider/context.d.ts.map +1 -0
  130. package/dist/provider/index.d.ts +4 -0
  131. package/dist/provider/index.d.ts.map +1 -0
  132. package/dist/styles.css +800 -0
  133. package/dist/types.d.ts +188 -0
  134. package/dist/types.d.ts.map +1 -0
  135. package/package.json +94 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/hooks/useMyFeedback.ts","../src/hooks/useSurvey.ts","../src/core/screenshot.ts","../src/components/feedback/FeedbackForm.tsx","../src/components/feedback/FeedbackWidget.tsx","../src/components/announcements/AnnouncementModal.tsx","../src/components/announcements/AnnouncementBell.tsx","../src/components/announcements/AnnouncementList.tsx","../src/components/launcher/TraceyLauncher.tsx","../src/core/survey-logic.ts","../src/components/surveys/SurveyWidget.tsx","../../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.bun/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts"],"sourcesContent":["import { useState, useCallback, useEffect, useRef } from \"react\";\n\nimport type { MyFeedbackItem, PaginatedResponse } from \"../types\";\nimport { useTracey } from \"./useTracey\";\n\nexport interface UseMyFeedbackReturn {\n\tfeedback: MyFeedbackItem[];\n\tisLoading: boolean;\n\terror: Error | null;\n\tpagination: {\n\t\ttotal: number;\n\t\tlimit: number;\n\t\toffset: number;\n\t\thasMore: boolean;\n\t} | null;\n\trefetch: () => Promise<void>;\n\tloadMore: () => Promise<void>;\n}\n\nconst DEFAULT_LIMIT = 20;\n\nexport function useMyFeedback(): UseMyFeedbackReturn {\n\tconst { client, isIdentified } = useTracey();\n\tconst [feedback, setFeedback] = useState<MyFeedbackItem[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [pagination, setPagination] =\n\t\tuseState<UseMyFeedbackReturn[\"pagination\"]>(null);\n\tconst isFetching = useRef(false);\n\n\tconst fetchFeedback = useCallback(\n\t\tasync (offset = 0, append = false) => {\n\t\t\tif (isFetching.current) return;\n\t\t\tisFetching.current = true;\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tconst result: PaginatedResponse<MyFeedbackItem> =\n\t\t\t\t\tawait client.getMyFeedback({\n\t\t\t\t\t\tlimit: DEFAULT_LIMIT,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t});\n\n\t\t\t\tif (append) {\n\t\t\t\t\tsetFeedback((prev) => [...prev, ...result.data]);\n\t\t\t\t} else {\n\t\t\t\t\tsetFeedback(result.data);\n\t\t\t\t}\n\t\t\t\tsetPagination(result.pagination);\n\t\t\t} catch (err) {\n\t\t\t\tconst fetchError =\n\t\t\t\t\terr instanceof Error ? err : new Error(\"Failed to fetch feedback\");\n\t\t\t\tsetError(fetchError);\n\t\t\t} finally {\n\t\t\t\tsetIsLoading(false);\n\t\t\t\tisFetching.current = false;\n\t\t\t}\n\t\t},\n\t\t[client],\n\t);\n\n\t// Fetch on mount when identified\n\tuseEffect(() => {\n\t\tif (isIdentified) {\n\t\t\tfetchFeedback();\n\t\t}\n\t}, [isIdentified, fetchFeedback]);\n\n\tconst refetch = useCallback(async () => {\n\t\tawait fetchFeedback(0, false);\n\t}, [fetchFeedback]);\n\n\tconst loadMore = useCallback(async () => {\n\t\tif (!pagination?.hasMore) return;\n\t\tawait fetchFeedback(pagination.offset + pagination.limit, true);\n\t}, [fetchFeedback, pagination]);\n\n\treturn {\n\t\tfeedback,\n\t\tisLoading,\n\t\terror,\n\t\tpagination,\n\t\trefetch,\n\t\tloadMore,\n\t};\n}\n","import { useCallback, useState } from \"react\";\nimport type { Survey, SurveyAnswerInput, SurveyResponseResult } from \"../types\";\nimport { useTracey } from \"./useTracey\";\n\nexport interface UseSurveyReturn {\n\tloadActiveSurvey: (context?: {\n\t\tanonymousSessionId?: string;\n\t\turl?: string;\n\t}) => Promise<Survey | null>;\n\tsubmitSurveyResponse: (\n\t\tsurveyId: number,\n\t\tpayload: {\n\t\t\tanswers: SurveyAnswerInput[];\n\t\t\tanonymousSessionId?: string;\n\t\t\trespondentEmail?: string;\n\t\t\trespondentName?: string;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t},\n\t) => Promise<SurveyResponseResult | null>;\n\tactiveSurvey: Survey | null;\n\tisLoading: boolean;\n\tisSubmitting: boolean;\n\terror: Error | null;\n\tdismissSurvey: (surveyId: number) => void;\n\treset: () => void;\n}\n\nexport function useSurvey(): UseSurveyReturn {\n\tconst { client, events } = useTracey();\n\tconst [activeSurvey, setActiveSurvey] = useState<Survey | null>(null);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [isSubmitting, setIsSubmitting] = useState(false);\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst loadActiveSurvey = useCallback(\n\t\tasync (context?: { anonymousSessionId?: string; url?: string }) => {\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst survey = await client.getActiveSurvey(context);\n\t\t\t\tsetActiveSurvey(survey);\n\t\t\t\tif (survey) {\n\t\t\t\t\tevents.emit(\"survey:shown\", { survey });\n\t\t\t\t}\n\t\t\t\treturn survey;\n\t\t\t} catch (err) {\n\t\t\t\tconst resolved =\n\t\t\t\t\terr instanceof Error ? err : new Error(\"Failed to load active survey\");\n\t\t\t\tsetError(resolved);\n\t\t\t\tevents.emit(\"survey:error\", { error: resolved });\n\t\t\t\treturn null;\n\t\t\t} finally {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t},\n\t\t[client, events],\n\t);\n\n\tconst submitSurveyResponse = useCallback(\n\t\tasync (\n\t\t\tsurveyId: number,\n\t\t\tpayload: {\n\t\t\t\tanswers: SurveyAnswerInput[];\n\t\t\t\tanonymousSessionId?: string;\n\t\t\t\trespondentEmail?: string;\n\t\t\t\trespondentName?: string;\n\t\t\t\tmetadata?: Record<string, unknown>;\n\t\t\t},\n\t\t): Promise<SurveyResponseResult | null> => {\n\t\t\tsetIsSubmitting(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst response = await client.submitSurveyResponse(surveyId, payload);\n\t\t\t\tevents.emit(\"survey:submitted\", { surveyId, response });\n\t\t\t\treturn response;\n\t\t\t} catch (err) {\n\t\t\t\tconst resolved =\n\t\t\t\t\terr instanceof Error\n\t\t\t\t\t\t? err\n\t\t\t\t\t\t: new Error(\"Failed to submit survey response\");\n\t\t\t\tsetError(resolved);\n\t\t\t\tevents.emit(\"survey:error\", { error: resolved, surveyId });\n\t\t\t\treturn null;\n\t\t\t} finally {\n\t\t\t\tsetIsSubmitting(false);\n\t\t\t}\n\t\t},\n\t\t[client, events],\n\t);\n\n\tconst dismissSurvey = useCallback(\n\t\t(surveyId: number) => {\n\t\t\tevents.emit(\"survey:dismissed\", { surveyId });\n\t\t\tsetActiveSurvey((current) => (current?.id === surveyId ? null : current));\n\t\t},\n\t\t[events],\n\t);\n\n\tconst reset = useCallback(() => {\n\t\tsetActiveSurvey(null);\n\t\tsetError(null);\n\t}, []);\n\n\treturn {\n\t\tloadActiveSurvey,\n\t\tsubmitSurveyResponse,\n\t\tactiveSurvey,\n\t\tisLoading,\n\t\tisSubmitting,\n\t\terror,\n\t\tdismissSurvey,\n\t\treset,\n\t};\n}\n","/**\n * Captures a screenshot of the current page.\n * Tries native getDisplayMedia first, falls back to html2canvas if available.\n * Returns base64-encoded image data.\n */\nexport async function captureScreenshot(): Promise<string | null> {\n\t// SSR guard\n\tif (typeof window === \"undefined\" || typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\t// Try native screen capture first (requires user permission)\n\ttry {\n\t\tconst stream = await navigator.mediaDevices.getDisplayMedia({\n\t\t\tvideo: { displaySurface: \"browser\" } as MediaTrackConstraints,\n\t\t});\n\n\t\tconst video = document.createElement(\"video\");\n\t\tvideo.srcObject = stream;\n\t\tawait video.play();\n\n\t\t// Wait for video metadata to load before reading dimensions\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tif (video.readyState >= 1) {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\tvideo.addEventListener(\"loadedmetadata\", () => resolve(), {\n\t\t\t\t\tonce: true,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\tcanvas.width = video.videoWidth;\n\t\tcanvas.height = video.videoHeight;\n\n\t\tconst ctx = canvas.getContext(\"2d\");\n\t\tif (ctx) {\n\t\t\tctx.drawImage(video, 0, 0);\n\t\t}\n\n\t\t// Stop all tracks\n\t\tstream.getTracks().forEach((track) => track.stop());\n\n\t\treturn canvas.toDataURL(\"image/png\");\n\t} catch {\n\t\t// User denied permission or API not available\n\t\t// Fall back to html2canvas if available\n\t}\n\n\t// Try html2canvas fallback\n\ttry {\n\t\tconst html2canvas = await import(\"html2canvas\").then((m) => m.default);\n\t\tconst canvas = await html2canvas(document.body, {\n\t\t\tuseCORS: true,\n\t\t\tallowTaint: false,\n\t\t\tlogging: false,\n\t\t});\n\t\treturn canvas.toDataURL(\"image/png\");\n\t} catch {\n\t\t// html2canvas not available or failed\n\t\tconsole.warn(\n\t\t\t\"Screenshot capture failed. Install html2canvas for DOM-based screenshots.\",\n\t\t);\n\t\treturn null;\n\t}\n}\n\n/**\n * Checks if screenshot capture is likely available.\n * Note: This doesn't guarantee permission will be granted.\n */\nexport function isScreenshotSupported(): boolean {\n\tif (typeof window === \"undefined\") {\n\t\treturn false;\n\t}\n\n\t// Only return true if getDisplayMedia is available\n\t// html2canvas is a fallback but may not be installed\n\treturn typeof navigator?.mediaDevices?.getDisplayMedia === \"function\";\n}\n","import { type CSSProperties } from \"react\";\n\nimport { captureScreenshot } from \"../../core/screenshot\";\nimport type { TraceyTheme, FeedbackType } from \"../../types\";\nimport { FeedbackClose } from \"./headless/FeedbackClose\";\nimport { FeedbackFormPrimitive } from \"./headless/FeedbackFormPrimitive\";\n\nexport interface FeedbackFormProps {\n\ttheme?: TraceyTheme;\n\tonSuccess?: () => void;\n\tshowScreenshot?: boolean;\n}\n\nconst feedbackTypes: { value: FeedbackType; label: string }[] = [\n\t{ value: \"general\", label: \"General\" },\n\t{ value: \"bug\", label: \"Bug Report\" },\n\t{ value: \"feature_request\", label: \"Feature Request\" },\n];\n\nexport function FeedbackForm({\n\ttheme,\n\tonSuccess,\n\tshowScreenshot = true,\n}: FeedbackFormProps) {\n\tconst primaryColor = theme?.primaryColor ?? \"#6366f1\";\n\n\tconst inputStyles: CSSProperties = {\n\t\twidth: \"100%\",\n\t\tpadding: \"10px 12px\",\n\t\tborder: \"1px solid #e5e7eb\",\n\t\tborderRadius: theme?.borderRadius ?? 6,\n\t\tfontSize: 14,\n\t\tfontFamily: theme?.fontFamily ?? \"inherit\",\n\t\tboxSizing: \"border-box\",\n\t};\n\n\tconst labelStyles: CSSProperties = {\n\t\tdisplay: \"block\",\n\t\tmarginBottom: 6,\n\t\tfontSize: 14,\n\t\tfontWeight: 500,\n\t\tcolor: theme?.textColor ?? \"#374151\",\n\t};\n\n\treturn (\n\t\t<FeedbackFormPrimitive onSuccess={onSuccess}>\n\t\t\t{({\n\t\t\t\ttitle,\n\t\t\t\tsetTitle,\n\t\t\t\tdescription,\n\t\t\t\tsetDescription,\n\t\t\t\ttype,\n\t\t\t\tsetType,\n\t\t\t\tscreenshot,\n\t\t\t\tsetScreenshot,\n\t\t\t\tisSubmitting,\n\t\t\t\terror,\n\t\t\t\thandleSubmit,\n\t\t\t}) => (\n\t\t\t\t<form onSubmit={handleSubmit}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tmarginBottom: 20,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<h3\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: 18,\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tcolor: theme?.textColor ?? \"#111827\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tSend Feedback\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<FeedbackClose>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\tpadding: 4,\n\t\t\t\t\t\t\t\t\tcolor: \"#9ca3af\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t✕\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</FeedbackClose>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{error && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tpadding: \"10px 12px\",\n\t\t\t\t\t\t\t\tbackgroundColor: \"#fef2f2\",\n\t\t\t\t\t\t\t\tborder: \"1px solid #fecaca\",\n\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\tmarginBottom: 16,\n\t\t\t\t\t\t\t\tcolor: \"#dc2626\",\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{error.message}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div style={{ marginBottom: 16 }}>\n\t\t\t\t\t\t<label style={labelStyles}>Type</label>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tvalue={type}\n\t\t\t\t\t\t\tonChange={(e) => setType(e.target.value as FeedbackType)}\n\t\t\t\t\t\t\tstyle={inputStyles}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{feedbackTypes.map((ft) => (\n\t\t\t\t\t\t\t\t<option key={ft.value} value={ft.value}>\n\t\t\t\t\t\t\t\t\t{ft.label}\n\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div style={{ marginBottom: 16 }}>\n\t\t\t\t\t\t<label style={labelStyles}>Title *</label>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tvalue={title}\n\t\t\t\t\t\t\tonChange={(e) => setTitle(e.target.value)}\n\t\t\t\t\t\t\tplaceholder=\"Brief summary...\"\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\tstyle={inputStyles}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div style={{ marginBottom: 16 }}>\n\t\t\t\t\t\t<label style={labelStyles}>Description</label>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tvalue={description}\n\t\t\t\t\t\t\tonChange={(e) => setDescription(e.target.value)}\n\t\t\t\t\t\t\tplaceholder=\"Tell us more...\"\n\t\t\t\t\t\t\trows={4}\n\t\t\t\t\t\t\tstyle={{ ...inputStyles, resize: \"vertical\" }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{showScreenshot && (\n\t\t\t\t\t\t<div style={{ marginBottom: 16 }}>\n\t\t\t\t\t\t\t<label style={labelStyles}>Screenshot</label>\n\t\t\t\t\t\t\t{screenshot ? (\n\t\t\t\t\t\t\t\t<div style={{ position: \"relative\" }}>\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={screenshot}\n\t\t\t\t\t\t\t\t\t\talt=\"Screenshot\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid #e5e7eb\",\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => setScreenshot(null)}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t\ttop: 8,\n\t\t\t\t\t\t\t\t\t\t\tright: 8,\n\t\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(0,0,0,0.5)\",\n\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\t\tborderRadius: 4,\n\t\t\t\t\t\t\t\t\t\t\tpadding: \"4px 8px\",\n\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tRemove\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\t\tconst img = await captureScreenshot();\n\t\t\t\t\t\t\t\t\t\tif (img) setScreenshot(img);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t...inputStyles,\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#f9fafb\",\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\t\t\t\t\tcolor: \"#6b7280\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t📷 Capture Screenshot\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tdisabled={isSubmitting || !title.trim()}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tpadding: \"12px 16px\",\n\t\t\t\t\t\t\tbackgroundColor: isSubmitting ? \"#9ca3af\" : primaryColor,\n\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\tborderRadius: theme?.borderRadius ?? 6,\n\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\tcursor: isSubmitting ? \"not-allowed\" : \"pointer\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSubmitting ? \"Sending...\" : \"Send Feedback\"}\n\t\t\t\t\t</button>\n\t\t\t\t</form>\n\t\t\t)}\n\t\t</FeedbackFormPrimitive>\n\t);\n}\n","import { type CSSProperties } from \"react\";\n\nimport { FeedbackForm } from \"./FeedbackForm\";\nimport type { Position, TraceyTheme } from \"../../types\";\nimport { FeedbackContent } from \"./headless/FeedbackContent\";\nimport { FeedbackPortal } from \"./headless/FeedbackPortal\";\nimport { FeedbackRoot } from \"./headless/FeedbackRoot\";\nimport { FeedbackTrigger } from \"./headless/FeedbackTrigger\";\n\nexport interface FeedbackWidgetProps {\n\tposition?: Position;\n\ttheme?: TraceyTheme;\n\ttriggerLabel?: string;\n\tclassName?: string;\n}\n\nfunction getPositionStyles(position: Position): CSSProperties {\n\tif (typeof position === \"object\" && \"x\" in position) {\n\t\treturn {\n\t\t\tposition: \"fixed\",\n\t\t\tleft: position.x,\n\t\t\ttop: position.y,\n\t\t};\n\t}\n\n\tconst base: CSSProperties = { position: \"fixed\" };\n\n\tswitch (position) {\n\t\tcase \"top-left\":\n\t\t\treturn { ...base, top: 16, left: 16 };\n\t\tcase \"top-right\":\n\t\t\treturn { ...base, top: 16, right: 16 };\n\t\tcase \"bottom-left\":\n\t\t\treturn { ...base, bottom: 16, left: 16 };\n\t\tcase \"bottom-right\":\n\t\tdefault:\n\t\t\treturn { ...base, bottom: 16, right: 16 };\n\t}\n}\n\nexport function FeedbackWidget({\n\tposition = \"bottom-right\",\n\ttheme,\n\ttriggerLabel = \"Feedback\",\n\tclassName,\n}: FeedbackWidgetProps) {\n\tconst positionStyles = getPositionStyles(position);\n\tconst primaryColor = theme?.primaryColor ?? \"#6366f1\";\n\n\treturn (\n\t\t<FeedbackRoot>\n\t\t\t<div style={positionStyles} className={className}>\n\t\t\t\t<FeedbackTrigger>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"tracey-feedback-trigger\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: primaryColor,\n\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\tborderRadius: theme?.borderRadius ?? 8,\n\t\t\t\t\t\t\tpadding: \"10px 16px\",\n\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\tfontFamily: theme?.fontFamily ?? \"inherit\",\n\t\t\t\t\t\t\tboxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{triggerLabel}\n\t\t\t\t\t</button>\n\t\t\t\t</FeedbackTrigger>\n\n\t\t\t\t<FeedbackPortal>\n\t\t\t\t\t<FeedbackContent\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackgroundColor: theme?.backgroundColor ?? \"#fff\",\n\t\t\t\t\t\t\t\tborderRadius: theme?.borderRadius ?? 12,\n\t\t\t\t\t\t\t\tpadding: 24,\n\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\tmaxWidth: 400,\n\t\t\t\t\t\t\t\tboxShadow: \"0 4px 20px rgba(0, 0, 0, 0.15)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<FeedbackForm theme={theme} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</FeedbackContent>\n\t\t\t\t</FeedbackPortal>\n\t\t\t</div>\n\t\t</FeedbackRoot>\n\t);\n}\n","import { AnnouncementClose } from \"./headless/AnnouncementClose\";\nimport { AnnouncementContent } from \"./headless/AnnouncementContent\";\nimport { AnnouncementNavigation } from \"./headless/AnnouncementNavigation\";\nimport { AnnouncementPortal } from \"./headless/AnnouncementPortal\";\nimport { AnnouncementRoot } from \"./headless/AnnouncementRoot\";\nimport { useAnnouncements } from \"../../hooks/useAnnouncements\";\nimport type { TraceyTheme, Announcement } from \"../../types\";\n\nexport interface AnnouncementModalProps {\n\ttheme?: TraceyTheme;\n\tbehavior?: \"queue\" | \"latest\";\n\tslideMode?: \"carousel\" | \"dots\";\n\tonDismiss?: (announcement: Announcement) => void;\n}\n\nexport function AnnouncementModal({\n\ttheme,\n\tbehavior = \"queue\",\n\tslideMode = \"carousel\",\n\tonDismiss,\n}: AnnouncementModalProps) {\n\tconst { unread } = useAnnouncements();\n\n\t// \"latest\" shows most recently published, \"queue\" uses original array order (FIFO)\n\tconst currentAnnouncement =\n\t\tbehavior === \"latest\"\n\t\t\t? [...unread].sort(\n\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\tnew Date(b.publishAt ?? 0).getTime() -\n\t\t\t\t\t\tnew Date(a.publishAt ?? 0).getTime(),\n\t\t\t\t)[0]\n\t\t\t: unread[0];\n\n\tif (!currentAnnouncement) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<AnnouncementRoot\n\t\t\tannouncement={currentAnnouncement}\n\t\t\tdefaultOpen={true}\n\t\t\tonOpenChange={(open) => {\n\t\t\t\tif (!open && currentAnnouncement) {\n\t\t\t\t\t// View tracking happens in AnnouncementContent when modal opens\n\t\t\t\t\tonDismiss?.(currentAnnouncement);\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<AnnouncementPortal>\n\t\t\t\t<AnnouncementContent\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tbackgroundColor: \"rgba(0, 0, 0, 0.5)\",\n\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: theme?.backgroundColor ?? \"#fff\",\n\t\t\t\t\t\t\tborderRadius: theme?.borderRadius ?? 12,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tmaxWidth: 480,\n\t\t\t\t\t\t\tmaxHeight: \"80vh\",\n\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\tboxShadow: \"0 4px 20px rgba(0, 0, 0, 0.15)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<AnnouncementSlideContent\n\t\t\t\t\t\t\tannouncement={currentAnnouncement}\n\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\tslideMode={slideMode}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</AnnouncementContent>\n\t\t\t</AnnouncementPortal>\n\t\t</AnnouncementRoot>\n\t);\n}\n\ninterface AnnouncementSlideContentProps {\n\tannouncement: Announcement;\n\ttheme?: TraceyTheme;\n\tslideMode: \"carousel\" | \"dots\";\n}\n\nfunction AnnouncementSlideContent({\n\tannouncement,\n\ttheme,\n\tslideMode,\n}: AnnouncementSlideContentProps) {\n\tconst primaryColor = theme?.primaryColor ?? \"#6366f1\";\n\tconst { markCtaClicked } = useAnnouncements();\n\n\treturn (\n\t\t<AnnouncementNavigation>\n\t\t\t{({\n\t\t\t\tcurrentSlide,\n\t\t\t\ttotalSlides,\n\t\t\t\tcanGoNext,\n\t\t\t\tcanGoPrev,\n\t\t\t\tnextSlide,\n\t\t\t\tprevSlide,\n\t\t\t\tgoToSlide,\n\t\t\t}) => {\n\t\t\t\tconst slide = announcement.slides[currentSlide];\n\t\t\t\tif (!slide) return null;\n\n\t\t\t\treturn (\n\t\t\t\t\t<div style={{ position: \"relative\" }}>\n\t\t\t\t\t\t{/* Close button */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{ position: \"absolute\", top: 12, right: 12, zIndex: 1 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<AnnouncementClose>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackground: \"rgba(0,0,0,0.3)\",\n\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\t\t\twidth: 32,\n\t\t\t\t\t\t\t\t\t\theight: 32,\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\t\t\tfontSize: 16,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t✕\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</AnnouncementClose>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Image */}\n\t\t\t\t\t\t{slide.imageUrl && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\theight: 200,\n\t\t\t\t\t\t\t\t\tbackgroundImage: `url(${slide.imageUrl})`,\n\t\t\t\t\t\t\t\t\tbackgroundSize: \"cover\",\n\t\t\t\t\t\t\t\t\tbackgroundPosition: \"center\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Content */}\n\t\t\t\t\t\t<div style={{ padding: 24 }}>\n\t\t\t\t\t\t\t{slide.title && (\n\t\t\t\t\t\t\t\t<h3\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tmargin: \"0 0 12px\",\n\t\t\t\t\t\t\t\t\t\tfontSize: 20,\n\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\t\t\tcolor: theme?.textColor ?? \"#111827\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{slide.title}\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{slide.body && (\n\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tmargin: \"0 0 20px\",\n\t\t\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t\t\t\tlineHeight: 1.6,\n\t\t\t\t\t\t\t\t\t\tcolor: \"#6b7280\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{slide.body}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* CTA Button */}\n\t\t\t\t\t\t\t{slide.ctaText && slide.ctaUrl && (\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\thref={slide.ctaUrl}\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\tonClick={() => markCtaClicked(announcement.id, currentSlide)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\t\t\t\t\t\t\tpadding: \"10px 20px\",\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: primaryColor,\n\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t\t\t\tborderRadius: theme?.borderRadius ?? 6,\n\t\t\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{slide.ctaText}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Navigation */}\n\t\t\t\t\t\t\t{totalSlides > 1 && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\tmarginTop: 20,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{slideMode === \"carousel\" ? (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={prevSlide}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!canGoPrev}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"8px 16px\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid #e5e7eb\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: canGoPrev ? \"pointer\" : \"not-allowed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\topacity: canGoPrev ? 1 : 0.5,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t← Previous\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<span style={{ color: \"#9ca3af\", fontSize: 14 }}>\n\t\t\t\t\t\t\t\t\t\t\t\t{currentSlide + 1} / {totalSlides}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={nextSlide}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!canGoNext}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"8px 16px\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tborder: \"1px solid #e5e7eb\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: canGoNext ? \"pointer\" : \"not-allowed\",\n\t\t\t\t\t\t\t\t\t\t\t\t\topacity: canGoNext ? 1 : 0.5,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tNext →\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{Array.from({ length: totalSlides }).map((_, i) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => goToSlide(i)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twidth: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ti === currentSlide ? primaryColor : \"#e5e7eb\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}}\n\t\t</AnnouncementNavigation>\n\t);\n}\n","import { useState, useEffect, useRef } from \"react\";\n\nimport { AnnouncementModal } from \"./AnnouncementModal\";\nimport { useAnnouncements } from \"../../hooks/useAnnouncements\";\nimport type { Position, TraceyTheme } from \"../../types\";\n\nexport interface AnnouncementBellProps {\n\tposition?: Position;\n\ttheme?: TraceyTheme;\n\tshowCount?: boolean;\n\tonClick?: \"modal\" | \"list\";\n}\n\nfunction getPositionStyles(position: Position): React.CSSProperties {\n\tif (typeof position === \"object\" && \"x\" in position) {\n\t\treturn {\n\t\t\tposition: \"fixed\",\n\t\t\tleft: position.x,\n\t\t\ttop: position.y,\n\t\t};\n\t}\n\n\tconst base: React.CSSProperties = { position: \"fixed\" };\n\n\tswitch (position) {\n\t\tcase \"top-left\":\n\t\t\treturn { ...base, top: 16, left: 16 };\n\t\tcase \"top-right\":\n\t\t\treturn { ...base, top: 16, right: 16 };\n\t\tcase \"bottom-left\":\n\t\t\treturn { ...base, bottom: 16, left: 16 };\n\t\tcase \"bottom-right\":\n\t\tdefault:\n\t\t\treturn { ...base, bottom: 16, right: 16 };\n\t}\n}\n\nconst BOUNCE_KEYFRAMES = `\n@keyframes tracey-badge-bounce {\n\t0% { transform: scale(1); }\n\t30% { transform: scale(1.3); }\n\t50% { transform: scale(0.9); }\n\t70% { transform: scale(1.1); }\n\t100% { transform: scale(1); }\n}\n`;\n\nexport function AnnouncementBell({\n\tposition = \"top-right\",\n\ttheme,\n\tshowCount = true,\n\tonClick: _onClick = \"modal\",\n}: AnnouncementBellProps) {\n\tconst { unreadCount } = useAnnouncements();\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [animating, setAnimating] = useState(false);\n\tconst prevCountRef = useRef(unreadCount);\n\tconst positionStyles = getPositionStyles(position);\n\tconst primaryColor = theme?.primaryColor ?? \"#6366f1\";\n\n\t// Trigger bounce animation when unread count increases\n\tuseEffect(() => {\n\t\tif (unreadCount > prevCountRef.current && unreadCount > 0) {\n\t\t\tsetAnimating(true);\n\t\t\tconst timeout = setTimeout(() => setAnimating(false), 600);\n\t\t\treturn () => clearTimeout(timeout);\n\t\t}\n\t\tprevCountRef.current = unreadCount;\n\t}, [unreadCount]);\n\n\t// Update ref after animation check\n\tuseEffect(() => {\n\t\tprevCountRef.current = unreadCount;\n\t}, [unreadCount]);\n\n\treturn (\n\t\t<>\n\t\t\t<style>{BOUNCE_KEYFRAMES}</style>\n\t\t\t<div style={positionStyles}>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => setShowModal(true)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\twidth: 44,\n\t\t\t\t\t\theight: 44,\n\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\tbackgroundColor: theme?.backgroundColor ?? \"#fff\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tboxShadow: \"0 2px 8px rgba(0, 0, 0, 0.15)\",\n\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t\taria-label={`Announcements${unreadCount > 0 ? ` (${unreadCount} unread)` : \"\"}`}\n\t\t\t\t>\n\t\t\t\t\t{/* Bell icon */}\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke={theme?.textColor ?? \"#374151\"}\n\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n\t\t\t\t\t\t<path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n\t\t\t\t\t</svg>\n\n\t\t\t\t\t{/* Badge */}\n\t\t\t\t\t{showCount && unreadCount > 0 && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tdata-testid=\"announcement-badge\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\ttop: -4,\n\t\t\t\t\t\t\t\tright: -4,\n\t\t\t\t\t\t\t\tminWidth: 20,\n\t\t\t\t\t\t\t\theight: 20,\n\t\t\t\t\t\t\t\tborderRadius: 10,\n\t\t\t\t\t\t\t\tbackgroundColor: primaryColor,\n\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\tpadding: \"0 6px\",\n\t\t\t\t\t\t\t\tanimation: animating\n\t\t\t\t\t\t\t\t\t? \"tracey-badge-bounce 0.6s ease-in-out\"\n\t\t\t\t\t\t\t\t\t: \"none\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{unreadCount > 99 ? \"99+\" : unreadCount}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t{showModal && unreadCount > 0 && (\n\t\t\t\t<AnnouncementModal\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tonDismiss={() => setShowModal(false)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n","import type { CSSProperties } from \"react\";\n\nimport { useAnnouncements } from \"../../hooks/useAnnouncements\";\nimport type { TraceyTheme, Announcement } from \"../../types\";\n\nexport interface AnnouncementListProps {\n\ttheme?: TraceyTheme;\n\tmaxHeight?: number;\n}\n\nfunction formatRelativeTime(dateStr: string | null): string {\n\tif (!dateStr) return \"\";\n\tconst now = Date.now();\n\tconst date = new Date(dateStr).getTime();\n\tconst diffMs = now - date;\n\tconst diffMins = Math.floor(diffMs / 60_000);\n\n\tif (diffMins < 1) return \"Just now\";\n\tif (diffMins < 60) return `${diffMins}m ago`;\n\tconst diffHours = Math.floor(diffMins / 60);\n\tif (diffHours < 24) return `${diffHours}h ago`;\n\tconst diffDays = Math.floor(diffHours / 24);\n\tif (diffDays < 30) return `${diffDays}d ago`;\n\tconst diffMonths = Math.floor(diffDays / 30);\n\treturn `${diffMonths}mo ago`;\n}\n\nfunction getBodyPreview(announcement: Announcement): string {\n\tconst slide = announcement.slides[0];\n\tif (!slide?.body) return \"\";\n\treturn slide.body.length > 120\n\t\t? slide.body.slice(0, 120) + \"...\"\n\t\t: slide.body;\n}\n\nexport function AnnouncementList({\n\ttheme,\n\tmaxHeight = 360,\n}: AnnouncementListProps) {\n\tconst {\n\t\tannouncements,\n\t\tunreadCount,\n\t\tisLoading,\n\t\tmarkAllAsRead,\n\t\tmarkAsViewed,\n\t\tmarkCtaClicked,\n\t} = useAnnouncements();\n\n\tconst primaryColor = theme?.primaryColor ?? \"#6366f1\";\n\tconst textColor = theme?.textColor ?? \"#374151\";\n\tconst bgColor = theme?.backgroundColor ?? \"#fff\";\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<div style={{ padding: 20 }}>\n\t\t\t\t{[1, 2, 3].map((i) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\theight: 72,\n\t\t\t\t\t\t\tbackgroundColor: \"#f3f4f6\",\n\t\t\t\t\t\t\tborderRadius: 8,\n\t\t\t\t\t\t\tmarginBottom: 8,\n\t\t\t\t\t\t\tanimation: \"tracey-skeleton-pulse 1.5s ease-in-out infinite\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (announcements.length === 0) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tpadding: \"40px 20px\",\n\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\tcolor: \"#9ca3af\",\n\t\t\t\t\tfontSize: 14,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\twidth=\"40\"\n\t\t\t\t\theight=\"40\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"#d1d5db\"\n\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\tstyle={{ margin: \"0 auto 12px\" }}\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n\t\t\t\t\t<path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n\t\t\t\t</svg>\n\t\t\t\t<p style={{ margin: 0 }}>No announcements yet</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst headerStyle: CSSProperties = {\n\t\tdisplay: \"flex\",\n\t\tjustifyContent: \"space-between\",\n\t\talignItems: \"center\",\n\t\tpadding: \"0 16px 12px\",\n\t\tborderBottom: \"1px solid #f3f4f6\",\n\t};\n\n\treturn (\n\t\t<div>\n\t\t\t{unreadCount > 0 && (\n\t\t\t\t<div style={headerStyle}>\n\t\t\t\t\t<span style={{ fontSize: 12, color: \"#9ca3af\" }}>\n\t\t\t\t\t\t{unreadCount} unread\n\t\t\t\t\t</span>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={markAllAsRead}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\tcolor: primaryColor,\n\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tMark all as read\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tmaxHeight,\n\t\t\t\t\toverflowY: \"auto\",\n\t\t\t\t\tpadding: \"8px 0\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{announcements.map((announcement) => (\n\t\t\t\t\t<AnnouncementCard\n\t\t\t\t\t\tkey={announcement.id}\n\t\t\t\t\t\tannouncement={announcement}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tprimaryColor={primaryColor}\n\t\t\t\t\t\ttextColor={textColor}\n\t\t\t\t\t\tbgColor={bgColor}\n\t\t\t\t\t\tonView={() => markAsViewed(announcement.id)}\n\t\t\t\t\t\tonCtaClick={(slideIndex) =>\n\t\t\t\t\t\t\tmarkCtaClicked(announcement.id, slideIndex)\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\ninterface AnnouncementCardProps {\n\tannouncement: Announcement;\n\ttheme?: TraceyTheme;\n\tprimaryColor: string;\n\ttextColor: string;\n\tbgColor: string;\n\tonView: () => void;\n\tonCtaClick: (slideIndex: number) => void;\n}\n\nfunction AnnouncementCard({\n\tannouncement,\n\tprimaryColor,\n\ttextColor,\n\tbgColor,\n\tonView,\n\tonCtaClick,\n}: AnnouncementCardProps) {\n\tconst isUnread = !announcement.viewed;\n\tconst bodyPreview = getBodyPreview(announcement);\n\tconst firstSlide = announcement.slides[0];\n\tconst hasCta = firstSlide?.ctaText && firstSlide?.ctaUrl;\n\tconst timeAgo = formatRelativeTime(announcement.publishAt);\n\n\treturn (\n\t\t<div\n\t\t\trole=\"article\"\n\t\t\tonClick={() => {\n\t\t\t\tif (isUnread) onView();\n\t\t\t}}\n\t\t\tstyle={{\n\t\t\t\tpadding: \"12px 16px\",\n\t\t\t\tcursor: isUnread ? \"pointer\" : \"default\",\n\t\t\t\tbackgroundColor: isUnread ? `${primaryColor}08` : \"transparent\",\n\t\t\t\tborderBottom: \"1px solid #f3f4f6\",\n\t\t\t\ttransition: \"background-color 0.15s ease\",\n\t\t\t}}\n\t\t\tonMouseEnter={(e) => {\n\t\t\t\te.currentTarget.style.backgroundColor =\n\t\t\t\t\tbgColor === \"#fff\" ? \"#f9fafb\" : \"rgba(0,0,0,0.03)\";\n\t\t\t}}\n\t\t\tonMouseLeave={(e) => {\n\t\t\t\te.currentTarget.style.backgroundColor = isUnread\n\t\t\t\t\t? `${primaryColor}08`\n\t\t\t\t\t: \"transparent\";\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"flex-start\",\n\t\t\t\t\tgap: 10,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{isUnread && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tdata-testid=\"unread-dot\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: 8,\n\t\t\t\t\t\t\theight: 8,\n\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\tbackgroundColor: primaryColor,\n\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\tmarginTop: 5,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div style={{ flex: 1, minWidth: 0 }}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\talignItems: \"baseline\",\n\t\t\t\t\t\t\tgap: 8,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<h4\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t\tfontWeight: isUnread ? 600 : 500,\n\t\t\t\t\t\t\t\tcolor: textColor,\n\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\ttextOverflow: \"ellipsis\",\n\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{announcement.title}\n\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t{timeAgo && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\t\tcolor: \"#9ca3af\",\n\t\t\t\t\t\t\t\t\twhiteSpace: \"nowrap\",\n\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{timeAgo}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{bodyPreview && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"4px 0 0\",\n\t\t\t\t\t\t\t\tfontSize: 13,\n\t\t\t\t\t\t\t\tcolor: \"#6b7280\",\n\t\t\t\t\t\t\t\tlineHeight: 1.4,\n\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\tdisplay: \"-webkit-box\",\n\t\t\t\t\t\t\t\tWebkitLineClamp: 2,\n\t\t\t\t\t\t\t\tWebkitBoxOrient: \"vertical\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{bodyPreview}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\t\t\t\t\t{hasCta && (\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref={firstSlide.ctaUrl!}\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tonCtaClick(0);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\t\t\t\t\tmarginTop: 8,\n\t\t\t\t\t\t\t\tfontSize: 13,\n\t\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\t\tcolor: primaryColor,\n\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{firstSlide.ctaText}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type CSSProperties, useState, useEffect, useCallback } from \"react\";\n\nimport { LauncherBadge } from \"./headless/LauncherBadge\";\nimport { LauncherPanel } from \"./headless/LauncherPanel\";\nimport { LauncherPortal } from \"./headless/LauncherPortal\";\nimport { LauncherRoot } from \"./headless/LauncherRoot\";\nimport { LauncherTab } from \"./headless/LauncherTab\";\nimport { LauncherTabContent } from \"./headless/LauncherTabContent\";\nimport { LauncherTrigger } from \"./headless/LauncherTrigger\";\nimport { useAnnouncements } from \"../../hooks/useAnnouncements\";\nimport type { Position, TraceyTheme, FeedbackType } from \"../../types\";\nimport { AnnouncementList } from \"../announcements/AnnouncementList\";\nimport { FeedbackRoot } from \"../feedback/headless/FeedbackRoot\";\nimport { FeedbackFormPrimitive } from \"../feedback/headless/FeedbackFormPrimitive\";\n\nlet stylesInjected = false;\n\nfunction injectStyles() {\n\tif (stylesInjected || typeof document === \"undefined\") return;\n\tstylesInjected = true;\n\n\tconst style = document.createElement(\"style\");\n\tstyle.setAttribute(\"data-tracey-launcher\", \"\");\n\tstyle.textContent = `\n\t\t@keyframes tracey-panel-enter {\n\t\t\tfrom { opacity: 0; transform: translateY(8px) scale(0.96); }\n\t\t\tto { opacity: 1; transform: translateY(0) scale(1); }\n\t\t}\n\t\t@keyframes tracey-badge-pulse {\n\t\t\t0% { transform: scale(0.5); }\n\t\t\t70% { transform: scale(1.1); }\n\t\t\t100% { transform: scale(1); }\n\t\t}\n\t\t@keyframes tracey-skeleton-pulse {\n\t\t\t0%, 100% { opacity: 0.5; }\n\t\t\t50% { opacity: 1; }\n\t\t}\n\t\t@keyframes tracey-success-enter {\n\t\t\tfrom { opacity: 0; transform: scale(0.9); }\n\t\t\tto { opacity: 1; transform: scale(1); }\n\t\t}\n\t`;\n\tdocument.head.appendChild(style);\n}\n\nexport interface TraceyLauncherProps {\n\tposition?: Position;\n\ttheme?: TraceyTheme;\n\tclassName?: string;\n}\n\nfunction getPositionStyles(position: Position): CSSProperties {\n\tif (typeof position === \"object\" && \"x\" in position) {\n\t\treturn {\n\t\t\tposition: \"fixed\",\n\t\t\tleft: position.x,\n\t\t\ttop: position.y,\n\t\t};\n\t}\n\n\tconst base: CSSProperties = { position: \"fixed\", zIndex: 9998 };\n\n\tswitch (position) {\n\t\tcase \"top-left\":\n\t\t\treturn { ...base, top: 16, left: 16 };\n\t\tcase \"top-right\":\n\t\t\treturn { ...base, top: 16, right: 16 };\n\t\tcase \"bottom-left\":\n\t\t\treturn { ...base, bottom: 16, left: 16 };\n\t\tcase \"bottom-right\":\n\t\tdefault:\n\t\t\treturn { ...base, bottom: 16, right: 16 };\n\t}\n}\n\nfunction getPanelPosition(position: Position): CSSProperties {\n\tif (typeof position === \"object\" && \"x\" in position) {\n\t\treturn { bottom: \"100%\", left: 0, marginBottom: 8 };\n\t}\n\n\tconst isTop = position === \"top-left\" || position === \"top-right\";\n\tconst isLeft = position === \"top-left\" || position === \"bottom-left\";\n\n\treturn {\n\t\t...(isTop\n\t\t\t? { top: \"100%\", marginTop: 8 }\n\t\t\t: { bottom: \"100%\", marginBottom: 8 }),\n\t\t...(isLeft ? { left: 0 } : { right: 0 }),\n\t};\n}\n\nconst feedbackTypes: { value: FeedbackType; label: string }[] = [\n\t{ value: \"general\", label: \"General\" },\n\t{ value: \"bug\", label: \"Bug Report\" },\n\t{ value: \"feature_request\", label: \"Feature Request\" },\n];\n\nexport function TraceyLauncher({\n\tposition = \"bottom-right\",\n\ttheme,\n\tclassName,\n}: TraceyLauncherProps) {\n\tuseEffect(() => {\n\t\tinjectStyles();\n\t}, []);\n\n\tconst { unreadCount } = useAnnouncements();\n\tconst positionStyles = getPositionStyles(position);\n\tconst panelPositionStyles = getPanelPosition(position);\n\tconst primaryColor = theme?.primaryColor ?? \"#6366f1\";\n\tconst borderRadius = theme?.borderRadius ?? 8;\n\tconst textColor = theme?.textColor ?? \"#374151\";\n\tconst bgColor = theme?.backgroundColor ?? \"#fff\";\n\tconst fontFamily = theme?.fontFamily ?? \"inherit\";\n\n\treturn (\n\t\t<LauncherRoot defaultActiveItem=\"feedback\">\n\t\t\t<div style={positionStyles} className={className}>\n\t\t\t\t<div style={{ position: \"relative\", display: \"inline-block\" }}>\n\t\t\t\t\t<LauncherTrigger>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-label={`Tracey widget${unreadCount > 0 ? ` (${unreadCount} unread)` : \"\"}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: 52,\n\t\t\t\t\t\t\t\theight: 52,\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackgroundColor: primaryColor,\n\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\tboxShadow: \"0 4px 12px rgba(0, 0, 0, 0.2)\",\n\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\ttransition: \"transform 0.2s ease, box-shadow 0.2s ease\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonMouseEnter={(e) => {\n\t\t\t\t\t\t\t\te.currentTarget.style.transform = \"scale(1.05)\";\n\t\t\t\t\t\t\t\te.currentTarget.style.boxShadow =\n\t\t\t\t\t\t\t\t\t\"0 6px 16px rgba(0, 0, 0, 0.25)\";\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonMouseLeave={(e) => {\n\t\t\t\t\t\t\t\te.currentTarget.style.transform = \"scale(1)\";\n\t\t\t\t\t\t\t\te.currentTarget.style.boxShadow =\n\t\t\t\t\t\t\t\t\t\"0 4px 12px rgba(0, 0, 0, 0.2)\";\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Grid/menu icon */}\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"22\"\n\t\t\t\t\t\t\t\theight=\"22\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"#fff\"\n\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"19\" cy=\"12\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"5\" cy=\"12\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"5\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"19\" cy=\"5\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"5\" cy=\"5\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"12\" cy=\"19\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"19\" cy=\"19\" r=\"1\" />\n\t\t\t\t\t\t\t\t<circle cx=\"5\" cy=\"19\" r=\"1\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</LauncherTrigger>\n\n\t\t\t\t\t{/* Unread badge on the trigger button */}\n\t\t\t\t\t<LauncherBadge count={unreadCount}>\n\t\t\t\t\t\t{(count) => (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\ttop: -4,\n\t\t\t\t\t\t\t\t\tright: -4,\n\t\t\t\t\t\t\t\t\tminWidth: 20,\n\t\t\t\t\t\t\t\t\theight: 20,\n\t\t\t\t\t\t\t\t\tborderRadius: 10,\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"#ef4444\",\n\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\tpadding: \"0 6px\",\n\t\t\t\t\t\t\t\t\tpointerEvents: \"none\",\n\t\t\t\t\t\t\t\t\tanimation: \"tracey-badge-pulse 0.3s ease-out\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{count > 99 ? \"99+\" : count}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</LauncherBadge>\n\n\t\t\t\t\t<LauncherPortal>\n\t\t\t\t\t\t<div style={positionStyles}>\n\t\t\t\t\t\t\t<div style={{ position: \"relative\", display: \"inline-block\" }}>\n\t\t\t\t\t\t\t\t<LauncherPanel\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\t\t\t...panelPositionStyles,\n\t\t\t\t\t\t\t\t\t\twidth: 380,\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: bgColor,\n\t\t\t\t\t\t\t\t\t\tborderRadius,\n\t\t\t\t\t\t\t\t\t\tboxShadow:\n\t\t\t\t\t\t\t\t\t\t\t\"0 12px 40px rgba(0, 0, 0, 0.15), 0 4px 12px rgba(0, 0, 0, 0.1)\",\n\t\t\t\t\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\t\t\t\t\tanimation: \"tracey-panel-enter 0.2s ease-out\",\n\t\t\t\t\t\t\t\t\t\tfontFamily,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{/* Tab bar */}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\tborderBottom: \"1px solid #e5e7eb\",\n\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: bgColor,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<LauncherTab\n\t\t\t\t\t\t\t\t\t\t\tvalue=\"feedback\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 6,\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"12px 0\",\n\t\t\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\t\t\t\t\t\tfontFamily,\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: textColor,\n\t\t\t\t\t\t\t\t\t\t\t\tborderBottom: \"2px solid transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"border-color 0.15s ease, color 0.15s ease\",\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{/* Chat bubble icon */}\n\t\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\tFeedback\n\t\t\t\t\t\t\t\t\t\t</LauncherTab>\n\n\t\t\t\t\t\t\t\t\t\t<LauncherTab\n\t\t\t\t\t\t\t\t\t\t\tvalue=\"announcements\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\tgap: 6,\n\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"12px 0\",\n\t\t\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 13,\n\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\t\t\t\t\t\tfontFamily,\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: textColor,\n\t\t\t\t\t\t\t\t\t\t\t\tborderBottom: \"2px solid transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\ttransition: \"border-color 0.15s ease, color 0.15s ease\",\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{/* Bell icon */}\n\t\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n\t\t\t\t\t\t\t\t\t\t\t\t<path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n\t\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t\t\tWhat&apos;s New\n\t\t\t\t\t\t\t\t\t\t\t<LauncherBadge count={unreadCount}>\n\t\t\t\t\t\t\t\t\t\t\t\t{(count) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tminWidth: 18,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: 18,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderRadius: 9,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: \"#ef4444\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpadding: \"0 5px\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{count > 99 ? \"99+\" : count}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</LauncherBadge>\n\t\t\t\t\t\t\t\t\t\t</LauncherTab>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Tab indicator styling via data-state */}\n\t\t\t\t\t\t\t\t\t<style>{`\n\t\t\t\t\t\t\t\t\t\t[role=\"tab\"][data-state=\"active\"] {\n\t\t\t\t\t\t\t\t\t\t\tborder-bottom-color: ${primaryColor} !important;\n\t\t\t\t\t\t\t\t\t\t\tcolor: ${primaryColor} !important;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t`}</style>\n\n\t\t\t\t\t\t\t\t\t{/* Feedback tab content */}\n\t\t\t\t\t\t\t\t\t<LauncherTabContent value=\"feedback\">\n\t\t\t\t\t\t\t\t\t\t<div style={{ padding: 16 }}>\n\t\t\t\t\t\t\t\t\t\t\t<EmbeddedFeedbackForm\n\t\t\t\t\t\t\t\t\t\t\t\tprimaryColor={primaryColor}\n\t\t\t\t\t\t\t\t\t\t\t\ttextColor={textColor}\n\t\t\t\t\t\t\t\t\t\t\t\tfontFamily={fontFamily}\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius={borderRadius}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</LauncherTabContent>\n\n\t\t\t\t\t\t\t\t\t{/* What's New tab content */}\n\t\t\t\t\t\t\t\t\t<LauncherTabContent value=\"announcements\">\n\t\t\t\t\t\t\t\t\t\t<AnnouncementList theme={theme} maxHeight={360} />\n\t\t\t\t\t\t\t\t\t</LauncherTabContent>\n\t\t\t\t\t\t\t\t</LauncherPanel>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</LauncherPortal>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</LauncherRoot>\n\t);\n}\n\ninterface EmbeddedFeedbackFormProps {\n\tprimaryColor: string;\n\ttextColor: string;\n\tfontFamily: string;\n\tborderRadius: string | number;\n}\n\nfunction EmbeddedFeedbackForm({\n\tprimaryColor,\n\ttextColor,\n\tfontFamily,\n\tborderRadius,\n}: EmbeddedFeedbackFormProps) {\n\tconst [showSuccess, setShowSuccess] = useState(false);\n\n\tconst handleSuccess = useCallback(() => {\n\t\tsetShowSuccess(true);\n\t\tsetTimeout(() => setShowSuccess(false), 3000);\n\t}, []);\n\n\tconst inputStyles: CSSProperties = {\n\t\twidth: \"100%\",\n\t\tpadding: \"10px 12px\",\n\t\tborder: \"1px solid #e5e7eb\",\n\t\tborderRadius: typeof borderRadius === \"number\" ? borderRadius - 2 : 6,\n\t\tfontSize: 14,\n\t\tfontFamily,\n\t\tboxSizing: \"border-box\",\n\t\tcolor: textColor,\n\t\tbackgroundColor: \"transparent\",\n\t};\n\n\tconst labelStyles: CSSProperties = {\n\t\tdisplay: \"block\",\n\t\tmarginBottom: 4,\n\t\tfontSize: 13,\n\t\tfontWeight: 500,\n\t\tcolor: textColor,\n\t};\n\n\tif (showSuccess) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tpadding: \"32px 16px\",\n\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\tanimation: \"tracey-success-enter 0.2s ease-out\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 48,\n\t\t\t\t\t\theight: 48,\n\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\tbackgroundColor: \"#ecfdf5\",\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tmargin: \"0 auto 12px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"#10b981\"\n\t\t\t\t\t\tstrokeWidth=\"2.5\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t\t<p\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tfontSize: 15,\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\tcolor: textColor,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThank you!\n\t\t\t\t</p>\n\t\t\t\t<p\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"4px 0 0\",\n\t\t\t\t\t\tfontSize: 13,\n\t\t\t\t\t\tcolor: \"#6b7280\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour feedback has been submitted.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FeedbackRoot defaultOpen={true}>\n\t\t\t<FeedbackFormPrimitive onSuccess={handleSuccess} closeOnSuccess={false}>\n\t\t\t\t{({\n\t\t\t\t\ttitle,\n\t\t\t\t\tsetTitle,\n\t\t\t\t\tdescription,\n\t\t\t\t\tsetDescription,\n\t\t\t\t\ttype,\n\t\t\t\t\tsetType,\n\t\t\t\t\tisSubmitting,\n\t\t\t\t\terror,\n\t\t\t\t\thandleSubmit,\n\t\t\t\t}) => (\n\t\t\t\t\t<form onSubmit={handleSubmit}>\n\t\t\t\t\t\t{error && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tpadding: \"8px 12px\",\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"#fef2f2\",\n\t\t\t\t\t\t\t\t\tborder: \"1px solid #fecaca\",\n\t\t\t\t\t\t\t\t\tborderRadius: 6,\n\t\t\t\t\t\t\t\t\tmarginBottom: 12,\n\t\t\t\t\t\t\t\t\tcolor: \"#dc2626\",\n\t\t\t\t\t\t\t\t\tfontSize: 13,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{error.message}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div style={{ marginBottom: 12 }}>\n\t\t\t\t\t\t\t<label style={labelStyles}>Type</label>\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\tvalue={type}\n\t\t\t\t\t\t\t\tonChange={(e) => setType(e.target.value as FeedbackType)}\n\t\t\t\t\t\t\t\tstyle={inputStyles}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{feedbackTypes.map((ft) => (\n\t\t\t\t\t\t\t\t\t<option key={ft.value} value={ft.value}>\n\t\t\t\t\t\t\t\t\t\t{ft.label}\n\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div style={{ marginBottom: 12 }}>\n\t\t\t\t\t\t\t<label style={labelStyles}>Title *</label>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\tvalue={title}\n\t\t\t\t\t\t\t\tonChange={(e) => setTitle(e.target.value)}\n\t\t\t\t\t\t\t\tplaceholder=\"Brief summary...\"\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\tstyle={inputStyles}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div style={{ marginBottom: 16 }}>\n\t\t\t\t\t\t\t<label style={labelStyles}>Description</label>\n\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\tvalue={description}\n\t\t\t\t\t\t\t\tonChange={(e) => setDescription(e.target.value)}\n\t\t\t\t\t\t\t\tplaceholder=\"Tell us more...\"\n\t\t\t\t\t\t\t\trows={3}\n\t\t\t\t\t\t\t\tstyle={{ ...inputStyles, resize: \"vertical\" }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\tdisabled={isSubmitting || !title.trim()}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\tpadding: \"10px 16px\",\n\t\t\t\t\t\t\t\tbackgroundColor: isSubmitting ? \"#9ca3af\" : primaryColor,\n\t\t\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\tborderRadius:\n\t\t\t\t\t\t\t\t\ttypeof borderRadius === \"number\" ? borderRadius - 2 : 6,\n\t\t\t\t\t\t\t\tfontSize: 14,\n\t\t\t\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\t\t\t\tcursor: isSubmitting ? \"not-allowed\" : \"pointer\",\n\t\t\t\t\t\t\t\ttransition: \"background-color 0.15s ease\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isSubmitting ? \"Sending...\" : \"Send Feedback\"}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</form>\n\t\t\t\t)}\n\t\t\t</FeedbackFormPrimitive>\n\t\t</FeedbackRoot>\n\t);\n}\n","import type { SurveyLogicRule, SurveyQuestion } from \"../types\";\n\ntype AnswerValue = string | number | undefined;\n\nfunction getAnswerValue(\n\tanswers: Record<string, string | number>,\n\tquestionKey: string,\n): AnswerValue {\n\tconst value = answers[questionKey];\n\tif (value === undefined || value === \"\") {\n\t\treturn undefined;\n\t}\n\treturn value;\n}\n\nfunction isRuleMatch(\n\trule: SurveyLogicRule,\n\tanswerValue: AnswerValue,\n): boolean {\n\tif (rule.operator === \"answered\") return answerValue !== undefined;\n\tif (rule.operator === \"not_answered\") return answerValue === undefined;\n\tif (answerValue === undefined) return false;\n\n\tif (rule.operator === \"eq\") return answerValue === rule.value;\n\tif (rule.operator === \"neq\") return answerValue !== rule.value;\n\tif (rule.operator === \"gte\") {\n\t\treturn (\n\t\t\ttypeof answerValue === \"number\" &&\n\t\t\ttypeof rule.value === \"number\" &&\n\t\t\tanswerValue >= rule.value\n\t\t);\n\t}\n\tif (rule.operator === \"lte\") {\n\t\treturn (\n\t\t\ttypeof answerValue === \"number\" &&\n\t\t\ttypeof rule.value === \"number\" &&\n\t\t\tanswerValue <= rule.value\n\t\t);\n\t}\n\tif (rule.operator === \"in\") {\n\t\treturn Array.isArray(rule.value) && rule.value.includes(answerValue as never);\n\t}\n\n\treturn false;\n}\n\nexport function getActiveSurveyQuestionKeys(params: {\n\tquestions: SurveyQuestion[];\n\tlogicRules: SurveyLogicRule[];\n\tanswers: Record<string, string | number>;\n}): Set<string> {\n\tconst questions = [...params.questions].sort((a, b) => a.position - b.position);\n\tconst questionIndexByKey = new Map(\n\t\tquestions.map((question, index) => [question.questionKey, index]),\n\t);\n\tconst rulesBySource = new Map<string, SurveyLogicRule[]>();\n\n\tfor (const rule of params.logicRules) {\n\t\tif (!rule.sourceQuestionKey) continue;\n\t\tconst existing = rulesBySource.get(rule.sourceQuestionKey) ?? [];\n\t\texisting.push(rule);\n\t\trulesBySource.set(rule.sourceQuestionKey, existing);\n\t}\n\tfor (const rules of rulesBySource.values()) {\n\t\trules.sort((a, b) => a.priority - b.priority);\n\t}\n\n\tconst active = new Set<string>();\n\tlet index = 0;\n\tlet guard = 0;\n\twhile (index >= 0 && index < questions.length && guard < questions.length + 10) {\n\t\tconst current = questions[index];\n\t\tif (!current) break;\n\t\tactive.add(current.questionKey);\n\n\t\tconst answerValue = getAnswerValue(params.answers, current.questionKey);\n\t\tconst rules = rulesBySource.get(current.questionKey) ?? [];\n\t\tconst matchedRule = rules.find((rule) => isRuleMatch(rule, answerValue));\n\t\tif (matchedRule) {\n\t\t\tif (matchedRule.action === \"end_survey\") {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (matchedRule.nextQuestionKey) {\n\t\t\t\tconst nextIndex = questionIndexByKey.get(matchedRule.nextQuestionKey);\n\t\t\t\tif (nextIndex !== undefined && nextIndex > index) {\n\t\t\t\t\tindex = nextIndex;\n\t\t\t\t\tguard++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tindex++;\n\t\tguard++;\n\t}\n\n\treturn active;\n}\n","import { useEffect, useMemo, useState, type FormEvent } from \"react\";\nimport type { SurveyAnswerInput, TraceyTheme } from \"../../types\";\nimport { useSurvey } from \"../../hooks/useSurvey\";\nimport { getActiveSurveyQuestionKeys } from \"../../core/survey-logic\";\n\nexport interface SurveyWidgetProps {\n\tanonymousSessionId?: string;\n\turl?: string;\n\ttheme?: TraceyTheme;\n\tautoLoad?: boolean;\n\ttitle?: string;\n}\n\nexport function SurveyWidget({\n\tanonymousSessionId,\n\turl,\n\ttheme,\n\tautoLoad = true,\n\ttitle = \"Quick Survey\",\n}: SurveyWidgetProps) {\n\tconst {\n\t\tactiveSurvey,\n\t\tloadActiveSurvey,\n\t\tsubmitSurveyResponse,\n\t\tdismissSurvey,\n\t\tisLoading,\n\t\tisSubmitting,\n\t\terror,\n\t} = useSurvey();\n\tconst [answers, setAnswers] = useState<Record<string, string | number>>({});\n\tconst [submitted, setSubmitted] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (!autoLoad) return;\n\t\tvoid loadActiveSurvey({ anonymousSessionId, url });\n\t}, [autoLoad, anonymousSessionId, loadActiveSurvey, url]);\n\n\tconst sortedQuestions = useMemo(() => {\n\t\tif (!activeSurvey) return [];\n\t\treturn [...activeSurvey.questions].sort((a, b) => a.position - b.position);\n\t}, [activeSurvey]);\n\tconst activeQuestionKeys = useMemo(() => {\n\t\tif (!activeSurvey) return new Set<string>();\n\t\treturn getActiveSurveyQuestionKeys({\n\t\t\tquestions: sortedQuestions,\n\t\t\tlogicRules: activeSurvey.logicRules,\n\t\t\tanswers,\n\t\t});\n\t}, [activeSurvey, answers, sortedQuestions]);\n\tconst visibleQuestions = useMemo(\n\t\t() =>\n\t\t\tsortedQuestions.filter((question) =>\n\t\t\t\tactiveQuestionKeys.has(question.questionKey),\n\t\t\t),\n\t\t[activeQuestionKeys, sortedQuestions],\n\t);\n\n\tif (isLoading) {\n\t\treturn <div className=\"tracey-survey-widget\">Loading survey...</div>;\n\t}\n\n\tif (submitted) {\n\t\treturn <div className=\"tracey-survey-widget\">Thanks for your feedback.</div>;\n\t}\n\n\tif (!activeSurvey) {\n\t\treturn null;\n\t}\n\n\tasync function handleSubmit(event: FormEvent) {\n\t\tevent.preventDefault();\n\t\tconst survey = activeSurvey;\n\t\tif (!survey) return;\n\n\t\tconst payload: SurveyAnswerInput[] = [];\n\t\tfor (const question of visibleQuestions) {\n\t\t\tconst value = answers[question.questionKey];\n\t\t\tif (value === undefined || value === \"\") {\n\t\t\t\tif (question.required) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (question.type === \"nps\" || question.type === \"rating\") {\n\t\t\t\tpayload.push({\n\t\t\t\t\tquestionKey: question.questionKey,\n\t\t\t\t\ttype: question.type,\n\t\t\t\t\tvalueNumber: Number(value),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpayload.push({\n\t\t\t\tquestionKey: question.questionKey,\n\t\t\t\ttype: question.type,\n\t\t\t\tvalueText: String(value),\n\t\t\t});\n\t\t}\n\n\t\tconst result = await submitSurveyResponse(survey.id, {\n\t\t\tanonymousSessionId,\n\t\t\tanswers: payload,\n\t\t});\n\t\tif (result?.success) {\n\t\t\tsetSubmitted(true);\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"tracey-survey-widget\"\n\t\t\tstyle={{\n\t\t\t\tborder: \"1px solid #e5e7eb\",\n\t\t\t\tborderRadius: theme?.borderRadius ?? 10,\n\t\t\t\tpadding: 16,\n\t\t\t\tbackgroundColor: theme?.backgroundColor ?? \"#fff\",\n\t\t\t\tfontFamily: theme?.fontFamily ?? \"inherit\",\n\t\t\t\tmaxWidth: 420,\n\t\t\t}}\n\t\t>\n\t\t\t<div style={{ display: \"flex\", justifyContent: \"space-between\", gap: 8 }}>\n\t\t\t\t<div>\n\t\t\t\t\t<p style={{ margin: 0, fontWeight: 600 }}>{title}</p>\n\t\t\t\t\t<p style={{ margin: \"4px 0 0\", color: \"#6b7280\", fontSize: 13 }}>\n\t\t\t\t\t\t{activeSurvey.name}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={() => dismissSurvey(activeSurvey.id)}\n\t\t\t\t\tstyle={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n\t\t\t\t>\n\t\t\t\t\t×\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<form onSubmit={handleSubmit} style={{ marginTop: 12, display: \"grid\", gap: 12 }}>\n\t\t\t\t{visibleQuestions.map((question) => (\n\t\t\t\t\t<label key={question.questionKey} style={{ display: \"grid\", gap: 6 }}>\n\t\t\t\t\t\t<span style={{ fontSize: 14, fontWeight: 500 }}>{question.title}</span>\n\t\t\t\t\t\t{question.type === \"nps\" || question.type === \"rating\" ? (\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\tmin={\n\t\t\t\t\t\t\t\t\tquestion.type === \"nps\"\n\t\t\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t\t\t: Number((question.config.min as number | undefined) ?? 1)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmax={\n\t\t\t\t\t\t\t\t\tquestion.type === \"nps\"\n\t\t\t\t\t\t\t\t\t\t? 10\n\t\t\t\t\t\t\t\t\t\t: Number((question.config.max as number | undefined) ?? 5)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\trequired={question.required}\n\t\t\t\t\t\t\t\tvalue={answers[question.questionKey] ?? \"\"}\n\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\tsetAnswers((prev) => ({\n\t\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\t\t[question.questionKey]: Number(event.target.value),\n\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : question.type === \"single_choice\" ? (\n\t\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t\trequired={question.required}\n\t\t\t\t\t\t\t\tvalue={String(answers[question.questionKey] ?? \"\")}\n\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\tsetAnswers((prev) => ({\n\t\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\t\t[question.questionKey]: event.target.value,\n\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<option value=\"\">Select an option</option>\n\t\t\t\t\t\t\t\t{Array.isArray(question.config.options) &&\n\t\t\t\t\t\t\t\t\tquestion.config.options.map((option) => (\n\t\t\t\t\t\t\t\t\t\t<option key={String(option)} value={String(option)}>\n\t\t\t\t\t\t\t\t\t\t\t{String(option)}\n\t\t\t\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\trequired={question.required}\n\t\t\t\t\t\t\t\tvalue={String(answers[question.questionKey] ?? \"\")}\n\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\tsetAnswers((prev) => ({\n\t\t\t\t\t\t\t\t\t\t...prev,\n\t\t\t\t\t\t\t\t\t\t[question.questionKey]: event.target.value,\n\t\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\t\t\ttypeof question.config.placeholder === \"string\"\n\t\t\t\t\t\t\t\t\t\t? question.config.placeholder\n\t\t\t\t\t\t\t\t\t\t: \"Your answer\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</label>\n\t\t\t\t))}\n\n\t\t\t\t{error && (\n\t\t\t\t\t<p style={{ margin: 0, color: \"#dc2626\", fontSize: 13 }}>{error.message}</p>\n\t\t\t\t)}\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tdisabled={isSubmitting}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: theme?.primaryColor ?? \"#2563eb\",\n\t\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tborderRadius: theme?.borderRadius ?? 8,\n\t\t\t\t\t\tpadding: \"10px 14px\",\n\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{isSubmitting ? \"Submitting...\" : \"Submit\"}\n\t\t\t\t</button>\n\t\t\t</form>\n\t\t</div>\n\t);\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n"],"names":["useTracey","useState","useRef","useCallback","useEffect","feedbackTypes","jsx","FeedbackFormPrimitive","jsxs","FeedbackClose","getPositionStyles","FeedbackRoot","FeedbackTrigger","FeedbackPortal","FeedbackContent","useAnnouncements","AnnouncementRoot","AnnouncementPortal","AnnouncementContent","AnnouncementNavigation","AnnouncementClose","Fragment","LauncherRoot","LauncherTrigger","LauncherBadge","LauncherPortal","LauncherPanel","LauncherTab","LauncherTabContent","index","useMemo"],"mappings":"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","x_google_ignoreList":[11,12]}