asterui 0.12.18 → 0.12.20

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 (205) hide show
  1. package/dist/components/Code.d.ts +2 -0
  2. package/dist/components/CopyButton.d.ts +34 -0
  3. package/dist/components/Watermark.d.ts +40 -0
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.js +205 -201
  6. package/dist/index.js.map +1 -1
  7. package/dist/index10.js +91 -121
  8. package/dist/index10.js.map +1 -1
  9. package/dist/index100.js +5 -45
  10. package/dist/index100.js.map +1 -1
  11. package/dist/index101.js +13 -12
  12. package/dist/index101.js.map +1 -1
  13. package/dist/index102.js +44 -13
  14. package/dist/index102.js.map +1 -1
  15. package/dist/index103.js +12 -7
  16. package/dist/index103.js.map +1 -1
  17. package/dist/index104.js +13 -11
  18. package/dist/index104.js.map +1 -1
  19. package/dist/index105.js +7 -30
  20. package/dist/index105.js.map +1 -1
  21. package/dist/index106.js +11 -16
  22. package/dist/index106.js.map +1 -1
  23. package/dist/index107.js +34 -0
  24. package/dist/index107.js.map +1 -0
  25. package/dist/index108.js +21 -0
  26. package/dist/index108.js.map +1 -0
  27. package/dist/index11.js +123 -30
  28. package/dist/index11.js.map +1 -1
  29. package/dist/index12.js +28 -263
  30. package/dist/index12.js.map +1 -1
  31. package/dist/index13.js +257 -105
  32. package/dist/index13.js.map +1 -1
  33. package/dist/index14.js +108 -153
  34. package/dist/index14.js.map +1 -1
  35. package/dist/index15.js +154 -146
  36. package/dist/index15.js.map +1 -1
  37. package/dist/index16.js +150 -5
  38. package/dist/index16.js.map +1 -1
  39. package/dist/index17.js +5 -71
  40. package/dist/index17.js.map +1 -1
  41. package/dist/index18.js +70 -24
  42. package/dist/index18.js.map +1 -1
  43. package/dist/index19.js +23 -194
  44. package/dist/index19.js.map +1 -1
  45. package/dist/index20.js +188 -106
  46. package/dist/index20.js.map +1 -1
  47. package/dist/index21.js +107 -177
  48. package/dist/index21.js.map +1 -1
  49. package/dist/index22.js +181 -107
  50. package/dist/index22.js.map +1 -1
  51. package/dist/index23.js +110 -19
  52. package/dist/index23.js.map +1 -1
  53. package/dist/index24.js +17 -41
  54. package/dist/index24.js.map +1 -1
  55. package/dist/index25.js +43 -32
  56. package/dist/index25.js.map +1 -1
  57. package/dist/index26.js +30 -170
  58. package/dist/index26.js.map +1 -1
  59. package/dist/index27.js +171 -40
  60. package/dist/index27.js.map +1 -1
  61. package/dist/index28.js +41 -17
  62. package/dist/index28.js.map +1 -1
  63. package/dist/index29.js +17 -33
  64. package/dist/index29.js.map +1 -1
  65. package/dist/index30.js +33 -52
  66. package/dist/index30.js.map +1 -1
  67. package/dist/index31.js +50 -61
  68. package/dist/index31.js.map +1 -1
  69. package/dist/index32.js +60 -181
  70. package/dist/index32.js.map +1 -1
  71. package/dist/index33.js +184 -18
  72. package/dist/index33.js.map +1 -1
  73. package/dist/index34.js +15 -271
  74. package/dist/index34.js.map +1 -1
  75. package/dist/index35.js +270 -1083
  76. package/dist/index35.js.map +1 -1
  77. package/dist/index36.js +1086 -16
  78. package/dist/index36.js.map +1 -1
  79. package/dist/index37.js +17 -17
  80. package/dist/index37.js.map +1 -1
  81. package/dist/index38.js +15 -120
  82. package/dist/index38.js.map +1 -1
  83. package/dist/index39.js +119 -37
  84. package/dist/index39.js.map +1 -1
  85. package/dist/index40.js +40 -398
  86. package/dist/index40.js.map +1 -1
  87. package/dist/index41.js +390 -89
  88. package/dist/index41.js.map +1 -1
  89. package/dist/index42.js +91 -253
  90. package/dist/index42.js.map +1 -1
  91. package/dist/index43.js +249 -145
  92. package/dist/index43.js.map +1 -1
  93. package/dist/index44.js +155 -15
  94. package/dist/index44.js.map +1 -1
  95. package/dist/index45.js +15 -17
  96. package/dist/index45.js.map +1 -1
  97. package/dist/index46.js +16 -136
  98. package/dist/index46.js.map +1 -1
  99. package/dist/index47.js +134 -10
  100. package/dist/index47.js.map +1 -1
  101. package/dist/index48.js +13 -35
  102. package/dist/index48.js.map +1 -1
  103. package/dist/index49.js +35 -34
  104. package/dist/index49.js.map +1 -1
  105. package/dist/index50.js +34 -81
  106. package/dist/index50.js.map +1 -1
  107. package/dist/index51.js +71 -166
  108. package/dist/index51.js.map +1 -1
  109. package/dist/index52.js +167 -144
  110. package/dist/index52.js.map +1 -1
  111. package/dist/index53.js +152 -11
  112. package/dist/index53.js.map +1 -1
  113. package/dist/index54.js +10 -20
  114. package/dist/index54.js.map +1 -1
  115. package/dist/index55.js +55 -12
  116. package/dist/index55.js.map +1 -1
  117. package/dist/index56.js +14 -7
  118. package/dist/index56.js.map +1 -1
  119. package/dist/index57.js +6 -333
  120. package/dist/index57.js.map +1 -1
  121. package/dist/index58.js +334 -47
  122. package/dist/index58.js.map +1 -1
  123. package/dist/index59.js +47 -122
  124. package/dist/index59.js.map +1 -1
  125. package/dist/index60.js +120 -108
  126. package/dist/index60.js.map +1 -1
  127. package/dist/index61.js +107 -167
  128. package/dist/index61.js.map +1 -1
  129. package/dist/index62.js +167 -29
  130. package/dist/index62.js.map +1 -1
  131. package/dist/index63.js +30 -120
  132. package/dist/index63.js.map +1 -1
  133. package/dist/index64.js +116 -80
  134. package/dist/index64.js.map +1 -1
  135. package/dist/index65.js +85 -19
  136. package/dist/index65.js.map +1 -1
  137. package/dist/index66.js +19 -73
  138. package/dist/index66.js.map +1 -1
  139. package/dist/index67.js +71 -54
  140. package/dist/index67.js.map +1 -1
  141. package/dist/index68.js +56 -44
  142. package/dist/index68.js.map +1 -1
  143. package/dist/index69.js +42 -49
  144. package/dist/index69.js.map +1 -1
  145. package/dist/index70.js +50 -121
  146. package/dist/index70.js.map +1 -1
  147. package/dist/index71.js +118 -102
  148. package/dist/index71.js.map +1 -1
  149. package/dist/index72.js +105 -72
  150. package/dist/index72.js.map +1 -1
  151. package/dist/index73.js +73 -67
  152. package/dist/index73.js.map +1 -1
  153. package/dist/index74.js +66 -19
  154. package/dist/index74.js.map +1 -1
  155. package/dist/index75.js +18 -55
  156. package/dist/index75.js.map +1 -1
  157. package/dist/index76.js +55 -251
  158. package/dist/index76.js.map +1 -1
  159. package/dist/index77.js +254 -22
  160. package/dist/index77.js.map +1 -1
  161. package/dist/index78.js +22 -31
  162. package/dist/index78.js.map +1 -1
  163. package/dist/index79.js +30 -93
  164. package/dist/index79.js.map +1 -1
  165. package/dist/index80.js +89 -324
  166. package/dist/index80.js.map +1 -1
  167. package/dist/index81.js +322 -73
  168. package/dist/index81.js.map +1 -1
  169. package/dist/index82.js +79 -39
  170. package/dist/index82.js.map +1 -1
  171. package/dist/index83.js +40 -23
  172. package/dist/index83.js.map +1 -1
  173. package/dist/index84.js +21 -93
  174. package/dist/index84.js.map +1 -1
  175. package/dist/index85.js +87 -148
  176. package/dist/index85.js.map +1 -1
  177. package/dist/index86.js +147 -152
  178. package/dist/index86.js.map +1 -1
  179. package/dist/index87.js +159 -63
  180. package/dist/index87.js.map +1 -1
  181. package/dist/index88.js +65 -35
  182. package/dist/index88.js.map +1 -1
  183. package/dist/index89.js +35 -234
  184. package/dist/index89.js.map +1 -1
  185. package/dist/index90.js +231 -31
  186. package/dist/index90.js.map +1 -1
  187. package/dist/index91.js +34 -210
  188. package/dist/index91.js.map +1 -1
  189. package/dist/index92.js +195 -198
  190. package/dist/index92.js.map +1 -1
  191. package/dist/index93.js +159 -241
  192. package/dist/index93.js.map +1 -1
  193. package/dist/index94.js +283 -166
  194. package/dist/index94.js.map +1 -1
  195. package/dist/index95.js +173 -253
  196. package/dist/index95.js.map +1 -1
  197. package/dist/index96.js +258 -14
  198. package/dist/index96.js.map +1 -1
  199. package/dist/index97.js +124 -31
  200. package/dist/index97.js.map +1 -1
  201. package/dist/index98.js +13 -5
  202. package/dist/index98.js.map +1 -1
  203. package/dist/index99.js +31 -12
  204. package/dist/index99.js.map +1 -1
  205. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index15.js","sources":["../src/components/Chart.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\nimport ApexCharts from 'apexcharts'\nimport type { ApexOptions } from 'apexcharts'\n\nexport interface ChartProps {\n /** Chart type */\n type: 'line' | 'area' | 'bar' | 'pie' | 'donut' | 'radialBar' | 'scatter' | 'bubble' | 'heatmap' | 'candlestick' | 'boxPlot' | 'radar' | 'polarArea' | 'rangeBar' | 'rangeArea' | 'treemap'\n /** Chart series data */\n series: ApexAxisChartSeries | ApexNonAxisChartSeries\n /** Chart width */\n width?: string | number\n /** Chart height */\n height?: string | number\n /** ApexCharts options (merged with theme defaults) */\n options?: ApexOptions\n /** Use daisyUI theme colors */\n themed?: boolean\n /** Additional CSS classes */\n className?: string\n}\n\n// Get CSS variable value from root\nfunction getCssVar(varName: string): string {\n if (typeof document === 'undefined') return ''\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim()\n}\n\n// Convert oklch to hex (approximate)\nfunction oklchToHex(oklch: string): string {\n // Parse oklch(L C H) format\n const match = oklch.match(/oklch\\(\\s*([\\d.]+)%?\\s+([\\d.]+)\\s+([\\d.]+)/)\n if (!match) return ''\n\n const l = parseFloat(match[1]) / 100 // Lightness 0-1\n const c = parseFloat(match[2]) // Chroma\n const h = parseFloat(match[3]) // Hue in degrees\n\n // Simplified oklch to sRGB conversion\n // This is an approximation - full conversion is complex\n const hRad = (h * Math.PI) / 180\n const a = c * Math.cos(hRad)\n const b = c * Math.sin(hRad)\n\n // Approximate conversion to linear RGB\n const l_ = l + 0.3963377774 * a + 0.2158037573 * b\n const m_ = l - 0.1055613458 * a - 0.0638541728 * b\n const s_ = l - 0.0894841775 * a - 1.2914855480 * b\n\n const l3 = l_ * l_ * l_\n const m3 = m_ * m_ * m_\n const s3 = s_ * s_ * s_\n\n let r = 4.0767416621 * l3 - 3.3077115913 * m3 + 0.2309699292 * s3\n let g = -1.2684380046 * l3 + 2.6097574011 * m3 - 0.3413193965 * s3\n let bl = -0.0041960863 * l3 - 0.7034186147 * m3 + 1.7076147010 * s3\n\n // Clamp and convert to sRGB\n const toSrgb = (x: number) => {\n x = Math.max(0, Math.min(1, x))\n return x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1/2.4) - 0.055\n }\n\n r = Math.round(toSrgb(r) * 255)\n g = Math.round(toSrgb(g) * 255)\n bl = Math.round(toSrgb(bl) * 255)\n\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${bl.toString(16).padStart(2, '0')}`\n}\n\n// Get daisyUI theme colors from CSS variables\nfunction getThemeColors(): string[] {\n if (typeof document === 'undefined') return []\n\n const colorVars = [\n '--color-primary',\n '--color-secondary',\n '--color-accent',\n '--color-info',\n '--color-success',\n '--color-warning',\n '--color-error',\n ]\n\n return colorVars\n .map(varName => {\n const value = getCssVar(varName)\n if (value.includes('oklch')) {\n return oklchToHex(value)\n }\n return value\n })\n .filter(Boolean)\n}\n\n// Get theme-aware chart options\nfunction getThemedOptions(): Partial<ApexOptions> {\n const colors = getThemeColors()\n\n // Get text color from CSS variable\n const baseContentVar = getCssVar('--color-base-content')\n const textColor = baseContentVar.includes('oklch')\n ? oklchToHex(baseContentVar)\n : (baseContentVar || '#888888')\n\n // Get grid color from CSS variable\n const base300Var = getCssVar('--color-base-300')\n const gridColor = base300Var.includes('oklch')\n ? oklchToHex(base300Var)\n : (base300Var || '#e0e0e0')\n\n // Determine if dark theme by checking luminance of text color\n // If text is light, we're on dark theme\n const textMatch = textColor.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)\n const isDark = textMatch\n ? (parseInt(textMatch[1], 16) + parseInt(textMatch[2], 16) + parseInt(textMatch[3], 16)) / 3 > 128\n : false\n\n return {\n colors: colors.length > 0 ? colors : undefined,\n theme: {\n mode: isDark ? 'dark' : 'light',\n },\n chart: {\n background: 'transparent',\n foreColor: textColor,\n },\n grid: {\n borderColor: gridColor,\n },\n xaxis: {\n labels: {\n style: {\n colors: textColor,\n },\n },\n axisBorder: {\n color: gridColor,\n },\n axisTicks: {\n color: gridColor,\n },\n },\n yaxis: {\n labels: {\n style: {\n colors: textColor,\n },\n },\n },\n legend: {\n labels: {\n colors: textColor,\n },\n },\n tooltip: {\n theme: isDark ? 'dark' : 'light',\n style: {\n fontSize: '12px',\n },\n x: {\n show: true,\n },\n marker: {\n show: true,\n },\n },\n dataLabels: {\n style: {\n colors: [textColor, textColor, textColor, textColor, textColor, textColor, textColor],\n },\n background: {\n enabled: false,\n },\n dropShadow: {\n enabled: false,\n },\n },\n }\n}\n\n// Deep merge objects\nfunction deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {\n const result = { ...target }\n\n for (const key in source) {\n if (source[key] !== undefined) {\n if (\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof target[key] === 'object' &&\n target[key] !== null &&\n !Array.isArray(target[key])\n ) {\n result[key] = deepMerge(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>\n ) as T[Extract<keyof T, string>]\n } else {\n result[key] = source[key] as T[Extract<keyof T, string>]\n }\n }\n }\n\n return result\n}\n\nexport const Chart: React.FC<ChartProps> = ({\n type,\n series,\n width = '100%',\n height = 350,\n options = {},\n themed = true,\n className = '',\n}) => {\n const chartRef = useRef<HTMLDivElement>(null)\n const chartInstance = useRef<ApexCharts | null>(null)\n const [, setMounted] = useState(false)\n\n // Build final options\n const buildOptions = (): ApexOptions => {\n const baseOptions: ApexOptions = {\n chart: {\n type,\n width,\n height,\n },\n series,\n }\n\n if (themed) {\n const themedOpts = getThemedOptions()\n return deepMerge(deepMerge(baseOptions as unknown as Record<string, unknown>, themedOpts as unknown as Record<string, unknown>), options as unknown as Record<string, unknown>) as ApexOptions\n }\n\n return deepMerge(baseOptions as unknown as Record<string, unknown>, options as unknown as Record<string, unknown>) as ApexOptions\n }\n\n // Initialize chart\n useEffect(() => {\n if (!chartRef.current) return\n\n const opts = buildOptions()\n chartInstance.current = new ApexCharts(chartRef.current, opts)\n chartInstance.current.render()\n setMounted(true)\n\n return () => {\n if (chartInstance.current) {\n chartInstance.current.destroy()\n chartInstance.current = null\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update chart when props change\n useEffect(() => {\n if (!chartInstance.current) return\n\n const opts = buildOptions()\n chartInstance.current.updateOptions(opts, true, true)\n }, [type, series, width, height, options, themed]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Listen for theme changes\n useEffect(() => {\n if (!themed || typeof window === 'undefined') return\n\n const observer = new MutationObserver(() => {\n if (chartInstance.current) {\n const opts = buildOptions()\n chartInstance.current.updateOptions(opts, true, true)\n }\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme', 'class'],\n })\n\n return () => observer.disconnect()\n }, [themed]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={chartRef} className={className} />\n}\n"],"names":["getCssVar","varName","oklchToHex","oklch","match","l","c","hRad","a","b","l_","m_","s_","l3","m3","s3","r","g","bl","toSrgb","x","getThemeColors","value","getThemedOptions","colors","baseContentVar","textColor","base300Var","gridColor","textMatch","isDark","deepMerge","target","source","result","key","Chart","type","series","width","height","options","themed","className","chartRef","useRef","chartInstance","setMounted","useState","buildOptions","baseOptions","themedOpts","useEffect","opts","ApexCharts","observer","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index15.js","sources":["../src/components/Cascader.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback, useId } from 'react'\n\nexport interface CascaderOption {\n value: string | number\n label: React.ReactNode\n disabled?: boolean\n children?: CascaderOption[]\n}\n\nexport interface CascaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n options: CascaderOption[]\n value?: (string | number)[]\n onChange?: (value: (string | number)[], selectedOptions: CascaderOption[]) => void\n placeholder?: string\n disabled?: boolean\n allowClear?: boolean\n expandTrigger?: 'click' | 'hover'\n displayRender?: (labels: React.ReactNode[], selectedOptions: CascaderOption[]) => React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg'\n}\n\nexport function Cascader({\n options,\n value,\n onChange,\n placeholder = 'Please select',\n disabled = false,\n allowClear = true,\n expandTrigger = 'click',\n displayRender,\n size = 'md',\n className = '',\n ...rest\n}: CascaderProps) {\n const [isOpen, setIsOpen] = useState(false)\n const [selectedPath, setSelectedPath] = useState<(string | number)[]>(value || [])\n const [hoveredPath, setHoveredPath] = useState<(string | number)[]>([])\n const containerRef = useRef<HTMLDivElement>(null)\n const inputId = useId()\n const listboxId = useId()\n\n // Sync with controlled value\n useEffect(() => {\n if (value !== undefined) {\n setSelectedPath(value)\n }\n }, [value])\n\n // Close on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false)\n setHoveredPath([])\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n // Get options at each level based on path\n const getOptionsAtLevel = useCallback((level: number, path: (string | number)[]): CascaderOption[] => {\n if (level === 0) return options\n\n let currentOptions = options\n for (let i = 0; i < level; i++) {\n const selected = currentOptions.find(opt => opt.value === path[i])\n if (!selected?.children) return []\n currentOptions = selected.children\n }\n return currentOptions\n }, [options])\n\n // Get selected options objects from path\n const getSelectedOptions = useCallback((path: (string | number)[]): CascaderOption[] => {\n const result: CascaderOption[] = []\n let currentOptions = options\n\n for (const val of path) {\n const found = currentOptions.find(opt => opt.value === val)\n if (!found) break\n result.push(found)\n currentOptions = found.children || []\n }\n\n return result\n }, [options])\n\n // Determine which path to use for displaying columns\n const activePath = isOpen ? (hoveredPath.length > 0 ? hoveredPath : selectedPath) : selectedPath\n\n // Build columns to display\n const columns: CascaderOption[][] = []\n columns.push(options)\n\n for (let i = 0; i < activePath.length; i++) {\n const nextOptions = getOptionsAtLevel(i + 1, activePath)\n if (nextOptions.length > 0) {\n columns.push(nextOptions)\n }\n }\n\n const handleOptionClick = (option: CascaderOption, level: number) => {\n if (option.disabled) return\n\n const newPath = [...activePath.slice(0, level), option.value]\n\n if (option.children && option.children.length > 0) {\n // Has children - just expand, don't select yet\n setHoveredPath(newPath)\n } else {\n // Leaf node - select and close\n setSelectedPath(newPath)\n setIsOpen(false)\n setHoveredPath([])\n onChange?.(newPath, getSelectedOptions(newPath))\n }\n }\n\n const handleOptionHover = (option: CascaderOption, level: number) => {\n if (expandTrigger !== 'hover' || option.disabled) return\n\n const newPath = [...activePath.slice(0, level), option.value]\n setHoveredPath(newPath)\n }\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n setSelectedPath([])\n onChange?.([], [])\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault()\n setIsOpen(!isOpen)\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n setHoveredPath([])\n break\n }\n }\n\n // Display value\n const selectedOptions = getSelectedOptions(selectedPath)\n const labels = selectedOptions.map(opt => opt.label)\n const displayValue = displayRender\n ? displayRender(labels, selectedOptions)\n : labels.join(' / ')\n\n // Size classes\n const sizeClasses = {\n xs: 'input-xs text-xs',\n sm: 'input-sm text-sm',\n md: 'input-md',\n lg: 'input-lg text-lg',\n }\n\n const dropdownSizeClasses = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n }\n\n return (\n <div ref={containerRef} className={`relative inline-block w-full ${className}`} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n {/* Input/Trigger */}\n <div\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n tabIndex={disabled ? -1 : 0}\n className={`input input-bordered w-full flex items-center justify-between cursor-pointer ${sizeClasses[size]} ${\n disabled ? 'input-disabled cursor-not-allowed' : ''\n } ${isOpen ? 'border-primary' : ''}`}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n >\n <span className={selectedPath.length === 0 ? 'text-base-content/50' : ''}>\n {selectedPath.length > 0 ? displayValue : placeholder}\n </span>\n <div className=\"flex items-center gap-1\">\n {allowClear && selectedPath.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-xs btn-circle\"\n onClick={handleClear}\n aria-label=\"Clear selection\"\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n <svg\n className={`w-4 h-4 transition-transform ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n\n {/* Dropdown */}\n {isOpen && (\n <div\n id={listboxId}\n className={`absolute z-50 mt-1 bg-base-100 border border-base-300 rounded-lg shadow-lg flex ${dropdownSizeClasses[size]}`}\n >\n {columns.map((columnOptions, colIndex) => (\n <ul\n key={colIndex}\n role=\"listbox\"\n className={`min-w-[120px] max-h-[200px] overflow-y-auto py-1 ${\n colIndex > 0 ? 'border-l border-base-300' : ''\n }`}\n >\n {columnOptions.map((option) => {\n const isSelected = selectedPath[colIndex] === option.value\n const isHovered = activePath[colIndex] === option.value\n const hasChildren = option.children && option.children.length > 0\n\n return (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n className={`px-3 py-2 cursor-pointer flex items-center justify-between gap-2 ${\n option.disabled\n ? 'text-base-content/30 cursor-not-allowed'\n : isSelected\n ? 'bg-primary text-primary-content'\n : isHovered\n ? 'bg-base-200'\n : 'hover:bg-base-200'\n }`}\n onClick={() => handleOptionClick(option, colIndex)}\n onMouseEnter={() => handleOptionHover(option, colIndex)}\n >\n <span>{option.label}</span>\n {hasChildren && (\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )}\n </li>\n )\n })}\n </ul>\n ))}\n </div>\n )}\n </div>\n )\n}\n"],"names":["Cascader","options","value","onChange","placeholder","disabled","allowClear","expandTrigger","displayRender","size","className","rest","isOpen","setIsOpen","useState","selectedPath","setSelectedPath","hoveredPath","setHoveredPath","containerRef","useRef","inputId","useId","listboxId","useEffect","handleClickOutside","e","getOptionsAtLevel","useCallback","level","path","currentOptions","i","selected","opt","getSelectedOptions","result","val","found","activePath","columns","nextOptions","handleOptionClick","option","newPath","handleOptionHover","handleClear","handleKeyDown","selectedOptions","labels","displayValue","sizeClasses","dropdownSizeClasses","jsxs","jsx","columnOptions","colIndex","isSelected","isHovered","hasChildren"],"mappings":"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"}
