@intlayer/design-system 9.4.1 → 9.4.3

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 (215) hide show
  1. package/README.md +1 -1
  2. package/dist/esm/api/index.mjs +2 -2
  3. package/dist/esm/api/useUser/index.mjs +1 -1
  4. package/dist/esm/components/Avatar/index.mjs +1 -1
  5. package/dist/esm/components/Avatar/index.mjs.map +1 -1
  6. package/dist/esm/components/Badge/index.mjs +3 -3
  7. package/dist/esm/components/Badge/index.mjs.map +1 -1
  8. package/dist/esm/components/Breadcrumb/index.mjs +5 -5
  9. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  10. package/dist/esm/components/Browser/Browser.mjs +4 -4
  11. package/dist/esm/components/Browser/Browser.mjs.map +1 -1
  12. package/dist/esm/components/Button/Button.mjs +1 -0
  13. package/dist/esm/components/Button/Button.mjs.map +1 -1
  14. package/dist/esm/components/Carousel/index.mjs +5 -5
  15. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  16. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs +5 -5
  17. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
  18. package/dist/esm/components/Container/index.mjs +2 -2
  19. package/dist/esm/components/Container/index.mjs.map +1 -1
  20. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -1
  21. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs +1 -1
  22. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
  23. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +7 -7
  24. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  25. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -1
  26. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +9 -9
  27. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  28. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +4 -4
  29. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  30. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +1 -1
  31. package/dist/esm/components/DictionaryFieldEditor/{ContentEditor.mjs → NodeEditor.mjs} +9 -9
  32. package/dist/esm/components/DictionaryFieldEditor/NodeEditor.mjs.map +1 -0
  33. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +3 -3
  34. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  35. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +2 -2
  36. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  37. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs +2 -2
  38. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
  39. package/dist/esm/components/DictionaryFieldEditor/index.mjs +3 -3
  40. package/dist/esm/components/Footer/index.mjs +5 -3
  41. package/dist/esm/components/Footer/index.mjs.map +1 -1
  42. package/dist/esm/components/HeightResizer/index.mjs +1 -1
  43. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  44. package/dist/esm/components/IDE/Code.mjs +1 -1
  45. package/dist/esm/components/IDE/Code.mjs.map +1 -1
  46. package/dist/esm/components/IDE/CodeBlockHighlight.mjs +1 -1
  47. package/dist/esm/components/IDE/CodeBlockHighlight.mjs.map +1 -1
  48. package/dist/esm/components/IDE/CodeBlockServer.mjs +1 -1
  49. package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
  50. package/dist/esm/components/IDE/CodeBlockShiki.mjs +6 -48
  51. package/dist/esm/components/IDE/CodeBlockShiki.mjs.map +1 -1
  52. package/dist/esm/components/IDE/FileList.mjs +1 -1
  53. package/dist/esm/components/IDE/FileList.mjs.map +1 -1
  54. package/dist/esm/components/IDE/FileTree.mjs +1 -1
  55. package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
  56. package/dist/esm/components/IDE/IDE.mjs +10 -7
  57. package/dist/esm/components/IDE/IDE.mjs.map +1 -1
  58. package/dist/esm/components/IDE/MarkDownRender.mjs +4 -3
  59. package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
  60. package/dist/esm/components/IDE/shikiBundle.mjs +61 -0
  61. package/dist/esm/components/IDE/shikiBundle.mjs.map +1 -0
  62. package/dist/esm/components/IDE/shikiLanguages.mjs +2 -39
  63. package/dist/esm/components/IDE/shikiLanguages.mjs.map +1 -1
  64. package/dist/esm/components/IDE/shikiThemes.mjs.map +1 -1
  65. package/dist/esm/components/Input/Checkbox.mjs +4 -4
  66. package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
  67. package/dist/esm/components/Input/Input.mjs +2 -2
  68. package/dist/esm/components/Input/Input.mjs.map +1 -1
  69. package/dist/esm/components/Input/OTPInput.mjs +1 -1
  70. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  71. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs +2 -2
  72. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  73. package/dist/esm/components/LanguageBackground/LanguageSection.mjs +6 -8
  74. package/dist/esm/components/LanguageBackground/LanguageSection.mjs.map +1 -1
  75. package/dist/esm/components/LanguageBackground/index.mjs +2 -2
  76. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +2 -2
  77. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  78. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs +8 -3
  79. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -1
  80. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +9 -8
  81. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  82. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs +2 -2
  83. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs.map +1 -1
  84. package/dist/esm/components/MarkdownEditor/extensions.mjs +1 -1
  85. package/dist/esm/components/MarkdownEditor/extensions.mjs.map +1 -1
  86. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +3 -3
  87. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs.map +1 -1
  88. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs +2 -2
  89. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs.map +1 -1
  90. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs +2 -2
  91. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs.map +1 -1
  92. package/dist/esm/components/MarkdownEditor/novel/extensions/code-block-shiki.mjs +197 -0
  93. package/dist/esm/components/MarkdownEditor/novel/extensions/code-block-shiki.mjs.map +1 -0
  94. package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs +2 -1
  95. package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs.map +1 -1
  96. package/dist/esm/components/MarkdownEditor/novel/index.mjs +2 -1
  97. package/dist/esm/components/Modal/Modal.mjs +0 -1
  98. package/dist/esm/components/Modal/Modal.mjs.map +1 -1
  99. package/dist/esm/components/Navbar/DesktopNavbar.mjs +3 -3
  100. package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
  101. package/dist/esm/components/Navbar/MobileNavbar.mjs +1 -1
  102. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  103. package/dist/esm/components/Pattern/GridDistortionPattern.mjs +2 -2
  104. package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -1
  105. package/dist/esm/components/Pattern/GridPattern.mjs +1 -1
  106. package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
  107. package/dist/esm/components/RightDrawer/RightDrawer.mjs +2 -2
  108. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  109. package/dist/esm/components/Select/Multiselect.mjs +2 -2
  110. package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
  111. package/dist/esm/components/Select/Select.mjs +2 -2
  112. package/dist/esm/components/Select/Select.mjs.map +1 -1
  113. package/dist/esm/components/Status/index.mjs +28 -0
  114. package/dist/esm/components/Status/index.mjs.map +1 -0
  115. package/dist/esm/components/Steps/index.mjs +3 -3
  116. package/dist/esm/components/Steps/index.mjs.map +1 -1
  117. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs +12 -11
  118. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
  119. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs +6 -6
  120. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
  121. package/dist/esm/components/Tab/Tab.mjs +1 -1
  122. package/dist/esm/components/Tab/Tab.mjs.map +1 -1
  123. package/dist/esm/components/TabSelector/TabSelector.mjs +5 -5
  124. package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
  125. package/dist/esm/components/Table/SmartTable.mjs +2 -2
  126. package/dist/esm/components/Table/SmartTable.mjs.map +1 -1
  127. package/dist/esm/components/Table/Table.mjs +1 -1
  128. package/dist/esm/components/Table/Table.mjs.map +1 -1
  129. package/dist/esm/components/Table/TableElements.mjs +2 -2
  130. package/dist/esm/components/Table/TableElements.mjs.map +1 -1
  131. package/dist/esm/components/Tag/index.mjs +1 -1
  132. package/dist/esm/components/Tag/index.mjs.map +1 -1
  133. package/dist/esm/components/TechLogo/TechLogo.mjs +2 -0
  134. package/dist/esm/components/TechLogo/TechLogo.mjs.map +1 -1
  135. package/dist/esm/components/TechLogo/logos/HTMX.mjs +31 -0
  136. package/dist/esm/components/TechLogo/logos/HTMX.mjs.map +1 -0
  137. package/dist/esm/components/TechLogo/logos/Remix.mjs +22 -0
  138. package/dist/esm/components/TechLogo/logos/Remix.mjs.map +1 -0
  139. package/dist/esm/components/TechLogo/techLogos.mjs +5 -1
  140. package/dist/esm/components/TechLogo/techLogos.mjs.map +1 -1
  141. package/dist/esm/components/Terminal/Terminal.mjs +4 -4
  142. package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
  143. package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
  144. package/dist/esm/components/Toaster/Toast.mjs +4 -4
  145. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  146. package/dist/esm/components/index.mjs +8 -7
  147. package/dist/esm/hooks/usePersistedStore.mjs +6 -18
  148. package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
  149. package/dist/esm/providers/ReactQueryProvider.mjs +10 -2
  150. package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
  151. package/dist/esm/providers/ThemeProvider.mjs +27 -15
  152. package/dist/esm/providers/ThemeProvider.mjs.map +1 -1
  153. package/dist/esm/routes.mjs +24 -6
  154. package/dist/esm/routes.mjs.map +1 -1
  155. package/dist/esm/structured-data/buildItemListJsonLd.mjs +27 -0
  156. package/dist/esm/structured-data/buildItemListJsonLd.mjs.map +1 -0
  157. package/dist/esm/structured-data/index.mjs +2 -1
  158. package/dist/types/components/Badge/index.d.ts.map +1 -1
  159. package/dist/types/components/Button/Button.d.ts +2 -2
  160. package/dist/types/components/Button/Button.d.ts.map +1 -1
  161. package/dist/types/components/Container/index.d.ts.map +1 -1
  162. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  163. package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts +10 -0
  164. package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts.map +1 -0
  165. package/dist/types/components/DictionaryFieldEditor/index.d.ts +2 -2
  166. package/dist/types/components/Footer/index.d.ts.map +1 -1
  167. package/dist/types/components/Form/FormBase.d.ts +1 -1
  168. package/dist/types/components/IDE/CodeBlockServer.d.ts +1 -1
  169. package/dist/types/components/IDE/CodeBlockServer.d.ts.map +1 -1
  170. package/dist/types/components/IDE/CodeBlockShiki.d.ts.map +1 -1
  171. package/dist/types/components/IDE/MarkDownRender.d.ts +1 -0
  172. package/dist/types/components/IDE/MarkDownRender.d.ts.map +1 -1
  173. package/dist/types/components/IDE/shikiBundle.d.ts +74 -0
  174. package/dist/types/components/IDE/shikiBundle.d.ts.map +1 -0
  175. package/dist/types/components/IDE/shikiLanguages.d.ts +2 -39
  176. package/dist/types/components/IDE/shikiLanguages.d.ts.map +1 -1
  177. package/dist/types/components/IDE/shikiThemes.d.ts +3 -1
  178. package/dist/types/components/IDE/shikiThemes.d.ts.map +1 -1
  179. package/dist/types/components/LanguageBackground/LanguageSection.d.ts +5 -1
  180. package/dist/types/components/LanguageBackground/LanguageSection.d.ts.map +1 -1
  181. package/dist/types/components/LanguageBackground/index.d.ts +2 -2
  182. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts.map +1 -1
  183. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  184. package/dist/types/components/MarkdownEditor/novel/extensions/code-block-shiki.d.ts +15 -0
  185. package/dist/types/components/MarkdownEditor/novel/extensions/code-block-shiki.d.ts.map +1 -0
  186. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts +2 -1
  187. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts.map +1 -1
  188. package/dist/types/components/MarkdownEditor/novel/index.d.ts +2 -1
  189. package/dist/types/components/Status/index.d.ts +8 -0
  190. package/dist/types/components/Status/index.d.ts.map +1 -0
  191. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +3 -3
  192. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts.map +1 -1
  193. package/dist/types/components/Table/TableElements.d.ts.map +1 -1
  194. package/dist/types/components/TechLogo/TechLogo.d.ts.map +1 -1
  195. package/dist/types/components/TechLogo/logos/HTMX.d.ts +6 -0
  196. package/dist/types/components/TechLogo/logos/HTMX.d.ts.map +1 -0
  197. package/dist/types/components/TechLogo/logos/Remix.d.ts +6 -0
  198. package/dist/types/components/TechLogo/logos/Remix.d.ts.map +1 -0
  199. package/dist/types/components/TechLogo/techLogos.d.ts +4 -2
  200. package/dist/types/components/TechLogo/types.d.ts +1 -1
  201. package/dist/types/components/TextArea/TextArea.d.ts +1 -1
  202. package/dist/types/components/index.d.ts +3 -2
  203. package/dist/types/providers/ThemeProvider.d.ts.map +1 -1
  204. package/dist/types/routes.d.ts +21 -3
  205. package/dist/types/routes.d.ts.map +1 -1
  206. package/dist/types/structured-data/buildItemListJsonLd.d.ts +36 -0
  207. package/dist/types/structured-data/buildItemListJsonLd.d.ts.map +1 -0
  208. package/dist/types/structured-data/index.d.ts +2 -1
  209. package/package.json +68 -54
  210. package/src/components/MarkdownEditor/markdown-editor.css +17 -17
  211. package/styles/globals.css +71 -0
  212. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +0 -1
  213. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts +0 -10
  214. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +0 -1
  215. package/tailwind.css +0 -269
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.mjs","names":[],"sources":["../../../../src/components/Toaster/Toast.tsx"],"sourcesContent":["'use client';\n\nimport * as ToastPrimitives from '@radix-ui/react-toast';\nimport { cn } from '@utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport type { ComponentProps, FC, ReactElement } from 'react';\n\nexport const ToastProvider = ToastPrimitives;\n\nexport const ToastViewport: FC<\n ComponentProps<typeof ToastPrimitives.Viewport>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Viewport\n className={cn(\n 'fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-105',\n className\n )}\n {...props}\n />\n);\n\n/**\n * Toast variant styles using class-variance-authority.\n *\n * Defines visual styles for different toast types with semantic colors,\n * animations, and responsive behavior.\n *\n * @example\n * ```tsx\n * // Error toast with red background\n * <Toast variant=\"error\">Error message</Toast>\n *\n * // Success toast with green background\n * <Toast variant=\"success\">Success message</Toast>\n *\n * // Default toast with neutral styling\n * <Toast variant=\"default\">Info message</Toast>\n * ```\n */\nexport const toastVariants = cva(\n 'group data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-xl p-4 pr-6 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur transition-all [corner-shape:squircle] data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[state=closed]:animate-out data-[state=open]:animate-in data-[swipe=end]:animate-out data-[swipe=move]:transition-none supports-[corner-shape:squircle]:rounded-3xl',\n {\n variants: {\n /** Toast visual variants for different message types */\n variant: {\n /** Error state with red styling for failures and warnings */\n error: 'bg-error/40 text-text',\n /** Success state with green styling for confirmations */\n success: 'bg-success/30 text-text',\n /** Default neutral styling for general information */\n default: 'bg-card/80 text-text',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\n/**\n * Toast Component\n *\n * A notification component that displays temporary messages to users using Radix UI primitives.\n * Supports different visual variants, animations, and user interactions including swipe-to-dismiss.\n *\n * ## Features\n * - **Visual Variants**: Error, success, and default styling themes\n * - **Animations**: Smooth slide-in/slide-out transitions with fade effects\n * - **Swipe Gestures**: Touch-friendly swipe-to-dismiss functionality\n * - **Accessibility**: Full screen reader support and keyboard navigation\n * - **Positioning**: Smart positioning with responsive viewport handling\n * - **Auto-dismiss**: Configurable automatic dismissal timing\n *\n * ## Technical Implementation\n * - Built on Radix UI Toast primitives for accessibility compliance\n * - Uses Framer Motion for smooth animations and gestures\n * - CVA (class-variance-authority) for consistent styling variants\n * - Backdrop blur effects for modern visual appeal\n * - CSS transforms for hardware-accelerated animations\n *\n * @example\n * ```tsx\n * // Basic toast with title and description\n * <Toast variant=\"default\">\n * <ToastTitle>Notification</ToastTitle>\n * <ToastDescription>Your action was completed successfully.</ToastDescription>\n * <ToastClose />\n * </Toast>\n *\n * // Error toast with action button\n * <Toast variant=\"error\">\n * <ToastTitle>Upload Failed</ToastTitle>\n * <ToastDescription>Could not upload file. Please try again.</ToastDescription>\n * <ToastAction altText=\"Retry upload\">Retry</ToastAction>\n * <ToastClose />\n * </Toast>\n * ```\n */\nexport const Toast: FC<\n ComponentProps<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n> = ({ className, variant, ...props }) => {\n return (\n <ToastPrimitives.Root\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\n/**\n * ToastAction Component\n *\n * An interactive button component for toast notifications that allows users to take\n * actions related to the notification message.\n *\n * ## Features\n * - **Accessibility**: Requires `altText` prop for screen readers\n * - **Visual States**: Hover, focus, and disabled state styling\n * - **Theme Integration**: Supports error and default themes\n * - **Keyboard Navigation**: Full keyboard accessibility support\n *\n * ## Usage Guidelines\n * - Use for actionable notifications (retry, undo, view details)\n * - Keep action text short and descriptive\n * - Provide meaningful `altText` for accessibility\n * - Limit to one primary action per toast\n *\n * @example\n * ```tsx\n * // Retry action for failed operations\n * <ToastAction altText=\"Retry the failed operation\">\n * Retry\n * </ToastAction>\n *\n * // Undo action for reversible operations\n * <ToastAction altText=\"Undo the last action\">\n * Undo\n * </ToastAction>\n *\n * // Navigation action\n * <ToastAction altText=\"View the uploaded file\">\n * View File\n * </ToastAction>\n * ```\n */\nexport const ToastAction: FC<ComponentProps<typeof ToastPrimitives.Action>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Action\n className={cn(\n 'inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 font-medium text-sm transition-colors hover:bg-text focus:outline-hidden focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.error]:border-card/40 group-[.error]:focus:ring-error group-[.error]:hover:border-error/30 group-[.error]:hover:bg-error group-[.error]:hover:text-error-foreground',\n className\n )}\n {...props}\n />\n);\n\nexport const ToastClose: FC<ComponentProps<typeof ToastPrimitives.Close>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Close\n className={cn(\n 'absolute top-1 right-1 rounded-md p-1 text-text/50 opacity-0 transition-opacity hover:text-text/80 focus:opacity-100 focus:outline-hidden focus:ring-1 group-hover:opacity-100 group-[.error]:text-red-300 group-[.error]:focus:ring-red-400 group-[.error]:focus:ring-offset-red-600 group-[.error]:hover:text-red-50',\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-5\" />\n </ToastPrimitives.Close>\n);\n/**\n * ToastTitle Component\n *\n * The primary heading text for toast notifications. Provides semantic structure\n * and proper typography hierarchy within the toast.\n *\n * ## Styling Features\n * - Semi-bold font weight for emphasis\n * - Automatic text sizing adjustments for descriptions\n * - Proper spacing relationships with other toast elements\n *\n * @example\n * ```tsx\n * <ToastTitle>File Upload Complete</ToastTitle>\n * <ToastTitle>Error: Connection Failed</ToastTitle>\n * <ToastTitle>Settings Saved</ToastTitle>\n * ```\n */\nexport const ToastTitle: FC<ComponentProps<typeof ToastPrimitives.Title>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Title\n className={cn('font-semibold text-sm [&+div]:text-xs', className)}\n {...props}\n />\n);\n\n/**\n * ToastDescription Component\n *\n * Supporting text that provides additional context or details for the toast notification.\n * Complements the ToastTitle with more detailed information.\n *\n * ## Styling Features\n * - Slightly reduced opacity for visual hierarchy\n * - Smaller text size than title\n * - Optimal line height for readability\n *\n * ## Content Guidelines\n * - Keep descriptions concise but informative\n * - Provide actionable information when possible\n * - Use plain language for better accessibility\n *\n * @example\n * ```tsx\n * <ToastDescription>\n * Your document has been uploaded successfully and is now available for sharing.\n * </ToastDescription>\n *\n * <ToastDescription>\n * Please check your internet connection and try again.\n * </ToastDescription>\n * ```\n */\nexport const ToastDescription: FC<\n ComponentProps<typeof ToastPrimitives.Description>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Description\n className={cn('overflow-scroll text-sm opacity-90', className)}\n {...props}\n />\n);\n/**\n * Props type for Toast component including all Radix UI Toast.Root props\n * and variant styling options.\n */\nexport type ToastProps = ComponentProps<typeof Toast>;\n\n/**\n * Type for ToastAction elements used in toast configurations.\n * Ensures type safety when passing action elements to toast functions.\n */\nexport type ToastActionElement = ReactElement<typeof ToastAction>;\n"],"mappings":";;;;;;;;;AAQA,MAAa,gBAAgB;AAE7B,MAAa,iBAER,EAAE,WAAW,GAAG,YACnB,oBAAC,gBAAgB,UAAjB;CACE,WAAW,GACT,+HACA,SACF;CACA,GAAI;AACL;;;;;;;;;;;;;;;;;;;AAqBH,MAAa,gBAAgB,IAC3B,usBACA;CACE,UAAU;;AAER,SAAS;;EAEP,OAAO;;EAEP,SAAS;;EAET,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAa,SAGR,EAAE,WAAW,SAAS,GAAG,YAAY;CACxC,OACE,oBAAC,gBAAgB,MAAjB;EACE,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EACnD,GAAI;CACL;AAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,MAAa,eAAkE,EAC7E,WACA,GAAG,YAEH,oBAAC,gBAAgB,QAAjB;CACE,WAAW,GACT,iaACA,SACF;CACA,GAAI;AACL;AAGH,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GACT,0TACA,SACF;CACA,eAAY;CACZ,GAAI;WAEJ,oBAAC,GAAD,EAAG,WAAU,SAAU;AACF;;;;;;;;;;;;;;;;;;;AAoBzB,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GAAG,yCAAyC,SAAS;CAChE,GAAI;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,MAAa,oBAER,EAAE,WAAW,GAAG,YACnB,oBAAC,gBAAgB,aAAjB;CACE,WAAW,GAAG,sCAAsC,SAAS;CAC7D,GAAI;AACL"}
1
+ {"version":3,"file":"Toast.mjs","names":[],"sources":["../../../../src/components/Toaster/Toast.tsx"],"sourcesContent":["'use client';\n\nimport * as ToastPrimitives from '@radix-ui/react-toast';\nimport { cn } from '@utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport type { ComponentProps, FC, ReactElement } from 'react';\n\nexport const ToastProvider = ToastPrimitives;\n\nexport const ToastViewport: FC<\n ComponentProps<typeof ToastPrimitives.Viewport>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Viewport\n className={cn(\n 'fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-105',\n className\n )}\n {...props}\n />\n);\n\n/**\n * Toast variant styles using class-variance-authority.\n *\n * Defines visual styles for different toast types with semantic colors,\n * animations, and responsive behavior.\n *\n * @example\n * ```tsx\n * // Error toast with red background\n * <Toast variant=\"error\">Error message</Toast>\n *\n * // Success toast with green background\n * <Toast variant=\"success\">Success message</Toast>\n *\n * // Default toast with neutral styling\n * <Toast variant=\"default\">Info message</Toast>\n * ```\n */\nexport const toastVariants = cva(\n 'group data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-xl p-4 pr-6 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur transition-all [corner-shape:squircle] data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[state=closed]:animate-out data-[state=open]:animate-in data-[swipe=end]:animate-out data-[swipe=move]:transition-none supports-[corner-shape:squircle]:rounded-3xl',\n {\n variants: {\n /** Toast visual variants for different message types */\n variant: {\n /** Error state with red styling for failures and warnings */\n error: 'bg-error/40 text-foreground',\n /** Success state with green styling for confirmations */\n success: 'bg-success/30 text-foreground',\n /** Default neutral styling for general information */\n default: 'bg-card/80 text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\n/**\n * Toast Component\n *\n * A notification component that displays temporary messages to users using Radix UI primitives.\n * Supports different visual variants, animations, and user interactions including swipe-to-dismiss.\n *\n * ## Features\n * - **Visual Variants**: Error, success, and default styling themes\n * - **Animations**: Smooth slide-in/slide-out transitions with fade effects\n * - **Swipe Gestures**: Touch-friendly swipe-to-dismiss functionality\n * - **Accessibility**: Full screen reader support and keyboard navigation\n * - **Positioning**: Smart positioning with responsive viewport handling\n * - **Auto-dismiss**: Configurable automatic dismissal timing\n *\n * ## Technical Implementation\n * - Built on Radix UI Toast primitives for accessibility compliance\n * - Uses Framer Motion for smooth animations and gestures\n * - CVA (class-variance-authority) for consistent styling variants\n * - Backdrop blur effects for modern visual appeal\n * - CSS transforms for hardware-accelerated animations\n *\n * @example\n * ```tsx\n * // Basic toast with title and description\n * <Toast variant=\"default\">\n * <ToastTitle>Notification</ToastTitle>\n * <ToastDescription>Your action was completed successfully.</ToastDescription>\n * <ToastClose />\n * </Toast>\n *\n * // Error toast with action button\n * <Toast variant=\"error\">\n * <ToastTitle>Upload Failed</ToastTitle>\n * <ToastDescription>Could not upload file. Please try again.</ToastDescription>\n * <ToastAction altText=\"Retry upload\">Retry</ToastAction>\n * <ToastClose />\n * </Toast>\n * ```\n */\nexport const Toast: FC<\n ComponentProps<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n> = ({ className, variant, ...props }) => {\n return (\n <ToastPrimitives.Root\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\n/**\n * ToastAction Component\n *\n * An interactive button component for toast notifications that allows users to take\n * actions related to the notification message.\n *\n * ## Features\n * - **Accessibility**: Requires `altText` prop for screen readers\n * - **Visual States**: Hover, focus, and disabled state styling\n * - **Theme Integration**: Supports error and default themes\n * - **Keyboard Navigation**: Full keyboard accessibility support\n *\n * ## Usage Guidelines\n * - Use for actionable notifications (retry, undo, view details)\n * - Keep action text short and descriptive\n * - Provide meaningful `altText` for accessibility\n * - Limit to one primary action per toast\n *\n * @example\n * ```tsx\n * // Retry action for failed operations\n * <ToastAction altText=\"Retry the failed operation\">\n * Retry\n * </ToastAction>\n *\n * // Undo action for reversible operations\n * <ToastAction altText=\"Undo the last action\">\n * Undo\n * </ToastAction>\n *\n * // Navigation action\n * <ToastAction altText=\"View the uploaded file\">\n * View File\n * </ToastAction>\n * ```\n */\nexport const ToastAction: FC<ComponentProps<typeof ToastPrimitives.Action>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Action\n className={cn(\n 'inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 font-medium text-sm transition-colors hover:bg-text focus:outline-hidden focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.error]:border-card/40 group-[.error]:focus:ring-error group-[.error]:hover:border-error/30 group-[.error]:hover:bg-error group-[.error]:hover:text-error-foreground',\n className\n )}\n {...props}\n />\n);\n\nexport const ToastClose: FC<ComponentProps<typeof ToastPrimitives.Close>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Close\n className={cn(\n 'absolute top-1 right-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground/80 focus:opacity-100 focus:outline-hidden focus:ring-1 group-hover:opacity-100 group-[.error]:text-red-300 group-[.error]:focus:ring-red-400 group-[.error]:focus:ring-offset-red-600 group-[.error]:hover:text-red-50',\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-5\" />\n </ToastPrimitives.Close>\n);\n/**\n * ToastTitle Component\n *\n * The primary heading text for toast notifications. Provides semantic structure\n * and proper typography hierarchy within the toast.\n *\n * ## Styling Features\n * - Semi-bold font weight for emphasis\n * - Automatic text sizing adjustments for descriptions\n * - Proper spacing relationships with other toast elements\n *\n * @example\n * ```tsx\n * <ToastTitle>File Upload Complete</ToastTitle>\n * <ToastTitle>Error: Connection Failed</ToastTitle>\n * <ToastTitle>Settings Saved</ToastTitle>\n * ```\n */\nexport const ToastTitle: FC<ComponentProps<typeof ToastPrimitives.Title>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Title\n className={cn('font-semibold text-sm [&+div]:text-xs', className)}\n {...props}\n />\n);\n\n/**\n * ToastDescription Component\n *\n * Supporting text that provides additional context or details for the toast notification.\n * Complements the ToastTitle with more detailed information.\n *\n * ## Styling Features\n * - Slightly reduced opacity for visual hierarchy\n * - Smaller text size than title\n * - Optimal line height for readability\n *\n * ## Content Guidelines\n * - Keep descriptions concise but informative\n * - Provide actionable information when possible\n * - Use plain language for better accessibility\n *\n * @example\n * ```tsx\n * <ToastDescription>\n * Your document has been uploaded successfully and is now available for sharing.\n * </ToastDescription>\n *\n * <ToastDescription>\n * Please check your internet connection and try again.\n * </ToastDescription>\n * ```\n */\nexport const ToastDescription: FC<\n ComponentProps<typeof ToastPrimitives.Description>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Description\n className={cn('overflow-scroll text-sm opacity-90', className)}\n {...props}\n />\n);\n/**\n * Props type for Toast component including all Radix UI Toast.Root props\n * and variant styling options.\n */\nexport type ToastProps = ComponentProps<typeof Toast>;\n\n/**\n * Type for ToastAction elements used in toast configurations.\n * Ensures type safety when passing action elements to toast functions.\n */\nexport type ToastActionElement = ReactElement<typeof ToastAction>;\n"],"mappings":";;;;;;;;;AAQA,MAAa,gBAAgB;AAE7B,MAAa,iBAER,EAAE,WAAW,GAAG,YACnB,oBAAC,gBAAgB,UAAjB;CACE,WAAW,GACT,+HACA,SACF;CACA,GAAI;AACL;;;;;;;;;;;;;;;;;;;AAqBH,MAAa,gBAAgB,IAC3B,usBACA;CACE,UAAU;;AAER,SAAS;;EAEP,OAAO;;EAEP,SAAS;;EAET,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAa,SAGR,EAAE,WAAW,SAAS,GAAG,YAAY;CACxC,OACE,oBAAC,gBAAgB,MAAjB;EACE,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EACnD,GAAI;CACL;AAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,MAAa,eAAkE,EAC7E,WACA,GAAG,YAEH,oBAAC,gBAAgB,QAAjB;CACE,WAAW,GACT,iaACA,SACF;CACA,GAAI;AACL;AAGH,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GACT,sUACA,SACF;CACA,eAAY;CACZ,GAAI;WAEJ,oBAAC,GAAD,EAAG,WAAU,SAAU;AACF;;;;;;;;;;;;;;;;;;;AAoBzB,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GAAG,yCAAyC,SAAS;CAChE,GAAI;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,MAAa,oBAER,EAAE,WAAW,GAAG,YACnB,oBAAC,gBAAgB,aAAjB;CACE,WAAW,GAAG,sCAAsC,SAAS;CAC7D,GAAI;AACL"}
@@ -41,16 +41,12 @@ import { VerticalSwitchSelector } from "./SwitchSelector/VerticalSwitchSelector.
41
41
  import { EditableFieldInput } from "./EditableField/EditableFieldInput.mjs";
