asterui 0.12.13 → 0.12.14

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 (177) hide show
  1. package/dist/components/Button.d.ts +4 -0
  2. package/dist/components/Drawer.d.ts +47 -6
  3. package/dist/components/Dropdown.d.ts +65 -9
  4. package/dist/components/Input.d.ts +15 -1
  5. package/dist/components/Modal.d.ts +5 -1
  6. package/dist/components/Navbar.d.ts +15 -1
  7. package/dist/components/SidebarDrawer.d.ts +21 -0
  8. package/dist/components/Tabs.d.ts +30 -4
  9. package/dist/index.d.ts +6 -4
  10. package/dist/index.js +169 -167
  11. package/dist/index.js.map +1 -1
  12. package/dist/index100.js +44 -11
  13. package/dist/index100.js.map +1 -1
  14. package/dist/index101.js +10 -12
  15. package/dist/index101.js.map +1 -1
  16. package/dist/index102.js +14 -7
  17. package/dist/index102.js.map +1 -1
  18. package/dist/index103.js +7 -12
  19. package/dist/index103.js.map +1 -1
  20. package/dist/index104.js +11 -29
  21. package/dist/index104.js.map +1 -1
  22. package/dist/index105.js +29 -16
  23. package/dist/index105.js.map +1 -1
  24. package/dist/index106.js +21 -0
  25. package/dist/index106.js.map +1 -0
  26. package/dist/index21.js +1 -1
  27. package/dist/index26.js +171 -40
  28. package/dist/index26.js.map +1 -1
  29. package/dist/index27.js +41 -17
  30. package/dist/index27.js.map +1 -1
  31. package/dist/index28.js +17 -33
  32. package/dist/index28.js.map +1 -1
  33. package/dist/index29.js +33 -52
  34. package/dist/index29.js.map +1 -1
  35. package/dist/index30.js +50 -61
  36. package/dist/index30.js.map +1 -1
  37. package/dist/index31.js +60 -181
  38. package/dist/index31.js.map +1 -1
  39. package/dist/index32.js +184 -18
  40. package/dist/index32.js.map +1 -1
  41. package/dist/index33.js +15 -217
  42. package/dist/index33.js.map +1 -1
  43. package/dist/index34.js +216 -1083
  44. package/dist/index34.js.map +1 -1
  45. package/dist/index35.js +1086 -16
  46. package/dist/index35.js.map +1 -1
  47. package/dist/index36.js +16 -121
  48. package/dist/index36.js.map +1 -1
  49. package/dist/index37.js +119 -37
  50. package/dist/index37.js.map +1 -1
  51. package/dist/index38.js +34 -208
  52. package/dist/index38.js.map +1 -1
  53. package/dist/index39.js +390 -89
  54. package/dist/index39.js.map +1 -1
  55. package/dist/index40.js +93 -158
  56. package/dist/index40.js.map +1 -1
  57. package/dist/index41.js +211 -135
  58. package/dist/index41.js.map +1 -1
  59. package/dist/index42.js +146 -15
  60. package/dist/index42.js.map +1 -1
  61. package/dist/index43.js +15 -17
  62. package/dist/index43.js.map +1 -1
  63. package/dist/index44.js +17 -21
  64. package/dist/index44.js.map +1 -1
  65. package/dist/index45.js +18 -134
  66. package/dist/index45.js.map +1 -1
  67. package/dist/index46.js +134 -10
  68. package/dist/index46.js.map +1 -1
  69. package/dist/index47.js +13 -35
  70. package/dist/index47.js.map +1 -1
  71. package/dist/index48.js +35 -34
  72. package/dist/index48.js.map +1 -1
  73. package/dist/index49.js +34 -81
  74. package/dist/index49.js.map +1 -1
  75. package/dist/index50.js +71 -166
  76. package/dist/index50.js.map +1 -1
  77. package/dist/index51.js +167 -144
  78. package/dist/index51.js.map +1 -1
  79. package/dist/index52.js +152 -11
  80. package/dist/index52.js.map +1 -1
  81. package/dist/index53.js +10 -20
  82. package/dist/index53.js.map +1 -1
  83. package/dist/index54.js +22 -14
  84. package/dist/index54.js.map +1 -1
  85. package/dist/index55.js +14 -7
  86. package/dist/index55.js.map +1 -1
  87. package/dist/index56.js +6 -310
  88. package/dist/index56.js.map +1 -1
  89. package/dist/index57.js +334 -17
  90. package/dist/index57.js.map +1 -1
  91. package/dist/index58.js +47 -122
  92. package/dist/index58.js.map +1 -1
  93. package/dist/index59.js +120 -108
  94. package/dist/index59.js.map +1 -1
  95. package/dist/index60.js +107 -167
  96. package/dist/index60.js.map +1 -1
  97. package/dist/index61.js +167 -29
  98. package/dist/index61.js.map +1 -1
  99. package/dist/index62.js +30 -120
  100. package/dist/index62.js.map +1 -1
  101. package/dist/index63.js +116 -80
  102. package/dist/index63.js.map +1 -1
  103. package/dist/index64.js +85 -19
  104. package/dist/index64.js.map +1 -1
  105. package/dist/index65.js +19 -73
  106. package/dist/index65.js.map +1 -1
  107. package/dist/index66.js +71 -54
  108. package/dist/index66.js.map +1 -1
  109. package/dist/index67.js +56 -44
  110. package/dist/index67.js.map +1 -1
  111. package/dist/index68.js +42 -49
  112. package/dist/index68.js.map +1 -1
  113. package/dist/index69.js +52 -62
  114. package/dist/index69.js.map +1 -1
  115. package/dist/index70.js +56 -101
  116. package/dist/index70.js.map +1 -1
  117. package/dist/index71.js +107 -41
  118. package/dist/index71.js.map +1 -1
  119. package/dist/index72.js +41 -68
  120. package/dist/index72.js.map +1 -1
  121. package/dist/index73.js +66 -19
  122. package/dist/index73.js.map +1 -1
  123. package/dist/index74.js +18 -55
  124. package/dist/index74.js.map +1 -1
  125. package/dist/index75.js +55 -251
  126. package/dist/index75.js.map +1 -1
  127. package/dist/index76.js +254 -22
  128. package/dist/index76.js.map +1 -1
  129. package/dist/index77.js +22 -31
  130. package/dist/index77.js.map +1 -1
  131. package/dist/index78.js +30 -93
  132. package/dist/index78.js.map +1 -1
  133. package/dist/index79.js +89 -324
  134. package/dist/index79.js.map +1 -1
  135. package/dist/index80.js +323 -50
  136. package/dist/index80.js.map +1 -1
  137. package/dist/index81.js +79 -39
  138. package/dist/index81.js.map +1 -1
  139. package/dist/index82.js +40 -23
  140. package/dist/index82.js.map +1 -1
  141. package/dist/index83.js +21 -93
  142. package/dist/index83.js.map +1 -1
  143. package/dist/index84.js +87 -148
  144. package/dist/index84.js.map +1 -1
  145. package/dist/index85.js +147 -152
  146. package/dist/index85.js.map +1 -1
  147. package/dist/index86.js +159 -63
  148. package/dist/index86.js.map +1 -1
  149. package/dist/index87.js +65 -35
  150. package/dist/index87.js.map +1 -1
  151. package/dist/index88.js +35 -234
  152. package/dist/index88.js.map +1 -1
  153. package/dist/index89.js +231 -31
  154. package/dist/index89.js.map +1 -1
  155. package/dist/index9.js +69 -44
  156. package/dist/index9.js.map +1 -1
  157. package/dist/index90.js +34 -210
  158. package/dist/index90.js.map +1 -1
  159. package/dist/index91.js +195 -198
  160. package/dist/index91.js.map +1 -1
  161. package/dist/index92.js +159 -241
  162. package/dist/index92.js.map +1 -1
  163. package/dist/index93.js +283 -166
  164. package/dist/index93.js.map +1 -1
  165. package/dist/index94.js +173 -253
  166. package/dist/index94.js.map +1 -1
  167. package/dist/index95.js +258 -14
  168. package/dist/index95.js.map +1 -1
  169. package/dist/index96.js +12 -31
  170. package/dist/index96.js.map +1 -1
  171. package/dist/index97.js +32 -5
  172. package/dist/index97.js.map +1 -1
  173. package/dist/index98.js +5 -13
  174. package/dist/index98.js.map +1 -1
  175. package/dist/index99.js +11 -43
  176. package/dist/index99.js.map +1 -1
  177. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index41.js","sources":["../src/components/InputNumber.tsx"],"sourcesContent":["import React, { useState, useRef, forwardRef, useImperativeHandle } from 'react'\n\nexport interface InputNumberProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange' | 'value' | 'defaultValue'> {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n precision?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n disabled?: boolean\n onChange?: (value: number | null) => void\n formatter?: (value: number | undefined) => string\n parser?: (displayValue: string) => number\n className?: string\n controls?: boolean\n block?: boolean\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision,\n size,\n disabled = false,\n onChange,\n formatter,\n parser,\n className = '',\n controls = true,\n block = true,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<number | null>(defaultValue ?? null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n useImperativeHandle(ref, () => inputRef.current!)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n\n const formatValue = (num: number | null): string => {\n if (num === null) return ''\n let formatted = num\n if (precision !== undefined) {\n formatted = Number(num.toFixed(precision))\n }\n return formatter ? formatter(formatted) : String(formatted)\n }\n\n const parseValue = (str: string): number | null => {\n if (!str) return null\n const parsed = parser ? parser(str) : parseFloat(str)\n if (isNaN(parsed)) return null\n return parsed\n }\n\n const clampValue = (num: number): number => {\n let clamped = Math.max(min, Math.min(max, num))\n if (precision !== undefined) {\n clamped = Number(clamped.toFixed(precision))\n }\n return clamped\n }\n\n const updateValue = (newValue: number | null) => {\n if (newValue === null) {\n if (controlledValue === undefined) {\n setInternalValue(null)\n }\n onChange?.(null)\n return\n }\n\n const clamped = clampValue(newValue)\n if (controlledValue === undefined) {\n setInternalValue(clamped)\n }\n onChange?.(clamped)\n }\n\n const handleIncrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue + step)\n }\n\n const handleDecrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue - step)\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const parsed = parseValue(e.target.value)\n if (parsed !== null) {\n updateValue(parsed)\n } else if (e.target.value === '') {\n updateValue(null)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n handleIncrement()\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n handleDecrement()\n }\n }\n\n const handleBlur = () => {\n // Ensure value is within bounds on blur\n if (value !== null && (value < min || value > max)) {\n updateValue(clampValue(value))\n }\n }\n\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const inputClasses = [\n 'input',\n 'input-bordered',\n 'w-full',\n size && sizeClasses[size],\n disabled && 'input-disabled',\n controls && 'pr-8',\n ]\n .filter(Boolean)\n .join(' ')\n\n const buttonSize = size === 'xs' || size === 'sm' ? 'btn-xs' : 'btn-sm'\n\n return (\n <div className={`relative ${block ? 'w-full' : 'inline-block'} group ${className}`}>\n <input\n ref={inputRef}\n type=\"text\"\n className={inputClasses}\n value={formatValue(value)}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n disabled={disabled}\n {...props}\n />\n {controls && (\n <div className=\"absolute right-1 top-1/2 -translate-y-1/2 flex flex-col gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleIncrement}\n disabled={disabled || (value !== null && value >= max)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleDecrement}\n disabled={disabled || (value !== null && value <= min)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n </div>\n )}\n </div>\n )\n }\n)\n\nInputNumber.displayName = 'InputNumber'\n\nexport default InputNumber\n"],"names":["InputNumber","forwardRef","controlledValue","defaultValue","min","max","step","precision","size","disabled","onChange","formatter","parser","className","controls","block","props","ref","internalValue","setInternalValue","useState","inputRef","useRef","useImperativeHandle","value","formatValue","num","formatted","parseValue","str","parsed","clampValue","clamped","updateValue","newValue","handleIncrement","handleDecrement","handleInputChange","e","handleKeyDown","handleBlur","inputClasses","buttonSize","jsxs","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index41.js","sources":["../src/components/Input.tsx"],"sourcesContent":["import React, { forwardRef, useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n type?: 'text' | 'password' | 'email' | 'number' | 'date' | 'datetime-local' | 'week' | 'month' | 'tel' | 'url' | 'search' | 'time'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n /** Validation status */\n status?: 'error' | 'warning'\n ghost?: boolean\n bordered?: boolean\n className?: string\n /** Input mask pattern. Use # for digits, A for letters, * for alphanumeric */\n mask?: string\n /** Placeholder character shown in mask (default: _) */\n maskPlaceholder?: string\n /** Show clear button when input has value */\n allowClear?: boolean | { clearIcon?: React.ReactNode }\n /** Callback when clear button is clicked */\n onClear?: () => void\n /** Prefix icon or element */\n prefix?: React.ReactNode\n /** Suffix icon or element */\n suffix?: React.ReactNode\n /** ID for error message element (for aria-describedby) */\n errorId?: string\n}\n\n// Helper to apply mask to raw value\nfunction applyMask(raw: string, mask: string, placeholder: string): string {\n let result = ''\n let rawIndex = 0\n\n for (let i = 0; i < mask.length && rawIndex <= raw.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (rawIndex < raw.length) {\n result += raw[rawIndex]\n rawIndex++\n } else {\n result += placeholder\n }\n } else {\n result += maskChar\n }\n }\n\n return result\n}\n\n// Extract raw value from masked input\nfunction extractRaw(value: string, mask: string, placeholder: string): string {\n let raw = ''\n for (let i = 0; i < value.length && i < mask.length; i++) {\n const maskChar = mask[i]\n if ((maskChar === '#' || maskChar === 'A' || maskChar === '*') && value[i] !== placeholder) {\n raw += value[i]\n }\n }\n return raw\n}\n\n// Check if character is valid for mask position\nfunction isValidChar(char: string, maskChar: string): boolean {\n if (maskChar === '#') return /\\d/.test(char)\n if (maskChar === 'A') return /[a-zA-Z]/.test(char)\n if (maskChar === '*') return /[a-zA-Z0-9]/.test(char)\n return false\n}\n\n// Find next input position in mask\nfunction findNextInputPosition(mask: string, fromIndex: number): number {\n for (let i = fromIndex; i < mask.length; i++) {\n if (mask[i] === '#' || mask[i] === 'A' || mask[i] === '*') {\n return i\n }\n }\n return mask.length\n}\n\n// Clear icon component\nconst ClearIcon: React.FC<{ onClick: () => void; className?: string }> = ({ onClick, className }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={`flex items-center justify-center opacity-50 hover:opacity-100 transition-opacity ${className || ''}`}\n aria-label=\"Clear input\"\n tabIndex={-1}\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n)\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n type = 'text',\n size,\n color,\n status,\n ghost = false,\n bordered = true,\n className = '',\n mask,\n maskPlaceholder = '_',\n allowClear,\n onClear,\n prefix,\n suffix,\n errorId,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n disabled,\n required,\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const colorClasses = {\n neutral: 'input-neutral',\n primary: 'input-primary',\n secondary: 'input-secondary',\n accent: 'input-accent',\n info: 'input-info',\n success: 'input-success',\n warning: 'input-warning',\n error: 'input-error',\n }\n\n const statusClasses = {\n error: 'input-error',\n warning: 'input-warning',\n }\n\n // Status takes precedence over color for validation feedback\n const effectiveColorClass = status ? statusClasses[status] : (color ? colorClasses[color] : '')\n\n const inputClasses = [\n 'input',\n !bordered && 'border-0',\n ghost && 'input-ghost',\n size && sizeClasses[size],\n effectiveColorClass,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Mask handling\n const innerRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref as React.RefObject<HTMLInputElement>) || innerRef\n\n const getInitialRaw = useCallback(() => {\n if (!mask) return ''\n const initial = (value ?? defaultValue ?? '') as string\n return extractRaw(initial, mask, maskPlaceholder)\n }, [mask, value, defaultValue, maskPlaceholder])\n\n const [rawValue, setRawValue] = useState(getInitialRaw)\n const [cursorPos, setCursorPos] = useState<number | null>(null)\n\n // Sync with controlled value\n useEffect(() => {\n if (mask && value !== undefined) {\n setRawValue(extractRaw(value as string, mask, maskPlaceholder))\n }\n }, [mask, value, maskPlaceholder])\n\n // Set cursor position after render\n useEffect(() => {\n if (cursorPos !== null && inputRef.current) {\n inputRef.current.setSelectionRange(cursorPos, cursorPos)\n setCursorPos(null)\n }\n }, [cursorPos, inputRef])\n\n const handleMaskedChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!mask) {\n onChange?.(e)\n return\n }\n\n const input = e.target\n const inputValue = input.value\n\n // Extract what the user is trying to type\n const newRaw = extractRaw(inputValue, mask, maskPlaceholder)\n\n // Filter to only valid characters\n let filteredRaw = ''\n let rawIdx = 0\n for (let i = 0; i < mask.length && rawIdx < newRaw.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (isValidChar(newRaw[rawIdx], maskChar)) {\n filteredRaw += newRaw[rawIdx]\n }\n rawIdx++\n }\n }\n\n setRawValue(filteredRaw)\n\n // Calculate new cursor position\n const maskedValue = applyMask(filteredRaw, mask, maskPlaceholder)\n let newCursor = findNextInputPosition(mask, 0)\n let charsPlaced = 0\n for (let i = 0; i < mask.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (charsPlaced < filteredRaw.length) {\n charsPlaced++\n newCursor = i + 1\n }\n }\n }\n // Skip to next input position if we're on a literal\n newCursor = findNextInputPosition(mask, newCursor)\n if (newCursor > mask.length) newCursor = mask.length\n\n setCursorPos(newCursor)\n\n // Create synthetic event with masked value\n const syntheticEvent = {\n ...e,\n target: { ...input, value: maskedValue },\n currentTarget: { ...input, value: maskedValue },\n } as React.ChangeEvent<HTMLInputElement>\n\n onChange?.(syntheticEvent)\n },\n [mask, maskPlaceholder, onChange]\n )\n\n const handleMaskedKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!mask) {\n onKeyDown?.(e)\n return\n }\n\n if (e.key === 'Backspace') {\n e.preventDefault()\n const newRaw = rawValue.slice(0, -1)\n setRawValue(newRaw)\n\n // Calculate cursor position\n let newCursor = 0\n let charsPlaced = 0\n for (let i = 0; i < mask.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (charsPlaced < newRaw.length) {\n charsPlaced++\n newCursor = i + 1\n } else {\n newCursor = i\n break\n }\n }\n }\n setCursorPos(newCursor)\n\n const maskedValue = applyMask(newRaw, mask, maskPlaceholder)\n const input = e.currentTarget\n const syntheticEvent = {\n target: { ...input, value: maskedValue },\n currentTarget: { ...input, value: maskedValue },\n } as unknown as React.ChangeEvent<HTMLInputElement>\n\n onChange?.(syntheticEvent)\n }\n\n onKeyDown?.(e)\n },\n [mask, maskPlaceholder, rawValue, onChange, onKeyDown]\n )\n\n // Track internal value for allowClear visibility\n const [internalValue, setInternalValue] = useState((value ?? defaultValue ?? '') as string)\n\n // Sync internal value with controlled value\n useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value as string)\n }\n }, [value])\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setInternalValue(e.target.value)\n onChange?.(e)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n setInternalValue('')\n setRawValue('')\n onClear?.()\n // Create synthetic event for onChange\n if (onChange && inputRef.current) {\n const syntheticEvent = {\n target: { ...inputRef.current, value: '' },\n currentTarget: { ...inputRef.current, value: '' },\n } as React.ChangeEvent<HTMLInputElement>\n onChange(syntheticEvent)\n }\n }, [onClear, onChange, inputRef])\n\n // Determine if we should show clear button\n const currentValue = mask ? rawValue : internalValue\n const showClear = allowClear && currentValue && !disabled\n\n // Get custom clear icon if provided\n const clearIcon = typeof allowClear === 'object' && allowClear.clearIcon\n ? allowClear.clearIcon\n : null\n\n // Accessibility attributes\n const ariaProps: Record<string, string | boolean | undefined> = {}\n if (status === 'error') {\n ariaProps['aria-invalid'] = true\n }\n if (errorId) {\n ariaProps['aria-describedby'] = errorId\n }\n if (required) {\n ariaProps['aria-required'] = true\n }\n\n // If we have prefix, suffix, or allowClear, wrap in a container\n const hasAddons = prefix || suffix || allowClear\n\n // Build the input element\n const renderInput = (inputClassName: string, inputValue?: string, inputOnChange?: typeof onChange) => (\n <input\n ref={inputRef}\n type={mask ? 'text' : type}\n className={inputClassName}\n value={inputValue ?? value}\n defaultValue={!inputValue && !value ? defaultValue : undefined}\n onChange={inputOnChange ?? onChange}\n onKeyDown={mask ? handleMaskedKeyDown : onKeyDown}\n disabled={disabled}\n required={required}\n {...ariaProps}\n {...props}\n />\n )\n\n // If no mask and no addons, render simple input\n if (!mask && !hasAddons) {\n return renderInput(inputClasses)\n }\n\n // Render masked input without addons\n if (mask && !hasAddons) {\n const maskedValue = applyMask(rawValue, mask, maskPlaceholder)\n return renderInput(inputClasses, maskedValue, handleMaskedChange)\n }\n\n // Render with addons (prefix/suffix/clear)\n const maskedValue = mask ? applyMask(rawValue, mask, maskPlaceholder) : undefined\n\n return (\n <div className=\"relative flex items-center\">\n {prefix && (\n <span className=\"absolute left-3 flex items-center text-base-content/70 pointer-events-none z-10\">\n {prefix}\n </span>\n )}\n <input\n ref={inputRef}\n type={mask ? 'text' : type}\n className={[\n inputClasses,\n 'w-full',\n prefix && 'pl-10',\n (suffix || showClear) && 'pr-10',\n ].filter(Boolean).join(' ')}\n value={maskedValue ?? (value !== undefined ? value : internalValue)}\n defaultValue={value === undefined && !mask ? defaultValue : undefined}\n onChange={mask ? handleMaskedChange : handleChange}\n onKeyDown={mask ? handleMaskedKeyDown : onKeyDown}\n disabled={disabled}\n required={required}\n {...ariaProps}\n {...props}\n />\n {(suffix || showClear) && (\n <span className=\"absolute right-3 flex items-center gap-1 z-10\">\n {showClear && (\n clearIcon || <ClearIcon onClick={handleClear} />\n )}\n {suffix && (\n <span className=\"text-base-content/70\">\n {suffix}\n </span>\n )}\n </span>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n"],"names":["applyMask","raw","mask","placeholder","result","rawIndex","i","maskChar","extractRaw","value","isValidChar","char","findNextInputPosition","fromIndex","ClearIcon","onClick","className","jsx","Input","forwardRef","type","size","color","status","ghost","bordered","maskPlaceholder","allowClear","onClear","prefix","suffix","errorId","defaultValue","onChange","onKeyDown","disabled","required","props","ref","sizeClasses","effectiveColorClass","inputClasses","innerRef","useRef","inputRef","getInitialRaw","useCallback","rawValue","setRawValue","useState","cursorPos","setCursorPos","useEffect","handleMaskedChange","e","input","inputValue","newRaw","filteredRaw","rawIdx","maskedValue","newCursor","charsPlaced","syntheticEvent","handleMaskedKeyDown","internalValue","setInternalValue","handleChange","handleClear","showClear","clearIcon","ariaProps","hasAddons","renderInput","inputClassName","inputOnChange","jsxs"],"mappings":";;AA4BA,SAASA,EAAUC,GAAaC,GAAcC,GAA6B;AACzE,MAAIC,IAAS,IACTC,IAAW;AAEf,WAASC,IAAI,GAAGA,IAAIJ,EAAK,UAAUG,KAAYJ,EAAI,QAAQK,KAAK;AAC9D,UAAMC,IAAWL,EAAKI,CAAC;AACvB,IAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa,MACnDF,IAAWJ,EAAI,UACjBG,KAAUH,EAAII,CAAQ,GACtBA,OAEAD,KAAUD,IAGZC,KAAUG;AAAA,EAEd;AAEA,SAAOH;AACT;AAGA,SAASI,EAAWC,GAAeP,GAAcC,GAA6B;AAC5E,MAAIF,IAAM;AACV,WAASK,IAAI,GAAGA,IAAIG,EAAM,UAAUH,IAAIJ,EAAK,QAAQI,KAAK;AACxD,UAAMC,IAAWL,EAAKI,CAAC;AACvB,KAAKC,MAAa,OAAOA,MAAa,OAAOA,MAAa,QAAQE,EAAMH,CAAC,MAAMH,MAC7EF,KAAOQ,EAAMH,CAAC;AAAA,EAElB;AACA,SAAOL;AACT;AAGA,SAASS,GAAYC,GAAcJ,GAA2B;AAC5D,SAAIA,MAAa,MAAY,KAAK,KAAKI,CAAI,IACvCJ,MAAa,MAAY,WAAW,KAAKI,CAAI,IAC7CJ,MAAa,MAAY,cAAc,KAAKI,CAAI,IAC7C;AACT;AAGA,SAASC,EAAsBV,GAAcW,GAA2B;AACtE,WAASP,IAAIO,GAAWP,IAAIJ,EAAK,QAAQI;AACvC,QAAIJ,EAAKI,CAAC,MAAM,OAAOJ,EAAKI,CAAC,MAAM,OAAOJ,EAAKI,CAAC,MAAM;AACpD,aAAOA;AAGX,SAAOJ,EAAK;AACd;AAGA,MAAMY,KAAmE,CAAC,EAAE,SAAAC,GAAS,WAAAC,QACnF,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAAF;AAAA,IACA,WAAW,oFAAoFC,KAAa,EAAE;AAAA,IAC9G,cAAW;AAAA,IACX,UAAU;AAAA,IAEV,UAAA,gBAAAC,EAAC,SAAI,WAAU,WAAU,MAAK,QAAO,SAAQ,aAAY,QAAO,gBAAe,eAAY,QACzF,UAAA,gBAAAA,EAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,uBAAA,CAAuB,EAAA,CAC9F;AAAA,EAAA;AACF,GAGWC,KAAQC;AAAA,EACnB,CACE;AAAA,IACE,MAAAC,IAAO;AAAA,IACP,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAT,IAAY;AAAA,IACZ,MAAAd;AAAA,IACA,iBAAAwB,IAAkB;AAAA,IAClB,YAAAC;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAtB;AAAA,IACA,cAAAuB;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,OACG;AACH,UAAMC,KAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAoBAC,KAAsBjB,IANN;AAAA,MACpB,OAAO;AAAA,MACP,SAAS;AAAA,IAAA,EAIwCA,CAAM,IAAKD,IAjBzC;AAAA,MACnB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,EAS0EA,CAAK,IAAI,IAEtFmB,IAAe;AAAA,MACnB;AAAA,MACA,CAAChB,KAAY;AAAA,MACbD,KAAS;AAAA,MACTH,KAAQkB,GAAYlB,CAAI;AAAA,MACxBmB;AAAA,MACAxB;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGL0B,KAAWC,GAAyB,IAAI,GACxCC,IAAYN,MAA6CI,IAEzDG,KAAgBC,EAAY,MAC3B5C,IAEEM,EADUC,KAASuB,KAAgB,IACf9B,GAAMwB,CAAe,IAF9B,IAGjB,CAACxB,GAAMO,GAAOuB,GAAcN,CAAe,CAAC,GAEzC,CAACqB,GAAUC,CAAW,IAAIC,EAASJ,EAAa,GAChD,CAACK,GAAWC,CAAY,IAAIF,EAAwB,IAAI;AAG9D,IAAAG,EAAU,MAAM;AACd,MAAIlD,KAAQO,MAAU,UACpBuC,EAAYxC,EAAWC,GAAiBP,GAAMwB,CAAe,CAAC;AAAA,IAElE,GAAG,CAACxB,GAAMO,GAAOiB,CAAe,CAAC,GAGjC0B,EAAU,MAAM;AACd,MAAIF,MAAc,QAAQN,EAAS,YACjCA,EAAS,QAAQ,kBAAkBM,GAAWA,CAAS,GACvDC,EAAa,IAAI;AAAA,IAErB,GAAG,CAACD,GAAWN,CAAQ,CAAC;AAExB,UAAMS,IAAqBP;AAAA,MACzB,CAACQ,MAA2C;AAC1C,YAAI,CAACpD,GAAM;AACT,UAAA+B,IAAWqB,CAAC;AACZ;AAAA,QACF;AAEA,cAAMC,IAAQD,EAAE,QACVE,IAAaD,EAAM,OAGnBE,IAASjD,EAAWgD,GAAYtD,GAAMwB,CAAe;AAG3D,YAAIgC,IAAc,IACdC,IAAS;AACb,iBAASrD,IAAI,GAAGA,IAAIJ,EAAK,UAAUyD,IAASF,EAAO,QAAQnD,KAAK;AAC9D,gBAAMC,IAAWL,EAAKI,CAAC;AACvB,WAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa,SACnDG,GAAY+C,EAAOE,CAAM,GAAGpD,CAAQ,MACtCmD,KAAeD,EAAOE,CAAM,IAE9BA;AAAA,QAEJ;AAEA,QAAAX,EAAYU,CAAW;AAGvB,cAAME,IAAc5D,EAAU0D,GAAaxD,GAAMwB,CAAe;AAChE,YAAImC,IAAYjD,EAAsBV,GAAM,CAAC,GACzC4D,IAAc;AAClB,iBAASxD,IAAI,GAAGA,IAAIJ,EAAK,QAAQI,KAAK;AACpC,gBAAMC,IAAWL,EAAKI,CAAC;AACvB,WAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa,QACnDuD,IAAcJ,EAAY,WAC5BI,KACAD,IAAYvD,IAAI;AAAA,QAGtB;AAEA,QAAAuD,IAAYjD,EAAsBV,GAAM2D,CAAS,GAC7CA,IAAY3D,EAAK,WAAQ2D,IAAY3D,EAAK,SAE9CiD,EAAaU,CAAS;AAGtB,cAAME,KAAiB;AAAA,UACrB,GAAGT;AAAA,UACH,QAAQ,EAAE,GAAGC,GAAO,OAAOK,EAAAA;AAAAA,UAC3B,eAAe,EAAE,GAAGL,GAAO,OAAOK,EAAAA;AAAAA,QAAY;AAGhD,QAAA3B,IAAW8B,EAAc;AAAA,MAC3B;AAAA,MACA,CAAC7D,GAAMwB,GAAiBO,CAAQ;AAAA,IAAA,GAG5B+B,IAAsBlB;AAAA,MAC1B,CAACQ,MAA6C;AAC5C,YAAI,CAACpD,GAAM;AACT,UAAAgC,IAAYoB,CAAC;AACb;AAAA,QACF;AAEA,YAAIA,EAAE,QAAQ,aAAa;AACzB,UAAAA,EAAE,eAAA;AACF,gBAAMG,IAASV,EAAS,MAAM,GAAG,EAAE;AACnC,UAAAC,EAAYS,CAAM;AAGlB,cAAII,IAAY,GACZC,IAAc;AAClB,mBAASxD,IAAI,GAAGA,IAAIJ,EAAK,QAAQI,KAAK;AACpC,kBAAMC,IAAWL,EAAKI,CAAC;AACvB,gBAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa;AACvD,kBAAIuD,IAAcL,EAAO;AACvB,gBAAAK,KACAD,IAAYvD,IAAI;AAAA,mBACX;AACL,gBAAAuD,IAAYvD;AACZ;AAAA,cACF;AAAA,UAEJ;AACA,UAAA6C,EAAaU,CAAS;AAEtB,gBAAMD,IAAc5D,EAAUyD,GAAQvD,GAAMwB,CAAe,GACrD6B,IAAQD,EAAE,eACVS,IAAiB;AAAA,YACrB,QAAQ,EAAE,GAAGR,GAAO,OAAOK,EAAAA;AAAAA,YAC3B,eAAe,EAAE,GAAGL,GAAO,OAAOK,EAAAA;AAAAA,UAAY;AAGhD,UAAA3B,IAAW8B,CAAc;AAAA,QAC3B;AAEA,QAAA7B,IAAYoB,CAAC;AAAA,MACf;AAAA,MACA,CAACpD,GAAMwB,GAAiBqB,GAAUd,GAAUC,CAAS;AAAA,IAAA,GAIjD,CAAC+B,GAAeC,CAAgB,IAAIjB,EAAUxC,KAASuB,KAAgB,EAAa;AAG1F,IAAAoB,EAAU,MAAM;AACd,MAAI3C,MAAU,UACZyD,EAAiBzD,CAAe;AAAA,IAEpC,GAAG,CAACA,CAAK,CAAC;AAEV,UAAM0D,KAAerB,EAAY,CAACQ,MAA2C;AAC3E,MAAAY,EAAiBZ,EAAE,OAAO,KAAK,GAC/BrB,IAAWqB,CAAC;AAAA,IACd,GAAG,CAACrB,CAAQ,CAAC,GAEPmC,KAActB,EAAY,MAAM;AAKpC,UAJAoB,EAAiB,EAAE,GACnBlB,EAAY,EAAE,GACdpB,IAAA,GAEIK,KAAYW,EAAS,SAAS;AAChC,cAAMmB,IAAiB;AAAA,UACrB,QAAQ,EAAE,GAAGnB,EAAS,SAAS,OAAO,GAAA;AAAA,UACtC,eAAe,EAAE,GAAGA,EAAS,SAAS,OAAO,GAAA;AAAA,QAAG;AAElD,QAAAX,EAAS8B,CAAc;AAAA,MACzB;AAAA,IACF,GAAG,CAACnC,GAASK,GAAUW,CAAQ,CAAC,GAI1ByB,IAAY1C,MADGzB,IAAO6C,IAAWkB,MACS,CAAC9B,GAG3CmC,KAAY,OAAO3C,KAAe,YAAYA,EAAW,YAC3DA,EAAW,YACX,MAGE4C,IAA0D,CAAA;AAChE,IAAIhD,MAAW,YACbgD,EAAU,cAAc,IAAI,KAE1BxC,MACFwC,EAAU,kBAAkB,IAAIxC,IAE9BK,MACFmC,EAAU,eAAe,IAAI;AAI/B,UAAMC,IAAY3C,KAAUC,KAAUH,GAGhC8C,IAAc,CAACC,GAAwBlB,GAAqBmB,MAChE,gBAAA1D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK2B;AAAA,QACL,MAAM1C,IAAO,SAASkB;AAAA,QACtB,WAAWsD;AAAA,QACX,OAAOlB,KAAc/C;AAAA,QACrB,cAAc,CAAC+C,KAAc,CAAC/C,IAAQuB,IAAe;AAAA,QACrD,UAAU2C,KAAiB1C;AAAA,QAC3B,WAAW/B,IAAO8D,IAAsB9B;AAAA,QACxC,UAAAC;AAAA,QACA,UAAAC;AAAA,QACC,GAAGmC;AAAA,QACH,GAAGlC;AAAA,MAAA;AAAA,IAAA;AAKR,QAAI,CAACnC,KAAQ,CAACsE;AACZ,aAAOC,EAAYhC,CAAY;AAIjC,QAAIvC,KAAQ,CAACsE,GAAW;AACtB,YAAMZ,IAAc5D,EAAU+C,GAAU7C,GAAMwB,CAAe;AAC7D,aAAO+C,EAAYhC,GAAcmB,GAAaP,CAAkB;AAAA,IAClE;AAGA,UAAMO,KAAc1D,IAAOF,EAAU+C,GAAU7C,GAAMwB,CAAe,IAAI;AAExE,WACE,gBAAAkD,EAAC,OAAA,EAAI,WAAU,8BACZ,UAAA;AAAA,MAAA/C,KACC,gBAAAZ,EAAC,QAAA,EAAK,WAAU,mFACb,UAAAY,GACH;AAAA,MAEF,gBAAAZ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK2B;AAAA,UACL,MAAM1C,IAAO,SAASkB;AAAA,UACtB,WAAW;AAAA,YACTqB;AAAA,YACA;AAAA,YACAZ,KAAU;AAAA,aACTC,KAAUuC,MAAc;AAAA,UAAA,EACzB,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,UAC1B,OAAOT,OAAgBnD,MAAU,SAAYA,IAAQwD;AAAA,UACrD,cAAcxD,MAAU,UAAa,CAACP,IAAO8B,IAAe;AAAA,UAC5D,UAAU9B,IAAOmD,IAAqBc;AAAA,UACtC,WAAWjE,IAAO8D,IAAsB9B;AAAA,UACxC,UAAAC;AAAA,UACA,UAAAC;AAAA,UACC,GAAGmC;AAAA,UACH,GAAGlC;AAAA,QAAA;AAAA,MAAA;AAAA,OAEJP,KAAUuC,MACV,gBAAAO,EAAC,QAAA,EAAK,WAAU,iDACb,UAAA;AAAA,QAAAP,MACCC,MAAa,gBAAArD,EAACH,IAAA,EAAU,SAASsD,GAAA,CAAa;AAAA,QAE/CtC,KACC,gBAAAb,EAAC,QAAA,EAAK,WAAU,wBACb,UAAAa,EAAA,CACH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAZ,GAAM,cAAc;"}