package/dist/index16.js CHANGED
@@ -1,8 +1,153 @@
1
- import { jsx as t } from "react/jsx-runtime";
2
- const o = ({ id: e, children: s, className: r = "", ...a }) => /* @__PURE__ */ t("div", { id: e, className: `carousel-item ${r}`, ...a, children: s }), l = ({ children: e, snap: s = "start", vertical: r = !1, className: a = "", ...c }) => /* @__PURE__ */ t("div", { className: `carousel ${s === "center" ? "carousel-center" : s === "end" ? "carousel-end" : ""} ${r ? "carousel-vertical" : ""} ${a}`.trim(), ...c, children: e });
3
- l.Item = o;
1
+ import { jsx as w } from "react/jsx-runtime";
2
+ import { useRef as C, useState as v, useEffect as M } from "react";
3
+ import O from "apexcharts";
4
+ function S(o) {
5
+ return typeof document > "u" ? "" : getComputedStyle(document.documentElement).getPropertyValue(o).trim();
6
+ }
7
+ function x(o) {
8
+ const e = o.match(/oklch\(\s*([\d.]+)%?\s+([\d.]+)\s+([\d.]+)/);
9
+ if (!e) return "";
10
+ const t = parseFloat(e[1]) / 100, r = parseFloat(e[2]), c = parseFloat(e[3]) * Math.PI / 180, l = r * Math.cos(c), u = r * Math.sin(c), n = t + 0.3963377774 * l + 0.2158037573 * u, f = t - 0.1055613458 * l - 0.0638541728 * u, i = t - 0.0894841775 * l - 1.291485548 * u, s = n * n * n, d = f * f * f, m = i * i * i;
11
+ let b = 4.0767416621 * s - 3.3077115913 * d + 0.2309699292 * m, y = -1.2684380046 * s + 2.6097574011 * d - 0.3413193965 * m, g = -0.0041960863 * s - 0.7034186147 * d + 1.707614701 * m;
12
+ const k = (p) => (p = Math.max(0, Math.min(1, p)), p <= 31308e-7 ? 12.92 * p : 1.055 * Math.pow(p, 1 / 2.4) - 0.055);
13
+ return b = Math.round(k(b) * 255), y = Math.round(k(y) * 255), g = Math.round(k(g) * 255), `#${b.toString(16).padStart(2, "0")}${y.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}`;
14
+ }
15
+ function V() {
16
+ return typeof document > "u" ? [] : [
17
+ "--color-primary",
18
+ "--color-secondary",
19
+ "--color-accent",
20
+ "--color-info",
21
+ "--color-success",
22
+ "--color-warning",
23
+ "--color-error"
24
+ ].map((e) => {
25
+ const t = S(e);
26
+ return t.includes("oklch") ? x(t) : t;
27
+ }).filter(Boolean);
28
+ }
29
+ function A() {
30
+ const o = V(), e = S("--color-base-content"), t = e.includes("oklch") ? x(e) : e || "#888888", r = S("--color-base-300"), a = r.includes("oklch") ? x(r) : r || "#e0e0e0", c = t.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i), l = c ? (parseInt(c[1], 16) + parseInt(c[2], 16) + parseInt(c[3], 16)) / 3 > 128 : !1;
31
+ return {
32
+ colors: o.length > 0 ? o : void 0,
33
+ theme: {
34
+ mode: l ? "dark" : "light"
35
+ },
36
+ chart: {
37
+ background: "transparent",
38
+ foreColor: t
39
+ },
40
+ grid: {
41
+ borderColor: a
42
+ },
43
+ xaxis: {
44
+ labels: {
45
+ style: {
46
+ colors: t
47
+ }
48
+ },
49
+ axisBorder: {
50
+ color: a
51
+ },
52
+ axisTicks: {
53
+ color: a
54
+ }
55
+ },
56
+ yaxis: {
57
+ labels: {
58
+ style: {
59
+ colors: t
60
+ }
61
+ }
62
+ },
63
+ legend: {
64
+ labels: {
65
+ colors: t
66
+ }
67
+ },
68
+ tooltip: {
69
+ theme: l ? "dark" : "light",
70
+ style: {
71
+ fontSize: "12px"
72
+ },
73
+ x: {
74
+ show: !0
75
+ },
76
+ marker: {
77
+ show: !0
78
+ }
79
+ },
80
+ dataLabels: {
81
+ style: {
82
+ colors: [t, t, t, t, t, t, t]
83
+ },
84
+ background: {
85
+ enabled: !1
86
+ },
87
+ dropShadow: {
88
+ enabled: !1
89
+ }
90
+ }
91
+ };
92
+ }
93
+ function h(o, e) {
94
+ const t = { ...o };
95
+ for (const r in e)
96
+ e[r] !== void 0 && (typeof e[r] == "object" && e[r] !== null && !Array.isArray(e[r]) && typeof o[r] == "object" && o[r] !== null && !Array.isArray(o[r]) ? t[r] = h(
97
+ o[r],
98
+ e[r]
99
+ ) : t[r] = e[r]);
100
+ return t;
101
+ }
102
+ const $ = ({
103
+ type: o,
104
+ series: e,
105
+ width: t = "100%",
106
+ height: r = 350,
107
+ options: a = {},
108
+ themed: c = !0,
109
+ className: l = ""
110
+ }) => {
111
+ const u = C(null), n = C(null), [, f] = v(!1), i = () => {
112
+ const s = {
113
+ chart: {
114
+ type: o,
115
+ width: t,
116
+ height: r
117
+ },
118
+ series: e
119
+ };
120
+ if (c) {
121
+ const d = A();
122
+ return h(h(s, d), a);
123
+ }
124
+ return h(s, a);
125
+ };
126
+ return M(() => {
127
+ if (!u.current) return;
128
+ const s = i();
129
+ return n.current = new O(u.current, s), n.current.render(), f(!0), () => {
130
+ n.current && (n.current.destroy(), n.current = null);
131
+ };
132
+ }, []), M(() => {
133
+ if (!n.current) return;
134
+ const s = i();
135
+ n.current.updateOptions(s, !0, !0);
136
+ }, [o, e, t, r, a, c]), M(() => {
137
+ if (!c || typeof window > "u") return;
138
+ const s = new MutationObserver(() => {
139
+ if (n.current) {
140
+ const d = i();
141
+ n.current.updateOptions(d, !0, !0);
142
+ }
143
+ });
144
+ return s.observe(document.documentElement, {
145
+ attributes: !0,
146
+ attributeFilter: ["data-theme", "class"]
147
+ }), () => s.disconnect();
148
+ }, [c]), /* @__PURE__ */ w("div", { ref: u, className: l });
149
+ };
4
150
  export {
5
- l as Carousel,
6
- o as CarouselItem
151
+ $ as Chart
7
152
  };
