@intlayer/design-system 8.12.4 → 9.0.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/esm/api/hooks/project.mjs +12 -1
  2. package/dist/esm/api/hooks/project.mjs.map +1 -1
  3. package/dist/esm/api/index.mjs +2 -2
  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/Breadcrumb/index.mjs +10 -7
  7. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  8. package/dist/esm/components/Button/Button.mjs +4 -2
  9. package/dist/esm/components/Button/Button.mjs.map +1 -1
  10. package/dist/esm/components/Carousel/index.mjs +1 -1
  11. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  12. package/dist/esm/components/Container/index.mjs.map +1 -1
  13. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -1
  14. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  15. package/dist/esm/components/DropDown/index.mjs.map +1 -1
  16. package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs +1 -1
  17. package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs.map +1 -1
  18. package/dist/esm/components/Headers/index.mjs +6 -6
  19. package/dist/esm/components/Headers/index.mjs.map +1 -1
  20. package/dist/esm/components/HeightResizer/index.mjs +1 -1
  21. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  22. package/dist/esm/components/Input/Input.mjs.map +1 -1
  23. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  24. package/dist/esm/components/Link/Link.mjs +1 -1
  25. package/dist/esm/components/Link/Link.mjs.map +1 -1
  26. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -1
  27. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  28. package/dist/esm/components/Modal/Modal.mjs.map +1 -1
  29. package/dist/esm/components/Navbar/Burger.mjs +1 -1
  30. package/dist/esm/components/Navbar/Burger.mjs.map +1 -1
  31. package/dist/esm/components/Navbar/MobileNavbar.mjs +1 -1
  32. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  33. package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
  34. package/dist/esm/components/Popover/static.mjs +1 -1
  35. package/dist/esm/components/Popover/static.mjs.map +1 -1
  36. package/dist/esm/components/RightDrawer/RightDrawer.mjs +1 -1
  37. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  38. package/dist/esm/components/Select/Select.mjs.map +1 -1
  39. package/dist/esm/components/Steps/index.mjs +2 -2
  40. package/dist/esm/components/Steps/index.mjs.map +1 -1
  41. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs +1 -1
  42. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
  43. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
  44. package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
  45. package/dist/esm/components/Tag/index.mjs.map +1 -1
  46. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs +1 -1
  47. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
  48. package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs +1 -1
  49. package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
  50. package/dist/esm/components/Toaster/Toast.mjs +1 -1
  51. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  52. package/dist/esm/routes.mjs +4 -4
  53. package/dist/esm/routes.mjs.map +1 -1
  54. package/dist/esm/structured-data/buildAuthorJsonLd.mjs +15 -0
  55. package/dist/esm/structured-data/buildAuthorJsonLd.mjs.map +1 -0
  56. package/dist/esm/structured-data/buildBreadcrumbsJsonLd.mjs +21 -0
  57. package/dist/esm/structured-data/buildBreadcrumbsJsonLd.mjs.map +1 -0
  58. package/dist/esm/structured-data/buildCreativeWorkJsonLd.mjs +45 -0
  59. package/dist/esm/structured-data/buildCreativeWorkJsonLd.mjs.map +1 -0
  60. package/dist/esm/structured-data/buildFAQPageJsonLd.mjs +23 -0
  61. package/dist/esm/structured-data/buildFAQPageJsonLd.mjs.map +1 -0
  62. package/dist/esm/structured-data/buildOrganizationJsonLd.mjs +32 -0
  63. package/dist/esm/structured-data/buildOrganizationJsonLd.mjs.map +1 -0
  64. package/dist/esm/structured-data/buildProductJsonLd.mjs +24 -0
  65. package/dist/esm/structured-data/buildProductJsonLd.mjs.map +1 -0
  66. package/dist/esm/structured-data/buildSoftwareApplicationJsonLd.mjs +54 -0
  67. package/dist/esm/structured-data/buildSoftwareApplicationJsonLd.mjs.map +1 -0
  68. package/dist/esm/structured-data/buildWebsiteJsonLd.mjs +30 -0
  69. package/dist/esm/structured-data/buildWebsiteJsonLd.mjs.map +1 -0
  70. package/dist/esm/structured-data/index.mjs +10 -0
  71. package/dist/types/api/hooks/project.d.ts +2 -1
  72. package/dist/types/api/hooks/project.d.ts.map +1 -1
  73. package/dist/types/api/index.d.ts +2 -2
  74. package/dist/types/api/useIntlayerAPI.d.ts +1 -0
  75. package/dist/types/api/useIntlayerAPI.d.ts.map +1 -1
  76. package/dist/types/components/Badge/index.d.ts +2 -2
  77. package/dist/types/components/Breadcrumb/index.d.ts +2 -2
  78. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  79. package/dist/types/components/Button/Button.d.ts +6 -6
  80. package/dist/types/components/Button/Button.d.ts.map +1 -1
  81. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +2 -2
  82. package/dist/types/components/Command/index.d.ts +2 -2
  83. package/dist/types/components/Container/index.d.ts +3 -3
  84. package/dist/types/components/Container/index.d.ts.map +1 -1
  85. package/dist/types/components/DropDown/index.d.ts.map +1 -1
  86. package/dist/types/components/Headers/index.d.ts.map +1 -1
  87. package/dist/types/components/Input/Checkbox.d.ts +2 -2
  88. package/dist/types/components/Input/Input.d.ts.map +1 -1
  89. package/dist/types/components/Input/Radio.d.ts +2 -2
  90. package/dist/types/components/Link/Link.d.ts +2 -2
  91. package/dist/types/components/Modal/Modal.d.ts.map +1 -1
  92. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
  93. package/dist/types/components/Select/Select.d.ts.map +1 -1
  94. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +1 -1
  95. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts.map +1 -1
  96. package/dist/types/components/Tag/index.d.ts +2 -2
  97. package/dist/types/components/Tag/index.d.ts.map +1 -1
  98. package/dist/types/components/TextArea/AutoSizeTextArea.d.ts +1 -1
  99. package/dist/types/components/Toaster/Toast.d.ts +1 -1
  100. package/dist/types/routes.d.ts +6 -6
  101. package/dist/types/structured-data/buildAuthorJsonLd.d.ts +25 -0
  102. package/dist/types/structured-data/buildAuthorJsonLd.d.ts.map +1 -0
  103. package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts +36 -0
  104. package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts.map +1 -0
  105. package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts +80 -0
  106. package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts.map +1 -0
  107. package/dist/types/structured-data/buildFAQPageJsonLd.d.ts +32 -0
  108. package/dist/types/structured-data/buildFAQPageJsonLd.d.ts.map +1 -0
  109. package/dist/types/structured-data/buildOrganizationJsonLd.d.ts +47 -0
  110. package/dist/types/structured-data/buildOrganizationJsonLd.d.ts.map +1 -0
  111. package/dist/types/structured-data/buildProductJsonLd.d.ts +44 -0
  112. package/dist/types/structured-data/buildProductJsonLd.d.ts.map +1 -0
  113. package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts +83 -0
  114. package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts.map +1 -0
  115. package/dist/types/structured-data/buildWebsiteJsonLd.d.ts +43 -0
  116. package/dist/types/structured-data/buildWebsiteJsonLd.d.ts.map +1 -0
  117. package/dist/types/structured-data/index.d.ts +9 -0
  118. package/package.json +25 -20
  119. package/tailwind.css +11 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TabSelector.mjs","names":[],"sources":["../../../../src/components/TabSelector/TabSelector.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ItemSelectorOrientation,\n useItemSelector,\n} from '@hooks/useItemSelector';\nimport { cn } from '@utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n cloneElement,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n useEffect,\n useRef,\n} from 'react';\n\nexport type TabSelectorColor = \n | 'primary' |\n 'secondary' |\n 'error' |\n 'neutral' |\n 'light' |\n 'dark' |\n 'text';\n\nconst tabSelectorVariant = cva(\n 'relative z-0 flex size-full flex-row items-center gap-2',\n {\n variants: {\n color: {\n primary: 'border-primary text-primary',\n secondary: 'border-secondary text-secondary',\n error: 'border-error bg-error text-error',\n neutral: 'border-neutral text-neutral',\n light: 'border-white text-white',\n dark: 'border-neutral-800 text-neutral-800',\n text: 'border-text text-text',\n },\n },\n defaultVariants: {\n color: 'primary',\n },\n }\n);\n\nconst indicatorVariant = cva(\n 'absolute -z-1 rounded-lg duration-300 ease-in-out motion-reduce:transition-none',\n {\n variants: {\n color: {\n primary: 'bg-primary/10 aria-selected:text-text',\n secondary: 'bg-secondary/10 aria-selected:text-text',\n error: 'bg-error/10 aria-selected:text-text',\n neutral: 'bg-neutral/10 aria-selected:text-white/10',\n light: 'bg-white/10 aria-selected:text-black',\n dark: 'bg-neutral-800/10 aria-selected:text-white',\n text: 'bg-text/10 aria-selected:text-text-opposite',\n },\n orientation: {\n horizontal: 'top-0 h-full w-auto transition-[left,width]',\n vertical: 'left-0 h-auto w-full transition-[top,height]',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n);\n\nexport type TabSelectorItemProps = HTMLAttributes<HTMLElement> & {\n key: string | number;\n};\n\nexport type TabSelectorProps<T extends TabSelectorItemProps> = {\n tabs: ReactElement<T>[];\n selectedChoice: T['key'];\n onTabClick?: (choice: T['key']) => void;\n hoverable?: boolean;\n orientation?: ItemSelectorOrientation;\n} & HTMLAttributes<HTMLElement> &\n Omit<VariantProps<typeof tabSelectorVariant>, 'color'> & {\n color?: TabSelectorColor | `${TabSelectorColor}`;\n };\n\n/**\n *\n * Component that allows the user to select one of the provided choices.\n *\n * Example:\n * ```jsx\n * <TabSelector\n * selectedChoice=\"option1\"\n * onTabClick={(choice) => console.log(choice)}\n * hoverable={true}\n * >\n * <Button key=\"option1\"/>\n * <Button key=\"option2\"/>\n * <Button key=\"option3\"/>\n * </TabSelector>\n * ```\n */\nexport const TabSelector = <T extends TabSelectorItemProps>({\n tabs,\n selectedChoice,\n onTabClick,\n color = 'primary',\n hoverable = false,\n orientation = 'horizontal',\n className,\n}: TabSelectorProps<T>) => {\n const optionsRefs = useRef<HTMLElement[]>([]);\n const indicatorRef = useRef<HTMLDivElement | null>(null);\n const { choiceIndicatorPosition, calculatePosition } = useItemSelector(\n optionsRefs,\n { isHoverable: hoverable, orientation }\n );\n\n useEffect(() => {\n calculatePosition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedChoice]);\n\n return (\n <div\n className={cn(\n tabSelectorVariant({\n color,\n }),\n className\n )}\n aria-orientation={orientation}\n aria-multiselectable=\"false\"\n role=\"tablist\"\n >\n {tabs.map((Tab, index) => {\n const key = Tab.key!;\n\n const isSelected = selectedChoice === key;\n\n return cloneElement(Tab, {\n key: key ?? index,\n role: 'tab',\n onClick: (e: MouseEvent<HTMLElement>) => {\n Tab.props?.onClick?.(e);\n onTabClick?.(key);\n },\n 'aria-selected': isSelected,\n 'data-active': isSelected as unknown as string,\n tabIndex: isSelected ? 0 : -1,\n ref: (el: HTMLElement) => {\n optionsRefs.current[index] = el!;\n },\n } as unknown as T);\n })}\n {choiceIndicatorPosition && (\n <div\n className={cn(\n indicatorVariant({\n color,\n orientation,\n })\n )}\n style={choiceIndicatorPosition}\n ref={indicatorRef}\n key={`${selectedChoice}${JSON.stringify(tabs.map((tab) => tab.key))}`}\n />\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AA0BA,MAAM,qBAAqB,IACzB,2DACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,WAAW;EACX,OAAO;EACP,SAAS;EACT,OAAO;EACP,MAAM;EACN,MAAM;EACP,EACF;CACD,iBAAiB,EACf,OAAO,WACR;CACF,CACF;AAED,MAAM,mBAAmB,IACvB,mFACA;CACE,UAAU;EACR,OAAO;GACL,SAAS;GACT,WAAW;GACX,OAAO;GACP,SAAS;GACT,OAAO;GACP,MAAM;GACN,MAAM;GACP;EACD,aAAa;GACX,YAAY;GACZ,UAAU;GACX;EACF;CACD,iBAAiB,EACf,aAAa,cACd;CACF,CACF;;;;;;;;;;;;;;;;;;AAkCD,MAAa,eAA+C,EAC1D,MACA,gBACA,YACA,QAAQ,WACR,YAAY,OACZ,cAAc,cACd,gBACyB;CACzB,MAAM,cAAc,OAAsB,EAAE,CAAC;CAC7C,MAAM,eAAe,OAA8B,KAAK;CACxD,MAAM,EAAE,yBAAyB,sBAAsB,gBACrD,aACA;EAAE,aAAa;EAAW;EAAa,CACxC;AAED,iBAAgB;AACd,qBAAmB;IAElB,CAAC,eAAe,CAAC;AAEpB,QACE,qBAAC,OAAD;EACE,WAAW,GACT,mBAAmB,EACjB,OACD,CAAC,EACF,UACD;EACD,oBAAkB;EAClB,wBAAqB;EACrB,MAAK;YATP,CAWG,KAAK,KAAK,KAAK,UAAU;GACxB,MAAM,MAAM,IAAI;GAEhB,MAAM,aAAa,mBAAmB;AAEtC,UAAO,aAAa,KAAK;IACvB,KAAK,OAAO;IACZ,MAAM;IACN,UAAU,MAA+B;AACvC,SAAI,OAAO,UAAU,EAAE;AACvB,kBAAa,IAAI;;IAEnB,iBAAiB;IACjB,eAAe;IACf,UAAU,aAAa,IAAI;IAC3B,MAAM,OAAoB;AACxB,iBAAY,QAAQ,SAAS;;IAEhC,CAAiB;IAClB,EACD,2BACC,oBAAC,OAAD;GACE,WAAW,GACT,iBAAiB;IACf;IACA;IACD,CAAC,CACH;GACD,OAAO;GACP,KAAK;GAEL,EADK,GAAG,iBAAiB,KAAK,UAAU,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,GACnE,CAEA"}