package/dist/index42.js CHANGED
@@ -1,18 +1,149 @@
1
- import { jsx as c } from "react/jsx-runtime";
2
- import n from "react";
3
- function f({ children: o, direction: t = "horizontal", className: s = "", ...r }) {
4
- const a = ["join", t === "vertical" && "join-vertical", s].filter(Boolean).join(" "), l = n.Children.map(o, (e) => {
5
- if (n.isValidElement(e)) {
6
- const i = e.props.className || "", m = i ? `join-item ${i}` : "join-item";
7
- return n.cloneElement(e, {
8
- className: m
9
- });
10
- }
11
- return e;
12
- });
13
- return /* @__PURE__ */ c("div", { className: a, ...r, children: l });
14
- }
1
+ import { jsxs as k, jsx as r } from "react/jsx-runtime";
2
+ import { forwardRef as S, useState as A, useRef as K, useImperativeHandle as W } from "react";
3
+ const H = S(
4
+ ({
5
+ value: o,
6
+ defaultValue: w,
7
+ min: i = -1 / 0,
8
+ max: c = 1 / 0,
9
+ step: p = 1,
10
+ precision: a,
11
+ size: s,
12
+ disabled: l = !1,
13
+ onChange: f,
14
+ formatter: d,
15
+ parser: h,
16
+ className: I = "",
17
+ controls: m = !0,
18
+ block: C = !0,
19
+ ...D
20
+ }, V) => {
21
+ const [j, v] = A(w ?? null), x = K(null);
22
+ W(V, () => x.current);
23
+ const n = o !== void 0 ? o : j, B = (t) => {
24
+ if (t === null) return "";
25
+ let e = t;
26
+ return a !== void 0 && (e = Number(t.toFixed(a))), d ? d(e) : String(e);
27
+ }, L = (t) => {
28
+ if (!t) return null;
29
+ const e = h ? h(t) : parseFloat(t);
30
+ return isNaN(e) ? null : e;
31
+ }, b = (t) => {
32
+ let e = Math.max(i, Math.min(c, t));
33
+ return a !== void 0 && (e = Number(e.toFixed(a))), e;
34
+ }, u = (t) => {
35
+ if (t === null) {
36
+ o === void 0 && v(null), f?.(null);
37
+ return;
38
+ }
39
+ const e = b(t);
40
+ o === void 0 && v(e), f?.(e);
41
+ }, g = () => {
42
+ if (l) return;
43
+ u((n ?? 0) + p);
44
+ }, y = () => {
45
+ if (l) return;
46
+ u((n ?? 0) - p);
47
+ }, M = (t) => {
48
+ const e = L(t.target.value);
49
+ e !== null ? u(e) : t.target.value === "" && u(null);
50
+ }, $ = (t) => {
51
+ l || (t.key === "ArrowUp" ? (t.preventDefault(), g()) : t.key === "ArrowDown" && (t.preventDefault(), y()));
52
+ }, F = () => {
53
+ n !== null && (n < i || n > c) && u(b(n));
54
+ }, R = [
55
+ "input",
56
+ "input-bordered",
57
+ "w-full",
58
+ s && {
59
+ xs: "input-xs",
60
+ sm: "input-sm",
61
+ md: "input-md",
62
+ lg: "input-lg",
63
+ xl: "input-xl"
64
+ }[s],
65
+ l && "input-disabled",
66
+ m && "pr-8"
67
+ ].filter(Boolean).join(" "), N = s === "xs" || s === "sm" ? "btn-xs" : "btn-sm";
68
+ return /* @__PURE__ */ k("div", { className: `relative ${C ? "w-full" : "inline-block"} group ${I}`, children: [
69
+ /* @__PURE__ */ r(
70
+ "input",
71
+ {
72
+ ref: x,
73
+ type: "text",
74
+ className: R,
75
+ value: B(n),
76
+ onChange: M,
77
+ onKeyDown: $,
78
+ onBlur: F,
79
+ disabled: l,
80
+ ...D
81
+ }
82
+ ),
83
+ m && /* @__PURE__ */ k("div", { className: "absolute right-1 top-1/2 -translate-y-1/2 flex flex-col gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity", children: [
84
+ /* @__PURE__ */ r(
85
+ "button",
86
+ {
87
+ type: "button",
88
+ className: `btn ${N} btn-ghost px-1 min-h-0 h-3.5`,
89
+ onClick: g,
90
+ disabled: l || n !== null && n >= c,
91
+ tabIndex: -1,
92
+ children: /* @__PURE__ */ r(
93
+ "svg",
94
+ {
95
+ className: "w-3 h-3",
96
+ fill: "none",
97
+ viewBox: "0 0 24 24",
98
+ stroke: "currentColor",
99
+ children: /* @__PURE__ */ r(
100
+ "path",
101
+ {
102
+ strokeLinecap: "round",
103
+ strokeLinejoin: "round",
104
+ strokeWidth: 2,
105
+ d: "M5 15l7-7 7 7"
106
+ }
107
+ )
108
+ }
109
+ )
110
+ }
111
+ ),
112
+ /* @__PURE__ */ r(
113
+ "button",
114
+ {
115
+ type: "button",
116
+ className: `btn ${N} btn-ghost px-1 min-h-0 h-3.5`,
117
+ onClick: y,
118
+ disabled: l || n !== null && n <= i,
119
+ tabIndex: -1,
120
+ children: /* @__PURE__ */ r(
121
+ "svg",
122
+ {
123
+ className: "w-3 h-3",
124
+ fill: "none",
125
+ viewBox: "0 0 24 24",
126
+ stroke: "currentColor",
127
+ children: /* @__PURE__ */ r(
128
+ "path",
129
+ {
130
+ strokeLinecap: "round",
131
+ strokeLinejoin: "round",
132
+ strokeWidth: 2,
133
+ d: "M19 9l-7 7-7-7"
134
+ }
135
+ )
136
+ }
137
+ )
138
+ }
139
+ )
140
+ ] })
141
+ ] });
142
+ }
143
+ );
144
+ H.displayName = "InputNumber";
15
145
  export {
16
- f as Join
146
+ H as InputNumber,
147
+ H as default
17
148
  };