8
153
  //# sourceMappingURL=index16.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index16.js","sources":["../src/components/Carousel.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface CarouselItemProps extends React.HTMLAttributes<HTMLDivElement> {\n id?: string\n children: React.ReactNode\n}\n\nexport const CarouselItem: React.FC<CarouselItemProps> = ({ id, children, className = '', ...rest }) => {\n return (\n <div id={id} className={`carousel-item ${className}`} {...rest}>\n {children}\n </div>\n )\n}\n\nexport interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n snap?: 'start' | 'center' | 'end'\n vertical?: boolean\n}\n\nexport const Carousel: React.FC<CarouselProps> & {\n Item: typeof CarouselItem\n} = ({ children, snap = 'start', vertical = false, className = '', ...rest }) => {\n const snapClass = snap === 'center' ? 'carousel-center' : snap === 'end' ? 'carousel-end' : ''\n const directionClass = vertical ? 'carousel-vertical' : ''\n\n return (\n <div className={`carousel ${snapClass} ${directionClass} ${className}`.trim()} {...rest}>\n {children}\n </div>\n )\n}\n\nCarousel.Item = CarouselItem\n"],"names":["CarouselItem","id","children","className","rest","jsx","Carousel","snap","vertical"],"mappings":";AAOO,MAAMA,IAA4C,CAAC,EAAE,IAAAC,GAAI,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,QAEzF,gBAAAC,EAAC,SAAI,IAAAJ,GAAQ,WAAW,iBAAiBE,CAAS,IAAK,GAAGC,GACvD,UAAAF,EAAA,CACH,GAUSI,IAET,CAAC,EAAE,UAAAJ,GAAU,MAAAK,IAAO,SAAS,UAAAC,IAAW,IAAO,WAAAL,IAAY,IAAI,GAAGC,EAAA,MAKlE,gBAAAC,EAAC,OAAA,EAAI,WAAW,YAJAE,MAAS,WAAW,oBAAoBA,MAAS,QAAQ,iBAAiB,EAIrD,IAHhBC,IAAW,sBAAsB,EAGC,IAAIL,CAAS,GAAG,KAAA,GAAS,GAAGC,GAChF,UAAAF,GACH;AAIJI,EAAS,OAAON;"}
