asterui 0.12.48 → 0.12.50

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 (201) hide show
  1. package/dist/components/Alert.js +18 -18
  2. package/dist/components/Alert.js.map +1 -1
  3. package/dist/components/Anchor.js +53 -53
  4. package/dist/components/Anchor.js.map +1 -1
  5. package/dist/components/Autocomplete.js +115 -114
  6. package/dist/components/Autocomplete.js.map +1 -1
  7. package/dist/components/Avatar.js +33 -32
  8. package/dist/components/Avatar.js.map +1 -1
  9. package/dist/components/Badge.js +99 -99
  10. package/dist/components/Badge.js.map +1 -1
  11. package/dist/components/Breadcrumb.js +12 -11
  12. package/dist/components/Breadcrumb.js.map +1 -1
  13. package/dist/components/Browser.js +10 -10
  14. package/dist/components/Browser.js.map +1 -1
  15. package/dist/components/Button.js +80 -79
  16. package/dist/components/Button.js.map +1 -1
  17. package/dist/components/Card.d.ts +2 -0
  18. package/dist/components/Card.js +111 -110
  19. package/dist/components/Card.js.map +1 -1
  20. package/dist/components/Carousel.js +59 -59
  21. package/dist/components/Carousel.js.map +1 -1
  22. package/dist/components/Cascader.js +175 -174
  23. package/dist/components/Cascader.js.map +1 -1
  24. package/dist/components/Chat.js +27 -27
  25. package/dist/components/Chat.js.map +1 -1
  26. package/dist/components/Checkbox.js +98 -97
  27. package/dist/components/Checkbox.js.map +1 -1
  28. package/dist/components/Code.js +11 -11
  29. package/dist/components/Code.js.map +1 -1
  30. package/dist/components/Collapse.js +46 -46
  31. package/dist/components/Collapse.js.map +1 -1
  32. package/dist/components/ColorPicker.d.ts +1 -1
  33. package/dist/components/ColorPicker.js +93 -91
  34. package/dist/components/ColorPicker.js.map +1 -1
  35. package/dist/components/Command.d.ts +65 -0
  36. package/dist/components/Command.js +422 -0
  37. package/dist/components/Command.js.map +1 -0
  38. package/dist/components/ConfigProvider.d.ts +1 -1
  39. package/dist/components/ConfigProvider.js +9 -9
  40. package/dist/components/ConfigProvider.js.map +1 -1
  41. package/dist/components/ContextMenu.js +33 -33
  42. package/dist/components/ContextMenu.js.map +1 -1
  43. package/dist/components/CopyButton.js +74 -73
  44. package/dist/components/CopyButton.js.map +1 -1
  45. package/dist/components/Countdown.js +60 -59
  46. package/dist/components/Countdown.js.map +1 -1
  47. package/dist/components/DatePicker.d.ts +1 -1
  48. package/dist/components/DatePicker.js +54 -53
  49. package/dist/components/DatePicker.js.map +1 -1
  50. package/dist/components/Diff.js +10 -10
  51. package/dist/components/Diff.js.map +1 -1
  52. package/dist/components/Divider.js +21 -20
  53. package/dist/components/Divider.js.map +1 -1
  54. package/dist/components/Dock.js +28 -27
  55. package/dist/components/Dock.js.map +1 -1
  56. package/dist/components/Drawer.js +43 -43
  57. package/dist/components/Drawer.js.map +1 -1
  58. package/dist/components/Dropdown.js +127 -127
  59. package/dist/components/Dropdown.js.map +1 -1
  60. package/dist/components/Empty.js +16 -15
  61. package/dist/components/Empty.js.map +1 -1
  62. package/dist/components/Fieldset.js +11 -10
  63. package/dist/components/Fieldset.js.map +1 -1
  64. package/dist/components/FileInput.js +30 -29
  65. package/dist/components/FileInput.js.map +1 -1
  66. package/dist/components/Filter.d.ts +1 -1
  67. package/dist/components/Filter.js +32 -30
  68. package/dist/components/Filter.js.map +1 -1
  69. package/dist/components/FloatButton.js +83 -83
  70. package/dist/components/FloatButton.js.map +1 -1
  71. package/dist/components/Footer.js +14 -13
  72. package/dist/components/Footer.js.map +1 -1
  73. package/dist/components/Form.js +133 -132
  74. package/dist/components/Form.js.map +1 -1
  75. package/dist/components/Hero.js +12 -11
  76. package/dist/components/Hero.js.map +1 -1
  77. package/dist/components/HoverGallery.js +7 -7
  78. package/dist/components/HoverGallery.js.map +1 -1
  79. package/dist/components/Image.js +40 -40
  80. package/dist/components/Image.js.map +1 -1
  81. package/dist/components/Input.js +171 -169
  82. package/dist/components/Input.js.map +1 -1
  83. package/dist/components/InputNumber.js +84 -83
  84. package/dist/components/InputNumber.js.map +1 -1
  85. package/dist/components/Join.js +11 -10
  86. package/dist/components/Join.js.map +1 -1
  87. package/dist/components/Kbd.js +15 -15
  88. package/dist/components/Kbd.js.map +1 -1
  89. package/dist/components/Layout.js +66 -66
  90. package/dist/components/Layout.js.map +1 -1
  91. package/dist/components/List.d.ts +1 -1
  92. package/dist/components/List.js +75 -72
  93. package/dist/components/List.js.map +1 -1
  94. package/dist/components/Loading.d.ts +1 -1
  95. package/dist/components/Loading.js +31 -29
  96. package/dist/components/Loading.js.map +1 -1
  97. package/dist/components/Mask.js +31 -31
  98. package/dist/components/Mask.js.map +1 -1
  99. package/dist/components/Mention.js +61 -61
  100. package/dist/components/Mention.js.map +1 -1
  101. package/dist/components/Menu.js +84 -84
  102. package/dist/components/Menu.js.map +1 -1
  103. package/dist/components/Message.js +30 -29
  104. package/dist/components/Message.js.map +1 -1
  105. package/dist/components/Modal.js +117 -116
  106. package/dist/components/Modal.js.map +1 -1
  107. package/dist/components/MonthCalendar.d.ts +31 -0
  108. package/dist/components/MonthCalendar.js +205 -0
  109. package/dist/components/MonthCalendar.js.map +1 -0
  110. package/dist/components/Navbar.js +25 -25
  111. package/dist/components/Navbar.js.map +1 -1
  112. package/dist/components/Notification.js +56 -55
  113. package/dist/components/Notification.js.map +1 -1
  114. package/dist/components/OTPInput.js +69 -68
  115. package/dist/components/OTPInput.js.map +1 -1
  116. package/dist/components/Pagination.d.ts +1 -1
  117. package/dist/components/Pagination.js +60 -58
  118. package/dist/components/Pagination.js.map +1 -1
  119. package/dist/components/Phone.js +10 -10
  120. package/dist/components/Phone.js.map +1 -1
  121. package/dist/components/Popconfirm.js +60 -60
  122. package/dist/components/Popconfirm.js.map +1 -1
  123. package/dist/components/Progress.js +17 -17
  124. package/dist/components/Progress.js.map +1 -1
  125. package/dist/components/QRCode.js +23 -23
  126. package/dist/components/QRCode.js.map +1 -1
  127. package/dist/components/RadialProgress.js +17 -17
  128. package/dist/components/RadialProgress.js.map +1 -1
  129. package/dist/components/Radio.js +41 -40
  130. package/dist/components/Radio.js.map +1 -1
  131. package/dist/components/Range.d.ts +1 -1
  132. package/dist/components/Range.js +39 -37
  133. package/dist/components/Range.js.map +1 -1
  134. package/dist/components/Rating.js +79 -78
  135. package/dist/components/Rating.js.map +1 -1
  136. package/dist/components/ResponsiveDrawer.js +27 -27
  137. package/dist/components/ResponsiveDrawer.js.map +1 -1
  138. package/dist/components/RichTextEditor.d.ts +32 -0
  139. package/dist/components/RichTextEditor.js +335 -0
  140. package/dist/components/RichTextEditor.js.map +1 -0
  141. package/dist/components/Segmented.d.ts +1 -1
  142. package/dist/components/Segmented.js +48 -46
  143. package/dist/components/Segmented.js.map +1 -1
  144. package/dist/components/Select.js +55 -54
  145. package/dist/components/Select.js.map +1 -1
  146. package/dist/components/Skeleton.js +9 -9
  147. package/dist/components/Skeleton.js.map +1 -1
  148. package/dist/components/Splitter.js +93 -93
  149. package/dist/components/Splitter.js.map +1 -1
  150. package/dist/components/Stat.js +17 -16
  151. package/dist/components/Stat.js.map +1 -1
  152. package/dist/components/Status.js +29 -29
  153. package/dist/components/Status.js.map +1 -1
  154. package/dist/components/Steps.js +61 -61
  155. package/dist/components/Steps.js.map +1 -1
  156. package/dist/components/Table.js +256 -256
  157. package/dist/components/Table.js.map +1 -1
  158. package/dist/components/Tabs.js +65 -65
  159. package/dist/components/Tabs.js.map +1 -1
  160. package/dist/components/Tag.js +147 -147
  161. package/dist/components/Tag.js.map +1 -1
  162. package/dist/components/TextRotate.js +6 -6
  163. package/dist/components/TextRotate.js.map +1 -1
  164. package/dist/components/Textarea.js +35 -34
  165. package/dist/components/Textarea.js.map +1 -1
  166. package/dist/components/ThemeController.d.ts +1 -1
  167. package/dist/components/ThemeController.js +71 -68
  168. package/dist/components/ThemeController.js.map +1 -1
  169. package/dist/components/TimePicker.d.ts +1 -1
  170. package/dist/components/TimePicker.js +133 -129
  171. package/dist/components/TimePicker.js.map +1 -1
  172. package/dist/components/Timeline.js +79 -79
  173. package/dist/components/Timeline.js.map +1 -1
  174. package/dist/components/Toggle.js +33 -32
  175. package/dist/components/Toggle.js.map +1 -1
  176. package/dist/components/Tooltip.js +25 -25
  177. package/dist/components/Tooltip.js.map +1 -1
  178. package/dist/components/Tour.js +126 -126
  179. package/dist/components/Tour.js.map +1 -1
  180. package/dist/components/Transfer.js +93 -92
  181. package/dist/components/Transfer.js.map +1 -1
  182. package/dist/components/Tree.js +200 -200
  183. package/dist/components/Tree.js.map +1 -1
  184. package/dist/components/TreeSelect.js +255 -254
  185. package/dist/components/TreeSelect.js.map +1 -1
  186. package/dist/components/Typography.js +71 -70
  187. package/dist/components/Typography.js.map +1 -1
  188. package/dist/components/Upload.js +81 -81
  189. package/dist/components/Upload.js.map +1 -1
  190. package/dist/components/WeekCalendar.d.ts +35 -0
  191. package/dist/components/WeekCalendar.js +204 -0
  192. package/dist/components/WeekCalendar.js.map +1 -0
  193. package/dist/components/Window.js +7 -7
  194. package/dist/components/Window.js.map +1 -1
  195. package/dist/editor.d.ts +1 -0
  196. package/dist/editor.js +5 -0
  197. package/dist/editor.js.map +1 -0
  198. package/dist/index.d.ts +6 -0
  199. package/dist/index.js +221 -215
  200. package/dist/index.js.map +1 -1
  201. package/package.json +30 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Layout.js","sources":["../../src/components/Layout.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useEffect, forwardRef } from 'react'\n\nexport type SiderTheme = 'light' | 'dark'\nexport type SiderCollapsedType = 'clickTrigger' | 'responsive'\n\nexport interface LayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Whether contains Sider (auto-detected if not specified) */\n hasSider?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutHeaderProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutFooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutContentProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutSiderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {\n children: React.ReactNode\n /** Width of the sider */\n width?: number | string\n /** Width when collapsed */\n collapsedWidth?: number | string\n /** Controlled collapsed state */\n collapsed?: boolean\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean\n /** Whether can be collapsed */\n collapsible?: boolean\n /** Callback when collapse state changes */\n onCollapse?: (collapsed: boolean, type: SiderCollapsedType) => void\n /** Custom trigger element (null to hide) */\n trigger?: React.ReactNode | null\n /** Responsive breakpoint for auto-collapse */\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n /** Callback when breakpoint is crossed */\n onBreakpoint?: (broken: boolean) => void\n /** Reverse direction of arrow (for right-side sider) */\n reverseArrow?: boolean\n /** Color theme of the sider */\n theme?: SiderTheme\n /** Style for zero-width trigger */\n zeroWidthTriggerStyle?: React.CSSProperties\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\ninterface SiderContextValue {\n collapsed: boolean\n collapsedWidth: number | string\n width: number | string\n}\n\nconst SiderContext = createContext<SiderContextValue | null>(null)\n\nexport function useSiderContext() {\n return useContext(SiderContext)\n}\n\nconst LayoutRoot = forwardRef<HTMLDivElement, LayoutProps>(\n ({ children, hasSider: hasSiderProp, className = '', 'data-testid': testId, ...rest }, ref) => {\n // Check if any child is a Sider to determine flex direction\n const childArray = React.Children.toArray(children)\n const hasSiderDetected = childArray.some(\n (child) => React.isValidElement(child) && (child.type as any).displayName === 'LayoutSider'\n )\n const hasSider = hasSiderProp ?? hasSiderDetected\n\n const layoutClasses = [\n 'flex',\n 'min-h-0',\n hasSider ? 'flex-row' : 'flex-col',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // If we have a Sider, auto-add flex-1 to non-Sider Layout children\n const processedChildren = hasSider\n ? childArray.map((child) => {\n if (\n React.isValidElement(child) &&\n (child.type === LayoutRoot || (child.type as any).displayName === 'LayoutRoot') &&\n (child.type as any).displayName !== 'LayoutSider'\n ) {\n // Clone the Layout child and add flex-1 if not already present\n const existingClassName = (child.props as any).className || ''\n if (!existingClassName.includes('flex-1')) {\n return React.cloneElement(child as React.ReactElement<any>, {\n className: `flex-1 ${existingClassName}`.trim(),\n })\n }\n }\n return child\n })\n : children\n\n return (\n <div ref={ref} className={layoutClasses} data-testid={testId} {...rest}>\n {processedChildren}\n </div>\n )\n }\n)\n\nLayoutRoot.displayName = 'LayoutRoot'\n\nconst LayoutHeader = forwardRef<HTMLElement, LayoutHeaderProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n const headerClasses = [\n 'flex',\n 'items-center',\n 'px-6',\n 'h-16',\n 'bg-base-300',\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <header ref={ref} className={headerClasses} data-testid={testId} {...rest}>\n {children}\n </header>\n )\n }\n)\n\nLayoutHeader.displayName = 'LayoutHeader'\n\nconst LayoutFooter = forwardRef<HTMLElement, LayoutFooterProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n const footerClasses = [\n 'px-6',\n 'py-4',\n 'text-center',\n 'bg-base-300',\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <footer ref={ref} className={footerClasses} data-testid={testId} {...rest}>\n {children}\n </footer>\n )\n }\n)\n\nLayoutFooter.displayName = 'LayoutFooter'\n\nconst LayoutContent = forwardRef<HTMLElement, LayoutContentProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n // flex-1 by default so Content fills available space\n const contentClasses = ['flex-1', 'min-h-0', 'overflow-auto', className].filter(Boolean).join(' ')\n\n return (\n <main ref={ref} className={contentClasses} data-testid={testId} {...rest}>\n {children}\n </main>\n )\n }\n)\n\nLayoutContent.displayName = 'LayoutContent'\n\nconst BREAKPOINT_MAP: Record<string, string> = {\n sm: '(max-width: 639px)',\n md: '(max-width: 767px)',\n lg: '(max-width: 1023px)',\n xl: '(max-width: 1279px)',\n '2xl': '(max-width: 1535px)',\n}\n\nconst LayoutSider = forwardRef<HTMLElement, LayoutSiderProps>(\n (\n {\n children,\n width = 200,\n collapsedWidth = 80,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n collapsible = false,\n onCollapse,\n trigger,\n breakpoint,\n onBreakpoint,\n reverseArrow = false,\n theme = 'dark',\n zeroWidthTriggerStyle,\n className = '',\n style,\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed)\n const [broken, setBroken] = useState(false)\n\n const collapsed = controlledCollapsed ?? internalCollapsed\n\n // Handle responsive breakpoint\n useEffect(() => {\n if (!breakpoint) return\n\n const mediaQuery = window.matchMedia(BREAKPOINT_MAP[breakpoint])\n\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n const isBroken = e.matches\n setBroken(isBroken)\n onBreakpoint?.(isBroken)\n\n // Auto-collapse when breakpoint is crossed\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(isBroken)\n }\n if (isBroken !== broken) {\n onCollapse?.(isBroken, 'responsive')\n }\n }\n\n // Check initial state\n handleChange(mediaQuery)\n\n // Listen for changes\n mediaQuery.addEventListener('change', handleChange)\n return () => mediaQuery.removeEventListener('change', handleChange)\n }, [breakpoint, onBreakpoint, controlledCollapsed, onCollapse, broken])\n\n const handleCollapse = useCallback(() => {\n const newCollapsed = !collapsed\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(newCollapsed)\n }\n onCollapse?.(newCollapsed, 'clickTrigger')\n }, [collapsed, controlledCollapsed, onCollapse])\n\n const currentWidth = collapsed ? collapsedWidth : width\n const isZeroWidth = currentWidth === 0 || currentWidth === '0' || currentWidth === '0px'\n\n const themeClasses: Record<SiderTheme, string> = {\n light: 'bg-base-100',\n dark: 'bg-base-200',\n }\n\n const siderClasses = [\n 'flex',\n 'flex-col',\n themeClasses[theme],\n 'flex-shrink-0',\n 'transition-all',\n 'duration-200',\n 'relative',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Determine arrow rotation based on collapsed state and reverseArrow prop\n const getArrowRotation = () => {\n if (reverseArrow) {\n return collapsed ? '' : 'rotate-180'\n }\n return collapsed ? 'rotate-180' : ''\n }\n\n const defaultTrigger = collapsible && trigger !== null && (\n <button\n onClick={handleCollapse}\n className=\"flex items-center justify-center h-10 w-full bg-base-300 hover:bg-base-content/10 transition-colors\"\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n data-testid={testId ? `${testId}-trigger` : undefined}\n >\n <svg\n className={`w-4 h-4 transition-transform ${getArrowRotation()}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )\n\n // Zero-width trigger (floating button when sider is collapsed to 0)\n const zeroWidthTrigger = collapsible && isZeroWidth && collapsed && (\n <button\n onClick={handleCollapse}\n className=\"absolute top-1/2 -translate-y-1/2 right-0 translate-x-full w-6 h-12 flex items-center justify-center bg-base-300 hover:bg-base-content/10 transition-colors rounded-r z-10\"\n aria-label=\"Expand sidebar\"\n style={zeroWidthTriggerStyle}\n data-testid={testId ? `${testId}-zero-trigger` : undefined}\n >\n <svg\n className={`w-3 h-3 ${reverseArrow ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )\n\n return (\n <SiderContext.Provider value={{ collapsed, collapsedWidth, width }}>\n <aside\n ref={ref}\n className={siderClasses}\n style={{\n width: typeof currentWidth === 'number' ? `${currentWidth}px` : currentWidth,\n ...style,\n }}\n data-collapsed={collapsed}\n data-theme={theme}\n data-testid={testId}\n aria-expanded={!collapsed}\n {...rest}\n >\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {!isZeroWidth && trigger !== null && (trigger ?? defaultTrigger)}\n {zeroWidthTrigger}\n </aside>\n </SiderContext.Provider>\n )\n }\n)\n\nLayoutSider.displayName = 'LayoutSider'\n\nexport const Layout = Object.assign(LayoutRoot, {\n Header: LayoutHeader,\n Footer: LayoutFooter,\n Content: LayoutContent,\n Sider: LayoutSider,\n})\n"],"names":["SiderContext","createContext","useSiderContext","useContext","LayoutRoot","forwardRef","children","hasSiderProp","className","testId","rest","ref","childArray","React","hasSiderDetected","child","hasSider","layoutClasses","processedChildren","existingClassName","jsx","LayoutHeader","headerClasses","LayoutFooter","footerClasses","LayoutContent","contentClasses","BREAKPOINT_MAP","LayoutSider","width","collapsedWidth","controlledCollapsed","defaultCollapsed","collapsible","onCollapse","trigger","breakpoint","onBreakpoint","reverseArrow","theme","zeroWidthTriggerStyle","style","internalCollapsed","setInternalCollapsed","useState","broken","setBroken","collapsed","useEffect","mediaQuery","handleChange","e","isBroken","handleCollapse","useCallback","newCollapsed","currentWidth","isZeroWidth","siderClasses","getArrowRotation","defaultTrigger","zeroWidthTrigger","jsxs","Layout"],"mappings":"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"}
1
+ {"version":3,"file":"Layout.js","sources":["../../src/components/Layout.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useEffect, forwardRef } from 'react'\n\n// DaisyUI classes\nconst dBgBase100 = 'bg-base-100'\nconst dBgBase200 = 'bg-base-200'\nconst dBgBase300 = 'bg-base-300'\n\nexport type SiderTheme = 'light' | 'dark'\nexport type SiderCollapsedType = 'clickTrigger' | 'responsive'\n\nexport interface LayoutProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Whether contains Sider (auto-detected if not specified) */\n hasSider?: boolean\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutHeaderProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutFooterProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutContentProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport interface LayoutSiderProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {\n children: React.ReactNode\n /** Width of the sider */\n width?: number | string\n /** Width when collapsed */\n collapsedWidth?: number | string\n /** Controlled collapsed state */\n collapsed?: boolean\n /** Initial collapsed state (uncontrolled) */\n defaultCollapsed?: boolean\n /** Whether can be collapsed */\n collapsible?: boolean\n /** Callback when collapse state changes */\n onCollapse?: (collapsed: boolean, type: SiderCollapsedType) => void\n /** Custom trigger element (null to hide) */\n trigger?: React.ReactNode | null\n /** Responsive breakpoint for auto-collapse */\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n /** Callback when breakpoint is crossed */\n onBreakpoint?: (broken: boolean) => void\n /** Reverse direction of arrow (for right-side sider) */\n reverseArrow?: boolean\n /** Color theme of the sider */\n theme?: SiderTheme\n /** Style for zero-width trigger */\n zeroWidthTriggerStyle?: React.CSSProperties\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\ninterface SiderContextValue {\n collapsed: boolean\n collapsedWidth: number | string\n width: number | string\n}\n\nconst SiderContext = createContext<SiderContextValue | null>(null)\n\nexport function useSiderContext() {\n return useContext(SiderContext)\n}\n\nconst LayoutRoot = forwardRef<HTMLDivElement, LayoutProps>(\n ({ children, hasSider: hasSiderProp, className = '', 'data-testid': testId, ...rest }, ref) => {\n // Check if any child is a Sider to determine flex direction\n const childArray = React.Children.toArray(children)\n const hasSiderDetected = childArray.some(\n (child) => React.isValidElement(child) && (child.type as any).displayName === 'LayoutSider'\n )\n const hasSider = hasSiderProp ?? hasSiderDetected\n\n const layoutClasses = [\n 'flex',\n 'min-h-0',\n hasSider ? 'flex-row' : 'flex-col',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // If we have a Sider, auto-add flex-1 to non-Sider Layout children\n const processedChildren = hasSider\n ? childArray.map((child) => {\n if (\n React.isValidElement(child) &&\n (child.type === LayoutRoot || (child.type as any).displayName === 'LayoutRoot') &&\n (child.type as any).displayName !== 'LayoutSider'\n ) {\n // Clone the Layout child and add flex-1 if not already present\n const existingClassName = (child.props as any).className || ''\n if (!existingClassName.includes('flex-1')) {\n return React.cloneElement(child as React.ReactElement<any>, {\n className: `flex-1 ${existingClassName}`.trim(),\n })\n }\n }\n return child\n })\n : children\n\n return (\n <div ref={ref} className={layoutClasses} data-testid={testId} {...rest}>\n {processedChildren}\n </div>\n )\n }\n)\n\nLayoutRoot.displayName = 'LayoutRoot'\n\nconst LayoutHeader = forwardRef<HTMLElement, LayoutHeaderProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n const headerClasses = [\n 'flex',\n 'items-center',\n 'px-6',\n 'h-16',\n dBgBase300,\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <header ref={ref} className={headerClasses} data-testid={testId} {...rest}>\n {children}\n </header>\n )\n }\n)\n\nLayoutHeader.displayName = 'LayoutHeader'\n\nconst LayoutFooter = forwardRef<HTMLElement, LayoutFooterProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n const footerClasses = [\n 'px-6',\n 'py-4',\n 'text-center',\n dBgBase300,\n 'flex-shrink-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <footer ref={ref} className={footerClasses} data-testid={testId} {...rest}>\n {children}\n </footer>\n )\n }\n)\n\nLayoutFooter.displayName = 'LayoutFooter'\n\nconst LayoutContent = forwardRef<HTMLElement, LayoutContentProps>(\n ({ children, className = '', 'data-testid': testId, ...rest }, ref) => {\n // flex-1 by default so Content fills available space\n const contentClasses = ['flex-1', 'min-h-0', 'overflow-auto', className].filter(Boolean).join(' ')\n\n return (\n <main ref={ref} className={contentClasses} data-testid={testId} {...rest}>\n {children}\n </main>\n )\n }\n)\n\nLayoutContent.displayName = 'LayoutContent'\n\nconst BREAKPOINT_MAP: Record<string, string> = {\n sm: '(max-width: 639px)',\n md: '(max-width: 767px)',\n lg: '(max-width: 1023px)',\n xl: '(max-width: 1279px)',\n '2xl': '(max-width: 1535px)',\n}\n\nconst LayoutSider = forwardRef<HTMLElement, LayoutSiderProps>(\n (\n {\n children,\n width = 200,\n collapsedWidth = 80,\n collapsed: controlledCollapsed,\n defaultCollapsed = false,\n collapsible = false,\n onCollapse,\n trigger,\n breakpoint,\n onBreakpoint,\n reverseArrow = false,\n theme = 'dark',\n zeroWidthTriggerStyle,\n className = '',\n style,\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed)\n const [broken, setBroken] = useState(false)\n\n const collapsed = controlledCollapsed ?? internalCollapsed\n\n // Handle responsive breakpoint\n useEffect(() => {\n if (!breakpoint) return\n\n const mediaQuery = window.matchMedia(BREAKPOINT_MAP[breakpoint])\n\n const handleChange = (e: MediaQueryListEvent | MediaQueryList) => {\n const isBroken = e.matches\n setBroken(isBroken)\n onBreakpoint?.(isBroken)\n\n // Auto-collapse when breakpoint is crossed\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(isBroken)\n }\n if (isBroken !== broken) {\n onCollapse?.(isBroken, 'responsive')\n }\n }\n\n // Check initial state\n handleChange(mediaQuery)\n\n // Listen for changes\n mediaQuery.addEventListener('change', handleChange)\n return () => mediaQuery.removeEventListener('change', handleChange)\n }, [breakpoint, onBreakpoint, controlledCollapsed, onCollapse, broken])\n\n const handleCollapse = useCallback(() => {\n const newCollapsed = !collapsed\n if (controlledCollapsed === undefined) {\n setInternalCollapsed(newCollapsed)\n }\n onCollapse?.(newCollapsed, 'clickTrigger')\n }, [collapsed, controlledCollapsed, onCollapse])\n\n const currentWidth = collapsed ? collapsedWidth : width\n const isZeroWidth = currentWidth === 0 || currentWidth === '0' || currentWidth === '0px'\n\n const themeClasses: Record<SiderTheme, string> = {\n light: dBgBase100,\n dark: dBgBase200,\n }\n\n const siderClasses = [\n 'flex',\n 'flex-col',\n themeClasses[theme],\n 'flex-shrink-0',\n 'transition-all',\n 'duration-200',\n 'relative',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Determine arrow rotation based on collapsed state and reverseArrow prop\n const getArrowRotation = () => {\n if (reverseArrow) {\n return collapsed ? '' : 'rotate-180'\n }\n return collapsed ? 'rotate-180' : ''\n }\n\n const defaultTrigger = collapsible && trigger !== null && (\n <button\n onClick={handleCollapse}\n className={`flex items-center justify-center h-10 w-full ${dBgBase300} hover:bg-base-content/10 transition-colors`}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n data-testid={testId ? `${testId}-trigger` : undefined}\n >\n <svg\n className={`w-4 h-4 transition-transform ${getArrowRotation()}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )\n\n // Zero-width trigger (floating button when sider is collapsed to 0)\n const zeroWidthTrigger = collapsible && isZeroWidth && collapsed && (\n <button\n onClick={handleCollapse}\n className={`absolute top-1/2 -translate-y-1/2 right-0 translate-x-full w-6 h-12 flex items-center justify-center ${dBgBase300} hover:bg-base-content/10 transition-colors rounded-r z-10`}\n aria-label=\"Expand sidebar\"\n style={zeroWidthTriggerStyle}\n data-testid={testId ? `${testId}-zero-trigger` : undefined}\n >\n <svg\n className={`w-3 h-3 ${reverseArrow ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n )\n\n return (\n <SiderContext.Provider value={{ collapsed, collapsedWidth, width }}>\n <aside\n ref={ref}\n className={siderClasses}\n style={{\n width: typeof currentWidth === 'number' ? `${currentWidth}px` : currentWidth,\n ...style,\n }}\n data-collapsed={collapsed}\n data-theme={theme}\n data-testid={testId}\n aria-expanded={!collapsed}\n {...rest}\n >\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {!isZeroWidth && trigger !== null && (trigger ?? defaultTrigger)}\n {zeroWidthTrigger}\n </aside>\n </SiderContext.Provider>\n )\n }\n)\n\nLayoutSider.displayName = 'LayoutSider'\n\nexport const Layout = Object.assign(LayoutRoot, {\n Header: LayoutHeader,\n Footer: LayoutFooter,\n Content: LayoutContent,\n Sider: LayoutSider,\n})\n"],"names":["dBgBase100","dBgBase200","dBgBase300","SiderContext","createContext","useSiderContext","useContext","LayoutRoot","forwardRef","children","hasSiderProp","className","testId","rest","ref","childArray","React","hasSiderDetected","child","hasSider","layoutClasses","processedChildren","existingClassName","jsx","LayoutHeader","headerClasses","LayoutFooter","footerClasses","LayoutContent","contentClasses","BREAKPOINT_MAP","LayoutSider","width","collapsedWidth","controlledCollapsed","defaultCollapsed","collapsible","onCollapse","trigger","breakpoint","onBreakpoint","reverseArrow","theme","zeroWidthTriggerStyle","style","internalCollapsed","setInternalCollapsed","useState","broken","setBroken","collapsed","useEffect","mediaQuery","handleChange","e","isBroken","handleCollapse","useCallback","newCollapsed","currentWidth","isZeroWidth","siderClasses","getArrowRotation","defaultTrigger","zeroWidthTrigger","jsxs","Layout"],"mappings":"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"}
@@ -34,7 +34,7 @@ export interface ListProps<T = unknown> extends Omit<React.HTMLAttributes<HTMLUL
34
34
  /** Show divider between items */
35
35
  split?: boolean;
36
36
  /** Size variant */
37
- size?: 'sm' | 'md' | 'lg';
37
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
38
38
  /** Layout direction */
39
39
  itemLayout?: 'horizontal' | 'vertical';
40
40
  /** Empty state text */
@@ -1,106 +1,109 @@
1
- import { jsxs as u, jsx as e } from "react/jsx-runtime";
2
- import p, { forwardRef as L } from "react";
3
- import { Pagination as P } from "./Pagination.js";
4
- import { Loading as W } from "./Loading.js";
5
- const q = {
1
+ import { jsxs as b, jsx as e } from "react/jsx-runtime";
2
+ import p, { forwardRef as j } from "react";
3
+ import { Pagination as A } from "./Pagination.js";
4
+ import { Loading as D } from "./Loading.js";
5
+ import { useConfig as F } from "./ConfigProvider.js";
6
+ const G = "list", u = "list-row", H = {
7
+ xs: "py-1",
6
8
  sm: "py-2",
7
9
  md: "py-3",
8
- lg: "py-4"
9
- }, x = L(
10
- ({ children: r, actions: a, extra: i, className: d = "", "data-testid": m, ...l }, c) => {
11
- const b = ["list-row", d].filter(Boolean).join(" ");
12
- return /* @__PURE__ */ u("li", { ref: c, className: b, "data-testid": m, ...l, children: [
13
- /* @__PURE__ */ e("div", { className: "flex-1", children: r }),
14
- i && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: i }),
15
- a && a.length > 0 && /* @__PURE__ */ e("div", { className: "flex items-center gap-2 flex-shrink-0", children: a.map((N, h) => /* @__PURE__ */ e("span", { children: N }, h)) })
10
+ lg: "py-4",
11
+ xl: "py-5"
12
+ }, y = j(
13
+ ({ children: i, actions: a, extra: r, className: d = "", "data-testid": o, ...l }, c) => {
14
+ const N = [u, d].filter(Boolean).join(" ");
15
+ return /* @__PURE__ */ b("li", { ref: c, className: N, "data-testid": o, ...l, children: [
16
+ /* @__PURE__ */ e("div", { className: "flex-1", children: i }),
17
+ r && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: r }),
18
+ a && a.length > 0 && /* @__PURE__ */ e("div", { className: "flex items-center gap-2 flex-shrink-0", children: a.map((x, h) => /* @__PURE__ */ e("span", { children: x }, h)) })
16
19
  ] });
17
20
  }
18
21
  );
19
- x.displayName = "List.Item";
20
- const j = ({
21
- avatar: r,
22
+ y.displayName = "List.Item";
23
+ const z = ({
24
+ avatar: i,
22
25
  title: a,
23
- description: i,
26
+ description: r,
24
27
  className: d = "",
25
- ...m
26
- }) => /* @__PURE__ */ u("div", { className: `flex items-center gap-3 ${d}`, ...m, children: [
27
- r && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: r }),
28
- /* @__PURE__ */ u("div", { className: "flex-1 min-w-0", children: [
28
+ ...o
29
+ }) => /* @__PURE__ */ b("div", { className: `flex items-center gap-3 ${d}`, ...o, children: [
30
+ i && /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: i }),
31
+ /* @__PURE__ */ b("div", { className: "flex-1 min-w-0", children: [
29
32
  a && /* @__PURE__ */ e("div", { className: "font-medium truncate", children: a }),
30
- i && /* @__PURE__ */ e("div", { className: "text-sm text-base-content/70 truncate", children: i })
33
+ r && /* @__PURE__ */ e("div", { className: "text-sm text-base-content/70 truncate", children: r })
31
34
  ] })
32
35
  ] });
33
- j.displayName = "List.Item.Meta";
34
- const z = L(
36
+ z.displayName = "List.Item.Meta";
37
+ const R = j(
35
38
  ({
36
- dataSource: r,
39
+ dataSource: i,
37
40
  renderItem: a,
38
- header: i,
41
+ header: r,
39
42
  footer: d,
40
- loading: m = !1,
43
+ loading: o = !1,
41
44
  pagination: l = !1,
42
45
  grid: c,
43
- bordered: b = !0,
44
- split: N = !0,
45
- size: h = "md",
46
+ bordered: N = !0,
47
+ split: x = !0,
48
+ size: h,
46
49
  itemLayout: k = "horizontal",
47
- locale: y,
48
- loadMore: $,
50
+ locale: $,
51
+ loadMore: g,
49
52
  rowKey: f,
50
- children: g,
51
- className: w = "",
52
- "aria-label": E,
53
+ children: v,
54
+ className: E = "",
55
+ "aria-label": S,
53
56
  "data-testid": t = "list",
54
- ...R
55
- }, M) => {
56
- const T = [
57
- "list bg-base-100 rounded-box",
58
- b && "border border-base-300",
59
- N && "[&_.list-row]:border-b [&_.list-row]:border-base-200 [&_.list-row:last-child]:border-b-0",
60
- w
61
- ].filter(Boolean).join(" "), v = q[h], _ = c ? {
57
+ ...M
58
+ }, T) => {
59
+ const { componentSize: _ } = F(), w = h ?? _ ?? "md", B = [
60
+ `${G} bg-base-100 rounded-box`,
61
+ N && "border border-base-300",
62
+ x && `[&_.${u}]:border-b [&_.${u}]:border-base-200 [&_.${u}:last-child]:border-b-0`,
63
+ E
64
+ ].filter(Boolean).join(" "), C = H[w], O = c ? {
62
65
  display: "grid",
63
66
  gridTemplateColumns: `repeat(${c.column || 1}, minmax(0, 1fr))`,
64
67
  gap: c.gutter ? `${c.gutter}px` : void 0
65
- } : {}, B = (s, n) => f ? typeof f == "function" ? f(s) : String(s[f] ?? n) : n, C = k === "vertical" ? "flex-col items-start" : "", O = () => m ? /* @__PURE__ */ e("div", { className: "flex justify-center py-8", "data-testid": `${t}-loading`, role: "status", children: /* @__PURE__ */ e(W, { size: "md", "aria-label": "Loading list" }) }) : r && a ? r.length === 0 ? /* @__PURE__ */ e("div", { className: "text-center py-8 text-base-content/50", "data-testid": `${t}-empty`, children: y?.emptyText ?? "No data" }) : r.map((s, n) => {
66
- const o = a(s, n), S = B(s, n);
67
- if (p.isValidElement(o)) {
68
- const V = o.props.className || "";
69
- return p.cloneElement(o, {
70
- key: S,
71
- className: `${V} ${v} ${C}`.trim(),
68
+ } : {}, V = (s, n) => f ? typeof f == "function" ? f(s) : String(s[f] ?? n) : n, L = k === "vertical" ? "flex-col items-start" : "", P = () => o ? /* @__PURE__ */ e("div", { className: "flex justify-center py-8", "data-testid": `${t}-loading`, role: "status", children: /* @__PURE__ */ e(D, { size: "md", "aria-label": "Loading list" }) }) : i && a ? i.length === 0 ? /* @__PURE__ */ e("div", { className: "text-center py-8 text-base-content/50", "data-testid": `${t}-empty`, children: $?.emptyText ?? "No data" }) : i.map((s, n) => {
69
+ const m = a(s, n), W = V(s, n);
70
+ if (p.isValidElement(m)) {
71
+ const q = m.props.className || "";
72
+ return p.cloneElement(m, {
73
+ key: W,
74
+ className: `${q} ${C} ${L}`.trim(),
72
75
  "data-testid": `${t}-item-${n}`
73
76
  });
74
77
  }
75
- return o;
76
- }) : g ? p.Children.map(g, (s, n) => {
78
+ return m;
79
+ }) : v ? p.Children.map(v, (s, n) => {
77
80
  if (p.isValidElement(s)) {
78
- const o = s.props.className || "";
81
+ const m = s.props.className || "";
79
82
  return p.cloneElement(s, {
80
- className: `${o} ${v} ${C}`.trim(),
83
+ className: `${m} ${C} ${L}`.trim(),
81
84
  "data-testid": `${t}-item-${n}`
82
85
  });
83
86
  }
84
87
  return s;
85
- }) : /* @__PURE__ */ e("div", { className: "text-center py-8 text-base-content/50", "data-testid": `${t}-empty`, children: y?.emptyText ?? "No data" });
86
- return /* @__PURE__ */ u("div", { "data-testid": t, "aria-busy": m, children: [
87
- i && /* @__PURE__ */ e("div", { className: "px-4 py-3 border-b border-base-200 font-medium", "data-testid": `${t}-header`, children: i }),
88
+ }) : /* @__PURE__ */ e("div", { className: "text-center py-8 text-base-content/50", "data-testid": `${t}-empty`, children: $?.emptyText ?? "No data" });
89
+ return /* @__PURE__ */ b("div", { "data-testid": t, "aria-busy": o, children: [
90
+ r && /* @__PURE__ */ e("div", { className: "px-4 py-3 border-b border-base-200 font-medium", "data-testid": `${t}-header`, children: r }),
88
91
  /* @__PURE__ */ e(
89
92
  "ul",
90
93
  {
91
- ref: M,
94
+ ref: T,
92
95
  role: "list",
93
- "aria-label": E,
94
- className: T,
95
- style: _,
96
- ...R,
97
- children: O()
96
+ "aria-label": S,
97
+ className: B,
98
+ style: O,
99
+ ...M,
100
+ children: P()
98
101
  }
99
102
  ),
100
103
  d && /* @__PURE__ */ e("div", { className: "px-4 py-3 border-t border-base-200", "data-testid": `${t}-footer`, children: d }),
101
- $ && /* @__PURE__ */ e("div", { className: "py-4 text-center", "data-testid": `${t}-load-more`, children: $ }),
104
+ g && /* @__PURE__ */ e("div", { className: "py-4 text-center", "data-testid": `${t}-load-more`, children: g }),
102
105
  l && l.total !== void 0 && /* @__PURE__ */ e("div", { className: "flex justify-end pt-4", "data-testid": `${t}-pagination`, children: /* @__PURE__ */ e(
103
- P,
106
+ A,
104
107
  {
105
108
  current: l.current,
106
109
  pageSize: l.pageSize,
@@ -111,15 +114,15 @@ const z = L(
111
114
  ] });
112
115
  }
113
116
  );
114
- z.displayName = "List";
115
- const A = Object.assign(x, {
116
- Meta: j
117
- }), J = Object.assign(z, {
118
- Item: A,
119
- Row: x
117
+ R.displayName = "List";
118
+ const J = Object.assign(y, {
119
+ Meta: z
120
+ }), K = Object.assign(R, {
121
+ Item: J,
122
+ Row: y
120
123
  // Backwards compatibility with DaisyUI pattern
121
124
  });
122
125
  export {
123
- J as List
126
+ K as List
124
127
  };
125
128
  //# sourceMappingURL=List.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"List.js","sources":["../../src/components/List.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { Pagination } from './Pagination'\nimport { Loading } from './Loading'\n\nexport interface ListPaginationConfig {\n current?: number\n pageSize?: number\n total?: number\n onChange?: (page: number, pageSize: number) => void\n}\n\nexport interface ListGridConfig {\n gutter?: number\n column?: number\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n}\n\nexport interface ListProps<T = unknown> extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {\n /** Data source array */\n dataSource?: T[]\n /** Function to render each item */\n renderItem?: (item: T, index: number) => React.ReactNode\n /** List header content */\n header?: React.ReactNode\n /** List footer content */\n footer?: React.ReactNode\n /** Show loading state */\n loading?: boolean\n /** Pagination configuration or false to disable */\n pagination?: ListPaginationConfig | false\n /** Grid layout configuration */\n grid?: ListGridConfig\n /** Show border around list */\n bordered?: boolean\n /** Show divider between items */\n split?: boolean\n /** Size variant */\n size?: 'sm' | 'md' | 'lg'\n /** Layout direction */\n itemLayout?: 'horizontal' | 'vertical'\n /** Empty state text */\n locale?: { emptyText?: React.ReactNode }\n /** Load more content (e.g., button) */\n loadMore?: React.ReactNode\n /** Custom key extraction function */\n rowKey?: keyof T | ((item: T) => React.Key)\n /** Compound pattern children */\n children?: React.ReactNode\n /** Accessible label for the list */\n 'aria-label'?: string\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n /** Item content */\n children: React.ReactNode\n /** Action buttons */\n actions?: React.ReactNode[]\n /** Extra content on the right */\n extra?: React.ReactNode\n /** Test ID for this item */\n 'data-testid'?: string\n}\n\nexport interface ListItemMetaProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Avatar or icon */\n avatar?: React.ReactNode\n /** Title content */\n title?: React.ReactNode\n /** Description content */\n description?: React.ReactNode\n}\n\n// Also export as ListRowProps for backwards compatibility with DaisyUI pattern\nexport type ListRowProps = ListItemProps\n\nconst sizeClasses = {\n sm: 'py-2',\n md: 'py-3',\n lg: 'py-4',\n}\n\nconst ListItem = forwardRef<HTMLLIElement, ListItemProps>(\n ({ children, actions, extra, className = '', 'data-testid': testId, ...rest }, ref) => {\n const classes = ['list-row', className].filter(Boolean).join(' ')\n\n return (\n <li ref={ref} className={classes} data-testid={testId} {...rest}>\n <div className=\"flex-1\">{children}</div>\n {extra && <div className=\"flex-shrink-0\">{extra}</div>}\n {actions && actions.length > 0 && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions.map((action, index) => (\n <span key={index}>{action}</span>\n ))}\n </div>\n )}\n </li>\n )\n }\n)\n\nListItem.displayName = 'List.Item'\n\nconst ListItemMeta: React.FC<ListItemMetaProps> = ({\n avatar,\n title,\n description,\n className = '',\n ...rest\n}) => {\n return (\n <div className={`flex items-center gap-3 ${className}`} {...rest}>\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"font-medium truncate\">{title}</div>}\n {description && (\n <div className=\"text-sm text-base-content/70 truncate\">{description}</div>\n )}\n </div>\n </div>\n )\n}\n\nListItemMeta.displayName = 'List.Item.Meta'\n\nconst ListRoot = forwardRef<HTMLUListElement, ListProps>(\n (\n {\n dataSource,\n renderItem,\n header,\n footer,\n loading = false,\n pagination = false,\n grid,\n bordered = true,\n split = true,\n size = 'md',\n itemLayout = 'horizontal',\n locale,\n loadMore,\n rowKey,\n children,\n className = '',\n 'aria-label': ariaLabel,\n 'data-testid': testId = 'list',\n ...rest\n },\n ref\n ) => {\n const listClasses = [\n 'list bg-base-100 rounded-box',\n bordered && 'border border-base-300',\n split && '[&_.list-row]:border-b [&_.list-row]:border-base-200 [&_.list-row:last-child]:border-b-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const itemClasses = sizeClasses[size]\n\n // Grid styles\n const gridStyles: React.CSSProperties = grid\n ? {\n display: 'grid',\n gridTemplateColumns: `repeat(${grid.column || 1}, minmax(0, 1fr))`,\n gap: grid.gutter ? `${grid.gutter}px` : undefined,\n }\n : {}\n\n // Get key for item\n const getItemKey = (item: unknown, index: number): React.Key => {\n if (!rowKey) return index\n if (typeof rowKey === 'function') return rowKey(item as Parameters<typeof rowKey>[0])\n return String((item as Record<string, unknown>)[rowKey as string] ?? index)\n }\n\n // Layout class for vertical items\n const layoutClass = itemLayout === 'vertical' ? 'flex-col items-start' : ''\n\n // Render items from dataSource or children\n const renderContent = () => {\n if (loading) {\n return (\n <div className=\"flex justify-center py-8\" data-testid={`${testId}-loading`} role=\"status\">\n <Loading size=\"md\" aria-label=\"Loading list\" />\n </div>\n )\n }\n\n // Use dataSource + renderItem if provided\n if (dataSource && renderItem) {\n if (dataSource.length === 0) {\n return (\n <div className=\"text-center py-8 text-base-content/50\" data-testid={`${testId}-empty`}>\n {locale?.emptyText ?? 'No data'}\n </div>\n )\n }\n\n return dataSource.map((item, index) => {\n const rendered = renderItem(item, index)\n const key = getItemKey(item, index)\n // Inject size and layout classes into list items\n if (React.isValidElement(rendered)) {\n const existingClassName = (rendered.props as { className?: string }).className || ''\n return React.cloneElement(rendered, {\n key,\n className: `${existingClassName} ${itemClasses} ${layoutClass}`.trim(),\n 'data-testid': `${testId}-item-${index}`,\n } as React.Attributes & { className?: string; 'data-testid'?: string })\n }\n return rendered\n })\n }\n\n // Use compound children pattern\n if (children) {\n return React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as { className?: string }).className || ''\n return React.cloneElement(child, {\n className: `${existingClassName} ${itemClasses} ${layoutClass}`.trim(),\n 'data-testid': `${testId}-item-${index}`,\n } as React.Attributes & { className?: string; 'data-testid'?: string })\n }\n return child\n })\n }\n\n return (\n <div className=\"text-center py-8 text-base-content/50\" data-testid={`${testId}-empty`}>\n {locale?.emptyText ?? 'No data'}\n </div>\n )\n }\n\n return (\n <div data-testid={testId} aria-busy={loading}>\n {header && (\n <div className=\"px-4 py-3 border-b border-base-200 font-medium\" data-testid={`${testId}-header`}>\n {header}\n </div>\n )}\n\n <ul\n ref={ref}\n role=\"list\"\n aria-label={ariaLabel}\n className={listClasses}\n style={gridStyles}\n {...rest}\n >\n {renderContent()}\n </ul>\n\n {footer && (\n <div className=\"px-4 py-3 border-t border-base-200\" data-testid={`${testId}-footer`}>\n {footer}\n </div>\n )}\n\n {loadMore && (\n <div className=\"py-4 text-center\" data-testid={`${testId}-load-more`}>\n {loadMore}\n </div>\n )}\n\n {pagination && pagination.total !== undefined && (\n <div className=\"flex justify-end pt-4\" data-testid={`${testId}-pagination`}>\n <Pagination\n current={pagination.current}\n pageSize={pagination.pageSize}\n total={pagination.total}\n onChange={pagination.onChange}\n />\n </div>\n )}\n </div>\n )\n }\n)\n\nListRoot.displayName = 'List'\n\n// Compound component with Item and Item.Meta\nconst ItemWithMeta = Object.assign(ListItem, {\n Meta: ListItemMeta,\n})\n\nexport const List = Object.assign(ListRoot, {\n Item: ItemWithMeta,\n Row: ListItem, // Backwards compatibility with DaisyUI pattern\n})\n"],"names":["sizeClasses","ListItem","forwardRef","children","actions","extra","className","testId","rest","ref","classes","jsxs","jsx","action","index","ListItemMeta","avatar","title","description","ListRoot","dataSource","renderItem","header","footer","loading","pagination","grid","bordered","split","size","itemLayout","locale","loadMore","rowKey","ariaLabel","listClasses","itemClasses","gridStyles","getItemKey","item","layoutClass","renderContent","Loading","rendered","key","React","existingClassName","child","Pagination","ItemWithMeta","List"],"mappings":"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"}
1
+ {"version":3,"file":"List.js","sources":["../../src/components/List.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { Pagination } from './Pagination'\nimport { Loading } from './Loading'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dList = 'list'\nconst dListRow = 'list-row'\n\nexport interface ListPaginationConfig {\n current?: number\n pageSize?: number\n total?: number\n onChange?: (page: number, pageSize: number) => void\n}\n\nexport interface ListGridConfig {\n gutter?: number\n column?: number\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n}\n\nexport interface ListProps<T = unknown> extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {\n /** Data source array */\n dataSource?: T[]\n /** Function to render each item */\n renderItem?: (item: T, index: number) => React.ReactNode\n /** List header content */\n header?: React.ReactNode\n /** List footer content */\n footer?: React.ReactNode\n /** Show loading state */\n loading?: boolean\n /** Pagination configuration or false to disable */\n pagination?: ListPaginationConfig | false\n /** Grid layout configuration */\n grid?: ListGridConfig\n /** Show border around list */\n bordered?: boolean\n /** Show divider between items */\n split?: boolean\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Layout direction */\n itemLayout?: 'horizontal' | 'vertical'\n /** Empty state text */\n locale?: { emptyText?: React.ReactNode }\n /** Load more content (e.g., button) */\n loadMore?: React.ReactNode\n /** Custom key extraction function */\n rowKey?: keyof T | ((item: T) => React.Key)\n /** Compound pattern children */\n children?: React.ReactNode\n /** Accessible label for the list */\n 'aria-label'?: string\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\nexport interface ListItemProps extends React.LiHTMLAttributes<HTMLLIElement> {\n /** Item content */\n children: React.ReactNode\n /** Action buttons */\n actions?: React.ReactNode[]\n /** Extra content on the right */\n extra?: React.ReactNode\n /** Test ID for this item */\n 'data-testid'?: string\n}\n\nexport interface ListItemMetaProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Avatar or icon */\n avatar?: React.ReactNode\n /** Title content */\n title?: React.ReactNode\n /** Description content */\n description?: React.ReactNode\n}\n\n// Also export as ListRowProps for backwards compatibility with DaisyUI pattern\nexport type ListRowProps = ListItemProps\n\nconst sizeClasses = {\n xs: 'py-1',\n sm: 'py-2',\n md: 'py-3',\n lg: 'py-4',\n xl: 'py-5',\n}\n\nconst ListItem = forwardRef<HTMLLIElement, ListItemProps>(\n ({ children, actions, extra, className = '', 'data-testid': testId, ...rest }, ref) => {\n const classes = [dListRow, className].filter(Boolean).join(' ')\n\n return (\n <li ref={ref} className={classes} data-testid={testId} {...rest}>\n <div className=\"flex-1\">{children}</div>\n {extra && <div className=\"flex-shrink-0\">{extra}</div>}\n {actions && actions.length > 0 && (\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n {actions.map((action, index) => (\n <span key={index}>{action}</span>\n ))}\n </div>\n )}\n </li>\n )\n }\n)\n\nListItem.displayName = 'List.Item'\n\nconst ListItemMeta: React.FC<ListItemMetaProps> = ({\n avatar,\n title,\n description,\n className = '',\n ...rest\n}) => {\n return (\n <div className={`flex items-center gap-3 ${className}`} {...rest}>\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && <div className=\"font-medium truncate\">{title}</div>}\n {description && (\n <div className=\"text-sm text-base-content/70 truncate\">{description}</div>\n )}\n </div>\n </div>\n )\n}\n\nListItemMeta.displayName = 'List.Item.Meta'\n\nconst ListRoot = forwardRef<HTMLUListElement, ListProps>(\n (\n {\n dataSource,\n renderItem,\n header,\n footer,\n loading = false,\n pagination = false,\n grid,\n bordered = true,\n split = true,\n size,\n itemLayout = 'horizontal',\n locale,\n loadMore,\n rowKey,\n children,\n className = '',\n 'aria-label': ariaLabel,\n 'data-testid': testId = 'list',\n ...rest\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const listClasses = [\n `${dList} bg-base-100 rounded-box`,\n bordered && 'border border-base-300',\n split && `[&_.${dListRow}]:border-b [&_.${dListRow}]:border-base-200 [&_.${dListRow}:last-child]:border-b-0`,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const itemClasses = sizeClasses[effectiveSize]\n\n // Grid styles\n const gridStyles: React.CSSProperties = grid\n ? {\n display: 'grid',\n gridTemplateColumns: `repeat(${grid.column || 1}, minmax(0, 1fr))`,\n gap: grid.gutter ? `${grid.gutter}px` : undefined,\n }\n : {}\n\n // Get key for item\n const getItemKey = (item: unknown, index: number): React.Key => {\n if (!rowKey) return index\n if (typeof rowKey === 'function') return rowKey(item as Parameters<typeof rowKey>[0])\n return String((item as Record<string, unknown>)[rowKey as string] ?? index)\n }\n\n // Layout class for vertical items\n const layoutClass = itemLayout === 'vertical' ? 'flex-col items-start' : ''\n\n // Render items from dataSource or children\n const renderContent = () => {\n if (loading) {\n return (\n <div className=\"flex justify-center py-8\" data-testid={`${testId}-loading`} role=\"status\">\n <Loading size=\"md\" aria-label=\"Loading list\" />\n </div>\n )\n }\n\n // Use dataSource + renderItem if provided\n if (dataSource && renderItem) {\n if (dataSource.length === 0) {\n return (\n <div className=\"text-center py-8 text-base-content/50\" data-testid={`${testId}-empty`}>\n {locale?.emptyText ?? 'No data'}\n </div>\n )\n }\n\n return dataSource.map((item, index) => {\n const rendered = renderItem(item, index)\n const key = getItemKey(item, index)\n // Inject size and layout classes into list items\n if (React.isValidElement(rendered)) {\n const existingClassName = (rendered.props as { className?: string }).className || ''\n return React.cloneElement(rendered, {\n key,\n className: `${existingClassName} ${itemClasses} ${layoutClass}`.trim(),\n 'data-testid': `${testId}-item-${index}`,\n } as React.Attributes & { className?: string; 'data-testid'?: string })\n }\n return rendered\n })\n }\n\n // Use compound children pattern\n if (children) {\n return React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as { className?: string }).className || ''\n return React.cloneElement(child, {\n className: `${existingClassName} ${itemClasses} ${layoutClass}`.trim(),\n 'data-testid': `${testId}-item-${index}`,\n } as React.Attributes & { className?: string; 'data-testid'?: string })\n }\n return child\n })\n }\n\n return (\n <div className=\"text-center py-8 text-base-content/50\" data-testid={`${testId}-empty`}>\n {locale?.emptyText ?? 'No data'}\n </div>\n )\n }\n\n return (\n <div data-testid={testId} aria-busy={loading}>\n {header && (\n <div className=\"px-4 py-3 border-b border-base-200 font-medium\" data-testid={`${testId}-header`}>\n {header}\n </div>\n )}\n\n <ul\n ref={ref}\n role=\"list\"\n aria-label={ariaLabel}\n className={listClasses}\n style={gridStyles}\n {...rest}\n >\n {renderContent()}\n </ul>\n\n {footer && (\n <div className=\"px-4 py-3 border-t border-base-200\" data-testid={`${testId}-footer`}>\n {footer}\n </div>\n )}\n\n {loadMore && (\n <div className=\"py-4 text-center\" data-testid={`${testId}-load-more`}>\n {loadMore}\n </div>\n )}\n\n {pagination && pagination.total !== undefined && (\n <div className=\"flex justify-end pt-4\" data-testid={`${testId}-pagination`}>\n <Pagination\n current={pagination.current}\n pageSize={pagination.pageSize}\n total={pagination.total}\n onChange={pagination.onChange}\n />\n </div>\n )}\n </div>\n )\n }\n)\n\nListRoot.displayName = 'List'\n\n// Compound component with Item and Item.Meta\nconst ItemWithMeta = Object.assign(ListItem, {\n Meta: ListItemMeta,\n})\n\nexport const List = Object.assign(ListRoot, {\n Item: ItemWithMeta,\n Row: ListItem, // Backwards compatibility with DaisyUI pattern\n})\n"],"names":["dList","dListRow","sizeClasses","ListItem","forwardRef","children","actions","extra","className","testId","rest","ref","classes","jsxs","jsx","action","index","ListItemMeta","avatar","title","description","ListRoot","dataSource","renderItem","header","footer","loading","pagination","grid","bordered","split","size","itemLayout","locale","loadMore","rowKey","ariaLabel","componentSize","useConfig","effectiveSize","listClasses","itemClasses","gridStyles","getItemKey","item","layoutClass","renderContent","Loading","rendered","key","React","existingClassName","child","Pagination","ItemWithMeta","List"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { default as React } from 'react';
2
2
  export interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {
3
- size?: 'xs' | 'sm' | 'md' | 'lg';
3
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
4
  type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';
5
5
  spinning?: boolean;
6
6
  children?: React.ReactNode;
@@ -1,38 +1,40 @@
1
- import { jsxs as a, jsx as s } from "react/jsx-runtime";
2
- const f = ({
3
- size: r = "md",
1
+ import { jsxs as e, jsx as n } from "react/jsx-runtime";
2
+ import { useConfig as f } from "./ConfigProvider.js";
3
+ const L = "loading", p = "loading-xs", x = "loading-sm", b = "loading-md", u = "loading-lg", N = "loading-xl", v = "loading-spinner", y = "loading-dots", C = "loading-ring", h = "loading-ball", j = "loading-bars", z = "loading-infinity", k = ({
4
+ size: l,
4
5
  type: t = "spinner",
5
- className: d = "",
6
- spinning: l = !0,
7
- children: n,
8
- tip: e,
6
+ className: c = "",
7
+ spinning: o = !0,
8
+ children: a,
9
+ tip: s,
9
10
  ...i
10
11
  }) => {
11
- const c = {
12
- xs: "loading-xs",
13
- sm: "loading-sm",
14
- md: "loading-md",
15
- lg: "loading-lg"
16
- }, o = ["loading", {
17
- spinner: "loading-spinner",
18
- dots: "loading-dots",
19
- ring: "loading-ring",
20
- ball: "loading-ball",
21
- bars: "loading-bars",
22
- infinity: "loading-infinity"
23
- }[t], c[r], d].filter(Boolean).join(" ");
24
- return n ? /* @__PURE__ */ a("div", { className: "relative", ...i, children: [
25
- l && /* @__PURE__ */ a("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10", children: [
26
- /* @__PURE__ */ s("span", { className: o }),
27
- e && /* @__PURE__ */ s("p", { className: "mt-2 text-sm", children: e })
12
+ const { componentSize: r } = f(), g = l ?? r ?? "md", m = {
13
+ xs: p,
14
+ sm: x,
15
+ md: b,
16
+ lg: u,
17
+ xl: N
18
+ }, d = [L, {
19
+ spinner: v,
20
+ dots: y,
21
+ ring: C,
22
+ ball: h,
23
+ bars: j,
24
+ infinity: z
25
+ }[t], m[g], c].filter(Boolean).join(" ");
26
+ return a ? /* @__PURE__ */ e("div", { className: "relative", ...i, children: [
27
+ o && /* @__PURE__ */ e("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10", children: [
28
+ /* @__PURE__ */ n("span", { className: d }),
29
+ s && /* @__PURE__ */ n("p", { className: "mt-2 text-sm", children: s })
28
30
  ] }),
29
- /* @__PURE__ */ s("div", { className: l ? "pointer-events-none" : "", children: n })
30
- ] }) : l ? /* @__PURE__ */ a("div", { className: "flex flex-col items-center gap-2", ...i, children: [
31
- /* @__PURE__ */ s("span", { className: o }),
32
- e && /* @__PURE__ */ s("p", { className: "text-sm", children: e })
31
+ /* @__PURE__ */ n("div", { className: o ? "pointer-events-none" : "", children: a })
32
+ ] }) : o ? /* @__PURE__ */ e("div", { className: "flex flex-col items-center gap-2", ...i, children: [
33
+ /* @__PURE__ */ n("span", { className: d }),
34
+ s && /* @__PURE__ */ n("p", { className: "text-sm", children: s })
33
35
  ] }) : null;
34
36
  };
35
37
  export {
36
- f as Loading
38
+ k as Loading
37
39
  };
38
40
  //# sourceMappingURL=Loading.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Loading.js","sources":["../../src/components/Loading.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'xs' | 'sm' | 'md' | 'lg'\n type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'\n spinning?: boolean\n children?: React.ReactNode\n tip?: string\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n size = 'md',\n type = 'spinner',\n className = '',\n spinning = true,\n children,\n tip,\n ...rest\n}) => {\n const sizeClasses = {\n xs: 'loading-xs',\n sm: 'loading-sm',\n md: 'loading-md',\n lg: 'loading-lg',\n }\n\n const typeClasses = {\n spinner: 'loading-spinner',\n dots: 'loading-dots',\n ring: 'loading-ring',\n ball: 'loading-ball',\n bars: 'loading-bars',\n infinity: 'loading-infinity',\n }\n\n const spinnerClasses = ['loading', typeClasses[type], sizeClasses[size], className]\n .filter(Boolean)\n .join(' ')\n\n if (children) {\n return (\n <div className=\"relative\" {...rest}>\n {spinning && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10\">\n <span className={spinnerClasses}></span>\n {tip && <p className=\"mt-2 text-sm\">{tip}</p>}\n </div>\n )}\n <div className={spinning ? 'pointer-events-none' : ''}>{children}</div>\n </div>\n )\n }\n\n if (!spinning) {\n return null\n }\n\n return (\n <div className=\"flex flex-col items-center gap-2\" {...rest}>\n <span className={spinnerClasses}></span>\n {tip && <p className=\"text-sm\">{tip}</p>}\n </div>\n )\n}\n"],"names":["Loading","size","type","className","spinning","children","tip","rest","sizeClasses","spinnerClasses","jsxs","jsx"],"mappings":";AAUO,MAAMA,IAAkC,CAAC;AAAA,EAC9C,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAYAC,IAAiB,CAAC,WATJ;AAAA,IAClB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,UAAU;AAAA,EAAA,EAGmCP,CAAI,GAAGM,EAAYP,CAAI,GAAGE,CAAS,EAC/E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SAAIE,IAEA,gBAAAK,EAAC,OAAA,EAAI,WAAU,YAAY,GAAGH,GAC3B,UAAA;AAAA,IAAAH,KACC,gBAAAM,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,MAChCH,KAAO,gBAAAK,EAAC,KAAA,EAAE,WAAU,gBAAgB,UAAAL,EAAA,CAAI;AAAA,IAAA,GAC3C;AAAA,sBAED,OAAA,EAAI,WAAWF,IAAW,wBAAwB,IAAK,UAAAC,EAAA,CAAS;AAAA,EAAA,GACnE,IAICD,IAKH,gBAAAM,EAAC,OAAA,EAAI,WAAU,oCAAoC,GAAGH,GACpD,UAAA;AAAA,IAAA,gBAAAI,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,IAChCH,KAAO,gBAAAK,EAAC,KAAA,EAAE,WAAU,WAAW,UAAAL,EAAA,CAAI;AAAA,EAAA,GACtC,IAPO;AASX;"}
1
+ {"version":3,"file":"Loading.js","sources":["../../src/components/Loading.tsx"],"sourcesContent":["import React from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dLoading = 'loading'\nconst dLoadingXs = 'loading-xs'\nconst dLoadingSm = 'loading-sm'\nconst dLoadingMd = 'loading-md'\nconst dLoadingLg = 'loading-lg'\nconst dLoadingXl = 'loading-xl'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingDots = 'loading-dots'\nconst dLoadingRing = 'loading-ring'\nconst dLoadingBall = 'loading-ball'\nconst dLoadingBars = 'loading-bars'\nconst dLoadingInfinity = 'loading-infinity'\n\nexport interface LoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n type?: 'spinner' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity'\n spinning?: boolean\n children?: React.ReactNode\n tip?: string\n}\n\nexport const Loading: React.FC<LoadingProps> = ({\n size,\n type = 'spinner',\n className = '',\n spinning = true,\n children,\n tip,\n ...rest\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dLoadingXs,\n sm: dLoadingSm,\n md: dLoadingMd,\n lg: dLoadingLg,\n xl: dLoadingXl,\n }\n\n const typeClasses = {\n spinner: dLoadingSpinner,\n dots: dLoadingDots,\n ring: dLoadingRing,\n ball: dLoadingBall,\n bars: dLoadingBars,\n infinity: dLoadingInfinity,\n }\n\n const spinnerClasses = [dLoading, typeClasses[type], sizeClasses[effectiveSize], className]\n .filter(Boolean)\n .join(' ')\n\n if (children) {\n return (\n <div className=\"relative\" {...rest}>\n {spinning && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-base-100/50 backdrop-blur-sm z-10\">\n <span className={spinnerClasses}></span>\n {tip && <p className=\"mt-2 text-sm\">{tip}</p>}\n </div>\n )}\n <div className={spinning ? 'pointer-events-none' : ''}>{children}</div>\n </div>\n )\n }\n\n if (!spinning) {\n return null\n }\n\n return (\n <div className=\"flex flex-col items-center gap-2\" {...rest}>\n <span className={spinnerClasses}></span>\n {tip && <p className=\"text-sm\">{tip}</p>}\n </div>\n )\n}\n"],"names":["dLoading","dLoadingXs","dLoadingSm","dLoadingMd","dLoadingLg","dLoadingXl","dLoadingSpinner","dLoadingDots","dLoadingRing","dLoadingBall","dLoadingBars","dLoadingInfinity","Loading","size","type","className","spinning","children","tip","rest","componentSize","useConfig","effectiveSize","sizeClasses","spinnerClasses","jsxs","jsx"],"mappings":";;AAIA,MAAMA,IAAW,WACXC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAa,cACbC,IAAkB,mBAClBC,IAAe,gBACfC,IAAe,gBACfC,IAAe,gBACfC,IAAe,gBACfC,IAAmB,oBAUZC,IAAkC,CAAC;AAAA,EAC9C,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,IAClB,IAAItB;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,IACJ,IAAIC;AAAA,EAAA,GAYAmB,IAAiB,CAACxB,GATJ;AAAA,IAClB,SAASM;AAAA,IACT,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,MAAMC;AAAA,IACN,UAAUC;AAAA,EAAA,EAGkCG,CAAI,GAAGS,EAAYD,CAAa,GAAGP,CAAS,EACvF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SAAIE,IAEA,gBAAAQ,EAAC,OAAA,EAAI,WAAU,YAAY,GAAGN,GAC3B,UAAA;AAAA,IAAAH,KACC,gBAAAS,EAAC,OAAA,EAAI,WAAU,mGACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,MAChCN,KAAO,gBAAAQ,EAAC,KAAA,EAAE,WAAU,gBAAgB,UAAAR,EAAA,CAAI;AAAA,IAAA,GAC3C;AAAA,sBAED,OAAA,EAAI,WAAWF,IAAW,wBAAwB,IAAK,UAAAC,EAAA,CAAS;AAAA,EAAA,GACnE,IAICD,IAKH,gBAAAS,EAAC,OAAA,EAAI,WAAU,oCAAoC,GAAGN,GACpD,UAAA;AAAA,IAAA,gBAAAO,EAAC,QAAA,EAAK,WAAWF,EAAA,CAAgB;AAAA,IAChCN,KAAO,gBAAAQ,EAAC,KAAA,EAAE,WAAU,WAAW,UAAAR,EAAA,CAAI;AAAA,EAAA,GACtC,IAPO;AASX;"}
@@ -1,37 +1,37 @@
1
- import { jsx as l } from "react/jsx-runtime";
2
- import { forwardRef as o } from "react";
3
- const i = {
4
- squircle: "mask-squircle",
5
- heart: "mask-heart",
6
- hexagon: "mask-hexagon",
7
- "hexagon-2": "mask-hexagon-2",
8
- decagon: "mask-decagon",
9
- pentagon: "mask-pentagon",
10
- diamond: "mask-diamond",
11
- square: "mask-square",
12
- circle: "mask-circle",
13
- star: "mask-star",
14
- "star-2": "mask-star-2",
15
- triangle: "mask-triangle",
16
- "triangle-2": "mask-triangle-2",
17
- "triangle-3": "mask-triangle-3",
18
- "triangle-4": "mask-triangle-4"
19
- }, k = {
20
- "half-1": "mask-half-1",
21
- "half-2": "mask-half-2"
22
- }, g = o(
23
- ({ shape: s, half: a, children: e, className: r = "", ...n }, m) => {
24
- const t = [
25
- "mask",
26
- i[s],
27
- a ? k[a] : "",
28
- r
1
+ import { jsx as k } from "react/jsx-runtime";
2
+ import { forwardRef as c } from "react";
3
+ const l = "mask", d = "mask-squircle", i = "mask-heart", m = "mask-hexagon", g = "mask-hexagon-2", M = "mask-decagon", f = "mask-pentagon", h = "mask-diamond", x = "mask-square", p = "mask-circle", u = "mask-star", q = "mask-star-2", H = "mask-triangle", S = "mask-triangle-2", T = "mask-triangle-3", C = "mask-triangle-4", j = "mask-half-1", D = "mask-half-2", N = {
4
+ squircle: d,
5
+ heart: i,
6
+ hexagon: m,
7
+ "hexagon-2": g,
8
+ decagon: M,
9
+ pentagon: f,
10
+ diamond: h,
11
+ square: x,
12
+ circle: p,
13
+ star: u,
14
+ "star-2": q,
15
+ triangle: H,
16
+ "triangle-2": S,
17
+ "triangle-3": T,
18
+ "triangle-4": C
19
+ }, v = {
20
+ "half-1": j,
21
+ "half-2": D
22
+ }, w = c(
23
+ ({ shape: s, half: a, children: n, className: e = "", ...t }, o) => {
24
+ const r = [
25
+ l,
26
+ N[s],
27
+ a ? v[a] : "",
28
+ e
29
29
  ].filter(Boolean).join(" ");
30
- return /* @__PURE__ */ l("div", { ref: m, className: t, ...n, children: e });
30
+ return /* @__PURE__ */ k("div", { ref: o, className: r, ...t, children: n });
31
31
  }
32
32
  );
33
- g.displayName = "Mask";
33
+ w.displayName = "Mask";
34
34
  export {
35
- g as Mask
35
+ w as Mask
36
36
  };
37
37
  //# sourceMappingURL=Mask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Mask.js","sources":["../../src/components/Mask.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport type MaskShape =\n | 'squircle'\n | 'heart'\n | 'hexagon'\n | 'hexagon-2'\n | 'decagon'\n | 'pentagon'\n | 'diamond'\n | 'square'\n | 'circle'\n | 'star'\n | 'star-2'\n | 'triangle'\n | 'triangle-2'\n | 'triangle-3'\n | 'triangle-4'\n\nexport type MaskHalf = 'half-1' | 'half-2'\n\nexport interface MaskProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape of the mask */\n shape: MaskShape\n /** Show only half of the mask */\n half?: MaskHalf\n /** Content to mask (typically an image) */\n children: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nconst shapeClasses: Record<MaskShape, string> = {\n squircle: 'mask-squircle',\n heart: 'mask-heart',\n hexagon: 'mask-hexagon',\n 'hexagon-2': 'mask-hexagon-2',\n decagon: 'mask-decagon',\n pentagon: 'mask-pentagon',\n diamond: 'mask-diamond',\n square: 'mask-square',\n circle: 'mask-circle',\n star: 'mask-star',\n 'star-2': 'mask-star-2',\n triangle: 'mask-triangle',\n 'triangle-2': 'mask-triangle-2',\n 'triangle-3': 'mask-triangle-3',\n 'triangle-4': 'mask-triangle-4',\n}\n\nconst halfClasses: Record<MaskHalf, string> = {\n 'half-1': 'mask-half-1',\n 'half-2': 'mask-half-2',\n}\n\nexport const Mask = forwardRef<HTMLDivElement, MaskProps>(\n ({ shape, half, children, className = '', ...props }, ref) => {\n const classes = [\n 'mask',\n shapeClasses[shape],\n half ? halfClasses[half] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nMask.displayName = 'Mask'\n"],"names":["shapeClasses","halfClasses","Mask","forwardRef","shape","half","children","className","props","ref","classes"],"mappings":";;AAgCA,MAAMA,IAA0C;AAAA,EAC9C,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAChB,GAEMC,IAAwC;AAAA,EAC5C,UAAU;AAAA,EACV,UAAU;AACZ,GAEaC,IAAOC;AAAA,EAClB,CAAC,EAAE,OAAAC,GAAO,MAAAC,GAAM,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAC5D,UAAMC,IAAU;AAAA,MACd;AAAA,MACAV,EAAaI,CAAK;AAAA,MAClBC,IAAOJ,EAAYI,CAAI,IAAI;AAAA,MAC3BE;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BACG,OAAA,EAAI,KAAAE,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAJ,EAAK,cAAc;"}
1
+ {"version":3,"file":"Mask.js","sources":["../../src/components/Mask.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\n// DaisyUI classes\nconst dMask = 'mask'\nconst dMaskSquircle = 'mask-squircle'\nconst dMaskHeart = 'mask-heart'\nconst dMaskHexagon = 'mask-hexagon'\nconst dMaskHexagon2 = 'mask-hexagon-2'\nconst dMaskDecagon = 'mask-decagon'\nconst dMaskPentagon = 'mask-pentagon'\nconst dMaskDiamond = 'mask-diamond'\nconst dMaskSquare = 'mask-square'\nconst dMaskCircle = 'mask-circle'\nconst dMaskStar = 'mask-star'\nconst dMaskStar2 = 'mask-star-2'\nconst dMaskTriangle = 'mask-triangle'\nconst dMaskTriangle2 = 'mask-triangle-2'\nconst dMaskTriangle3 = 'mask-triangle-3'\nconst dMaskTriangle4 = 'mask-triangle-4'\nconst dMaskHalf1 = 'mask-half-1'\nconst dMaskHalf2 = 'mask-half-2'\n\nexport type MaskShape =\n | 'squircle'\n | 'heart'\n | 'hexagon'\n | 'hexagon-2'\n | 'decagon'\n | 'pentagon'\n | 'diamond'\n | 'square'\n | 'circle'\n | 'star'\n | 'star-2'\n | 'triangle'\n | 'triangle-2'\n | 'triangle-3'\n | 'triangle-4'\n\nexport type MaskHalf = 'half-1' | 'half-2'\n\nexport interface MaskProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape of the mask */\n shape: MaskShape\n /** Show only half of the mask */\n half?: MaskHalf\n /** Content to mask (typically an image) */\n children: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nconst shapeClasses: Record<MaskShape, string> = {\n squircle: dMaskSquircle,\n heart: dMaskHeart,\n hexagon: dMaskHexagon,\n 'hexagon-2': dMaskHexagon2,\n decagon: dMaskDecagon,\n pentagon: dMaskPentagon,\n diamond: dMaskDiamond,\n square: dMaskSquare,\n circle: dMaskCircle,\n star: dMaskStar,\n 'star-2': dMaskStar2,\n triangle: dMaskTriangle,\n 'triangle-2': dMaskTriangle2,\n 'triangle-3': dMaskTriangle3,\n 'triangle-4': dMaskTriangle4,\n}\n\nconst halfClasses: Record<MaskHalf, string> = {\n 'half-1': dMaskHalf1,\n 'half-2': dMaskHalf2,\n}\n\nexport const Mask = forwardRef<HTMLDivElement, MaskProps>(\n ({ shape, half, children, className = '', ...props }, ref) => {\n const classes = [\n dMask,\n shapeClasses[shape],\n half ? halfClasses[half] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nMask.displayName = 'Mask'\n"],"names":["dMask","dMaskSquircle","dMaskHeart","dMaskHexagon","dMaskHexagon2","dMaskDecagon","dMaskPentagon","dMaskDiamond","dMaskSquare","dMaskCircle","dMaskStar","dMaskStar2","dMaskTriangle","dMaskTriangle2","dMaskTriangle3","dMaskTriangle4","dMaskHalf1","dMaskHalf2","shapeClasses","halfClasses","Mask","forwardRef","shape","half","children","className","props","ref","classes"],"mappings":";;AAGA,MAAMA,IAAQ,QACRC,IAAgB,iBAChBC,IAAa,cACbC,IAAe,gBACfC,IAAgB,kBAChBC,IAAe,gBACfC,IAAgB,iBAChBC,IAAe,gBACfC,IAAc,eACdC,IAAc,eACdC,IAAY,aACZC,IAAa,eACbC,IAAgB,iBAChBC,IAAiB,mBACjBC,IAAiB,mBACjBC,IAAiB,mBACjBC,IAAa,eACbC,IAAa,eAgCbC,IAA0C;AAAA,EAC9C,UAAUjB;AAAA,EACV,OAAOC;AAAA,EACP,SAASC;AAAA,EACT,aAAaC;AAAA,EACb,SAASC;AAAA,EACT,UAAUC;AAAA,EACV,SAASC;AAAA,EACT,QAAQC;AAAA,EACR,QAAQC;AAAA,EACR,MAAMC;AAAA,EACN,UAAUC;AAAA,EACV,UAAUC;AAAA,EACV,cAAcC;AAAA,EACd,cAAcC;AAAA,EACd,cAAcC;AAChB,GAEMI,IAAwC;AAAA,EAC5C,UAAUH;AAAA,EACV,UAAUC;AACZ,GAEaG,IAAOC;AAAA,EAClB,CAAC,EAAE,OAAAC,GAAO,MAAAC,GAAM,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAC5D,UAAMC,IAAU;AAAA,MACd5B;AAAA,MACAkB,EAAaI,CAAK;AAAA,MAClBC,IAAOJ,EAAYI,CAAI,IAAI;AAAA,MAC3BE;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BACG,OAAA,EAAI,KAAAE,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAJ,EAAK,cAAc;"}