18
149
  //# sourceMappingURL=index42.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index42.js","sources":["../src/components/Join.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface JoinProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n direction?: 'horizontal' | 'vertical'\n}\n\nexport function Join({ children, direction = 'horizontal', className = '', ...rest }: JoinProps) {\n const classes = ['join', direction === 'vertical' && 'join-vertical', className].filter(Boolean).join(' ')\n\n // Automatically add join-item class to all children\n const childrenWithJoinItem = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as any).className || ''\n const newClassName = existingClassName ? `join-item ${existingClassName}` : 'join-item'\n\n return React.cloneElement(child as React.ReactElement<any>, {\n className: newClassName,\n })\n }\n return child\n })\n\n return <div className={classes} {...rest}>{childrenWithJoinItem}</div>\n}\n"],"names":["Join","children","direction","className","rest","classes","childrenWithJoinItem","React","child","existingClassName","newClassName"],"mappings":";;AAOO,SAASA,EAAK,EAAE,UAAAC,GAAU,WAAAC,IAAY,cAAc,WAAAC,IAAY,IAAI,GAAGC,KAAmB;AAC/F,QAAMC,IAAU,CAAC,QAAQH,MAAc,cAAc,iBAAiBC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAGnGG,IAAuBC,EAAM,SAAS,IAAIN,GAAU,CAACO,MAAU;AACnE,QAAID,EAAM,eAAeC,CAAK,GAAG;AAC/B,YAAMC,IAAqBD,EAAM,MAAc,aAAa,IACtDE,IAAeD,IAAoB,aAAaA,CAAiB,KAAK;AAE5E,aAAOF,EAAM,aAAaC,GAAkC;AAAA,QAC1D,WAAWE;AAAA,MAAA,CACZ;AAAA,IACH;AACA,WAAOF;AAAA,EACT,CAAC;AAED,2BAAQ,OAAA,EAAI,WAAWH,GAAU,GAAGD,GAAO,UAAAE,GAAqB;AAClE;"}