1
+ {"version":3,"file":"index16.js","sources":["../src/components/Chart.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\nimport ApexCharts from 'apexcharts'\nimport type { ApexOptions } from 'apexcharts'\n\nexport interface ChartProps {\n /** Chart type */\n type: 'line' | 'area' | 'bar' | 'pie' | 'donut' | 'radialBar' | 'scatter' | 'bubble' | 'heatmap' | 'candlestick' | 'boxPlot' | 'radar' | 'polarArea' | 'rangeBar' | 'rangeArea' | 'treemap'\n /** Chart series data */\n series: ApexAxisChartSeries | ApexNonAxisChartSeries\n /** Chart width */\n width?: string | number\n /** Chart height */\n height?: string | number\n /** ApexCharts options (merged with theme defaults) */\n options?: ApexOptions\n /** Use daisyUI theme colors */\n themed?: boolean\n /** Additional CSS classes */\n className?: string\n}\n\n// Get CSS variable value from root\nfunction getCssVar(varName: string): string {\n if (typeof document === 'undefined') return ''\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim()\n}\n\n// Convert oklch to hex (approximate)\nfunction oklchToHex(oklch: string): string {\n // Parse oklch(L C H) format\n const match = oklch.match(/oklch\\(\\s*([\\d.]+)%?\\s+([\\d.]+)\\s+([\\d.]+)/)\n if (!match) return ''\n\n const l = parseFloat(match[1]) / 100 // Lightness 0-1\n const c = parseFloat(match[2]) // Chroma\n const h = parseFloat(match[3]) // Hue in degrees\n\n // Simplified oklch to sRGB conversion\n // This is an approximation - full conversion is complex\n const hRad = (h * Math.PI) / 180\n const a = c * Math.cos(hRad)\n const b = c * Math.sin(hRad)\n\n // Approximate conversion to linear RGB\n const l_ = l + 0.3963377774 * a + 0.2158037573 * b\n const m_ = l - 0.1055613458 * a - 0.0638541728 * b\n const s_ = l - 0.0894841775 * a - 1.2914855480 * b\n\n const l3 = l_ * l_ * l_\n const m3 = m_ * m_ * m_\n const s3 = s_ * s_ * s_\n\n let r = 4.0767416621 * l3 - 3.3077115913 * m3 + 0.2309699292 * s3\n let g = -1.2684380046 * l3 + 2.6097574011 * m3 - 0.3413193965 * s3\n let bl = -0.0041960863 * l3 - 0.7034186147 * m3 + 1.7076147010 * s3\n\n // Clamp and convert to sRGB\n const toSrgb = (x: number) => {\n x = Math.max(0, Math.min(1, x))\n return x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1/2.4) - 0.055\n }\n\n r = Math.round(toSrgb(r) * 255)\n g = Math.round(toSrgb(g) * 255)\n bl = Math.round(toSrgb(bl) * 255)\n\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${bl.toString(16).padStart(2, '0')}`\n}\n\n// Get daisyUI theme colors from CSS variables\nfunction getThemeColors(): string[] {\n if (typeof document === 'undefined') return []\n\n const colorVars = [\n '--color-primary',\n '--color-secondary',\n '--color-accent',\n '--color-info',\n '--color-success',\n '--color-warning',\n '--color-error',\n ]\n\n return colorVars\n .map(varName => {\n const value = getCssVar(varName)\n if (value.includes('oklch')) {\n return oklchToHex(value)\n }\n return value\n })\n .filter(Boolean)\n}\n\n// Get theme-aware chart options\nfunction getThemedOptions(): Partial<ApexOptions> {\n const colors = getThemeColors()\n\n // Get text color from CSS variable\n const baseContentVar = getCssVar('--color-base-content')\n const textColor = baseContentVar.includes('oklch')\n ? oklchToHex(baseContentVar)\n : (baseContentVar || '#888888')\n\n // Get grid color from CSS variable\n const base300Var = getCssVar('--color-base-300')\n const gridColor = base300Var.includes('oklch')\n ? oklchToHex(base300Var)\n : (base300Var || '#e0e0e0')\n\n // Determine if dark theme by checking luminance of text color\n // If text is light, we're on dark theme\n const textMatch = textColor.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)\n const isDark = textMatch\n ? (parseInt(textMatch[1], 16) + parseInt(textMatch[2], 16) + parseInt(textMatch[3], 16)) / 3 > 128\n : false\n\n return {\n colors: colors.length > 0 ? colors : undefined,\n theme: {\n mode: isDark ? 'dark' : 'light',\n },\n chart: {\n background: 'transparent',\n foreColor: textColor,\n },\n grid: {\n borderColor: gridColor,\n },\n xaxis: {\n labels: {\n style: {\n colors: textColor,\n },\n },\n axisBorder: {\n color: gridColor,\n },\n axisTicks: {\n color: gridColor,\n },\n },\n yaxis: {\n labels: {\n style: {\n colors: textColor,\n },\n },\n },\n legend: {\n labels: {\n colors: textColor,\n },\n },\n tooltip: {\n theme: isDark ? 'dark' : 'light',\n style: {\n fontSize: '12px',\n },\n x: {\n show: true,\n },\n marker: {\n show: true,\n },\n },\n dataLabels: {\n style: {\n colors: [textColor, textColor, textColor, textColor, textColor, textColor, textColor],\n },\n background: {\n enabled: false,\n },\n dropShadow: {\n enabled: false,\n },\n },\n }\n}\n\n// Deep merge objects\nfunction deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {\n const result = { ...target }\n\n for (const key in source) {\n if (source[key] !== undefined) {\n if (\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof target[key] === 'object' &&\n target[key] !== null &&\n !Array.isArray(target[key])\n ) {\n result[key] = deepMerge(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>\n ) as T[Extract<keyof T, string>]\n } else {\n result[key] = source[key] as T[Extract<keyof T, string>]\n }\n }\n }\n\n return result\n}\n\nexport const Chart: React.FC<ChartProps> = ({\n type,\n series,\n width = '100%',\n height = 350,\n options = {},\n themed = true,\n className = '',\n}) => {\n const chartRef = useRef<HTMLDivElement>(null)\n const chartInstance = useRef<ApexCharts | null>(null)\n const [, setMounted] = useState(false)\n\n // Build final options\n const buildOptions = (): ApexOptions => {\n const baseOptions: ApexOptions = {\n chart: {\n type,\n width,\n height,\n },\n series,\n }\n\n if (themed) {\n const themedOpts = getThemedOptions()\n return deepMerge(deepMerge(baseOptions as unknown as Record<string, unknown>, themedOpts as unknown as Record<string, unknown>), options as unknown as Record<string, unknown>) as ApexOptions\n }\n\n return deepMerge(baseOptions as unknown as Record<string, unknown>, options as unknown as Record<string, unknown>) as ApexOptions\n }\n\n // Initialize chart\n useEffect(() => {\n if (!chartRef.current) return\n\n const opts = buildOptions()\n chartInstance.current = new ApexCharts(chartRef.current, opts)\n chartInstance.current.render()\n setMounted(true)\n\n return () => {\n if (chartInstance.current) {\n chartInstance.current.destroy()\n chartInstance.current = null\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update chart when props change\n useEffect(() => {\n if (!chartInstance.current) return\n\n const opts = buildOptions()\n chartInstance.current.updateOptions(opts, true, true)\n }, [type, series, width, height, options, themed]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Listen for theme changes\n useEffect(() => {\n if (!themed || typeof window === 'undefined') return\n\n const observer = new MutationObserver(() => {\n if (chartInstance.current) {\n const opts = buildOptions()\n chartInstance.current.updateOptions(opts, true, true)\n }\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme', 'class'],\n })\n\n return () => observer.disconnect()\n }, [themed]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={chartRef} className={className} />\n}\n"],"names":["getCssVar","varName","oklchToHex","oklch","match","l","c","hRad","a","b","l_","m_","s_","l3","m3","s3","r","g","bl","toSrgb","x","getThemeColors","value","getThemedOptions","colors","baseContentVar","textColor","base300Var","gridColor","textMatch","isDark","deepMerge","target","source","result","key","Chart","type","series","width","height","options","themed","className","chartRef","useRef","chartInstance","setMounted","useState","buildOptions","baseOptions","themedOpts","useEffect","opts","ApexCharts","observer","jsx"],"mappings":"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"}
package/dist/index17.js CHANGED
@@ -1,74 +1,8 @@
1
- import { jsxs as r, jsx as o } from "react/jsx-runtime";
2
- import { useState as f, useId as v, createContext as N, useContext as w } from "react";
3
- const d = N(null);
4
- function g({
5
- children: t,
6
- title: s,
7
- open: l,
8
- defaultOpen: u = !1,
9
- onChange: m,
10
- icon: C = "arrow",
11
- className: h = "",
12
- ...c
13
- }) {
14
- const [x, b] = f(u), e = l !== void 0 ? l : x, n = v(), a = () => {
15
- const p = !e;
16
- l === void 0 && b(p), m?.(p);
17
- }, i = [
18
- "collapse",
19
- "bg-base-200",
20
- {
21
- arrow: "collapse-arrow",
22
- plus: "collapse-plus",
23
- none: ""
24
- }[C],
25
- e && "collapse-open",
26
- !e && "collapse-close",
27
- h
28
- ].filter(Boolean).join(" ");
29
- return s !== void 0 ? /* @__PURE__ */ r("div", { className: i, "data-state": e ? "open" : "closed", ...c, children: [
30
- /* @__PURE__ */ o(
31
- "input",
32
- {
33
- type: "checkbox",
34
- id: n,
35
- className: "peer",
36
- checked: e,
37
- onChange: a,
38
- style: { position: "absolute", opacity: 0, pointerEvents: "none" }
39
- }
40
- ),
41
- /* @__PURE__ */ o("label", { htmlFor: n, className: "collapse-title text-xl font-medium", children: s }),
42
- /* @__PURE__ */ o("div", { className: "collapse-content", children: t })
43
- ] }) : /* @__PURE__ */ o(d.Provider, { value: { isOpen: e, toggle: a, checkboxId: n }, children: /* @__PURE__ */ r("div", { className: i, "data-state": e ? "open" : "closed", ...c, children: [
44
- /* @__PURE__ */ o(
45
- "input",
46
- {
47
- type: "checkbox",
48
- id: n,
49
- className: "peer",
50
- checked: e,
51
- onChange: a,
52
- style: { position: "absolute", opacity: 0, pointerEvents: "none" }
53
- }
54
- ),
55
- t
56
- ] }) });
57
- }
58
- function k({ children: t, className: s = "" }) {
59
- const l = w(d);
60
- if (!l)
61
- throw new Error("Collapse.Title must be used within Collapse");
62
- return /* @__PURE__ */ o("label", { htmlFor: l.checkboxId, className: `collapse-title text-xl font-medium ${s}`, children: t });
63
- }
64
- function y({ children: t, className: s = "" }) {
65
- return /* @__PURE__ */ o("div", { className: `collapse-content ${s}`, children: t });
66
- }
67
- const E = Object.assign(g, {
68
- Title: k,
69
- Content: y
70
- });
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ const o = ({ id: e, children: s, className: r = "", ...a }) => /* @__PURE__ */ t("div", { id: e, className: `carousel-item ${r}`, ...a, children: s }), l = ({ children: e, snap: s = "start", vertical: r = !1, className: a = "", ...c }) => /* @__PURE__ */ t("div", { className: `carousel ${s === "center" ? "carousel-center" : s === "end" ? "carousel-end" : ""} ${r ? "carousel-vertical" : ""} ${a}`.trim(), ...c, children: e });
3
+ l.Item = o;
71
4
  export {
72
- E as Collapse
5
+ l as Carousel,
6
+ o as CarouselItem
73
7
  };
