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":"Checkbox.js","sources":["../../src/components/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from 'react'\n\nexport interface CheckboxSwapConfig {\n /** Content shown when checked */\n on: React.ReactNode\n /** Content shown when unchecked */\n off: React.ReactNode\n /** Animation effect for the swap transition */\n effect?: 'rotate' | 'flip'\n}\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n children?: React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n indeterminate?: boolean\n /** Swap mode: toggle between two visual states instead of showing a checkbox */\n swap?: CheckboxSwapConfig\n className?: string\n}\n\nexport interface CheckboxOptionType {\n label: React.ReactNode\n value: string | number\n disabled?: boolean\n}\n\nexport interface CheckboxGroupProps {\n children?: React.ReactNode\n value?: (string | number)[]\n defaultValue?: (string | number)[]\n onChange?: (values: (string | number)[]) => void\n disabled?: boolean\n options?: (string | number | CheckboxOptionType)[]\n /** Layout direction for options */\n direction?: 'horizontal' | 'vertical'\n /** HTML name attribute for all checkboxes in the group (for form submission) */\n name?: string\n className?: string\n 'data-testid'?: string\n}\n\ninterface CheckboxGroupContextValue {\n value?: (string | number)[]\n onChange?: (checkedValue: string | number, checked: boolean) => void\n disabled?: boolean\n name?: string\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null)\n\nfunction CheckboxGroup({\n children,\n value,\n defaultValue,\n onChange,\n disabled = false,\n options,\n direction = 'vertical',\n name,\n className = '',\n 'data-testid': testId\n}: CheckboxGroupProps) {\n const [internalValue, setInternalValue] = React.useState<(string | number)[]>(defaultValue || [])\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (checkedValue: string | number, checked: boolean) => {\n const newValue = checked\n ? [...currentValue, checkedValue]\n : currentValue.filter((v) => v !== checkedValue)\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const contextValue: CheckboxGroupContextValue = {\n value: currentValue,\n onChange: handleChange,\n disabled,\n name,\n }\n\n // If options are provided, render checkboxes automatically\n if (options) {\n const directionClasses = direction === 'horizontal' ? 'flex flex-row flex-wrap gap-4' : 'flex flex-col gap-2'\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <div className={`${directionClasses} ${className}`.trim()} data-testid={testId}>\n {options.map((option) => {\n if (typeof option === 'string' || typeof option === 'number') {\n const optionTestId = testId ? `${testId}-option-${option}` : undefined\n return (\n <label key={option} className=\"flex items-center cursor-pointer gap-2\">\n <CheckboxRoot value={option} data-testid={optionTestId} />\n <span>{option}</span>\n </label>\n )\n } else {\n const optionTestId = testId ? `${testId}-option-${option.value}` : undefined\n return (\n <label key={option.value} className=\"flex items-center cursor-pointer gap-2\">\n <CheckboxRoot value={option.value} disabled={option.disabled} data-testid={optionTestId} />\n <span>{option.label}</span>\n </label>\n )\n }\n })}\n </div>\n </CheckboxGroupContext.Provider>\n )\n }\n\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <div className={className}>{children}</div>\n </CheckboxGroupContext.Provider>\n )\n}\n\nconst CheckboxRoot = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n children,\n size,\n color,\n indeterminate = false,\n swap,\n className = '',\n value,\n checked,\n onChange,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const groupContext = useContext(CheckboxGroupContext)\n\n const sizeClasses = {\n xs: 'checkbox-xs',\n sm: 'checkbox-sm',\n md: 'checkbox-md',\n lg: 'checkbox-lg',\n xl: 'checkbox-xl',\n }\n\n const colorClasses = {\n primary: 'checkbox-primary',\n secondary: 'checkbox-secondary',\n accent: 'checkbox-accent',\n neutral: 'checkbox-neutral',\n success: 'checkbox-success',\n warning: 'checkbox-warning',\n info: 'checkbox-info',\n error: 'checkbox-error',\n }\n\n const checkboxClasses = [\n 'checkbox',\n size && sizeClasses[size],\n color && colorClasses[color],\n ]\n .filter(Boolean)\n .join(' ')\n\n // Get name from group context or props\n const inputName = groupContext?.name ?? props.name\n\n // aria-checked should be \"mixed\" for indeterminate state\n const ariaChecked = indeterminate ? 'mixed' : undefined\n\n // If in a group, use group's value to determine checked state\n const isChecked = groupContext && value !== undefined && (typeof value === 'string' || typeof value === 'number')\n ? groupContext.value?.includes(value) ?? false\n : checked\n\n const isDisabled = groupContext?.disabled || disabledProp\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (groupContext && value !== undefined && (typeof value === 'string' || typeof value === 'number')) {\n groupContext.onChange?.(value, e.target.checked)\n }\n onChange?.(e)\n }\n\n // Handle indeterminate state\n const checkboxRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n if (node) {\n node.indeterminate = indeterminate\n }\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n },\n [indeterminate, ref]\n )\n\n const dataState = indeterminate ? 'indeterminate' : isChecked ? 'checked' : 'unchecked'\n\n // Swap mode: render as a swap toggle instead of checkbox\n if (swap) {\n const swapClasses = [\n 'swap',\n swap.effect === 'rotate' && 'swap-rotate',\n swap.effect === 'flip' && 'swap-flip',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <label className={swapClasses}>\n <input\n ref={ref}\n type=\"checkbox\"\n name={inputName}\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n aria-checked={ariaChecked}\n data-state={dataState}\n {...props}\n />\n <div className=\"swap-on\">{swap.on}</div>\n <div className=\"swap-off\">{swap.off}</div>\n </label>\n )\n }\n\n // If children provided, wrap in label\n if (children) {\n return (\n <label className={`flex items-center cursor-pointer gap-2 ${className}`.trim()}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className={checkboxClasses}\n name={inputName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n aria-checked={ariaChecked}\n data-state={dataState}\n {...props}\n />\n <span>{children}</span>\n </label>\n )\n }\n\n // Bare checkbox input (no children, no swap)\n return (\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className={`${checkboxClasses} ${className}`.trim()}\n name={inputName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n aria-checked={ariaChecked}\n data-state={dataState}\n {...props}\n />\n )\n }\n)\n\nCheckboxRoot.displayName = 'Checkbox'\n\nexport const Checkbox = Object.assign(CheckboxRoot, {\n Group: CheckboxGroup,\n})\n"],"names":["CheckboxGroupContext","createContext","CheckboxGroup","children","value","defaultValue","onChange","disabled","options","direction","name","className","testId","internalValue","setInternalValue","React","currentValue","contextValue","checkedValue","checked","newValue","v","directionClasses","jsx","option","optionTestId","jsxs","CheckboxRoot","forwardRef","size","color","indeterminate","swap","disabledProp","props","ref","groupContext","useContext","sizeClasses","colorClasses","checkboxClasses","inputName","ariaChecked","isChecked","isDisabled","handleChange","e","checkboxRef","node","dataState","swapClasses","Checkbox"],"mappings":"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"}
1
+ {"version":3,"file":"Checkbox.js","sources":["../../src/components/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dCheckbox = 'checkbox'\nconst dCheckboxXs = 'checkbox-xs'\nconst dCheckboxSm = 'checkbox-sm'\nconst dCheckboxMd = 'checkbox-md'\nconst dCheckboxLg = 'checkbox-lg'\nconst dCheckboxXl = 'checkbox-xl'\nconst dCheckboxPrimary = 'checkbox-primary'\nconst dCheckboxSecondary = 'checkbox-secondary'\nconst dCheckboxAccent = 'checkbox-accent'\nconst dCheckboxNeutral = 'checkbox-neutral'\nconst dCheckboxSuccess = 'checkbox-success'\nconst dCheckboxWarning = 'checkbox-warning'\nconst dCheckboxInfo = 'checkbox-info'\nconst dCheckboxError = 'checkbox-error'\nconst dSwap = 'swap'\nconst dSwapRotate = 'swap-rotate'\nconst dSwapFlip = 'swap-flip'\nconst dSwapOn = 'swap-on'\nconst dSwapOff = 'swap-off'\n\nexport interface CheckboxSwapConfig {\n /** Content shown when checked */\n on: React.ReactNode\n /** Content shown when unchecked */\n off: React.ReactNode\n /** Animation effect for the swap transition */\n effect?: 'rotate' | 'flip'\n}\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n children?: React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n indeterminate?: boolean\n /** Swap mode: toggle between two visual states instead of showing a checkbox */\n swap?: CheckboxSwapConfig\n className?: string\n}\n\nexport interface CheckboxOptionType {\n label: React.ReactNode\n value: string | number\n disabled?: boolean\n}\n\nexport interface CheckboxGroupProps {\n children?: React.ReactNode\n value?: (string | number)[]\n defaultValue?: (string | number)[]\n onChange?: (values: (string | number)[]) => void\n disabled?: boolean\n options?: (string | number | CheckboxOptionType)[]\n /** Layout direction for options */\n direction?: 'horizontal' | 'vertical'\n /** HTML name attribute for all checkboxes in the group (for form submission) */\n name?: string\n className?: string\n 'data-testid'?: string\n}\n\ninterface CheckboxGroupContextValue {\n value?: (string | number)[]\n onChange?: (checkedValue: string | number, checked: boolean) => void\n disabled?: boolean\n name?: string\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null)\n\nfunction CheckboxGroup({\n children,\n value,\n defaultValue,\n onChange,\n disabled = false,\n options,\n direction = 'vertical',\n name,\n className = '',\n 'data-testid': testId\n}: CheckboxGroupProps) {\n const [internalValue, setInternalValue] = React.useState<(string | number)[]>(defaultValue || [])\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (checkedValue: string | number, checked: boolean) => {\n const newValue = checked\n ? [...currentValue, checkedValue]\n : currentValue.filter((v) => v !== checkedValue)\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const contextValue: CheckboxGroupContextValue = {\n value: currentValue,\n onChange: handleChange,\n disabled,\n name,\n }\n\n // If options are provided, render checkboxes automatically\n if (options) {\n const directionClasses = direction === 'horizontal' ? 'flex flex-row flex-wrap gap-4' : 'flex flex-col gap-2'\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <div className={`${directionClasses} ${className}`.trim()} data-testid={testId}>\n {options.map((option) => {\n if (typeof option === 'string' || typeof option === 'number') {\n const optionTestId = testId ? `${testId}-option-${option}` : undefined\n return (\n <label key={option} className=\"flex items-center cursor-pointer gap-2\">\n <CheckboxRoot value={option} data-testid={optionTestId} />\n <span>{option}</span>\n </label>\n )\n } else {\n const optionTestId = testId ? `${testId}-option-${option.value}` : undefined\n return (\n <label key={option.value} className=\"flex items-center cursor-pointer gap-2\">\n <CheckboxRoot value={option.value} disabled={option.disabled} data-testid={optionTestId} />\n <span>{option.label}</span>\n </label>\n )\n }\n })}\n </div>\n </CheckboxGroupContext.Provider>\n )\n }\n\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <div className={className}>{children}</div>\n </CheckboxGroupContext.Provider>\n )\n}\n\nconst CheckboxRoot = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n children,\n size,\n color,\n indeterminate = false,\n swap,\n className = '',\n value,\n checked,\n onChange,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const groupContext = useContext(CheckboxGroupContext)\n\n const sizeClasses = {\n xs: dCheckboxXs,\n sm: dCheckboxSm,\n md: dCheckboxMd,\n lg: dCheckboxLg,\n xl: dCheckboxXl,\n }\n\n const colorClasses = {\n primary: dCheckboxPrimary,\n secondary: dCheckboxSecondary,\n accent: dCheckboxAccent,\n neutral: dCheckboxNeutral,\n success: dCheckboxSuccess,\n warning: dCheckboxWarning,\n info: dCheckboxInfo,\n error: dCheckboxError,\n }\n\n const checkboxClasses = [\n dCheckbox,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n ]\n .filter(Boolean)\n .join(' ')\n\n // Get name from group context or props\n const inputName = groupContext?.name ?? props.name\n\n // aria-checked should be \"mixed\" for indeterminate state\n const ariaChecked = indeterminate ? 'mixed' : undefined\n\n // If in a group, use group's value to determine checked state\n const isChecked = groupContext && value !== undefined && (typeof value === 'string' || typeof value === 'number')\n ? groupContext.value?.includes(value) ?? false\n : checked\n\n const isDisabled = groupContext?.disabled || disabledProp\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (groupContext && value !== undefined && (typeof value === 'string' || typeof value === 'number')) {\n groupContext.onChange?.(value, e.target.checked)\n }\n onChange?.(e)\n }\n\n // Handle indeterminate state\n const checkboxRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n if (node) {\n node.indeterminate = indeterminate\n }\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n },\n [indeterminate, ref]\n )\n\n const dataState = indeterminate ? 'indeterminate' : isChecked ? 'checked' : 'unchecked'\n\n // Swap mode: render as a swap toggle instead of checkbox\n if (swap) {\n const swapClasses = [\n dSwap,\n swap.effect === 'rotate' && dSwapRotate,\n swap.effect === 'flip' && dSwapFlip,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <label className={swapClasses}>\n <input\n ref={ref}\n type=\"checkbox\"\n name={inputName}\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n aria-checked={ariaChecked}\n data-state={dataState}\n {...props}\n />\n <div className={dSwapOn}>{swap.on}</div>\n <div className={dSwapOff}>{swap.off}</div>\n </label>\n )\n }\n\n // If children provided, wrap in label\n if (children) {\n return (\n <label className={`flex items-center cursor-pointer gap-2 ${className}`.trim()}>\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className={checkboxClasses}\n name={inputName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n aria-checked={ariaChecked}\n data-state={dataState}\n {...props}\n />\n <span>{children}</span>\n </label>\n )\n }\n\n // Bare checkbox input (no children, no swap)\n return (\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className={`${checkboxClasses} ${className}`.trim()}\n name={inputName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n aria-checked={ariaChecked}\n data-state={dataState}\n {...props}\n />\n )\n }\n)\n\nCheckboxRoot.displayName = 'Checkbox'\n\nexport const Checkbox = Object.assign(CheckboxRoot, {\n Group: CheckboxGroup,\n})\n"],"names":["dCheckbox","dCheckboxXs","dCheckboxSm","dCheckboxMd","dCheckboxLg","dCheckboxXl","dCheckboxPrimary","dCheckboxSecondary","dCheckboxAccent","dCheckboxNeutral","dCheckboxSuccess","dCheckboxWarning","dCheckboxInfo","dCheckboxError","dSwap","dSwapRotate","dSwapFlip","dSwapOn","dSwapOff","CheckboxGroupContext","createContext","CheckboxGroup","children","value","defaultValue","onChange","disabled","options","direction","name","className","testId","internalValue","setInternalValue","React","currentValue","contextValue","checkedValue","checked","newValue","v","directionClasses","jsx","option","optionTestId","jsxs","CheckboxRoot","forwardRef","size","color","indeterminate","swap","disabledProp","props","ref","componentSize","useConfig","effectiveSize","groupContext","useContext","sizeClasses","colorClasses","checkboxClasses","inputName","ariaChecked","isChecked","isDisabled","handleChange","e","checkboxRef","node","dataState","swapClasses","Checkbox"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { jsxs as l, jsx as r } from "react/jsx-runtime";
1
+ import { jsxs as c, jsx as r } from "react/jsx-runtime";
2
2
  import p from "react";
3
- import { CopyButton as c } from "./CopyButton.js";
4
- const a = ({
3
+ import { CopyButton as l } from "./CopyButton.js";
4
+ const a = "mockup-code", d = ({
5
5
  children: e,
6
6
  prefix: o = "$",
7
7
  highlight: t = !1,
@@ -15,7 +15,7 @@ const a = ({
15
15
  ...i,
16
16
  children: /* @__PURE__ */ r("code", { children: e })
17
17
  }
18
- ), d = (e) => {
18
+ ), f = (e) => {
19
19
  const o = [];
20
20
  return p.Children.forEach(e, (t) => {
21
21
  if (p.isValidElement(t) && t.props?.children) {
@@ -24,24 +24,24 @@ const a = ({
24
24
  }
25
25
  }), o.join(`
26
26
  `);
27
- }, f = ({
27
+ }, m = ({
28
28
  children: e,
29
29
  className: o = "",
30
30
  copyable: t,
31
31
  style: n,
32
32
  ...i
33
33
  }) => {
34
- const s = typeof t == "string" ? t : t ? d(e) : null;
35
- return /* @__PURE__ */ l(
34
+ const s = typeof t == "string" ? t : t ? f(e) : null;
35
+ return /* @__PURE__ */ c(
36
36
  "div",
37
37
  {
38
- className: `mockup-code ${o}`,
38
+ className: `${a} ${o}`,
39
39
  style: { position: "relative", overflow: "hidden", ...n },
40
40
  ...i,
41
41
  children: [
42
42
  e,
43
43
  s !== null && /* @__PURE__ */ r("div", { style: { position: "absolute", top: 8, right: 8 }, children: /* @__PURE__ */ r(
44
- c,
44
+ l,
45
45
  {
46
46
  text: s,
47
47
  size: "xs",
@@ -53,8 +53,8 @@ const a = ({
53
53
  }
54
54
  );
55
55
  };
56
- f.Line = a;
56
+ m.Line = d;
57
57
  export {
58
- f as Code
58
+ m as Code
59
59
  };
60
60
  //# sourceMappingURL=Code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Code.js","sources":["../../src/components/Code.tsx"],"sourcesContent":["import React from 'react'\nimport { CopyButton } from './CopyButton'\n\nexport interface CodeLineProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode\n prefix?: string\n highlight?: boolean\n}\n\nconst Line: React.FC<CodeLineProps> = ({\n children,\n prefix = '$',\n highlight = false,\n className = '',\n ...rest\n}) => {\n return (\n <pre\n data-prefix={prefix}\n className={`${highlight ? 'bg-warning text-warning-content' : ''} ${className}`}\n {...rest}\n >\n <code>{children}</code>\n </pre>\n )\n}\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Show copy button. Pass true to auto-extract text, or a string to specify custom copy text */\n copyable?: boolean | string\n}\n\nconst extractTextFromChildren = (children: React.ReactNode): string => {\n const lines: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.props?.children) {\n const text = typeof child.props.children === 'string'\n ? child.props.children\n : ''\n if (text) lines.push(text)\n }\n })\n return lines.join('\\n')\n}\n\nexport const Code: React.FC<CodeProps> & { Line: typeof Line } = ({\n children,\n className = '',\n copyable,\n style,\n ...rest\n}) => {\n const copyText = typeof copyable === 'string'\n ? copyable\n : copyable\n ? extractTextFromChildren(children)\n : null\n\n return (\n <div\n className={`mockup-code ${className}`}\n style={{ position: 'relative', overflow: 'hidden', ...style }}\n {...rest}\n >\n {children}\n {copyText !== null && (\n <div style={{ position: 'absolute', top: 8, right: 8 }}>\n <CopyButton\n text={copyText}\n size=\"xs\"\n variant=\"ghost\"\n showTooltip\n />\n </div>\n )}\n </div>\n )\n}\n\nCode.Line = Line\n"],"names":["Line","children","prefix","highlight","className","rest","jsx","extractTextFromChildren","lines","React","child","text","Code","copyable","style","copyText","jsxs","CopyButton"],"mappings":";;;AASA,MAAMA,IAAgC,CAAC;AAAA,EACrC,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAaJ;AAAA,IACb,WAAW,GAAGC,IAAY,oCAAoC,EAAE,IAAIC,CAAS;AAAA,IAC5E,GAAGC;AAAA,IAEJ,UAAA,gBAAAC,EAAC,UAAM,UAAAL,EAAA,CAAS;AAAA,EAAA;AAAA,GAWhBM,IAA0B,CAACN,MAAsC;AACrE,QAAMO,IAAkB,CAAA;AACxB,SAAAC,EAAM,SAAS,QAAQR,GAAU,CAACS,MAAU;AAC1C,QAAID,EAAM,eAA+CC,CAAK,KAAKA,EAAM,OAAO,UAAU;AACxF,YAAMC,IAAO,OAAOD,EAAM,MAAM,YAAa,WACzCA,EAAM,MAAM,WACZ;AACJ,MAAIC,KAAMH,EAAM,KAAKG,CAAI;AAAA,IAC3B;AAAA,EACF,CAAC,GACMH,EAAM,KAAK;AAAA,CAAI;AACxB,GAEaI,IAAoD,CAAC;AAAA,EAChE,UAAAX;AAAA,EACA,WAAAG,IAAY;AAAA,EACZ,UAAAS;AAAA,EACA,OAAAC;AAAA,EACA,GAAGT;AACL,MAAM;AACJ,QAAMU,IAAW,OAAOF,KAAa,WACjCA,IACAA,IACEN,EAAwBN,CAAQ,IAChC;AAEN,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,eAAeZ,CAAS;AAAA,MACnC,OAAO,EAAE,UAAU,YAAY,UAAU,UAAU,GAAGU,EAAA;AAAA,MACrD,GAAGT;AAAA,MAEH,UAAA;AAAA,QAAAJ;AAAA,QACAc,MAAa,QACZ,gBAAAT,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,OAAO,EAAA,GACjD,UAAA,gBAAAA;AAAA,UAACW;AAAA,UAAA;AAAA,YACC,MAAMF;AAAA,YACN,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,aAAW;AAAA,UAAA;AAAA,QAAA,EACb,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAH,EAAK,OAAOZ;"}
1
+ {"version":3,"file":"Code.js","sources":["../../src/components/Code.tsx"],"sourcesContent":["import React from 'react'\nimport { CopyButton } from './CopyButton'\n\n// DaisyUI classes\nconst dMockupCode = 'mockup-code'\n\nexport interface CodeLineProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode\n prefix?: string\n highlight?: boolean\n}\n\nconst Line: React.FC<CodeLineProps> = ({\n children,\n prefix = '$',\n highlight = false,\n className = '',\n ...rest\n}) => {\n return (\n <pre\n data-prefix={prefix}\n className={`${highlight ? 'bg-warning text-warning-content' : ''} ${className}`}\n {...rest}\n >\n <code>{children}</code>\n </pre>\n )\n}\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Show copy button. Pass true to auto-extract text, or a string to specify custom copy text */\n copyable?: boolean | string\n}\n\nconst extractTextFromChildren = (children: React.ReactNode): string => {\n const lines: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.props?.children) {\n const text = typeof child.props.children === 'string'\n ? child.props.children\n : ''\n if (text) lines.push(text)\n }\n })\n return lines.join('\\n')\n}\n\nexport const Code: React.FC<CodeProps> & { Line: typeof Line } = ({\n children,\n className = '',\n copyable,\n style,\n ...rest\n}) => {\n const copyText = typeof copyable === 'string'\n ? copyable\n : copyable\n ? extractTextFromChildren(children)\n : null\n\n return (\n <div\n className={`${dMockupCode} ${className}`}\n style={{ position: 'relative', overflow: 'hidden', ...style }}\n {...rest}\n >\n {children}\n {copyText !== null && (\n <div style={{ position: 'absolute', top: 8, right: 8 }}>\n <CopyButton\n text={copyText}\n size=\"xs\"\n variant=\"ghost\"\n showTooltip\n />\n </div>\n )}\n </div>\n )\n}\n\nCode.Line = Line\n"],"names":["dMockupCode","Line","children","prefix","highlight","className","rest","jsx","extractTextFromChildren","lines","React","child","text","Code","copyable","style","copyText","jsxs","CopyButton"],"mappings":";;;AAIA,MAAMA,IAAc,eAQdC,IAAgC,CAAC;AAAA,EACrC,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAaJ;AAAA,IACb,WAAW,GAAGC,IAAY,oCAAoC,EAAE,IAAIC,CAAS;AAAA,IAC5E,GAAGC;AAAA,IAEJ,UAAA,gBAAAC,EAAC,UAAM,UAAAL,EAAA,CAAS;AAAA,EAAA;AAAA,GAWhBM,IAA0B,CAACN,MAAsC;AACrE,QAAMO,IAAkB,CAAA;AACxB,SAAAC,EAAM,SAAS,QAAQR,GAAU,CAACS,MAAU;AAC1C,QAAID,EAAM,eAA+CC,CAAK,KAAKA,EAAM,OAAO,UAAU;AACxF,YAAMC,IAAO,OAAOD,EAAM,MAAM,YAAa,WACzCA,EAAM,MAAM,WACZ;AACJ,MAAIC,KAAMH,EAAM,KAAKG,CAAI;AAAA,IAC3B;AAAA,EACF,CAAC,GACMH,EAAM,KAAK;AAAA,CAAI;AACxB,GAEaI,IAAoD,CAAC;AAAA,EAChE,UAAAX;AAAA,EACA,WAAAG,IAAY;AAAA,EACZ,UAAAS;AAAA,EACA,OAAAC;AAAA,EACA,GAAGT;AACL,MAAM;AACJ,QAAMU,IAAW,OAAOF,KAAa,WACjCA,IACAA,IACEN,EAAwBN,CAAQ,IAChC;AAEN,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAGjB,CAAW,IAAIK,CAAS;AAAA,MACtC,OAAO,EAAE,UAAU,YAAY,UAAU,UAAU,GAAGU,EAAA;AAAA,MACrD,GAAGT;AAAA,MAEH,UAAA;AAAA,QAAAJ;AAAA,QACAc,MAAa,QACZ,gBAAAT,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,OAAO,EAAA,GACjD,UAAA,gBAAAA;AAAA,UAACW;AAAA,UAAA;AAAA,YACC,MAAMF;AAAA,YACN,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,aAAW;AAAA,UAAA;AAAA,QAAA,EACb,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAH,EAAK,OAAOZ;"}
@@ -1,106 +1,106 @@
1
1
  import { jsx as t, jsxs as y } from "react/jsx-runtime";
2
- import { forwardRef as h, useState as z } from "react";
3
- const B = {
2
+ import { forwardRef as h, useState as P } from "react";
3
+ const T = "collapse", $ = "collapse-arrow", z = "collapse-plus", B = "collapse-open", E = "collapse-close", k = "collapse-arrow-end", R = "collapse-title", S = "collapse-content", q = {
4
4
  sm: "text-sm",
5
5
  md: "text-base",
6
6
  lg: "text-lg"
7
- }, N = h(({ item: l, isOpen: s, onToggle: b, icon: c, expandIconPlacement: i, bordered: d, ghost: p, size: v, testId: f }, m) => {
8
- const a = l.collapsible === "disabled", w = [
9
- "collapse",
7
+ }, A = h(({ item: l, isOpen: s, onToggle: C, icon: c, expandIconPlacement: d, bordered: i, ghost: p, size: b, testId: f }, v) => {
8
+ const o = l.collapsible === "disabled", m = [
9
+ T,
10
10
  {
11
- arrow: "collapse-arrow",
12
- plus: "collapse-plus",
11
+ arrow: $,
12
+ plus: z,
13
13
  none: ""
14
14
  }[c],
15
- s ? "collapse-open" : "collapse-close",
15
+ s ? B : E,
16
16
  !p && "bg-base-200",
17
17
  p && "bg-transparent",
18
- d && "border border-base-300",
19
- i === "end" && c !== "none" && "collapse-arrow-end",
20
- B[v],
21
- a && "opacity-50 cursor-not-allowed",
18
+ i && "border border-base-300",
19
+ d === "end" && c !== "none" && k,
20
+ q[b],
21
+ o && "opacity-50 cursor-not-allowed",
22
22
  l.className
23
23
  ].filter(Boolean).join(" "), u = () => {
24
- a || b();
24
+ o || C();
25
25
  };
26
26
  return /* @__PURE__ */ y(
27
27
  "div",
28
28
  {
29
- ref: m,
30
- className: w,
29
+ ref: v,
30
+ className: m,
31
31
  "data-testid": f ? `${f}-panel-${l.key}` : void 0,
32
32
  "data-state": s ? "open" : "closed",
33
33
  children: [
34
34
  /* @__PURE__ */ y(
35
35
  "div",
36
36
  {
37
- className: "collapse-title font-medium flex items-center justify-between cursor-pointer",
37
+ className: `${R} font-medium flex items-center justify-between cursor-pointer`,
38
38
  onClick: u,
39
39
  role: "button",
40
- tabIndex: a ? -1 : 0,
41
- onKeyDown: (o) => {
42
- (o.key === "Enter" || o.key === " ") && (o.preventDefault(), u());
40
+ tabIndex: o ? -1 : 0,
41
+ onKeyDown: (a) => {
42
+ (a.key === "Enter" || a.key === " ") && (a.preventDefault(), u());
43
43
  },
44
44
  "aria-expanded": s,
45
- "aria-disabled": a,
45
+ "aria-disabled": o,
46
46
  children: [
47
47
  /* @__PURE__ */ t("span", { children: l.label }),
48
48
  l.extra && /* @__PURE__ */ t("span", { className: "ml-auto mr-6", children: l.extra })
49
49
  ]
50
50
  }
51
51
  ),
52
- /* @__PURE__ */ t("div", { className: "collapse-content", children: l.children })
52
+ /* @__PURE__ */ t("div", { className: S, children: l.children })
53
53
  ]
54
54
  }
55
55
  );
56
56
  });
57
- N.displayName = "CollapsePanel";
58
- const P = h(
57
+ A.displayName = "CollapsePanel";
58
+ const F = h(
59
59
  ({
60
60
  items: l = [],
61
61
  activeKey: s,
62
- defaultActiveKey: b,
62
+ defaultActiveKey: C,
63
63
  accordion: c = !1,
64
- bordered: i = !0,
65
- ghost: d = !1,
64
+ bordered: d = !0,
65
+ ghost: i = !1,
66
66
  size: p = "md",
67
- icon: v = "arrow",
67
+ icon: b = "arrow",
68
68
  expandIconPlacement: f = "start",
69
- onChange: m,
70
- className: a = "",
71
- "data-testid": x = "collapse",
72
- ...w
69
+ onChange: v,
70
+ className: o = "",
71
+ "data-testid": w = "collapse",
72
+ ...m
73
73
  }, u) => {
74
- const o = (e) => e === void 0 ? [] : Array.isArray(e) ? e : [e], [g, A] = z(
75
- () => o(b)
76
- ), C = s !== void 0, n = C ? o(s) : g, j = (e) => {
74
+ const a = (e) => e === void 0 ? [] : Array.isArray(e) ? e : [e], [N, g] = P(
75
+ () => a(C)
76
+ ), x = s !== void 0, n = x ? a(s) : N, j = (e) => {
77
77
  let r;
78
- c ? r = n.includes(e) ? [] : [e] : n.includes(e) ? r = n.filter((D) => D !== e) : r = [...n, e], C || A(r), m?.(r);
78
+ c ? r = n.includes(e) ? [] : [e] : n.includes(e) ? r = n.filter((D) => D !== e) : r = [...n, e], x || g(r), v?.(r);
79
79
  }, K = [
80
80
  "flex flex-col",
81
- i && !d && "divide-y divide-base-300",
82
- i && "border border-base-300 rounded-lg overflow-hidden",
83
- a
81
+ d && !i && "divide-y divide-base-300",
82
+ d && "border border-base-300 rounded-lg overflow-hidden",
83
+ o
84
84
  ].filter(Boolean).join(" ");
85
85
  return /* @__PURE__ */ t(
86
86
  "div",
87
87
  {
88
88
  ref: u,
89
89
  className: K,
90
- "data-testid": x,
91
- ...w,
90
+ "data-testid": w,
91
+ ...m,
92
92
  children: l.map((e) => /* @__PURE__ */ t(
93
- N,
93
+ A,
94
94
  {
95
95
  item: e,
96
96
  isOpen: n.includes(e.key),
97
97
  onToggle: () => j(e.key),
98
- icon: e.showArrow === !1 ? "none" : v,
98
+ icon: e.showArrow === !1 ? "none" : b,
99
99
  expandIconPlacement: f,
100
100
  bordered: !1,
101
- ghost: d,
101
+ ghost: i,
102
102
  size: p,
103
- testId: x
103
+ testId: w
104
104
  },
105
105
  e.key
106
106
  ))
@@ -108,8 +108,8 @@ const P = h(
108
108
  );
109
109
  }
110
110
  );
111
- P.displayName = "Collapse";
111
+ F.displayName = "Collapse";
112
112
  export {
113
- P as Collapse
113
+ F as Collapse
114
114
  };
115
115
  //# sourceMappingURL=Collapse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Collapse.js","sources":["../../src/components/Collapse.tsx"],"sourcesContent":["import React, { forwardRef, useState } from 'react'\n\nexport type CollapseSize = 'sm' | 'md' | 'lg'\nexport type CollapseIconPosition = 'start' | 'end'\nexport type CollapseCollapsible = 'header' | 'icon' | 'disabled'\n\nexport interface CollapseItemType {\n /** Unique key for the panel */\n key: string | number\n /** Panel header/label */\n label: React.ReactNode\n /** Panel content */\n children: React.ReactNode\n /** Extra element in the corner */\n extra?: React.ReactNode\n /** Whether to show the arrow icon */\n showArrow?: boolean\n /** Collapsible mode for this panel */\n collapsible?: CollapseCollapsible\n /** Custom class name for this panel */\n className?: string\n}\n\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Collapse items */\n items?: CollapseItemType[]\n /** Currently active panel keys (controlled) */\n activeKey?: string | number | (string | number)[]\n /** Default active panel keys (uncontrolled) */\n defaultActiveKey?: string | number | (string | number)[]\n /** Accordion mode - only one panel open at a time */\n accordion?: boolean\n /** Show border around panels */\n bordered?: boolean\n /** Ghost mode - transparent background */\n ghost?: boolean\n /** Size variant */\n size?: CollapseSize\n /** Icon type */\n icon?: 'arrow' | 'plus' | 'none'\n /** Icon placement */\n expandIconPlacement?: CollapseIconPosition\n /** Callback when panels change */\n onChange?: (activeKey: (string | number)[]) => void\n /** Test ID */\n 'data-testid'?: string\n}\n\nconst sizeClasses: Record<CollapseSize, string> = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n}\n\nconst CollapsePanel = forwardRef<\n HTMLDivElement,\n {\n item: CollapseItemType\n isOpen: boolean\n onToggle: () => void\n icon: 'arrow' | 'plus' | 'none'\n expandIconPlacement: CollapseIconPosition\n bordered: boolean\n ghost: boolean\n size: CollapseSize\n testId?: string\n }\n>(({ item, isOpen, onToggle, icon, expandIconPlacement, bordered, ghost, size, testId }, ref) => {\n const isDisabled = item.collapsible === 'disabled'\n\n const iconClasses = {\n arrow: 'collapse-arrow',\n plus: 'collapse-plus',\n none: '',\n }\n\n const panelClasses = [\n 'collapse',\n iconClasses[icon],\n isOpen ? 'collapse-open' : 'collapse-close',\n !ghost && 'bg-base-200',\n ghost && 'bg-transparent',\n bordered && 'border border-base-300',\n expandIconPlacement === 'end' && icon !== 'none' && 'collapse-arrow-end',\n sizeClasses[size],\n isDisabled && 'opacity-50 cursor-not-allowed',\n item.className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleClick = () => {\n if (!isDisabled) {\n onToggle()\n }\n }\n\n return (\n <div\n ref={ref}\n className={panelClasses}\n data-testid={testId ? `${testId}-panel-${item.key}` : undefined}\n data-state={isOpen ? 'open' : 'closed'}\n >\n <div\n className=\"collapse-title font-medium flex items-center justify-between cursor-pointer\"\n onClick={handleClick}\n role=\"button\"\n tabIndex={isDisabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n aria-expanded={isOpen}\n aria-disabled={isDisabled}\n >\n <span>{item.label}</span>\n {item.extra && <span className=\"ml-auto mr-6\">{item.extra}</span>}\n </div>\n <div className=\"collapse-content\">\n {item.children}\n </div>\n </div>\n )\n})\n\nCollapsePanel.displayName = 'CollapsePanel'\n\nexport const Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n (\n {\n items = [],\n activeKey,\n defaultActiveKey,\n accordion = false,\n bordered = true,\n ghost = false,\n size = 'md',\n icon = 'arrow',\n expandIconPlacement = 'start',\n onChange,\n className = '',\n 'data-testid': testId = 'collapse',\n ...rest\n },\n ref\n ) => {\n // Normalize keys to array\n const normalizeKeys = (keys: string | number | (string | number)[] | undefined): (string | number)[] => {\n if (keys === undefined) return []\n if (Array.isArray(keys)) return keys\n return [keys]\n }\n\n const [internalActiveKeys, setInternalActiveKeys] = useState<(string | number)[]>(\n () => normalizeKeys(defaultActiveKey)\n )\n\n const isControlled = activeKey !== undefined\n const currentActiveKeys = isControlled ? normalizeKeys(activeKey) : internalActiveKeys\n\n const handleToggle = (key: string | number) => {\n let newActiveKeys: (string | number)[]\n\n if (accordion) {\n // In accordion mode, only one can be open\n newActiveKeys = currentActiveKeys.includes(key) ? [] : [key]\n } else {\n // Toggle the key\n if (currentActiveKeys.includes(key)) {\n newActiveKeys = currentActiveKeys.filter((k) => k !== key)\n } else {\n newActiveKeys = [...currentActiveKeys, key]\n }\n }\n\n if (!isControlled) {\n setInternalActiveKeys(newActiveKeys)\n }\n onChange?.(newActiveKeys)\n }\n\n const containerClasses = [\n 'flex flex-col',\n bordered && !ghost && 'divide-y divide-base-300',\n bordered && 'border border-base-300 rounded-lg overflow-hidden',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n ref={ref}\n className={containerClasses}\n data-testid={testId}\n {...rest}\n >\n {items.map((item) => (\n <CollapsePanel\n key={item.key}\n item={item}\n isOpen={currentActiveKeys.includes(item.key)}\n onToggle={() => handleToggle(item.key)}\n icon={item.showArrow === false ? 'none' : icon}\n expandIconPlacement={expandIconPlacement}\n bordered={false}\n ghost={ghost}\n size={size}\n testId={testId}\n />\n ))}\n </div>\n )\n }\n)\n\nCollapse.displayName = 'Collapse'\n"],"names":["sizeClasses","CollapsePanel","forwardRef","item","isOpen","onToggle","icon","expandIconPlacement","bordered","ghost","size","testId","ref","isDisabled","panelClasses","handleClick","jsxs","e","jsx","Collapse","items","activeKey","defaultActiveKey","accordion","onChange","className","rest","normalizeKeys","keys","internalActiveKeys","setInternalActiveKeys","useState","isControlled","currentActiveKeys","handleToggle","key","newActiveKeys","k","containerClasses"],"mappings":"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"}
1
+ {"version":3,"file":"Collapse.js","sources":["../../src/components/Collapse.tsx"],"sourcesContent":["import React, { forwardRef, useState } from 'react'\n\n// DaisyUI classes\nconst dCollapse = 'collapse'\nconst dCollapseArrow = 'collapse-arrow'\nconst dCollapsePlus = 'collapse-plus'\nconst dCollapseOpen = 'collapse-open'\nconst dCollapseClose = 'collapse-close'\nconst dCollapseArrowEnd = 'collapse-arrow-end'\nconst dCollapseTitle = 'collapse-title'\nconst dCollapseContent = 'collapse-content'\n\nexport type CollapseSize = 'sm' | 'md' | 'lg'\nexport type CollapseIconPosition = 'start' | 'end'\nexport type CollapseCollapsible = 'header' | 'icon' | 'disabled'\n\nexport interface CollapseItemType {\n /** Unique key for the panel */\n key: string | number\n /** Panel header/label */\n label: React.ReactNode\n /** Panel content */\n children: React.ReactNode\n /** Extra element in the corner */\n extra?: React.ReactNode\n /** Whether to show the arrow icon */\n showArrow?: boolean\n /** Collapsible mode for this panel */\n collapsible?: CollapseCollapsible\n /** Custom class name for this panel */\n className?: string\n}\n\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Collapse items */\n items?: CollapseItemType[]\n /** Currently active panel keys (controlled) */\n activeKey?: string | number | (string | number)[]\n /** Default active panel keys (uncontrolled) */\n defaultActiveKey?: string | number | (string | number)[]\n /** Accordion mode - only one panel open at a time */\n accordion?: boolean\n /** Show border around panels */\n bordered?: boolean\n /** Ghost mode - transparent background */\n ghost?: boolean\n /** Size variant */\n size?: CollapseSize\n /** Icon type */\n icon?: 'arrow' | 'plus' | 'none'\n /** Icon placement */\n expandIconPlacement?: CollapseIconPosition\n /** Callback when panels change */\n onChange?: (activeKey: (string | number)[]) => void\n /** Test ID */\n 'data-testid'?: string\n}\n\nconst sizeClasses: Record<CollapseSize, string> = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n}\n\nconst CollapsePanel = forwardRef<\n HTMLDivElement,\n {\n item: CollapseItemType\n isOpen: boolean\n onToggle: () => void\n icon: 'arrow' | 'plus' | 'none'\n expandIconPlacement: CollapseIconPosition\n bordered: boolean\n ghost: boolean\n size: CollapseSize\n testId?: string\n }\n>(({ item, isOpen, onToggle, icon, expandIconPlacement, bordered, ghost, size, testId }, ref) => {\n const isDisabled = item.collapsible === 'disabled'\n\n const iconClasses = {\n arrow: dCollapseArrow,\n plus: dCollapsePlus,\n none: '',\n }\n\n const panelClasses = [\n dCollapse,\n iconClasses[icon],\n isOpen ? dCollapseOpen : dCollapseClose,\n !ghost && 'bg-base-200',\n ghost && 'bg-transparent',\n bordered && 'border border-base-300',\n expandIconPlacement === 'end' && icon !== 'none' && dCollapseArrowEnd,\n sizeClasses[size],\n isDisabled && 'opacity-50 cursor-not-allowed',\n item.className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleClick = () => {\n if (!isDisabled) {\n onToggle()\n }\n }\n\n return (\n <div\n ref={ref}\n className={panelClasses}\n data-testid={testId ? `${testId}-panel-${item.key}` : undefined}\n data-state={isOpen ? 'open' : 'closed'}\n >\n <div\n className={`${dCollapseTitle} font-medium flex items-center justify-between cursor-pointer`}\n onClick={handleClick}\n role=\"button\"\n tabIndex={isDisabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n aria-expanded={isOpen}\n aria-disabled={isDisabled}\n >\n <span>{item.label}</span>\n {item.extra && <span className=\"ml-auto mr-6\">{item.extra}</span>}\n </div>\n <div className={dCollapseContent}>\n {item.children}\n </div>\n </div>\n )\n})\n\nCollapsePanel.displayName = 'CollapsePanel'\n\nexport const Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n (\n {\n items = [],\n activeKey,\n defaultActiveKey,\n accordion = false,\n bordered = true,\n ghost = false,\n size = 'md',\n icon = 'arrow',\n expandIconPlacement = 'start',\n onChange,\n className = '',\n 'data-testid': testId = 'collapse',\n ...rest\n },\n ref\n ) => {\n // Normalize keys to array\n const normalizeKeys = (keys: string | number | (string | number)[] | undefined): (string | number)[] => {\n if (keys === undefined) return []\n if (Array.isArray(keys)) return keys\n return [keys]\n }\n\n const [internalActiveKeys, setInternalActiveKeys] = useState<(string | number)[]>(\n () => normalizeKeys(defaultActiveKey)\n )\n\n const isControlled = activeKey !== undefined\n const currentActiveKeys = isControlled ? normalizeKeys(activeKey) : internalActiveKeys\n\n const handleToggle = (key: string | number) => {\n let newActiveKeys: (string | number)[]\n\n if (accordion) {\n // In accordion mode, only one can be open\n newActiveKeys = currentActiveKeys.includes(key) ? [] : [key]\n } else {\n // Toggle the key\n if (currentActiveKeys.includes(key)) {\n newActiveKeys = currentActiveKeys.filter((k) => k !== key)\n } else {\n newActiveKeys = [...currentActiveKeys, key]\n }\n }\n\n if (!isControlled) {\n setInternalActiveKeys(newActiveKeys)\n }\n onChange?.(newActiveKeys)\n }\n\n const containerClasses = [\n 'flex flex-col',\n bordered && !ghost && 'divide-y divide-base-300',\n bordered && 'border border-base-300 rounded-lg overflow-hidden',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n ref={ref}\n className={containerClasses}\n data-testid={testId}\n {...rest}\n >\n {items.map((item) => (\n <CollapsePanel\n key={item.key}\n item={item}\n isOpen={currentActiveKeys.includes(item.key)}\n onToggle={() => handleToggle(item.key)}\n icon={item.showArrow === false ? 'none' : icon}\n expandIconPlacement={expandIconPlacement}\n bordered={false}\n ghost={ghost}\n size={size}\n testId={testId}\n />\n ))}\n </div>\n )\n }\n)\n\nCollapse.displayName = 'Collapse'\n"],"names":["dCollapse","dCollapseArrow","dCollapsePlus","dCollapseOpen","dCollapseClose","dCollapseArrowEnd","dCollapseTitle","dCollapseContent","sizeClasses","CollapsePanel","forwardRef","item","isOpen","onToggle","icon","expandIconPlacement","bordered","ghost","size","testId","ref","isDisabled","panelClasses","handleClick","jsxs","e","jsx","Collapse","items","activeKey","defaultActiveKey","accordion","onChange","className","rest","normalizeKeys","keys","internalActiveKeys","setInternalActiveKeys","useState","isControlled","currentActiveKeys","handleToggle","key","newActiveKeys","k","containerClasses"],"mappings":"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"}
@@ -5,7 +5,7 @@ export interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivEleme
5
5
  onChange?: (color: string) => void;
6
6
  mode?: 'swatches' | 'picker' | 'both';
7
7
  presets?: string[];
8
- size?: 'xs' | 'sm' | 'md' | 'lg';
8
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
9
9
  disabled?: boolean;
10
10
  showText?: boolean;
11
11
  allowClear?: boolean;