1
+ {"version":3,"file":"index42.js","sources":["../src/components/InputNumber.tsx"],"sourcesContent":["import React, { useState, useRef, forwardRef, useImperativeHandle } from 'react'\n\nexport interface InputNumberProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange' | 'value' | 'defaultValue'> {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n precision?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n disabled?: boolean\n onChange?: (value: number | null) => void\n formatter?: (value: number | undefined) => string\n parser?: (displayValue: string) => number\n className?: string\n controls?: boolean\n block?: boolean\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision,\n size,\n disabled = false,\n onChange,\n formatter,\n parser,\n className = '',\n controls = true,\n block = true,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<number | null>(defaultValue ?? null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n useImperativeHandle(ref, () => inputRef.current!)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n\n const formatValue = (num: number | null): string => {\n if (num === null) return ''\n let formatted = num\n if (precision !== undefined) {\n formatted = Number(num.toFixed(precision))\n }\n return formatter ? formatter(formatted) : String(formatted)\n }\n\n const parseValue = (str: string): number | null => {\n if (!str) return null\n const parsed = parser ? parser(str) : parseFloat(str)\n if (isNaN(parsed)) return null\n return parsed\n }\n\n const clampValue = (num: number): number => {\n let clamped = Math.max(min, Math.min(max, num))\n if (precision !== undefined) {\n clamped = Number(clamped.toFixed(precision))\n }\n return clamped\n }\n\n const updateValue = (newValue: number | null) => {\n if (newValue === null) {\n if (controlledValue === undefined) {\n setInternalValue(null)\n }\n onChange?.(null)\n return\n }\n\n const clamped = clampValue(newValue)\n if (controlledValue === undefined) {\n setInternalValue(clamped)\n }\n onChange?.(clamped)\n }\n\n const handleIncrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue + step)\n }\n\n const handleDecrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue - step)\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const parsed = parseValue(e.target.value)\n if (parsed !== null) {\n updateValue(parsed)\n } else if (e.target.value === '') {\n updateValue(null)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n handleIncrement()\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n handleDecrement()\n }\n }\n\n const handleBlur = () => {\n // Ensure value is within bounds on blur\n if (value !== null && (value < min || value > max)) {\n updateValue(clampValue(value))\n }\n }\n\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const inputClasses = [\n 'input',\n 'input-bordered',\n 'w-full',\n size && sizeClasses[size],\n disabled && 'input-disabled',\n controls && 'pr-8',\n ]\n .filter(Boolean)\n .join(' ')\n\n const buttonSize = size === 'xs' || size === 'sm' ? 'btn-xs' : 'btn-sm'\n\n return (\n <div className={`relative ${block ? 'w-full' : 'inline-block'} group ${className}`}>\n <input\n ref={inputRef}\n type=\"text\"\n className={inputClasses}\n value={formatValue(value)}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n disabled={disabled}\n {...props}\n />\n {controls && (\n <div className=\"absolute right-1 top-1/2 -translate-y-1/2 flex flex-col gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleIncrement}\n disabled={disabled || (value !== null && value >= max)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleDecrement}\n disabled={disabled || (value !== null && value <= min)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n </div>\n )}\n </div>\n )\n }\n)\n\nInputNumber.displayName = 'InputNumber'\n\nexport default InputNumber\n"],"names":["InputNumber","forwardRef","controlledValue","defaultValue","min","max","step","precision","size","disabled","onChange","formatter","parser","className","controls","block","props","ref","internalValue","setInternalValue","useState","inputRef","useRef","useImperativeHandle","value","formatValue","num","formatted","parseValue","str","parsed","clampValue","clamped","updateValue","newValue","handleIncrement","handleDecrement","handleInputChange","e","handleKeyDown","handleBlur","inputClasses","buttonSize","jsxs","jsx"],"mappings":"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"}
package/dist/index43.js CHANGED
@@ -1,20 +1,18 @@
1
- import { jsx as e } from "react/jsx-runtime";
2
- const k = {
3
- xs: "kbd-xs",
4
- sm: "kbd-sm",
5
- md: "kbd-md",
6
- lg: "kbd-lg",
7
- xl: "kbd-xl"
8
- }, t = ({
9
- size: s,
10
- children: d,
11
- className: l = "",
12
- ...o
13
- }) => {
14
- const b = ["kbd", s ? k[s] : "", l].filter(Boolean).join(" ");
15
- return /* @__PURE__ */ e("kbd", { className: b, ...o, children: d });
16
- };
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import n from "react";
3
+ function f({ children: o, direction: t = "horizontal", className: s = "", ...r }) {
4
+ const a = ["join", t === "vertical" && "join-vertical", s].filter(Boolean).join(" "), l = n.Children.map(o, (e) => {
5
+ if (n.isValidElement(e)) {
6
+ const i = e.props.className || "", m = i ? `join-item ${i}` : "join-item";
7
+ return n.cloneElement(e, {
8
+ className: m
9
+ });
10
+ }
11
+ return e;
12
+ });
13
+ return /* @__PURE__ */ c("div", { className: a, ...r, children: l });
14
+ }
17
15
  export {
18
- t as Kbd
16
+ f as Join
19
17
  };