74
8
  //# sourceMappingURL=index17.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index17.js","sources":["../src/components/Collapse.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useState } from 'react'\n\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onChange'> {\n children: React.ReactNode\n title?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onChange?: (open: boolean) => void\n icon?: 'arrow' | 'plus' | 'none'\n}\n\nexport interface CollapseTitleProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface CollapseContentProps {\n children: React.ReactNode\n className?: string\n}\n\ninterface CollapseContextValue {\n isOpen: boolean\n toggle: () => void\n checkboxId: string\n}\n\nconst CollapseContext = createContext<CollapseContextValue | null>(null)\n\nfunction CollapseRoot({\n children,\n title,\n open,\n defaultOpen = false,\n onChange,\n icon = 'arrow',\n className = '',\n ...rest\n}: CollapseProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isOpen = open !== undefined ? open : internalOpen\n const checkboxId = useId()\n\n const toggle = () => {\n const newOpen = !isOpen\n if (open === undefined) {\n setInternalOpen(newOpen)\n }\n onChange?.(newOpen)\n }\n\n const iconClasses = {\n arrow: 'collapse-arrow',\n plus: 'collapse-plus',\n none: '',\n }\n\n const classes = [\n 'collapse',\n 'bg-base-200',\n iconClasses[icon],\n isOpen && 'collapse-open',\n !isOpen && 'collapse-close',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // If title prop is provided, render with automatic structure\n if (title !== undefined) {\n return (\n <div className={classes} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n className=\"peer\"\n checked={isOpen}\n onChange={toggle}\n style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }}\n />\n <label htmlFor={checkboxId} className=\"collapse-title text-xl font-medium\">\n {title}\n </label>\n <div className=\"collapse-content\">{children}</div>\n </div>\n )\n }\n\n // Otherwise, use compound component pattern with Context\n return (\n <CollapseContext.Provider value={{ isOpen, toggle, checkboxId }}>\n <div className={classes} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n className=\"peer\"\n checked={isOpen}\n onChange={toggle}\n style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }}\n />\n {children}\n </div>\n </CollapseContext.Provider>\n )\n}\n\nfunction CollapseTitle({ children, className = '' }: CollapseTitleProps) {\n const context = useContext(CollapseContext)\n if (!context) {\n throw new Error('Collapse.Title must be used within Collapse')\n }\n\n return (\n <label htmlFor={context.checkboxId} className={`collapse-title text-xl font-medium ${className}`}>\n {children}\n </label>\n )\n}\n\nfunction CollapseContent({ children, className = '' }: CollapseContentProps) {\n return <div className={`collapse-content ${className}`}>{children}</div>\n}\n\nexport const Collapse = Object.assign(CollapseRoot, {\n Title: CollapseTitle,\n Content: CollapseContent,\n})\n"],"names":["CollapseContext","createContext","CollapseRoot","children","title","open","defaultOpen","onChange","icon","className","rest","internalOpen","setInternalOpen","useState","isOpen","checkboxId","useId","toggle","newOpen","classes","jsxs","jsx","CollapseTitle","context","useContext","CollapseContent","Collapse"],"mappings":";;AA2BA,MAAMA,IAAkBC,EAA2C,IAAI;AAEvE,SAASC,EAAa;AAAA,EACpB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAkB;AAChB,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAASP,CAAW,GACtDQ,IAAST,MAAS,SAAYA,IAAOM,GACrCI,IAAaC,EAAA,GAEbC,IAAS,MAAM;AACnB,UAAMC,IAAU,CAACJ;AACjB,IAAIT,MAAS,UACXO,EAAgBM,CAAO,GAEzBX,IAAWW,CAAO;AAAA,EACpB,GAQMC,IAAU;AAAA,IACd;AAAA,IACA;AAAA,IARkB;AAAA,MAClB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,EAMMX,CAAI;AAAA,IAChBM,KAAU;AAAA,IACV,CAACA,KAAU;AAAA,IACXL;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAGX,SAAIL,MAAU,SAEV,gBAAAgB,EAAC,SAAI,WAAWD,GAAS,cAAYL,IAAS,SAAS,UAAW,GAAGJ,GACnE,UAAA;AAAA,IAAA,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAIN;AAAA,QACJ,WAAU;AAAA,QACV,SAASD;AAAA,QACT,UAAUG;AAAA,QACV,OAAO,EAAE,UAAU,YAAY,SAAS,GAAG,eAAe,OAAA;AAAA,MAAO;AAAA,IAAA;AAAA,sBAElE,SAAA,EAAM,SAASF,GAAY,WAAU,sCACnC,UAAAX,GACH;AAAA,IACA,gBAAAiB,EAAC,OAAA,EAAI,WAAU,oBAAoB,UAAAlB,EAAA,CAAS;AAAA,EAAA,GAC9C,sBAMDH,EAAgB,UAAhB,EAAyB,OAAO,EAAE,QAAAc,GAAQ,QAAAG,GAAQ,YAAAF,EAAA,GACjD,UAAA,gBAAAK,EAAC,OAAA,EAAI,WAAWD,GAAS,cAAYL,IAAS,SAAS,UAAW,GAAGJ,GACnE,UAAA;AAAA,IAAA,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAIN;AAAA,QACJ,WAAU;AAAA,QACV,SAASD;AAAA,QACT,UAAUG;AAAA,QACV,OAAO,EAAE,UAAU,YAAY,SAAS,GAAG,eAAe,OAAA;AAAA,MAAO;AAAA,IAAA;AAAA,IAElEd;AAAA,EAAA,EAAA,CACH,EAAA,CACF;AAEJ;AAEA,SAASmB,EAAc,EAAE,UAAAnB,GAAU,WAAAM,IAAY,MAA0B;AACvE,QAAMc,IAAUC,EAAWxB,CAAe;AAC1C,MAAI,CAACuB;AACH,UAAM,IAAI,MAAM,6CAA6C;AAG/D,SACE,gBAAAF,EAAC,WAAM,SAASE,EAAQ,YAAY,WAAW,sCAAsCd,CAAS,IAC3F,UAAAN,EAAA,CACH;AAEJ;AAEA,SAASsB,EAAgB,EAAE,UAAAtB,GAAU,WAAAM,IAAY,MAA4B;AAC3E,2BAAQ,OAAA,EAAI,WAAW,oBAAoBA,CAAS,IAAK,UAAAN,GAAS;AACpE;AAEO,MAAMuB,IAAW,OAAO,OAAOxB,GAAc;AAAA,EAClD,OAAOoB;AAAA,EACP,SAASG;AACX,CAAC;"}
