@mieweb/ui 0.11.0-dev.43 → 0.11.0-dev.45

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 (186) hide show
  1. package/agent/skills/mieweb-ui-catalog/selection-guidance.md +1 -1
  2. package/dist/ag-grid.cjs +2 -2
  3. package/dist/ag-grid.js +1 -1
  4. package/dist/{chunk-AHYDJN4H.cjs → chunk-2XHPPOXY.cjs} +32 -32
  5. package/dist/{chunk-AHYDJN4H.cjs.map → chunk-2XHPPOXY.cjs.map} +1 -1
  6. package/dist/{chunk-3IKIRGHI.cjs → chunk-3H6BQV2D.cjs} +6 -6
  7. package/dist/{chunk-3IKIRGHI.cjs.map → chunk-3H6BQV2D.cjs.map} +1 -1
  8. package/dist/{chunk-IIV5GNSK.cjs → chunk-3PT4B4JT.cjs} +4 -4
  9. package/dist/{chunk-IIV5GNSK.cjs.map → chunk-3PT4B4JT.cjs.map} +1 -1
  10. package/dist/{chunk-GLG6UE2H.cjs → chunk-3SEQVGLH.cjs} +4 -4
  11. package/dist/{chunk-GLG6UE2H.cjs.map → chunk-3SEQVGLH.cjs.map} +1 -1
  12. package/dist/{chunk-JUY2JLFL.js → chunk-3XDU7XIC.js} +3 -3
  13. package/dist/{chunk-JUY2JLFL.js.map → chunk-3XDU7XIC.js.map} +1 -1
  14. package/dist/{chunk-LQ22CY7X.js → chunk-46ZUORUE.js} +5 -5
  15. package/dist/{chunk-LQ22CY7X.js.map → chunk-46ZUORUE.js.map} +1 -1
  16. package/dist/{chunk-CKECOCYJ.js → chunk-4IOIDS2Z.js} +3 -3
  17. package/dist/{chunk-CKECOCYJ.js.map → chunk-4IOIDS2Z.js.map} +1 -1
  18. package/dist/{chunk-F7SZSOB3.js → chunk-6PCA5H47.js} +3 -3
  19. package/dist/{chunk-F7SZSOB3.js.map → chunk-6PCA5H47.js.map} +1 -1
  20. package/dist/{chunk-ULEX7OOJ.js → chunk-6Y6W5DUY.js} +4 -4
  21. package/dist/{chunk-ULEX7OOJ.js.map → chunk-6Y6W5DUY.js.map} +1 -1
  22. package/dist/{chunk-S7AMZ4RD.cjs → chunk-7K6SW4VB.cjs} +4 -4
  23. package/dist/{chunk-S7AMZ4RD.cjs.map → chunk-7K6SW4VB.cjs.map} +1 -1
  24. package/dist/{chunk-KY67AMQ5.cjs → chunk-7MF3O3BU.cjs} +4 -4
  25. package/dist/{chunk-KY67AMQ5.cjs.map → chunk-7MF3O3BU.cjs.map} +1 -1
  26. package/dist/{chunk-Z3WMDVMR.cjs → chunk-7QNBPB7F.cjs} +9 -5
  27. package/dist/chunk-7QNBPB7F.cjs.map +1 -0
  28. package/dist/{chunk-YFWDS6MX.js → chunk-AB24H2RM.js} +3 -3
  29. package/dist/{chunk-YFWDS6MX.js.map → chunk-AB24H2RM.js.map} +1 -1
  30. package/dist/{chunk-DSGFWT4D.js → chunk-AQBZEN43.js} +5 -5
  31. package/dist/{chunk-DSGFWT4D.js.map → chunk-AQBZEN43.js.map} +1 -1
  32. package/dist/{chunk-2W73UQ3T.js → chunk-BPYI7BDC.js} +3 -3
  33. package/dist/{chunk-2W73UQ3T.js.map → chunk-BPYI7BDC.js.map} +1 -1
  34. package/dist/{chunk-7U7SONM5.js → chunk-CVCUQ2MZ.js} +3 -3
  35. package/dist/{chunk-7U7SONM5.js.map → chunk-CVCUQ2MZ.js.map} +1 -1
  36. package/dist/{chunk-PWXDRFJL.cjs → chunk-DHEOWRIE.cjs} +6 -6
  37. package/dist/{chunk-PWXDRFJL.cjs.map → chunk-DHEOWRIE.cjs.map} +1 -1
  38. package/dist/{chunk-OYUIEJPN.js → chunk-GTRYDFMT.js} +38 -10
  39. package/dist/chunk-GTRYDFMT.js.map +1 -0
  40. package/dist/{chunk-2FZYZ4HT.cjs → chunk-HDSYYQYM.cjs} +4 -4
  41. package/dist/{chunk-2FZYZ4HT.cjs.map → chunk-HDSYYQYM.cjs.map} +1 -1
  42. package/dist/{chunk-MM32RSX4.cjs → chunk-HOE2U27V.cjs} +185 -18
  43. package/dist/chunk-HOE2U27V.cjs.map +1 -0
  44. package/dist/{chunk-JCIQIR5V.js → chunk-IGUDEWIW.js} +4 -4
  45. package/dist/{chunk-JCIQIR5V.js.map → chunk-IGUDEWIW.js.map} +1 -1
  46. package/dist/{chunk-GGLISETW.cjs → chunk-IKHK4GTF.cjs} +4 -4
  47. package/dist/{chunk-GGLISETW.cjs.map → chunk-IKHK4GTF.cjs.map} +1 -1
  48. package/dist/{chunk-YVKBXNPK.js → chunk-JBNQ2L3K.js} +10 -6
  49. package/dist/chunk-JBNQ2L3K.js.map +1 -0
  50. package/dist/{chunk-GU6TPVXF.cjs → chunk-JK2IWOI7.cjs} +6 -6
  51. package/dist/{chunk-GU6TPVXF.cjs.map → chunk-JK2IWOI7.cjs.map} +1 -1
  52. package/dist/{chunk-TZKBW4GA.cjs → chunk-K76UNS22.cjs} +6 -6
  53. package/dist/{chunk-TZKBW4GA.cjs.map → chunk-K76UNS22.cjs.map} +1 -1
  54. package/dist/{chunk-DAAJ3B2T.js → chunk-KP72MDFB.js} +4 -4
  55. package/dist/{chunk-DAAJ3B2T.js.map → chunk-KP72MDFB.js.map} +1 -1
  56. package/dist/{chunk-MLCIINXT.js → chunk-LBUXS6FJ.js} +4 -4
  57. package/dist/{chunk-MLCIINXT.js.map → chunk-LBUXS6FJ.js.map} +1 -1
  58. package/dist/{chunk-GG3IK5TL.cjs → chunk-MQK2D6I6.cjs} +9 -9
  59. package/dist/{chunk-GG3IK5TL.cjs.map → chunk-MQK2D6I6.cjs.map} +1 -1
  60. package/dist/{chunk-67X7L7JX.js → chunk-MQSGJB2B.js} +173 -6
  61. package/dist/chunk-MQSGJB2B.js.map +1 -0
  62. package/dist/{chunk-2GBVJHWN.cjs → chunk-NH5JOZLG.cjs} +13 -13
  63. package/dist/{chunk-2GBVJHWN.cjs.map → chunk-NH5JOZLG.cjs.map} +1 -1
  64. package/dist/{chunk-NWU634SO.cjs → chunk-O2EAHOXM.cjs} +4 -4
  65. package/dist/{chunk-NWU634SO.cjs.map → chunk-O2EAHOXM.cjs.map} +1 -1
  66. package/dist/{chunk-JUYBJLPI.cjs → chunk-O7Y56J4R.cjs} +4 -4
  67. package/dist/{chunk-JUYBJLPI.cjs.map → chunk-O7Y56J4R.cjs.map} +1 -1
  68. package/dist/{chunk-BQSREBF2.cjs → chunk-OJ2NCQ2R.cjs} +14 -14
  69. package/dist/{chunk-BQSREBF2.cjs.map → chunk-OJ2NCQ2R.cjs.map} +1 -1
  70. package/dist/{chunk-GLRKXJCR.js → chunk-OX32ITWC.js} +3 -3
  71. package/dist/{chunk-GLRKXJCR.js.map → chunk-OX32ITWC.js.map} +1 -1
  72. package/dist/{chunk-L4APW65W.cjs → chunk-PJ4XEBMU.cjs} +4 -4
  73. package/dist/{chunk-L4APW65W.cjs.map → chunk-PJ4XEBMU.cjs.map} +1 -1
  74. package/dist/{chunk-OZKJYLN6.js → chunk-PSCSU63K.js} +3 -3
  75. package/dist/{chunk-OZKJYLN6.js.map → chunk-PSCSU63K.js.map} +1 -1
  76. package/dist/{chunk-EI4JU5JF.js → chunk-RKM4VGAN.js} +3 -3
  77. package/dist/{chunk-EI4JU5JF.js.map → chunk-RKM4VGAN.js.map} +1 -1
  78. package/dist/{chunk-ME7EVT6F.js → chunk-RYGVILUR.js} +3 -3
  79. package/dist/{chunk-ME7EVT6F.js.map → chunk-RYGVILUR.js.map} +1 -1
  80. package/dist/{chunk-EGPDT7SM.js → chunk-S7NJV335.js} +3 -3
  81. package/dist/{chunk-EGPDT7SM.js.map → chunk-S7NJV335.js.map} +1 -1
  82. package/dist/{chunk-AHT2HRHC.cjs → chunk-TNRANQVI.cjs} +16 -16
  83. package/dist/{chunk-AHT2HRHC.cjs.map → chunk-TNRANQVI.cjs.map} +1 -1
  84. package/dist/{chunk-TERHGQ73.cjs → chunk-U7XWWU5H.cjs} +5 -5
  85. package/dist/{chunk-TERHGQ73.cjs.map → chunk-U7XWWU5H.cjs.map} +1 -1
  86. package/dist/{chunk-G35LXI2A.js → chunk-UIFN2LYT.js} +3 -3
  87. package/dist/{chunk-G35LXI2A.js.map → chunk-UIFN2LYT.js.map} +1 -1
  88. package/dist/{chunk-IYDPGQJA.js → chunk-UQAWXY6R.js} +3 -3
  89. package/dist/{chunk-IYDPGQJA.js.map → chunk-UQAWXY6R.js.map} +1 -1
  90. package/dist/{chunk-YWCHUUY3.js → chunk-VOPRL4RF.js} +7 -7
  91. package/dist/{chunk-YWCHUUY3.js.map → chunk-VOPRL4RF.js.map} +1 -1
  92. package/dist/{chunk-KB2PLV5Q.js → chunk-VQGRMCVT.js} +4 -4
  93. package/dist/{chunk-KB2PLV5Q.js.map → chunk-VQGRMCVT.js.map} +1 -1
  94. package/dist/{chunk-AWJBJYLZ.cjs → chunk-X6THHGTZ.cjs} +37 -37
  95. package/dist/{chunk-AWJBJYLZ.cjs.map → chunk-X6THHGTZ.cjs.map} +1 -1
  96. package/dist/{chunk-Q6QLGCL7.cjs → chunk-XCCH5KHW.cjs} +9 -9
  97. package/dist/{chunk-Q6QLGCL7.cjs.map → chunk-XCCH5KHW.cjs.map} +1 -1
  98. package/dist/{chunk-KQXD6BFO.cjs → chunk-XM3D4KAF.cjs} +9 -9
  99. package/dist/{chunk-KQXD6BFO.cjs.map → chunk-XM3D4KAF.cjs.map} +1 -1
  100. package/dist/{chunk-PINIBEIU.cjs → chunk-XRXOGMMG.cjs} +39 -11
  101. package/dist/chunk-XRXOGMMG.cjs.map +1 -0
  102. package/dist/{chunk-XPWFIDZM.cjs → chunk-XU3X2AUL.cjs} +4 -4
  103. package/dist/{chunk-XPWFIDZM.cjs.map → chunk-XU3X2AUL.cjs.map} +1 -1
  104. package/dist/{chunk-3A4N5E6P.js → chunk-XZ65FX6T.js} +3 -3
  105. package/dist/{chunk-3A4N5E6P.js.map → chunk-XZ65FX6T.js.map} +1 -1
  106. package/dist/{chunk-CRR7AE5D.js → chunk-Z6I4XFPC.js} +3 -3
  107. package/dist/{chunk-CRR7AE5D.js.map → chunk-Z6I4XFPC.js.map} +1 -1
  108. package/dist/{chunk-LTCHD3K5.cjs → chunk-Z7ZOSENN.cjs} +5 -5
  109. package/dist/{chunk-LTCHD3K5.cjs.map → chunk-Z7ZOSENN.cjs.map} +1 -1
  110. package/dist/{chunk-NZUQL42A.cjs → chunk-ZDA6FEKA.cjs} +5 -5
  111. package/dist/{chunk-NZUQL42A.cjs.map → chunk-ZDA6FEKA.cjs.map} +1 -1
  112. package/dist/{chunk-UY2EZYIC.js → chunk-ZSBG6C3P.js} +3 -3
  113. package/dist/{chunk-UY2EZYIC.js.map → chunk-ZSBG6C3P.js.map} +1 -1
  114. package/dist/{chunk-KAQNYX7B.js → chunk-ZVRJVUFX.js} +3 -3
  115. package/dist/{chunk-KAQNYX7B.js.map → chunk-ZVRJVUFX.js.map} +1 -1
  116. package/dist/components/AudioPlayer/index.cjs +7 -7
  117. package/dist/components/AudioPlayer/index.js +2 -2
  118. package/dist/components/BoardView/index.cjs +5 -5
  119. package/dist/components/BoardView/index.js +2 -2
  120. package/dist/components/CollabStatus/index.cjs +5 -5
  121. package/dist/components/CollabStatus/index.js +2 -2
  122. package/dist/components/Dropdown/index.cjs +9 -9
  123. package/dist/components/Dropdown/index.d.cts +6 -1
  124. package/dist/components/Dropdown/index.d.ts +6 -1
  125. package/dist/components/Dropdown/index.js +2 -2
  126. package/dist/components/EmailEditor/index.cjs +16 -16
  127. package/dist/components/EmailEditor/index.js +7 -7
  128. package/dist/components/MediaEditor/index.cjs +10 -10
  129. package/dist/components/MediaEditor/index.js +5 -5
  130. package/dist/components/MediaFeed/index.cjs +6 -6
  131. package/dist/components/MediaFeed/index.js +5 -5
  132. package/dist/components/MediaPlayer/index.cjs +8 -8
  133. package/dist/components/MediaPlayer/index.js +4 -4
  134. package/dist/components/MegaMenu/index.cjs +5 -5
  135. package/dist/components/MegaMenu/index.js +2 -2
  136. package/dist/components/RecordHeader/index.cjs +5 -5
  137. package/dist/components/RecordHeader/index.js +3 -3
  138. package/dist/components/RecordLayout/index.cjs +5 -5
  139. package/dist/components/RecordLayout/index.js +3 -3
  140. package/dist/components/RichTextEditor/index.cjs +6 -6
  141. package/dist/components/RichTextEditor/index.js +3 -3
  142. package/dist/components/Slider/index.cjs +6 -6
  143. package/dist/components/Slider/index.js +2 -2
  144. package/dist/components/SliderCalculator/index.cjs +5 -5
  145. package/dist/components/SliderCalculator/index.js +3 -3
  146. package/dist/components/SuperChat/index.cjs +23 -23
  147. package/dist/components/SuperChat/index.js +8 -8
  148. package/dist/components/SuperChat/plugins/index.cjs +5 -5
  149. package/dist/components/SuperChat/plugins/index.js +4 -4
  150. package/dist/components/Tabs/index.cjs +8 -8
  151. package/dist/components/Tabs/index.js +2 -2
  152. package/dist/components/Textarea/index.cjs +8 -8
  153. package/dist/components/Textarea/index.js +5 -5
  154. package/dist/components/ThemeProvider/index.cjs +9 -9
  155. package/dist/components/ThemeProvider/index.js +3 -3
  156. package/dist/components/Tooltip/index.cjs +3 -3
  157. package/dist/components/Tooltip/index.js +2 -2
  158. package/dist/components/ViewSet/index.cjs +5 -5
  159. package/dist/components/ViewSet/index.js +4 -4
  160. package/dist/components/ViewSwitcher/index.cjs +4 -4
  161. package/dist/components/ViewSwitcher/index.js +2 -2
  162. package/dist/deck.cjs +3 -3
  163. package/dist/deck.js +1 -1
  164. package/dist/esheet.cjs +107 -107
  165. package/dist/esheet.js +10 -10
  166. package/dist/hooks/index.cjs +5 -5
  167. package/dist/hooks/index.js +1 -1
  168. package/dist/index.cjs +284 -284
  169. package/dist/index.d.cts +6 -1
  170. package/dist/index.d.ts +6 -1
  171. package/dist/index.js +40 -40
  172. package/dist/kerebron.cjs +6 -6
  173. package/dist/kerebron.js +4 -4
  174. package/dist/{model-5PB6KNYH.cjs → model-2TISYEYF.cjs} +20 -20
  175. package/dist/{model-5PB6KNYH.cjs.map → model-2TISYEYF.cjs.map} +1 -1
  176. package/dist/{model-OGWTZEXR.js → model-BCS5BUK3.js} +6 -6
  177. package/dist/{model-OGWTZEXR.js.map → model-BCS5BUK3.js.map} +1 -1
  178. package/dist/org-chart.cjs +2 -2
  179. package/dist/org-chart.js +1 -1
  180. package/package.json +1 -1
  181. package/dist/chunk-67X7L7JX.js.map +0 -1
  182. package/dist/chunk-MM32RSX4.cjs.map +0 -1
  183. package/dist/chunk-OYUIEJPN.js.map +0 -1
  184. package/dist/chunk-PINIBEIU.cjs.map +0 -1
  185. package/dist/chunk-YVKBXNPK.js.map +0 -1
  186. package/dist/chunk-Z3WMDVMR.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { useTheme } from './chunk-KJZNEVYM.js';