20
18
  //# sourceMappingURL=index43.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index43.js","sources":["../src/components/Kbd.tsx"],"sourcesContent":["import React from 'react'\n\nexport type KbdSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** Size of the kbd */\n size?: KbdSize\n /** Key content */\n children?: React.ReactNode\n}\n\nconst sizeClasses: Record<KbdSize, string> = {\n xs: 'kbd-xs',\n sm: 'kbd-sm',\n md: 'kbd-md',\n lg: 'kbd-lg',\n xl: 'kbd-xl',\n}\n\nexport const Kbd: React.FC<KbdProps> = ({\n size,\n children,\n className = '',\n ...rest\n}) => {\n const classes = ['kbd', size ? sizeClasses[size] : '', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <kbd className={classes} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"names":["sizeClasses","Kbd","size","children","className","rest","classes"],"mappings":";AAWA,MAAMA,IAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAA0B,CAAC;AAAA,EACtC,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAU,CAAC,OAAOJ,IAAOF,EAAYE,CAAI,IAAI,IAAIE,CAAS,EAC7D,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,OAAA,EAAI,WAAWE,GAAU,GAAGD,GAC1B,UAAAF,GACH;AAEJ;"}
1
+ {"version":3,"file":"index43.js","sources":["../src/components/Join.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface JoinProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n direction?: 'horizontal' | 'vertical'\n}\n\nexport function Join({ children, direction = 'horizontal', className = '', ...rest }: JoinProps) {\n const classes = ['join', direction === 'vertical' && 'join-vertical', className].filter(Boolean).join(' ')\n\n // Automatically add join-item class to all children\n const childrenWithJoinItem = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as any).className || ''\n const newClassName = existingClassName ? `join-item ${existingClassName}` : 'join-item'\n\n return React.cloneElement(child as React.ReactElement<any>, {\n className: newClassName,\n })\n }\n return child\n })\n\n return <div className={classes} {...rest}>{childrenWithJoinItem}</div>\n}\n"],"names":["Join","children","direction","className","rest","classes","childrenWithJoinItem","React","child","existingClassName","newClassName"],"mappings":";;AAOO,SAASA,EAAK,EAAE,UAAAC,GAAU,WAAAC,IAAY,cAAc,WAAAC,IAAY,IAAI,GAAGC,KAAmB;AAC/F,QAAMC,IAAU,CAAC,QAAQH,MAAc,cAAc,iBAAiBC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAGnGG,IAAuBC,EAAM,SAAS,IAAIN,GAAU,CAACO,MAAU;AACnE,QAAID,EAAM,eAAeC,CAAK,GAAG;AAC/B,YAAMC,IAAqBD,EAAM,MAAc,aAAa,IACtDE,IAAeD,IAAoB,aAAaA,CAAiB,KAAK;AAE5E,aAAOF,EAAM,aAAaC,GAAkC;AAAA,QAC1D,WAAWE;AAAA,MAAA,CACZ;AAAA,IACH;AACA,WAAOF;AAAA,EACT,CAAC;AAED,2BAAQ,OAAA,EAAI,WAAWH,GAAU,GAAGD,GAAO,UAAAE,GAAqB;AAClE;"}
package/dist/index44.js CHANGED
@@ -1,24 +1,20 @@
1
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
2
- function c({ children: l, className: n = "", ...s }) {
3
- return /* @__PURE__ */ a("span", { className: `label ${n}`, ...s, children: l });
4
- }
5
- function r({ children: l, label: n, size: s, className: e = "", ...t }) {
6
- const i = ["floating-label", s && {
7
- xs: "input-xs",
8
- sm: "input-sm",
9
- md: "input-md",
10
- lg: "input-lg",
11
- xl: "input-xl"
12
- }[s], e].filter(Boolean).join(" ");
13
- return /* @__PURE__ */ o("label", { className: i, ...t, children: [
14
- l,
15
- /* @__PURE__ */ a("span", { children: n })
16
- ] });
17
- }
18
- const m = Object.assign(c, {
19
- Floating: r
20
- });
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ const k = {
3
+ xs: "kbd-xs",
4
+ sm: "kbd-sm",
5
+ md: "kbd-md",
6
+ lg: "kbd-lg",
7
+ xl: "kbd-xl"
8
+ }, t = ({
9
+ size: s,
10
+ children: d,
11
+ className: l = "",
12
+ ...o
13
+ }) => {
14
+ const b = ["kbd", s ? k[s] : "", l].filter(Boolean).join(" ");
15
+ return /* @__PURE__ */ e("kbd", { className: b, ...o, children: d });
16
+ };
21
17
  export {
22
- m as Label
18
+ t as Kbd
23
19
  };