1
+ {"version":3,"file":"index17.js","sources":["../src/components/Carousel.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface CarouselItemProps extends React.HTMLAttributes<HTMLDivElement> {\n id?: string\n children: React.ReactNode\n}\n\nexport const CarouselItem: React.FC<CarouselItemProps> = ({ id, children, className = '', ...rest }) => {\n return (\n <div id={id} className={`carousel-item ${className}`} {...rest}>\n {children}\n </div>\n )\n}\n\nexport interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n snap?: 'start' | 'center' | 'end'\n vertical?: boolean\n}\n\nexport const Carousel: React.FC<CarouselProps> & {\n Item: typeof CarouselItem\n} = ({ children, snap = 'start', vertical = false, className = '', ...rest }) => {\n const snapClass = snap === 'center' ? 'carousel-center' : snap === 'end' ? 'carousel-end' : ''\n const directionClass = vertical ? 'carousel-vertical' : ''\n\n return (\n <div className={`carousel ${snapClass} ${directionClass} ${className}`.trim()} {...rest}>\n {children}\n </div>\n )\n}\n\nCarousel.Item = CarouselItem\n"],"names":["CarouselItem","id","children","className","rest","jsx","Carousel","snap","vertical"],"mappings":";AAOO,MAAMA,IAA4C,CAAC,EAAE,IAAAC,GAAI,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,QAEzF,gBAAAC,EAAC,SAAI,IAAAJ,GAAQ,WAAW,iBAAiBE,CAAS,IAAK,GAAGC,GACvD,UAAAF,EAAA,CACH,GAUSI,IAET,CAAC,EAAE,UAAAJ,GAAU,MAAAK,IAAO,SAAS,UAAAC,IAAW,IAAO,WAAAL,IAAY,IAAI,GAAGC,EAAA,MAKlE,gBAAAC,EAAC,OAAA,EAAI,WAAW,YAJAE,MAAS,WAAW,oBAAoBA,MAAS,QAAQ,iBAAiB,EAIrD,IAHhBC,IAAW,sBAAsB,EAGC,IAAIL,CAAS,GAAG,KAAA,GAAS,GAAGC,GAChF,UAAAF,GACH;AAIJI,EAAS,OAAON;"}
package/dist/index18.js CHANGED
@@ -1,28 +1,74 @@
1
- import { jsx as n } from "react/jsx-runtime";
2
- const o = {
3
- sm: "max-w-screen-sm",
4
- md: "max-w-screen-md",
5
- lg: "max-w-screen-lg",
6
- xl: "max-w-screen-xl",
7
- "2xl": "max-w-screen-2xl",
8
- full: "max-w-full"
9
- }, c = ({
10
- children: e,
11
- size: s = "xl",
12
- centered: l = !0,
13
- padding: x = !0,
14
- className: m = "",
15
- ...r
16
- }) => {
17
- const a = [
18
- o[s],
19
- l && "mx-auto",
20
- x && "px-4 sm:px-6 lg:px-8",
21
- m
1
+ import { jsxs as r, jsx as o } from "react/jsx-runtime";
2
+ import { useState as f, useId as v, createContext as N, useContext as w } from "react";
3
+ const d = N(null);
4
+ function g({
5
+ children: t,
6
+ title: s,
7
+ open: l,
8
+ defaultOpen: u = !1,
9
+ onChange: m,
10
+ icon: C = "arrow",
11
+ className: h = "",
12
+ ...c
13
+ }) {
14
+ const [x, b] = f(u), e = l !== void 0 ? l : x, n = v(), a = () => {
15
+ const p = !e;
16
+ l === void 0 && b(p), m?.(p);
17
+ }, i = [
18
+ "collapse",
19
+ "bg-base-200",
20
+ {
21
+ arrow: "collapse-arrow",
22
+ plus: "collapse-plus",
23
+ none: ""
24
+ }[C],
25
+ e && "collapse-open",
26
+ !e && "collapse-close",
27
+ h
22
28
  ].filter(Boolean).join(" ");
23
- return /* @__PURE__ */ n("div", { className: a, ...r, children: e });
24
- };
29
+ return s !== void 0 ? /* @__PURE__ */ r("div", { className: i, "data-state": e ? "open" : "closed", ...c, children: [
30
+ /* @__PURE__ */ o(
31
+ "input",
32
+ {
33
+ type: "checkbox",
34
+ id: n,
35
+ className: "peer",
36
+ checked: e,
37
+ onChange: a,
38
+ style: { position: "absolute", opacity: 0, pointerEvents: "none" }
39
+ }
40
+ ),
41
+ /* @__PURE__ */ o("label", { htmlFor: n, className: "collapse-title text-xl font-medium", children: s }),
42
+ /* @__PURE__ */ o("div", { className: "collapse-content", children: t })
43
+ ] }) : /* @__PURE__ */ o(d.Provider, { value: { isOpen: e, toggle: a, checkboxId: n }, children: /* @__PURE__ */ r("div", { className: i, "data-state": e ? "open" : "closed", ...c, children: [
44
+ /* @__PURE__ */ o(
45
+ "input",
46
+ {
47
+ type: "checkbox",
48
+ id: n,
49
+ className: "peer",
50
+ checked: e,
51
+ onChange: a,
52
+ style: { position: "absolute", opacity: 0, pointerEvents: "none" }
53
+ }
54
+ ),
55
+ t
56
+ ] }) });
57
+ }
58
+ function k({ children: t, className: s = "" }) {
59
+ const l = w(d);
60
+ if (!l)
61
+ throw new Error("Collapse.Title must be used within Collapse");
62
+ return /* @__PURE__ */ o("label", { htmlFor: l.checkboxId, className: `collapse-title text-xl font-medium ${s}`, children: t });
63
+ }
64
+ function y({ children: t, className: s = "" }) {
65
+ return /* @__PURE__ */ o("div", { className: `collapse-content ${s}`, children: t });
66
+ }
67
+ const E = Object.assign(g, {
68
+ Title: k,
69
+ Content: y
70
+ });
25
71
  export {
26
- c as Container
72
+ E as Collapse
27
73
  };
28
74
  //# sourceMappingURL=index18.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index18.js","sources":["../src/components/Container.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Container content */\n children: React.ReactNode\n /** Max width size */\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'\n /** Center container horizontally */\n centered?: boolean\n /** Add horizontal padding */\n padding?: boolean\n}\n\nconst sizeClasses: Record<string, string> = {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full',\n}\n\nexport const Container: React.FC<ContainerProps> = ({\n children,\n size = 'xl',\n centered = true,\n padding = true,\n className = '',\n ...rest\n}) => {\n const classes = [\n sizeClasses[size],\n centered && 'mx-auto',\n padding && 'px-4 sm:px-6 lg:px-8',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <div className={classes} {...rest}>{children}</div>\n}\n"],"names":["sizeClasses","Container","children","size","centered","padding","className","rest","classes"],"mappings":";AAaA,MAAMA,IAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AACR,GAEaC,IAAsC,CAAC;AAAA,EAClD,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAU;AAAA,IACdR,EAAYG,CAAI;AAAA,IAChBC,KAAY;AAAA,IACZC,KAAW;AAAA,IACXC;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BAAQ,OAAA,EAAI,WAAWE,GAAU,GAAGD,GAAO,UAAAL,GAAS;AACtD;"}
1
+ {"version":3,"file":"index18.js","sources":["../src/components/Collapse.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useState } from 'react'\n\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onChange'> {\n children: React.ReactNode\n title?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onChange?: (open: boolean) => void\n icon?: 'arrow' | 'plus' | 'none'\n}\n\nexport interface CollapseTitleProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface CollapseContentProps {\n children: React.ReactNode\n className?: string\n}\n\ninterface CollapseContextValue {\n isOpen: boolean\n toggle: () => void\n checkboxId: string\n}\n\nconst CollapseContext = createContext<CollapseContextValue | null>(null)\n\nfunction CollapseRoot({\n children,\n title,\n open,\n defaultOpen = false,\n onChange,\n icon = 'arrow',\n className = '',\n ...rest\n}: CollapseProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isOpen = open !== undefined ? open : internalOpen\n const checkboxId = useId()\n\n const toggle = () => {\n const newOpen = !isOpen\n if (open === undefined) {\n setInternalOpen(newOpen)\n }\n onChange?.(newOpen)\n }\n\n const iconClasses = {\n arrow: 'collapse-arrow',\n plus: 'collapse-plus',\n none: '',\n }\n\n const classes = [\n 'collapse',\n 'bg-base-200',\n iconClasses[icon],\n isOpen && 'collapse-open',\n !isOpen && 'collapse-close',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // If title prop is provided, render with automatic structure\n if (title !== undefined) {\n return (\n <div className={classes} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n className=\"peer\"\n checked={isOpen}\n onChange={toggle}\n style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }}\n />\n <label htmlFor={checkboxId} className=\"collapse-title text-xl font-medium\">\n {title}\n </label>\n <div className=\"collapse-content\">{children}</div>\n </div>\n )\n }\n\n // Otherwise, use compound component pattern with Context\n return (\n <CollapseContext.Provider value={{ isOpen, toggle, checkboxId }}>\n <div className={classes} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n className=\"peer\"\n checked={isOpen}\n onChange={toggle}\n style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }}\n />\n {children}\n </div>\n </CollapseContext.Provider>\n )\n}\n\nfunction CollapseTitle({ children, className = '' }: CollapseTitleProps) {\n const context = useContext(CollapseContext)\n if (!context) {\n throw new Error('Collapse.Title must be used within Collapse')\n }\n\n return (\n <label htmlFor={context.checkboxId} className={`collapse-title text-xl font-medium ${className}`}>\n {children}\n </label>\n )\n}\n\nfunction CollapseContent({ children, className = '' }: CollapseContentProps) {\n return <div className={`collapse-content ${className}`}>{children}</div>\n}\n\nexport const Collapse = Object.assign(CollapseRoot, {\n Title: CollapseTitle,\n Content: CollapseContent,\n})\n"],"names":["CollapseContext","createContext","CollapseRoot","children","title","open","defaultOpen","onChange","icon","className","rest","internalOpen","setInternalOpen","useState","isOpen","checkboxId","useId","toggle","newOpen","classes","jsxs","jsx","CollapseTitle","context","useContext","CollapseContent","Collapse"],"mappings":";;AA2BA,MAAMA,IAAkBC,EAA2C,IAAI;AAEvE,SAASC,EAAa;AAAA,EACpB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAkB;AAChB,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAASP,CAAW,GACtDQ,IAAST,MAAS,SAAYA,IAAOM,GACrCI,IAAaC,EAAA,GAEbC,IAAS,MAAM;AACnB,UAAMC,IAAU,CAACJ;AACjB,IAAIT,MAAS,UACXO,EAAgBM,CAAO,GAEzBX,IAAWW,CAAO;AAAA,EACpB,GAQMC,IAAU;AAAA,IACd;AAAA,IACA;AAAA,IARkB;AAAA,MAClB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,IAAA,EAMMX,CAAI;AAAA,IAChBM,KAAU;AAAA,IACV,CAACA,KAAU;AAAA,IACXL;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAGX,SAAIL,MAAU,SAEV,gBAAAgB,EAAC,SAAI,WAAWD,GAAS,cAAYL,IAAS,SAAS,UAAW,GAAGJ,GACnE,UAAA;AAAA,IAAA,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAIN;AAAA,QACJ,WAAU;AAAA,QACV,SAASD;AAAA,QACT,UAAUG;AAAA,QACV,OAAO,EAAE,UAAU,YAAY,SAAS,GAAG,eAAe,OAAA;AAAA,MAAO;AAAA,IAAA;AAAA,sBAElE,SAAA,EAAM,SAASF,GAAY,WAAU,sCACnC,UAAAX,GACH;AAAA,IACA,gBAAAiB,EAAC,OAAA,EAAI,WAAU,oBAAoB,UAAAlB,EAAA,CAAS;AAAA,EAAA,GAC9C,sBAMDH,EAAgB,UAAhB,EAAyB,OAAO,EAAE,QAAAc,GAAQ,QAAAG,GAAQ,YAAAF,EAAA,GACjD,UAAA,gBAAAK,EAAC,OAAA,EAAI,WAAWD,GAAS,cAAYL,IAAS,SAAS,UAAW,GAAGJ,GACnE,UAAA;AAAA,IAAA,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,IAAIN;AAAA,QACJ,WAAU;AAAA,QACV,SAASD;AAAA,QACT,UAAUG;AAAA,QACV,OAAO,EAAE,UAAU,YAAY,SAAS,GAAG,eAAe,OAAA;AAAA,MAAO;AAAA,IAAA;AAAA,IAElEd;AAAA,EAAA,EAAA,CACH,EAAA,CACF;AAEJ;AAEA,SAASmB,EAAc,EAAE,UAAAnB,GAAU,WAAAM,IAAY,MAA0B;AACvE,QAAMc,IAAUC,EAAWxB,CAAe;AAC1C,MAAI,CAACuB;AACH,UAAM,IAAI,MAAM,6CAA6C;AAG/D,SACE,gBAAAF,EAAC,WAAM,SAASE,EAAQ,YAAY,WAAW,sCAAsCd,CAAS,IAC3F,UAAAN,EAAA,CACH;AAEJ;AAEA,SAASsB,EAAgB,EAAE,UAAAtB,GAAU,WAAAM,IAAY,MAA4B;AAC3E,2BAAQ,OAAA,EAAI,WAAW,oBAAoBA,CAAS,IAAK,UAAAN,GAAS;AACpE;AAEO,MAAMuB,IAAW,OAAO,OAAOxB,GAAc;AAAA,EAClD,OAAOoB;AAAA,EACP,SAASG;AACX,CAAC;"}