42
42
  import { EditableFieldTextArea } from "./EditableField/EditableFieldTextArea.mjs";
43
43
  import { DictionaryEditor } from "./DictionaryEditor/DictionaryEditor.mjs";
44
+ import { Label } from "./Label/index.mjs";
44
45
  import { LocaleSwitcherContentProvider, useLocaleSwitcherContent } from "./LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs";
45
46
  import { LocaleSwitcherContent } from "./LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs";
46
47
  import { MultiSelect } from "./Select/Multiselect.mjs";
47
48
  import { Select, SelectContent, SelectLabel, SelectSeparator } from "./Select/Select.mjs";
48
- import { NumberItemsSelector } from "./Pagination/NumberItemsSelector.mjs";
49
- import { Pagination, paginationVariants } from "./Pagination/Pagination.mjs";
50
- import { ShowingResultsNumberItems } from "./Pagination/ShowingResultsNumberItems.mjs";
51
- import { Label } from "./Label/index.mjs";
52
49
  import { TextEditor, TextEditorContainer, traceKeys } from "./DictionaryFieldEditor/ContentEditorView/TextEditor.mjs";
53
- import { KeyPathBreadcrumb } from "./DictionaryFieldEditor/KeyPathBreadcrumb.mjs";
54
50
  import { FormItem } from "./Form/FormItem.mjs";