24
20
  //# sourceMappingURL=index44.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index44.js","sources":["../src/components/Label.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface LabelProps extends React.HTMLAttributes<HTMLSpanElement> {\n children: React.ReactNode\n}\n\nexport interface FloatingLabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode\n label: string\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n}\n\nfunction LabelRoot({ children, className = '', ...rest }: LabelProps) {\n return <span className={`label ${className}`} {...rest}>{children}</span>\n}\n\nfunction FloatingLabel({ children, label, size, className = '', ...rest }: FloatingLabelProps) {\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const classes = ['floating-label', size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n return (\n <label className={classes} {...rest}>\n {children}\n <span>{label}</span>\n </label>\n )\n}\n\nexport const Label = Object.assign(LabelRoot, {\n Floating: FloatingLabel,\n})\n"],"names":["LabelRoot","children","className","rest","jsx","FloatingLabel","label","size","classes","jsxs","Label"],"mappings":";AAYA,SAASA,EAAU,EAAE,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAAoB;AACpE,SAAO,gBAAAC,EAAC,UAAK,WAAW,SAASF,CAAS,IAAK,GAAGC,GAAO,UAAAF,GAAS;AACpE;AAEA,SAASI,EAAc,EAAE,UAAAJ,GAAU,OAAAK,GAAO,MAAAC,GAAM,WAAAL,IAAY,IAAI,GAAGC,KAA4B;AAS7F,QAAMK,IAAU,CAAC,kBAAkBD,KARf;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EAGiDA,CAAI,GAAGL,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEjG,SACE,gBAAAO,EAAC,SAAA,EAAM,WAAWD,GAAU,GAAGL,GAC5B,UAAA;AAAA,IAAAF;AAAA,IACD,gBAAAG,EAAC,UAAM,UAAAE,EAAA,CAAM;AAAA,EAAA,GACf;AAEJ;AAEO,MAAMI,IAAQ,OAAO,OAAOV,GAAW;AAAA,EAC5C,UAAUK;AACZ,CAAC;"}