2
- import { Tooltip } from './chunk-YFWDS6MX.js';
2
+ import { Tooltip } from './chunk-AB24H2RM.js';
3
3
  import { cn } from './chunk-TQONQSJO.js';
4
4
  import * as React from 'react';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -215,5 +215,5 @@ var ThemeToggle = React.forwardRef(
215
215
  ThemeToggle.displayName = "ThemeToggle";
216
216
 
217
217
  export { ThemeProvider, ThemeProviderContext, ThemeToggle, themeToggleIconVariants, themeToggleVariants, useThemeContext };
218
- //# sourceMappingURL=chunk-EI4JU5JF.js.map
219
- //# sourceMappingURL=chunk-EI4JU5JF.js.map
218
+ //# sourceMappingURL=chunk-RKM4VGAN.js.map
219
+ //# sourceMappingURL=chunk-RKM4VGAN.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/ThemeProvider/ThemeToggle.tsx"],"names":["jsx","React2"],"mappings":"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","file":"chunk-EI4JU5JF.js","sourcesContent":["import * as React from 'react';\nimport { useTheme, type Theme, type ResolvedTheme } from '../../hooks/useTheme';\n\nexport interface ThemeProviderContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n resolvedTheme: ResolvedTheme;\n}\n\nconst ThemeProviderContext = React.createContext<\n ThemeProviderContextValue | undefined\n>(undefined);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n /** Default theme to use on first load */\n defaultTheme?: Theme;\n /** Storage key for persisting theme */\n storageKey?: string;\n}\n\n/**\n * Provider component that wraps your app to enable theme switching.\n *\n * @example\n * ```tsx\n * function App() {\n * return (\n * <ThemeProvider defaultTheme=\"system\">\n * <YourApp />\n * </ThemeProvider>\n * );\n * }\n * ```\n */\nfunction ThemeProvider({\n children,\n defaultTheme: _defaultTheme = 'system',\n}: ThemeProviderProps) {\n const { theme, setTheme, resolvedTheme } = useTheme();\n\n const value = React.useMemo(\n () => ({ theme, setTheme, resolvedTheme }),\n [theme, setTheme, resolvedTheme]\n );\n\n return (\n <ThemeProviderContext.Provider value={value}>\n {children}\n </ThemeProviderContext.Provider>\n );\n}\n\nThemeProvider.displayName = 'ThemeProvider';\n\n/**\n * Hook to access the theme context.\n *\n * @example\n * ```tsx\n * function ThemeToggle() {\n * const { theme, setTheme, resolvedTheme } = useThemeContext();\n * return (\n * <button onClick={() => setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')}>\n * Toggle theme\n * </button>\n * );\n * }\n * ```\n */\nfunction useThemeContext(): ThemeProviderContextValue {\n const context = React.useContext(ThemeProviderContext);\n if (!context) {\n throw new Error('useThemeContext must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport { ThemeProvider, ThemeProviderContext, useThemeContext };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useTheme, type Theme } from '../../hooks/useTheme';\nimport { Tooltip } from '../Tooltip';\n\n// ============================================================================\n// Theme Toggle Variants\n// ============================================================================\n\nconst themeToggleVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-md border transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500/40',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 w-7',\n md: 'h-8 w-8',\n lg: 'h-9 w-9',\n },\n variant: {\n default: [\n 'border-neutral-300 bg-white text-neutral-600 shadow-sm',\n 'hover:bg-neutral-100',\n 'dark:border-neutral-600 dark:bg-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-700',\n ],\n ghost: [\n 'border-transparent bg-transparent text-neutral-600',\n 'hover:bg-neutral-100',\n 'dark:text-neutral-300 dark:hover:bg-neutral-700',\n ],\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nconst themeToggleIconVariants = cva('', {\n variants: {\n size: {\n sm: 'h-3.5 w-3.5',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\ninterface IconProps {\n className?: string;\n}\n\nconst SunIcon: React.FC<IconProps> = ({ className }) => (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"\n />\n </svg>\n);\n\nconst MoonIcon: React.FC<IconProps> = ({ className }) => (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"\n />\n </svg>\n);\n\nconst SystemIcon: React.FC<IconProps> = ({ className }) => (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n />\n </svg>\n);\n\n// ============================================================================\n// Three-way cycle (single source of truth)\n// ============================================================================\n\n/** The three-way cycle order: light → dark → system → light. Click handler,\n * tooltip label, and default icon are all derived from this one map. */\nconst THREE_WAY_NEXT: Record<Theme, Theme> = {\n light: 'dark',\n dark: 'system',\n system: 'light',\n};\n\nconst THEME_LABELS: Record<Theme, string> = {\n light: 'Switch to light mode',\n dark: 'Switch to dark mode',\n system: 'Switch to system theme',\n};\n\n// ============================================================================\n// ThemeToggle Component\n// ============================================================================\n\nexport interface ThemeToggleProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>,\n VariantProps<typeof themeToggleVariants> {\n /**\n * What themes to cycle through.\n * - 'two-way': Toggle between light and dark only\n * - 'three-way': Cycle through light → dark → system\n * @default 'two-way'\n */\n mode?: 'two-way' | 'three-way';\n /**\n * Whether to show a tooltip with the current/next theme\n * @default true\n */\n showTooltip?: boolean;\n /**\n * Tooltip placement\n * @default 'bottom'\n */\n tooltipPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /**\n * Delay before showing tooltip in ms\n * @default 140\n */\n tooltipDelay?: number;\n /**\n * Custom icon for light theme\n */\n lightIcon?: React.ReactNode;\n /**\n * Custom icon for dark theme\n */\n darkIcon?: React.ReactNode;\n /**\n * Custom icon for system theme (only used in three-way mode)\n */\n systemIcon?: React.ReactNode;\n}\n\n/**\n * An accessible theme toggle button that switches between light/dark modes.\n *\n * Uses the mieweb-ui useTheme hook for state management and persists\n * the user's preference to localStorage.\n *\n * @example\n * ```tsx\n * // Simple two-way toggle (light/dark)\n * <ThemeToggle />\n *\n * // Three-way cycle (light → dark → system)\n * <ThemeToggle mode=\"three-way\" />\n *\n * // With custom styling\n * <ThemeToggle size=\"lg\" variant=\"ghost\" />\n *\n * // Without tooltip\n * <ThemeToggle showTooltip={false} />\n * ```\n */\nconst ThemeToggle = React.forwardRef<HTMLButtonElement, ThemeToggleProps>(\n (\n {\n className,\n size,\n variant,\n mode = 'two-way',\n showTooltip = true,\n tooltipPlacement = 'bottom',\n tooltipDelay = 140,\n lightIcon,\n darkIcon,\n systemIcon,\n ...props\n },\n ref\n ) => {\n const { theme, setTheme, resolvedTheme } = useTheme();\n\n const handleClick = React.useCallback(() => {\n if (mode === 'two-way') {\n // Simple toggle between light and dark\n setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');\n } else {\n setTheme(THREE_WAY_NEXT[theme]);\n }\n }, [mode, theme, resolvedTheme, setTheme]);\n\n const getLabel = () => {\n if (mode === 'two-way') {\n return resolvedTheme === 'dark'\n ? 'Switch to light mode'\n : 'Switch to dark mode';\n }\n // Three-way mode - name the next stop in the cycle\n return THEME_LABELS[THREE_WAY_NEXT[theme]];\n };\n\n const getCurrentIcon = () => {\n const iconClass = themeToggleIconVariants({ size });\n if (mode === 'three-way') {\n // The DEFAULT icon previews the next theme in the cycle, matching the\n // tooltip (previously dark showed a sun while the click gave system,\n // and system showed the current state instead of the next). The\n // lightIcon/darkIcon/systemIcon overrides are keyed by the CURRENT\n // theme — they replace the icon shown while in that theme.\n const override = {\n light: lightIcon,\n dark: darkIcon,\n system: systemIcon,\n }[theme];\n if (override) return override;\n const defaultIcons: Record<Theme, React.ReactNode> = {\n light: <SunIcon className={iconClass} />,\n dark: <MoonIcon className={iconClass} />,\n system: <SystemIcon className={iconClass} />,\n };\n return defaultIcons[THREE_WAY_NEXT[theme]];\n }\n\n // Two-way keeps the classic convention: sun while dark (\"click for\n // light\"), moon while light (\"click for dark\").\n if (resolvedTheme === 'dark') {\n return darkIcon || <SunIcon className={iconClass} />;\n }\n\n return lightIcon || <MoonIcon className={iconClass} />;\n };\n\n const label = getLabel();\n\n const button = (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n onClick={handleClick}\n className={cn(themeToggleVariants({ size, variant }), className)}\n {...props}\n >\n {getCurrentIcon()}\n </button>\n );\n\n if (showTooltip) {\n return (\n <Tooltip\n content={label}\n placement={tooltipPlacement}\n delay={tooltipDelay}\n >\n {button}\n </Tooltip>\n );\n }\n\n return button;\n }\n);\n\nThemeToggle.displayName = 'ThemeToggle';\n\nexport { ThemeToggle, themeToggleVariants, themeToggleIconVariants };\n"]}
1
+ {"version":3,"sources":["../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/ThemeProvider/ThemeToggle.tsx"],"names":["jsx","React2"],"mappings":"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","file":"chunk-RKM4VGAN.js","sourcesContent":["import * as React from 'react';\nimport { useTheme, type Theme, type ResolvedTheme } from '../../hooks/useTheme';\n\nexport interface ThemeProviderContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n resolvedTheme: ResolvedTheme;\n}\n\nconst ThemeProviderContext = React.createContext<\n ThemeProviderContextValue | undefined\n>(undefined);\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n /** Default theme to use on first load */\n defaultTheme?: Theme;\n /** Storage key for persisting theme */\n storageKey?: string;\n}\n\n/**\n * Provider component that wraps your app to enable theme switching.\n *\n * @example\n * ```tsx\n * function App() {\n * return (\n * <ThemeProvider defaultTheme=\"system\">\n * <YourApp />\n * </ThemeProvider>\n * );\n * }\n * ```\n */\nfunction ThemeProvider({\n children,\n defaultTheme: _defaultTheme = 'system',\n}: ThemeProviderProps) {\n const { theme, setTheme, resolvedTheme } = useTheme();\n\n const value = React.useMemo(\n () => ({ theme, setTheme, resolvedTheme }),\n [theme, setTheme, resolvedTheme]\n );\n\n return (\n <ThemeProviderContext.Provider value={value}>\n {children}\n </ThemeProviderContext.Provider>\n );\n}\n\nThemeProvider.displayName = 'ThemeProvider';\n\n/**\n * Hook to access the theme context.\n *\n * @example\n * ```tsx\n * function ThemeToggle() {\n * const { theme, setTheme, resolvedTheme } = useThemeContext();\n * return (\n * <button onClick={() => setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')}>\n * Toggle theme\n * </button>\n * );\n * }\n * ```\n */\nfunction useThemeContext(): ThemeProviderContextValue {\n const context = React.useContext(ThemeProviderContext);\n if (!context) {\n throw new Error('useThemeContext must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport { ThemeProvider, ThemeProviderContext, useThemeContext };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useTheme, type Theme } from '../../hooks/useTheme';\nimport { Tooltip } from '../Tooltip';\n\n// ============================================================================\n// Theme Toggle Variants\n// ============================================================================\n\nconst themeToggleVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-md border transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500/40',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 w-7',\n md: 'h-8 w-8',\n lg: 'h-9 w-9',\n },\n variant: {\n default: [\n 'border-neutral-300 bg-white text-neutral-600 shadow-sm',\n 'hover:bg-neutral-100',\n 'dark:border-neutral-600 dark:bg-neutral-800 dark:text-neutral-300 dark:hover:bg-neutral-700',\n ],\n ghost: [\n 'border-transparent bg-transparent text-neutral-600',\n 'hover:bg-neutral-100',\n 'dark:text-neutral-300 dark:hover:bg-neutral-700',\n ],\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nconst themeToggleIconVariants = cva('', {\n variants: {\n size: {\n sm: 'h-3.5 w-3.5',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ============================================================================\n// Icon Components\n// ============================================================================\n\ninterface IconProps {\n className?: string;\n}\n\nconst SunIcon: React.FC<IconProps> = ({ className }) => (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\"\n />\n </svg>\n);\n\nconst MoonIcon: React.FC<IconProps> = ({ className }) => (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\"\n />\n </svg>\n);\n\nconst SystemIcon: React.FC<IconProps> = ({ className }) => (\n <svg\n className={className}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n />\n </svg>\n);\n\n// ============================================================================\n// Three-way cycle (single source of truth)\n// ============================================================================\n\n/** The three-way cycle order: light → dark → system → light. Click handler,\n * tooltip label, and default icon are all derived from this one map. */\nconst THREE_WAY_NEXT: Record<Theme, Theme> = {\n light: 'dark',\n dark: 'system',\n system: 'light',\n};\n\nconst THEME_LABELS: Record<Theme, string> = {\n light: 'Switch to light mode',\n dark: 'Switch to dark mode',\n system: 'Switch to system theme',\n};\n\n// ============================================================================\n// ThemeToggle Component\n// ============================================================================\n\nexport interface ThemeToggleProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>,\n VariantProps<typeof themeToggleVariants> {\n /**\n * What themes to cycle through.\n * - 'two-way': Toggle between light and dark only\n * - 'three-way': Cycle through light → dark → system\n * @default 'two-way'\n */\n mode?: 'two-way' | 'three-way';\n /**\n * Whether to show a tooltip with the current/next theme\n * @default true\n */\n showTooltip?: boolean;\n /**\n * Tooltip placement\n * @default 'bottom'\n */\n tooltipPlacement?: 'top' | 'right' | 'bottom' | 'left';\n /**\n * Delay before showing tooltip in ms\n * @default 140\n */\n tooltipDelay?: number;\n /**\n * Custom icon for light theme\n */\n lightIcon?: React.ReactNode;\n /**\n * Custom icon for dark theme\n */\n darkIcon?: React.ReactNode;\n /**\n * Custom icon for system theme (only used in three-way mode)\n */\n systemIcon?: React.ReactNode;\n}\n\n/**\n * An accessible theme toggle button that switches between light/dark modes.\n *\n * Uses the mieweb-ui useTheme hook for state management and persists\n * the user's preference to localStorage.\n *\n * @example\n * ```tsx\n * // Simple two-way toggle (light/dark)\n * <ThemeToggle />\n *\n * // Three-way cycle (light → dark → system)\n * <ThemeToggle mode=\"three-way\" />\n *\n * // With custom styling\n * <ThemeToggle size=\"lg\" variant=\"ghost\" />\n *\n * // Without tooltip\n * <ThemeToggle showTooltip={false} />\n * ```\n */\nconst ThemeToggle = React.forwardRef<HTMLButtonElement, ThemeToggleProps>(\n (\n {\n className,\n size,\n variant,\n mode = 'two-way',\n showTooltip = true,\n tooltipPlacement = 'bottom',\n tooltipDelay = 140,\n lightIcon,\n darkIcon,\n systemIcon,\n ...props\n },\n ref\n ) => {\n const { theme, setTheme, resolvedTheme } = useTheme();\n\n const handleClick = React.useCallback(() => {\n if (mode === 'two-way') {\n // Simple toggle between light and dark\n setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');\n } else {\n setTheme(THREE_WAY_NEXT[theme]);\n }\n }, [mode, theme, resolvedTheme, setTheme]);\n\n const getLabel = () => {\n if (mode === 'two-way') {\n return resolvedTheme === 'dark'\n ? 'Switch to light mode'\n : 'Switch to dark mode';\n }\n // Three-way mode - name the next stop in the cycle\n return THEME_LABELS[THREE_WAY_NEXT[theme]];\n };\n\n const getCurrentIcon = () => {\n const iconClass = themeToggleIconVariants({ size });\n if (mode === 'three-way') {\n // The DEFAULT icon previews the next theme in the cycle, matching the\n // tooltip (previously dark showed a sun while the click gave system,\n // and system showed the current state instead of the next). The\n // lightIcon/darkIcon/systemIcon overrides are keyed by the CURRENT\n // theme — they replace the icon shown while in that theme.\n const override = {\n light: lightIcon,\n dark: darkIcon,\n system: systemIcon,\n }[theme];\n if (override) return override;\n const defaultIcons: Record<Theme, React.ReactNode> = {\n light: <SunIcon className={iconClass} />,\n dark: <MoonIcon className={iconClass} />,\n system: <SystemIcon className={iconClass} />,\n };\n return defaultIcons[THREE_WAY_NEXT[theme]];\n }\n\n // Two-way keeps the classic convention: sun while dark (\"click for\n // light\"), moon while light (\"click for dark\").\n if (resolvedTheme === 'dark') {\n return darkIcon || <SunIcon className={iconClass} />;\n }\n\n return lightIcon || <MoonIcon className={iconClass} />;\n };\n\n const label = getLabel();\n\n const button = (\n <button\n ref={ref}\n type=\"button\"\n aria-label={label}\n onClick={handleClick}\n className={cn(themeToggleVariants({ size, variant }), className)}\n {...props}\n >\n {getCurrentIcon()}\n </button>\n );\n\n if (showTooltip) {\n return (\n <Tooltip\n content={label}\n placement={tooltipPlacement}\n delay={tooltipDelay}\n >\n {button}\n </Tooltip>\n );\n }\n\n return button;\n }\n);\n\nThemeToggle.displayName = 'ThemeToggle';\n\nexport { ThemeToggle, themeToggleVariants, themeToggleIconVariants };\n"]}
@@ -1,5 +1,5 @@
1
1
  import { useUrlSearchParam } from './chunk-CVNPNZMX.js';
2
- import { isRtl } from './chunk-YVKBXNPK.js';
2
+ import { isRtl } from './chunk-JBNQ2L3K.js';
3
3
  import { cn } from './chunk-TQONQSJO.js';
4
4
  import * as React from 'react';
5
5
  import { cva } from 'class-variance-authority';
@@ -231,5 +231,5 @@ var TabsContent = React.forwardRef(
231
231
  TabsContent.displayName = "TabsContent";
232
232
 
233
233
  export { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants };
234
- //# sourceMappingURL=chunk-ME7EVT6F.js.map
235
- //# sourceMappingURL=chunk-ME7EVT6F.js.map
234
+ //# sourceMappingURL=chunk-RYGVILUR.js.map
235
+ //# sourceMappingURL=chunk-RYGVILUR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"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","file":"chunk-ME7EVT6F.js","sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { isRtl } from '../../hooks/useDirection';\nimport { useUrlSearchParam } from '../../hooks/useUrlTab';\n\n// ============================================================================\n// Tabs Context\n// ============================================================================\n\ninterface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n variant: 'underline' | 'pills' | 'enclosed';\n}\n\nconst TabsContext = React.createContext<TabsContextValue | undefined>(\n undefined\n);\n\nfunction useTabsContext() {\n const context = React.useContext(TabsContext);\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs provider');\n }\n return context;\n}\n\n// ============================================================================\n// Tabs Root\n// ============================================================================\n\nexport interface TabsProps {\n /** The controlled value of the selected tab */\n value?: string;\n /** The default value of the selected tab (uncontrolled) */\n defaultValue?: string;\n /** Callback when the selected tab changes */\n onValueChange?: (value: string) => void;\n /** Visual variant of the tabs */\n variant?: 'underline' | 'pills' | 'enclosed';\n /**\n * Query parameter that mirrors the selected tab (uncontrolled only). Written\n * with `history.replaceState`; omitted from the URL when it equals\n * `defaultValue`.\n */\n urlParam?: string;\n /**\n * Values `urlParam` may select. Anything else in the URL falls back to\n * `defaultValue`; without it, any non-empty value is accepted.\n */\n urlValues?: readonly string[];\n /** Tab content */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Accessible tabs component with keyboard navigation.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n * ```\n */\nfunction Tabs({\n value: controlledValue,\n defaultValue,\n onValueChange,\n variant = 'underline',\n urlParam,\n urlValues,\n children,\n className,\n}: TabsProps) {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue || ''\n );\n\n const isControlled = controlledValue !== undefined;\n const syncsUrl = !isControlled && Boolean(urlParam);\n const [urlValue, setUrlValue] = useUrlSearchParam(\n syncsUrl ? urlParam : undefined,\n defaultValue || '',\n (v) => (urlValues ? urlValues.includes(v) : v !== '')\n );\n const value = isControlled\n ? controlledValue\n : syncsUrl\n ? urlValue\n : uncontrolledValue;\n\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (syncsUrl) setUrlValue(newValue);\n else if (!isControlled) setUncontrolledValue(newValue);\n onValueChange?.(newValue);\n },\n [isControlled, syncsUrl, setUrlValue, onValueChange]\n );\n\n return (\n <TabsContext.Provider\n value={{ value, onValueChange: handleValueChange, variant }}\n >\n <div data-slot=\"tabs\" className={cn('w-full', className)}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nTabs.displayName = 'Tabs';\n\n// ============================================================================\n// Tabs List\n// ============================================================================\n\nconst tabsListVariants = cva(['flex items-center'], {\n variants: {\n variant: {\n underline: 'border-b border-border gap-0',\n pills: 'gap-1 p-1 rounded-lg bg-muted',\n enclosed: 'gap-0 border-b border-border',\n },\n },\n defaultVariants: {\n variant: 'underline',\n },\n});\n\nexport type TabsListProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Container for tab triggers.\n */\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, ...props }, ref) => {\n const { variant } = useTabsContext();\n const listRef = React.useRef<HTMLDivElement>(null);\n\n // Keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const list = listRef.current;\n if (!list) return;\n\n const triggers = Array.from(\n list.querySelectorAll<HTMLButtonElement>(\n '[role=\"tab\"]:not([disabled])'\n )\n );\n const currentIndex = triggers.findIndex(\n (trigger) => trigger === document.activeElement\n );\n\n let nextIndex: number;\n\n // Horizontal arrows are visual: under RTL, ArrowRight moves to the\n // previous tab (the visually next one) and vice versa.\n let key = e.key;\n if (isRtl(e.currentTarget)) {\n if (key === 'ArrowRight') key = 'ArrowLeft';\n else if (key === 'ArrowLeft') key = 'ArrowRight';\n }\n\n switch (key) {\n case 'ArrowRight':\n case 'ArrowDown':\n e.preventDefault();\n nextIndex =\n currentIndex === triggers.length - 1 ? 0 : currentIndex + 1;\n triggers[nextIndex]?.focus();\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n e.preventDefault();\n nextIndex =\n currentIndex === 0 ? triggers.length - 1 : currentIndex - 1;\n triggers[nextIndex]?.focus();\n break;\n case 'Home':\n e.preventDefault();\n triggers[0]?.focus();\n break;\n case 'End':\n e.preventDefault();\n triggers[triggers.length - 1]?.focus();\n break;\n }\n },\n []\n );\n\n return (\n <div\n ref={(node) => {\n // Combine refs\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n role=\"tablist\"\n data-slot=\"tabs-list\"\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n );\n }\n);\n\nTabsList.displayName = 'TabsList';\n\n// ============================================================================\n// Tabs Trigger\n// ============================================================================\n\nconst tabsTriggerVariants = cva(\n [\n 'inline-flex items-center justify-center gap-2',\n 'font-medium transition-all duration-200',\n 'whitespace-nowrap',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n ],\n {\n variants: {\n variant: {\n underline: [\n 'px-4 py-2 -mb-px',\n 'border-b-2 border-transparent',\n 'text-muted-foreground hover:text-foreground',\n 'data-[state=active]:border-primary-700 data-[state=active]:text-primary-800',\n 'dark:data-[state=active]:border-primary-400 dark:data-[state=active]:text-primary-400',\n ],\n pills: [\n 'px-3 py-1.5 rounded-md text-sm',\n 'text-neutral-600 dark:text-neutral-300 hover:text-foreground',\n 'data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm',\n ],\n enclosed: [\n 'px-4 py-2 -mb-px',\n 'border border-transparent rounded-t-lg',\n 'text-muted-foreground hover:text-foreground',\n 'data-[state=active]:border-border data-[state=active]:border-b-background data-[state=active]:bg-background data-[state=active]:text-foreground',\n ],\n },\n },\n defaultVariants: {\n variant: 'underline',\n },\n }\n);\n\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The value that identifies this tab */\n value: string;\n /** Icon to show before the label */\n icon?: React.ReactNode;\n}\n\n/**\n * A tab trigger button.\n */\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, icon, children, disabled, ...props }, ref) => {\n const { value: selectedValue, onValueChange, variant } = useTabsContext();\n const isSelected = selectedValue === value;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n data-slot=\"tabs-trigger\"\n aria-selected={isSelected}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n tabIndex={isSelected ? 0 : -1}\n data-state={isSelected ? 'active' : 'inactive'}\n disabled={disabled}\n onClick={() => onValueChange(value)}\n className={cn(tabsTriggerVariants({ variant }), className)}\n {...props}\n >\n {icon && (\n <span data-slot=\"tabs-trigger-icon\" className=\"shrink-0\">\n {icon}\n </span>\n )}\n {children}\n </button>\n );\n }\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\n// ============================================================================\n// Tabs Content\n// ============================================================================\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The value that identifies this content panel */\n value: string;\n /** Force mount the content (useful for animations) */\n forceMount?: boolean;\n}\n\n/**\n * Content panel for a tab.\n */\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, forceMount = false, children, ...props }, ref) => {\n const { value: selectedValue } = useTabsContext();\n const isSelected = selectedValue === value;\n\n if (!isSelected && !forceMount) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n data-slot=\"tabs-content\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n tabIndex={0}\n hidden={!isSelected}\n data-state={isSelected ? 'active' : 'inactive'}\n className={cn(\n 'focus-visible:ring-ring mt-4 rounded-lg focus-visible:ring-2 focus-visible:outline-none',\n !isSelected && 'hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsContent.displayName = 'TabsContent';\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Tabs/Tabs.tsx"],"names":[],"mappings":"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","file":"chunk-RYGVILUR.js","sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { isRtl } from '../../hooks/useDirection';\nimport { useUrlSearchParam } from '../../hooks/useUrlTab';\n\n// ============================================================================\n// Tabs Context\n// ============================================================================\n\ninterface TabsContextValue {\n value: string;\n onValueChange: (value: string) => void;\n variant: 'underline' | 'pills' | 'enclosed';\n}\n\nconst TabsContext = React.createContext<TabsContextValue | undefined>(\n undefined\n);\n\nfunction useTabsContext() {\n const context = React.useContext(TabsContext);\n if (!context) {\n throw new Error('Tabs components must be used within a Tabs provider');\n }\n return context;\n}\n\n// ============================================================================\n// Tabs Root\n// ============================================================================\n\nexport interface TabsProps {\n /** The controlled value of the selected tab */\n value?: string;\n /** The default value of the selected tab (uncontrolled) */\n defaultValue?: string;\n /** Callback when the selected tab changes */\n onValueChange?: (value: string) => void;\n /** Visual variant of the tabs */\n variant?: 'underline' | 'pills' | 'enclosed';\n /**\n * Query parameter that mirrors the selected tab (uncontrolled only). Written\n * with `history.replaceState`; omitted from the URL when it equals\n * `defaultValue`.\n */\n urlParam?: string;\n /**\n * Values `urlParam` may select. Anything else in the URL falls back to\n * `defaultValue`; without it, any non-empty value is accepted.\n */\n urlValues?: readonly string[];\n /** Tab content */\n children: React.ReactNode;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Accessible tabs component with keyboard navigation.\n *\n * @example\n * ```tsx\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n * ```\n */\nfunction Tabs({\n value: controlledValue,\n defaultValue,\n onValueChange,\n variant = 'underline',\n urlParam,\n urlValues,\n children,\n className,\n}: TabsProps) {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(\n defaultValue || ''\n );\n\n const isControlled = controlledValue !== undefined;\n const syncsUrl = !isControlled && Boolean(urlParam);\n const [urlValue, setUrlValue] = useUrlSearchParam(\n syncsUrl ? urlParam : undefined,\n defaultValue || '',\n (v) => (urlValues ? urlValues.includes(v) : v !== '')\n );\n const value = isControlled\n ? controlledValue\n : syncsUrl\n ? urlValue\n : uncontrolledValue;\n\n const handleValueChange = React.useCallback(\n (newValue: string) => {\n if (syncsUrl) setUrlValue(newValue);\n else if (!isControlled) setUncontrolledValue(newValue);\n onValueChange?.(newValue);\n },\n [isControlled, syncsUrl, setUrlValue, onValueChange]\n );\n\n return (\n <TabsContext.Provider\n value={{ value, onValueChange: handleValueChange, variant }}\n >\n <div data-slot=\"tabs\" className={cn('w-full', className)}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nTabs.displayName = 'Tabs';\n\n// ============================================================================\n// Tabs List\n// ============================================================================\n\nconst tabsListVariants = cva(['flex items-center'], {\n variants: {\n variant: {\n underline: 'border-b border-border gap-0',\n pills: 'gap-1 p-1 rounded-lg bg-muted',\n enclosed: 'gap-0 border-b border-border',\n },\n },\n defaultVariants: {\n variant: 'underline',\n },\n});\n\nexport type TabsListProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Container for tab triggers.\n */\nconst TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, ...props }, ref) => {\n const { variant } = useTabsContext();\n const listRef = React.useRef<HTMLDivElement>(null);\n\n // Keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const list = listRef.current;\n if (!list) return;\n\n const triggers = Array.from(\n list.querySelectorAll<HTMLButtonElement>(\n '[role=\"tab\"]:not([disabled])'\n )\n );\n const currentIndex = triggers.findIndex(\n (trigger) => trigger === document.activeElement\n );\n\n let nextIndex: number;\n\n // Horizontal arrows are visual: under RTL, ArrowRight moves to the\n // previous tab (the visually next one) and vice versa.\n let key = e.key;\n if (isRtl(e.currentTarget)) {\n if (key === 'ArrowRight') key = 'ArrowLeft';\n else if (key === 'ArrowLeft') key = 'ArrowRight';\n }\n\n switch (key) {\n case 'ArrowRight':\n case 'ArrowDown':\n e.preventDefault();\n nextIndex =\n currentIndex === triggers.length - 1 ? 0 : currentIndex + 1;\n triggers[nextIndex]?.focus();\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n e.preventDefault();\n nextIndex =\n currentIndex === 0 ? triggers.length - 1 : currentIndex - 1;\n triggers[nextIndex]?.focus();\n break;\n case 'Home':\n e.preventDefault();\n triggers[0]?.focus();\n break;\n case 'End':\n e.preventDefault();\n triggers[triggers.length - 1]?.focus();\n break;\n }\n },\n []\n );\n\n return (\n <div\n ref={(node) => {\n // Combine refs\n (listRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n }}\n role=\"tablist\"\n data-slot=\"tabs-list\"\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n );\n }\n);\n\nTabsList.displayName = 'TabsList';\n\n// ============================================================================\n// Tabs Trigger\n// ============================================================================\n\nconst tabsTriggerVariants = cva(\n [\n 'inline-flex items-center justify-center gap-2',\n 'font-medium transition-all duration-200',\n 'whitespace-nowrap',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n ],\n {\n variants: {\n variant: {\n underline: [\n 'px-4 py-2 -mb-px',\n 'border-b-2 border-transparent',\n 'text-muted-foreground hover:text-foreground',\n 'data-[state=active]:border-primary-700 data-[state=active]:text-primary-800',\n 'dark:data-[state=active]:border-primary-400 dark:data-[state=active]:text-primary-400',\n ],\n pills: [\n 'px-3 py-1.5 rounded-md text-sm',\n 'text-neutral-600 dark:text-neutral-300 hover:text-foreground',\n 'data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm',\n ],\n enclosed: [\n 'px-4 py-2 -mb-px',\n 'border border-transparent rounded-t-lg',\n 'text-muted-foreground hover:text-foreground',\n 'data-[state=active]:border-border data-[state=active]:border-b-background data-[state=active]:bg-background data-[state=active]:text-foreground',\n ],\n },\n },\n defaultVariants: {\n variant: 'underline',\n },\n }\n);\n\nexport interface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The value that identifies this tab */\n value: string;\n /** Icon to show before the label */\n icon?: React.ReactNode;\n}\n\n/**\n * A tab trigger button.\n */\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, icon, children, disabled, ...props }, ref) => {\n const { value: selectedValue, onValueChange, variant } = useTabsContext();\n const isSelected = selectedValue === value;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n data-slot=\"tabs-trigger\"\n aria-selected={isSelected}\n aria-controls={`tabpanel-${value}`}\n id={`tab-${value}`}\n tabIndex={isSelected ? 0 : -1}\n data-state={isSelected ? 'active' : 'inactive'}\n disabled={disabled}\n onClick={() => onValueChange(value)}\n className={cn(tabsTriggerVariants({ variant }), className)}\n {...props}\n >\n {icon && (\n <span data-slot=\"tabs-trigger-icon\" className=\"shrink-0\">\n {icon}\n </span>\n )}\n {children}\n </button>\n );\n }\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\n// ============================================================================\n// Tabs Content\n// ============================================================================\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The value that identifies this content panel */\n value: string;\n /** Force mount the content (useful for animations) */\n forceMount?: boolean;\n}\n\n/**\n * Content panel for a tab.\n */\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, forceMount = false, children, ...props }, ref) => {\n const { value: selectedValue } = useTabsContext();\n const isSelected = selectedValue === value;\n\n if (!isSelected && !forceMount) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n data-slot=\"tabs-content\"\n id={`tabpanel-${value}`}\n aria-labelledby={`tab-${value}`}\n tabIndex={0}\n hidden={!isSelected}\n data-state={isSelected ? 'active' : 'inactive'}\n className={cn(\n 'focus-visible:ring-ring mt-4 rounded-lg focus-visible:ring-2 focus-visible:outline-none',\n !isSelected && 'hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsContent.displayName = 'TabsContent';\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { Tabs, TabsList, TabsTrigger, TabsContent } from './chunk-ME7EVT6F.js';
1
+ import { Tabs, TabsList, TabsTrigger, TabsContent } from './chunk-RYGVILUR.js';
2
2
  import { Badge } from './chunk-522WJIVI.js';
3
3
  import { cn } from './chunk-TQONQSJO.js';
4
4
  import * as React from 'react';
@@ -191,5 +191,5 @@ var RecordLayout = React.forwardRef(
191
191
  RecordLayout.displayName = "RecordLayout";
192
192
 
193
193
  export { RecordLayout, defaultRecordLayoutLabels };
194
- //# sourceMappingURL=chunk-EGPDT7SM.js.map
195
- //# sourceMappingURL=chunk-EGPDT7SM.js.map
194
+ //# sourceMappingURL=chunk-S7NJV335.js.map
195
+ //# sourceMappingURL=chunk-S7NJV335.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/RecordLayout/RecordLayout.tsx"],"names":[],"mappings":";;;;;;;;AAsBO,IAAM,yBAAA,GAAgD;AAAA,EAC3D,OAAA,EAAS,gBAAA;AAAA,EACT,KAAA,EAAO,iBAAA;AAAA,EACP,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,iBAAA;AAAA,EACN,aAAA,EAAe;AACjB;AAEA,IAAM,YAAA,GAAe,IAAI,+CAAA,EAAiD;AAAA,EACxE,QAAA,EAAU;AAAA,IACR,OAAA,EAAS,EAAE,IAAA,EAAM,EAAA,EAAI,OAAO,EAAA,EAAG;AAAA,IAC/B,KAAA,EAAO,EAAE,IAAA,EAAM,EAAA,EAAI,OAAO,EAAA;AAAG,GAC/B;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB;AAAA,MACE,OAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EACE;AAAA,KACJ;AAAA,IACA;AAAA,MACE,OAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EACE;AAAA,KACJ;AAAA,IACA;AAAA,MACE,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,KAAA,EAAO;AAAA;AACT;AAEJ,CAAC,CAAA;AAwBD,SAAS,SAAS,GAAA,EAAkC;AAClD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAC3C,IAAA,OAAO,GAAA,KAAQ,IAAA,GAAO,KAAA,CAAA,GAAY,GAAA,KAAQ,MAAA;AAAA,EAC5C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEO,IAAM,YAAA,GAAqB,KAAA,CAAA,UAAA;AAAA,EAChC,CACE;AAAA,IACE,MAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA,GAAqB,IAAA;AAAA,IACrB,kBAAA,GAAqB,KAAA;AAAA,IACrB,iBAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,MAAA,GAAS,EAAE,GAAG,yBAAA,EAA2B,GAAG,UAAA,EAAW;AAC7D,IAAA,MAAM,YAAkB,KAAA,CAAA,KAAA,EAAM;AAC9B,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAU,eAAS,kBAAkB,CAAA;AAEzD,IAAM,gBAAU,MAAM;AACpB,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,MAAA,MAAM,MAAA,GAAS,SAAS,iBAAiB,CAAA;AACzC,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAA,CAAQ,MAAM,CAAA;AAAA,IAC1C,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,MAAM,OAAO,CAAC,IAAA;AACd,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,IAAI,CAAC,iBAAA,EAAmB;AACxB,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,iBAAA,EAAmB,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,MAC7D,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,aAAa,OAAA,IAAW,IAAA;AAC9B,IAAA,MAAM,WAAW,KAAA,IAAS,IAAA;AAE1B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,eAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,6BAAA,EAA+B,SAAS,CAAA;AAAA,QACrD,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,MAAA;AAAA,0BACD,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,oBAAA;AAAA,cACV,WAAW,YAAA,CAAa,EAAE,SAAS,UAAA,EAAY,KAAA,EAAO,UAAU,CAAA;AAAA,cAE/D,QAAA,EAAA;AAAA,gBAAA,UAAA,oBACC,IAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,WAAA,EAAU,uBAAA;AAAA,oBACV,cAAY,MAAA,CAAO,OAAA;AAAA,oBACnB,SAAA,EAAW,EAAA;AAAA,sBACT,sJAAA;AAAA,sBACA,QAAA,IAAY;AAAA,qBACd;AAAA,oBAEC,QAAA,EAAA;AAAA,sBAAA,kBAAA,oBACC,IAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,IAAA,EAAK,QAAA;AAAA,0BACL,eAAA,EAAe,IAAA;AAAA,0BACf,eAAA,EAAe,SAAA;AAAA,0BACf,OAAA,EAAS,MAAA;AAAA,0BACT,SAAA,EAAU,iOAAA;AAAA,0BAET,QAAA,EAAA;AAAA,4BAAA,MAAA,CAAO,aAAA;AAAA,4CACR,GAAA;AAAA,8BAAC,WAAA;AAAA,8BAAA;AAAA,gCACC,aAAA,EAAY,MAAA;AAAA,gCACZ,SAAA,EAAW,EAAA;AAAA,kCACT,4DAAA;AAAA,kCACA,IAAA,IAAQ;AAAA;AACV;AAAA;AACF;AAAA;AAAA,uBACF;AAAA,sCAEF,GAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,EAAA,EAAI,SAAA;AAAA,0BACJ,SAAA,EAAW,EAAA;AAAA,4BACT,kBAAA,IAAsB,cAAA;AAAA,4BACtB,kBAAA,IAAsB,CAAC,IAAA,IAAQ;AAAA,2BACjC;AAAA,0BAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,iBACF;AAAA,gCAEF,GAAA;AAAA,kBAAC,SAAA;AAAA,kBAAA;AAAA,oBACC,WAAA,EAAU,oBAAA;AAAA,oBACV,cAAY,MAAA,CAAO,IAAA;AAAA,oBACnB,SAAA,EAAU,SAAA;AAAA,oBAET,QAAA,EAAA,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,mBACrB,IAAA;AAAA,sBAAC,IAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAO,SAAA;AAAA,wBACP,YAAA,EAAc,UAAA,IAAc,IAAA,CAAK,CAAC,CAAA,CAAE,EAAA;AAAA,wBACpC,aAAA,EAAe,WAAA;AAAA,wBACf,QAAA,EAAU,YAAA;AAAA,wBACV,WAAW,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,wBAE/B,QAAA,EAAA;AAAA,0CAAA,GAAA,CAAC,QAAA,EAAA,EAAS,YAAA,EAAY,MAAA,CAAO,IAAA,EAAM,WAAU,iBAAA,EAC1C,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,qBACT,IAAA,CAAC,WAAA,EAAA,EAAuB,KAAA,EAAO,EAAE,EAAA,EAC9B,QAAA,EAAA;AAAA,4BAAA,CAAA,CAAE,KAAA;AAAA,4BACF,CAAA,CAAE,KAAA,IAAS,IAAA,oBACV,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,kDACA,KAAA,EAAA,EAAM,IAAA,EAAK,MAAK,OAAA,EAAQ,WAAA,EACtB,YAAE,KAAA,EACL;AAAA,6BAAA,EACF;AAAA,2BAAA,EAAA,EARc,CAAA,CAAE,EAUpB,CACD,CAAA,EACH,CAAA;AAAA,0BACC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,qBACT,GAAA,CAAC,WAAA,EAAA,EAAuB,KAAA,EAAO,CAAA,CAAE,EAAA,EAC9B,QAAA,EAAA,CAAA,CAAE,OAAA,EAAA,EADa,CAAA,CAAE,EAEpB,CACD;AAAA;AAAA;AAAA,qBACH,GAEA;AAAA;AAAA,iBAEJ;AAAA,gBACC,QAAA,oBACC,GAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,WAAA,EAAU,qBAAA;AAAA,oBACV,cAAY,MAAA,CAAO,KAAA;AAAA,oBACnB,SAAA,EAAU,6BAAA;AAAA,oBAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AAEJ;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA","file":"chunk-EGPDT7SM.js","sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge/Badge';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../Tabs/Tabs';\n\nexport interface RecordLayoutTab {\n id: string;\n label: string;\n count?: number;\n content: React.ReactNode;\n}\n\nexport interface RecordLayoutLabels {\n sidebar: string;\n aside: string;\n main: string;\n tabs: string;\n sidebarToggle: string;\n}\n\nexport const defaultRecordLayoutLabels: RecordLayoutLabels = {\n sidebar: 'Record details',\n aside: 'Related records',\n main: 'Record content',\n tabs: 'Record sections',\n sidebarToggle: 'Details',\n};\n\nconst bodyVariants = cva('grid grid-cols-1 items-start gap-6 p-4 sm:p-6', {\n variants: {\n sidebar: { true: '', false: '' },\n aside: { true: '', false: '' },\n },\n compoundVariants: [\n {\n sidebar: true,\n aside: false,\n class:\n 'md:grid-cols-[18rem_minmax(0,1fr)] xl:grid-cols-[20rem_minmax(0,1fr)]',\n },\n {\n sidebar: true,\n aside: true,\n class:\n 'md:grid-cols-[18rem_minmax(0,1fr)] xl:grid-cols-[20rem_minmax(0,1fr)_20rem]',\n },\n {\n sidebar: false,\n aside: true,\n class: 'xl:grid-cols-[minmax(0,1fr)_20rem]',\n },\n ],\n});\n\nexport interface RecordLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Usually a `RecordHeader`. */\n header?: React.ReactNode;\n /** Start column: the record's fields. */\n sidebar?: React.ReactNode;\n /** End column from `xl`; below the main column on tablet and mobile. */\n aside?: React.ReactNode;\n /** Rendered with `Tabs` in the main column; replaces `children`. */\n tabs?: RecordLayoutTab[];\n activeTab?: string;\n defaultTab?: string;\n onTabChange?: (id: string) => void;\n /** Query parameter that mirrors the active tab (uncontrolled only). */\n tabsUrlParam?: string;\n /** Below `md`, hide the sidebar behind a toggle. */\n sidebarCollapsible?: boolean;\n defaultSidebarOpen?: boolean;\n /** Persists the mobile sidebar's open state in `localStorage`. */\n sidebarStorageKey?: string;\n labels?: Partial<RecordLayoutLabels>;\n}\n\nfunction readOpen(key: string): boolean | undefined {\n try {\n const raw = window.localStorage.getItem(key);\n return raw === null ? undefined : raw === 'true';\n } catch {\n return undefined;\n }\n}\n\nexport const RecordLayout = React.forwardRef<HTMLDivElement, RecordLayoutProps>(\n (\n {\n header,\n sidebar,\n aside,\n tabs,\n activeTab,\n defaultTab,\n onTabChange,\n tabsUrlParam,\n sidebarCollapsible = true,\n defaultSidebarOpen = false,\n sidebarStorageKey,\n labels: labelsProp,\n className,\n children,\n ...rest\n },\n ref\n ) => {\n const labels = { ...defaultRecordLayoutLabels, ...labelsProp };\n const sidebarId = React.useId();\n const [open, setOpen] = React.useState(defaultSidebarOpen);\n\n React.useEffect(() => {\n if (!sidebarStorageKey) return;\n const stored = readOpen(sidebarStorageKey);\n if (stored !== undefined) setOpen(stored);\n }, [sidebarStorageKey]);\n\n const toggle = () => {\n const next = !open;\n setOpen(next);\n if (!sidebarStorageKey) return;\n try {\n window.localStorage.setItem(sidebarStorageKey, String(next));\n } catch {\n // Storage blocked: the preference just doesn't persist.\n }\n };\n\n const hasSidebar = sidebar != null;\n const hasAside = aside != null;\n\n return (\n <div\n ref={ref}\n data-slot=\"record-layout\"\n className={cn('bg-background flex flex-col', className)}\n {...rest}\n >\n {header}\n <div\n data-slot=\"record-layout-body\"\n className={bodyVariants({ sidebar: hasSidebar, aside: hasAside })}\n >\n {hasSidebar && (\n <aside\n data-slot=\"record-layout-sidebar\"\n aria-label={labels.sidebar}\n className={cn(\n 'min-w-0 md:sticky md:top-[var(--record-layout-sticky-top,1rem)] md:max-h-[calc(100dvh-var(--record-layout-sticky-top,1rem)-1rem)] md:overflow-y-auto',\n hasAside && 'md:row-span-2 xl:row-span-1'\n )}\n >\n {sidebarCollapsible && (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={sidebarId}\n onClick={toggle}\n className=\"border-border bg-card text-foreground hover:bg-muted focus-visible:ring-ring flex w-full items-center justify-between rounded-lg border px-4 py-3 text-sm font-medium focus-visible:ring-2 focus-visible:outline-none md:hidden\"\n >\n {labels.sidebarToggle}\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n 'h-4 w-4 transition-transform motion-reduce:transition-none',\n open && 'rotate-180'\n )}\n />\n </button>\n )}\n <div\n id={sidebarId}\n className={cn(\n sidebarCollapsible && 'mt-3 md:mt-0',\n sidebarCollapsible && !open && 'hidden md:block'\n )}\n >\n {sidebar}\n </div>\n </aside>\n )}\n <section\n data-slot=\"record-layout-main\"\n aria-label={labels.main}\n className=\"min-w-0\"\n >\n {tabs && tabs.length > 0 ? (\n <Tabs\n value={activeTab}\n defaultValue={defaultTab ?? tabs[0].id}\n onValueChange={onTabChange}\n urlParam={tabsUrlParam}\n urlValues={tabs.map((t) => t.id)}\n >\n <TabsList aria-label={labels.tabs} className=\"overflow-x-auto\">\n {tabs.map((t) => (\n <TabsTrigger key={t.id} value={t.id}>\n {t.label}\n {t.count != null && (\n <>\n {' '}\n <Badge size=\"sm\" variant=\"secondary\">\n {t.count}\n </Badge>\n </>\n )}\n </TabsTrigger>\n ))}\n </TabsList>\n {tabs.map((t) => (\n <TabsContent key={t.id} value={t.id}>\n {t.content}\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n children\n )}\n </section>\n {hasAside && (\n <aside\n data-slot=\"record-layout-aside\"\n aria-label={labels.aside}\n className=\"flex min-w-0 flex-col gap-4\"\n >\n {aside}\n </aside>\n )}\n </div>\n </div>\n );\n }\n);\n\nRecordLayout.displayName = 'RecordLayout';\n"]}
1
+ {"version":3,"sources":["../src/components/RecordLayout/RecordLayout.tsx"],"names":[],"mappings":"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","file":"chunk-S7NJV335.js","sourcesContent":["import * as React from 'react';\nimport { cva } from 'class-variance-authority';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge/Badge';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../Tabs/Tabs';\n\nexport interface RecordLayoutTab {\n id: string;\n label: string;\n count?: number;\n content: React.ReactNode;\n}\n\nexport interface RecordLayoutLabels {\n sidebar: string;\n aside: string;\n main: string;\n tabs: string;\n sidebarToggle: string;\n}\n\nexport const defaultRecordLayoutLabels: RecordLayoutLabels = {\n sidebar: 'Record details',\n aside: 'Related records',\n main: 'Record content',\n tabs: 'Record sections',\n sidebarToggle: 'Details',\n};\n\nconst bodyVariants = cva('grid grid-cols-1 items-start gap-6 p-4 sm:p-6', {\n variants: {\n sidebar: { true: '', false: '' },\n aside: { true: '', false: '' },\n },\n compoundVariants: [\n {\n sidebar: true,\n aside: false,\n class:\n 'md:grid-cols-[18rem_minmax(0,1fr)] xl:grid-cols-[20rem_minmax(0,1fr)]',\n },\n {\n sidebar: true,\n aside: true,\n class:\n 'md:grid-cols-[18rem_minmax(0,1fr)] xl:grid-cols-[20rem_minmax(0,1fr)_20rem]',\n },\n {\n sidebar: false,\n aside: true,\n class: 'xl:grid-cols-[minmax(0,1fr)_20rem]',\n },\n ],\n});\n\nexport interface RecordLayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Usually a `RecordHeader`. */\n header?: React.ReactNode;\n /** Start column: the record's fields. */\n sidebar?: React.ReactNode;\n /** End column from `xl`; below the main column on tablet and mobile. */\n aside?: React.ReactNode;\n /** Rendered with `Tabs` in the main column; replaces `children`. */\n tabs?: RecordLayoutTab[];\n activeTab?: string;\n defaultTab?: string;\n onTabChange?: (id: string) => void;\n /** Query parameter that mirrors the active tab (uncontrolled only). */\n tabsUrlParam?: string;\n /** Below `md`, hide the sidebar behind a toggle. */\n sidebarCollapsible?: boolean;\n defaultSidebarOpen?: boolean;\n /** Persists the mobile sidebar's open state in `localStorage`. */\n sidebarStorageKey?: string;\n labels?: Partial<RecordLayoutLabels>;\n}\n\nfunction readOpen(key: string): boolean | undefined {\n try {\n const raw = window.localStorage.getItem(key);\n return raw === null ? undefined : raw === 'true';\n } catch {\n return undefined;\n }\n}\n\nexport const RecordLayout = React.forwardRef<HTMLDivElement, RecordLayoutProps>(\n (\n {\n header,\n sidebar,\n aside,\n tabs,\n activeTab,\n defaultTab,\n onTabChange,\n tabsUrlParam,\n sidebarCollapsible = true,\n defaultSidebarOpen = false,\n sidebarStorageKey,\n labels: labelsProp,\n className,\n children,\n ...rest\n },\n ref\n ) => {\n const labels = { ...defaultRecordLayoutLabels, ...labelsProp };\n const sidebarId = React.useId();\n const [open, setOpen] = React.useState(defaultSidebarOpen);\n\n React.useEffect(() => {\n if (!sidebarStorageKey) return;\n const stored = readOpen(sidebarStorageKey);\n if (stored !== undefined) setOpen(stored);\n }, [sidebarStorageKey]);\n\n const toggle = () => {\n const next = !open;\n setOpen(next);\n if (!sidebarStorageKey) return;\n try {\n window.localStorage.setItem(sidebarStorageKey, String(next));\n } catch {\n // Storage blocked: the preference just doesn't persist.\n }\n };\n\n const hasSidebar = sidebar != null;\n const hasAside = aside != null;\n\n return (\n <div\n ref={ref}\n data-slot=\"record-layout\"\n className={cn('bg-background flex flex-col', className)}\n {...rest}\n >\n {header}\n <div\n data-slot=\"record-layout-body\"\n className={bodyVariants({ sidebar: hasSidebar, aside: hasAside })}\n >\n {hasSidebar && (\n <aside\n data-slot=\"record-layout-sidebar\"\n aria-label={labels.sidebar}\n className={cn(\n 'min-w-0 md:sticky md:top-[var(--record-layout-sticky-top,1rem)] md:max-h-[calc(100dvh-var(--record-layout-sticky-top,1rem)-1rem)] md:overflow-y-auto',\n hasAside && 'md:row-span-2 xl:row-span-1'\n )}\n >\n {sidebarCollapsible && (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={sidebarId}\n onClick={toggle}\n className=\"border-border bg-card text-foreground hover:bg-muted focus-visible:ring-ring flex w-full items-center justify-between rounded-lg border px-4 py-3 text-sm font-medium focus-visible:ring-2 focus-visible:outline-none md:hidden\"\n >\n {labels.sidebarToggle}\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n 'h-4 w-4 transition-transform motion-reduce:transition-none',\n open && 'rotate-180'\n )}\n />\n </button>\n )}\n <div\n id={sidebarId}\n className={cn(\n sidebarCollapsible && 'mt-3 md:mt-0',\n sidebarCollapsible && !open && 'hidden md:block'\n )}\n >\n {sidebar}\n </div>\n </aside>\n )}\n <section\n data-slot=\"record-layout-main\"\n aria-label={labels.main}\n className=\"min-w-0\"\n >\n {tabs && tabs.length > 0 ? (\n <Tabs\n value={activeTab}\n defaultValue={defaultTab ?? tabs[0].id}\n onValueChange={onTabChange}\n urlParam={tabsUrlParam}\n urlValues={tabs.map((t) => t.id)}\n >\n <TabsList aria-label={labels.tabs} className=\"overflow-x-auto\">\n {tabs.map((t) => (\n <TabsTrigger key={t.id} value={t.id}>\n {t.label}\n {t.count != null && (\n <>\n {' '}\n <Badge size=\"sm\" variant=\"secondary\">\n {t.count}\n </Badge>\n </>\n )}\n </TabsTrigger>\n ))}\n </TabsList>\n {tabs.map((t) => (\n <TabsContent key={t.id} value={t.id}>\n {t.content}\n </TabsContent>\n ))}\n </Tabs>\n ) : (\n children\n )}\n </section>\n {hasAside && (\n <aside\n data-slot=\"record-layout-aside\"\n aria-label={labels.aside}\n className=\"flex min-w-0 flex-col gap-4\"\n >\n {aside}\n </aside>\n )}\n </div>\n </div>\n );\n }\n);\n\nRecordLayout.displayName = 'RecordLayout';\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var chunkFSLI5IKP_cjs = require('./chunk-FSLI5IKP.cjs');
4
4
  var chunkYP5T6NZD_cjs = require('./chunk-YP5T6NZD.cjs');
5
- var chunkPINIBEIU_cjs = require('./chunk-PINIBEIU.cjs');
5
+ var chunkXRXOGMMG_cjs = require('./chunk-XRXOGMMG.cjs');
6
6
  var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
7
7
  var chunkPHYQSCP6_cjs = require('./chunk-PHYQSCP6.cjs');
8
8
  var chunkC7RVKV25_cjs = require('./chunk-C7RVKV25.cjs');
@@ -1287,7 +1287,7 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1287
1287
  hasVariables && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1288
1288
  /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
1289
1289
  /* @__PURE__ */ jsxRuntime.jsx(
1290
- chunkPINIBEIU_cjs.Dropdown,
1290
+ chunkXRXOGMMG_cjs.Dropdown,
1291
1291
  {
1292
1292
  placement: "bottom-start",
1293
1293
  width: 240,
@@ -1311,10 +1311,10 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1311
1311
  }
1312
1312
  ),
1313
1313
  children: variableGroups.map((group, groupIndex) => /* @__PURE__ */ jsxRuntime.jsxs(React2__namespace.Fragment, { children: [
1314
- groupIndex > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkPINIBEIU_cjs.DropdownSeparator, {}),
1315
- /* @__PURE__ */ jsxRuntime.jsx(chunkPINIBEIU_cjs.DropdownLabel, { children: group.label }),
1314
+ groupIndex > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkXRXOGMMG_cjs.DropdownSeparator, {}),
1315
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXRXOGMMG_cjs.DropdownLabel, { children: group.label }),
1316
1316
  group.variables.map((variable) => /* @__PURE__ */ jsxRuntime.jsx(
1317
- chunkPINIBEIU_cjs.DropdownItem,
1317
+ chunkXRXOGMMG_cjs.DropdownItem,
1318
1318
  {
1319
1319
  onClick: () => insertVariable(variable),
1320
1320
  children: variable.label
@@ -1409,7 +1409,7 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1409
1409
  style: { top: gutterTop },
1410
1410
  onMouseDown: (event) => event.preventDefault(),
1411
1411
  children: /* @__PURE__ */ jsxRuntime.jsxs(
1412
- chunkPINIBEIU_cjs.Dropdown,
1412
+ chunkXRXOGMMG_cjs.Dropdown,
1413
1413
  {
1414
1414
  open: blockMenuOpen,
1415
1415
  onOpenChange: handleBlockMenuOpenChange,
@@ -1437,7 +1437,7 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1437
1437
  ),
1438
1438
  children: [
1439
1439
  blockFormatItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
1440
- chunkPINIBEIU_cjs.DropdownItem,
1440
+ chunkXRXOGMMG_cjs.DropdownItem,
1441
1441
  {
1442
1442
  ref: index === 0 ? firstBlockItemRef : void 0,
1443
1443
  onClick: () => applyBlockFormat(item.command, item.value),
@@ -1445,10 +1445,10 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1445
1445
  },
1446
1446
  item.key
1447
1447
  )),
1448
- /* @__PURE__ */ jsxRuntime.jsx(chunkPINIBEIU_cjs.DropdownSeparator, {}),
1448
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXRXOGMMG_cjs.DropdownSeparator, {}),
1449
1449
  hasMacros && macros && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1450
1450
  /* @__PURE__ */ jsxRuntime.jsx(
1451
- chunkPINIBEIU_cjs.DropdownSubmenu,
1451
+ chunkXRXOGMMG_cjs.DropdownSubmenu,
1452
1452
  {
1453
1453
  label: blockMenuLabels?.insertMacro ?? "Insert macro",
1454
1454
  disabled: !hasMacroEntries,
@@ -1456,10 +1456,10 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1456
1456
  // Group headings only earn their row when there
1457
1457
  // is more than one group to tell apart.
1458
1458
  ...macros.length > 1 ? [
1459
- /* @__PURE__ */ jsxRuntime.jsx(chunkPINIBEIU_cjs.DropdownLabel, { children: group.label }, `h:${group.id}`)
1459
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXRXOGMMG_cjs.DropdownLabel, { children: group.label }, `h:${group.id}`)
1460
1460
  ] : [],
1461
1461
  ...group.macros.map((macro) => /* @__PURE__ */ jsxRuntime.jsx(
1462
- chunkPINIBEIU_cjs.DropdownItem,
1462
+ chunkXRXOGMMG_cjs.DropdownItem,
1463
1463
  {
1464
1464
  className: "[&>[data-slot=dropdown-item-label]]:min-w-0 [&>[data-slot=dropdown-item-label]]:flex-1",
1465
1465
  onClick: () => {
@@ -1488,7 +1488,7 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1488
1488
  }
1489
1489
  ),
1490
1490
  /* @__PURE__ */ jsxRuntime.jsx(
1491
- chunkPINIBEIU_cjs.DropdownItem,
1491
+ chunkXRXOGMMG_cjs.DropdownItem,
1492
1492
  {
1493
1493
  onClick: () => {
1494
1494
  setBlockMenuOpen(false);
@@ -1501,10 +1501,10 @@ var RichTextEditorBase = React2__namespace.forwardRef(
1501
1501
  children: blockMenuLabels?.showMacroLibrary ?? "Show macro library"
1502
1502
  }
1503
1503
  ),
1504
- /* @__PURE__ */ jsxRuntime.jsx(chunkPINIBEIU_cjs.DropdownSeparator, {})
1504
+ /* @__PURE__ */ jsxRuntime.jsx(chunkXRXOGMMG_cjs.DropdownSeparator, {})
1505
1505
  ] }),
1506
1506
  /* @__PURE__ */ jsxRuntime.jsx(
1507
- chunkPINIBEIU_cjs.DropdownItem,
1507
+ chunkXRXOGMMG_cjs.DropdownItem,
1508
1508
  {
1509
1509
  onClick: () => {
1510
1510
  setBlockMenuOpen(false);
@@ -1661,5 +1661,5 @@ exports.RichTextEditor = RichTextEditor;
1661
1661
  exports.RichTextEditorBase = RichTextEditorBase;
1662
1662
  exports.convertAngleBracketsToMustache = convertAngleBracketsToMustache;
1663
1663
  exports.processDictation = processDictation;
1664
- //# sourceMappingURL=chunk-AHT2HRHC.cjs.map
1665
- //# sourceMappingURL=chunk-AHT2HRHC.cjs.map
1664
+ //# sourceMappingURL=chunk-TNRANQVI.cjs.map
1665
+ //# sourceMappingURL=chunk-TNRANQVI.cjs.map