55
51
  import { FormField, useFormField } from "./Form/FormField.mjs";
56
52
  import { FormControl } from "./Form/FormControl.mjs";
@@ -75,6 +71,11 @@ import { useForm } from "./Form/FormBase.mjs";
75
71
  import { Form } from "./Form/Form.mjs";
76
72
  import { DictionaryCreationForm } from "./DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs";
77
73
  import { TabSelector } from "./TabSelector/TabSelector.mjs";
74
+ import { NumberItemsSelector } from "./Pagination/NumberItemsSelector.mjs";
75
+ import { Pagination, paginationVariants } from "./Pagination/Pagination.mjs";
76
+ import { ShowingResultsNumberItems } from "./Pagination/ShowingResultsNumberItems.mjs";
77
+ import { KeyPathBreadcrumb } from "./DictionaryFieldEditor/KeyPathBreadcrumb.mjs";
78
+ import { NodeEditor } from "./DictionaryFieldEditor/NodeEditor.mjs";
78
79
  import { H1, H2, H3, H4, H5, H6 } from "./Headers/index.mjs";
79
80
  import { Modal } from "./Modal/Modal.mjs";
80
81
  import { SaveForm } from "./DictionaryFieldEditor/SaveForm/SaveForm.mjs";
@@ -112,7 +113,7 @@ import { WithResizer } from "./WithResizer/index.mjs";
112
113
  import { IDE } from "./IDE/IDE.mjs";
113
114
  import { KeyboardScreenAdapter } from "./KeyboardScreenAdapter/index.mjs";
114
115
  import { LanguageBackground } from "./LanguageBackground/LanguageBackground.mjs";
115
- import { LanguageSection } from "./LanguageBackground/LanguageSection.mjs";
116
+ import { LanguageSection, LocalCardList } from "./LanguageBackground/LanguageSection.mjs";
116
117
  import { LocaleSwitcher } from "./LocaleSwitcherDropDown/LocaleSwitcher.mjs";
117
118
  import { MarkDownIframe } from "./MarkDownRender/MarkDownIframe.mjs";
118
119
  import { Tab } from "./Tab/Tab.mjs";
@@ -141,4 +142,4 @@ import { Terminal } from "./Terminal/Terminal.mjs";
141
142
  import { DesktopThemeSwitcher } from "./ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs";
142
143
  import { MobileThemeSwitcher } from "./ThemeSwitcherDropDown/MobileThemeSwitcher.mjs";
143
144
 
144
- export { Accordion, AutoCompleteTextarea, AutoSizedTextArea, Avatar, Badge, BitbucketLogo, Breadcrumb, Browser, Burger, Button, Carousel, Checkbox, ClickOutsideDiv, Code, CodeBlock, CodeDefault, CodeHighlighted, CollapsibleTable, Command, CommandRoot, Container, ContentEditableTextArea, ContentEditorInput, ContentEditorTextArea, ContentSelector, CopyButton, CopyToClipboard, DesktopNavbar, DesktopThemeSwitcher, Detail, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, FacebookLogo, FileList, Flag, flags_exports as Flags, Footer, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridDistortionPattern, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeightResizer, HideShow, Hr, IDE, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InstagramLogo, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, Label, LanguageBackground, LanguageSection, Link, LinkedInLogo, Loader, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProvider, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, MultiSelect, Navbar, NumberItemsSelector, OTPInput, OTPInputContext, Pagination, Popover, PopoverStatic, PressableSpan, ProductHuntLogo, Radio, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectLabel, SelectSeparator, ShowingResultsNumberItems, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, Tab, TabSelector, Table, Tag, Td, TechLogo, techLogos_exports as TechLogos, Terminal, TextArea, TextEditor, TextEditorContainer, Th, TiktokLogo, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, VersionSwitcher, VersionSwitcherProvider, VerticalSwitchSelector, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, shikiWrapperClassName, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useIsRightDrawerOpen, useLocaleSwitcherContent, usePasswordManagerBadge, usePopoverIds, usePrevious, useRightDrawer, useRightDrawerActions, useToast, useVersionSwitcher };
145
+ export { Accordion, AutoCompleteTextarea, AutoSizedTextArea, Avatar, Badge, BitbucketLogo, Breadcrumb, Browser, Burger, Button, Carousel, Checkbox, ClickOutsideDiv, Code, CodeBlock, CodeDefault, CodeHighlighted, CollapsibleTable, Command, CommandRoot, Container, ContentEditableTextArea, ContentEditor, ContentEditorInput, ContentEditorTextArea, ContentSelector, CopyButton, CopyToClipboard, DesktopNavbar, DesktopThemeSwitcher, Detail, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, FacebookLogo, FileList, Flag, flags_exports as Flags, Footer, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridDistortionPattern, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeightResizer, HideShow, Hr, IDE, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InstagramLogo, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, Label, LanguageBackground, LanguageSection, Link, LinkedInLogo, Loader, LocalCardList, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProvider, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, MultiSelect, Navbar, NodeEditor, NumberItemsSelector, OTPInput, OTPInputContext, Pagination, Popover, PopoverStatic, PressableSpan, ProductHuntLogo, Radio, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectLabel, SelectSeparator, ShowingResultsNumberItems, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, Tab, TabSelector, Table, Tag, Td, TechLogo, techLogos_exports as TechLogos, Terminal, TextArea, TextEditor, TextEditorContainer, Th, TiktokLogo, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, VersionSwitcher, VersionSwitcherProvider, VerticalSwitchSelector, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, shikiWrapperClassName, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useIsRightDrawerOpen, useLocaleSwitcherContent, usePasswordManagerBadge, usePopoverIds, usePrevious, useRightDrawer, useRightDrawerActions, useToast, useVersionSwitcher };
@@ -4,28 +4,16 @@ import { useCallback, useEffect, useMemo, useState } from "react";
4
4
 
5
5
  //#region src/hooks/usePersistedStore.ts