1
+ {"version":3,"file":"index44.js","sources":["../src/components/Kbd.tsx"],"sourcesContent":["import React from 'react'\n\nexport type KbdSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** Size of the kbd */\n size?: KbdSize\n /** Key content */\n children?: React.ReactNode\n}\n\nconst sizeClasses: Record<KbdSize, string> = {\n xs: 'kbd-xs',\n sm: 'kbd-sm',\n md: 'kbd-md',\n lg: 'kbd-lg',\n xl: 'kbd-xl',\n}\n\nexport const Kbd: React.FC<KbdProps> = ({\n size,\n children,\n className = '',\n ...rest\n}) => {\n const classes = ['kbd', size ? sizeClasses[size] : '', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <kbd className={classes} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"names":["sizeClasses","Kbd","size","children","className","rest","classes"],"mappings":";AAWA,MAAMA,IAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAA0B,CAAC;AAAA,EACtC,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAU,CAAC,OAAOJ,IAAOF,EAAYE,CAAI,IAAI,IAAIE,CAAS,EAC7D,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,OAAA,EAAI,WAAWE,GAAU,GAAGD,GAC1B,UAAAF,GACH;AAEJ;"}
package/dist/index45.js CHANGED
@@ -1,140 +1,24 @@
1
- import { jsx as o, jsxs as A } from "react/jsx-runtime";
2
- import d, { useContext as M, createContext as P, useState as C, useEffect as $, useCallback as F } from "react";
3
- const L = P(null);
4
- function Q() {
5
- return M(L);
1
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
2
+ function c({ children: l, className: n = "", ...s }) {
3
+ return /* @__PURE__ */ a("span", { className: `label ${n}`, ...s, children: l });
6
4
  }
7
- function h({ children: n, className: s = "", style: a }) {
8
- const e = d.Children.toArray(n), f = e.some(
9
- (t) => d.isValidElement(t) && t.type.displayName === "LayoutSider"
10
- ), m = [
11
- "flex",
12
- "min-h-0",
13
- f ? "flex-row" : "flex-col",
14
- s
15
- ].filter(Boolean).join(" "), r = f ? e.map((t) => {
16
- if (d.isValidElement(t) && (t.type === h || t.type.displayName === "LayoutRoot") && t.type.displayName !== "LayoutSider") {
17
- const i = t.props.className || "";
18
- if (!i.includes("flex-1"))
19
- return d.cloneElement(t, {
20
- className: `flex-1 ${i}`.trim()
21
- });
22
- }
23
- return t;
24
- }) : n;
25
- return /* @__PURE__ */ o("div", { className: m, style: a, children: r });
5
+ function r({ children: l, label: n, size: s, className: e = "", ...t }) {
6
+ const i = ["floating-label", s && {
7
+ xs: "input-xs",
8
+ sm: "input-sm",
9
+ md: "input-md",
10
+ lg: "input-lg",
11
+ xl: "input-xl"
12
+ }[s], e].filter(Boolean).join(" ");
13
+ return /* @__PURE__ */ o("label", { className: i, ...t, children: [
14
+ l,
15
+ /* @__PURE__ */ a("span", { children: n })
16
+ ] });
26
17
  }
27
- h.displayName = "LayoutRoot";
28
- function H({ children: n, className: s = "", style: a }) {
29
- const e = [
30
- "flex",
31
- "items-center",
32
- "px-6",
33
- "h-16",
34
- "bg-base-300",
35
- "flex-shrink-0",
36
- s
37
- ].filter(Boolean).join(" ");
38
- return /* @__PURE__ */ o("header", { className: e, style: a, children: n });
39
- }
40
- function I({ children: n, className: s = "", style: a }) {
41
- const e = [
42
- "px-6",
43
- "py-4",
44
- "text-center",
45
- "bg-base-300",
46
- "flex-shrink-0",
47
- s
48
- ].filter(Boolean).join(" ");
49
- return /* @__PURE__ */ o("footer", { className: e, style: a, children: n });
50
- }
51
- function O({ children: n, className: s = "", style: a }) {
52
- const e = ["flex-1", "min-h-0", "overflow-auto", s].filter(Boolean).join(" ");
53
- return /* @__PURE__ */ o("main", { className: e, style: a, children: n });
54
- }
55
- const T = {
56
- sm: "(max-width: 639px)",
57
- md: "(max-width: 767px)",
58
- lg: "(max-width: 1023px)",
59
- xl: "(max-width: 1279px)",
60
- "2xl": "(max-width: 1535px)"
61
- };
62
- function v({
63
- children: n,
64
- width: s = 200,
65
- collapsedWidth: a = 80,
66
- collapsed: e,
67
- defaultCollapsed: f = !1,
68
- collapsible: m = !1,
69
- onCollapse: r,
70
- trigger: t,
71
- breakpoint: i,
72
- onBreakpoint: p,
73
- className: w = "",
74
- style: g
75
- }) {
76
- const [j, N] = C(f), [b, k] = C(!1), l = e ?? j;
77
- $(() => {
78
- if (!i) return;
79
- const c = window.matchMedia(T[i]), y = (R) => {
80
- const u = R.matches;
81
- k(u), p?.(u), e === void 0 && N(u), u !== b && r?.(u);
82
- };
83
- return y(c), c.addEventListener("change", y), () => c.removeEventListener("change", y);
84
- }, [i, p, e, r, b]);
85
- const S = F(() => {
86
- const c = !l;
87
- e === void 0 && N(c), r?.(c);
88
- }, [l, e, r]), x = l ? a : s, B = [
89
- "flex",
90
- "flex-col",
91
- "bg-base-200",
92
- "flex-shrink-0",
93
- "transition-all",
94
- "duration-200",
95
- w
96
- ].filter(Boolean).join(" "), E = m && t !== null && /* @__PURE__ */ o(
97
- "button",
98
- {
99
- onClick: S,
100
- className: "flex items-center justify-center h-10 w-full bg-base-300 hover:bg-base-content/10 transition-colors",
101
- "aria-label": l ? "Expand sidebar" : "Collapse sidebar",
102
- children: /* @__PURE__ */ o(
103
- "svg",
104
- {
105
- className: `w-4 h-4 transition-transform ${l ? "rotate-180" : ""}`,
106
- fill: "none",
107
- viewBox: "0 0 24 24",
108
- stroke: "currentColor",
109
- children: /* @__PURE__ */ o("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" })
110
- }
111
- )
112
- }
113
- );
114
- return /* @__PURE__ */ o(L.Provider, { value: { collapsed: l, collapsedWidth: a, width: s }, children: /* @__PURE__ */ A(
115
- "aside",
116
- {
117
- className: B,
118
- style: {
119
- width: typeof x == "number" ? `${x}px` : x,
120
- ...g
121
- },
122
- children: [
123
- /* @__PURE__ */ o("div", { className: "flex-1 overflow-auto", children: n }),
124
- t !== null && (t ?? E)
125
- ]
126
- }
127
- ) });
128
- }
129
- v.displayName = "LayoutSider";
130
- const W = Object.assign(h, {
131
- Header: H,
132
- Footer: I,
133
- Content: O,
134
- Sider: v
18
+ const m = Object.assign(c, {
19
+ Floating: r
135
20
  });
136
21
  export {
137
- W as Layout,
138
- Q as useSiderContext
22
+ m as Label
139
23
  };
140
24
  //# sourceMappingURL=index45.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index45.js","sources":["../src/components/Layout.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useEffect } from 'react'\n\nexport interface LayoutProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutHeaderProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutFooterProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutContentProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\nexport interface LayoutSiderProps {\n children: React.ReactNode\n width?: number | string\n collapsedWidth?: number | string\n collapsed?: boolean\n defaultCollapsed?: boolean\n collapsible?: boolean\n onCollapse?: (collapsed: boolean) => void\n trigger?: React.ReactNode | null\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n onBreakpoint?: (broken: boolean) => void\n className?: string\n style?: React.CSSProperties\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\nfunction LayoutRoot({ children, className = '', style }: LayoutProps) {\n // Check if any child is a Sider to determine flex direction\n const childArray = React.Children.toArray(children)\n const hasSider = childArray.some(\n (child) => React.isValidElement(child) && (child.type as any).displayName === 'LayoutSider'\n )\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 className={layoutClasses} style={style}>\n {processedChildren}\n </div>\n )\n}\n\nLayoutRoot.displayName = 'LayoutRoot'\n\nfunction LayoutHeader({ children, className = '', style }: LayoutHeaderProps) {\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 className={headerClasses} style={style}>\n {children}\n </header>\n )\n}\n\nfunction LayoutFooter({ children, className = '', style }: LayoutFooterProps) {\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 className={footerClasses} style={style}>\n {children}\n </footer>\n )\n}\n\nfunction LayoutContent({ children, className = '', style }: LayoutContentProps) {\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 className={contentClasses} style={style}>\n {children}\n </main>\n )\n}\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\nfunction LayoutSider({\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 className = '',\n style,\n}: LayoutSiderProps) {\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)\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)\n }, [collapsed, controlledCollapsed, onCollapse])\n\n const currentWidth = collapsed ? collapsedWidth : width\n\n const siderClasses = [\n 'flex',\n 'flex-col',\n 'bg-base-200',\n 'flex-shrink-0',\n 'transition-all',\n 'duration-200',\n className,\n ]\n .filter(Boolean)\n .join(' ')\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 >\n <svg\n className={`w-4 h-4 transition-transform ${collapsed ? 'rotate-180' : ''}`}\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 return (\n <SiderContext.Provider value={{ collapsed, collapsedWidth, width }}>\n <aside\n className={siderClasses}\n style={{\n width: typeof currentWidth === 'number' ? `${currentWidth}px` : currentWidth,\n ...style,\n }}\n >\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {trigger !== null && (trigger ?? defaultTrigger)}\n </aside>\n </SiderContext.Provider>\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","children","className","style","childArray","React","hasSider","child","layoutClasses","processedChildren","existingClassName","jsx","LayoutHeader","headerClasses","LayoutFooter","footerClasses","LayoutContent","contentClasses","BREAKPOINT_MAP","LayoutSider","width","collapsedWidth","controlledCollapsed","defaultCollapsed","collapsible","onCollapse","trigger","breakpoint","onBreakpoint","internalCollapsed","setInternalCollapsed","useState","broken","setBroken","collapsed","useEffect","mediaQuery","handleChange","e","isBroken","handleCollapse","useCallback","newCollapsed","currentWidth","siderClasses","defaultTrigger","jsxs","Layout"],"mappings":"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"}
1
+ {"version":3,"file":"index45.js","sources":["../src/components/Label.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface LabelProps extends React.HTMLAttributes<HTMLSpanElement> {\n children: React.ReactNode\n}\n\nexport interface FloatingLabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n children: React.ReactNode\n label: string\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n}\n\nfunction LabelRoot({ children, className = '', ...rest }: LabelProps) {\n return <span className={`label ${className}`} {...rest}>{children}</span>\n}\n\nfunction FloatingLabel({ children, label, size, className = '', ...rest }: FloatingLabelProps) {\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const classes = ['floating-label', size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n return (\n <label className={classes} {...rest}>\n {children}\n <span>{label}</span>\n </label>\n )\n}\n\nexport const Label = Object.assign(LabelRoot, {\n Floating: FloatingLabel,\n})\n"],"names":["LabelRoot","children","className","rest","jsx","FloatingLabel","label","size","classes","jsxs","Label"],"mappings":";AAYA,SAASA,EAAU,EAAE,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,KAAoB;AACpE,SAAO,gBAAAC,EAAC,UAAK,WAAW,SAASF,CAAS,IAAK,GAAGC,GAAO,UAAAF,GAAS;AACpE;AAEA,SAASI,EAAc,EAAE,UAAAJ,GAAU,OAAAK,GAAO,MAAAC,GAAM,WAAAL,IAAY,IAAI,GAAGC,KAA4B;AAS7F,QAAMK,IAAU,CAAC,kBAAkBD,KARf;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EAGiDA,CAAI,GAAGL,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEjG,SACE,gBAAAO,EAAC,SAAA,EAAM,WAAWD,GAAU,GAAGL,GAC5B,UAAA;AAAA,IAAAF;AAAA,IACD,gBAAAG,EAAC,UAAM,UAAAE,EAAA,CAAM;AAAA,EAAA,GACf;AAEJ;AAEO,MAAMI,IAAQ,OAAO,OAAOV,GAAW;AAAA,EAC5C,UAAUK;AACZ,CAAC;"}