asterui 0.12.57 → 0.12.59

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 (80) hide show
  1. package/dist/components/Autocomplete.js +1 -1
  2. package/dist/components/Autocomplete.js.map +1 -1
  3. package/dist/components/Button.js +1 -1
  4. package/dist/components/Button.js.map +1 -1
  5. package/dist/components/Checkbox.js +1 -1
  6. package/dist/components/Checkbox.js.map +1 -1
  7. package/dist/components/ColorPicker.js +1 -1
  8. package/dist/components/ColorPicker.js.map +1 -1
  9. package/dist/components/CopyButton.js +1 -1
  10. package/dist/components/CopyButton.js.map +1 -1
  11. package/dist/components/Countdown.js +1 -1
  12. package/dist/components/Countdown.js.map +1 -1
  13. package/dist/components/DatePicker.js +1 -1
  14. package/dist/components/DatePicker.js.map +1 -1
  15. package/dist/components/Dock.js +1 -1
  16. package/dist/components/Dock.js.map +1 -1
  17. package/dist/components/Empty.js +1 -1
  18. package/dist/components/Empty.js.map +1 -1
  19. package/dist/components/FileInput.js +1 -1
  20. package/dist/components/FileInput.js.map +1 -1
  21. package/dist/components/Filter.js +1 -1
  22. package/dist/components/Filter.js.map +1 -1
  23. package/dist/components/Form.d.ts +10 -1
  24. package/dist/components/Form.js +205 -184
  25. package/dist/components/Form.js.map +1 -1
  26. package/dist/components/Input.js +1 -1
  27. package/dist/components/Input.js.map +1 -1
  28. package/dist/components/InputNumber.js +1 -1
  29. package/dist/components/InputNumber.js.map +1 -1
  30. package/dist/components/List.js +1 -1
  31. package/dist/components/List.js.map +1 -1
  32. package/dist/components/Loading.js +1 -1
  33. package/dist/components/Loading.js.map +1 -1
  34. package/dist/components/Modal.js +1 -1
  35. package/dist/components/Modal.js.map +1 -1
  36. package/dist/components/OTPInput.js +1 -1
  37. package/dist/components/OTPInput.js.map +1 -1
  38. package/dist/components/Pagination.js +1 -1
  39. package/dist/components/Pagination.js.map +1 -1
  40. package/dist/components/Popconfirm.js +1 -1
  41. package/dist/components/Popconfirm.js.map +1 -1
  42. package/dist/components/Radio.js +1 -1
  43. package/dist/components/Radio.js.map +1 -1
  44. package/dist/components/Range.js +1 -1
  45. package/dist/components/Range.js.map +1 -1
  46. package/dist/components/Rating.js +1 -1
  47. package/dist/components/Rating.js.map +1 -1
  48. package/dist/components/RichTextEditor.js +1 -1
  49. package/dist/components/RichTextEditor.js.map +1 -1
  50. package/dist/components/Segmented.js +1 -1
  51. package/dist/components/Segmented.js.map +1 -1
  52. package/dist/components/Select.js +1 -1
  53. package/dist/components/Select.js.map +1 -1
  54. package/dist/components/Table.d.ts +19 -0
  55. package/dist/components/Table.js +348 -310
  56. package/dist/components/Table.js.map +1 -1
  57. package/dist/components/Tabs.js +1 -1
  58. package/dist/components/Tabs.js.map +1 -1
  59. package/dist/components/Textarea.js +1 -1
  60. package/dist/components/Textarea.js.map +1 -1
  61. package/dist/components/ThemeController.js +1 -1
  62. package/dist/components/ThemeController.js.map +1 -1
  63. package/dist/components/TimePicker.js +1 -1
  64. package/dist/components/TimePicker.js.map +1 -1
  65. package/dist/components/Toggle.js +1 -1
  66. package/dist/components/Toggle.js.map +1 -1
  67. package/dist/hooks/useTheme.d.ts +1 -1
  68. package/dist/hooks/useTheme.js +1 -1
  69. package/dist/hooks/useTheme.js.map +1 -1
  70. package/dist/index.d.ts +4 -4
  71. package/dist/index.js +2 -2
  72. package/dist/providers/ConfigProvider.js.map +1 -0
  73. package/dist/providers/ThemeProvider.js.map +1 -0
  74. package/package.json +1 -1
  75. package/dist/components/ConfigProvider.js.map +0 -1
  76. package/dist/components/ThemeProvider.js.map +0 -1
  77. /package/dist/{components → providers}/ConfigProvider.d.ts +0 -0
  78. /package/dist/{components → providers}/ConfigProvider.js +0 -0
  79. /package/dist/{components → providers}/ThemeProvider.d.ts +0 -0
  80. /package/dist/{components → providers}/ThemeProvider.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sources":["../../src/components/DatePicker.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, forwardRef } from 'react'\nimport { Input } from './Input'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnSm = 'btn-sm'\nconst dBtnSquare = 'btn-square'\n\nexport interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n format?: string\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Test ID prefix for child elements */\n 'data-testid'?: string\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n]\n\nfunction formatDate(date: Date | null, format: string = 'MM/DD/YYYY'): string {\n if (!date) return ''\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return format\n .replace('YYYY', String(year))\n .replace('MM', month)\n .replace('DD', day)\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate()\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay()\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(\n {\n value,\n defaultValue,\n onChange,\n format,\n placeholder = 'Select date',\n disabled = false,\n size,\n 'data-testid': testId,\n className = '',\n ...rest\n },\n ref\n) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n // Helper for test IDs\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n const [selectedDate, setSelectedDate] = useState<Date | null>(\n value || defaultValue || null\n )\n const [isOpen, setIsOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState(\n selectedDate ? selectedDate.getMonth() : new Date().getMonth()\n )\n const [viewYear, setViewYear] = useState(\n selectedDate ? selectedDate.getFullYear() : new Date().getFullYear()\n )\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (value !== undefined) {\n setSelectedDate(value)\n }\n }, [value])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const handleDateSelect = (day: number) => {\n const newDate = new Date(viewYear, viewMonth, day)\n setSelectedDate(newDate)\n onChange?.(newDate)\n setIsOpen(false)\n }\n\n const handlePrevMonth = () => {\n if (viewMonth === 0) {\n setViewMonth(11)\n setViewYear(viewYear - 1)\n } else {\n setViewMonth(viewMonth - 1)\n }\n }\n\n const handleNextMonth = () => {\n if (viewMonth === 11) {\n setViewMonth(0)\n setViewYear(viewYear + 1)\n } else {\n setViewMonth(viewMonth + 1)\n }\n }\n\n const daysInMonth = getDaysInMonth(viewYear, viewMonth)\n const firstDayOfMonth = getFirstDayOfMonth(viewYear, viewMonth)\n\n const calendarDays: (number | null)[] = []\n for (let i = 0; i < firstDayOfMonth; i++) {\n calendarDays.push(null)\n }\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(i)\n }\n\n const isSelectedDay = (day: number | null): boolean => {\n if (!day || !selectedDate) return false\n return (\n selectedDate.getDate() === day &&\n selectedDate.getMonth() === viewMonth &&\n selectedDate.getFullYear() === viewYear\n )\n }\n\n const isToday = (day: number | null): boolean => {\n if (!day) return false\n const today = new Date()\n return (\n today.getDate() === day &&\n today.getMonth() === viewMonth &&\n today.getFullYear() === viewYear\n )\n }\n\n return (\n <div ref={ref || containerRef} className={`relative ${className}`} data-state={isOpen ? 'open' : 'closed'} data-testid={testId} {...rest}>\n <Input\n value={formatDate(selectedDate, format)}\n placeholder={placeholder}\n disabled={disabled}\n size={effectiveSize}\n readOnly\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className=\"cursor-pointer\"\n data-testid={getTestId('input')}\n />\n\n {isOpen && (\n <div className=\"absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-lg p-4 z-50 w-80\" data-testid={getTestId('calendar')}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={handlePrevMonth}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm} ${dBtnSquare}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n <div className=\"text-base font-semibold\">\n {MONTHS[viewMonth]} {viewYear}\n </div>\n\n <button\n type=\"button\"\n onClick={handleNextMonth}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm} ${dBtnSquare}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n\n {/* Days of week */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-semibold text-base-content/60 py-2\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={!day}\n onClick={() => day && handleDateSelect(day)}\n className={`\n aspect-square flex items-center justify-center text-sm rounded-lg\n ${!day ? 'invisible' : 'hover:bg-base-200'}\n ${isSelectedDay(day) ? 'bg-primary text-primary-content hover:bg-primary/90' : ''}\n ${isToday(day) && !isSelectedDay(day) ? 'border border-primary' : ''}\n ${day ? 'cursor-pointer' : ''}\n `}\n >\n {day}\n </button>\n ))}\n </div>\n\n {/* Today button */}\n <div className=\"mt-4 flex justify-end\">\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date()\n setSelectedDate(today)\n setViewMonth(today.getMonth())\n setViewYear(today.getFullYear())\n onChange?.(today)\n setIsOpen(false)\n }}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm}`}\n >\n Today\n </button>\n </div>\n </div>\n )}\n </div>\n )\n})\n"],"names":["dBtn","dBtnGhost","dBtnSm","dBtnSquare","DAYS","MONTHS","formatDate","date","format","year","month","day","getDaysInMonth","getFirstDayOfMonth","DatePicker","forwardRef","value","defaultValue","onChange","placeholder","disabled","size","testId","className","rest","ref","componentSize","useConfig","effectiveSize","getTestId","suffix","selectedDate","setSelectedDate","useState","isOpen","setIsOpen","viewMonth","setViewMonth","viewYear","setViewYear","containerRef","useRef","useEffect","handleClickOutside","event","handleDateSelect","newDate","handlePrevMonth","handleNextMonth","daysInMonth","firstDayOfMonth","calendarDays","i","isSelectedDay","isToday","today","jsx","Input","jsxs","index"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker.js","sources":["../../src/components/DatePicker.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, forwardRef } from 'react'\nimport { Input } from './Input'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnSm = 'btn-sm'\nconst dBtnSquare = 'btn-square'\n\nexport interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n format?: string\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Test ID prefix for child elements */\n 'data-testid'?: string\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n]\n\nfunction formatDate(date: Date | null, format: string = 'MM/DD/YYYY'): string {\n if (!date) return ''\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return format\n .replace('YYYY', String(year))\n .replace('MM', month)\n .replace('DD', day)\n}\n\nfunction getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate()\n}\n\nfunction getFirstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay()\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(\n {\n value,\n defaultValue,\n onChange,\n format,\n placeholder = 'Select date',\n disabled = false,\n size,\n 'data-testid': testId,\n className = '',\n ...rest\n },\n ref\n) {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n // Helper for test IDs\n const getTestId = (suffix: string) => (testId ? `${testId}-${suffix}` : undefined)\n const [selectedDate, setSelectedDate] = useState<Date | null>(\n value || defaultValue || null\n )\n const [isOpen, setIsOpen] = useState(false)\n const [viewMonth, setViewMonth] = useState(\n selectedDate ? selectedDate.getMonth() : new Date().getMonth()\n )\n const [viewYear, setViewYear] = useState(\n selectedDate ? selectedDate.getFullYear() : new Date().getFullYear()\n )\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (value !== undefined) {\n setSelectedDate(value)\n }\n }, [value])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n const handleDateSelect = (day: number) => {\n const newDate = new Date(viewYear, viewMonth, day)\n setSelectedDate(newDate)\n onChange?.(newDate)\n setIsOpen(false)\n }\n\n const handlePrevMonth = () => {\n if (viewMonth === 0) {\n setViewMonth(11)\n setViewYear(viewYear - 1)\n } else {\n setViewMonth(viewMonth - 1)\n }\n }\n\n const handleNextMonth = () => {\n if (viewMonth === 11) {\n setViewMonth(0)\n setViewYear(viewYear + 1)\n } else {\n setViewMonth(viewMonth + 1)\n }\n }\n\n const daysInMonth = getDaysInMonth(viewYear, viewMonth)\n const firstDayOfMonth = getFirstDayOfMonth(viewYear, viewMonth)\n\n const calendarDays: (number | null)[] = []\n for (let i = 0; i < firstDayOfMonth; i++) {\n calendarDays.push(null)\n }\n for (let i = 1; i <= daysInMonth; i++) {\n calendarDays.push(i)\n }\n\n const isSelectedDay = (day: number | null): boolean => {\n if (!day || !selectedDate) return false\n return (\n selectedDate.getDate() === day &&\n selectedDate.getMonth() === viewMonth &&\n selectedDate.getFullYear() === viewYear\n )\n }\n\n const isToday = (day: number | null): boolean => {\n if (!day) return false\n const today = new Date()\n return (\n today.getDate() === day &&\n today.getMonth() === viewMonth &&\n today.getFullYear() === viewYear\n )\n }\n\n return (\n <div ref={ref || containerRef} className={`relative ${className}`} data-state={isOpen ? 'open' : 'closed'} data-testid={testId} {...rest}>\n <Input\n value={formatDate(selectedDate, format)}\n placeholder={placeholder}\n disabled={disabled}\n size={effectiveSize}\n readOnly\n onClick={() => !disabled && setIsOpen(!isOpen)}\n className=\"cursor-pointer\"\n data-testid={getTestId('input')}\n />\n\n {isOpen && (\n <div className=\"absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-lg p-4 z-50 w-80\" data-testid={getTestId('calendar')}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={handlePrevMonth}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm} ${dBtnSquare}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n\n <div className=\"text-base font-semibold\">\n {MONTHS[viewMonth]} {viewYear}\n </div>\n\n <button\n type=\"button\"\n onClick={handleNextMonth}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm} ${dBtnSquare}`}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </div>\n\n {/* Days of week */}\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {DAYS.map((day) => (\n <div\n key={day}\n className=\"text-center text-xs font-semibold text-base-content/60 py-2\"\n >\n {day}\n </div>\n ))}\n </div>\n\n {/* Calendar grid */}\n <div className=\"grid grid-cols-7 gap-1\">\n {calendarDays.map((day, index) => (\n <button\n key={index}\n type=\"button\"\n disabled={!day}\n onClick={() => day && handleDateSelect(day)}\n className={`\n aspect-square flex items-center justify-center text-sm rounded-lg\n ${!day ? 'invisible' : 'hover:bg-base-200'}\n ${isSelectedDay(day) ? 'bg-primary text-primary-content hover:bg-primary/90' : ''}\n ${isToday(day) && !isSelectedDay(day) ? 'border border-primary' : ''}\n ${day ? 'cursor-pointer' : ''}\n `}\n >\n {day}\n </button>\n ))}\n </div>\n\n {/* Today button */}\n <div className=\"mt-4 flex justify-end\">\n <button\n type=\"button\"\n onClick={() => {\n const today = new Date()\n setSelectedDate(today)\n setViewMonth(today.getMonth())\n setViewYear(today.getFullYear())\n onChange?.(today)\n setIsOpen(false)\n }}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm}`}\n >\n Today\n </button>\n </div>\n </div>\n )}\n </div>\n )\n})\n"],"names":["dBtn","dBtnGhost","dBtnSm","dBtnSquare","DAYS","MONTHS","formatDate","date","format","year","month","day","getDaysInMonth","getFirstDayOfMonth","DatePicker","forwardRef","value","defaultValue","onChange","placeholder","disabled","size","testId","className","rest","ref","componentSize","useConfig","effectiveSize","getTestId","suffix","selectedDate","setSelectedDate","useState","isOpen","setIsOpen","viewMonth","setViewMonth","viewYear","setViewYear","containerRef","useRef","useEffect","handleClickOutside","event","handleDateSelect","newDate","handlePrevMonth","handleNextMonth","daysInMonth","firstDayOfMonth","calendarDays","i","isSelectedDay","isToday","today","jsx","Input","jsxs","index"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as e, jsxs as u } from "react/jsx-runtime";
2
2
  import { forwardRef as m } from "react";
3
- import { useConfig as N } from "./ConfigProvider.js";
3
+ import { useConfig as N } from "../providers/ConfigProvider.js";
4
4
  const g = "dock", j = "dock-xs", z = "dock-sm", C = "dock-md", x = "dock-lg", S = "dock-xl", D = "dock-active", h = "dock-label", f = m(
5
5
  ({ active: c, children: t, className: s = "", ...n }, l) => {
6
6
  const d = [c && D, s].filter(Boolean).join(" ");
@@ -1 +1 @@
1
- {"version":3,"file":"Dock.js","sources":["../../src/components/Dock.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dDock = 'dock'\nconst dDockXs = 'dock-xs'\nconst dDockSm = 'dock-sm'\nconst dDockMd = 'dock-md'\nconst dDockLg = 'dock-lg'\nconst dDockXl = 'dock-xl'\nconst dDockActive = 'dock-active'\nconst dDockLabel = 'dock-label'\n\nexport interface DockItemConfig {\n /** Icon element */\n icon: React.ReactNode\n /** Label text */\n label?: string\n /** Whether this item is active */\n active?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Click handler for this item */\n onClick?: () => void\n}\n\nexport interface DockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Dock items configuration */\n items?: DockItemConfig[]\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Controlled active index */\n activeIndex?: number\n /** Callback when an item is clicked */\n onChange?: (index: number) => void\n /** Children (alternative to items prop) */\n children?: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nexport interface DockItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Whether this item is active */\n active?: boolean\n /** Children (icon and optional label) */\n children: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nconst DockItem = forwardRef<HTMLButtonElement, DockItemProps>(\n ({ active, children, className = '', ...props }, ref) => {\n const classes = [active && dDockActive, className].filter(Boolean).join(' ')\n\n return (\n <button ref={ref} className={classes || undefined} {...props}>\n {children}\n </button>\n )\n }\n)\n\nDockItem.displayName = 'Dock.Item'\n\nconst DockRoot = forwardRef<HTMLDivElement, DockProps>(\n ({ items, size, activeIndex, onChange, children, className = '', ...props }, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dDockXs,\n sm: dDockSm,\n md: dDockMd,\n lg: dDockLg,\n xl: dDockXl,\n }\n\n const classes = [dDock, sizeClasses[effectiveSize], className].filter(Boolean).join(' ')\n\n // If items array is provided, render from config\n if (items) {\n return (\n <div ref={ref} className={classes} {...props}>\n {items.map((item, index) => {\n const isActive = activeIndex !== undefined ? activeIndex === index : item.active\n\n return (\n <button\n key={index}\n className={isActive ? dDockActive : undefined}\n disabled={item.disabled}\n onClick={() => {\n item.onClick?.()\n onChange?.(index)\n }}\n >\n {item.icon}\n {item.label && <span className={dDockLabel}>{item.label}</span>}\n </button>\n )\n })}\n </div>\n )\n }\n\n // Otherwise render children\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nDockRoot.displayName = 'Dock'\n\nexport const Dock = Object.assign(DockRoot, {\n Item: DockItem,\n})\n"],"names":["dDock","dDockXs","dDockSm","dDockMd","dDockLg","dDockXl","dDockActive","dDockLabel","DockItem","forwardRef","active","children","className","props","ref","classes","jsx","DockRoot","items","size","activeIndex","onChange","componentSize","useConfig","item","index","isActive","jsxs","Dock"],"mappings":";;;AAIA,MAAMA,IAAQ,QACRC,IAAU,WACVC,IAAU,WACVC,IAAU,WACVC,IAAU,WACVC,IAAU,WACVC,IAAc,eACdC,IAAa,cAuCbC,IAAWC;AAAA,EACf,CAAC,EAAE,QAAAC,GAAQ,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AACvD,UAAMC,IAAU,CAACL,KAAUJ,GAAaM,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE3E,WACE,gBAAAI,EAAC,YAAO,KAAAF,GAAU,WAAWC,KAAW,QAAY,GAAGF,GACpD,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAH,EAAS,cAAc;AAEvB,MAAMS,IAAWR;AAAA,EACf,CAAC,EAAE,OAAAS,GAAO,MAAAC,GAAM,aAAAC,GAAa,UAAAC,GAAU,UAAAV,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AACnF,UAAM,EAAE,eAAAQ,EAAA,IAAkBC,EAAA,GAWpBR,IAAU,CAACf,GARG;AAAA,MAClB,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,EAPgBc,KAAQG,KAAiB,IAUE,GAAGV,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAGvF,WAAIM,IAEA,gBAAAF,EAAC,OAAA,EAAI,KAAAF,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAK,EAAM,IAAI,CAACM,GAAMC,MAAU;AAC1B,YAAMC,IAAWN,MAAgB,SAAYA,MAAgBK,IAAQD,EAAK;AAE1E,aACE,gBAAAG;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWD,IAAWpB,IAAc;AAAA,UACpC,UAAUkB,EAAK;AAAA,UACf,SAAS,MAAM;AACb,YAAAA,EAAK,UAAA,GACLH,IAAWI,CAAK;AAAA,UAClB;AAAA,UAEC,UAAA;AAAA,YAAAD,EAAK;AAAA,YACLA,EAAK,SAAS,gBAAAR,EAAC,UAAK,WAAWT,GAAa,YAAK,MAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QATnDkB;AAAA,MAAA;AAAA,IAYX,CAAC,EAAA,CACH,sBAMD,OAAA,EAAI,KAAAX,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAM,EAAS,cAAc;AAEhB,MAAMW,IAAO,OAAO,OAAOX,GAAU;AAAA,EAC1C,MAAMT;AACR,CAAC;"}
1
+ {"version":3,"file":"Dock.js","sources":["../../src/components/Dock.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dDock = 'dock'\nconst dDockXs = 'dock-xs'\nconst dDockSm = 'dock-sm'\nconst dDockMd = 'dock-md'\nconst dDockLg = 'dock-lg'\nconst dDockXl = 'dock-xl'\nconst dDockActive = 'dock-active'\nconst dDockLabel = 'dock-label'\n\nexport interface DockItemConfig {\n /** Icon element */\n icon: React.ReactNode\n /** Label text */\n label?: string\n /** Whether this item is active */\n active?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Click handler for this item */\n onClick?: () => void\n}\n\nexport interface DockProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Dock items configuration */\n items?: DockItemConfig[]\n /** Size variant */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Controlled active index */\n activeIndex?: number\n /** Callback when an item is clicked */\n onChange?: (index: number) => void\n /** Children (alternative to items prop) */\n children?: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nexport interface DockItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Whether this item is active */\n active?: boolean\n /** Children (icon and optional label) */\n children: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nconst DockItem = forwardRef<HTMLButtonElement, DockItemProps>(\n ({ active, children, className = '', ...props }, ref) => {\n const classes = [active && dDockActive, className].filter(Boolean).join(' ')\n\n return (\n <button ref={ref} className={classes || undefined} {...props}>\n {children}\n </button>\n )\n }\n)\n\nDockItem.displayName = 'Dock.Item'\n\nconst DockRoot = forwardRef<HTMLDivElement, DockProps>(\n ({ items, size, activeIndex, onChange, children, className = '', ...props }, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dDockXs,\n sm: dDockSm,\n md: dDockMd,\n lg: dDockLg,\n xl: dDockXl,\n }\n\n const classes = [dDock, sizeClasses[effectiveSize], className].filter(Boolean).join(' ')\n\n // If items array is provided, render from config\n if (items) {\n return (\n <div ref={ref} className={classes} {...props}>\n {items.map((item, index) => {\n const isActive = activeIndex !== undefined ? activeIndex === index : item.active\n\n return (\n <button\n key={index}\n className={isActive ? dDockActive : undefined}\n disabled={item.disabled}\n onClick={() => {\n item.onClick?.()\n onChange?.(index)\n }}\n >\n {item.icon}\n {item.label && <span className={dDockLabel}>{item.label}</span>}\n </button>\n )\n })}\n </div>\n )\n }\n\n // Otherwise render children\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nDockRoot.displayName = 'Dock'\n\nexport const Dock = Object.assign(DockRoot, {\n Item: DockItem,\n})\n"],"names":["dDock","dDockXs","dDockSm","dDockMd","dDockLg","dDockXl","dDockActive","dDockLabel","DockItem","forwardRef","active","children","className","props","ref","classes","jsx","DockRoot","items","size","activeIndex","onChange","componentSize","useConfig","item","index","isActive","jsxs","Dock"],"mappings":";;;AAIA,MAAMA,IAAQ,QACRC,IAAU,WACVC,IAAU,WACVC,IAAU,WACVC,IAAU,WACVC,IAAU,WACVC,IAAc,eACdC,IAAa,cAuCbC,IAAWC;AAAA,EACf,CAAC,EAAE,QAAAC,GAAQ,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AACvD,UAAMC,IAAU,CAACL,KAAUJ,GAAaM,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE3E,WACE,gBAAAI,EAAC,YAAO,KAAAF,GAAU,WAAWC,KAAW,QAAY,GAAGF,GACpD,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAH,EAAS,cAAc;AAEvB,MAAMS,IAAWR;AAAA,EACf,CAAC,EAAE,OAAAS,GAAO,MAAAC,GAAM,aAAAC,GAAa,UAAAC,GAAU,UAAAV,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AACnF,UAAM,EAAE,eAAAQ,EAAA,IAAkBC,EAAA,GAWpBR,IAAU,CAACf,GARG;AAAA,MAClB,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,EAPgBc,KAAQG,KAAiB,IAUE,GAAGV,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAGvF,WAAIM,IAEA,gBAAAF,EAAC,OAAA,EAAI,KAAAF,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAK,EAAM,IAAI,CAACM,GAAMC,MAAU;AAC1B,YAAMC,IAAWN,MAAgB,SAAYA,MAAgBK,IAAQD,EAAK;AAE1E,aACE,gBAAAG;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWD,IAAWpB,IAAc;AAAA,UACpC,UAAUkB,EAAK;AAAA,UACf,SAAS,MAAM;AACb,YAAAA,EAAK,UAAA,GACLH,IAAWI,CAAK;AAAA,UAClB;AAAA,UAEC,UAAA;AAAA,YAAAD,EAAK;AAAA,YACLA,EAAK,SAAS,gBAAAR,EAAC,UAAK,WAAWT,GAAa,YAAK,MAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QATnDkB;AAAA,MAAA;AAAA,IAYX,CAAC,EAAA,CACH,sBAMD,OAAA,EAAI,KAAAX,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAM,EAAS,cAAc;AAEhB,MAAMW,IAAO,OAAO,OAAOX,GAAU;AAAA,EAC1C,MAAMT;AACR,CAAC;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as a, jsxs as e } from "react/jsx-runtime";
2
2
  import { forwardRef as y } from "react";
3
- import { useComponentLocale as v } from "./ConfigProvider.js";
3
+ import { useComponentLocale as v } from "../providers/ConfigProvider.js";
4
4
  const i = () => /* @__PURE__ */ a(
5
5
  "svg",
6
6
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Empty.js","sources":["../../src/components/Empty.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useComponentLocale } from './ConfigProvider'\n\nexport interface EmptyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Extra content like buttons or actions */\n children?: React.ReactNode\n /** Text or node to display as description */\n description?: React.ReactNode\n /** Custom image or icon; set to null to hide */\n image?: React.ReactNode\n /** Styling applied to the image container */\n imageStyle?: React.CSSProperties\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\nconst DefaultEmptyImage: React.FC = () => (\n <svg\n width=\"184\"\n height=\"152\"\n viewBox=\"0 0 184 152\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mx-auto\"\n aria-hidden=\"true\"\n >\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse\n className=\"fill-base-300\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"fill-base-200\"\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n />\n <path\n className=\"fill-base-100\"\n d=\"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\"\n transform=\"translate(13.56)\"\n />\n <ellipse\n className=\"fill-base-300\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"fill-base-200\"\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n />\n <path\n className=\"fill-base-content opacity-10\"\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\n />\n <path\n className=\"fill-base-100\"\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\n />\n </g>\n <path\n className=\"fill-base-content opacity-10\"\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\n />\n <g className=\"fill-base-100\" transform=\"translate(149.65 15.383)\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\n </g>\n </g>\n </svg>\n)\n\n// Simple/minimal empty image (matches Ant Design's PRESENTED_IMAGE_SIMPLE)\nconst SimpleEmptyImage: React.FC = () => (\n <svg\n width=\"64\"\n height=\"41\"\n viewBox=\"0 0 64 41\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mx-auto\"\n aria-hidden=\"true\"\n >\n <g transform=\"translate(0 1)\" fill=\"none\" fillRule=\"evenodd\">\n <ellipse className=\"fill-base-300\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\n <g fillRule=\"nonzero\" className=\"stroke-base-content/20\">\n <path d=\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\" />\n <path\n d=\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\"\n className=\"fill-base-200\"\n />\n </g>\n </g>\n </svg>\n)\n\nconst EmptyRoot = forwardRef<HTMLDivElement, EmptyProps>(\n (\n {\n children,\n className = '',\n description,\n image,\n imageStyle,\n 'data-testid': testId = 'empty',\n ...rest\n },\n ref\n ) => {\n const locale = useComponentLocale('Empty')\n const displayDescription = description ?? locale.description\n\n const classes = ['flex flex-col items-center justify-center py-8 px-4', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n ref={ref}\n className={classes}\n role=\"status\"\n aria-label={typeof displayDescription === 'string' ? displayDescription : 'Empty'}\n data-testid={testId}\n {...rest}\n >\n {image !== null && (\n <div className=\"mb-2\" style={imageStyle} data-testid={`${testId}-image`}>\n {image === undefined ? <DefaultEmptyImage /> : image}\n </div>\n )}\n {displayDescription && (\n <div className=\"text-base-content/60 text-sm mb-4\" data-testid={`${testId}-description`}>\n {displayDescription}\n </div>\n )}\n {children && (\n <div className=\"mt-2\" data-testid={`${testId}-footer`}>\n {children}\n </div>\n )}\n </div>\n )\n }\n)\n\nEmptyRoot.displayName = 'Empty'\n\n// Export with static image constants (like Ant Design)\nexport const Empty = Object.assign(EmptyRoot, {\n PRESENTED_IMAGE_DEFAULT: <DefaultEmptyImage />,\n PRESENTED_IMAGE_SIMPLE: <SimpleEmptyImage />,\n})\n"],"names":["DefaultEmptyImage","jsx","jsxs","SimpleEmptyImage","EmptyRoot","forwardRef","children","className","description","image","imageStyle","testId","rest","ref","locale","useComponentLocale","displayDescription","classes","Empty"],"mappings":"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"}
1
+ {"version":3,"file":"Empty.js","sources":["../../src/components/Empty.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useComponentLocale } from '../providers/ConfigProvider'\n\nexport interface EmptyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Extra content like buttons or actions */\n children?: React.ReactNode\n /** Text or node to display as description */\n description?: React.ReactNode\n /** Custom image or icon; set to null to hide */\n image?: React.ReactNode\n /** Styling applied to the image container */\n imageStyle?: React.CSSProperties\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\nconst DefaultEmptyImage: React.FC = () => (\n <svg\n width=\"184\"\n height=\"152\"\n viewBox=\"0 0 184 152\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mx-auto\"\n aria-hidden=\"true\"\n >\n <g fill=\"none\" fillRule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse\n className=\"fill-base-300\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"fill-base-200\"\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n />\n <path\n className=\"fill-base-100\"\n d=\"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\"\n transform=\"translate(13.56)\"\n />\n <ellipse\n className=\"fill-base-300\"\n cx=\"67.797\"\n cy=\"106.89\"\n rx=\"67.797\"\n ry=\"12.668\"\n />\n <path\n className=\"fill-base-200\"\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n />\n <path\n className=\"fill-base-content opacity-10\"\n d=\"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z\"\n />\n <path\n className=\"fill-base-100\"\n d=\"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\n />\n </g>\n <path\n className=\"fill-base-content opacity-10\"\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\n />\n <g className=\"fill-base-100\" transform=\"translate(149.65 15.383)\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\n </g>\n </g>\n </svg>\n)\n\n// Simple/minimal empty image (matches Ant Design's PRESENTED_IMAGE_SIMPLE)\nconst SimpleEmptyImage: React.FC = () => (\n <svg\n width=\"64\"\n height=\"41\"\n viewBox=\"0 0 64 41\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mx-auto\"\n aria-hidden=\"true\"\n >\n <g transform=\"translate(0 1)\" fill=\"none\" fillRule=\"evenodd\">\n <ellipse className=\"fill-base-300\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\n <g fillRule=\"nonzero\" className=\"stroke-base-content/20\">\n <path d=\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\" />\n <path\n d=\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\"\n className=\"fill-base-200\"\n />\n </g>\n </g>\n </svg>\n)\n\nconst EmptyRoot = forwardRef<HTMLDivElement, EmptyProps>(\n (\n {\n children,\n className = '',\n description,\n image,\n imageStyle,\n 'data-testid': testId = 'empty',\n ...rest\n },\n ref\n ) => {\n const locale = useComponentLocale('Empty')\n const displayDescription = description ?? locale.description\n\n const classes = ['flex flex-col items-center justify-center py-8 px-4', className]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n ref={ref}\n className={classes}\n role=\"status\"\n aria-label={typeof displayDescription === 'string' ? displayDescription : 'Empty'}\n data-testid={testId}\n {...rest}\n >\n {image !== null && (\n <div className=\"mb-2\" style={imageStyle} data-testid={`${testId}-image`}>\n {image === undefined ? <DefaultEmptyImage /> : image}\n </div>\n )}\n {displayDescription && (\n <div className=\"text-base-content/60 text-sm mb-4\" data-testid={`${testId}-description`}>\n {displayDescription}\n </div>\n )}\n {children && (\n <div className=\"mt-2\" data-testid={`${testId}-footer`}>\n {children}\n </div>\n )}\n </div>\n )\n }\n)\n\nEmptyRoot.displayName = 'Empty'\n\n// Export with static image constants (like Ant Design)\nexport const Empty = Object.assign(EmptyRoot, {\n PRESENTED_IMAGE_DEFAULT: <DefaultEmptyImage />,\n PRESENTED_IMAGE_SIMPLE: <SimpleEmptyImage />,\n})\n"],"names":["DefaultEmptyImage","jsx","jsxs","SimpleEmptyImage","EmptyRoot","forwardRef","children","className","description","image","imageStyle","testId","rest","ref","locale","useComponentLocale","displayDescription","classes","Empty"],"mappings":";;;AAgBA,MAAMA,IAA8B,MAClC,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,WAAU;AAAA,IACV,eAAY;AAAA,IAEZ,UAAA,gBAAAC,EAAC,KAAA,EAAE,MAAK,QAAO,UAAS,WACtB,UAAA;AAAA,MAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,uBACX,UAAA;AAAA,QAAA,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAEL,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,YACF,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAEL,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,QAEJ,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,GAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ,GACF;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,GAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJ,gBAAAC,EAAC,KAAA,EAAE,WAAU,iBAAgB,WAAU,4BACrC,UAAA;AAAA,QAAA,gBAAAD,EAAC,WAAA,EAAQ,IAAG,UAAS,IAAG,SAAQ,IAAG,SAAQ,IAAG,QAAA,CAAQ;AAAA,QACtD,gBAAAA,EAAC,QAAA,EAAK,GAAE,uDAAA,CAAuD;AAAA,MAAA,EAAA,CACjE;AAAA,IAAA,EAAA,CACF;AAAA,EAAA;AACF,GAIIE,IAA6B,MACjC,gBAAAF;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,WAAU;AAAA,IACV,eAAY;AAAA,IAEZ,4BAAC,KAAA,EAAE,WAAU,kBAAiB,MAAK,QAAO,UAAS,WACjD,UAAA;AAAA,MAAA,gBAAAA,EAAC,WAAA,EAAQ,WAAU,iBAAgB,IAAG,MAAK,IAAG,MAAK,IAAG,MAAK,IAAG,IAAA,CAAI;AAAA,MAClE,gBAAAC,EAAC,KAAA,EAAE,UAAS,WAAU,WAAU,0BAC9B,UAAA;AAAA,QAAA,gBAAAD,EAAC,QAAA,EAAK,GAAE,gHAAA,CAAgH;AAAA,QACxH,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAE;AAAA,YACF,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA;AACF,GAGIG,IAAYC;AAAA,EAChB,CACE;AAAA,IACE,UAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,aAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAeC,IAAS;AAAA,IACxB,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAASC,EAAmB,OAAO,GACnCC,IAAqBR,KAAeM,EAAO,aAE3CG,IAAU,CAAC,uDAAuDV,CAAS,EAC9E,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAW;AAAA,QACA,WAAWI;AAAA,QACX,MAAK;AAAA,QACL,cAAY,OAAOD,KAAuB,WAAWA,IAAqB;AAAA,QAC1E,eAAaL;AAAA,QACZ,GAAGC;AAAA,QAEH,UAAA;AAAA,UAAAH,MAAU,QACT,gBAAAR,EAAC,OAAA,EAAI,WAAU,QAAO,OAAOS,GAAY,eAAa,GAAGC,CAAM,UAC5D,UAAAF,MAAU,SAAY,gBAAAR,EAACD,GAAA,CAAA,CAAkB,IAAKS,GACjD;AAAA,UAEDO,uBACE,OAAA,EAAI,WAAU,qCAAoC,eAAa,GAAGL,CAAM,gBACtE,UAAAK,EAAA,CACH;AAAA,UAEDV,uBACE,OAAA,EAAI,WAAU,QAAO,eAAa,GAAGK,CAAM,WACzC,UAAAL,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEAF,EAAU,cAAc;AAGjB,MAAMc,IAAQ,OAAO,OAAOd,GAAW;AAAA,EAC5C,2CAA0BJ,GAAA,EAAkB;AAAA,EAC5C,0CAAyBG,GAAA,CAAA,CAAiB;AAC5C,CAAC;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as d } from "react/jsx-runtime";
2
2
  import { forwardRef as I } from "react";
3
- import { useConfig as m } from "./ConfigProvider.js";
3
+ import { useConfig as m } from "../providers/ConfigProvider.js";
4
4
  const F = "file-input", g = "file-input-xs", y = "file-input-sm", x = "file-input-md", S = "file-input-lg", w = "file-input-xl", C = "file-input-neutral", z = "file-input-primary", N = "file-input-secondary", h = "file-input-accent", j = "file-input-info", X = "file-input-success", v = "file-input-warning", A = "file-input-error", e = "file-input-ghost", B = I(
5
5
  ({ size: i, color: n, ghost: s = !1, bordered: l = !0, className: o = "", ...u }, p) => {
6
6
  const { componentSize: c } = m(), t = i ?? c ?? "md", r = {
@@ -1 +1 @@
1
- {"version":3,"file":"FileInput.js","sources":["../../src/components/FileInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dFileInput = 'file-input'\nconst dFileInputXs = 'file-input-xs'\nconst dFileInputSm = 'file-input-sm'\nconst dFileInputMd = 'file-input-md'\nconst dFileInputLg = 'file-input-lg'\nconst dFileInputXl = 'file-input-xl'\nconst dFileInputNeutral = 'file-input-neutral'\nconst dFileInputPrimary = 'file-input-primary'\nconst dFileInputSecondary = 'file-input-secondary'\nconst dFileInputAccent = 'file-input-accent'\nconst dFileInputInfo = 'file-input-info'\nconst dFileInputSuccess = 'file-input-success'\nconst dFileInputWarning = 'file-input-warning'\nconst dFileInputError = 'file-input-error'\nconst dFileInputGhost = 'file-input-ghost'\n\nexport interface FileInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(\n ({ size, color, ghost = false, bordered = true, className = '', ...props }, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dFileInputXs,\n sm: dFileInputSm,\n md: dFileInputMd,\n lg: dFileInputLg,\n xl: dFileInputXl,\n }\n\n const colorClasses = {\n neutral: dFileInputNeutral,\n primary: dFileInputPrimary,\n secondary: dFileInputSecondary,\n accent: dFileInputAccent,\n info: dFileInputInfo,\n success: dFileInputSuccess,\n warning: dFileInputWarning,\n error: dFileInputError,\n }\n\n const fileInputClasses = [\n dFileInput,\n 'w-full',\n // In DaisyUI 5, borders are on by default. Use ghost to remove them.\n !bordered && dFileInputGhost,\n ghost && dFileInputGhost,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <input ref={ref} type=\"file\" className={fileInputClasses} {...props} />\n }\n)\n\nFileInput.displayName = 'FileInput'\n"],"names":["dFileInput","dFileInputXs","dFileInputSm","dFileInputMd","dFileInputLg","dFileInputXl","dFileInputNeutral","dFileInputPrimary","dFileInputSecondary","dFileInputAccent","dFileInputInfo","dFileInputSuccess","dFileInputWarning","dFileInputError","dFileInputGhost","FileInput","forwardRef","size","color","ghost","bordered","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","fileInputClasses","jsx"],"mappings":";;;AAIA,MAAMA,IAAa,cACbC,IAAe,iBACfC,IAAe,iBACfC,IAAe,iBACfC,IAAe,iBACfC,IAAe,iBACfC,IAAoB,sBACpBC,IAAoB,sBACpBC,IAAsB,wBACtBC,IAAmB,qBACnBC,IAAiB,mBACjBC,IAAoB,sBACpBC,IAAoB,sBACpBC,IAAkB,oBAClBC,IAAkB,oBAUXC,IAAYC;AAAA,EACvB,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,OAAAC,IAAQ,IAAO,UAAAC,IAAW,IAAM,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAClF,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAI1B;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAuB,IAAe;AAAA,MACnB,SAAStB;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,MAAMC;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,GAGHgB,IAAmB;AAAA,MACvB7B;AAAA,MACA;AAAA;AAAA,MAEA,CAACoB,KAAYN;AAAA,MACbK,KAASL;AAAA,MACTY,KAAiBC,EAAYD,CAAa;AAAA,MAC1CR,KAASU,EAAaV,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WAAO,gBAAAS,EAAC,WAAM,KAAAP,GAAU,MAAK,QAAO,WAAWM,GAAmB,GAAGP,GAAO;AAAA,EAC9E;AACF;AAEAP,EAAU,cAAc;"}
1
+ {"version":3,"file":"FileInput.js","sources":["../../src/components/FileInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dFileInput = 'file-input'\nconst dFileInputXs = 'file-input-xs'\nconst dFileInputSm = 'file-input-sm'\nconst dFileInputMd = 'file-input-md'\nconst dFileInputLg = 'file-input-lg'\nconst dFileInputXl = 'file-input-xl'\nconst dFileInputNeutral = 'file-input-neutral'\nconst dFileInputPrimary = 'file-input-primary'\nconst dFileInputSecondary = 'file-input-secondary'\nconst dFileInputAccent = 'file-input-accent'\nconst dFileInputInfo = 'file-input-info'\nconst dFileInputSuccess = 'file-input-success'\nconst dFileInputWarning = 'file-input-warning'\nconst dFileInputError = 'file-input-error'\nconst dFileInputGhost = 'file-input-ghost'\n\nexport interface FileInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n ghost?: boolean\n bordered?: boolean\n className?: string\n}\n\nexport const FileInput = forwardRef<HTMLInputElement, FileInputProps>(\n ({ size, color, ghost = false, bordered = true, className = '', ...props }, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dFileInputXs,\n sm: dFileInputSm,\n md: dFileInputMd,\n lg: dFileInputLg,\n xl: dFileInputXl,\n }\n\n const colorClasses = {\n neutral: dFileInputNeutral,\n primary: dFileInputPrimary,\n secondary: dFileInputSecondary,\n accent: dFileInputAccent,\n info: dFileInputInfo,\n success: dFileInputSuccess,\n warning: dFileInputWarning,\n error: dFileInputError,\n }\n\n const fileInputClasses = [\n dFileInput,\n 'w-full',\n // In DaisyUI 5, borders are on by default. Use ghost to remove them.\n !bordered && dFileInputGhost,\n ghost && dFileInputGhost,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return <input ref={ref} type=\"file\" className={fileInputClasses} {...props} />\n }\n)\n\nFileInput.displayName = 'FileInput'\n"],"names":["dFileInput","dFileInputXs","dFileInputSm","dFileInputMd","dFileInputLg","dFileInputXl","dFileInputNeutral","dFileInputPrimary","dFileInputSecondary","dFileInputAccent","dFileInputInfo","dFileInputSuccess","dFileInputWarning","dFileInputError","dFileInputGhost","FileInput","forwardRef","size","color","ghost","bordered","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","fileInputClasses","jsx"],"mappings":";;;AAIA,MAAMA,IAAa,cACbC,IAAe,iBACfC,IAAe,iBACfC,IAAe,iBACfC,IAAe,iBACfC,IAAe,iBACfC,IAAoB,sBACpBC,IAAoB,sBACpBC,IAAsB,wBACtBC,IAAmB,qBACnBC,IAAiB,mBACjBC,IAAoB,sBACpBC,IAAoB,sBACpBC,IAAkB,oBAClBC,IAAkB,oBAUXC,IAAYC;AAAA,EACvB,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,OAAAC,IAAQ,IAAO,UAAAC,IAAW,IAAM,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAClF,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBT,KAAQO,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAI1B;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAuB,IAAe;AAAA,MACnB,SAAStB;AAAA,MACT,SAASC;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,MAAMC;AAAA,MACN,SAASC;AAAA,MACT,SAASC;AAAA,MACT,OAAOC;AAAA,IAAA,GAGHgB,IAAmB;AAAA,MACvB7B;AAAA,MACA;AAAA;AAAA,MAEA,CAACoB,KAAYN;AAAA,MACbK,KAASL;AAAA,MACTY,KAAiBC,EAAYD,CAAa;AAAA,MAC1CR,KAASU,EAAaV,CAAK;AAAA,MAC3BG;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WAAO,gBAAAS,EAAC,WAAM,KAAAP,GAAU,MAAK,QAAO,WAAWM,GAAmB,GAAGP,GAAO;AAAA,EAC9E;AACF;AAEAP,EAAU,cAAc;"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as N, jsx as r } from "react/jsx-runtime";
2
2
  import { useId as I, useState as R } from "react";
3
- import { useConfig as $ } from "./ConfigProvider.js";
3
+ import { useConfig as $ } from "../providers/ConfigProvider.js";
4
4
  const q = "filter", i = "btn", F = "btn-xs", V = "btn-sm", X = "btn-lg", k = "btn-xl", O = "btn-square", c = {
5
5
  xs: F,
6
6
  sm: V,
@@ -1 +1 @@
1
- {"version":3,"file":"Filter.js","sources":["../../src/components/Filter.tsx"],"sourcesContent":["import React, { useState, useId } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dFilter = 'filter'\nconst dBtn = 'btn'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnLg = 'btn-lg'\nconst dBtnXl = 'btn-xl'\nconst dBtnSquare = 'btn-square'\n\nexport interface FilterOption {\n label: string\n value: string\n disabled?: boolean\n}\n\nexport interface FilterProps {\n /** Filter options */\n options: (string | FilterOption)[]\n /** Controlled value */\n value?: string\n /** Default value for uncontrolled mode */\n defaultValue?: string\n /** Change handler */\n onChange?: (value: string | undefined) => void\n /** Radio group name (auto-generated if not provided) */\n name?: string\n /** Button size */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Show reset button */\n showReset?: boolean\n /** Reset button label */\n resetLabel?: React.ReactNode\n /** Additional CSS classes for container */\n className?: string\n}\n\nconst sizeClasses: Record<string, string> = {\n xs: dBtnXs,\n sm: dBtnSm,\n md: '',\n lg: dBtnLg,\n xl: dBtnXl,\n}\n\nexport const Filter: React.FC<FilterProps> = ({\n options,\n value,\n defaultValue,\n onChange,\n name,\n size,\n showReset = true,\n resetLabel = '×',\n className = '',\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const autoId = useId()\n const groupName = name || `filter-${autoId}`\n\n const [internalValue, setInternalValue] = useState<string | undefined>(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n const isControlled = value !== undefined\n\n const normalizedOptions: FilterOption[] = options.map((opt) =>\n typeof opt === 'string' ? { label: opt, value: opt } : opt\n )\n\n const handleChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const handleReset = () => {\n if (!isControlled) {\n setInternalValue(undefined)\n }\n onChange?.(undefined)\n }\n\n const buttonClasses = [dBtn, sizeClasses[effectiveSize]].filter(Boolean).join(' ')\n const resetClasses = [dBtn, dBtnSquare, sizeClasses[effectiveSize]].filter(Boolean).join(' ')\n\n return (\n <form className={`${dFilter} ${className}`.trim()} onReset={handleReset}>\n {showReset && (\n <input\n className={resetClasses}\n type=\"reset\"\n value={typeof resetLabel === 'string' ? resetLabel : undefined}\n aria-label=\"Reset filter\"\n />\n )}\n {normalizedOptions.map((option) => (\n <input\n key={option.value}\n className={buttonClasses}\n type=\"radio\"\n name={groupName}\n value={option.value}\n aria-label={option.label}\n checked={currentValue === option.value}\n onChange={() => handleChange(option.value)}\n disabled={option.disabled}\n />\n ))}\n </form>\n )\n}\n"],"names":["dFilter","dBtn","dBtnXs","dBtnSm","dBtnLg","dBtnXl","dBtnSquare","sizeClasses","Filter","options","value","defaultValue","onChange","name","size","showReset","resetLabel","className","componentSize","useConfig","effectiveSize","autoId","useId","groupName","internalValue","setInternalValue","useState","currentValue","isControlled","normalizedOptions","opt","handleChange","newValue","handleReset","buttonClasses","resetClasses","jsxs","jsx","option"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAO,OACPC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAa,cA6BbC,IAAsC;AAAA,EAC1C,IAAIL;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAI;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AACN,GAEaG,IAAgC,CAAC;AAAA,EAC5C,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBN,KAAQI,KAAiB,MAEzCG,IAASC,EAAA,GACTC,IAAYV,KAAQ,UAAUQ,CAAM,IAEpC,CAACG,GAAeC,CAAgB,IAAIC,EAA6Bf,CAAY,GAC7EgB,IAAejB,MAAU,SAAYA,IAAQc,GAC7CI,IAAelB,MAAU,QAEzBmB,IAAoCpB,EAAQ;AAAA,IAAI,CAACqB,MACrD,OAAOA,KAAQ,WAAW,EAAE,OAAOA,GAAK,OAAOA,MAAQA;AAAA,EAAA,GAGnDC,IAAe,CAACC,MAAqB;AACzC,IAAKJ,KACHH,EAAiBO,CAAQ,GAE3BpB,IAAWoB,CAAQ;AAAA,EACrB,GAEMC,IAAc,MAAM;AACxB,IAAKL,KACHH,EAAiB,MAAS,GAE5Bb,IAAW,MAAS;AAAA,EACtB,GAEMsB,IAAgB,CAACjC,GAAMM,EAAYa,CAAa,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC3Ee,IAAe,CAAClC,GAAMK,GAAYC,EAAYa,CAAa,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE5F,SACE,gBAAAgB,EAAC,QAAA,EAAK,WAAW,GAAGpC,CAAO,IAAIiB,CAAS,GAAG,KAAA,GAAQ,SAASgB,GACzD,UAAA;AAAA,IAAAlB,KACC,gBAAAsB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWF;AAAA,QACX,MAAK;AAAA,QACL,OAAO,OAAOnB,KAAe,WAAWA,IAAa;AAAA,QACrD,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGda,EAAkB,IAAI,CAACS,MACtB,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWH;AAAA,QACX,MAAK;AAAA,QACL,MAAMX;AAAA,QACN,OAAOe,EAAO;AAAA,QACd,cAAYA,EAAO;AAAA,QACnB,SAASX,MAAiBW,EAAO;AAAA,QACjC,UAAU,MAAMP,EAAaO,EAAO,KAAK;AAAA,QACzC,UAAUA,EAAO;AAAA,MAAA;AAAA,MARZA,EAAO;AAAA,IAAA,CAUf;AAAA,EAAA,GACH;AAEJ;"}
1
+ {"version":3,"file":"Filter.js","sources":["../../src/components/Filter.tsx"],"sourcesContent":["import React, { useState, useId } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dFilter = 'filter'\nconst dBtn = 'btn'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnLg = 'btn-lg'\nconst dBtnXl = 'btn-xl'\nconst dBtnSquare = 'btn-square'\n\nexport interface FilterOption {\n label: string\n value: string\n disabled?: boolean\n}\n\nexport interface FilterProps {\n /** Filter options */\n options: (string | FilterOption)[]\n /** Controlled value */\n value?: string\n /** Default value for uncontrolled mode */\n defaultValue?: string\n /** Change handler */\n onChange?: (value: string | undefined) => void\n /** Radio group name (auto-generated if not provided) */\n name?: string\n /** Button size */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Show reset button */\n showReset?: boolean\n /** Reset button label */\n resetLabel?: React.ReactNode\n /** Additional CSS classes for container */\n className?: string\n}\n\nconst sizeClasses: Record<string, string> = {\n xs: dBtnXs,\n sm: dBtnSm,\n md: '',\n lg: dBtnLg,\n xl: dBtnXl,\n}\n\nexport const Filter: React.FC<FilterProps> = ({\n options,\n value,\n defaultValue,\n onChange,\n name,\n size,\n showReset = true,\n resetLabel = '×',\n className = '',\n}) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const autoId = useId()\n const groupName = name || `filter-${autoId}`\n\n const [internalValue, setInternalValue] = useState<string | undefined>(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n const isControlled = value !== undefined\n\n const normalizedOptions: FilterOption[] = options.map((opt) =>\n typeof opt === 'string' ? { label: opt, value: opt } : opt\n )\n\n const handleChange = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const handleReset = () => {\n if (!isControlled) {\n setInternalValue(undefined)\n }\n onChange?.(undefined)\n }\n\n const buttonClasses = [dBtn, sizeClasses[effectiveSize]].filter(Boolean).join(' ')\n const resetClasses = [dBtn, dBtnSquare, sizeClasses[effectiveSize]].filter(Boolean).join(' ')\n\n return (\n <form className={`${dFilter} ${className}`.trim()} onReset={handleReset}>\n {showReset && (\n <input\n className={resetClasses}\n type=\"reset\"\n value={typeof resetLabel === 'string' ? resetLabel : undefined}\n aria-label=\"Reset filter\"\n />\n )}\n {normalizedOptions.map((option) => (\n <input\n key={option.value}\n className={buttonClasses}\n type=\"radio\"\n name={groupName}\n value={option.value}\n aria-label={option.label}\n checked={currentValue === option.value}\n onChange={() => handleChange(option.value)}\n disabled={option.disabled}\n />\n ))}\n </form>\n )\n}\n"],"names":["dFilter","dBtn","dBtnXs","dBtnSm","dBtnLg","dBtnXl","dBtnSquare","sizeClasses","Filter","options","value","defaultValue","onChange","name","size","showReset","resetLabel","className","componentSize","useConfig","effectiveSize","autoId","useId","groupName","internalValue","setInternalValue","useState","currentValue","isControlled","normalizedOptions","opt","handleChange","newValue","handleReset","buttonClasses","resetClasses","jsxs","jsx","option"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAO,OACPC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAS,UACTC,IAAa,cA6BbC,IAAsC;AAAA,EAC1C,IAAIL;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAI;AAAA,EACJ,IAAIC;AAAA,EACJ,IAAIC;AACN,GAEaG,IAAgC,CAAC;AAAA,EAC5C,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBN,KAAQI,KAAiB,MAEzCG,IAASC,EAAA,GACTC,IAAYV,KAAQ,UAAUQ,CAAM,IAEpC,CAACG,GAAeC,CAAgB,IAAIC,EAA6Bf,CAAY,GAC7EgB,IAAejB,MAAU,SAAYA,IAAQc,GAC7CI,IAAelB,MAAU,QAEzBmB,IAAoCpB,EAAQ;AAAA,IAAI,CAACqB,MACrD,OAAOA,KAAQ,WAAW,EAAE,OAAOA,GAAK,OAAOA,MAAQA;AAAA,EAAA,GAGnDC,IAAe,CAACC,MAAqB;AACzC,IAAKJ,KACHH,EAAiBO,CAAQ,GAE3BpB,IAAWoB,CAAQ;AAAA,EACrB,GAEMC,IAAc,MAAM;AACxB,IAAKL,KACHH,EAAiB,MAAS,GAE5Bb,IAAW,MAAS;AAAA,EACtB,GAEMsB,IAAgB,CAACjC,GAAMM,EAAYa,CAAa,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC3Ee,IAAe,CAAClC,GAAMK,GAAYC,EAAYa,CAAa,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE5F,SACE,gBAAAgB,EAAC,QAAA,EAAK,WAAW,GAAGpC,CAAO,IAAIiB,CAAS,GAAG,KAAA,GAAQ,SAASgB,GACzD,UAAA;AAAA,IAAAlB,KACC,gBAAAsB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWF;AAAA,QACX,MAAK;AAAA,QACL,OAAO,OAAOnB,KAAe,WAAWA,IAAa;AAAA,QACrD,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGda,EAAkB,IAAI,CAACS,MACtB,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWH;AAAA,QACX,MAAK;AAAA,QACL,MAAMX;AAAA,QACN,OAAOe,EAAO;AAAA,QACd,cAAYA,EAAO;AAAA,QACnB,SAASX,MAAiBW,EAAO;AAAA,QACjC,UAAU,MAAMP,EAAaO,EAAO,KAAK;AAAA,QACzC,UAAUA,EAAO;AAAA,MAAA;AAAA,MARZA,EAAO;AAAA,IAAA,CAUf;AAAA,EAAA,GACH;AAEJ;"}
@@ -39,7 +39,16 @@ export interface FormRule {
39
39
  };
40
40
  message?: string;
41
41
  validate?: (value: any) => boolean | string | Promise<boolean | string>;
42
+ /** Ant Design style validator (for compatibility) */
43
+ validator?: (rule: any, value: any) => Promise<void>;
42
44
  }
45
+ /** Form methods passed to rule functions (Ant Design style) */
46
+ export interface FormRuleMethods {
47
+ getFieldValue: (name: string) => any;
48
+ getFieldsValue: () => any;
49
+ }
50
+ /** A rule can be an object or a function that returns a rule object */
51
+ export type FormRuleInput = FormRule | ((methods: FormRuleMethods) => FormRule);
43
52
  export type ValidateTrigger = 'onChange' | 'onBlur' | 'onSubmit' | ('onChange' | 'onBlur' | 'onSubmit')[];
44
53
  export interface FormItemProps {
45
54
  name?: string | string[];
@@ -48,7 +57,7 @@ export interface FormItemProps {
48
57
  floatingLabel?: string;
49
58
  help?: string;
50
59
  required?: boolean;
51
- rules?: FormRule | FormRule[];
60
+ rules?: FormRuleInput | FormRuleInput[];
52
61
  valuePropName?: string;
53
62
  inline?: boolean;
54
63
  className?: string;