6
6
  const usePersistedStore = (key, initialState) => {
7
- const [state, setState] = useState(() => {
8
- if (initialState !== void 0) {
9
- const result = typeof initialState === "function" ? initialState() : initialState;
10
- if (typeof window === "undefined") return result;
11
- const persistedState = localStorage?.getItem(key);
12
- if (persistedState) try {
13
- return JSON.parse(persistedState);
14
- } catch (e) {
15
- console.error(e);
16
- }
17
- return result;
18
- }
19
- });
7
+ const [state, setState] = useState(() => typeof initialState === "function" ? initialState() : initialState);
20
8
  useEffect(() => {
21
9
  const persistedState = localStorage?.getItem(key);
22
- if (persistedState && persistedState !== "undefined" && state === void 0) try {
10
+ if (!persistedState || persistedState === "undefined") return;
11
+ try {
23
12
  setState(JSON.parse(persistedState));
24
- } catch (e) {
25
- console.error(e);
13
+ } catch (error) {
14
+ console.error(error);
26
15
  }
27
- else if (initialState !== void 0 && state === void 0) setState(initialState);
28
- }, [key, state]);
16
+ }, [key]);
29
17
  /**
30
18
  * Allows setting state either directly or via a functional update.
31
19
  * If passed a function, we merge/update based on the previous state.
@@ -1 +1 @@
1
- {"version":3,"file":"usePersistedStore.mjs","names":[],"sources":["../../../src/hooks/usePersistedStore.ts"],"sourcesContent":["'use client';\n\nimport {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nexport const usePersistedStore = <S>(\n key: string,\n initialState?: S | (() => S)\n): [S, Dispatch<SetStateAction<S>>, () => void, () => void] => {\n const [state, setState] = useState<S>(() => {\n // If you have an initial value on the client, send a message out immediately\n if (initialState !== undefined) {\n const result: S =\n typeof initialState === 'function'\n ? (initialState as () => S)()\n : initialState;\n\n if (typeof window === 'undefined') return result;\n\n const persistedState = localStorage?.getItem(key);\n\n if (persistedState) {\n try {\n return JSON.parse(persistedState);\n } catch (e) {\n console.error(e);\n }\n }\n\n return result;\n }\n\n return undefined as S;\n });\n\n useEffect(() => {\n const persistedState = localStorage?.getItem(key);\n\n if (\n persistedState &&\n persistedState !== 'undefined' &&\n state === undefined\n ) {\n try {\n setState(JSON.parse(persistedState));\n } catch (e) {\n console.error(e);\n }\n } else if (initialState !== undefined && state === undefined) {\n setState(initialState);\n }\n }, [key, state]);\n\n /**\n * Allows setting state either directly or via a functional update.\n * If passed a function, we merge/update based on the previous state.\n */\n const setStateWrapper: typeof setState = useCallback(\n (valueOrUpdater: SetStateAction<S>) => {\n setState((prev) => {\n const newValue: S =\n typeof valueOrUpdater === 'function'\n ? (valueOrUpdater as (prevVal: S) => S)(prev)\n : valueOrUpdater;\n\n if (typeof newValue !== 'undefined') {\n localStorage?.setItem(key, JSON.stringify(newValue));\n return newValue;\n }\n\n return prev;\n });\n },\n [key, setState]\n );\n\n const loadState = useCallback(() => {\n const savedState = localStorage?.getItem(key);\n if (savedState) {\n setState(JSON.parse(savedState));\n }\n }, [key, setState]);\n\n const clearState = useCallback(() => {\n localStorage?.removeItem(key);\n setState(undefined as S);\n }, [key]);\n\n return useMemo(\n () => [state, setStateWrapper, loadState, clearState],\n [state, setStateWrapper, loadState, clearState]\n );\n};\n"],"mappings":";;;;;AAWA,MAAa,qBACX,KACA,iBAC6D;CAC7D,MAAM,CAAC,OAAO,YAAY,eAAkB;EAE1C,IAAI,iBAAiB,QAAW;GAC9B,MAAM,SACJ,OAAO,iBAAiB,aACnB,aAAyB,IAC1B;GAEN,IAAI,OAAO,WAAW,aAAa,OAAO;GAE1C,MAAM,iBAAiB,cAAc,QAAQ,GAAG;GAEhD,IAAI,gBACF,IAAI;IACF,OAAO,KAAK,MAAM,cAAc;GAClC,SAAS,GAAG;IACV,QAAQ,MAAM,CAAC;GACjB;GAGF,OAAO;EACT;CAGF,CAAC;CAED,gBAAgB;EACd,MAAM,iBAAiB,cAAc,QAAQ,GAAG;EAEhD,IACE,kBACA,mBAAmB,eACnB,UAAU,QAEV,IAAI;GACF,SAAS,KAAK,MAAM,cAAc,CAAC;EACrC,SAAS,GAAG;GACV,QAAQ,MAAM,CAAC;EACjB;OACK,IAAI,iBAAiB,UAAa,UAAU,QACjD,SAAS,YAAY;CAEzB,GAAG,CAAC,KAAK,KAAK,CAAC;;;;;CAMf,MAAM,kBAAmC,aACtC,mBAAsC;EACrC,UAAU,SAAS;GACjB,MAAM,WACJ,OAAO,mBAAmB,aACrB,eAAqC,IAAI,IAC1C;GAEN,IAAI,OAAO,aAAa,aAAa;IACnC,cAAc,QAAQ,KAAK,KAAK,UAAU,QAAQ,CAAC;IACnD,OAAO;GACT;GAEA,OAAO;EACT,CAAC;CACH,GACA,CAAC,KAAK,QAAQ,CAChB;CAEA,MAAM,YAAY,kBAAkB;EAClC,MAAM,aAAa,cAAc,QAAQ,GAAG;EAC5C,IAAI,YACF,SAAS,KAAK,MAAM,UAAU,CAAC;CAEnC,GAAG,CAAC,KAAK,QAAQ,CAAC;CAElB,MAAM,aAAa,kBAAkB;EACnC,cAAc,WAAW,GAAG;EAC5B,SAAS,MAAc;CACzB,GAAG,CAAC,GAAG,CAAC;CAER,OAAO,cACC;EAAC;EAAO;EAAiB;EAAW;CAAU,GACpD;EAAC;EAAO;EAAiB;EAAW;CAAU,CAChD;AACF"}
1
+ {"version":3,"file":"usePersistedStore.mjs","names":[],"sources":["../../../src/hooks/usePersistedStore.ts"],"sourcesContent":["'use client';\n\nimport {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nexport const usePersistedStore = <S>(\n key: string,\n initialState?: S | (() => S)\n): [S, Dispatch<SetStateAction<S>>, () => void, () => void] => {\n // The persisted value is deliberately not read here. A lazy initializer runs\n // during render, so the previous `typeof window === 'undefined'` branch gave\n // the server the initial state and the first client render whatever was in\n // `localStorage` — a guaranteed hydration mismatch for anyone who had used\n // the app before. It is loaded in the effect below instead, one render later.\n const [state, setState] = useState<S>(() =>\n typeof initialState === 'function'\n ? (initialState as () => S)()\n : (initialState as S)\n );\n\n useEffect(() => {\n const persistedState = localStorage?.getItem(key);\n\n if (!persistedState || persistedState === 'undefined') return;\n\n try {\n setState(JSON.parse(persistedState));\n } catch (error) {\n console.error(error);\n }\n }, [key]);\n\n /**\n * Allows setting state either directly or via a functional update.\n * If passed a function, we merge/update based on the previous state.\n */\n const setStateWrapper: typeof setState = useCallback(\n (valueOrUpdater: SetStateAction<S>) => {\n setState((prev) => {\n const newValue: S =\n typeof valueOrUpdater === 'function'\n ? (valueOrUpdater as (prevVal: S) => S)(prev)\n : valueOrUpdater;\n\n if (typeof newValue !== 'undefined') {\n localStorage?.setItem(key, JSON.stringify(newValue));\n return newValue;\n }\n\n return prev;\n });\n },\n [key, setState]\n );\n\n const loadState = useCallback(() => {\n const savedState = localStorage?.getItem(key);\n if (savedState) {\n setState(JSON.parse(savedState));\n }\n }, [key, setState]);\n\n const clearState = useCallback(() => {\n localStorage?.removeItem(key);\n setState(undefined as S);\n }, [key]);\n\n return useMemo(\n () => [state, setStateWrapper, loadState, clearState],\n [state, setStateWrapper, loadState, clearState]\n );\n};\n"],"mappings":";;;;;AAWA,MAAa,qBACX,KACA,iBAC6D;CAM7D,MAAM,CAAC,OAAO,YAAY,eACxB,OAAO,iBAAiB,aACnB,aAAyB,IACzB,YACP;CAEA,gBAAgB;EACd,MAAM,iBAAiB,cAAc,QAAQ,GAAG;EAEhD,IAAI,CAAC,kBAAkB,mBAAmB,aAAa;EAEvD,IAAI;GACF,SAAS,KAAK,MAAM,cAAc,CAAC;EACrC,SAAS,OAAO;GACd,QAAQ,MAAM,KAAK;EACrB;CACF,GAAG,CAAC,GAAG,CAAC;;;;;CAMR,MAAM,kBAAmC,aACtC,mBAAsC;EACrC,UAAU,SAAS;GACjB,MAAM,WACJ,OAAO,mBAAmB,aACrB,eAAqC,IAAI,IAC1C;GAEN,IAAI,OAAO,aAAa,aAAa;IACnC,cAAc,QAAQ,KAAK,KAAK,UAAU,QAAQ,CAAC;IACnD,OAAO;GACT;GAEA,OAAO;EACT,CAAC;CACH,GACA,CAAC,KAAK,QAAQ,CAChB;CAEA,MAAM,YAAY,kBAAkB;EAClC,MAAM,aAAa,cAAc,QAAQ,GAAG;EAC5C,IAAI,YACF,SAAS,KAAK,MAAM,UAAU,CAAC;CAEnC,GAAG,CAAC,KAAK,QAAQ,CAAC;CAElB,MAAM,aAAa,kBAAkB;EACnC,cAAc,WAAW,GAAG;EAC5B,SAAS,MAAc;CACzB,GAAG,CAAC,GAAG,CAAC;CAER,OAAO,cACC;EAAC;EAAO;EAAiB;EAAW;CAAU,GACpD;EAAC;EAAO;EAAiB;EAAW;CAAU,CAChD;AACF"}
@@ -118,8 +118,16 @@ const ReactQueryProvider = ({ children, client }) => {
118
118
  if (!wiredRef.current) {
119
119
  wiredRef.current = true;
120
120
  const cache = clientRef.current.getMutationCache();
121
- cache.config.onSuccess = (data, variables, onMutateResult, mutation, context) => handlersRef.current.onSuccess?.(data, variables, onMutateResult, mutation, context);
122
- cache.config.onError = (error, variables, onMutateResult, mutation, context) => handlersRef.current.onError?.(error, variables, onMutateResult, mutation, context);
121
+ const previousOnSuccess = cache.config.onSuccess;
122
+ const previousOnError = cache.config.onError;
123
+ cache.config.onSuccess = (data, variables, onMutateResult, mutation, context) => {
124
+ previousOnSuccess?.(data, variables, onMutateResult, mutation, context);
125
+ handlersRef.current.onSuccess?.(data, variables, onMutateResult, mutation, context);
126
+ };
127
+ cache.config.onError = (error, variables, onMutateResult, mutation, context) => {
128
+ previousOnError?.(error, variables, onMutateResult, mutation, context);
129
+ handlersRef.current.onError?.(error, variables, onMutateResult, mutation, context);
130
+ };
123
131
  cache.config.onSettled = (_data, _error, _variables, _onMutateResult, mutation) => {
124
132
  if (mutation.meta?.invalidateQueries) mutation.meta.invalidateQueries.forEach((queryKey) => {
125
133
  clientRef.current?.invalidateQueries({ queryKey });
@@ -1 +1 @@
1
- {"version":3,"file":"ReactQueryProvider.mjs","names":[],"sources":["../../../src/providers/ReactQueryProvider.tsx"],"sourcesContent":["'use client';\n\nimport { createAsyncStoragePersister } from '@tanstack/query-async-storage-persister';\nimport {\n type DefaultOptions,\n MutationCache,\n QueryClient,\n QueryClientProvider,\n type QueryKey,\n timeoutManager,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';\nimport { type FC, type PropsWithChildren, useRef } from 'react';\nimport { useToast } from '../components/Toaster';\n\nconst PERSIST_MAX_AGE = 1000 * 60 * 60 * 24; // 24h\n// Bump to invalidate every persisted cache after a breaking change in query shapes\nconst PERSIST_BUSTER = 'v1';\n\nconst isServer = typeof window === 'undefined';\n\n// During SSR/prerender, react-query schedules `setTimeout`/`setInterval`\n// timers for query garbage collection (`gcTime`) and background refetching\n// (`refetchInterval`). A query built in the cache during render — even an\n// `enabled: false` one — schedules its gcTime timer immediately. In Node,\n// those pending timers keep the event loop alive, so the prerender server\n// never closes and the build hangs after every page has been rendered.\n//\n// Setting `gcTime: Infinity` in the defaults below avoids the *default*\n// timer, but per-query overrides (e.g. `useSession` sets its own `gcTime`)\n// would reintroduce it. To make this robust regardless of per-query options,\n// override react-query's timeout provider on the server so every timer is\n// `unref`-ed — Node can then exit while they are still pending.\nif (isServer) {\n const unref = (timer: unknown): void => {\n if (\n typeof timer === 'object' &&\n timer !== null &&\n 'unref' in timer &&\n typeof (timer as { unref: unknown }).unref === 'function'\n ) {\n (timer as { unref: () => void }).unref();\n }\n };\n\n timeoutManager.setTimeoutProvider({\n setTimeout: (callback, delay) => {\n const timer = setTimeout(callback, delay);\n unref(timer);\n return timer;\n },\n clearTimeout: (timer) => clearTimeout(timer),\n setInterval: (callback, delay) => {\n const timer = setInterval(callback, delay);\n unref(timer);\n return timer;\n },\n clearInterval: (timer) => clearInterval(timer),\n });\n}\n\nconst defaultQueryOptions: DefaultOptions = {\n queries: {\n retry: 1,\n // Keep data fresh for 30 seconds to avoid unnecessary refetches during navigation\n staleTime: 30 * 1000,\n gcTime: PERSIST_MAX_AGE,\n // Only refetch on mount if data is stale (not every single mount)\n refetchOnMount: true,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n },\n mutations: {\n retry: 0,\n },\n};\n\nconst browserLocalStorage = {\n getItem: (key: string) => Promise.resolve(window.localStorage.getItem(key)),\n setItem: (key: string, value: string) =>\n Promise.resolve(window.localStorage.setItem(key, value)),\n removeItem: (key: string) =>\n Promise.resolve(window.localStorage.removeItem(key)),\n};\n\nconst noopStorage = {\n getItem: () => Promise.resolve(null),\n setItem: () => Promise.resolve(),\n removeItem: () => Promise.resolve(),\n};\n\nconst persister = createAsyncStoragePersister({\n storage: typeof window !== 'undefined' ? browserLocalStorage : noopStorage,\n key: 'intlayer-rq-cache',\n});\n\nconst SHOW_ERROR_CODE = false;\n\ndeclare module '@tanstack/react-query' {\n interface Register {\n mutationMeta: {\n onSuccess?: UseMutationOptions['onSuccess'];\n onError?: UseMutationOptions['onError'];\n invalidateQueries?: QueryKey[];\n resetQueries?: QueryKey[];\n };\n }\n}\n\nconst formatErrorCode = (errorCode: string) => errorCode.split('_').join(' ');\n\n/**\n * Hook to handle error logging and toast notifications\n */\nconst useToastEvents = () => {\n const { toast } = useToast();\n\n const onError: MutationCache['config']['onError'] = (error: any) => {\n const parsed = (() => {\n try {\n if (typeof error === 'string') return JSON.parse(error);\n if (error instanceof Error) return JSON.parse(error.message);\n } catch (_) {}\n return error;\n })();\n\n [parsed].flat().forEach((err: any) => {\n // Check for nested error object (standard in your API responses: { statusCode, error: { ... } })\n const apiError = err?.error ?? err;\n\n if (apiError?.code === 'RATE_LIMIT_EXCEEDED_UNAUTHENTICATED') {\n toast({\n title: apiError.message,\n variant: 'error',\n });\n return;\n }\n\n toast({\n title: formatErrorCode(\n SHOW_ERROR_CODE\n ? (apiError?.code ?? err?.code)\n : (apiError?.title ?? err?.title ?? 'Error')\n ),\n description:\n apiError?.message ??\n err?.message ??\n String(apiError ?? 'An error occurred'),\n variant: 'error',\n });\n });\n };\n\n const onSuccess: MutationCache['config']['onSuccess'] = (data: any) => {\n if (data?.error) {\n toast({\n title: formatErrorCode(data.error.title ?? data.error.code ?? 'Error'),\n description:\n data.error.message ?? data.error.code ?? 'An error occurred',\n variant: 'error',\n });\n }\n\n if (data?.message) {\n toast({\n title: data.message,\n description: data.description,\n variant: 'success',\n });\n }\n };\n\n return {\n onError,\n onSuccess,\n };\n};\n\nexport const getQueryClient = () =>\n new QueryClient({ defaultOptions: defaultQueryOptions });\n\ninterface ReactQueryProviderProps {\n client?: QueryClient;\n}\n\nexport const ReactQueryProvider: FC<\n PropsWithChildren<ReactQueryProviderProps>\n> = ({ children, client }) => {\n const { onError, onSuccess } = useToastEvents();\n // Keep handlers in a ref so the cache config (set once below) always calls\n // the latest closures from useToastEvents without needing re-wiring.\n const handlersRef = useRef({ onSuccess, onError });\n handlersRef.current = { onSuccess, onError };\n\n const clientRef = useRef<QueryClient>(client ?? null);\n\n if (!clientRef.current) {\n clientRef.current = new QueryClient({\n defaultOptions: defaultQueryOptions,\n mutationCache: new MutationCache(),\n });\n }\n\n // Wire toast handlers + meta-driven invalidation onto whatever client we\n // ended up with. Required even when the client is created externally (e.g.\n // via getQueryClient() in TanStack Router context), since the externally\n // created client ships with a bare MutationCache.\n const wiredRef = useRef(false);\n if (!wiredRef.current) {\n wiredRef.current = true;\n const cache = clientRef.current.getMutationCache();\n cache.config.onSuccess = (\n data,\n variables,\n onMutateResult,\n mutation,\n context\n ) =>\n handlersRef.current.onSuccess?.(\n data,\n variables,\n onMutateResult,\n mutation,\n context\n );\n cache.config.onError = (\n error,\n variables,\n onMutateResult,\n mutation,\n context\n ) =>\n handlersRef.current.onError?.(\n error,\n variables,\n onMutateResult,\n mutation,\n context\n );\n cache.config.onSettled = (\n _data,\n _error,\n _variables,\n _onMutateResult,\n mutation\n ) => {\n if (mutation.meta?.invalidateQueries) {\n mutation.meta.invalidateQueries.forEach((queryKey) => {\n clientRef.current?.invalidateQueries({ queryKey });\n });\n }\n\n if (mutation.meta?.resetQueries) {\n mutation.meta.resetQueries.forEach((queryKey) => {\n clientRef.current?.resetQueries({ queryKey });\n });\n }\n };\n }\n\n if (client || typeof window === 'undefined') {\n return (\n <QueryClientProvider client={clientRef.current}>\n {children}\n </QueryClientProvider>\n );\n }\n\n return (\n <PersistQueryClientProvider\n client={clientRef.current}\n persistOptions={{\n persister,\n maxAge: PERSIST_MAX_AGE,\n buster: PERSIST_BUSTER,\n dehydrateOptions: {\n shouldDehydrateQuery: (query) => query.state.status === 'success',\n },\n }}\n >\n {children}\n </PersistQueryClientProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"ReactQueryProvider.mjs","names":[],"sources":["../../../src/providers/ReactQueryProvider.tsx"],"sourcesContent":["'use client';\n\nimport { createAsyncStoragePersister } from '@tanstack/query-async-storage-persister';\nimport {\n type DefaultOptions,\n MutationCache,\n QueryClient,\n QueryClientProvider,\n type QueryKey,\n timeoutManager,\n type UseMutationOptions,\n} from '@tanstack/react-query';\nimport { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';\nimport { type FC, type PropsWithChildren, useRef } from 'react';\nimport { useToast } from '../components/Toaster';\n\nconst PERSIST_MAX_AGE = 1000 * 60 * 60 * 24; // 24h\n// Bump to invalidate every persisted cache after a breaking change in query shapes\nconst PERSIST_BUSTER = 'v1';\n\nconst isServer = typeof window === 'undefined';\n\n// During SSR/prerender, react-query schedules `setTimeout`/`setInterval`\n// timers for query garbage collection (`gcTime`) and background refetching\n// (`refetchInterval`). A query built in the cache during render — even an\n// `enabled: false` one — schedules its gcTime timer immediately. In Node,\n// those pending timers keep the event loop alive, so the prerender server\n// never closes and the build hangs after every page has been rendered.\n//\n// Setting `gcTime: Infinity` in the defaults below avoids the *default*\n// timer, but per-query overrides (e.g. `useSession` sets its own `gcTime`)\n// would reintroduce it. To make this robust regardless of per-query options,\n// override react-query's timeout provider on the server so every timer is\n// `unref`-ed — Node can then exit while they are still pending.\nif (isServer) {\n const unref = (timer: unknown): void => {\n if (\n typeof timer === 'object' &&\n timer !== null &&\n 'unref' in timer &&\n typeof (timer as { unref: unknown }).unref === 'function'\n ) {\n (timer as { unref: () => void }).unref();\n }\n };\n\n timeoutManager.setTimeoutProvider({\n setTimeout: (callback, delay) => {\n const timer = setTimeout(callback, delay);\n unref(timer);\n return timer;\n },\n clearTimeout: (timer) => clearTimeout(timer),\n setInterval: (callback, delay) => {\n const timer = setInterval(callback, delay);\n unref(timer);\n return timer;\n },\n clearInterval: (timer) => clearInterval(timer),\n });\n}\n\nconst defaultQueryOptions: DefaultOptions = {\n queries: {\n retry: 1,\n // Keep data fresh for 30 seconds to avoid unnecessary refetches during navigation\n staleTime: 30 * 1000,\n gcTime: PERSIST_MAX_AGE,\n // Only refetch on mount if data is stale (not every single mount)\n refetchOnMount: true,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n },\n mutations: {\n retry: 0,\n },\n};\n\nconst browserLocalStorage = {\n getItem: (key: string) => Promise.resolve(window.localStorage.getItem(key)),\n setItem: (key: string, value: string) =>\n Promise.resolve(window.localStorage.setItem(key, value)),\n removeItem: (key: string) =>\n Promise.resolve(window.localStorage.removeItem(key)),\n};\n\nconst noopStorage = {\n getItem: () => Promise.resolve(null),\n setItem: () => Promise.resolve(),\n removeItem: () => Promise.resolve(),\n};\n\nconst persister = createAsyncStoragePersister({\n storage: typeof window !== 'undefined' ? browserLocalStorage : noopStorage,\n key: 'intlayer-rq-cache',\n});\n\nconst SHOW_ERROR_CODE = false;\n\ndeclare module '@tanstack/react-query' {\n interface Register {\n mutationMeta: {\n onSuccess?: UseMutationOptions['onSuccess'];\n onError?: UseMutationOptions['onError'];\n invalidateQueries?: QueryKey[];\n resetQueries?: QueryKey[];\n };\n }\n}\n\nconst formatErrorCode = (errorCode: string) => errorCode.split('_').join(' ');\n\n/**\n * Hook to handle error logging and toast notifications\n */\nconst useToastEvents = () => {\n const { toast } = useToast();\n\n const onError: MutationCache['config']['onError'] = (error: any) => {\n const parsed = (() => {\n try {\n if (typeof error === 'string') return JSON.parse(error);\n if (error instanceof Error) return JSON.parse(error.message);\n } catch (_) {}\n return error;\n })();\n\n [parsed].flat().forEach((err: any) => {\n // Check for nested error object (standard in your API responses: { statusCode, error: { ... } })\n const apiError = err?.error ?? err;\n\n if (apiError?.code === 'RATE_LIMIT_EXCEEDED_UNAUTHENTICATED') {\n toast({\n title: apiError.message,\n variant: 'error',\n });\n return;\n }\n\n toast({\n title: formatErrorCode(\n SHOW_ERROR_CODE\n ? (apiError?.code ?? err?.code)\n : (apiError?.title ?? err?.title ?? 'Error')\n ),\n description:\n apiError?.message ??\n err?.message ??\n String(apiError ?? 'An error occurred'),\n variant: 'error',\n });\n });\n };\n\n const onSuccess: MutationCache['config']['onSuccess'] = (data: any) => {\n if (data?.error) {\n toast({\n title: formatErrorCode(data.error.title ?? data.error.code ?? 'Error'),\n description:\n data.error.message ?? data.error.code ?? 'An error occurred',\n variant: 'error',\n });\n }\n\n if (data?.message) {\n toast({\n title: data.message,\n description: data.description,\n variant: 'success',\n });\n }\n };\n\n return {\n onError,\n onSuccess,\n };\n};\n\nexport const getQueryClient = () =>\n new QueryClient({ defaultOptions: defaultQueryOptions });\n\ninterface ReactQueryProviderProps {\n client?: QueryClient;\n}\n\nexport const ReactQueryProvider: FC<\n PropsWithChildren<ReactQueryProviderProps>\n> = ({ children, client }) => {\n const { onError, onSuccess } = useToastEvents();\n // Keep handlers in a ref so the cache config (set once below) always calls\n // the latest closures from useToastEvents without needing re-wiring.\n const handlersRef = useRef({ onSuccess, onError });\n handlersRef.current = { onSuccess, onError };\n\n const clientRef = useRef<QueryClient>(client ?? null);\n\n if (!clientRef.current) {\n clientRef.current = new QueryClient({\n defaultOptions: defaultQueryOptions,\n mutationCache: new MutationCache(),\n });\n }\n\n // Wire toast handlers + meta-driven invalidation onto whatever client we\n // ended up with. Required even when the client is created externally (e.g.\n // via getQueryClient() in TanStack Router context), since the externally\n // created client ships with a bare MutationCache.\n const wiredRef = useRef(false);\n if (!wiredRef.current) {\n wiredRef.current = true;\n const cache = clientRef.current.getMutationCache();\n // Chain rather than replace: an externally created client may already carry\n // handlers, e.g. the router SSR-query integration wraps `onError` to turn a\n // `redirect()` thrown inside a mutation into a navigation.\n const previousOnSuccess = cache.config.onSuccess;\n const previousOnError = cache.config.onError;\n cache.config.onSuccess = (\n data,\n variables,\n onMutateResult,\n mutation,\n context\n ) => {\n previousOnSuccess?.(data, variables, onMutateResult, mutation, context);\n handlersRef.current.onSuccess?.(\n data,\n variables,\n onMutateResult,\n mutation,\n context\n );\n };\n cache.config.onError = (\n error,\n variables,\n onMutateResult,\n mutation,\n context\n ) => {\n previousOnError?.(error, variables, onMutateResult, mutation, context);\n handlersRef.current.onError?.(\n error,\n variables,\n onMutateResult,\n mutation,\n context\n );\n };\n cache.config.onSettled = (\n _data,\n _error,\n _variables,\n _onMutateResult,\n mutation\n ) => {\n if (mutation.meta?.invalidateQueries) {\n mutation.meta.invalidateQueries.forEach((queryKey) => {\n clientRef.current?.invalidateQueries({ queryKey });\n });\n }\n\n if (mutation.meta?.resetQueries) {\n mutation.meta.resetQueries.forEach((queryKey) => {\n clientRef.current?.resetQueries({ queryKey });\n });\n }\n };\n }\n\n if (client || typeof window === 'undefined') {\n return (\n <QueryClientProvider client={clientRef.current}>\n {children}\n </QueryClientProvider>\n );\n }\n\n return (\n <PersistQueryClientProvider\n client={clientRef.current}\n persistOptions={{\n persister,\n maxAge: PERSIST_MAX_AGE,\n buster: PERSIST_BUSTER,\n dehydrateOptions: {\n shouldDehydrateQuery: (query) => query.state.status === 'success',\n },\n }}\n >\n {children}\n </PersistQueryClientProvider>\n );\n};\n"],"mappings":"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"}
@@ -12,23 +12,34 @@ const isServer = typeof window === "undefined";
12
12
  /**
13
13
  * Inline bootstrap applying the persisted theme before the first paint.
14
14
  *
15
- * Serialized through `Function.prototype.toString()` and injected as an inline
16
- * `<script>`, so it must stay self-contained: no import, no module-scope
17
- * binding, no reference the bundler could rewrite into a helper call. Every
18
- * value it needs is passed as an argument.
15
+ * Held as source text rather than serialized from a real function through
16
+ * `Function.prototype.toString()`: that echoes whatever formatting the bundler
17
+ * emitted, and the SSR and browser bundles do not agree on it (tabs versus
18
+ * spaces), so the two renders produced different script bodies and hydration
19
+ * failed. A string literal is copied verbatim by every bundler.
20
+ *
21
+ * It runs before hydration, so it must stay self-contained: no import, no
22
+ * module-scope binding. Every value it needs is passed as an argument.
19
23
  */
20
- const themeScript = (storageKey, themeAttribute, darkMediaQuery) => {
21
- let storedTheme = null;
22
- try {
23
- storedTheme = localStorage.getItem(storageKey);
24
- } catch {}
25
- const theme = storedTheme === "light" || storedTheme === "dark" ? storedTheme : window.matchMedia(darkMediaQuery).matches ? "dark" : "light";
26
- const element = document.documentElement;
27
- element.setAttribute(themeAttribute, theme);
28
- element.style.colorScheme = theme;
29
- };
24
+ const THEME_SCRIPT_SOURCE = `(function (storageKey, themeAttribute, darkMediaQuery) {
25
+ var storedTheme = null;
26
+ try {
27
+ storedTheme = localStorage.getItem(storageKey);
28
+ } catch (error) {
29
+ /* Storage can throw (private mode, blocked cookies) — fall back to the OS. */
30
+ }
31
+ var theme =
32
+ storedTheme === 'light' || storedTheme === 'dark'
33
+ ? storedTheme
34
+ : window.matchMedia(darkMediaQuery).matches
35
+ ? 'dark'
36
+ : 'light';
37
+ var element = document.documentElement;
38
+ element.setAttribute(themeAttribute, theme);
39
+ element.style.colorScheme = theme;
40
+ })`;
30
41
  /** Serializes the bootstrap and its arguments into inline script source. */
31
- const buildBootstrap = (storageKey) => `(${themeScript})(${JSON.stringify(storageKey)},${JSON.stringify(THEME_ATTRIBUTE)},${JSON.stringify(DARK_MEDIA_QUERY)})`;
42
+ const buildBootstrap = (storageKey) => `${THEME_SCRIPT_SOURCE}(${JSON.stringify(storageKey)},${JSON.stringify(THEME_ATTRIBUTE)},${JSON.stringify(DARK_MEDIA_QUERY)})`;
32
43
  /** Reads the persisted preference, discarding unknown values. */
33
44
  const getStoredTheme = (storageKey) => {
34
45
  try {
@@ -117,6 +128,7 @@ const Theme = ({ storageKey = "theme", nonce, children }) => {
117
128
  return /* @__PURE__ */ jsxs(ThemeContext.Provider, {
118
129
  value,
119
130
  children: [/* @__PURE__ */ jsx("script", {
131
+ suppressHydrationWarning: true,
120
132
  nonce: isServer ? nonce : "",
121
133
  dangerouslySetInnerHTML: { __html: buildBootstrap(storageKey) }
122
134
  }), children]
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.mjs","names":[],"sources":["../../../src/providers/ThemeProvider.tsx"],"sourcesContent":["'use client';\n\nimport {\n createContext,\n type FC,\n type PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\n\n/** Theme actually painted — the OS preference once `system` is resolved. */\nexport type ResolvedTheme = 'light' | 'dark';\n\n/** Theme stored as the user preference. `system` follows the OS setting. */\nexport type Theme = ResolvedTheme | 'system';\n\n/** Attribute mirrored on `<html>`; the Tailwind dark variant keys on it. */\nconst THEME_ATTRIBUTE = 'data-theme';\n\n/** Media query resolving the OS colour scheme. */\nconst DARK_MEDIA_QUERY = '(prefers-color-scheme: dark)';\n\nconst isServer = typeof window === 'undefined';\n\n/**\n * Inline bootstrap applying the persisted theme before the first paint.\n *\n * Serialized through `Function.prototype.toString()` and injected as an inline\n * `<script>`, so it must stay self-contained: no import, no module-scope\n * binding, no reference the bundler could rewrite into a helper call. Every\n * value it needs is passed as an argument.\n */\nconst themeScript = (\n storageKey: string,\n themeAttribute: string,\n darkMediaQuery: string\n): void => {\n let storedTheme: string | null = null;\n\n try {\n storedTheme = localStorage.getItem(storageKey);\n } catch {\n // Storage can throw (private mode, blocked cookies) — fall back to the OS.\n }\n\n const theme =\n storedTheme === 'light' || storedTheme === 'dark'\n ? storedTheme\n : window.matchMedia(darkMediaQuery).matches\n ? 'dark'\n : 'light';\n\n const element = document.documentElement;\n\n element.setAttribute(themeAttribute, theme);\n element.style.colorScheme = theme;\n};\n\n/** Serializes the bootstrap and its arguments into inline script source. */\nconst buildBootstrap = (storageKey: string): string =>\n `(${themeScript})(${JSON.stringify(storageKey)},${JSON.stringify(THEME_ATTRIBUTE)},${JSON.stringify(DARK_MEDIA_QUERY)})`;\n\n/** Reads the persisted preference, discarding unknown values. */\nconst getStoredTheme = (storageKey: string): Theme => {\n try {\n const storedTheme = localStorage.getItem(storageKey);\n\n if (\n storedTheme === 'light' ||\n storedTheme === 'dark' ||\n storedTheme === 'system'\n ) {\n return storedTheme;\n }\n } catch {\n // Storage can throw (private mode, blocked cookies).\n }\n\n return 'system';\n};\n\n/**\n * Suppresses CSS transitions while the theme attribute flips, so every themed\n * element repaints at once instead of animating between palettes.\n *\n * @returns Callback restoring transitions, to call once the theme is applied.\n */\nconst suppressTransitions = (nonce?: string): (() => void) => {\n const style = document.createElement('style');\n\n if (nonce) style.setAttribute('nonce', nonce);\n\n style.appendChild(\n document.createTextNode('*,*::before,*::after{transition:none!important}')\n );\n document.head.appendChild(style);\n\n return () => {\n // Reading a computed value forces a synchronous style recalculation, so\n // the new theme is committed while transitions are still suppressed.\n getComputedStyle(document.body).getPropertyValue('transition');\n style.remove();\n };\n};\n\nconst useIsomorphicLayoutEffect = isServer ? useEffect : useLayoutEffect;\n\ntype ThemeContextValue = {\n /** Persisted preference — `system` while following the OS. */\n theme: Theme;\n /** Theme applied to `<html>`. `undefined` until the client resolves it. */\n resolvedTheme: ResolvedTheme | undefined;\n /** Persists a preference and applies it. */\n setTheme: (theme: Theme) => void;\n};\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\n/** Served outside of a provider, so consumers render light instead of crashing. */\nconst fallbackThemeContext: ThemeContextValue = {\n theme: 'system',\n resolvedTheme: undefined,\n setTheme: () => undefined,\n};\n\n/**\n * Reads and updates the current theme.\n *\n * @example\n * ```tsx\n * const { resolvedTheme, setTheme } = useTheme();\n * ```\n */\nexport const useTheme = (): ThemeContextValue =>\n useContext(ThemeContext) ?? fallbackThemeContext;\n\nexport type ThemeProviderProps = {\n /** `localStorage` key holding the preference. Defaults to `theme`. */\n storageKey?: string;\n /** CSP nonce, required when the page forbids unsafe inline scripts. */\n nonce?: string;\n};\n\nconst Theme: FC<PropsWithChildren<ThemeProviderProps>> = ({\n storageKey = 'theme',\n nonce,\n children,\n}) => {\n // Both the server render and the first client one start from `system`, so\n // the hydrated markup matches; the browser state is read back before paint.\n const [theme, setThemeState] = useState<Theme>('system');\n const [systemTheme, setSystemTheme] = useState<ResolvedTheme | undefined>(\n undefined\n );\n\n const resolvedTheme = theme === 'system' ? systemTheme : theme;\n\n // Read the browser state back before the first paint, then keep following\n // the OS preference and the other tabs.\n useIsomorphicLayoutEffect(() => {\n const media = window.matchMedia(DARK_MEDIA_QUERY);\n\n setThemeState(getStoredTheme(storageKey));\n setSystemTheme(media.matches ? 'dark' : 'light');\n\n const handleSystemChange = (event: MediaQueryListEvent) =>\n setSystemTheme(event.matches ? 'dark' : 'light');\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key !== storageKey) return;\n\n setThemeState(getStoredTheme(storageKey));\n };\n\n media.addEventListener('change', handleSystemChange);\n window.addEventListener('storage', handleStorageChange);\n\n return () => {\n media.removeEventListener('change', handleSystemChange);\n window.removeEventListener('storage', handleStorageChange);\n };\n }, [storageKey]);\n\n // Mirror the resolved theme onto `<html>`.\n useIsomorphicLayoutEffect(() => {\n if (!resolvedTheme) return;\n\n const element = document.documentElement;\n\n // The inline bootstrap already applied it on the initial load.\n if (element.getAttribute(THEME_ATTRIBUTE) === resolvedTheme) return;\n\n const restoreTransitions = suppressTransitions(nonce);\n\n element.setAttribute(THEME_ATTRIBUTE, resolvedTheme);\n element.style.colorScheme = resolvedTheme;\n\n restoreTransitions();\n }, [resolvedTheme, nonce]);\n\n const setTheme = useCallback(\n (nextTheme: Theme) => {\n setThemeState(nextTheme);\n\n try {\n localStorage.setItem(storageKey, nextTheme);\n } catch {\n // Storage can throw — the choice then only lasts for this page.\n }\n },\n [storageKey]\n );\n\n const value = useMemo<ThemeContextValue>(\n () => ({ theme, resolvedTheme, setTheme }),\n [theme, resolvedTheme, setTheme]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n <script\n // Browsers hide the nonce value from the DOM API, so echoing it while\n // hydrating would mismatch the server markup.\n nonce={isServer ? nonce : ''}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: the bootstrap has to run before hydration, and its content is built from literals\n dangerouslySetInnerHTML={{ __html: buildBootstrap(storageKey) }}\n />\n {children}\n </ThemeContext.Provider>\n );\n};\n\n/**\n * Applies the persisted theme to `<html>` before the first paint, keeps it in\n * sync with the OS preference and with the other tabs, and exposes it through\n * {@link useTheme}.\n *\n * Nested providers pass through, so a layout can mount one without fighting an\n * outer provider over the `<html>` attribute.\n */\nexport const ThemeProvider: FC<PropsWithChildren<ThemeProviderProps>> = ({\n children,\n ...props\n}) => {\n const parentTheme = useContext(ThemeContext);\n\n if (parentTheme) return <>{children}</>;\n\n return <Theme {...props}>{children}</Theme>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThemeProvider.mjs","names":[],"sources":["../../../src/providers/ThemeProvider.tsx"],"sourcesContent":["'use client';\n\nimport {\n createContext,\n type FC,\n type PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\n\n/** Theme actually painted — the OS preference once `system` is resolved. */\nexport type ResolvedTheme = 'light' | 'dark';\n\n/** Theme stored as the user preference. `system` follows the OS setting. */\nexport type Theme = ResolvedTheme | 'system';\n\n/** Attribute mirrored on `<html>`; the Tailwind dark variant keys on it. */\nconst THEME_ATTRIBUTE = 'data-theme';\n\n/** Media query resolving the OS colour scheme. */\nconst DARK_MEDIA_QUERY = '(prefers-color-scheme: dark)';\n\nconst isServer = typeof window === 'undefined';\n\n/**\n * Inline bootstrap applying the persisted theme before the first paint.\n *\n * Held as source text rather than serialized from a real function through\n * `Function.prototype.toString()`: that echoes whatever formatting the bundler\n * emitted, and the SSR and browser bundles do not agree on it (tabs versus\n * spaces), so the two renders produced different script bodies and hydration\n * failed. A string literal is copied verbatim by every bundler.\n *\n * It runs before hydration, so it must stay self-contained: no import, no\n * module-scope binding. Every value it needs is passed as an argument.\n */\nconst THEME_SCRIPT_SOURCE = `(function (storageKey, themeAttribute, darkMediaQuery) {\n var storedTheme = null;\n try {\n storedTheme = localStorage.getItem(storageKey);\n } catch (error) {\n /* Storage can throw (private mode, blocked cookies) — fall back to the OS. */\n }\n var theme =\n storedTheme === 'light' || storedTheme === 'dark'\n ? storedTheme\n : window.matchMedia(darkMediaQuery).matches\n ? 'dark'\n : 'light';\n var element = document.documentElement;\n element.setAttribute(themeAttribute, theme);\n element.style.colorScheme = theme;\n})`;\n\n/** Serializes the bootstrap and its arguments into inline script source. */\nconst buildBootstrap = (storageKey: string): string =>\n `${THEME_SCRIPT_SOURCE}(${JSON.stringify(storageKey)},${JSON.stringify(THEME_ATTRIBUTE)},${JSON.stringify(DARK_MEDIA_QUERY)})`;\n\n/** Reads the persisted preference, discarding unknown values. */\nconst getStoredTheme = (storageKey: string): Theme => {\n try {\n const storedTheme = localStorage.getItem(storageKey);\n\n if (\n storedTheme === 'light' ||\n storedTheme === 'dark' ||\n storedTheme === 'system'\n ) {\n return storedTheme;\n }\n } catch {\n // Storage can throw (private mode, blocked cookies).\n }\n\n return 'system';\n};\n\n/**\n * Suppresses CSS transitions while the theme attribute flips, so every themed\n * element repaints at once instead of animating between palettes.\n *\n * @returns Callback restoring transitions, to call once the theme is applied.\n */\nconst suppressTransitions = (nonce?: string): (() => void) => {\n const style = document.createElement('style');\n\n if (nonce) style.setAttribute('nonce', nonce);\n\n style.appendChild(\n document.createTextNode('*,*::before,*::after{transition:none!important}')\n );\n document.head.appendChild(style);\n\n return () => {\n // Reading a computed value forces a synchronous style recalculation, so\n // the new theme is committed while transitions are still suppressed.\n getComputedStyle(document.body).getPropertyValue('transition');\n style.remove();\n };\n};\n\nconst useIsomorphicLayoutEffect = isServer ? useEffect : useLayoutEffect;\n\ntype ThemeContextValue = {\n /** Persisted preference — `system` while following the OS. */\n theme: Theme;\n /** Theme applied to `<html>`. `undefined` until the client resolves it. */\n resolvedTheme: ResolvedTheme | undefined;\n /** Persists a preference and applies it. */\n setTheme: (theme: Theme) => void;\n};\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\n/** Served outside of a provider, so consumers render light instead of crashing. */\nconst fallbackThemeContext: ThemeContextValue = {\n theme: 'system',\n resolvedTheme: undefined,\n setTheme: () => undefined,\n};\n\n/**\n * Reads and updates the current theme.\n *\n * @example\n * ```tsx\n * const { resolvedTheme, setTheme } = useTheme();\n * ```\n */\nexport const useTheme = (): ThemeContextValue =>\n useContext(ThemeContext) ?? fallbackThemeContext;\n\nexport type ThemeProviderProps = {\n /** `localStorage` key holding the preference. Defaults to `theme`. */\n storageKey?: string;\n /** CSP nonce, required when the page forbids unsafe inline scripts. */\n nonce?: string;\n};\n\nconst Theme: FC<PropsWithChildren<ThemeProviderProps>> = ({\n storageKey = 'theme',\n nonce,\n children,\n}) => {\n // Both the server render and the first client one start from `system`, so\n // the hydrated markup matches; the browser state is read back before paint.\n const [theme, setThemeState] = useState<Theme>('system');\n const [systemTheme, setSystemTheme] = useState<ResolvedTheme | undefined>(\n undefined\n );\n\n const resolvedTheme = theme === 'system' ? systemTheme : theme;\n\n // Read the browser state back before the first paint, then keep following\n // the OS preference and the other tabs.\n useIsomorphicLayoutEffect(() => {\n const media = window.matchMedia(DARK_MEDIA_QUERY);\n\n setThemeState(getStoredTheme(storageKey));\n setSystemTheme(media.matches ? 'dark' : 'light');\n\n const handleSystemChange = (event: MediaQueryListEvent) =>\n setSystemTheme(event.matches ? 'dark' : 'light');\n\n const handleStorageChange = (event: StorageEvent) => {\n if (event.key !== storageKey) return;\n\n setThemeState(getStoredTheme(storageKey));\n };\n\n media.addEventListener('change', handleSystemChange);\n window.addEventListener('storage', handleStorageChange);\n\n return () => {\n media.removeEventListener('change', handleSystemChange);\n window.removeEventListener('storage', handleStorageChange);\n };\n }, [storageKey]);\n\n // Mirror the resolved theme onto `<html>`.\n useIsomorphicLayoutEffect(() => {\n if (!resolvedTheme) return;\n\n const element = document.documentElement;\n\n // The inline bootstrap already applied it on the initial load.\n if (element.getAttribute(THEME_ATTRIBUTE) === resolvedTheme) return;\n\n const restoreTransitions = suppressTransitions(nonce);\n\n element.setAttribute(THEME_ATTRIBUTE, resolvedTheme);\n element.style.colorScheme = resolvedTheme;\n\n restoreTransitions();\n }, [resolvedTheme, nonce]);\n\n const setTheme = useCallback(\n (nextTheme: Theme) => {\n setThemeState(nextTheme);\n\n try {\n localStorage.setItem(storageKey, nextTheme);\n } catch {\n // Storage can throw — the choice then only lasts for this page.\n }\n },\n [storageKey]\n );\n\n const value = useMemo<ThemeContextValue>(\n () => ({ theme, resolvedTheme, setTheme }),\n [theme, resolvedTheme, setTheme]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n <script\n // Browsers hide the nonce value from the DOM API, so echoing it while\n // hydrating would mismatch the server markup — hence the suppression.\n // The script has already run by then; React never patches it.\n suppressHydrationWarning\n nonce={isServer ? nonce : ''}\n // biome-ignore lint/security/noDangerouslySetInnerHtml: the bootstrap has to run before hydration, and its content is built from literals\n dangerouslySetInnerHTML={{ __html: buildBootstrap(storageKey) }}\n />\n {children}\n </ThemeContext.Provider>\n );\n};\n\n/**\n * Applies the persisted theme to `<html>` before the first paint, keeps it in\n * sync with the OS preference and with the other tabs, and exposes it through\n * {@link useTheme}.\n *\n * Nested providers pass through, so a layout can mount one without fighting an\n * outer provider over the `<html>` attribute.\n */\nexport const ThemeProvider: FC<PropsWithChildren<ThemeProviderProps>> = ({\n children,\n ...props\n}) => {\n const parentTheme = useContext(ThemeContext);\n\n if (parentTheme) return <>{children}</>;\n\n return <Theme {...props}>{children}</Theme>;\n};\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  //#region src/routes.ts
2
- const App_Domain = "app.intlayer.org";
3
- const Website_Domain = "intlayer.org";
2
+ const App_Domain = import.meta.env.VITE_CMS_URL ?? "app.intlayer.org";
3
+ const Website_Domain = import.meta.env.VITE_WEBSITE_URL ?? "intlayer.cn";
4
4
  const Showcase_Domain = "showcase.intlayer.org";
5
- const Backend_Domain = "back.intlayer.org";
5
+ const Backend_Domain = import.meta.env.VITE_BACKEND_URL ?? "back.intlayer.org";
6
6
  const Mcp_Domain = "mcp.intlayer.org";
7
7
  const App_Home_Path = "/";
8
8
  const App_NotFound_Path = "/404";
@@ -95,12 +95,18 @@ const Website_Home_Path = "/";
95
95
  const Website_CMS_Path = "/cms";
96
96
  const Website_TMS_Path = "/tms";
97
97
  const Website_Translate_Path = "/translate";
98
- const Website_Markdown_Preview_Path = "/markdown";
98
+ const Website_Markdown_Path = "/markdown";
99
99
  const Website_Demo_Path = "/demo";
100
100
  const Website_Playground_Path = "/playground";
101
101
  const Website_NotFound_Path = "/404";
102
102
  const Website_Changelog_Path = "/changelog";
103
103
  const Website_Scanner_Path = "/i18n-seo-scanner";
104
+ const Website_MessageConverter_Path = "/i18n-message-converter";
105
+ const Website_IntlayerFormatter_Path = "/intlayer-message-formatter";
106
+ const Website_ICUFormatter_Path = "/icu-message-formatter";
107
+ const Website_I18nextFormatter_Path = "/i18next-message-formatter";
108
+ const Website_VueI18nFormatter_Path = "/vue-i18n-message-formatter";
109
+ const Website_POFormatter_Path = "/po-file-message-formatter";
104
110
  const Website_Doc_Root_Path = "/doc";
105
111
  const Website_Doc_Path = "/doc/get-started";
106
112
  const Website_Doc_Why_Path = "/doc/why";
@@ -109,6 +115,8 @@ const Website_Doc_Chat_Path = "/doc/chat";
109
115
  const Website_Doc_IntlayerVisualEditor_Path = "/doc/concept/editor";
110
116
  const Website_Doc_IntlayerCMS_Path = "/doc/concept/cms";
111
117
  const Website_Doc_SelfHosting_Path = "/doc/self-hosting";
118
+ const Website_Doc_Markdown_Path = "/doc/concept/content/markdown";
119
+ const Website_Doc_HTML_Path = "/doc/concept/content/html";
112
120
  const Website_ReleasesV6_Path = "/doc/releases/v6";
113
121
  const Website_ReleasesV7_Path = "/doc/releases/v7";
114
122
  const Website_ReleasesV8_Path = "/doc/releases/v8";
@@ -139,6 +147,7 @@ const Website_Doc_Environment_Express_Path = "/doc/environment/express";
139
147
  const Website_Doc_Environment_NestJS_Path = "/doc/environment/nest";
140
148
  const Website_Doc_Environment_Fastify_Path = "/doc/environment/fastify";
141
149
  const Website_Doc_Environment_Hono_Path = "/doc/environment/hono";
150
+ const Website_Doc_Environment_Htmx_Path = "/doc/environment/htmx";
142
151
  const Website_Doc_CLI_Fill_Path = "/doc/concept/cli/fill";
143
152
  const Website_Doc_CLI_Translate_Path = "/doc/concept/cli/doc-translate";
144
153
  const Website_Doc_CLI_Review_Path = "/doc/concept/cli/doc-review";
@@ -158,12 +167,18 @@ const Website_Home = `https://${Website_Domain}${"/"}`;
158
167
  const Website_CMS = `https://${Website_Domain}${Website_CMS_Path}`;
159
168
  const Website_TMS = `https://${Website_Domain}${Website_TMS_Path}`;
160
169
  const Website_Translate = `https://${Website_Domain}${Website_Translate_Path}`;
161
- const Website_Markdown_Preview = `https://${Website_Domain}${Website_Markdown_Preview_Path}`;
170
+ const Website_Markdown = `https://${Website_Domain}${Website_Markdown_Path}`;
162
171
  const Website_Demo = `https://${Website_Domain}${Website_Demo_Path}`;
163
172
  const Website_Playground = `https://${Website_Domain}${Website_Playground_Path}`;
164
173
  const Website_NotFound = `https://${Website_Domain}${Website_NotFound_Path}`;
165
174
  const Website_Changelog = `https://${Website_Domain}${Website_Changelog_Path}`;
166
175
  const Website_Scanner = `https://${Website_Domain}${Website_Scanner_Path}`;
176
+ const Website_MessageConverter = `https://${Website_Domain}${Website_MessageConverter_Path}`;
177
+ const Website_IntlayerFormatter = `https://${Website_Domain}${Website_IntlayerFormatter_Path}`;
178
+ const Website_ICUFormatter = `https://${Website_Domain}${Website_ICUFormatter_Path}`;
179
+ const Website_I18nextFormatter = `https://${Website_Domain}${Website_I18nextFormatter_Path}`;
180
+ const Website_VueI18nFormatter = `https://${Website_Domain}${Website_VueI18nFormatter_Path}`;
181
+ const Website_POFormatter = `https://${Website_Domain}${Website_POFormatter_Path}`;
167
182
  const Website_Benchmark = `https://${Website_Domain}${Website_Benchmark_Path}`;
168
183
  const Website_Benchmark_NextJS = `https://${Website_Domain}${Website_Benchmark_NextJS_Path}`;
169
184
  const Website_Benchmark_Tanstack = `https://${Website_Domain}${Website_Benchmark_Tanstack_Path}`;
@@ -175,6 +190,8 @@ const Website_Doc_Chat = `https://${Website_Domain}${Website_Doc_Chat_Path}`;
175
190
  const Website_Doc_IntlayerVisualEditor = `https://${Website_Domain}${Website_Doc_IntlayerVisualEditor_Path}`;
176
191
  const Website_Doc_IntlayerCMS = `https://${Website_Domain}${Website_Doc_IntlayerCMS_Path}`;
177
192
  const Website_Doc_SelfHosting = `https://${Website_Domain}${Website_Doc_SelfHosting_Path}`;
193
+ const Website_Doc_Markdown = `https://${Website_Domain}${Website_Doc_Markdown_Path}`;
194
+ const Website_Doc_HTML = `https://${Website_Domain}${Website_Doc_HTML_Path}`;
178
195
  const Website_ReleasesV6 = `https://${Website_Domain}${Website_ReleasesV6_Path}`;
179
196
  const Website_ReleasesV7 = `https://${Website_Domain}${Website_ReleasesV7_Path}`;
180
197
  const Website_ReleasesV8 = `https://${Website_Domain}${Website_ReleasesV8_Path}`;
@@ -204,6 +221,7 @@ const Website_Doc_Environment_Express = `https://${Website_Domain}${Website_Doc_
204
221
  const Website_Doc_Environment_NestJS = `https://${Website_Domain}${Website_Doc_Environment_NestJS_Path}`;
205
222
  const Website_Doc_Environment_Fastify = `https://${Website_Domain}${Website_Doc_Environment_Fastify_Path}`;
206
223
  const Website_Doc_Environment_Hono = `https://${Website_Domain}${Website_Doc_Environment_Hono_Path}`;
224
+ const Website_Doc_Environment_Htmx = `https://${Website_Domain}${Website_Doc_Environment_Htmx_Path}`;
207
225
  const Website_Doc_CLI_Fill = `https://${Website_Domain}${Website_Doc_CLI_Fill_Path}`;
208
226
  const Website_Doc_CLI_Translate = `https://${Website_Domain}${Website_Doc_CLI_Translate_Path}`;
209
227
  const Website_Doc_CLI_Review = `https://${Website_Domain}${Website_Doc_CLI_Review_Path}`;
@@ -303,5 +321,5 @@ const External_ExampleIntlayerWithReactNative = "https://github.com/aymericzip/i
303
321
  const External_ExampleIntlayerWithExpress = "https://github.com/aymericzip/intlayer/tree/main/examples/express-app";
304
322
 
305
323
  //#endregion
306
- export { App_Admin, App_Admin_Affiliate, App_Admin_Affiliate_Path, App_Admin_Dashboard, App_Admin_Dashboard_Path, App_Admin_Discussions, App_Admin_Discussions_Path, App_Admin_Management, App_Admin_Management_Path, App_Admin_Organizations, App_Admin_Organizations_Path, App_Admin_Path, App_Admin_Projects, App_Admin_Projects_Path, App_Admin_PromoCodes, App_Admin_PromoCodes_Path, App_Admin_Reviewers, App_Admin_Reviewers_Path, App_Admin_Users, App_Admin_Users_Path, App_Affiliation, App_Affiliation_Path, App_Auth_AskResetPassword, App_Auth_AskResetPassword_Path, App_Auth_ChangePassword, App_Auth_ChangePassword_Path, App_Auth_Demo_Path, App_Auth_Path, App_Auth_ResetPassword, App_Auth_ResetPassword_Path, App_Auth_SignIn, App_Auth_SignIn_Path, App_Auth_SignUp, App_Auth_SignUp_Path, App_Auth_TwoFactor, App_Auth_TwoFactor_Path, App_Dashboard, App_Dashboard_Analytics, App_Dashboard_Analytics_Path, App_Dashboard_Assets_Path, App_Dashboard_Dictionaries, App_Dashboard_Dictionaries_Path, App_Dashboard_Editor, App_Dashboard_Editor_Path, App_Dashboard_IDE, App_Dashboard_IDE_Path, App_Dashboard_Organization, App_Dashboard_Organization_Path, App_Dashboard_Profile, App_Dashboard_Profile_Path, App_Dashboard_Projects, App_Dashboard_Projects_Path, App_Dashboard_Scanner, App_Dashboard_Scanner_Path, App_Dashboard_Tags, App_Dashboard_Tags_Path, App_Dashboard_Translate, App_Dashboard_Translate_Path, App_Demo, App_Demo_Path, App_Domain, App_Home_Path, App_Init_Path, App_NotFound_Path, App_Onboarding, App_Onboarding_Path, App_Pricing, App_Pricing_Path, App_ReviewerMarketplace, App_ReviewerMarketplace_Dashboard, App_ReviewerMarketplace_Dashboard_Mission_Path, App_ReviewerMarketplace_Dashboard_Path, App_ReviewerMarketplace_Path, App_ReviewerMarketplace_Reviewer_Path, AuthMd_Path, Backend_Domain, Backend_Health, Backend_OAuth2_Token, Backend_Root, Doc_Blog_Path, Doc_Blog_Root_Path, Doc_Blog_Search_Path, Doc_Blog_What_is_i18n_Path, Doc_CLI_Fill_Path, Doc_CLI_Review_Path, Doc_CLI_Translate_Path, Doc_Chat_Path, Doc_Contributors_Path, Doc_Environment_Adonis_Path, Doc_Environment_Angular_Path, Doc_Environment_Astro_Path, Doc_Environment_CRA_Path, Doc_Environment_Express_Path, Doc_Environment_Fastify_Path, Doc_Environment_Hono_Path, Doc_Environment_Lit_Path, Doc_Environment_Lynx_Path, Doc_Environment_NestJS_Path, Doc_Environment_NextJS_14_Path, Doc_Environment_NextJS_15_Path, Doc_Environment_NextJS_16_Path, Doc_Environment_NextJS_Path, Doc_Environment_Nodejs_Path, Doc_Environment_NuxtAndVue_Path, Doc_Environment_ReactNativeAndExpo_Path, Doc_Environment_Tanstack_Path, Doc_Environment_ViteAndPreact_Path, Doc_Environment_ViteAndReact_Path, Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Doc_Environment_ViteAndReact_ReactRouterV7_Path, Doc_Environment_ViteAndSolid_Path, Doc_Environment_ViteAndSvelte_Path, Doc_Environment_ViteAndVue_Path, Doc_FrequentQuestions_Path, Doc_IntlayerCMS_Path, Doc_IntlayerVisualEditor_Path, Doc_Intlayer_with_Lynx_and_React_Path, Doc_MCP_Path, Doc_Path, Doc_PrivacyPolicy_Path, Doc_ReleasesV6_Path, Doc_ReleasesV7_Path, Doc_ReleasesV8_Path, Doc_Root_Path, Doc_Search_Path, Doc_ShowcaseSubmit_Path, Doc_Showcase_Path, Doc_TermsOfService_Path, Doc_Why_Path, External_AI_Landing_Page, External_Discord, External_DockerHub_SelfHost, External_ExampleIntlayerWithExpress, External_ExampleIntlayerWithNextjs, External_ExampleIntlayerWithReactJS, External_ExampleIntlayerWithReactNative, External_ExampleIntlayerWithViteAndPreact, External_ExampleIntlayerWithViteAndReact, External_ExampleIntlayerWithViteAndSolid, External_ExampleIntlayerWithViteAndSvelte, External_ExampleIntlayerWithViteAndVue, External_Examples, External_Github, External_Github_i18n_benchmark, External_LinkedIn, External_ShowcaseApp, LlmsTxt_Path, Mcp_Domain, Mcp_Root, Mcp_Sse, Showcase_Domain, Showcase_Root, Showcase_Root_Path, Showcase_Submit, Showcase_Submit_Path, Website_Benchmark, Website_Benchmark_NextJS, Website_Benchmark_NextJS_Path, Website_Benchmark_Path, Website_Benchmark_Tanstack, Website_Benchmark_Tanstack_Path, Website_Blog, Website_Blog_Path, Website_Blog_Root, Website_Blog_Root_Path, Website_Blog_Search, Website_Blog_Search_Path, Website_Blog_What_is_i18n, Website_Blog_What_is_i18n_Path, Website_CMS, Website_CMS_Path, Website_Changelog, Website_Changelog_Path, Website_Contributors, Website_Contributors_Path, Website_Demo, Website_Demo_Path, Website_Doc, Website_Doc_CLI_Fill, Website_Doc_CLI_Fill_Path, Website_Doc_CLI_Review, Website_Doc_CLI_Review_Path, Website_Doc_CLI_Translate, Website_Doc_CLI_Translate_Path, Website_Doc_Chat, Website_Doc_Chat_Path, Website_Doc_Environment_Adonis, Website_Doc_Environment_Adonis_Path, Website_Doc_Environment_Angular, Website_Doc_Environment_Angular_Path, Website_Doc_Environment_Astro, Website_Doc_Environment_Astro_Path, Website_Doc_Environment_CRA, Website_Doc_Environment_CRA_Path, Website_Doc_Environment_Express, Website_Doc_Environment_Express_Path, Website_Doc_Environment_Fastify, Website_Doc_Environment_Fastify_Path, Website_Doc_Environment_Hono, Website_Doc_Environment_Hono_Path, Website_Doc_Environment_Lit, Website_Doc_Environment_Lit_Path, Website_Doc_Environment_Lynx, Website_Doc_Environment_Lynx_Path, Website_Doc_Environment_NestJS, Website_Doc_Environment_NestJS_Path, Website_Doc_Environment_NextJS, Website_Doc_Environment_NextJS_14, Website_Doc_Environment_NextJS_14_Path, Website_Doc_Environment_NextJS_15, Website_Doc_Environment_NextJS_15_Path, Website_Doc_Environment_NextJS_16, Website_Doc_Environment_NextJS_16_Path, Website_Doc_Environment_NextJS_Path, Website_Doc_Environment_Nodejs, Website_Doc_Environment_Nodejs_Path, Website_Doc_Environment_NuxtAndVue, Website_Doc_Environment_NuxtAndVue_Path, Website_Doc_Environment_ReactNativeAndExpo, Website_Doc_Environment_ReactNativeAndExpo_Path, Website_Doc_Environment_Tanstack, Website_Doc_Environment_Tanstack_Path, Website_Doc_Environment_ViteAndPreact, Website_Doc_Environment_ViteAndPreact_Path, Website_Doc_Environment_ViteAndReact, Website_Doc_Environment_ViteAndReact_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path, Website_Doc_Environment_ViteAndSolid, Website_Doc_Environment_ViteAndSolid_Path, Website_Doc_Environment_ViteAndSvelte, Website_Doc_Environment_ViteAndSvelte_Path, Website_Doc_Environment_ViteAndVue, Website_Doc_Environment_ViteAndVue_Path, Website_Doc_IntlayerCMS, Website_Doc_IntlayerCMS_Path, Website_Doc_IntlayerVisualEditor, Website_Doc_IntlayerVisualEditor_Path, Website_Doc_Intlayer_with_Lynx_and_React, Website_Doc_Intlayer_with_Lynx_and_React_Path, Website_Doc_MCP, Website_Doc_MCP_Path, Website_Doc_Path, Website_Doc_Root, Website_Doc_Root_Path, Website_Doc_Search, Website_Doc_Search_Path, Website_Doc_SelfHosting, Website_Doc_SelfHosting_Path, Website_Doc_Why, Website_Doc_Why_Path, Website_Domain, Website_FrequentQuestions, Website_FrequentQuestions_Path, Website_Home, Website_Home_Path, Website_Markdown_Preview, Website_Markdown_Preview_Path, Website_NotFound, Website_NotFound_Path, Website_Playground, Website_Playground_Path, Website_PrivacyPolicy, Website_PrivacyPolicy_Path, Website_ReleasesV6, Website_ReleasesV6_Path, Website_ReleasesV7, Website_ReleasesV7_Path, Website_ReleasesV8, Website_ReleasesV8_Path, Website_ReleasesV9_Path, Website_Scanner, Website_Scanner_Path, Website_TMS, Website_TMS_Path, Website_TermsOfService, Website_TermsOfService_Path, Website_Translate, Website_Translate_Path, WellKnown_AgentSkillsIndex_Path, WellKnown_AgentSkills_Path, WellKnown_AiCatalog_Path, WellKnown_ApiCatalog_Path, WellKnown_McpServerCard_Path, WellKnown_OAuthAuthorizationServer_Path, WellKnown_OAuthProtectedResource_Path, getAppAdminAffiliateRoute, getAppAdminOrganizationAbsoluteRoute, getAppAdminOrganizationRoute, getAppAdminProjectAbsoluteRoute, getAppAdminProjectRoute, getAppAdminPromoCodeRoute, getAppAdminReviewerRoute, getAppAdminUserAbsoluteRoute, getAppAdminUserRoute, getAppOnboardingFlowAbsoluteRoute, getAppOnboardingFlowRoute, getAppReviewerMissionRoute, getAppReviewerProfileRoute };
324
+ export { App_Admin, App_Admin_Affiliate, App_Admin_Affiliate_Path, App_Admin_Dashboard, App_Admin_Dashboard_Path, App_Admin_Discussions, App_Admin_Discussions_Path, App_Admin_Management, App_Admin_Management_Path, App_Admin_Organizations, App_Admin_Organizations_Path, App_Admin_Path, App_Admin_Projects, App_Admin_Projects_Path, App_Admin_PromoCodes, App_Admin_PromoCodes_Path, App_Admin_Reviewers, App_Admin_Reviewers_Path, App_Admin_Users, App_Admin_Users_Path, App_Affiliation, App_Affiliation_Path, App_Auth_AskResetPassword, App_Auth_AskResetPassword_Path, App_Auth_ChangePassword, App_Auth_ChangePassword_Path, App_Auth_Demo_Path, App_Auth_Path, App_Auth_ResetPassword, App_Auth_ResetPassword_Path, App_Auth_SignIn, App_Auth_SignIn_Path, App_Auth_SignUp, App_Auth_SignUp_Path, App_Auth_TwoFactor, App_Auth_TwoFactor_Path, App_Dashboard, App_Dashboard_Analytics, App_Dashboard_Analytics_Path, App_Dashboard_Assets_Path, App_Dashboard_Dictionaries, App_Dashboard_Dictionaries_Path, App_Dashboard_Editor, App_Dashboard_Editor_Path, App_Dashboard_IDE, App_Dashboard_IDE_Path, App_Dashboard_Organization, App_Dashboard_Organization_Path, App_Dashboard_Profile, App_Dashboard_Profile_Path, App_Dashboard_Projects, App_Dashboard_Projects_Path, App_Dashboard_Scanner, App_Dashboard_Scanner_Path, App_Dashboard_Tags, App_Dashboard_Tags_Path, App_Dashboard_Translate, App_Dashboard_Translate_Path, App_Demo, App_Demo_Path, App_Domain, App_Home_Path, App_Init_Path, App_NotFound_Path, App_Onboarding, App_Onboarding_Path, App_Pricing, App_Pricing_Path, App_ReviewerMarketplace, App_ReviewerMarketplace_Dashboard, App_ReviewerMarketplace_Dashboard_Mission_Path, App_ReviewerMarketplace_Dashboard_Path, App_ReviewerMarketplace_Path, App_ReviewerMarketplace_Reviewer_Path, AuthMd_Path, Backend_Domain, Backend_Health, Backend_OAuth2_Token, Backend_Root, Doc_Blog_Path, Doc_Blog_Root_Path, Doc_Blog_Search_Path, Doc_Blog_What_is_i18n_Path, Doc_CLI_Fill_Path, Doc_CLI_Review_Path, Doc_CLI_Translate_Path, Doc_Chat_Path, Doc_Contributors_Path, Doc_Environment_Adonis_Path, Doc_Environment_Angular_Path, Doc_Environment_Astro_Path, Doc_Environment_CRA_Path, Doc_Environment_Express_Path, Doc_Environment_Fastify_Path, Doc_Environment_Hono_Path, Doc_Environment_Lit_Path, Doc_Environment_Lynx_Path, Doc_Environment_NestJS_Path, Doc_Environment_NextJS_14_Path, Doc_Environment_NextJS_15_Path, Doc_Environment_NextJS_16_Path, Doc_Environment_NextJS_Path, Doc_Environment_Nodejs_Path, Doc_Environment_NuxtAndVue_Path, Doc_Environment_ReactNativeAndExpo_Path, Doc_Environment_Tanstack_Path, Doc_Environment_ViteAndPreact_Path, Doc_Environment_ViteAndReact_Path, Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Doc_Environment_ViteAndReact_ReactRouterV7_Path, Doc_Environment_ViteAndSolid_Path, Doc_Environment_ViteAndSvelte_Path, Doc_Environment_ViteAndVue_Path, Doc_FrequentQuestions_Path, Doc_IntlayerCMS_Path, Doc_IntlayerVisualEditor_Path, Doc_Intlayer_with_Lynx_and_React_Path, Doc_MCP_Path, Doc_Path, Doc_PrivacyPolicy_Path, Doc_ReleasesV6_Path, Doc_ReleasesV7_Path, Doc_ReleasesV8_Path, Doc_Root_Path, Doc_Search_Path, Doc_ShowcaseSubmit_Path, Doc_Showcase_Path, Doc_TermsOfService_Path, Doc_Why_Path, External_AI_Landing_Page, External_Discord, External_DockerHub_SelfHost, External_ExampleIntlayerWithExpress, External_ExampleIntlayerWithNextjs, External_ExampleIntlayerWithReactJS, External_ExampleIntlayerWithReactNative, External_ExampleIntlayerWithViteAndPreact, External_ExampleIntlayerWithViteAndReact, External_ExampleIntlayerWithViteAndSolid, External_ExampleIntlayerWithViteAndSvelte, External_ExampleIntlayerWithViteAndVue, External_Examples, External_Github, External_Github_i18n_benchmark, External_LinkedIn, External_ShowcaseApp, LlmsTxt_Path, Mcp_Domain, Mcp_Root, Mcp_Sse, Showcase_Domain, Showcase_Root, Showcase_Root_Path, Showcase_Submit, Showcase_Submit_Path, Website_Benchmark, Website_Benchmark_NextJS, Website_Benchmark_NextJS_Path, Website_Benchmark_Path, Website_Benchmark_Tanstack, Website_Benchmark_Tanstack_Path, Website_Blog, Website_Blog_Path, Website_Blog_Root, Website_Blog_Root_Path, Website_Blog_Search, Website_Blog_Search_Path, Website_Blog_What_is_i18n, Website_Blog_What_is_i18n_Path, Website_CMS, Website_CMS_Path, Website_Changelog, Website_Changelog_Path, Website_Contributors, Website_Contributors_Path, Website_Demo, Website_Demo_Path, Website_Doc, Website_Doc_CLI_Fill, Website_Doc_CLI_Fill_Path, Website_Doc_CLI_Review, Website_Doc_CLI_Review_Path, Website_Doc_CLI_Translate, Website_Doc_CLI_Translate_Path, Website_Doc_Chat, Website_Doc_Chat_Path, Website_Doc_Environment_Adonis, Website_Doc_Environment_Adonis_Path, Website_Doc_Environment_Angular, Website_Doc_Environment_Angular_Path, Website_Doc_Environment_Astro, Website_Doc_Environment_Astro_Path, Website_Doc_Environment_CRA, Website_Doc_Environment_CRA_Path, Website_Doc_Environment_Express, Website_Doc_Environment_Express_Path, Website_Doc_Environment_Fastify, Website_Doc_Environment_Fastify_Path, Website_Doc_Environment_Hono, Website_Doc_Environment_Hono_Path, Website_Doc_Environment_Htmx, Website_Doc_Environment_Htmx_Path, Website_Doc_Environment_Lit, Website_Doc_Environment_Lit_Path, Website_Doc_Environment_Lynx, Website_Doc_Environment_Lynx_Path, Website_Doc_Environment_NestJS, Website_Doc_Environment_NestJS_Path, Website_Doc_Environment_NextJS, Website_Doc_Environment_NextJS_14, Website_Doc_Environment_NextJS_14_Path, Website_Doc_Environment_NextJS_15, Website_Doc_Environment_NextJS_15_Path, Website_Doc_Environment_NextJS_16, Website_Doc_Environment_NextJS_16_Path, Website_Doc_Environment_NextJS_Path, Website_Doc_Environment_Nodejs, Website_Doc_Environment_Nodejs_Path, Website_Doc_Environment_NuxtAndVue, Website_Doc_Environment_NuxtAndVue_Path, Website_Doc_Environment_ReactNativeAndExpo, Website_Doc_Environment_ReactNativeAndExpo_Path, Website_Doc_Environment_Tanstack, Website_Doc_Environment_Tanstack_Path, Website_Doc_Environment_ViteAndPreact, Website_Doc_Environment_ViteAndPreact_Path, Website_Doc_Environment_ViteAndReact, Website_Doc_Environment_ViteAndReact_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path, Website_Doc_Environment_ViteAndSolid, Website_Doc_Environment_ViteAndSolid_Path, Website_Doc_Environment_ViteAndSvelte, Website_Doc_Environment_ViteAndSvelte_Path, Website_Doc_Environment_ViteAndVue, Website_Doc_Environment_ViteAndVue_Path, Website_Doc_HTML, Website_Doc_HTML_Path, Website_Doc_IntlayerCMS, Website_Doc_IntlayerCMS_Path, Website_Doc_IntlayerVisualEditor, Website_Doc_IntlayerVisualEditor_Path, Website_Doc_Intlayer_with_Lynx_and_React, Website_Doc_Intlayer_with_Lynx_and_React_Path, Website_Doc_MCP, Website_Doc_MCP_Path, Website_Doc_Markdown, Website_Doc_Markdown_Path, Website_Doc_Path, Website_Doc_Root, Website_Doc_Root_Path, Website_Doc_Search, Website_Doc_Search_Path, Website_Doc_SelfHosting, Website_Doc_SelfHosting_Path, Website_Doc_Why, Website_Doc_Why_Path, Website_Domain, Website_FrequentQuestions, Website_FrequentQuestions_Path, Website_Home, Website_Home_Path, Website_I18nextFormatter, Website_I18nextFormatter_Path, Website_ICUFormatter, Website_ICUFormatter_Path, Website_IntlayerFormatter, Website_IntlayerFormatter_Path, Website_Markdown, Website_Markdown_Path, Website_MessageConverter, Website_MessageConverter_Path, Website_NotFound, Website_NotFound_Path, Website_POFormatter, Website_POFormatter_Path, Website_Playground, Website_Playground_Path, Website_PrivacyPolicy, Website_PrivacyPolicy_Path, Website_ReleasesV6, Website_ReleasesV6_Path, Website_ReleasesV7, Website_ReleasesV7_Path, Website_ReleasesV8, Website_ReleasesV8_Path, Website_ReleasesV9_Path, Website_Scanner, Website_Scanner_Path, Website_TMS, Website_TMS_Path, Website_TermsOfService, Website_TermsOfService_Path, Website_Translate, Website_Translate_Path, Website_VueI18nFormatter, Website_VueI18nFormatter_Path, WellKnown_AgentSkillsIndex_Path, WellKnown_AgentSkills_Path, WellKnown_AiCatalog_Path, WellKnown_ApiCatalog_Path, WellKnown_McpServerCard_Path, WellKnown_OAuthAuthorizationServer_Path, WellKnown_OAuthProtectedResource_Path, getAppAdminAffiliateRoute, getAppAdminOrganizationAbsoluteRoute, getAppAdminOrganizationRoute, getAppAdminProjectAbsoluteRoute, getAppAdminProjectRoute, getAppAdminPromoCodeRoute, getAppAdminReviewerRoute, getAppAdminUserAbsoluteRoute, getAppAdminUserRoute, getAppOnboardingFlowAbsoluteRoute, getAppOnboardingFlowRoute, getAppReviewerMissionRoute, getAppReviewerProfileRoute };
307
325
  //# sourceMappingURL=routes.mjs.map