1
+ {"version":3,"file":"TabSelector.mjs","names":[],"sources":["../../../../src/components/TabSelector/TabSelector.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ItemSelectorOrientation,\n useItemSelector,\n} from '@hooks/useItemSelector';\nimport { cn } from '@utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n cloneElement,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n useEffect,\n useRef,\n} from 'react';\n\nexport type TabSelectorColor =\n | 'primary'\n | 'secondary'\n | 'error'\n | 'neutral'\n | 'light'\n | 'dark'\n | 'text';\n\nconst tabSelectorVariant = cva(\n 'relative z-0 flex size-full flex-row items-center gap-2',\n {\n variants: {\n color: {\n primary: 'border-primary text-primary',\n secondary: 'border-secondary text-secondary',\n error: 'border-error bg-error text-error',\n neutral: 'border-neutral text-neutral',\n light: 'border-white text-white',\n dark: 'border-neutral-800 text-neutral-800',\n text: 'border-text text-text',\n },\n },\n defaultVariants: {\n color: 'primary',\n },\n }\n);\n\nconst indicatorVariant = cva(\n 'absolute -z-1 rounded-lg duration-300 ease-in-out motion-reduce:transition-none',\n {\n variants: {\n color: {\n primary: 'bg-primary/10 aria-selected:text-text',\n secondary: 'bg-secondary/10 aria-selected:text-text',\n error: 'bg-error/10 aria-selected:text-text',\n neutral: 'bg-neutral/10 aria-selected:text-white/10',\n light: 'bg-white/10 aria-selected:text-black',\n dark: 'bg-neutral-800/10 aria-selected:text-white',\n text: 'bg-text/10 aria-selected:text-text-opposite',\n },\n orientation: {\n horizontal: 'top-0 h-full w-auto transition-[left,width]',\n vertical: 'left-0 h-auto w-full transition-[top,height]',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n }\n);\n\nexport type TabSelectorItemProps = HTMLAttributes<HTMLElement> & {\n key: string | number;\n};\n\nexport type TabSelectorProps<T extends TabSelectorItemProps> = {\n tabs: ReactElement<T>[];\n selectedChoice: T['key'];\n onTabClick?: (choice: T['key']) => void;\n hoverable?: boolean;\n orientation?: ItemSelectorOrientation;\n} & HTMLAttributes<HTMLElement> &\n Omit<VariantProps<typeof tabSelectorVariant>, 'color'> & {\n color?: TabSelectorColor | `${TabSelectorColor}`;\n };\n\n/**\n *\n * Component that allows the user to select one of the provided choices.\n *\n * Example:\n * ```jsx\n * <TabSelector\n * selectedChoice=\"option1\"\n * onTabClick={(choice) => console.log(choice)}\n * hoverable={true}\n * >\n * <Button key=\"option1\"/>\n * <Button key=\"option2\"/>\n * <Button key=\"option3\"/>\n * </TabSelector>\n * ```\n */\nexport const TabSelector = <T extends TabSelectorItemProps>({\n tabs,\n selectedChoice,\n onTabClick,\n color = 'primary',\n hoverable = false,\n orientation = 'horizontal',\n className,\n}: TabSelectorProps<T>) => {\n const optionsRefs = useRef<HTMLElement[]>([]);\n const indicatorRef = useRef<HTMLDivElement | null>(null);\n const { choiceIndicatorPosition, calculatePosition } = useItemSelector(\n optionsRefs,\n { isHoverable: hoverable, orientation }\n );\n\n useEffect(() => {\n calculatePosition();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedChoice]);\n\n return (\n <div\n className={cn(\n tabSelectorVariant({\n color,\n }),\n className\n )}\n aria-orientation={orientation}\n aria-multiselectable=\"false\"\n role=\"tablist\"\n >\n {tabs.map((Tab, index) => {\n const key = Tab.key!;\n\n const isSelected = selectedChoice === key;\n\n return cloneElement(Tab, {\n key: key ?? index,\n role: 'tab',\n onClick: (e: MouseEvent<HTMLElement>) => {\n Tab.props?.onClick?.(e);\n onTabClick?.(key);\n },\n 'aria-selected': isSelected,\n 'data-active': isSelected as unknown as string,\n tabIndex: isSelected ? 0 : -1,\n ref: (el: HTMLElement) => {\n optionsRefs.current[index] = el!;\n },\n } as unknown as T);\n })}\n {choiceIndicatorPosition && (\n <div\n className={cn(\n indicatorVariant({\n color,\n orientation,\n })\n )}\n style={choiceIndicatorPosition}\n ref={indicatorRef}\n key={`${selectedChoice}${JSON.stringify(tabs.map((tab) => tab.key))}`}\n />\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AA0BA,MAAM,qBAAqB,IACzB,2DACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,WAAW;EACX,OAAO;EACP,SAAS;EACT,OAAO;EACP,MAAM;EACN,MAAM;EACP,EACF;CACD,iBAAiB,EACf,OAAO,WACR;CACF,CACF;AAED,MAAM,mBAAmB,IACvB,mFACA;CACE,UAAU;EACR,OAAO;GACL,SAAS;GACT,WAAW;GACX,OAAO;GACP,SAAS;GACT,OAAO;GACP,MAAM;GACN,MAAM;GACP;EACD,aAAa;GACX,YAAY;GACZ,UAAU;GACX;EACF;CACD,iBAAiB,EACf,aAAa,cACd;CACF,CACF;;;;;;;;;;;;;;;;;;AAkCD,MAAa,eAA+C,EAC1D,MACA,gBACA,YACA,QAAQ,WACR,YAAY,OACZ,cAAc,cACd,gBACyB;CACzB,MAAM,cAAc,OAAsB,EAAE,CAAC;CAC7C,MAAM,eAAe,OAA8B,KAAK;CACxD,MAAM,EAAE,yBAAyB,sBAAsB,gBACrD,aACA;EAAE,aAAa;EAAW;EAAa,CACxC;AAED,iBAAgB;AACd,qBAAmB;IAElB,CAAC,eAAe,CAAC;AAEpB,QACE,qBAAC,OAAD;EACE,WAAW,GACT,mBAAmB,EACjB,OACD,CAAC,EACF,UACD;EACD,oBAAkB;EAClB,wBAAqB;EACrB,MAAK;YATP,CAWG,KAAK,KAAK,KAAK,UAAU;GACxB,MAAM,MAAM,IAAI;GAEhB,MAAM,aAAa,mBAAmB;AAEtC,UAAO,aAAa,KAAK;IACvB,KAAK,OAAO;IACZ,MAAM;IACN,UAAU,MAA+B;AACvC,SAAI,OAAO,UAAU,EAAE;AACvB,kBAAa,IAAI;;IAEnB,iBAAiB;IACjB,eAAe;IACf,UAAU,aAAa,IAAI;IAC3B,MAAM,OAAoB;AACxB,iBAAY,QAAQ,SAAS;;IAEhC,CAAiB;IAClB,EACD,2BACC,oBAAC,OAAD;GACE,WAAW,GACT,iBAAiB;IACf;IACA;IACD,CAAC,CACH;GACD,OAAO;GACP,KAAK;GAEL,EADK,GAAG,iBAAiB,KAAK,UAAU,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,GACnE,CAEA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Tag/index.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { FC, HTMLAttributes, PropsWithChildren } from 'react';\n\n/**\n * Properties for the Tag component extending HTML div attributes and variant options\n *\n * @interface TagProps\n * @extends {PropsWithChildren<VariantProps<typeof containerVariants>>}\n * @extends {HTMLAttributes<HTMLDivElement>}\n *\n * @property {ReactNode} children - The content to display inside the tag\n * @property {TagColor} [color] - Color theme variant of the tag\n * @property {TagRoundedSize} [roundedSize] - Border radius size of the tag\n * @property {TagSize} [size] - Size variant affecting padding and font size\n * @property {TagBorder} [border] - Whether to show a border around the tag\n * @property {TagBackground} [background] - Background visibility option\n * @property [className] - Additional CSS classes for custom styling\n *\n * @example\n * ```tsx\n * // Basic tag\n * <Tag>Default Tag</Tag>\n *\n * // Success tag with border\n * <Tag color=\"success\" border=\"with\">\n * Success Status\n * </Tag>\n *\n * // Large warning tag\n * <Tag color=\"warning\" size=\"lg\">\n * Important Warning\n * </Tag>\n * ```\n */\ntype TagProps = PropsWithChildren<VariantProps<typeof containerVariants>> &\n HTMLAttributes<HTMLDivElement>;\n\n/**\n * Enumeration for tag border radius sizes\n *\n * Controls the roundedness of tag corners, from sharp edges to fully rounded pills.\n *\n * @enum TagRoundedSize\n * @property NONE - 'none' - No border radius (sharp corners)\n * @property SM - 'sm' - Small border radius (2px)\n * @property MD - 'md' - Medium border radius (6px)\n * @property LG - 'lg' - Large border radius (8px)\n * @property XL - 'xl' - Extra large border radius (12px)\n * @property XXL - '2xl' - 2x large border radius (16px)\n * @property XXXL - '3xl' - 3x large border radius (24px)\n * @property FULL - 'full' - Fully rounded (50% border radius, pill shape)\n *\n * @example\n * ```tsx\n * // Sharp corners\n * <Tag roundedSize=\"none\">Sharp Tag</Tag>\n *\n * // Pill-shaped tag\n * <Tag roundedSize=\"full\">Pill Tag</Tag>\n *\n * // Medium rounded corners\n * <Tag roundedSize=\"md\">Rounded Tag</Tag>\n * ```\n */\nexport type TagRoundedSize = \n | 'none' |\n 'sm' |\n 'md' |\n 'lg' |\n 'xl' |\n '2xl' |\n '3xl' |\n 'full';\n\n/**\n * Enumeration for tag color themes\n *\n * Provides semantic color options for different tag purposes and meanings.\n * Each color includes background, border, and text color variations.\n *\n * @enum TagColor\n * @property SUCCESS - 'success' - Green theme for positive states, success messages, or completed items\n * @property ERROR - 'error' - Red theme for error states, warnings, or failed operations\n * @property WARNING - 'warning' - Yellow/orange theme for caution, pending states, or important notices\n * @property NEUTRAL - 'neutral' - Gray theme for neutral information or secondary content\n * @property TEXT - 'text' - Default text color theme for general purpose tags\n *\n * @example\n * ```tsx\n * // Status indicators\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">Pending</Tag>\n *\n * // Category tags\n * <Tag color=\"neutral\">Category</Tag>\n * <Tag color=\"text\">General</Tag>\n * ```\n */\nexport type TagColor = \n | 'primary' |\n 'success' |\n 'error' |\n 'warning' |\n 'neutral' |\n 'text' |\n 'blue' |\n 'yellow' |\n 'green' |\n 'red' |\n 'orange' |\n 'purple' |\n 'pink' |\n 'brown' |\n 'gray' |\n 'black' |\n 'white';\n\n/**\n * Enumeration for tag size variants\n *\n * Controls the overall size of tags including padding, font size, and border thickness.\n * Sizes are designed to maintain visual hierarchy and readability.\n *\n * @enum TagSize\n * @property XS - 'xs' - Extra small (0.5rem padding, text-xs, 1.2px border)\n * @property SM - 'sm' - Small (0.5rem padding, text-sm, 1.5px border)\n * @property MD - 'md' - Medium (1rem padding, text-base, 2px border) - Default size\n * @property LG - 'lg' - Large (2rem padding, text-lg, 2px border)\n * @property XL - 'xl' - Extra large (4rem padding, text-xl, 2px border)\n *\n * @example\n * ```tsx\n * // Different sizes for hierarchy\n * <Tag size=\"xs\">Small detail</Tag>\n * <Tag size=\"sm\">Minor category</Tag>\n * <Tag size=\"md\">Standard tag</Tag>\n * <Tag size=\"lg\">Important label</Tag>\n * <Tag size=\"xl\">Hero tag</Tag>\n * ```\n */\nexport type TagSize = \n | 'xs' |\n 'sm' |\n 'md' |\n 'lg' |\n 'xl';\n\n/**\n * Enumeration for tag border visibility\n *\n * Controls whether a border is displayed around the tag.\n *\n * @enum TagBorder\n * @property NONE - 'none' - No border (default)\n * @property WITH - 'with' - Show border with 1.5px thickness\n *\n * @example\n * ```tsx\n * <Tag border=\"none\">Borderless</Tag>\n * <Tag border=\"with\">With Border</Tag>\n * ```\n */\nexport type TagBorder = \n | 'none' |\n 'with';\n\n/**\n * Enumeration for tag background visibility\n *\n * Controls the background styling of the tag.\n *\n * @enum TagBackground\n * @property NONE - 'none' - No background styling\n * @property WITH - 'with' - Apply background styling\n *\n * @example\n * ```tsx\n * <Tag background=\"none\">No Background</Tag>\n * <Tag background=\"with\">With Background</Tag>\n * ```\n */\nexport type TagBackground = \n | 'none' |\n 'with';\n\nconst containerVariants = cva('w-fit backdrop-blur', {\n variants: {\n roundedSize: {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n [`${\"xxl\"}`]: 'rounded-2xl',\n [`${\"xxxl\"}`]: 'rounded-3xl',\n full: 'rounded-full',\n },\n color: {\n primary: 'border-primary bg-primary/10 text-primary',\n success: 'border-success bg-success/10 text-success',\n error: 'border-error bg-error/10 text-error',\n warning: 'border-warning bg-warning/10 text-warning',\n neutral: '/10 border-neutral bg-neutral/10 text-neutral',\n text: 'border-text bg-text/10 text-text',\n blue:\n 'border-blue-500 bg-blue-500/10 text-blue-500 dark:text-blue-300',\n yellow:\n 'border-yellow-500 bg-yellow-500/10 text-yellow-500 dark:text-yellow-300',\n green:\n 'border-green-500 bg-green-500/10 text-green-500 dark:text-green-300',\n red:\n 'border-error bg-error/10 text-error dark:text-red-300',\n orange:\n 'border-orange-500 bg-orange-500/10 text-orange-500 dark:text-orange-300',\n purple:\n 'border-purple-500 bg-purple-500/10 text-purple-500 dark:text-purple-300',\n pink:\n 'border-pink-500 bg-pink-500/10 text-pink-500 dark:text-pink-300',\n brown:\n 'border-brown-500 bg-brown-500/10 text-brown-500 dark:text-brown-300',\n gray:\n 'border-gray-500 bg-gray-500/10 text-gray-500 dark:text-gray-300',\n black: 'border-black bg-black/10 text-black',\n white: 'border-white bg-white/10 text-white',\n },\n size: {\n xs: 'border-[1.2px] px-2 py-0.5 text-xs',\n sm: 'border-[1.3px] px-2 py-0.5 text-sm',\n md: 'border-2 px-2 py-1 text-base',\n lg: 'border-2 px-3 py-2 text-lg',\n xl: 'border-2 px-3 py-2 text-xl',\n },\n border: {\n none: 'border-none',\n with: 'border-[1.3px] border-text',\n },\n background: {\n none: 'bg-none',\n with: '',\n },\n },\n\n defaultVariants: {\n roundedSize: 'full',\n border: 'none',\n color: 'text',\n size: 'md',\n },\n});\n\n/**\n * Tag component for displaying labels, categories, status indicators, and badges\n *\n * The Tag component is a versatile labeling element that supports multiple visual variants\n * for different use cases. It provides semantic color options, flexible sizing, and\n * customizable styling options for borders and backgrounds.\n *\n * ## Features\n * - **Semantic Colors**: Success, error, warning, neutral, and text color themes\n * - **Flexible Sizing**: Five size variants from extra small to extra large\n * - **Border Radius Options**: Eight rounding options from none to fully rounded\n * - **Border Control**: Optional borders for enhanced visual separation\n * - **Background Control**: Configurable background styling\n * - **Accessibility**: Proper HTML semantics and keyboard navigation support\n *\n * ## Use Cases\n * - **Status Indicators**: Show completion, error, or pending states\n * - **Category Labels**: Organize and categorize content\n * - **Badges**: Display counts, notifications, or achievements\n * - **Keywords**: Tag content with relevant keywords or topics\n * - **Metadata**: Show additional information like dates, authors, or types\n *\n * ## Design Principles\n * - Maintains readability across all size and color combinations\n * - Uses backdrop blur effect for subtle transparency\n * - Follows consistent spacing and typography scales\n * - Provides sufficient color contrast for accessibility\n *\n * @param {TagProps} props - The properties for the Tag component\n * @returns {JSX.Element} The rendered tag element\n *\n * @example\n * ```tsx\n * // Basic status tags\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">In Progress</Tag>\n *\n * // Category tags with borders\n * <Tag color=\"neutral\" border=\"with\">\n * Technology\n * </Tag>\n * <Tag color=\"text\" border=\"with\">\n * Design\n * </Tag>\n *\n * // Size variations for hierarchy\n * <div className=\"flex items-center gap-2\">\n * <Tag size=\"xs\" color=\"neutral\">Minor</Tag>\n * <Tag size=\"sm\" color=\"text\">Standard</Tag>\n * <Tag size=\"lg\" color=\"success\">Important</Tag>\n * </div>\n *\n * // Rounded variations\n * <div className=\"flex gap-2\">\n * <Tag roundedSize=\"none\">Sharp</Tag>\n * <Tag roundedSize=\"md\">Rounded</Tag>\n * <Tag roundedSize=\"full\">Pill</Tag>\n * </div>\n *\n * // Custom styled tag\n * <Tag\n * color=\"warning\"\n * size=\"lg\"\n * border=\"with\"\n * roundedSize=\"lg\"\n * className=\"font-bold uppercase tracking-wide\"\n * >\n * Custom Style\n * </Tag>\n *\n * // Interactive tags with click handlers\n * <Tag\n * color=\"success\"\n * onClick={() => console.log('Tag clicked')}\n * className=\"cursor-pointer hover:opacity-80 transition-opacity\"\n * >\n * Clickable Tag\n * </Tag>\n * ```\n *\n * @see {@link TagColor} - Available color theme options\n * @see {@link TagSize} - Available size variants\n * @see {@link TagRoundedSize} - Available border radius options\n * @see {@link TagBorder} - Border visibility options\n * @see {@link TagBackground} - Background styling options\n */\nexport const Tag: FC<TagProps> = ({\n children,\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n ...props\n}) => {\n return (\n <div\n className={containerVariants({\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n })}\n {...props}\n >\n {children}\n </div>\n );\n};\n"],"mappings":";;;;AA0LA,MAAM,oBAAoB,IAAI,uBAAuB;CACnD,UAAU;EACR,aAAa;GACX,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;IACH,QAAa;IACb,SAAc;GACf,MAAM;GACP;EACD,OAAO;GACL,SAAS;GACT,SAAS;GACT,OAAO;GACP,SAAS;GACT,SAAS;GACT,MAAM;GACN,MACE;GACF,QACE;GACF,OACE;GACF,KACE;GACF,QACE;GACF,QACE;GACF,MACE;GACF,OACE;GACF,MACE;GACF,OAAO;GACP,OAAO;GACR;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACD,QAAQ;GACN,MAAM;GACN,MAAM;GACP;EACD,YAAY;GACV,MAAM;GACN,MAAM;GACP;EACF;CAED,iBAAiB;EACf,aAAa;EACb,QAAQ;EACR,OAAO;EACP,MAAM;EACP;CACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFF,MAAa,OAAqB,EAChC,UACA,OACA,aACA,MACA,QACA,YACA,WACA,GAAG,YACC;AACJ,QACE,oBAAC,OAAD;EACE,WAAW,kBAAkB;GAC3B;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;EACF,GAAI;EAEH;EACG"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Tag/index.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { FC, HTMLAttributes, PropsWithChildren } from 'react';\n\n/**\n * Properties for the Tag component extending HTML div attributes and variant options\n *\n * @interface TagProps\n * @extends {PropsWithChildren<VariantProps<typeof containerVariants>>}\n * @extends {HTMLAttributes<HTMLDivElement>}\n *\n * @property {ReactNode} children - The content to display inside the tag\n * @property {TagColor} [color] - Color theme variant of the tag\n * @property {TagRoundedSize} [roundedSize] - Border radius size of the tag\n * @property {TagSize} [size] - Size variant affecting padding and font size\n * @property {TagBorder} [border] - Whether to show a border around the tag\n * @property {TagBackground} [background] - Background visibility option\n * @property [className] - Additional CSS classes for custom styling\n *\n * @example\n * ```tsx\n * // Basic tag\n * <Tag>Default Tag</Tag>\n *\n * // Success tag with border\n * <Tag color=\"success\" border=\"with\">\n * Success Status\n * </Tag>\n *\n * // Large warning tag\n * <Tag color=\"warning\" size=\"lg\">\n * Important Warning\n * </Tag>\n * ```\n */\ntype TagProps = PropsWithChildren<VariantProps<typeof containerVariants>> &\n HTMLAttributes<HTMLDivElement>;\n\n/**\n * Enumeration for tag border radius sizes\n *\n * Controls the roundedness of tag corners, from sharp edges to fully rounded pills.\n *\n * @enum TagRoundedSize\n * @property NONE - 'none' - No border radius (sharp corners)\n * @property SM - 'sm' - Small border radius (2px)\n * @property MD - 'md' - Medium border radius (6px)\n * @property LG - 'lg' - Large border radius (8px)\n * @property XL - 'xl' - Extra large border radius (12px)\n * @property XXL - '2xl' - 2x large border radius (16px)\n * @property XXXL - '3xl' - 3x large border radius (24px)\n * @property FULL - 'full' - Fully rounded (50% border radius, pill shape)\n *\n * @example\n * ```tsx\n * // Sharp corners\n * <Tag roundedSize=\"none\">Sharp Tag</Tag>\n *\n * // Pill-shaped tag\n * <Tag roundedSize=\"full\">Pill Tag</Tag>\n *\n * // Medium rounded corners\n * <Tag roundedSize=\"md\">Rounded Tag</Tag>\n * ```\n */\nexport type TagRoundedSize =\n | 'none'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | '2xl'\n | '3xl'\n | 'full';\n\n/**\n * Enumeration for tag color themes\n *\n * Provides semantic color options for different tag purposes and meanings.\n * Each color includes background, border, and text color variations.\n *\n * @enum TagColor\n * @property SUCCESS - 'success' - Green theme for positive states, success messages, or completed items\n * @property ERROR - 'error' - Red theme for error states, warnings, or failed operations\n * @property WARNING - 'warning' - Yellow/orange theme for caution, pending states, or important notices\n * @property NEUTRAL - 'neutral' - Gray theme for neutral information or secondary content\n * @property TEXT - 'text' - Default text color theme for general purpose tags\n *\n * @example\n * ```tsx\n * // Status indicators\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">Pending</Tag>\n *\n * // Category tags\n * <Tag color=\"neutral\">Category</Tag>\n * <Tag color=\"text\">General</Tag>\n * ```\n */\nexport type TagColor =\n | 'primary'\n | 'success'\n | 'error'\n | 'warning'\n | 'neutral'\n | 'text'\n | 'blue'\n | 'yellow'\n | 'green'\n | 'red'\n | 'orange'\n | 'purple'\n | 'pink'\n | 'brown'\n | 'gray'\n | 'black'\n | 'white';\n\n/**\n * Enumeration for tag size variants\n *\n * Controls the overall size of tags including padding, font size, and border thickness.\n * Sizes are designed to maintain visual hierarchy and readability.\n *\n * @enum TagSize\n * @property XS - 'xs' - Extra small (0.5rem padding, text-xs, 1.2px border)\n * @property SM - 'sm' - Small (0.5rem padding, text-sm, 1.5px border)\n * @property MD - 'md' - Medium (1rem padding, text-base, 2px border) - Default size\n * @property LG - 'lg' - Large (2rem padding, text-lg, 2px border)\n * @property XL - 'xl' - Extra large (4rem padding, text-xl, 2px border)\n *\n * @example\n * ```tsx\n * // Different sizes for hierarchy\n * <Tag size=\"xs\">Small detail</Tag>\n * <Tag size=\"sm\">Minor category</Tag>\n * <Tag size=\"md\">Standard tag</Tag>\n * <Tag size=\"lg\">Important label</Tag>\n * <Tag size=\"xl\">Hero tag</Tag>\n * ```\n */\nexport type TagSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Enumeration for tag border visibility\n *\n * Controls whether a border is displayed around the tag.\n *\n * @enum TagBorder\n * @property NONE - 'none' - No border (default)\n * @property WITH - 'with' - Show border with 1.5px thickness\n *\n * @example\n * ```tsx\n * <Tag border=\"none\">Borderless</Tag>\n * <Tag border=\"with\">With Border</Tag>\n * ```\n */\nexport type TagBorder = 'none' | 'with';\n\n/**\n * Enumeration for tag background visibility\n *\n * Controls the background styling of the tag.\n *\n * @enum TagBackground\n * @property NONE - 'none' - No background styling\n * @property WITH - 'with' - Apply background styling\n *\n * @example\n * ```tsx\n * <Tag background=\"none\">No Background</Tag>\n * <Tag background=\"with\">With Background</Tag>\n * ```\n */\nexport type TagBackground = 'none' | 'with';\n\nconst containerVariants = cva('w-fit backdrop-blur', {\n variants: {\n roundedSize: {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n [`${'xxl'}`]: 'rounded-2xl',\n [`${'xxxl'}`]: 'rounded-3xl',\n full: 'rounded-full',\n },\n color: {\n primary: 'border-primary bg-primary/10 text-primary',\n success: 'border-success bg-success/10 text-success',\n error: 'border-error bg-error/10 text-error',\n warning: 'border-warning bg-warning/10 text-warning',\n neutral: '/10 border-neutral bg-neutral/10 text-neutral',\n text: 'border-text bg-text/10 text-text',\n blue: 'border-blue-500 bg-blue-500/10 text-blue-500 dark:text-blue-300',\n yellow:\n 'border-yellow-500 bg-yellow-500/10 text-yellow-500 dark:text-yellow-300',\n green:\n 'border-green-500 bg-green-500/10 text-green-500 dark:text-green-300',\n red: 'border-error bg-error/10 text-error dark:text-red-300',\n orange:\n 'border-orange-500 bg-orange-500/10 text-orange-500 dark:text-orange-300',\n purple:\n 'border-purple-500 bg-purple-500/10 text-purple-500 dark:text-purple-300',\n pink: 'border-pink-500 bg-pink-500/10 text-pink-500 dark:text-pink-300',\n brown:\n 'border-brown-500 bg-brown-500/10 text-brown-500 dark:text-brown-300',\n gray: 'border-gray-500 bg-gray-500/10 text-gray-500 dark:text-gray-300',\n black: 'border-black bg-black/10 text-black',\n white: 'border-white bg-white/10 text-white',\n },\n size: {\n xs: 'border-[1.2px] px-2 py-0.5 text-xs',\n sm: 'border-[1.3px] px-2 py-0.5 text-sm',\n md: 'border-2 px-2 py-1 text-base',\n lg: 'border-2 px-3 py-2 text-lg',\n xl: 'border-2 px-3 py-2 text-xl',\n },\n border: {\n none: 'border-none',\n with: 'border-[1.3px] border-text',\n },\n background: {\n none: 'bg-none',\n with: '',\n },\n },\n\n defaultVariants: {\n roundedSize: 'full',\n border: 'none',\n color: 'text',\n size: 'md',\n },\n});\n\n/**\n * Tag component for displaying labels, categories, status indicators, and badges\n *\n * The Tag component is a versatile labeling element that supports multiple visual variants\n * for different use cases. It provides semantic color options, flexible sizing, and\n * customizable styling options for borders and backgrounds.\n *\n * ## Features\n * - **Semantic Colors**: Success, error, warning, neutral, and text color themes\n * - **Flexible Sizing**: Five size variants from extra small to extra large\n * - **Border Radius Options**: Eight rounding options from none to fully rounded\n * - **Border Control**: Optional borders for enhanced visual separation\n * - **Background Control**: Configurable background styling\n * - **Accessibility**: Proper HTML semantics and keyboard navigation support\n *\n * ## Use Cases\n * - **Status Indicators**: Show completion, error, or pending states\n * - **Category Labels**: Organize and categorize content\n * - **Badges**: Display counts, notifications, or achievements\n * - **Keywords**: Tag content with relevant keywords or topics\n * - **Metadata**: Show additional information like dates, authors, or types\n *\n * ## Design Principles\n * - Maintains readability across all size and color combinations\n * - Uses backdrop blur effect for subtle transparency\n * - Follows consistent spacing and typography scales\n * - Provides sufficient color contrast for accessibility\n *\n * @param {TagProps} props - The properties for the Tag component\n * @returns {JSX.Element} The rendered tag element\n *\n * @example\n * ```tsx\n * // Basic status tags\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">In Progress</Tag>\n *\n * // Category tags with borders\n * <Tag color=\"neutral\" border=\"with\">\n * Technology\n * </Tag>\n * <Tag color=\"text\" border=\"with\">\n * Design\n * </Tag>\n *\n * // Size variations for hierarchy\n * <div className=\"flex items-center gap-2\">\n * <Tag size=\"xs\" color=\"neutral\">Minor</Tag>\n * <Tag size=\"sm\" color=\"text\">Standard</Tag>\n * <Tag size=\"lg\" color=\"success\">Important</Tag>\n * </div>\n *\n * // Rounded variations\n * <div className=\"flex gap-2\">\n * <Tag roundedSize=\"none\">Sharp</Tag>\n * <Tag roundedSize=\"md\">Rounded</Tag>\n * <Tag roundedSize=\"full\">Pill</Tag>\n * </div>\n *\n * // Custom styled tag\n * <Tag\n * color=\"warning\"\n * size=\"lg\"\n * border=\"with\"\n * roundedSize=\"lg\"\n * className=\"font-bold uppercase tracking-wide\"\n * >\n * Custom Style\n * </Tag>\n *\n * // Interactive tags with click handlers\n * <Tag\n * color=\"success\"\n * onClick={() => console.log('Tag clicked')}\n * className=\"cursor-pointer hover:opacity-80 transition-opacity\"\n * >\n * Clickable Tag\n * </Tag>\n * ```\n *\n * @see {@link TagColor} - Available color theme options\n * @see {@link TagSize} - Available size variants\n * @see {@link TagRoundedSize} - Available border radius options\n * @see {@link TagBorder} - Border visibility options\n * @see {@link TagBackground} - Background styling options\n */\nexport const Tag: FC<TagProps> = ({\n children,\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n ...props\n}) => {\n return (\n <div\n className={containerVariants({\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n })}\n {...props}\n >\n {children}\n </div>\n );\n};\n"],"mappings":";;;;AAiLA,MAAM,oBAAoB,IAAI,uBAAuB;CACnD,UAAU;EACR,aAAa;GACX,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;IACH,QAAa;IACb,SAAc;GACf,MAAM;GACP;EACD,OAAO;GACL,SAAS;GACT,SAAS;GACT,OAAO;GACP,SAAS;GACT,SAAS;GACT,MAAM;GACN,MAAM;GACN,QACE;GACF,OACE;GACF,KAAK;GACL,QACE;GACF,QACE;GACF,MAAM;GACN,OACE;GACF,MAAM;GACN,OAAO;GACP,OAAO;GACR;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACD,QAAQ;GACN,MAAM;GACN,MAAM;GACP;EACD,YAAY;GACV,MAAM;GACN,MAAM;GACP;EACF;CAED,iBAAiB;EACf,aAAa;EACb,QAAQ;EACR,OAAO;EACP,MAAM;EACP;CACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFF,MAAa,OAAqB,EAChC,UACA,OACA,aACA,MACA,QACA,YACA,WACA,GAAG,YACC;AACJ,QACE,oBAAC,OAAD;EACE,WAAW,kBAAkB;GAC3B;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;EACF,GAAI;EAEH;EACG"}
@@ -45,7 +45,7 @@ const LINE_PADDING = 12;
45
45
  * placeholder="Type your message..."
46
46
  * autoSize={true}
47
47
  * maxRows={8}
48
- * className="min-h-[40px]"
48
+ * className="min-h-10"
49
49
  * onKeyDown={(e) => {
50
50
  * if (e.key === 'Enter' && !e.shiftKey) {
51
51
  * e.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"AutoSizeTextArea.mjs","names":[],"sources":["../../../../src/components/TextArea/AutoSizeTextArea.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport {\n type ChangeEventHandler,\n type FC,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n} from 'react';\nimport { TextArea, type TextAreaProps } from './TextArea';\n\n/**\n * Props for the AutoSizedTextArea component.\n *\n * Extends TextAreaProps with auto-sizing functionality and row limitations.\n *\n * @example\n * ```tsx\n * // Auto-sizing textarea that grows with content\n * <AutoSizedTextArea\n * placeholder=\"Start typing and watch it grow...\"\n * autoSize={true}\n * maxRows={10}\n * />\n *\n * // Limited height with scroll when exceeded\n * <AutoSizedTextArea\n * value={longText}\n * onChange={handleChange}\n * autoSize={true}\n * maxRows={5}\n * className=\"max-h-30\"\n * />\n *\n * // Disable auto-sizing for fixed height\n * <AutoSizedTextArea\n * autoSize={false}\n * rows={3}\n * placeholder=\"Fixed height textarea\"\n * />\n * ```\n */\nexport type AutoSizedTextAreaProps = TextAreaProps & {\n /** Whether to automatically adjust height based on content */\n autoSize?: boolean;\n /** Maximum number of rows before scrolling is enabled */\n maxRows?: number;\n};\n\nconst LINE_HEIGHT = 24; // px\nconst LINE_PADDING = 12; // px\n\n/**\n * AutoSizedTextArea Component\n *\n * An enhanced textarea that automatically adjusts its height based on content,\n * providing a smooth user experience for variable-length text input.\n *\n * ## Features\n * - **Auto-Sizing**: Dynamically grows and shrinks based on content\n * - **Row Limits**: Configurable maximum rows before scrolling\n * - **Smooth Transitions**: Seamless height adjustments as user types\n * - **Scroll Management**: Automatic overflow handling when max height reached\n * - **Performance Optimized**: Efficient height calculations and updates\n *\n * ## Technical Details\n * - Line height: 24px with 12px padding\n * - Height calculation: `scrollHeight` vs `maxRows * lineHeight + padding`\n * - Resize: Disabled when auto-sizing is active for smooth experience\n * - Ref forwarding: Supports imperative access to textarea element\n *\n * ## Use Cases\n * - Chat message composition with dynamic sizing\n * - Comment forms that expand with content\n * - Note-taking interfaces with variable length\n * - Social media post creation\n * - Code snippet input with growth limits\n *\n * @example\n * ```tsx\n * // Chat-style auto-expanding textarea\n * const [message, setMessage] = useState('');\n *\n * <AutoSizedTextArea\n * value={message}\n * onChange={(e) => setMessage(e.target.value)}\n * placeholder=\"Type your message...\"\n * autoSize={true}\n * maxRows={8}\n * className=\"min-h-[40px]\"\n * onKeyDown={(e) => {\n * if (e.key === 'Enter' && !e.shiftKey) {\n * e.preventDefault();\n * sendMessage(message);\n * setMessage('');\n * }\n * }}\n * />\n *\n * // Note-taking with generous height limits\n * <AutoSizedTextArea\n * defaultValue={note.content}\n * onChange={handleNoteChange}\n * placeholder=\"Write your notes here...\"\n * autoSize={true}\n * maxRows={20}\n * variant=\"default\"\n * />\n * ```\n */\nexport const AutoSizedTextArea: FC<AutoSizedTextAreaProps> = ({\n className,\n autoSize = true,\n onChange,\n maxRows = 999,\n ref,\n ...props\n}) => {\n const textAreaRef = useRef<HTMLTextAreaElement | null>(null);\n\n useImperativeHandle(ref, () => textAreaRef.current!);\n\n const adjustHeight = () => {\n const textAreaEl = textAreaRef.current;\n\n if (!textAreaEl || !autoSize) return;\n\n const textAreaStyle = textAreaEl.style;\n\n // Reset height to get accurate scrollHeight\n textAreaStyle.height = 'auto';\n const scrollHeight = textAreaEl.scrollHeight;\n const maxHeight = LINE_HEIGHT * maxRows + LINE_PADDING;\n const minHeight = LINE_HEIGHT + LINE_PADDING;\n\n // Set the new height\n textAreaStyle.height = `${Math.max(Math.min(scrollHeight, maxHeight), minHeight)}px`;\n };\n\n useLayoutEffect(() => {\n adjustHeight();\n }, [props.value, props.defaultValue, adjustHeight]);\n\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (e) => {\n onChange?.(e);\n adjustHeight();\n };\n\n const setRef = (el: HTMLTextAreaElement | null) => {\n textAreaRef.current = el;\n if (el) {\n adjustHeight();\n }\n };\n\n return (\n <TextArea\n ref={setRef}\n onChange={handleChange}\n className={cn('overflow-y-auto', autoSize && 'resize-none', className)}\n {...props}\n />\n );\n};\n"],"mappings":";;;;;;;;AAkDA,MAAM,cAAc;AACpB,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DrB,MAAa,qBAAiD,EAC5D,WACA,WAAW,MACX,UACA,UAAU,KACV,KACA,GAAG,YACC;CACJ,MAAM,cAAc,OAAmC,KAAK;AAE5D,qBAAoB,WAAW,YAAY,QAAS;CAEpD,MAAM,qBAAqB;EACzB,MAAM,aAAa,YAAY;AAE/B,MAAI,CAAC,cAAc,CAAC,SAAU;EAE9B,MAAM,gBAAgB,WAAW;AAGjC,gBAAc,SAAS;EACvB,MAAM,eAAe,WAAW;EAChC,MAAM,YAAY,cAAc,UAAU;EAC1C,MAAM,YAAY,cAAc;AAGhC,gBAAc,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,cAAc,UAAU,EAAE,UAAU,CAAC;;AAGnF,uBAAsB;AACpB,gBAAc;IACb;EAAC,MAAM;EAAO,MAAM;EAAc;EAAa,CAAC;CAEnD,MAAM,gBAAyD,MAAM;AACnE,aAAW,EAAE;AACb,gBAAc;;CAGhB,MAAM,UAAU,OAAmC;AACjD,cAAY,UAAU;AACtB,MAAI,GACF,eAAc;;AAIlB,QACE,oBAAC,UAAD;EACE,KAAK;EACL,UAAU;EACV,WAAW,GAAG,mBAAmB,YAAY,eAAe,UAAU;EACtE,GAAI;EACJ"}
1
+ {"version":3,"file":"AutoSizeTextArea.mjs","names":[],"sources":["../../../../src/components/TextArea/AutoSizeTextArea.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport {\n type ChangeEventHandler,\n type FC,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n} from 'react';\nimport { TextArea, type TextAreaProps } from './TextArea';\n\n/**\n * Props for the AutoSizedTextArea component.\n *\n * Extends TextAreaProps with auto-sizing functionality and row limitations.\n *\n * @example\n * ```tsx\n * // Auto-sizing textarea that grows with content\n * <AutoSizedTextArea\n * placeholder=\"Start typing and watch it grow...\"\n * autoSize={true}\n * maxRows={10}\n * />\n *\n * // Limited height with scroll when exceeded\n * <AutoSizedTextArea\n * value={longText}\n * onChange={handleChange}\n * autoSize={true}\n * maxRows={5}\n * className=\"max-h-30\"\n * />\n *\n * // Disable auto-sizing for fixed height\n * <AutoSizedTextArea\n * autoSize={false}\n * rows={3}\n * placeholder=\"Fixed height textarea\"\n * />\n * ```\n */\nexport type AutoSizedTextAreaProps = TextAreaProps & {\n /** Whether to automatically adjust height based on content */\n autoSize?: boolean;\n /** Maximum number of rows before scrolling is enabled */\n maxRows?: number;\n};\n\nconst LINE_HEIGHT = 24; // px\nconst LINE_PADDING = 12; // px\n\n/**\n * AutoSizedTextArea Component\n *\n * An enhanced textarea that automatically adjusts its height based on content,\n * providing a smooth user experience for variable-length text input.\n *\n * ## Features\n * - **Auto-Sizing**: Dynamically grows and shrinks based on content\n * - **Row Limits**: Configurable maximum rows before scrolling\n * - **Smooth Transitions**: Seamless height adjustments as user types\n * - **Scroll Management**: Automatic overflow handling when max height reached\n * - **Performance Optimized**: Efficient height calculations and updates\n *\n * ## Technical Details\n * - Line height: 24px with 12px padding\n * - Height calculation: `scrollHeight` vs `maxRows * lineHeight + padding`\n * - Resize: Disabled when auto-sizing is active for smooth experience\n * - Ref forwarding: Supports imperative access to textarea element\n *\n * ## Use Cases\n * - Chat message composition with dynamic sizing\n * - Comment forms that expand with content\n * - Note-taking interfaces with variable length\n * - Social media post creation\n * - Code snippet input with growth limits\n *\n * @example\n * ```tsx\n * // Chat-style auto-expanding textarea\n * const [message, setMessage] = useState('');\n *\n * <AutoSizedTextArea\n * value={message}\n * onChange={(e) => setMessage(e.target.value)}\n * placeholder=\"Type your message...\"\n * autoSize={true}\n * maxRows={8}\n * className=\"min-h-10\"\n * onKeyDown={(e) => {\n * if (e.key === 'Enter' && !e.shiftKey) {\n * e.preventDefault();\n * sendMessage(message);\n * setMessage('');\n * }\n * }}\n * />\n *\n * // Note-taking with generous height limits\n * <AutoSizedTextArea\n * defaultValue={note.content}\n * onChange={handleNoteChange}\n * placeholder=\"Write your notes here...\"\n * autoSize={true}\n * maxRows={20}\n * variant=\"default\"\n * />\n * ```\n */\nexport const AutoSizedTextArea: FC<AutoSizedTextAreaProps> = ({\n className,\n autoSize = true,\n onChange,\n maxRows = 999,\n ref,\n ...props\n}) => {\n const textAreaRef = useRef<HTMLTextAreaElement | null>(null);\n\n useImperativeHandle(ref, () => textAreaRef.current!);\n\n const adjustHeight = () => {\n const textAreaEl = textAreaRef.current;\n\n if (!textAreaEl || !autoSize) return;\n\n const textAreaStyle = textAreaEl.style;\n\n // Reset height to get accurate scrollHeight\n textAreaStyle.height = 'auto';\n const scrollHeight = textAreaEl.scrollHeight;\n const maxHeight = LINE_HEIGHT * maxRows + LINE_PADDING;\n const minHeight = LINE_HEIGHT + LINE_PADDING;\n\n // Set the new height\n textAreaStyle.height = `${Math.max(Math.min(scrollHeight, maxHeight), minHeight)}px`;\n };\n\n useLayoutEffect(() => {\n adjustHeight();\n }, [props.value, props.defaultValue, adjustHeight]);\n\n const handleChange: ChangeEventHandler<HTMLTextAreaElement> = (e) => {\n onChange?.(e);\n adjustHeight();\n };\n\n const setRef = (el: HTMLTextAreaElement | null) => {\n textAreaRef.current = el;\n if (el) {\n adjustHeight();\n }\n };\n\n return (\n <TextArea\n ref={setRef}\n onChange={handleChange}\n className={cn('overflow-y-auto', autoSize && 'resize-none', className)}\n {...props}\n />\n );\n};\n"],"mappings":";;;;;;;;AAkDA,MAAM,cAAc;AACpB,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DrB,MAAa,qBAAiD,EAC5D,WACA,WAAW,MACX,UACA,UAAU,KACV,KACA,GAAG,YACC;CACJ,MAAM,cAAc,OAAmC,KAAK;AAE5D,qBAAoB,WAAW,YAAY,QAAS;CAEpD,MAAM,qBAAqB;EACzB,MAAM,aAAa,YAAY;AAE/B,MAAI,CAAC,cAAc,CAAC,SAAU;EAE9B,MAAM,gBAAgB,WAAW;AAGjC,gBAAc,SAAS;EACvB,MAAM,eAAe,WAAW;EAChC,MAAM,YAAY,cAAc,UAAU;EAC1C,MAAM,YAAY,cAAc;AAGhC,gBAAc,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,cAAc,UAAU,EAAE,UAAU,CAAC;;AAGnF,uBAAsB;AACpB,gBAAc;IACb;EAAC,MAAM;EAAO,MAAM;EAAc;EAAa,CAAC;CAEnD,MAAM,gBAAyD,MAAM;AACnE,aAAW,EAAE;AACb,gBAAc;;CAGhB,MAAM,UAAU,OAAmC;AACjD,cAAY,UAAU;AACtB,MAAI,GACF,eAAc;;AAIlB,QACE,oBAAC,UAAD;EACE,KAAK;EACL,UAAU;EACV,WAAW,GAAG,mBAAmB,YAAY,eAAe,UAAU;EACtE,GAAI;EACJ"}
@@ -44,7 +44,7 @@ const DesktopThemeSwitcher = ({ theme, setTheme, systemTheme }) => {
44
44
  isFocusable: true,
45
45
  isOverable: true,
46
46
  children: /* @__PURE__ */ jsxs(Container, {
47
- className: "min-w-[100px] items-start p-1",
47
+ className: "min-w-25 items-start p-1",
48
48
  separator: "y",
49
49
  children: [
50
50
  /* @__PURE__ */ jsx(ButtonItem, {
@@ -1 +1 @@
1
- {"version":3,"file":"DesktopThemeSwitcher.mjs","names":[],"sources":["../../../../src/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { CircleDashed, Moon, Sun } from 'lucide-react';\nimport { type FC, useState } from 'react';\nimport { Button, type ButtonProps } from '../Button';\nimport { Container } from '../Container';\nimport { DropDown } from '../DropDown';\nimport type { Modes } from './types';\n\nconst ButtonItem: FC<ButtonProps> = ({ Icon, children, ...props }) => (\n <div className=\"relative w-full p-0.5\">\n <Button\n className=\"w-full cursor-pointer rounded-lg p-1 text-left hover:bg-text/10 focus:bg-text-opposite/20 focus:outline-hidden disabled:text-white/25\"\n Icon={Icon}\n data-mode=\"system\"\n role=\"option\"\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n </div>\n);\n\ntype DesktopThemeSwitcherProps = {\n theme: Modes;\n setTheme: (theme: Modes) => void;\n systemTheme: Modes;\n};\n\nexport const DesktopThemeSwitcher: FC<DesktopThemeSwitcherProps> = ({\n theme,\n setTheme,\n systemTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? 'system' : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const switchMode = (mode: Modes) => {\n if (mode === 'system') {\n setTheme(systemTheme ?? 'light');\n } else {\n setTheme(mode);\n }\n setMode(mode);\n };\n\n const panelIdentifier = 'theme-switcher';\n\n return (\n <DropDown identifier={panelIdentifier}>\n <DropDown.Trigger\n className=\"p-2\"\n identifier={panelIdentifier}\n aria-label=\"Theme selector\"\n >\n {mode === 'system' && <CircleDashed data-mode=\"system\" />}\n {mode === 'light' && <Sun data-mode=\"light\" />}\n {mode === 'dark' && <Moon data-mode=\"dark\" />}\n </DropDown.Trigger>\n\n <DropDown.Panel identifier={panelIdentifier} isFocusable isOverable>\n <Container className=\"min-w-[100px] items-start p-1\" separator=\"y\">\n <ButtonItem\n Icon={CircleDashed}\n onClick={() => switchMode('system')}\n isActive={mode === 'system'}\n label=\"Restore to system mode\"\n >\n System\n </ButtonItem>\n <ButtonItem\n Icon={Sun}\n onClick={() => switchMode('light')}\n isActive={mode === 'light'}\n label=\"Switch to light mode\"\n >\n Light\n </ButtonItem>\n <ButtonItem\n Icon={Moon}\n onClick={() => switchMode('dark')}\n isActive={mode === 'dark'}\n label=\"Switch to dark mode\"\n >\n Dark\n </ButtonItem>\n </Container>\n </DropDown.Panel>\n </DropDown>\n );\n};\n"],"mappings":";;;;;;;;;;AASA,MAAM,cAA+B,EAAE,MAAM,UAAU,GAAG,YACxD,oBAAC,OAAD;CAAK,WAAU;WACb,oBAAC,QAAD;EACE,WAAU;EACJ;EACN,aAAU;EACV,MAAK;EACL,SAAQ;EACR,GAAI;EAEH;EACM;CACL;AASR,MAAa,wBAAuD,EAClE,OACA,UACA,kBACI;CAIJ,MAAM,CAAC,MAAM,WAAW,SAHG,gBAAgB,QACF,WAAW,MAEA;CAEpD,MAAM,cAAc,SAAgB;AAClC,MAAI,SAAS,SACX,UAAS,eAAe,QAAQ;MAEhC,UAAS,KAAK;AAEhB,UAAQ,KAAK;;CAGf,MAAM,kBAAkB;AAExB,QACE,qBAAC,UAAD;EAAU,YAAY;YAAtB,CACE,qBAAC,SAAS,SAAV;GACE,WAAU;GACV,YAAY;GACZ,cAAW;aAHb;IAKG,SAAS,YAAY,oBAAC,cAAD,EAAc,aAAU,UAAW;IACxD,SAAS,WAAW,oBAAC,KAAD,EAAK,aAAU,SAAU;IAC7C,SAAS,UAAU,oBAAC,MAAD,EAAM,aAAU,QAAS;IAC5B;MAEnB,oBAAC,SAAS,OAAV;GAAgB,YAAY;GAAiB;GAAY;aACvD,qBAAC,WAAD;IAAW,WAAU;IAAgC,WAAU;cAA/D;KACE,oBAAC,YAAD;MACE,MAAM;MACN,eAAe,WAAW,SAAS;MACnC,UAAU,SAAS;MACnB,OAAM;gBACP;MAEY;KACb,oBAAC,YAAD;MACE,MAAM;MACN,eAAe,WAAW,QAAQ;MAClC,UAAU,SAAS;MACnB,OAAM;gBACP;MAEY;KACb,oBAAC,YAAD;MACE,MAAM;MACN,eAAe,WAAW,OAAO;MACjC,UAAU,SAAS;MACnB,OAAM;gBACP;MAEY;KACH;;GACG,EACR"}
1
+ {"version":3,"file":"DesktopThemeSwitcher.mjs","names":[],"sources":["../../../../src/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { CircleDashed, Moon, Sun } from 'lucide-react';\nimport { type FC, useState } from 'react';\nimport { Button, type ButtonProps } from '../Button';\nimport { Container } from '../Container';\nimport { DropDown } from '../DropDown';\nimport type { Modes } from './types';\n\nconst ButtonItem: FC<ButtonProps> = ({ Icon, children, ...props }) => (\n <div className=\"relative w-full p-0.5\">\n <Button\n className=\"w-full cursor-pointer rounded-lg p-1 text-left hover:bg-text/10 focus:bg-text-opposite/20 focus:outline-hidden disabled:text-white/25\"\n Icon={Icon}\n data-mode=\"system\"\n role=\"option\"\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n </div>\n);\n\ntype DesktopThemeSwitcherProps = {\n theme: Modes;\n setTheme: (theme: Modes) => void;\n systemTheme: Modes;\n};\n\nexport const DesktopThemeSwitcher: FC<DesktopThemeSwitcherProps> = ({\n theme,\n setTheme,\n systemTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? 'system' : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const switchMode = (mode: Modes) => {\n if (mode === 'system') {\n setTheme(systemTheme ?? 'light');\n } else {\n setTheme(mode);\n }\n setMode(mode);\n };\n\n const panelIdentifier = 'theme-switcher';\n\n return (\n <DropDown identifier={panelIdentifier}>\n <DropDown.Trigger\n className=\"p-2\"\n identifier={panelIdentifier}\n aria-label=\"Theme selector\"\n >\n {mode === 'system' && <CircleDashed data-mode=\"system\" />}\n {mode === 'light' && <Sun data-mode=\"light\" />}\n {mode === 'dark' && <Moon data-mode=\"dark\" />}\n </DropDown.Trigger>\n\n <DropDown.Panel identifier={panelIdentifier} isFocusable isOverable>\n <Container className=\"min-w-25 items-start p-1\" separator=\"y\">\n <ButtonItem\n Icon={CircleDashed}\n onClick={() => switchMode('system')}\n isActive={mode === 'system'}\n label=\"Restore to system mode\"\n >\n System\n </ButtonItem>\n <ButtonItem\n Icon={Sun}\n onClick={() => switchMode('light')}\n isActive={mode === 'light'}\n label=\"Switch to light mode\"\n >\n Light\n </ButtonItem>\n <ButtonItem\n Icon={Moon}\n onClick={() => switchMode('dark')}\n isActive={mode === 'dark'}\n label=\"Switch to dark mode\"\n >\n Dark\n </ButtonItem>\n </Container>\n </DropDown.Panel>\n </DropDown>\n );\n};\n"],"mappings":";;;;;;;;;;AASA,MAAM,cAA+B,EAAE,MAAM,UAAU,GAAG,YACxD,oBAAC,OAAD;CAAK,WAAU;WACb,oBAAC,QAAD;EACE,WAAU;EACJ;EACN,aAAU;EACV,MAAK;EACL,SAAQ;EACR,GAAI;EAEH;EACM;CACL;AASR,MAAa,wBAAuD,EAClE,OACA,UACA,kBACI;CAIJ,MAAM,CAAC,MAAM,WAAW,SAHG,gBAAgB,QACF,WAAW,MAEA;CAEpD,MAAM,cAAc,SAAgB;AAClC,MAAI,SAAS,SACX,UAAS,eAAe,QAAQ;MAEhC,UAAS,KAAK;AAEhB,UAAQ,KAAK;;CAGf,MAAM,kBAAkB;AAExB,QACE,qBAAC,UAAD;EAAU,YAAY;YAAtB,CACE,qBAAC,SAAS,SAAV;GACE,WAAU;GACV,YAAY;GACZ,cAAW;aAHb;IAKG,SAAS,YAAY,oBAAC,cAAD,EAAc,aAAU,UAAW;IACxD,SAAS,WAAW,oBAAC,KAAD,EAAK,aAAU,SAAU;IAC7C,SAAS,UAAU,oBAAC,MAAD,EAAM,aAAU,QAAS;IAC5B;MAEnB,oBAAC,SAAS,OAAV;GAAgB,YAAY;GAAiB;GAAY;aACvD,qBAAC,WAAD;IAAW,WAAU;IAA2B,WAAU;cAA1D;KACE,oBAAC,YAAD;MACE,MAAM;MACN,eAAe,WAAW,SAAS;MACnC,UAAU,SAAS;MACnB,OAAM;gBACP;MAEY;KACb,oBAAC,YAAD;MACE,MAAM;MACN,eAAe,WAAW,QAAQ;MAClC,UAAU,SAAS;MACnB,OAAM;gBACP;MAEY;KACb,oBAAC,YAAD;MACE,MAAM;MACN,eAAe,WAAW,OAAO;MACjC,UAAU,SAAS;MACnB,OAAM;gBACP;MAEY;KACH;;GACG,EACR"}
@@ -9,7 +9,7 @@ import { jsx } from "react/jsx-runtime";
9
9
  //#region src/components/Toaster/Toast.tsx
10
10
  const ToastProvider = ToastPrimitives;
11
11
  const ToastViewport = ({ className, ...props }) => /* @__PURE__ */ jsx(ToastPrimitives.Viewport, {
12
- className: cn("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-[420px]", className),
12
+ className: cn("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", className),
13
13
  ...props
14
14
  });
15
15
  /**
@@ -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-[420px]',\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-muted/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,mIACA,UACD;CACD,GAAI;CACJ;;;;;;;;;;;;;;;;;;;AAqBJ,MAAa,gBAAgB,IAC3B,usBACA;CACE,UAAU;;AAER,SAAS;;EAEP,OAAO;;EAEP,SAAS;;EAET,SAAS;EACV,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCD,MAAa,SAGR,EAAE,WAAW,SAAS,GAAG,YAAY;AACxC,QACE,oBAAC,gBAAgB,MAAjB;EACE,WAAW,GAAG,cAAc,EAAE,SAAS,CAAC,EAAE,UAAU;EACpD,GAAI;EACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCN,MAAa,eAAkE,EAC7E,WACA,GAAG,YAEH,oBAAC,gBAAgB,QAAjB;CACE,WAAW,GACT,kaACA,UACD;CACD,GAAI;CACJ;AAGJ,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GACT,0TACA,UACD;CACD,eAAY;CACZ,GAAI;WAEJ,oBAAC,GAAD,EAAG,WAAU,UAAW;CACF;;;;;;;;;;;;;;;;;;;AAoB1B,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GAAG,yCAAyC,UAAU;CACjE,GAAI;CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BJ,MAAa,oBAER,EAAE,WAAW,GAAG,YACnB,oBAAC,gBAAgB,aAAjB;CACE,WAAW,GAAG,sCAAsC,UAAU;CAC9D,GAAI;CACJ"}
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-muted/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,UACD;CACD,GAAI;CACJ;;;;;;;;;;;;;;;;;;;AAqBJ,MAAa,gBAAgB,IAC3B,usBACA;CACE,UAAU;;AAER,SAAS;;EAEP,OAAO;;EAEP,SAAS;;EAET,SAAS;EACV,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCD,MAAa,SAGR,EAAE,WAAW,SAAS,GAAG,YAAY;AACxC,QACE,oBAAC,gBAAgB,MAAjB;EACE,WAAW,GAAG,cAAc,EAAE,SAAS,CAAC,EAAE,UAAU;EACpD,GAAI;EACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCN,MAAa,eAAkE,EAC7E,WACA,GAAG,YAEH,oBAAC,gBAAgB,QAAjB;CACE,WAAW,GACT,kaACA,UACD;CACD,GAAI;CACJ;AAGJ,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GACT,0TACA,UACD;CACD,eAAY;CACZ,GAAI;WAEJ,oBAAC,GAAD,EAAG,WAAU,UAAW;CACF;;;;;;;;;;;;;;;;;;;AAoB1B,MAAa,cAAgE,EAC3E,WACA,GAAG,YAEH,oBAAC,gBAAgB,OAAjB;CACE,WAAW,GAAG,yCAAyC,UAAU;CACjE,GAAI;CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BJ,MAAa,oBAER,EAAE,WAAW,GAAG,YACnB,oBAAC,gBAAgB,aAAjB;CACE,WAAW,GAAG,sCAAsC,UAAU;CAC9D,GAAI;CACJ"}
@@ -137,8 +137,8 @@ const Website_Benchmark_NextJS_Path = "/doc/benchmark/nextjs";
137
137
  const Website_Benchmark_Tanstack_Path = "/doc/benchmark/tanstack";
138
138
  const Website_Doc_MCP_Path = "/doc/mcp-server";
139
139
  const Website_Blog_Root_Path = "/blog";
140
- const Website_Blog_Path = "/blog/search";
141
- const Website_Blog_Search_Path = "/blog/search";
140
+ const Website_Blog_Path = "/blog";
141
+ const Website_Blog_Search_Path = "/blog";
142
142
  const Website_Blog_What_is_i18n_Path = "/blog/what-is-internationalization";
143
143
  const Website_FrequentQuestions_Path = "/frequent-questions";
144
144
  const Website_PrivacyPolicy_Path = "/privacy-notice";
@@ -246,8 +246,8 @@ const Doc_CLI_Translate_Path = "/concept/cli/doc-translate";
246
246
  const Doc_CLI_Review_Path = "/concept/cli/doc-review";
247
247
  const Doc_MCP_Path = "/mcp-server";
248
248
  const Doc_Blog_Root_Path = "/blog";
249
- const Doc_Blog_Path = "/blog/search";
250
- const Doc_Blog_Search_Path = "/blog/search";
249
+ const Doc_Blog_Path = "/blog";
250
+ const Doc_Blog_Search_Path = "/blog";
251
251
  const Doc_Blog_What_is_i18n_Path = "/blog/what-is-internationalization";
252
252
  const Doc_FrequentQuestions_Path = "/frequent-questions";
253
253
  const Doc_PrivacyPolicy_Path = "/privacy-notice";
@@ -1 +1 @@
1
- {"version":3,"file":"routes.mjs","names":[],"sources":["../../src/routes.ts"],"sourcesContent":["// ============================================================\n// Domains\n// ============================================================\nexport const App_Domain = 'app.intlayer.org' as const;\nexport const Website_Domain = 'intlayer.org' as const;\nexport const Showcase_Domain = 'showcase.intlayer.org' as const;\n\n// ============================================================\n// App paths — relative (app.intlayer.org)\n// ============================================================\nexport const App_Home_Path = '/' as const;\nexport const App_NotFound_Path = '/404' as const;\n\nexport const App_Dashboard_Editor_Path = '/editor' as const;\nexport const App_Dashboard_Translate_Path = '/translate' as const;\nexport const App_Dashboard_Dictionaries_Path = '/dictionary' as const;\nexport const App_Dashboard_Projects_Path = '/projects' as const;\nexport const App_Dashboard_Tags_Path = '/tags' as const;\nexport const App_Dashboard_Organization_Path = '/organization' as const;\nexport const App_Dashboard_Profile_Path = '/profile' as const;\nexport const App_Dashboard_IDE_Path = '/ide' as const;\nexport const App_Dashboard_Scanner_Path = '/scanner' as const;\n\nexport const App_Pricing_Path = '/pricing' as const;\nexport const App_Affiliation_Path = '/affiliation' as const;\n\nexport const App_Demo_Path = '/demo' as const;\n\nexport const App_ReviewerMarketplace_Path = '/find-reviewer' as const;\nexport const App_ReviewerMarketplace_Dashboard_Path =\n '/find-reviewer/dashboard' as const;\nexport const App_ReviewerMarketplace_Reviewer_Path =\n '/find-reviewer/$reviewerId' as const;\nexport const App_ReviewerMarketplace_Dashboard_Mission_Path =\n '/find-reviewer/dashboard/mission/$missionId' as const;\n\nexport const getAppReviewerProfileRoute = (reviewerId: string) =>\n `/find-reviewer/${reviewerId}` as const;\nexport const getAppReviewerMissionRoute = (missionId: string) =>\n `/find-reviewer/dashboard/mission/${missionId}` as const;\n\nexport const App_Auth_SignIn_Path = '/auth/login' as const;\nexport const App_Auth_SignUp_Path = '/auth/register' as const;\nexport const App_Auth_TwoFactor_Path = '/auth/2fa' as const;\nexport const App_Auth_Demo_Path = '/auth/demo' as const;\nexport const App_Auth_AskResetPassword_Path =\n '/auth/password/ask-reset' as const;\nexport const App_Auth_ResetPassword_Path = '/auth/password/reset' as const;\nexport const App_Auth_ChangePassword_Path = '/auth/password/change' as const;\n\nexport const App_Admin_Path = '/admin' as const;\nexport const App_Admin_Users_Path = '/admin/users' as const;\nexport const App_Admin_Organizations_Path = '/admin/organizations' as const;\nexport const App_Admin_Projects_Path = '/admin/projects' as const;\nexport const App_Admin_Dashboard_Path = '/admin/dashboard' as const;\nexport const App_Admin_Management_Path = '/admin/management' as const;\nexport const App_Admin_Discussions_Path = '/admin/discussions' as const;\nexport const App_Admin_Affiliate_Path = '/admin/affiliate' as const;\nexport const getAppAdminAffiliateRoute = (id: string) =>\n `${App_Admin_Affiliate_Path}/${id}` as const;\nexport const App_Admin_PromoCodes_Path = '/admin/promo-code' as const;\nexport const getAppAdminPromoCodeRoute = (id: string) =>\n `${App_Admin_PromoCodes_Path}/${id}` as const;\n\nexport const App_Admin_Reviewers_Path = '/admin/reviewers' as const;\nexport const getAppAdminReviewerRoute = (id: string) =>\n `${App_Admin_Reviewers_Path}/${id}` as const;\n\nexport const App_Onboarding_Path = '/onboarding' as const;\n\nexport const getAppAdminUserRoute = (id: string) =>\n `${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationRoute = (id: string) =>\n `${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectRoute = (id: string) =>\n `${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowRoute = (step: string) =>\n `${App_Onboarding_Path}/${step}` as const;\n\n// ============================================================\n// App absolute URLs — https://app.intlayer.org\n// ============================================================\nexport const App_Dashboard = `https://${App_Domain}` as const;\nexport const App_Dashboard_Editor =\n `https://${App_Domain}${App_Dashboard_Editor_Path}` as const;\nexport const App_Dashboard_Translate =\n `https://${App_Domain}${App_Dashboard_Translate_Path}` as const;\nexport const App_Dashboard_Dictionaries =\n `https://${App_Domain}${App_Dashboard_Dictionaries_Path}` as const;\nexport const App_Dashboard_Projects =\n `https://${App_Domain}${App_Dashboard_Projects_Path}` as const;\nexport const App_Dashboard_Tags =\n `https://${App_Domain}${App_Dashboard_Tags_Path}` as const;\nexport const App_Dashboard_Organization =\n `https://${App_Domain}${App_Dashboard_Organization_Path}` as const;\nexport const App_Dashboard_Profile =\n `https://${App_Domain}${App_Dashboard_Profile_Path}` as const;\nexport const App_Dashboard_IDE =\n `https://${App_Domain}${App_Dashboard_IDE_Path}` as const;\nexport const App_Dashboard_Scanner =\n `https://${App_Domain}${App_Dashboard_Scanner_Path}` as const;\n\nexport const App_Pricing = `https://${App_Domain}${App_Pricing_Path}` as const;\nexport const App_Affiliation =\n `https://${App_Domain}${App_Affiliation_Path}` as const;\nexport const App_Demo = `https://${App_Domain}${App_Demo_Path}` as const;\n\nexport const App_ReviewerMarketplace =\n `https://${App_Domain}${App_ReviewerMarketplace_Path}` as const;\nexport const App_ReviewerMarketplace_Dashboard =\n `https://${App_Domain}${App_ReviewerMarketplace_Dashboard_Path}` as const;\n\nexport const App_Auth_SignIn =\n `https://${App_Domain}${App_Auth_SignIn_Path}` as const;\nexport const App_Auth_SignUp =\n `https://${App_Domain}${App_Auth_SignUp_Path}` as const;\nexport const App_Auth_TwoFactor =\n `https://${App_Domain}${App_Auth_TwoFactor_Path}` as const;\nexport const App_Auth_AskResetPassword =\n `https://${App_Domain}${App_Auth_AskResetPassword_Path}` as const;\nexport const App_Auth_ResetPassword =\n `https://${App_Domain}${App_Auth_ResetPassword_Path}` as const;\nexport const App_Auth_ChangePassword =\n `https://${App_Domain}${App_Auth_ChangePassword_Path}` as const;\n\nexport const App_Admin = `https://${App_Domain}${App_Admin_Path}` as const;\nexport const App_Admin_Users =\n `https://${App_Domain}${App_Admin_Users_Path}` as const;\nexport const App_Admin_Organizations =\n `https://${App_Domain}${App_Admin_Organizations_Path}` as const;\nexport const App_Admin_Projects =\n `https://${App_Domain}${App_Admin_Projects_Path}` as const;\nexport const App_Admin_Dashboard =\n `https://${App_Domain}${App_Admin_Dashboard_Path}` as const;\nexport const App_Admin_Management =\n `https://${App_Domain}${App_Admin_Management_Path}` as const;\nexport const App_Admin_Discussions =\n `https://${App_Domain}${App_Admin_Discussions_Path}` as const;\nexport const App_Admin_Affiliate =\n `https://${App_Domain}${App_Admin_Affiliate_Path}` as const;\nexport const App_Admin_PromoCodes =\n `https://${App_Domain}${App_Admin_PromoCodes_Path}` as const;\nexport const App_Admin_Reviewers =\n `https://${App_Domain}${App_Admin_Reviewers_Path}` as const;\n\nexport const App_Onboarding =\n `https://${App_Domain}${App_Onboarding_Path}` as const;\n\nexport const getAppAdminUserAbsoluteRoute = (id: string) =>\n `https://${App_Domain}${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationAbsoluteRoute = (id: string) =>\n `https://${App_Domain}${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectAbsoluteRoute = (id: string) =>\n `https://${App_Domain}${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowAbsoluteRoute = (\n step: string,\n plan: string,\n period?: string\n) =>\n period\n ? `https://${App_Domain}${App_Onboarding_Path}/${step}/${plan}/${period}`\n : (`https://${App_Domain}${App_Onboarding_Path}/${step}/${plan}` as const);\n\n// ============================================================\n// Website paths — relative (intlayer.org)\n// ============================================================\nexport const Website_Home_Path = '/' as const;\nexport const Website_CMS_Path = '/cms' as const;\nexport const Website_TMS_Path = '/tms' as const;\nexport const Website_Translate_Path = '/translate' as const;\nexport const Website_Markdown_Preview_Path = '/markdown' as const;\nexport const Website_Demo_Path = '/demo' as const;\nexport const Website_Playground_Path = '/playground' as const;\nexport const Website_NotFound_Path = '/404' as const;\nexport const Website_Changelog_Path = '/changelog' as const;\nexport const Website_Scanner_Path = '/i18n-seo-scanner' as const;\n\nexport const Website_Doc_Root_Path = '/doc' as const;\nexport const Website_Doc_Path = '/doc/get-started' as const;\nexport const Website_Doc_Why_Path = '/doc/why' as const;\nexport const Website_Doc_Search_Path = '/doc/search' as const;\nexport const Website_Doc_Chat_Path = '/doc/chat' as const;\nexport const Website_Doc_IntlayerVisualEditor_Path =\n '/doc/concept/editor' as const;\nexport const Website_Doc_IntlayerCMS_Path = '/doc/concept/cms' as const;\n\nexport const Website_ReleasesV6_Path = '/doc/releases/v6' as const;\nexport const Website_ReleasesV7_Path = '/doc/releases/v7' as const;\nexport const Website_ReleasesV8_Path = '/doc/releases/v8' as const;\nexport const Website_Doc_Environment_NextJS_Path =\n '/doc/environment/nextjs' as const;\nexport const Website_Doc_Environment_NextJS_16_Path =\n '/doc/environment/nextjs/16' as const;\nexport const Website_Doc_Environment_NextJS_15_Path =\n '/doc/environment/nextjs/15' as const;\nexport const Website_Doc_Environment_NextJS_14_Path =\n '/doc/environment/nextjs/14' as const;\nexport const Website_Doc_Environment_CRA_Path =\n '/doc/environment/create-react-app' as const;\nexport const Website_Doc_Environment_Astro_Path =\n '/doc/environment/astro' as const;\nexport const Website_Doc_Environment_ViteAndReact_Path =\n '/doc/environment/vite-and-react' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/doc/environment/vite-and-react/react-router-v7' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/doc/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Website_Doc_Environment_Tanstack_Path =\n '/doc/environment/tanstack' as const;\nexport const Website_Doc_Environment_Lit_Path = '/doc/environment/lit' as const;\nexport const Website_Doc_Environment_Nodejs_Path = '/doc/concept/cli' as const;\nexport const Website_Doc_Environment_Adonis_Path =\n '/doc/environment/adonis' as const;\nexport const Website_Doc_Environment_ViteAndVue_Path =\n '/doc/environment/vite-and-vue' as const;\nexport const Website_Doc_Environment_ViteAndSolid_Path =\n '/doc/environment/vite-and-solid' as const;\nexport const Website_Doc_Environment_ViteAndSvelte_Path =\n '/doc/environment/vite-and-svelte' as const;\nexport const Website_Doc_Environment_ViteAndPreact_Path =\n '/doc/environment/vite-and-preact' as const;\nexport const Website_Doc_Environment_NuxtAndVue_Path =\n '/doc/environment/nuxt-and-vue' as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Angular_Path =\n '/doc/environment/angular' as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo_Path =\n '/doc/environment/react-native-and-expo' as const;\nexport const Website_Doc_Environment_Lynx_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Express_Path =\n '/doc/environment/express' as const;\nexport const Website_Doc_Environment_NestJS_Path =\n '/doc/environment/nestjs' as const;\nexport const Website_Doc_Environment_Fastify_Path =\n '/doc/environment/fastify' as const;\nexport const Website_Doc_Environment_Hono_Path =\n '/doc/environment/hono' as const;\n\nexport const Website_Doc_CLI_Fill_Path = '/doc/concept/cli/fill' as const;\nexport const Website_Doc_CLI_Translate_Path =\n '/doc/concept/cli/doc-translate' as const;\nexport const Website_Doc_CLI_Review_Path =\n '/doc/concept/cli/doc-review' as const;\n\nexport const Website_Benchmark_Path = '/doc/benchmark' as const;\nexport const Website_Benchmark_NextJS_Path = '/doc/benchmark/nextjs' as const;\nexport const Website_Benchmark_Tanstack_Path =\n '/doc/benchmark/tanstack' as const;\n\nexport const Website_Doc_MCP_Path = '/doc/mcp-server' as const;\n\nexport const Website_Blog_Root_Path = '/blog' as const;\nexport const Website_Blog_Path = '/blog/search' as const;\nexport const Website_Blog_Search_Path = '/blog/search' as const;\nexport const Website_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Website_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Website_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Website_TermsOfService_Path = '/terms-of-service' as const;\nexport const Website_Contributors_Path = '/contributors' as const;\n\n// ============================================================\n// Website absolute URLs — https://intlayer.org\n// ============================================================\nexport const Website_Home =\n `https://${Website_Domain}${Website_Home_Path}` as const;\nexport const Website_CMS =\n `https://${Website_Domain}${Website_CMS_Path}` as const;\nexport const Website_TMS =\n `https://${Website_Domain}${Website_TMS_Path}` as const;\nexport const Website_Translate =\n `https://${Website_Domain}${Website_Translate_Path}` as const;\nexport const Website_Markdown_Preview =\n `https://${Website_Domain}${Website_Markdown_Preview_Path}` as const;\nexport const Website_Demo =\n `https://${Website_Domain}${Website_Demo_Path}` as const;\nexport const Website_Playground =\n `https://${Website_Domain}${Website_Playground_Path}` as const;\nexport const Website_NotFound =\n `https://${Website_Domain}${Website_NotFound_Path}` as const;\nexport const Website_Changelog =\n `https://${Website_Domain}${Website_Changelog_Path}` as const;\nexport const Website_Scanner =\n `https://${Website_Domain}${Website_Scanner_Path}` as const;\nexport const Website_Benchmark =\n `https://${Website_Domain}${Website_Benchmark_Path}` as const;\nexport const Website_Benchmark_NextJS =\n `https://${Website_Domain}${Website_Benchmark_NextJS_Path}` as const;\nexport const Website_Benchmark_Tanstack =\n `https://${Website_Domain}${Website_Benchmark_Tanstack_Path}` as const;\n\nexport const Website_Doc_Root =\n `https://${Website_Domain}${Website_Doc_Root_Path}` as const;\nexport const Website_Doc =\n `https://${Website_Domain}${Website_Doc_Path}` as const;\nexport const Website_Doc_Why =\n `https://${Website_Domain}${Website_Doc_Why_Path}` as const;\nexport const Website_Doc_Search =\n `https://${Website_Domain}${Website_Doc_Search_Path}` as const;\nexport const Website_Doc_Chat =\n `https://${Website_Domain}${Website_Doc_Chat_Path}` as const;\nexport const Website_Doc_IntlayerVisualEditor =\n `https://${Website_Domain}${Website_Doc_IntlayerVisualEditor_Path}` as const;\nexport const Website_Doc_IntlayerCMS =\n `https://${Website_Domain}${Website_Doc_IntlayerCMS_Path}` as const;\n\nexport const Website_ReleasesV6 =\n `https://${Website_Domain}${Website_ReleasesV6_Path}` as const;\nexport const Website_ReleasesV7 =\n `https://${Website_Domain}${Website_ReleasesV7_Path}` as const;\nexport const Website_ReleasesV8 =\n `https://${Website_Domain}${Website_ReleasesV8_Path}` as const;\nexport const Website_Doc_Environment_NextJS =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_Path}` as const;\nexport const Website_Doc_Environment_NextJS_16 =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_16_Path}` as const;\nexport const Website_Doc_Environment_NextJS_15 =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_15_Path}` as const;\nexport const Website_Doc_Environment_NextJS_14 =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_14_Path}` as const;\nexport const Website_Doc_Environment_CRA =\n `https://${Website_Domain}${Website_Doc_Environment_CRA_Path}` as const;\nexport const Website_Doc_Environment_Astro =\n `https://${Website_Domain}${Website_Doc_Environment_Astro_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndReact_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7 =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path}` as const;\nexport const Website_Doc_Environment_Tanstack =\n `https://${Website_Domain}${Website_Doc_Environment_Tanstack_Path}` as const;\nexport const Website_Doc_Environment_Lit =\n `https://${Website_Domain}${Website_Doc_Environment_Lit_Path}` as const;\nexport const Website_Doc_Environment_Nodejs =\n `https://${Website_Domain}${Website_Doc_Environment_Nodejs_Path}` as const;\nexport const Website_Doc_Environment_Adonis =\n `https://${Website_Domain}${Website_Doc_Environment_Adonis_Path}` as const;\nexport const Website_Doc_Environment_ViteAndVue =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndVue_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSolid =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndSolid_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSvelte =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndSvelte_Path}` as const;\nexport const Website_Doc_Environment_ViteAndPreact =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndPreact_Path}` as const;\nexport const Website_Doc_Environment_NuxtAndVue =\n `https://${Website_Domain}${Website_Doc_Environment_NuxtAndVue_Path}` as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React =\n `https://${Website_Domain}${Website_Doc_Intlayer_with_Lynx_and_React_Path}` as const;\nexport const Website_Doc_Environment_Angular =\n `https://${Website_Domain}${Website_Doc_Environment_Angular_Path}` as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo =\n `https://${Website_Domain}${Website_Doc_Environment_ReactNativeAndExpo_Path}` as const;\nexport const Website_Doc_Environment_Lynx =\n `https://${Website_Domain}${Website_Doc_Environment_Lynx_Path}` as const;\nexport const Website_Doc_Environment_Express =\n `https://${Website_Domain}${Website_Doc_Environment_Express_Path}` as const;\nexport const Website_Doc_Environment_NestJS =\n `https://${Website_Domain}${Website_Doc_Environment_NestJS_Path}` as const;\nexport const Website_Doc_Environment_Fastify =\n `https://${Website_Domain}${Website_Doc_Environment_Fastify_Path}` as const;\nexport const Website_Doc_Environment_Hono =\n `https://${Website_Domain}${Website_Doc_Environment_Hono_Path}` as const;\n\nexport const Website_Doc_CLI_Fill =\n `https://${Website_Domain}${Website_Doc_CLI_Fill_Path}` as const;\nexport const Website_Doc_CLI_Translate =\n `https://${Website_Domain}${Website_Doc_CLI_Translate_Path}` as const;\nexport const Website_Doc_CLI_Review =\n `https://${Website_Domain}${Website_Doc_CLI_Review_Path}` as const;\n\nexport const Website_Doc_MCP =\n `https://${Website_Domain}${Website_Doc_MCP_Path}` as const;\n\nexport const Website_Blog_Root =\n `https://${Website_Domain}${Website_Blog_Root_Path}` as const;\nexport const Website_Blog =\n `https://${Website_Domain}${Website_Blog_Path}` as const;\nexport const Website_Blog_Search =\n `https://${Website_Domain}${Website_Blog_Search_Path}` as const;\nexport const Website_Blog_What_is_i18n =\n `https://${Website_Domain}${Website_Blog_What_is_i18n_Path}` as const;\n\nexport const Website_FrequentQuestions =\n `https://${Website_Domain}${Website_FrequentQuestions_Path}` as const;\nexport const Website_PrivacyPolicy =\n `https://${Website_Domain}${Website_PrivacyPolicy_Path}` as const;\nexport const Website_TermsOfService =\n `https://${Website_Domain}${Website_TermsOfService_Path}` as const;\nexport const Website_Contributors =\n `https://${Website_Domain}${Website_Contributors_Path}` as const;\n\n// ============================================================\n// Doc app paths — relative (served under intlayer.org/doc/*)\n// ============================================================\nexport const Doc_Root_Path = '/doc' as const;\nexport const Doc_Path = '/get-started' as const;\nexport const Doc_Why_Path = '/why' as const;\nexport const Doc_Search_Path = '/search' as const;\nexport const Doc_Chat_Path = '/chat' as const;\nexport const Doc_IntlayerVisualEditor_Path = '/concept/editor' as const;\nexport const Doc_IntlayerCMS_Path = '/concept/cms' as const;\n\nexport const Doc_ReleasesV6_Path = '/releases/v6' as const;\nexport const Doc_ReleasesV7_Path = '/releases/v7' as const;\nexport const Doc_ReleasesV8_Path = '/releases/v8' as const;\nexport const Doc_Environment_NextJS_Path = '/environment/nextjs' as const;\nexport const Doc_Environment_NextJS_16_Path = '/environment/nextjs/16' as const;\nexport const Doc_Environment_NextJS_15_Path = '/environment/nextjs/15' as const;\nexport const Doc_Environment_NextJS_14_Path = '/environment/nextjs/14' as const;\nexport const Doc_Environment_CRA_Path =\n '/environment/create-react-app' as const;\nexport const Doc_Environment_Astro_Path = '/environment/astro' as const;\nexport const Doc_Environment_ViteAndReact_Path =\n '/environment/vite-and-react' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/environment/vite-and-react/react-router-v7' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Doc_Environment_Tanstack_Path = '/environment/tanstack' as const;\nexport const Doc_Environment_Lit_Path = '/environment/lit' as const;\nexport const Doc_Environment_Nodejs_Path = '/concept/cli' as const;\nexport const Doc_Environment_Adonis_Path = '/environment/adonis' as const;\nexport const Doc_Environment_ViteAndVue_Path =\n '/environment/vite-and-vue' as const;\nexport const Doc_Environment_ViteAndSolid_Path =\n '/environment/vite-and-solid' as const;\nexport const Doc_Environment_ViteAndSvelte_Path =\n '/environment/vite-and-svelte' as const;\nexport const Doc_Environment_ViteAndPreact_Path =\n '/environment/vite-and-preact' as const;\nexport const Doc_Environment_NuxtAndVue_Path =\n '/environment/nuxt-and-vue' as const;\nexport const Doc_Intlayer_with_Lynx_and_React_Path =\n '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Angular_Path = '/environment/angular' as const;\nexport const Doc_Environment_ReactNativeAndExpo_Path =\n '/environment/react-native-and-expo' as const;\nexport const Doc_Environment_Lynx_Path = '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Express_Path = '/environment/express' as const;\nexport const Doc_Environment_NestJS_Path = '/environment/nestjs' as const;\nexport const Doc_Environment_Fastify_Path = '/environment/fastify' as const;\nexport const Doc_Environment_Hono_Path = '/environment/hono' as const;\n\nexport const Doc_CLI_Fill_Path = '/concept/cli/fill' as const;\nexport const Doc_CLI_Translate_Path = '/concept/cli/doc-translate' as const;\nexport const Doc_CLI_Review_Path = '/concept/cli/doc-review' as const;\n\nexport const Doc_MCP_Path = '/mcp-server' as const;\n\nexport const Doc_Blog_Root_Path = '/blog' as const;\nexport const Doc_Blog_Path = '/blog/search' as const;\nexport const Doc_Blog_Search_Path = '/blog/search' as const;\nexport const Doc_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Doc_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Doc_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Doc_TermsOfService_Path = '/terms-of-service' as const;\nexport const Doc_Contributors_Path = '/contributors' as const;\nexport const Doc_Showcase_Path = '/' as const;\nexport const Doc_ShowcaseSubmit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase paths — relative (showcase.intlayer.org)\n// ============================================================\nexport const Showcase_Root_Path = '/' as const;\nexport const Showcase_Submit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase absolute URLs — https://showcase.intlayer.org\n// ============================================================\nexport const Showcase_Root = `https://${Showcase_Domain}` as const;\nexport const Showcase_Submit =\n `https://${Showcase_Domain}${Showcase_Submit_Path}` as const;\n\n// ============================================================\n// External links\n// ============================================================\nexport const External_Github =\n 'https://github.com/aymericzip/intlayer' as const;\n\nexport const External_Github_i18n_benchmark =\n 'https://github.com/intlayer-org/benchmark-i18n' as const;\n\nexport const External_Discord = 'https://discord.gg/7uxamYVeCk' as const;\nexport const External_LinkedIn =\n 'https://www.linkedin.com/company/intlayerorg/' as const;\nexport const External_AI_Landing_Page = 'https://ai.intlayer.org' as const;\nexport const External_ShowcaseApp = `https://${Showcase_Domain}` as const;\nexport const External_Examples =\n 'https://github.com/aymericzip/intlayer/tree/main/examples' as const;\nexport const External_ExampleIntlayerWithNextjs =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/nextjs-15-app' as const;\nexport const External_ExampleIntlayerWithReactJS =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-app' as const;\nexport const External_ExampleIntlayerWithViteAndReact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-react-app' as const;\nexport const External_ExampleIntlayerWithViteAndVue =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-vue-app' as const;\nexport const External_ExampleIntlayerWithViteAndSvelte =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-svelte-app' as const;\nexport const External_ExampleIntlayerWithViteAndSolid =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-solid-app' as const;\nexport const External_ExampleIntlayerWithViteAndPreact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-preact-app' as const;\nexport const External_ExampleIntlayerWithReactNative =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-native-app' as const;\nexport const External_ExampleIntlayerWithExpress =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/express-app' as const;\n"],"mappings":";AAGA,MAAa,aAAa;AAC1B,MAAa,iBAAiB;AAC9B,MAAa,kBAAkB;AAK/B,MAAa,gBAAgB;AAC7B,MAAa,oBAAoB;AAEjC,MAAa,4BAA4B;AACzC,MAAa,+BAA+B;AAC5C,MAAa,kCAAkC;AAC/C,MAAa,8BAA8B;AAC3C,MAAa,0BAA0B;AACvC,MAAa,kCAAkC;AAC/C,MAAa,6BAA6B;AAC1C,MAAa,yBAAyB;AACtC,MAAa,6BAA6B;AAE1C,MAAa,mBAAmB;AAChC,MAAa,uBAAuB;AAEpC,MAAa,gBAAgB;AAE7B,MAAa,+BAA+B;AAC5C,MAAa,yCACX;AACF,MAAa,wCACX;AACF,MAAa,iDACX;AAEF,MAAa,8BAA8B,eACzC,kBAAkB;AACpB,MAAa,8BAA8B,cACzC,oCAAoC;AAEtC,MAAa,uBAAuB;AACpC,MAAa,uBAAuB;AACpC,MAAa,0BAA0B;AACvC,MAAa,qBAAqB;AAClC,MAAa,iCACX;AACF,MAAa,8BAA8B;AAC3C,MAAa,+BAA+B;AAE5C,MAAa,iBAAiB;AAC9B,MAAa,uBAAuB;AACpC,MAAa,+BAA+B;AAC5C,MAAa,0BAA0B;AACvC,MAAa,2BAA2B;AACxC,MAAa,4BAA4B;AACzC,MAAa,6BAA6B;AAC1C,MAAa,2BAA2B;AACxC,MAAa,6BAA6B,OACxC,GAAG,yBAAyB,GAAG;AACjC,MAAa,4BAA4B;AACzC,MAAa,6BAA6B,OACxC,GAAG,0BAA0B,GAAG;AAElC,MAAa,2BAA2B;AACxC,MAAa,4BAA4B,OACvC,GAAG,yBAAyB,GAAG;AAEjC,MAAa,sBAAsB;AAEnC,MAAa,wBAAwB,OACnC,GAAG,qBAAqB,GAAG;AAC7B,MAAa,gCAAgC,OAC3C,GAAG,6BAA6B,GAAG;AACrC,MAAa,2BAA2B,OACtC,GAAG,wBAAwB,GAAG;AAChC,MAAa,6BAA6B,SACxC,GAAG,oBAAoB,GAAG;AAK5B,MAAa,gBAAgB,WAAW;AACxC,MAAa,uBACX,WAAW,aAAa;AAC1B,MAAa,0BACX,WAAW,aAAa;AAC1B,MAAa,6BACX,WAAW,aAAa;AAC1B,MAAa,yBACX,WAAW,aAAa;AAC1B,MAAa,qBACX,WAAW,aAAa;AAC1B,MAAa,6BACX,WAAW,aAAa;AAC1B,MAAa,wBACX,WAAW,aAAa;AAC1B,MAAa,oBACX,WAAW,aAAa;AAC1B,MAAa,wBACX,WAAW,aAAa;AAE1B,MAAa,cAAc,WAAW,aAAa;AACnD,MAAa,kBACX,WAAW,aAAa;AAC1B,MAAa,WAAW,WAAW,aAAa;AAEhD,MAAa,0BACX,WAAW,aAAa;AAC1B,MAAa,oCACX,WAAW,aAAa;AAE1B,MAAa,kBACX,WAAW,aAAa;AAC1B,MAAa,kBACX,WAAW,aAAa;AAC1B,MAAa,qBACX,WAAW,aAAa;AAC1B,MAAa,4BACX,WAAW,aAAa;AAC1B,MAAa,yBACX,WAAW,aAAa;AAC1B,MAAa,0BACX,WAAW,aAAa;AAE1B,MAAa,YAAY,WAAW,aAAa;AACjD,MAAa,kBACX,WAAW,aAAa;AAC1B,MAAa,0BACX,WAAW,aAAa;AAC1B,MAAa,qBACX,WAAW,aAAa;AAC1B,MAAa,sBACX,WAAW,aAAa;AAC1B,MAAa,uBACX,WAAW,aAAa;AAC1B,MAAa,wBACX,WAAW,aAAa;AAC1B,MAAa,sBACX,WAAW,aAAa;AAC1B,MAAa,uBACX,WAAW,aAAa;AAC1B,MAAa,sBACX,WAAW,aAAa;AAE1B,MAAa,iBACX,WAAW,aAAa;AAE1B,MAAa,gCAAgC,OAC3C,WAAW,aAAa,qBAAqB,GAAG;AAClD,MAAa,wCAAwC,OACnD,WAAW,aAAa,6BAA6B,GAAG;AAC1D,MAAa,mCAAmC,OAC9C,WAAW,aAAa,wBAAwB,GAAG;AACrD,MAAa,qCACX,MACA,MACA,WAEA,SACI,WAAW,aAAa,oBAAoB,GAAG,KAAK,GAAG,KAAK,GAAG,WAC9D,WAAW,aAAa,oBAAoB,GAAG,KAAK,GAAG;AAK9D,MAAa,oBAAoB;AACjC,MAAa,mBAAmB;AAChC,MAAa,mBAAmB;AAChC,MAAa,yBAAyB;AACtC,MAAa,gCAAgC;AAC7C,MAAa,oBAAoB;AACjC,MAAa,0BAA0B;AACvC,MAAa,wBAAwB;AACrC,MAAa,yBAAyB;AACtC,MAAa,uBAAuB;AAEpC,MAAa,wBAAwB;AACrC,MAAa,mBAAmB;AAChC,MAAa,uBAAuB;AACpC,MAAa,0BAA0B;AACvC,MAAa,wBAAwB;AACrC,MAAa,wCACX;AACF,MAAa,+BAA+B;AAE5C,MAAa,0BAA0B;AACvC,MAAa,0BAA0B;AACvC,MAAa,0BAA0B;AACvC,MAAa,sCACX;AACF,MAAa,yCACX;AACF,MAAa,yCACX;AACF,MAAa,yCACX;AACF,MAAa,mCACX;AACF,MAAa,qCACX;AACF,MAAa,4CACX;AACF,MAAa,0DACX;AACF,MAAa,mEACX;AACF,MAAa,wCACX;AACF,MAAa,mCAAmC;AAChD,MAAa,sCAAsC;AACnD,MAAa,sCACX;AACF,MAAa,0CACX;AACF,MAAa,4CACX;AACF,MAAa,6CACX;AACF,MAAa,6CACX;AACF,MAAa,0CACX;AACF,MAAa,gDACX;AACF,MAAa,uCACX;AACF,MAAa,kDACX;AACF,MAAa,oCACX;AACF,MAAa,uCACX;AACF,MAAa,sCACX;AACF,MAAa,uCACX;AACF,MAAa,oCACX;AAEF,MAAa,4BAA4B;AACzC,MAAa,iCACX;AACF,MAAa,8BACX;AAEF,MAAa,yBAAyB;AACtC,MAAa,gCAAgC;AAC7C,MAAa,kCACX;AAEF,MAAa,uBAAuB;AAEpC,MAAa,yBAAyB;AACtC,MAAa,oBAAoB;AACjC,MAAa,2BAA2B;AACxC,MAAa,iCACX;AAEF,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAC1C,MAAa,8BAA8B;AAC3C,MAAa,4BAA4B;AAKzC,MAAa,eACX,WAAW;AACb,MAAa,cACX,WAAW,iBAAiB;AAC9B,MAAa,cACX,WAAW,iBAAiB;AAC9B,MAAa,oBACX,WAAW,iBAAiB;AAC9B,MAAa,2BACX,WAAW,iBAAiB;AAC9B,MAAa,eACX,WAAW,iBAAiB;AAC9B,MAAa,qBACX,WAAW,iBAAiB;AAC9B,MAAa,mBACX,WAAW,iBAAiB;AAC9B,MAAa,oBACX,WAAW,iBAAiB;AAC9B,MAAa,kBACX,WAAW,iBAAiB;AAC9B,MAAa,oBACX,WAAW,iBAAiB;AAC9B,MAAa,2BACX,WAAW,iBAAiB;AAC9B,MAAa,6BACX,WAAW,iBAAiB;AAE9B,MAAa,mBACX,WAAW,iBAAiB;AAC9B,MAAa,cACX,WAAW,iBAAiB;AAC9B,MAAa,kBACX,WAAW,iBAAiB;AAC9B,MAAa,qBACX,WAAW,iBAAiB;AAC9B,MAAa,mBACX,WAAW,iBAAiB;AAC9B,MAAa,mCACX,WAAW,iBAAiB;AAC9B,MAAa,0BACX,WAAW,iBAAiB;AAE9B,MAAa,qBACX,WAAW,iBAAiB;AAC9B,MAAa,qBACX,WAAW,iBAAiB;AAC9B,MAAa,qBACX,WAAW,iBAAiB;AAC9B,MAAa,iCACX,WAAW,iBAAiB;AAC9B,MAAa,oCACX,WAAW,iBAAiB;AAC9B,MAAa,oCACX,WAAW,iBAAiB;AAC9B,MAAa,oCACX,WAAW,iBAAiB;AAC9B,MAAa,8BACX,WAAW,iBAAiB;AAC9B,MAAa,gCACX,WAAW,iBAAiB;AAC9B,MAAa,uCACX,WAAW,iBAAiB;AAC9B,MAAa,qDACX,WAAW,iBAAiB;AAC9B,MAAa,8DACX,WAAW,iBAAiB;AAC9B,MAAa,mCACX,WAAW,iBAAiB;AAC9B,MAAa,8BACX,WAAW,iBAAiB;AAC9B,MAAa,iCACX,WAAW,iBAAiB;AAC9B,MAAa,iCACX,WAAW,iBAAiB;AAC9B,MAAa,qCACX,WAAW,iBAAiB;AAC9B,MAAa,uCACX,WAAW,iBAAiB;AAC9B,MAAa,wCACX,WAAW,iBAAiB;AAC9B,MAAa,wCACX,WAAW,iBAAiB;AAC9B,MAAa,qCACX,WAAW,iBAAiB;AAC9B,MAAa,2CACX,WAAW,iBAAiB;AAC9B,MAAa,kCACX,WAAW,iBAAiB;AAC9B,MAAa,6CACX,WAAW,iBAAiB;AAC9B,MAAa,+BACX,WAAW,iBAAiB;AAC9B,MAAa,kCACX,WAAW,iBAAiB;AAC9B,MAAa,iCACX,WAAW,iBAAiB;AAC9B,MAAa,kCACX,WAAW,iBAAiB;AAC9B,MAAa,+BACX,WAAW,iBAAiB;AAE9B,MAAa,uBACX,WAAW,iBAAiB;AAC9B,MAAa,4BACX,WAAW,iBAAiB;AAC9B,MAAa,yBACX,WAAW,iBAAiB;AAE9B,MAAa,kBACX,WAAW,iBAAiB;AAE9B,MAAa,oBACX,WAAW,iBAAiB;AAC9B,MAAa,eACX,WAAW,iBAAiB;AAC9B,MAAa,sBACX,WAAW,iBAAiB;AAC9B,MAAa,4BACX,WAAW,iBAAiB;AAE9B,MAAa,4BACX,WAAW,iBAAiB;AAC9B,MAAa,wBACX,WAAW,iBAAiB;AAC9B,MAAa,yBACX,WAAW,iBAAiB;AAC9B,MAAa,uBACX,WAAW,iBAAiB;AAK9B,MAAa,gBAAgB;AAC7B,MAAa,WAAW;AACxB,MAAa,eAAe;AAC5B,MAAa,kBAAkB;AAC/B,MAAa,gBAAgB;AAC7B,MAAa,gCAAgC;AAC7C,MAAa,uBAAuB;AAEpC,MAAa,sBAAsB;AACnC,MAAa,sBAAsB;AACnC,MAAa,sBAAsB;AACnC,MAAa,8BAA8B;AAC3C,MAAa,iCAAiC;AAC9C,MAAa,iCAAiC;AAC9C,MAAa,iCAAiC;AAC9C,MAAa,2BACX;AACF,MAAa,6BAA6B;AAC1C,MAAa,oCACX;AACF,MAAa,kDACX;AACF,MAAa,2DACX;AACF,MAAa,gCAAgC;AAC7C,MAAa,2BAA2B;AACxC,MAAa,8BAA8B;AAC3C,MAAa,8BAA8B;AAC3C,MAAa,kCACX;AACF,MAAa,oCACX;AACF,MAAa,qCACX;AACF,MAAa,qCACX;AACF,MAAa,kCACX;AACF,MAAa,wCACX;AACF,MAAa,+BAA+B;AAC5C,MAAa,0CACX;AACF,MAAa,4BAA4B;AACzC,MAAa,+BAA+B;AAC5C,MAAa,8BAA8B;AAC3C,MAAa,+BAA+B;AAC5C,MAAa,4BAA4B;AAEzC,MAAa,oBAAoB;AACjC,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AAEnC,MAAa,eAAe;AAE5B,MAAa,qBAAqB;AAClC,MAAa,gBAAgB;AAC7B,MAAa,uBAAuB;AACpC,MAAa,6BACX;AAEF,MAAa,6BAA6B;AAC1C,MAAa,yBAAyB;AACtC,MAAa,0BAA0B;AACvC,MAAa,wBAAwB;AACrC,MAAa,oBAAoB;AACjC,MAAa,0BAA0B;AAKvC,MAAa,qBAAqB;AAClC,MAAa,uBAAuB;AAKpC,MAAa,gBAAgB,WAAW;AACxC,MAAa,kBACX,WAAW,kBAAkB;AAK/B,MAAa,kBACX;AAEF,MAAa,iCACX;AAEF,MAAa,mBAAmB;AAChC,MAAa,oBACX;AACF,MAAa,2BAA2B;AACxC,MAAa,uBAAuB,WAAW;AAC/C,MAAa,oBACX;AACF,MAAa,qCACX;AACF,MAAa,sCACX;AACF,MAAa,2CACX;AACF,MAAa,yCACX;AACF,MAAa,4CACX;AACF,MAAa,2CACX;AACF,MAAa,4CACX;AACF,MAAa,0CACX;AACF,MAAa,sCACX"}
1
+ {"version":3,"file":"routes.mjs","names":[],"sources":["../../src/routes.ts"],"sourcesContent":["// ============================================================\n// Domains\n// ============================================================\nexport const App_Domain = 'app.intlayer.org' as const;\nexport const Website_Domain = 'intlayer.org' as const;\nexport const Showcase_Domain = 'showcase.intlayer.org' as const;\n\n// ============================================================\n// App paths — relative (app.intlayer.org)\n// ============================================================\nexport const App_Home_Path = '/' as const;\nexport const App_NotFound_Path = '/404' as const;\n\nexport const App_Dashboard_Editor_Path = '/editor' as const;\nexport const App_Dashboard_Translate_Path = '/translate' as const;\nexport const App_Dashboard_Dictionaries_Path = '/dictionary' as const;\nexport const App_Dashboard_Projects_Path = '/projects' as const;\nexport const App_Dashboard_Tags_Path = '/tags' as const;\nexport const App_Dashboard_Organization_Path = '/organization' as const;\nexport const App_Dashboard_Profile_Path = '/profile' as const;\nexport const App_Dashboard_IDE_Path = '/ide' as const;\nexport const App_Dashboard_Scanner_Path = '/scanner' as const;\n\nexport const App_Pricing_Path = '/pricing' as const;\nexport const App_Affiliation_Path = '/affiliation' as const;\n\nexport const App_Demo_Path = '/demo' as const;\n\nexport const App_ReviewerMarketplace_Path = '/find-reviewer' as const;\nexport const App_ReviewerMarketplace_Dashboard_Path =\n '/find-reviewer/dashboard' as const;\nexport const App_ReviewerMarketplace_Reviewer_Path =\n '/find-reviewer/$reviewerId' as const;\nexport const App_ReviewerMarketplace_Dashboard_Mission_Path =\n '/find-reviewer/dashboard/mission/$missionId' as const;\n\nexport const getAppReviewerProfileRoute = (reviewerId: string) =>\n `/find-reviewer/${reviewerId}` as const;\nexport const getAppReviewerMissionRoute = (missionId: string) =>\n `/find-reviewer/dashboard/mission/${missionId}` as const;\n\nexport const App_Auth_SignIn_Path = '/auth/login' as const;\nexport const App_Auth_SignUp_Path = '/auth/register' as const;\nexport const App_Auth_TwoFactor_Path = '/auth/2fa' as const;\nexport const App_Auth_Demo_Path = '/auth/demo' as const;\nexport const App_Auth_AskResetPassword_Path =\n '/auth/password/ask-reset' as const;\nexport const App_Auth_ResetPassword_Path = '/auth/password/reset' as const;\nexport const App_Auth_ChangePassword_Path = '/auth/password/change' as const;\n\nexport const App_Admin_Path = '/admin' as const;\nexport const App_Admin_Users_Path = '/admin/users' as const;\nexport const App_Admin_Organizations_Path = '/admin/organizations' as const;\nexport const App_Admin_Projects_Path = '/admin/projects' as const;\nexport const App_Admin_Dashboard_Path = '/admin/dashboard' as const;\nexport const App_Admin_Management_Path = '/admin/management' as const;\nexport const App_Admin_Discussions_Path = '/admin/discussions' as const;\nexport const App_Admin_Affiliate_Path = '/admin/affiliate' as const;\nexport const getAppAdminAffiliateRoute = (id: string) =>\n `${App_Admin_Affiliate_Path}/${id}` as const;\nexport const App_Admin_PromoCodes_Path = '/admin/promo-code' as const;\nexport const getAppAdminPromoCodeRoute = (id: string) =>\n `${App_Admin_PromoCodes_Path}/${id}` as const;\n\nexport const App_Admin_Reviewers_Path = '/admin/reviewers' as const;\nexport const getAppAdminReviewerRoute = (id: string) =>\n `${App_Admin_Reviewers_Path}/${id}` as const;\n\nexport const App_Onboarding_Path = '/onboarding' as const;\n\nexport const getAppAdminUserRoute = (id: string) =>\n `${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationRoute = (id: string) =>\n `${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectRoute = (id: string) =>\n `${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowRoute = (step: string) =>\n `${App_Onboarding_Path}/${step}` as const;\n\n// ============================================================\n// App absolute URLs — https://app.intlayer.org\n// ============================================================\nexport const App_Dashboard = `https://${App_Domain}` as const;\nexport const App_Dashboard_Editor =\n `https://${App_Domain}${App_Dashboard_Editor_Path}` as const;\nexport const App_Dashboard_Translate =\n `https://${App_Domain}${App_Dashboard_Translate_Path}` as const;\nexport const App_Dashboard_Dictionaries =\n `https://${App_Domain}${App_Dashboard_Dictionaries_Path}` as const;\nexport const App_Dashboard_Projects =\n `https://${App_Domain}${App_Dashboard_Projects_Path}` as const;\nexport const App_Dashboard_Tags =\n `https://${App_Domain}${App_Dashboard_Tags_Path}` as const;\nexport const App_Dashboard_Organization =\n `https://${App_Domain}${App_Dashboard_Organization_Path}` as const;\nexport const App_Dashboard_Profile =\n `https://${App_Domain}${App_Dashboard_Profile_Path}` as const;\nexport const App_Dashboard_IDE =\n `https://${App_Domain}${App_Dashboard_IDE_Path}` as const;\nexport const App_Dashboard_Scanner =\n `https://${App_Domain}${App_Dashboard_Scanner_Path}` as const;\n\nexport const App_Pricing = `https://${App_Domain}${App_Pricing_Path}` as const;\nexport const App_Affiliation =\n `https://${App_Domain}${App_Affiliation_Path}` as const;\nexport const App_Demo = `https://${App_Domain}${App_Demo_Path}` as const;\n\nexport const App_ReviewerMarketplace =\n `https://${App_Domain}${App_ReviewerMarketplace_Path}` as const;\nexport const App_ReviewerMarketplace_Dashboard =\n `https://${App_Domain}${App_ReviewerMarketplace_Dashboard_Path}` as const;\n\nexport const App_Auth_SignIn =\n `https://${App_Domain}${App_Auth_SignIn_Path}` as const;\nexport const App_Auth_SignUp =\n `https://${App_Domain}${App_Auth_SignUp_Path}` as const;\nexport const App_Auth_TwoFactor =\n `https://${App_Domain}${App_Auth_TwoFactor_Path}` as const;\nexport const App_Auth_AskResetPassword =\n `https://${App_Domain}${App_Auth_AskResetPassword_Path}` as const;\nexport const App_Auth_ResetPassword =\n `https://${App_Domain}${App_Auth_ResetPassword_Path}` as const;\nexport const App_Auth_ChangePassword =\n `https://${App_Domain}${App_Auth_ChangePassword_Path}` as const;\n\nexport const App_Admin = `https://${App_Domain}${App_Admin_Path}` as const;\nexport const App_Admin_Users =\n `https://${App_Domain}${App_Admin_Users_Path}` as const;\nexport const App_Admin_Organizations =\n `https://${App_Domain}${App_Admin_Organizations_Path}` as const;\nexport const App_Admin_Projects =\n `https://${App_Domain}${App_Admin_Projects_Path}` as const;\nexport const App_Admin_Dashboard =\n `https://${App_Domain}${App_Admin_Dashboard_Path}` as const;\nexport const App_Admin_Management =\n `https://${App_Domain}${App_Admin_Management_Path}` as const;\nexport const App_Admin_Discussions =\n `https://${App_Domain}${App_Admin_Discussions_Path}` as const;\nexport const App_Admin_Affiliate =\n `https://${App_Domain}${App_Admin_Affiliate_Path}` as const;\nexport const App_Admin_PromoCodes =\n `https://${App_Domain}${App_Admin_PromoCodes_Path}` as const;\nexport const App_Admin_Reviewers =\n `https://${App_Domain}${App_Admin_Reviewers_Path}` as const;\n\nexport const App_Onboarding =\n `https://${App_Domain}${App_Onboarding_Path}` as const;\n\nexport const getAppAdminUserAbsoluteRoute = (id: string) =>\n `https://${App_Domain}${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationAbsoluteRoute = (id: string) =>\n `https://${App_Domain}${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectAbsoluteRoute = (id: string) =>\n `https://${App_Domain}${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowAbsoluteRoute = (\n step: string,\n plan: string,\n period?: string\n) =>\n period\n ? `https://${App_Domain}${App_Onboarding_Path}/${step}/${plan}/${period}`\n : (`https://${App_Domain}${App_Onboarding_Path}/${step}/${plan}` as const);\n\n// ============================================================\n// Website paths — relative (intlayer.org)\n// ============================================================\nexport const Website_Home_Path = '/' as const;\nexport const Website_CMS_Path = '/cms' as const;\nexport const Website_TMS_Path = '/tms' as const;\nexport const Website_Translate_Path = '/translate' as const;\nexport const Website_Markdown_Preview_Path = '/markdown' as const;\nexport const Website_Demo_Path = '/demo' as const;\nexport const Website_Playground_Path = '/playground' as const;\nexport const Website_NotFound_Path = '/404' as const;\nexport const Website_Changelog_Path = '/changelog' as const;\nexport const Website_Scanner_Path = '/i18n-seo-scanner' as const;\n\nexport const Website_Doc_Root_Path = '/doc' as const;\nexport const Website_Doc_Path = '/doc/get-started' as const;\nexport const Website_Doc_Why_Path = '/doc/why' as const;\nexport const Website_Doc_Search_Path = '/doc/search' as const;\nexport const Website_Doc_Chat_Path = '/doc/chat' as const;\nexport const Website_Doc_IntlayerVisualEditor_Path =\n '/doc/concept/editor' as const;\nexport const Website_Doc_IntlayerCMS_Path = '/doc/concept/cms' as const;\n\nexport const Website_ReleasesV6_Path = '/doc/releases/v6' as const;\nexport const Website_ReleasesV7_Path = '/doc/releases/v7' as const;\nexport const Website_ReleasesV8_Path = '/doc/releases/v8' as const;\nexport const Website_Doc_Environment_NextJS_Path =\n '/doc/environment/nextjs' as const;\nexport const Website_Doc_Environment_NextJS_16_Path =\n '/doc/environment/nextjs/16' as const;\nexport const Website_Doc_Environment_NextJS_15_Path =\n '/doc/environment/nextjs/15' as const;\nexport const Website_Doc_Environment_NextJS_14_Path =\n '/doc/environment/nextjs/14' as const;\nexport const Website_Doc_Environment_CRA_Path =\n '/doc/environment/create-react-app' as const;\nexport const Website_Doc_Environment_Astro_Path =\n '/doc/environment/astro' as const;\nexport const Website_Doc_Environment_ViteAndReact_Path =\n '/doc/environment/vite-and-react' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/doc/environment/vite-and-react/react-router-v7' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/doc/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Website_Doc_Environment_Tanstack_Path =\n '/doc/environment/tanstack' as const;\nexport const Website_Doc_Environment_Lit_Path = '/doc/environment/lit' as const;\nexport const Website_Doc_Environment_Nodejs_Path = '/doc/concept/cli' as const;\nexport const Website_Doc_Environment_Adonis_Path =\n '/doc/environment/adonis' as const;\nexport const Website_Doc_Environment_ViteAndVue_Path =\n '/doc/environment/vite-and-vue' as const;\nexport const Website_Doc_Environment_ViteAndSolid_Path =\n '/doc/environment/vite-and-solid' as const;\nexport const Website_Doc_Environment_ViteAndSvelte_Path =\n '/doc/environment/vite-and-svelte' as const;\nexport const Website_Doc_Environment_ViteAndPreact_Path =\n '/doc/environment/vite-and-preact' as const;\nexport const Website_Doc_Environment_NuxtAndVue_Path =\n '/doc/environment/nuxt-and-vue' as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Angular_Path =\n '/doc/environment/angular' as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo_Path =\n '/doc/environment/react-native-and-expo' as const;\nexport const Website_Doc_Environment_Lynx_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Express_Path =\n '/doc/environment/express' as const;\nexport const Website_Doc_Environment_NestJS_Path =\n '/doc/environment/nestjs' as const;\nexport const Website_Doc_Environment_Fastify_Path =\n '/doc/environment/fastify' as const;\nexport const Website_Doc_Environment_Hono_Path =\n '/doc/environment/hono' as const;\n\nexport const Website_Doc_CLI_Fill_Path = '/doc/concept/cli/fill' as const;\nexport const Website_Doc_CLI_Translate_Path =\n '/doc/concept/cli/doc-translate' as const;\nexport const Website_Doc_CLI_Review_Path =\n '/doc/concept/cli/doc-review' as const;\n\nexport const Website_Benchmark_Path = '/doc/benchmark' as const;\nexport const Website_Benchmark_NextJS_Path = '/doc/benchmark/nextjs' as const;\nexport const Website_Benchmark_Tanstack_Path =\n '/doc/benchmark/tanstack' as const;\n\nexport const Website_Doc_MCP_Path = '/doc/mcp-server' as const;\n\nexport const Website_Blog_Root_Path = '/blog' as const;\nexport const Website_Blog_Path = '/blog' as const;\nexport const Website_Blog_Search_Path = '/blog' as const;\nexport const Website_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Website_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Website_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Website_TermsOfService_Path = '/terms-of-service' as const;\nexport const Website_Contributors_Path = '/contributors' as const;\n\n// ============================================================\n// Website absolute URLs — https://intlayer.org\n// ============================================================\nexport const Website_Home =\n `https://${Website_Domain}${Website_Home_Path}` as const;\nexport const Website_CMS =\n `https://${Website_Domain}${Website_CMS_Path}` as const;\nexport const Website_TMS =\n `https://${Website_Domain}${Website_TMS_Path}` as const;\nexport const Website_Translate =\n `https://${Website_Domain}${Website_Translate_Path}` as const;\nexport const Website_Markdown_Preview =\n `https://${Website_Domain}${Website_Markdown_Preview_Path}` as const;\nexport const Website_Demo =\n `https://${Website_Domain}${Website_Demo_Path}` as const;\nexport const Website_Playground =\n `https://${Website_Domain}${Website_Playground_Path}` as const;\nexport const Website_NotFound =\n `https://${Website_Domain}${Website_NotFound_Path}` as const;\nexport const Website_Changelog =\n `https://${Website_Domain}${Website_Changelog_Path}` as const;\nexport const Website_Scanner =\n `https://${Website_Domain}${Website_Scanner_Path}` as const;\nexport const Website_Benchmark =\n `https://${Website_Domain}${Website_Benchmark_Path}` as const;\nexport const Website_Benchmark_NextJS =\n `https://${Website_Domain}${Website_Benchmark_NextJS_Path}` as const;\nexport const Website_Benchmark_Tanstack =\n `https://${Website_Domain}${Website_Benchmark_Tanstack_Path}` as const;\n\nexport const Website_Doc_Root =\n `https://${Website_Domain}${Website_Doc_Root_Path}` as const;\nexport const Website_Doc =\n `https://${Website_Domain}${Website_Doc_Path}` as const;\nexport const Website_Doc_Why =\n `https://${Website_Domain}${Website_Doc_Why_Path}` as const;\nexport const Website_Doc_Search =\n `https://${Website_Domain}${Website_Doc_Search_Path}` as const;\nexport const Website_Doc_Chat =\n `https://${Website_Domain}${Website_Doc_Chat_Path}` as const;\nexport const Website_Doc_IntlayerVisualEditor =\n `https://${Website_Domain}${Website_Doc_IntlayerVisualEditor_Path}` as const;\nexport const Website_Doc_IntlayerCMS =\n `https://${Website_Domain}${Website_Doc_IntlayerCMS_Path}` as const;\n\nexport const Website_ReleasesV6 =\n `https://${Website_Domain}${Website_ReleasesV6_Path}` as const;\nexport const Website_ReleasesV7 =\n `https://${Website_Domain}${Website_ReleasesV7_Path}` as const;\nexport const Website_ReleasesV8 =\n `https://${Website_Domain}${Website_ReleasesV8_Path}` as const;\nexport const Website_Doc_Environment_NextJS =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_Path}` as const;\nexport const Website_Doc_Environment_NextJS_16 =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_16_Path}` as const;\nexport const Website_Doc_Environment_NextJS_15 =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_15_Path}` as const;\nexport const Website_Doc_Environment_NextJS_14 =\n `https://${Website_Domain}${Website_Doc_Environment_NextJS_14_Path}` as const;\nexport const Website_Doc_Environment_CRA =\n `https://${Website_Domain}${Website_Doc_Environment_CRA_Path}` as const;\nexport const Website_Doc_Environment_Astro =\n `https://${Website_Domain}${Website_Doc_Environment_Astro_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndReact_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7 =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path}` as const;\nexport const Website_Doc_Environment_Tanstack =\n `https://${Website_Domain}${Website_Doc_Environment_Tanstack_Path}` as const;\nexport const Website_Doc_Environment_Lit =\n `https://${Website_Domain}${Website_Doc_Environment_Lit_Path}` as const;\nexport const Website_Doc_Environment_Nodejs =\n `https://${Website_Domain}${Website_Doc_Environment_Nodejs_Path}` as const;\nexport const Website_Doc_Environment_Adonis =\n `https://${Website_Domain}${Website_Doc_Environment_Adonis_Path}` as const;\nexport const Website_Doc_Environment_ViteAndVue =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndVue_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSolid =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndSolid_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSvelte =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndSvelte_Path}` as const;\nexport const Website_Doc_Environment_ViteAndPreact =\n `https://${Website_Domain}${Website_Doc_Environment_ViteAndPreact_Path}` as const;\nexport const Website_Doc_Environment_NuxtAndVue =\n `https://${Website_Domain}${Website_Doc_Environment_NuxtAndVue_Path}` as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React =\n `https://${Website_Domain}${Website_Doc_Intlayer_with_Lynx_and_React_Path}` as const;\nexport const Website_Doc_Environment_Angular =\n `https://${Website_Domain}${Website_Doc_Environment_Angular_Path}` as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo =\n `https://${Website_Domain}${Website_Doc_Environment_ReactNativeAndExpo_Path}` as const;\nexport const Website_Doc_Environment_Lynx =\n `https://${Website_Domain}${Website_Doc_Environment_Lynx_Path}` as const;\nexport const Website_Doc_Environment_Express =\n `https://${Website_Domain}${Website_Doc_Environment_Express_Path}` as const;\nexport const Website_Doc_Environment_NestJS =\n `https://${Website_Domain}${Website_Doc_Environment_NestJS_Path}` as const;\nexport const Website_Doc_Environment_Fastify =\n `https://${Website_Domain}${Website_Doc_Environment_Fastify_Path}` as const;\nexport const Website_Doc_Environment_Hono =\n `https://${Website_Domain}${Website_Doc_Environment_Hono_Path}` as const;\n\nexport const Website_Doc_CLI_Fill =\n `https://${Website_Domain}${Website_Doc_CLI_Fill_Path}` as const;\nexport const Website_Doc_CLI_Translate =\n `https://${Website_Domain}${Website_Doc_CLI_Translate_Path}` as const;\nexport const Website_Doc_CLI_Review =\n `https://${Website_Domain}${Website_Doc_CLI_Review_Path}` as const;\n\nexport const Website_Doc_MCP =\n `https://${Website_Domain}${Website_Doc_MCP_Path}` as const;\n\nexport const Website_Blog_Root =\n `https://${Website_Domain}${Website_Blog_Root_Path}` as const;\nexport const Website_Blog =\n `https://${Website_Domain}${Website_Blog_Path}` as const;\nexport const Website_Blog_Search =\n `https://${Website_Domain}${Website_Blog_Search_Path}` as const;\nexport const Website_Blog_What_is_i18n =\n `https://${Website_Domain}${Website_Blog_What_is_i18n_Path}` as const;\n\nexport const Website_FrequentQuestions =\n `https://${Website_Domain}${Website_FrequentQuestions_Path}` as const;\nexport const Website_PrivacyPolicy =\n `https://${Website_Domain}${Website_PrivacyPolicy_Path}` as const;\nexport const Website_TermsOfService =\n `https://${Website_Domain}${Website_TermsOfService_Path}` as const;\nexport const Website_Contributors =\n `https://${Website_Domain}${Website_Contributors_Path}` as const;\n\n// ============================================================\n// Doc app paths — relative (served under intlayer.org/doc/*)\n// ============================================================\nexport const Doc_Root_Path = '/doc' as const;\nexport const Doc_Path = '/get-started' as const;\nexport const Doc_Why_Path = '/why' as const;\nexport const Doc_Search_Path = '/search' as const;\nexport const Doc_Chat_Path = '/chat' as const;\nexport const Doc_IntlayerVisualEditor_Path = '/concept/editor' as const;\nexport const Doc_IntlayerCMS_Path = '/concept/cms' as const;\n\nexport const Doc_ReleasesV6_Path = '/releases/v6' as const;\nexport const Doc_ReleasesV7_Path = '/releases/v7' as const;\nexport const Doc_ReleasesV8_Path = '/releases/v8' as const;\nexport const Doc_Environment_NextJS_Path = '/environment/nextjs' as const;\nexport const Doc_Environment_NextJS_16_Path = '/environment/nextjs/16' as const;\nexport const Doc_Environment_NextJS_15_Path = '/environment/nextjs/15' as const;\nexport const Doc_Environment_NextJS_14_Path = '/environment/nextjs/14' as const;\nexport const Doc_Environment_CRA_Path =\n '/environment/create-react-app' as const;\nexport const Doc_Environment_Astro_Path = '/environment/astro' as const;\nexport const Doc_Environment_ViteAndReact_Path =\n '/environment/vite-and-react' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/environment/vite-and-react/react-router-v7' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Doc_Environment_Tanstack_Path = '/environment/tanstack' as const;\nexport const Doc_Environment_Lit_Path = '/environment/lit' as const;\nexport const Doc_Environment_Nodejs_Path = '/concept/cli' as const;\nexport const Doc_Environment_Adonis_Path = '/environment/adonis' as const;\nexport const Doc_Environment_ViteAndVue_Path =\n '/environment/vite-and-vue' as const;\nexport const Doc_Environment_ViteAndSolid_Path =\n '/environment/vite-and-solid' as const;\nexport const Doc_Environment_ViteAndSvelte_Path =\n '/environment/vite-and-svelte' as const;\nexport const Doc_Environment_ViteAndPreact_Path =\n '/environment/vite-and-preact' as const;\nexport const Doc_Environment_NuxtAndVue_Path =\n '/environment/nuxt-and-vue' as const;\nexport const Doc_Intlayer_with_Lynx_and_React_Path =\n '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Angular_Path = '/environment/angular' as const;\nexport const Doc_Environment_ReactNativeAndExpo_Path =\n '/environment/react-native-and-expo' as const;\nexport const Doc_Environment_Lynx_Path = '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Express_Path = '/environment/express' as const;\nexport const Doc_Environment_NestJS_Path = '/environment/nestjs' as const;\nexport const Doc_Environment_Fastify_Path = '/environment/fastify' as const;\nexport const Doc_Environment_Hono_Path = '/environment/hono' as const;\n\nexport const Doc_CLI_Fill_Path = '/concept/cli/fill' as const;\nexport const Doc_CLI_Translate_Path = '/concept/cli/doc-translate' as const;\nexport const Doc_CLI_Review_Path = '/concept/cli/doc-review' as const;\n\nexport const Doc_MCP_Path = '/mcp-server' as const;\n\nexport const Doc_Blog_Root_Path = '/blog' as const;\nexport const Doc_Blog_Path = '/blog' as const;\nexport const Doc_Blog_Search_Path = '/blog' as const;\nexport const Doc_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Doc_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Doc_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Doc_TermsOfService_Path = '/terms-of-service' as const;\nexport const Doc_Contributors_Path = '/contributors' as const;\nexport const Doc_Showcase_Path = '/' as const;\nexport const Doc_ShowcaseSubmit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase paths — relative (showcase.intlayer.org)\n// ============================================================\nexport const Showcase_Root_Path = '/' as const;\nexport const Showcase_Submit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase absolute URLs — https://showcase.intlayer.org\n// ============================================================\nexport const Showcase_Root = `https://${Showcase_Domain}` as const;\nexport const Showcase_Submit =\n `https://${Showcase_Domain}${Showcase_Submit_Path}` as const;\n\n// ============================================================\n// External links\n// ============================================================\nexport const External_Github =\n 'https://github.com/aymericzip/intlayer' as const;\n\nexport const External_Github_i18n_benchmark =\n 'https://github.com/intlayer-org/benchmark-i18n' as const;\n\nexport const External_Discord = 'https://discord.gg/7uxamYVeCk' as const;\nexport const External_LinkedIn =\n 'https://www.linkedin.com/company/intlayerorg/' as const;\nexport const External_AI_Landing_Page = 'https://ai.intlayer.org' as const;\nexport const External_ShowcaseApp = `https://${Showcase_Domain}` as const;\nexport const External_Examples =\n 'https://github.com/aymericzip/intlayer/tree/main/examples' as const;\nexport const External_ExampleIntlayerWithNextjs =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/nextjs-15-app' as const;\nexport const External_ExampleIntlayerWithReactJS =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-app' as const;\nexport const External_ExampleIntlayerWithViteAndReact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-react-app' as const;\nexport const External_ExampleIntlayerWithViteAndVue =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-vue-app' as const;\nexport const External_ExampleIntlayerWithViteAndSvelte =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-svelte-app' as const;\nexport const External_ExampleIntlayerWithViteAndSolid =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-solid-app' as const;\nexport const External_ExampleIntlayerWithViteAndPreact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-preact-app' as const;\nexport const External_ExampleIntlayerWithReactNative =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-native-app' as const;\nexport const External_ExampleIntlayerWithExpress =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/express-app' as const;\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ //#region src/structured-data/buildAuthorJsonLd.ts
2
+ const buildAuthorJsonLd = (profile, fallbackName = "Aymeric Pineau", fallbackUrl) => ({
3
+ "@type": "Person",
4
+ "@id": profile?.id,
5
+ name: profile?.name ?? fallbackName,
6
+ url: profile?.url ?? fallbackUrl,
7
+ jobTitle: profile?.title ?? profile?.jobTitle,
8
+ image: profile?.image,
9
+ sameAs: profile?.socialMedias?.length ? profile.socialMedias : profile?.sameAs,
10
+ knowsAbout: profile?.knowsAbout?.length ? profile.knowsAbout : void 0
11
+ });
12
+
13
+ //#endregion
14
+ export { buildAuthorJsonLd };
15
+ //# sourceMappingURL=buildAuthorJsonLd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAuthorJsonLd.mjs","names":[],"sources":["../../../src/structured-data/buildAuthorJsonLd.ts"],"sourcesContent":["/** @module buildAuthorJsonLd */\n\nexport type SchemaOrgPersonNode = {\n '@type': 'Person';\n '@id'?: string;\n name: string;\n url?: string;\n jobTitle?: string;\n image?: string;\n sameAs?: string[];\n knowsAbout?: string[];\n};\n\nexport const buildAuthorJsonLd = (\n profile?: any,\n fallbackName = 'Aymeric Pineau',\n fallbackUrl?: string\n) => ({\n '@type': 'Person' as const,\n '@id': profile?.id,\n name: profile?.name ?? fallbackName,\n url: profile?.url ?? fallbackUrl,\n jobTitle: profile?.title ?? profile?.jobTitle,\n image: profile?.image,\n sameAs: profile?.socialMedias?.length\n ? profile.socialMedias\n : profile?.sameAs,\n knowsAbout: profile?.knowsAbout?.length ? profile.knowsAbout : undefined,\n});\n"],"mappings":";AAaA,MAAa,qBACX,SACA,eAAe,kBACf,iBACI;CACJ,SAAS;CACT,OAAO,SAAS;CAChB,MAAM,SAAS,QAAQ;CACvB,KAAK,SAAS,OAAO;CACrB,UAAU,SAAS,SAAS,SAAS;CACrC,OAAO,SAAS;CAChB,QAAQ,SAAS,cAAc,SAC3B,QAAQ,eACR,SAAS;CACb,YAAY,SAAS,YAAY,SAAS,QAAQ,aAAa;CAChE"}
@@ -0,0 +1,21 @@
1
+ //#region src/structured-data/buildBreadcrumbsJsonLd.ts
2
+ /**
3
+ * Builds a Schema.org BreadcrumbList JSON-LD object.
4
+ *
5
+ * @param params - Breadcrumb items and optional domain for relative URL resolution.
6
+ * @returns A JSON-LD BreadcrumbList object ready for serialization.
7
+ */
8
+ const buildBreadcrumbsJsonLd = ({ breadcrumbs, domain }) => ({
9
+ "@context": "https://schema.org",
10
+ "@type": "BreadcrumbList",
11
+ itemListElement: breadcrumbs.map((item, index) => ({
12
+ "@type": "ListItem",
13
+ position: index + 1,
14
+ name: item.name,
15
+ item: item.url.startsWith("http") || !domain ? item.url : `https://${domain}${item.url}`
16
+ }))
17
+ });
18
+
19
+ //#endregion
20
+ export { buildBreadcrumbsJsonLd };
21
+ //# sourceMappingURL=buildBreadcrumbsJsonLd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildBreadcrumbsJsonLd.mjs","names":[],"sources":["../../../src/structured-data/buildBreadcrumbsJsonLd.ts"],"sourcesContent":["/** @module buildBreadcrumbsJsonLd */\n\nexport type BreadcrumbItem = {\n name: string;\n url: string;\n};\n\nexport type BuildBreadcrumbsJsonLdParams = {\n breadcrumbs: BreadcrumbItem[];\n /**\n * Domain used to prefix relative URLs (e.g. \"www.intlayer.org\").\n * Required when any breadcrumb URL is relative.\n */\n domain?: string;\n};\n\n/**\n * Builds a Schema.org BreadcrumbList JSON-LD object.\n *\n * @param params - Breadcrumb items and optional domain for relative URL resolution.\n * @returns A JSON-LD BreadcrumbList object ready for serialization.\n */\nexport const buildBreadcrumbsJsonLd = ({\n breadcrumbs,\n domain,\n}: BuildBreadcrumbsJsonLdParams) => ({\n '@context': 'https://schema.org' as const,\n '@type': 'BreadcrumbList' as const,\n itemListElement: breadcrumbs.map((item, index) => ({\n '@type': 'ListItem' as const,\n position: index + 1,\n name: item.name,\n item:\n item.url.startsWith('http') || !domain\n ? item.url\n : `https://${domain}${item.url}`,\n })),\n});\n"],"mappings":";;;;;;;AAsBA,MAAa,0BAA0B,EACrC,aACA,cACmC;CACnC,YAAY;CACZ,SAAS;CACT,iBAAiB,YAAY,KAAK,MAAM,WAAW;EACjD,SAAS;EACT,UAAU,QAAQ;EAClB,MAAM,KAAK;EACX,MACE,KAAK,IAAI,WAAW,OAAO,IAAI,CAAC,SAC5B,KAAK,MACL,WAAW,SAAS,KAAK;EAChC,EAAE;CACJ"}
@@ -0,0 +1,45 @@
1
+ //#region src/structured-data/buildCreativeWorkJsonLd.ts
2
+ /** @module buildCreativeWorkJsonLd */
3
+ const formatDate = (date) => {
4
+ if (!(date instanceof Date)) throw new Error("Input must be a valid Date object");
5
+ return date.toISOString().split("T")[0];
6
+ };
7
+ /**
8
+ * Builds a Schema.org CreativeWork (or subtype) JSON-LD object.
9
+ *
10
+ * @param params - Document / article metadata.
11
+ * @returns A JSON-LD CreativeWork object ready for serialization.
12
+ */
13
+ const buildCreativeWorkJsonLd = ({ type = "CreativeWork", name, description, content, keywords, datePublished, dateModified, url, author, version, audienceType, publisherName = "Intlayer", publisherLogoUrl, ogImageUrl }) => ({
14
+ "@context": "https://schema.org",
15
+ "@type": type,
16
+ author,
17
+ creator: author,
18
+ ...publisherLogoUrl ? { publisher: {
19
+ "@type": "Organization",
20
+ name: publisherName,
21
+ logo: {
22
+ "@type": "ImageObject",
23
+ url: publisherLogoUrl
24
+ }
25
+ } } : {},
26
+ name,
27
+ headline: name,
28
+ ...ogImageUrl ? { image: ogImageUrl } : {},
29
+ text: content,
30
+ description,
31
+ url,
32
+ datePublished: datePublished ? formatDate(datePublished) : void 0,
33
+ dateModified: dateModified ? formatDate(dateModified) : void 0,
34
+ version,
35
+ keywords,
36
+ license: "https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE",
37
+ audience: {
38
+ "@type": "Audience",
39
+ audienceType
40
+ }
41
+ });
42
+
43
+ //#endregion
44
+ export { buildCreativeWorkJsonLd };
45
+ //# sourceMappingURL=buildCreativeWorkJsonLd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildCreativeWorkJsonLd.mjs","names":[],"sources":["../../../src/structured-data/buildCreativeWorkJsonLd.ts"],"sourcesContent":["/** @module buildCreativeWorkJsonLd */\n\n// ISO 8601 date formatter — Schema.org requires YYYY-MM-DD.\nconst formatDate = (date: Date): string => {\n if (!(date instanceof Date)) {\n throw new Error('Input must be a valid Date object');\n }\n return date.toISOString().split('T')[0]!;\n};\n\nexport type CreativeWorkType =\n | 'CreativeWork'\n | 'TechArticle'\n | 'Article'\n | 'BlogPosting'\n | 'WebPage';\n\n/** Minimal Schema.org Person node accepted as author / creator. */\nexport type SchemaOrgPersonNode = {\n '@type': 'Person';\n '@id'?: string;\n name: string;\n url?: string;\n [key: string]: unknown;\n};\n\nexport type BuildCreativeWorkJsonLdParams = {\n type?: CreativeWorkType;\n name: string;\n description: string;\n /** Full text / markdown body of the document. */\n content: string;\n keywords: string;\n datePublished?: Date;\n dateModified?: Date;\n url?: string;\n /** Pre-resolved Schema.org Person node (output of `buildAuthorJsonLd`). */\n author?: SchemaOrgPersonNode;\n /** Version string from the document revision history. */\n version?: string;\n /** Schema.org Audience `audienceType` value. */\n audienceType: string;\n /** Publisher organization name (defaults to \"Intlayer\"). */\n publisherName?: string;\n /** Absolute URL of the publisher logo. */\n publisherLogoUrl?: string;\n /** Absolute URL of the OG image. */\n ogImageUrl?: string;\n};\n\n/**\n * Builds a Schema.org CreativeWork (or subtype) JSON-LD object.\n *\n * @param params - Document / article metadata.\n * @returns A JSON-LD CreativeWork object ready for serialization.\n */\nexport const buildCreativeWorkJsonLd = ({\n type = 'CreativeWork',\n name,\n description,\n content,\n keywords,\n datePublished,\n dateModified,\n url,\n author,\n version,\n audienceType,\n publisherName = 'Intlayer',\n publisherLogoUrl,\n ogImageUrl,\n}: BuildCreativeWorkJsonLdParams) => ({\n '@context': 'https://schema.org' as const,\n '@type': type,\n author,\n creator: author,\n ...(publisherLogoUrl\n ? {\n publisher: {\n '@type': 'Organization' as const,\n name: publisherName,\n logo: {\n '@type': 'ImageObject' as const,\n url: publisherLogoUrl,\n },\n },\n }\n : {}),\n name,\n headline: name,\n ...(ogImageUrl ? { image: ogImageUrl } : {}),\n text: content,\n description,\n url,\n datePublished: datePublished ? formatDate(datePublished) : undefined,\n dateModified: dateModified ? formatDate(dateModified) : undefined,\n version,\n keywords,\n license:\n 'https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE',\n audience: {\n '@type': 'Audience' as const,\n audienceType,\n },\n});\n"],"mappings":";;AAGA,MAAM,cAAc,SAAuB;AACzC,KAAI,EAAE,gBAAgB,MACpB,OAAM,IAAI,MAAM,oCAAoC;AAEtD,QAAO,KAAK,aAAa,CAAC,MAAM,IAAI,CAAC;;;;;;;;AAiDvC,MAAa,2BAA2B,EACtC,OAAO,gBACP,MACA,aACA,SACA,UACA,eACA,cACA,KACA,QACA,SACA,cACA,gBAAgB,YAChB,kBACA,kBACoC;CACpC,YAAY;CACZ,SAAS;CACT;CACA,SAAS;CACT,GAAI,mBACA,EACE,WAAW;EACT,SAAS;EACT,MAAM;EACN,MAAM;GACJ,SAAS;GACT,KAAK;GACN;EACF,EACF,GACD,EAAE;CACN;CACA,UAAU;CACV,GAAI,aAAa,EAAE,OAAO,YAAY,GAAG,EAAE;CAC3C,MAAM;CACN;CACA;CACA,eAAe,gBAAgB,WAAW,cAAc,GAAG;CAC3D,cAAc,eAAe,WAAW,aAAa,GAAG;CACxD;CACA;CACA,SACE;CACF,UAAU;EACR,SAAS;EACT;EACD;CACF"}
@@ -0,0 +1,23 @@
1
+ //#region src/structured-data/buildFAQPageJsonLd.ts
2
+ /**
3
+ * Builds a Schema.org FAQPage JSON-LD object.
4
+ *
5
+ * @param params - List of FAQ question/answer pairs.
6
+ * @returns A JSON-LD FAQPage object ready for serialization.
7
+ */
8
+ const buildFAQPageJsonLd = ({ faqs }) => ({
9
+ "@context": "https://schema.org",
10
+ "@type": "FAQPage",
11
+ mainEntity: faqs.map((faq) => ({
12
+ "@type": "Question",
13
+ name: faq.question,
14
+ acceptedAnswer: {
15
+ "@type": "Answer",
16
+ text: faq.answer
17
+ }
18
+ }))
19
+ });
20
+
21
+ //#endregion
22
+ export { buildFAQPageJsonLd };
23
+ //# sourceMappingURL=buildFAQPageJsonLd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildFAQPageJsonLd.mjs","names":[],"sources":["../../../src/structured-data/buildFAQPageJsonLd.ts"],"sourcesContent":["/** @module buildFAQPageJsonLd */\n\nexport type FAQItem = {\n question: string;\n answer: string;\n};\n\nexport type BuildFAQPageJsonLdParams = {\n faqs: FAQItem[];\n};\n\n/**\n * Builds a Schema.org FAQPage JSON-LD object.\n *\n * @param params - List of FAQ question/answer pairs.\n * @returns A JSON-LD FAQPage object ready for serialization.\n */\nexport const buildFAQPageJsonLd = ({ faqs }: BuildFAQPageJsonLdParams) => ({\n '@context': 'https://schema.org' as const,\n '@type': 'FAQPage' as const,\n mainEntity: faqs.map((faq) => ({\n '@type': 'Question' as const,\n name: faq.question,\n acceptedAnswer: {\n '@type': 'Answer' as const,\n text: faq.answer,\n },\n })),\n});\n"],"mappings":";;;;;;;AAiBA,MAAa,sBAAsB,EAAE,YAAsC;CACzE,YAAY;CACZ,SAAS;CACT,YAAY,KAAK,KAAK,SAAS;EAC7B,SAAS;EACT,MAAM,IAAI;EACV,gBAAgB;GACd,SAAS;GACT,MAAM,IAAI;GACX;EACF,EAAE;CACJ"}