asterui 0.12.58 → 0.12.60

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 (96) 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/Cascader.js +147 -146
  6. package/dist/components/Cascader.js.map +1 -1
  7. package/dist/components/Checkbox.js +1 -1
  8. package/dist/components/Checkbox.js.map +1 -1
  9. package/dist/components/ColorPicker.js +1 -1
  10. package/dist/components/ColorPicker.js.map +1 -1
  11. package/dist/components/ContextMenu.js +90 -89
  12. package/dist/components/ContextMenu.js.map +1 -1
  13. package/dist/components/CopyButton.js +1 -1
  14. package/dist/components/CopyButton.js.map +1 -1
  15. package/dist/components/Countdown.js +1 -1
  16. package/dist/components/Countdown.js.map +1 -1
  17. package/dist/components/DatePicker.js +1 -1
  18. package/dist/components/DatePicker.js.map +1 -1
  19. package/dist/components/Dock.js +1 -1
  20. package/dist/components/Dock.js.map +1 -1
  21. package/dist/components/Drawer.js +66 -65
  22. package/dist/components/Drawer.js.map +1 -1
  23. package/dist/components/Dropdown.js +174 -173
  24. package/dist/components/Dropdown.js.map +1 -1
  25. package/dist/components/Empty.js +1 -1
  26. package/dist/components/Empty.js.map +1 -1
  27. package/dist/components/FileInput.js +1 -1
  28. package/dist/components/FileInput.js.map +1 -1
  29. package/dist/components/Filter.js +1 -1
  30. package/dist/components/Filter.js.map +1 -1
  31. package/dist/components/Form.js +1 -1
  32. package/dist/components/Form.js.map +1 -1
  33. package/dist/components/Input.js +1 -1
  34. package/dist/components/Input.js.map +1 -1
  35. package/dist/components/InputNumber.js +1 -1
  36. package/dist/components/InputNumber.js.map +1 -1
  37. package/dist/components/List.js +1 -1
  38. package/dist/components/List.js.map +1 -1
  39. package/dist/components/Loading.js +1 -1
  40. package/dist/components/Loading.js.map +1 -1
  41. package/dist/components/Mention.js +66 -65
  42. package/dist/components/Mention.js.map +1 -1
  43. package/dist/components/Modal.js +1 -1
  44. package/dist/components/Modal.js.map +1 -1
  45. package/dist/components/OTPInput.js +1 -1
  46. package/dist/components/OTPInput.js.map +1 -1
  47. package/dist/components/Pagination.js +1 -1
  48. package/dist/components/Pagination.js.map +1 -1
  49. package/dist/components/Popconfirm.js +1 -1
  50. package/dist/components/Popconfirm.js.map +1 -1
  51. package/dist/components/Radio.js +1 -1
  52. package/dist/components/Radio.js.map +1 -1
  53. package/dist/components/Range.js +1 -1
  54. package/dist/components/Range.js.map +1 -1
  55. package/dist/components/Rating.js +1 -1
  56. package/dist/components/Rating.js.map +1 -1
  57. package/dist/components/RichTextEditor.js +1 -1
  58. package/dist/components/RichTextEditor.js.map +1 -1
  59. package/dist/components/Segmented.js +1 -1
  60. package/dist/components/Segmented.js.map +1 -1
  61. package/dist/components/Select.js +1 -1
  62. package/dist/components/Select.js.map +1 -1
  63. package/dist/components/Table.d.ts +19 -0
  64. package/dist/components/Table.js +348 -310
  65. package/dist/components/Table.js.map +1 -1
  66. package/dist/components/Tabs.js +1 -1
  67. package/dist/components/Tabs.js.map +1 -1
  68. package/dist/components/Textarea.js +1 -1
  69. package/dist/components/Textarea.js.map +1 -1
  70. package/dist/components/ThemeController.js +1 -1
  71. package/dist/components/ThemeController.js.map +1 -1
  72. package/dist/components/TimePicker.js +1 -1
  73. package/dist/components/TimePicker.js.map +1 -1
  74. package/dist/components/Toggle.js +1 -1
  75. package/dist/components/Toggle.js.map +1 -1
  76. package/dist/components/Tour.js +83 -82
  77. package/dist/components/Tour.js.map +1 -1
  78. package/dist/components/Transfer.js +107 -103
  79. package/dist/components/Transfer.js.map +1 -1
  80. package/dist/components/TreeSelect.js +245 -244
  81. package/dist/components/TreeSelect.js.map +1 -1
  82. package/dist/hooks/useTheme.d.ts +1 -1
  83. package/dist/hooks/useTheme.js +1 -1
  84. package/dist/hooks/useTheme.js.map +1 -1
  85. package/dist/index.d.ts +4 -4
  86. package/dist/index.js +2 -2
  87. package/dist/{components → providers}/ConfigProvider.d.ts +8 -0
  88. package/dist/providers/ConfigProvider.js +50 -0
  89. package/dist/providers/ConfigProvider.js.map +1 -0
  90. package/dist/providers/ThemeProvider.js.map +1 -0
  91. package/package.json +1 -1
  92. package/dist/components/ConfigProvider.js +0 -46
  93. package/dist/components/ConfigProvider.js.map +0 -1
  94. package/dist/components/ThemeProvider.js.map +0 -1
  95. /package/dist/{components → providers}/ThemeProvider.d.ts +0 -0
  96. /package/dist/{components → providers}/ThemeProvider.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TimePicker.js","sources":["../../src/components/TimePicker.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, forwardRef, useCallback, useId } from 'react'\nimport { Input } from './Input'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnPrimary = 'btn-primary'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnCircle = 'btn-circle'\nconst dInputError = 'input-error'\nconst dInputWarning = 'input-warning'\n\nexport interface TimePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n format?: '12' | '24'\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n showSeconds?: boolean\n allowClear?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n hourStep?: number\n minuteStep?: number\n secondStep?: number\n status?: 'error' | 'warning'\n 'data-testid'?: string\n}\n\nfunction formatTime(date: Date | null, format: '12' | '24' = '24', showSeconds: boolean = false): string {\n if (!date) return ''\n\n let hours = date.getHours()\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n\n if (format === '12') {\n const period = hours >= 12 ? 'PM' : 'AM'\n hours = hours % 12 || 12\n const timeStr = showSeconds\n ? `${hours}:${minutes}:${seconds} ${period}`\n : `${hours}:${minutes} ${period}`\n return timeStr\n }\n\n const hoursStr = String(hours).padStart(2, '0')\n return showSeconds ? `${hoursStr}:${minutes}:${seconds}` : `${hoursStr}:${minutes}`\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(({\n value,\n defaultValue,\n onChange,\n format = '24',\n placeholder = 'Select time',\n disabled = false,\n className,\n size,\n showSeconds = false,\n allowClear = true,\n open: controlledOpen,\n onOpenChange,\n hourStep = 1,\n minuteStep = 1,\n secondStep = 1,\n status,\n 'data-testid': testId,\n ...rest\n}, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [selectedTime, setSelectedTime] = useState<Date | null>(\n value !== undefined ? value : defaultValue || null\n )\n const [internalOpen, setInternalOpen] = useState(false)\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen\n const [hours, setHours] = useState(selectedTime ? selectedTime.getHours() : 0)\n const [minutes, setMinutes] = useState(selectedTime ? selectedTime.getMinutes() : 0)\n const [seconds, setSeconds] = useState(selectedTime ? selectedTime.getSeconds() : 0)\n const [period, setPeriod] = useState<'AM' | 'PM'>(\n selectedTime && selectedTime.getHours() >= 12 ? 'PM' : 'AM'\n )\n const [focusedColumn, setFocusedColumn] = useState<'hour' | 'minute' | 'second' | 'period'>('hour')\n\n const containerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const uniqueId = useId()\n const baseTestId = testId || 'timepicker'\n\n useEffect(() => {\n if (value !== undefined) {\n setSelectedTime(value)\n if (value) {\n setHours(value.getHours())\n setMinutes(value.getMinutes())\n setSeconds(value.getSeconds())\n setPeriod(value.getHours() >= 12 ? 'PM' : 'AM')\n }\n }\n }, [value])\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [controlledOpen, onOpenChange])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setOpen])\n\n // Focus trap and keyboard navigation\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false)\n return\n }\n\n if (e.key === 'Tab') {\n // Allow tab to cycle through columns\n return\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n const delta = e.key === 'ArrowUp' ? -1 : 1\n\n if (focusedColumn === 'hour') {\n const maxHour = format === '12' ? 12 : 23\n const minHour = format === '12' ? 1 : 0\n let newHour = hours + (delta * hourStep)\n if (newHour > maxHour) newHour = minHour\n if (newHour < minHour) newHour = maxHour\n handleHourChange(newHour)\n } else if (focusedColumn === 'minute') {\n let newMinute = minutes + (delta * minuteStep)\n if (newMinute > 59) newMinute = 0\n if (newMinute < 0) newMinute = 59\n handleMinuteChange(newMinute)\n } else if (focusedColumn === 'second') {\n let newSecond = seconds + (delta * secondStep)\n if (newSecond > 59) newSecond = 0\n if (newSecond < 0) newSecond = 59\n handleSecondChange(newSecond)\n } else if (focusedColumn === 'period') {\n handlePeriodChange(period === 'AM' ? 'PM' : 'AM')\n }\n }\n\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const columns: Array<'hour' | 'minute' | 'second' | 'period'> = ['hour', 'minute']\n if (showSeconds) columns.push('second')\n if (format === '12') columns.push('period')\n\n const currentIndex = columns.indexOf(focusedColumn)\n const delta = e.key === 'ArrowLeft' ? -1 : 1\n let newIndex = currentIndex + delta\n if (newIndex < 0) newIndex = columns.length - 1\n if (newIndex >= columns.length) newIndex = 0\n setFocusedColumn(columns[newIndex])\n }\n\n if (e.key === 'Enter') {\n setOpen(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [isOpen, focusedColumn, hours, minutes, seconds, period, format, showSeconds, hourStep, minuteStep, secondStep, setOpen])\n\n const handleClear = useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n setSelectedTime(null)\n setHours(0)\n setMinutes(0)\n setSeconds(0)\n setPeriod('AM')\n onChange?.(null)\n }, [onChange])\n\n const handleTimeChange = (newHours: number, newMinutes: number, newSeconds: number) => {\n const now = new Date()\n const newTime = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n newHours,\n newMinutes,\n newSeconds\n )\n setSelectedTime(newTime)\n onChange?.(newTime)\n }\n\n const handleHourChange = (newHour: number) => {\n let actualHour = newHour\n if (format === '12') {\n actualHour = period === 'PM' ? (newHour % 12) + 12 : newHour % 12\n }\n setHours(actualHour)\n handleTimeChange(actualHour, minutes, seconds)\n }\n\n const handleMinuteChange = (newMinute: number) => {\n setMinutes(newMinute)\n handleTimeChange(hours, newMinute, seconds)\n }\n\n const handleSecondChange = (newSecond: number) => {\n setSeconds(newSecond)\n handleTimeChange(hours, minutes, newSecond)\n }\n\n const handlePeriodChange = (newPeriod: 'AM' | 'PM') => {\n setPeriod(newPeriod)\n const newHours = newPeriod === 'PM'\n ? (hours % 12) + 12\n : hours % 12\n setHours(newHours)\n handleTimeChange(newHours, minutes, seconds)\n }\n\n const renderTimeColumn = (\n columnType: 'hour' | 'minute' | 'second',\n label: string,\n maxValue: number,\n currentValue: number,\n onChangeValue: (value: number) => void,\n step: number = 1,\n start: number = 0\n ) => {\n const items: number[] = []\n for (let i = start; i <= maxValue; i += step) {\n items.push(i)\n }\n const listboxId = `${uniqueId}-${columnType}-listbox`\n const isFocused = focusedColumn === columnType\n\n return (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label={`Select ${label.toLowerCase()}`}\n id={listboxId}\n data-testid={`${baseTestId}-${columnType}-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn(columnType)}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n {label}\n </div>\n <div className=\"overflow-y-auto max-h-48\">\n {items.map((item) => {\n const isSelected = currentValue === item\n return (\n <button\n key={item}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => onChangeValue(item)}\n data-testid={`${baseTestId}-${columnType}-${item}`}\n className={[\n 'w-full px-4 py-2 text-center hover:bg-base-200 transition-colors',\n isSelected ? 'bg-primary text-primary-content' : '',\n isFocused && isSelected ? 'ring-2 ring-primary ring-offset-1' : ''\n ].filter(Boolean).join(' ')}\n >\n {String(item).padStart(2, '0')}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayHours = format === '12' ? (hours % 12 || 12) : hours\n\n const statusClasses = {\n error: dInputError,\n warning: dInputWarning,\n }\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={['relative', className].filter(Boolean).join(' ')}\n data-testid={baseTestId}\n data-state={isOpen ? 'open' : 'closed'}\n {...rest}\n >\n <div className=\"relative\">\n <Input\n value={formatTime(selectedTime, format, showSeconds)}\n placeholder={placeholder}\n disabled={disabled}\n size={effectiveSize}\n readOnly\n onClick={() => !disabled && setOpen(!isOpen)}\n className={['cursor-pointer pr-8', status ? statusClasses[status] : ''].filter(Boolean).join(' ')}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? `${uniqueId}-dropdown` : undefined}\n data-testid={`${baseTestId}-input`}\n />\n {allowClear && selectedTime && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={`absolute right-2 top-1/2 -translate-y-1/2 ${dBtn} ${dBtnGhost} ${dBtnXs} ${dBtnCircle}`}\n aria-label=\"Clear time\"\n data-testid={`${baseTestId}-clear`}\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n\n {isOpen && (\n <div\n ref={dropdownRef}\n id={`${uniqueId}-dropdown`}\n className=\"absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-xl z-[9999] w-fit\"\n role=\"dialog\"\n aria-label=\"Time picker\"\n data-testid={`${baseTestId}-dropdown`}\n >\n <div className=\"flex divide-x divide-base-300\">\n {renderTimeColumn(\n 'hour',\n 'Hour',\n format === '12' ? 12 : 23,\n displayHours,\n handleHourChange,\n hourStep,\n format === '12' ? 1 : 0\n )}\n\n {renderTimeColumn('minute', 'Min', 59, minutes, handleMinuteChange, minuteStep)}\n\n {showSeconds && renderTimeColumn('second', 'Sec', 59, seconds, handleSecondChange, secondStep)}\n\n {format === '12' && (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label=\"Select period\"\n data-testid={`${baseTestId}-period-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn('period')}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n Period\n </div>\n <div className=\"flex flex-col p-2 gap-2\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'AM'}\n onClick={() => handlePeriodChange('AM')}\n data-testid={`${baseTestId}-period-am`}\n className={[\n dBtn, dBtnSm,\n period === 'AM' ? dBtnPrimary : dBtnGhost\n ].join(' ')}\n >\n AM\n </button>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'PM'}\n onClick={() => handlePeriodChange('PM')}\n data-testid={`${baseTestId}-period-pm`}\n className={[\n dBtn, dBtnSm,\n period === 'PM' ? dBtnPrimary : dBtnGhost\n ].join(' ')}\n >\n PM\n </button>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"flex justify-end gap-2 p-3 border-t border-base-300\">\n <button\n type=\"button\"\n onClick={() => {\n const now = new Date()\n setHours(now.getHours())\n setMinutes(now.getMinutes())\n setSeconds(now.getSeconds())\n setPeriod(now.getHours() >= 12 ? 'PM' : 'AM')\n handleTimeChange(now.getHours(), now.getMinutes(), now.getSeconds())\n }}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm}`}\n data-testid={`${baseTestId}-now`}\n >\n Now\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className={`${dBtn} ${dBtnPrimary} ${dBtnSm}`}\n data-testid={`${baseTestId}-ok`}\n >\n OK\n </button>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nTimePicker.displayName = 'TimePicker'\n"],"names":["dBtn","dBtnGhost","dBtnPrimary","dBtnXs","dBtnSm","dBtnCircle","dInputError","dInputWarning","formatTime","date","format","showSeconds","hours","minutes","seconds","period","hoursStr","TimePicker","forwardRef","value","defaultValue","onChange","placeholder","disabled","className","size","allowClear","controlledOpen","onOpenChange","hourStep","minuteStep","secondStep","status","testId","rest","ref","componentSize","useConfig","effectiveSize","selectedTime","setSelectedTime","useState","internalOpen","setInternalOpen","isOpen","setHours","setMinutes","setSeconds","setPeriod","focusedColumn","setFocusedColumn","containerRef","useRef","dropdownRef","uniqueId","useId","baseTestId","useEffect","setOpen","useCallback","newOpen","handleClickOutside","event","handleKeyDown","e","delta","maxHour","minHour","newHour","handleHourChange","newMinute","handleMinuteChange","newSecond","handleSecondChange","handlePeriodChange","columns","currentIndex","newIndex","handleClear","handleTimeChange","newHours","newMinutes","newSeconds","now","newTime","actualHour","newPeriod","renderTimeColumn","columnType","label","maxValue","currentValue","onChangeValue","step","start","items","i","listboxId","isFocused","jsxs","jsx","item","isSelected","displayHours","statusClasses","node","Input"],"mappings":";;;;AAKA,MAAMA,IAAO,OACPC,IAAY,aACZC,IAAc,eACdC,KAAS,UACTC,IAAS,UACTC,KAAa,cACbC,KAAc,eACdC,KAAgB;AAqBtB,SAASC,GAAWC,GAAmBC,IAAsB,MAAMC,IAAuB,IAAe;AACvG,MAAI,CAACF,EAAM,QAAO;AAElB,MAAIG,IAAQH,EAAK,SAAA;AACjB,QAAMI,IAAU,OAAOJ,EAAK,WAAA,CAAY,EAAE,SAAS,GAAG,GAAG,GACnDK,IAAU,OAAOL,EAAK,WAAA,CAAY,EAAE,SAAS,GAAG,GAAG;AAEzD,MAAIC,MAAW,MAAM;AACnB,UAAMK,IAASH,KAAS,KAAK,OAAO;AACpC,WAAAA,IAAQA,IAAQ,MAAM,IACND,IACZ,GAAGC,CAAK,IAAIC,CAAO,IAAIC,CAAO,IAAIC,CAAM,KACxC,GAAGH,CAAK,IAAIC,CAAO,IAAIE,CAAM;AAAA,EAEnC;AAEA,QAAMC,IAAW,OAAOJ,CAAK,EAAE,SAAS,GAAG,GAAG;AAC9C,SAAOD,IAAc,GAAGK,CAAQ,IAAIH,CAAO,IAAIC,CAAO,KAAK,GAAGE,CAAQ,IAAIH,CAAO;AACnF;AAEO,MAAMI,KAAaC,GAA4C,CAAC;AAAA,EACrE,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAX,IAAS;AAAA,EACT,aAAAY,IAAc;AAAA,EACd,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAd,IAAc;AAAA,EACd,YAAAe,KAAa;AAAA,EACb,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,YAAAC,IAAa;AAAA,EACb,QAAAC;AAAA,EACA,eAAeC;AAAA,EACf,GAAGC;AACL,GAAGC,MAAQ;AACT,QAAM,EAAE,eAAAC,GAAA,IAAkBC,GAAA,GACpBC,KAAgBb,KAAQW,MAAiB,MACzC,CAACG,GAAcC,CAAe,IAAIC;AAAA,IACtCtB,MAAU,SAAYA,IAAQC,KAAgB;AAAA,EAAA,GAE1C,CAACsB,IAAcC,EAAe,IAAIF,EAAS,EAAK,GAChDG,IAASjB,MAAmB,SAAYA,IAAiBe,IACzD,CAAC9B,GAAOiC,CAAQ,IAAIJ,EAASF,IAAeA,EAAa,SAAA,IAAa,CAAC,GACvE,CAAC1B,GAASiC,CAAU,IAAIL,EAASF,IAAeA,EAAa,WAAA,IAAe,CAAC,GAC7E,CAACzB,GAASiC,CAAU,IAAIN,EAASF,IAAeA,EAAa,WAAA,IAAe,CAAC,GAC7E,CAACxB,GAAQiC,CAAS,IAAIP;AAAA,IAC1BF,KAAgBA,EAAa,cAAc,KAAK,OAAO;AAAA,EAAA,GAEnD,CAACU,GAAeC,CAAgB,IAAIT,EAAkD,MAAM,GAE5FU,IAAeC,GAAuB,IAAI,GAC1CC,KAAcD,GAAuB,IAAI,GACzCE,IAAWC,GAAA,GACXC,IAAavB,MAAU;AAE7B,EAAAwB,EAAU,MAAM;AACd,IAAItC,MAAU,WACZqB,EAAgBrB,CAAK,GACjBA,MACF0B,EAAS1B,EAAM,UAAU,GACzB2B,EAAW3B,EAAM,YAAY,GAC7B4B,EAAW5B,EAAM,YAAY,GAC7B6B,EAAU7B,EAAM,SAAA,KAAc,KAAK,OAAO,IAAI;AAAA,EAGpD,GAAG,CAACA,CAAK,CAAC;AAEV,QAAMuC,IAAUC,GAAY,CAACC,MAAqB;AAChD,IAAIjC,MAAmB,UACrBgB,GAAgBiB,CAAO,GAEzBhC,IAAegC,CAAO;AAAA,EACxB,GAAG,CAACjC,GAAgBC,CAAY,CAAC;AAEjC,EAAA6B,EAAU,MAAM;AACd,aAASI,EAAmBC,GAAmB;AAC7C,MAAIX,EAAa,WAAW,CAACA,EAAa,QAAQ,SAASW,EAAM,MAAc,KAC7EJ,EAAQ,EAAK;AAAA,IAEjB;AAEA,QAAId;AACF,sBAAS,iBAAiB,aAAaiB,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAE7E,GAAG,CAACjB,GAAQc,CAAO,CAAC,GAGpBD,EAAU,MAAM;AACd,QAAI,CAACb,EAAQ;AAEb,UAAMmB,IAAgB,CAACC,MAAqB;AAC1C,UAAIA,EAAE,QAAQ,UAAU;AACtB,QAAAN,EAAQ,EAAK;AACb;AAAA,MACF;AAEA,UAAIM,EAAE,QAAQ,OAKd;AAAA,YAAIA,EAAE,QAAQ,aAAaA,EAAE,QAAQ,aAAa;AAChD,UAAAA,EAAE,eAAA;AACF,gBAAMC,IAAQD,EAAE,QAAQ,YAAY,KAAK;AAEzC,cAAIf,MAAkB,QAAQ;AAC5B,kBAAMiB,IAAUxD,MAAW,OAAO,KAAK,IACjCyD,IAAUzD,MAAW,OAAO,IAAI;AACtC,gBAAI0D,IAAUxD,IAASqD,IAAQpC;AAC/B,YAAIuC,IAAUF,MAASE,IAAUD,IAC7BC,IAAUD,MAASC,IAAUF,IACjCG,EAAiBD,CAAO;AAAA,UAC1B,WAAWnB,MAAkB,UAAU;AACrC,gBAAIqB,IAAYzD,IAAWoD,IAAQnC;AACnC,YAAIwC,IAAY,OAAIA,IAAY,IAC5BA,IAAY,MAAGA,IAAY,KAC/BC,EAAmBD,CAAS;AAAA,UAC9B,WAAWrB,MAAkB,UAAU;AACrC,gBAAIuB,IAAY1D,IAAWmD,IAAQlC;AACnC,YAAIyC,IAAY,OAAIA,IAAY,IAC5BA,IAAY,MAAGA,IAAY,KAC/BC,GAAmBD,CAAS;AAAA,UAC9B,MAAA,CAAWvB,MAAkB,YAC3ByB,EAAmB3D,MAAW,OAAO,OAAO,IAAI;AAAA,QAEpD;AAEA,YAAIiD,EAAE,QAAQ,eAAeA,EAAE,QAAQ,cAAc;AACnD,UAAAA,EAAE,eAAA;AACF,gBAAMW,IAA0D,CAAC,QAAQ,QAAQ;AACjF,UAAIhE,KAAagE,EAAQ,KAAK,QAAQ,GAClCjE,MAAW,QAAMiE,EAAQ,KAAK,QAAQ;AAE1C,gBAAMC,IAAeD,EAAQ,QAAQ1B,CAAa,GAC5CgB,IAAQD,EAAE,QAAQ,cAAc,KAAK;AAC3C,cAAIa,IAAWD,IAAeX;AAC9B,UAAIY,IAAW,MAAGA,IAAWF,EAAQ,SAAS,IAC1CE,KAAYF,EAAQ,WAAQE,IAAW,IAC3C3B,EAAiByB,EAAQE,CAAQ,CAAC;AAAA,QACpC;AAEA,QAAIb,EAAE,QAAQ,WACZN,EAAQ,EAAK;AAAA;AAAA,IAEjB;AAEA,oBAAS,iBAAiB,WAAWK,CAAa,GAC3C,MAAM,SAAS,oBAAoB,WAAWA,CAAa;AAAA,EACpE,GAAG,CAACnB,GAAQK,GAAerC,GAAOC,GAASC,GAASC,GAAQL,GAAQC,GAAakB,GAAUC,GAAYC,GAAY2B,CAAO,CAAC;AAE3H,QAAMoB,KAAcnB,GAAY,CAAC,MAAwB;AACvD,MAAE,gBAAA,GACFnB,EAAgB,IAAI,GACpBK,EAAS,CAAC,GACVC,EAAW,CAAC,GACZC,EAAW,CAAC,GACZC,EAAU,IAAI,GACd3B,IAAW,IAAI;AAAA,EACjB,GAAG,CAACA,CAAQ,CAAC,GAEP0D,IAAmB,CAACC,GAAkBC,GAAoBC,MAAuB;AACrF,UAAMC,wBAAU,KAAA,GACVC,IAAU,IAAI;AAAA,MAClBD,EAAI,YAAA;AAAA,MACJA,EAAI,SAAA;AAAA,MACJA,EAAI,QAAA;AAAA,MACJH;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAEF,IAAA1C,EAAgB4C,CAAO,GACvB/D,IAAW+D,CAAO;AAAA,EACpB,GAEMf,IAAmB,CAACD,MAAoB;AAC5C,QAAIiB,IAAajB;AACjB,IAAI1D,MAAW,SACb2E,IAAatE,MAAW,OAAQqD,IAAU,KAAM,KAAKA,IAAU,KAEjEvB,EAASwC,CAAU,GACnBN,EAAiBM,GAAYxE,GAASC,CAAO;AAAA,EAC/C,GAEMyD,IAAqB,CAACD,MAAsB;AAChD,IAAAxB,EAAWwB,CAAS,GACpBS,EAAiBnE,GAAO0D,GAAWxD,CAAO;AAAA,EAC5C,GAEM2D,KAAqB,CAACD,MAAsB;AAChD,IAAAzB,EAAWyB,CAAS,GACpBO,EAAiBnE,GAAOC,GAAS2D,CAAS;AAAA,EAC5C,GAEME,IAAqB,CAACY,MAA2B;AACrD,IAAAtC,EAAUsC,CAAS;AACnB,UAAMN,IAAWM,MAAc,OAC1B1E,IAAQ,KAAM,KACfA,IAAQ;AACZ,IAAAiC,EAASmC,CAAQ,GACjBD,EAAiBC,GAAUnE,GAASC,CAAO;AAAA,EAC7C,GAEMyE,IAAmB,CACvBC,GACAC,GACAC,GACAC,GACAC,GACAC,IAAe,GACfC,KAAgB,MACb;AACH,UAAMC,KAAkB,CAAA;AACxB,aAASC,IAAIF,IAAOE,KAAKN,GAAUM,KAAKH;AACtC,MAAAE,GAAM,KAAKC,CAAC;AAEd,UAAMC,KAAY,GAAG3C,CAAQ,IAAIkC,CAAU,YACrCU,KAAYjD,MAAkBuC;AAEpC,WACE,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,cAAY,UAAUV,EAAM,YAAA,CAAa;AAAA,QACzC,IAAIQ;AAAA,QACJ,eAAa,GAAGzC,CAAU,IAAIgC,CAAU;AAAA,QACxC,UAAU;AAAA,QACV,SAAS,MAAMtC,EAAiBsC,CAAU;AAAA,QAE1C,UAAA;AAAA,UAAA,gBAAAY,EAAC,OAAA,EAAI,WAAU,+DAA8D,eAAY,QACtF,UAAAX,GACH;AAAA,4BACC,OAAA,EAAI,WAAU,4BACZ,UAAAM,GAAM,IAAI,CAACM,MAAS;AACnB,kBAAMC,IAAaX,MAAiBU;AACpC,mBACE,gBAAAD;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,iBAAeE;AAAA,gBACf,SAAS,MAAMV,EAAcS,CAAI;AAAA,gBACjC,eAAa,GAAG7C,CAAU,IAAIgC,CAAU,IAAIa,CAAI;AAAA,gBAChD,WAAW;AAAA,kBACT;AAAA,kBACAC,IAAa,oCAAoC;AAAA,kBACjDJ,MAAaI,IAAa,sCAAsC;AAAA,gBAAA,EAChE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,gBAEzB,UAAA,OAAOD,CAAI,EAAE,SAAS,GAAG,GAAG;AAAA,cAAA;AAAA,cAZxBA;AAAA,YAAA;AAAA,UAeX,CAAC,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN,GAEME,KAAe7F,MAAW,OAAQE,IAAQ,MAAM,KAAMA,GAEtD4F,KAAgB;AAAA,IACpB,OAAOlG;AAAA,IACP,SAASC;AAAA,EAAA;AAGX,SACE,gBAAA4F;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK,CAACM,MAAS;AACb,QAAAtD,EAAa,UAAUsD,GACnB,OAAOtE,KAAQ,aAAYA,EAAIsE,CAAI,IAC9BtE,QAAS,UAAUsE;AAAA,MAC9B;AAAA,MACA,WAAW,CAAC,YAAYjF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC3D,eAAagC;AAAA,MACb,cAAYZ,IAAS,SAAS;AAAA,MAC7B,GAAGV;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAiE,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACM;AAAA,YAAA;AAAA,cACC,OAAOlG,GAAW+B,GAAc7B,GAAQC,CAAW;AAAA,cACnD,aAAAW;AAAA,cACA,UAAAC;AAAA,cACA,MAAMe;AAAA,cACN,UAAQ;AAAA,cACR,SAAS,MAAM,CAACf,KAAYmC,EAAQ,CAACd,CAAM;AAAA,cAC3C,WAAW,CAAC,uBAAuBZ,IAASwE,GAAcxE,CAAM,IAAI,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,cAChG,iBAAc;AAAA,cACd,iBAAeY;AAAA,cACf,iBAAeA,IAAS,GAAGU,CAAQ,cAAc;AAAA,cACjD,eAAa,GAAGE,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAE3B9B,MAAca,KAAgB,CAAChB,KAC9B,gBAAA6E;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAStB;AAAA,cACT,WAAW,6CAA6C9E,CAAI,IAAIC,CAAS,IAAIE,EAAM,IAAIE,EAAU;AAAA,cACjG,cAAW;AAAA,cACX,eAAa,GAAGmD,CAAU;AAAA,cAE1B,UAAA,gBAAA4C,EAAC,SAAI,WAAU,WAAU,MAAK,QAAO,SAAQ,aAAY,QAAO,gBAC9D,4BAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,wBAAuB,EAAA,CAC9F;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GAEJ;AAAA,QAECxD,KACC,gBAAAuD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK9C;AAAA,YACL,IAAI,GAAGC,CAAQ;AAAA,YACf,WAAU;AAAA,YACV,MAAK;AAAA,YACL,cAAW;AAAA,YACX,eAAa,GAAGE,CAAU;AAAA,YAE1B,UAAA;AAAA,cAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,iCACZ,UAAA;AAAA,gBAAAZ;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA7E,MAAW,OAAO,KAAK;AAAA,kBACvB6F;AAAA,kBACAlC;AAAA,kBACAxC;AAAA,kBACAnB,MAAW,OAAO,IAAI;AAAA,gBAAA;AAAA,gBAGvB6E,EAAiB,UAAU,OAAO,IAAI1E,GAAS0D,GAAoBzC,CAAU;AAAA,gBAE7EnB,KAAe4E,EAAiB,UAAU,OAAO,IAAIzE,GAAS2D,IAAoB1C,CAAU;AAAA,gBAE5FrB,MAAW,QACV,gBAAAyF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,cAAW;AAAA,oBACX,eAAa,GAAG3C,CAAU;AAAA,oBAC1B,UAAU;AAAA,oBACV,SAAS,MAAMN,EAAiB,QAAQ;AAAA,oBAExC,UAAA;AAAA,sBAAA,gBAAAkD,EAAC,OAAA,EAAI,WAAU,+DAA8D,eAAY,QAAO,UAAA,UAEhG;AAAA,sBACA,gBAAAD,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,wBAAA,gBAAAC;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,MAAK;AAAA,4BACL,iBAAerF,MAAW;AAAA,4BAC1B,SAAS,MAAM2D,EAAmB,IAAI;AAAA,4BACtC,eAAa,GAAGlB,CAAU;AAAA,4BAC1B,WAAW;AAAA,8BACTxD;AAAA,8BAAMI;AAAA,8BACNW,MAAW,OAAOb,IAAcD;AAAA,4BAAA,EAChC,KAAK,GAAG;AAAA,4BACX,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGD,gBAAAmG;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,MAAK;AAAA,4BACL,iBAAerF,MAAW;AAAA,4BAC1B,SAAS,MAAM2D,EAAmB,IAAI;AAAA,4BACtC,eAAa,GAAGlB,CAAU;AAAA,4BAC1B,WAAW;AAAA,8BACTxD;AAAA,8BAAMI;AAAA,8BACNW,MAAW,OAAOb,IAAcD;AAAA,4BAAA,EAChC,KAAK,GAAG;AAAA,4BACX,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED,EAAA,CACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF,GAEJ;AAAA,cAEA,gBAAAkG,EAAC,OAAA,EAAI,WAAU,uDACb,UAAA;AAAA,gBAAA,gBAAAC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS,MAAM;AACb,4BAAMjB,wBAAU,KAAA;AAChB,sBAAAtC,EAASsC,EAAI,UAAU,GACvBrC,EAAWqC,EAAI,YAAY,GAC3BpC,EAAWoC,EAAI,YAAY,GAC3BnC,EAAUmC,EAAI,SAAA,KAAc,KAAK,OAAO,IAAI,GAC5CJ,EAAiBI,EAAI,YAAYA,EAAI,cAAcA,EAAI,YAAY;AAAA,oBACrE;AAAA,oBACA,WAAW,GAAGnF,CAAI,IAAIC,CAAS,IAAIG,CAAM;AAAA,oBACzC,eAAa,GAAGoD,CAAU;AAAA,oBAC3B,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAA4C;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS,MAAM1C,EAAQ,EAAK;AAAA,oBAC5B,WAAW,GAAG1D,CAAI,IAAIE,CAAW,IAAIE,CAAM;AAAA,oBAC3C,eAAa,GAAGoD,CAAU;AAAA,oBAC3B,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDvC,GAAW,cAAc;"}
1
+ {"version":3,"file":"TimePicker.js","sources":["../../src/components/TimePicker.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, forwardRef, useCallback, useId } from 'react'\nimport { Input } from './Input'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnPrimary = 'btn-primary'\nconst dBtnXs = 'btn-xs'\nconst dBtnSm = 'btn-sm'\nconst dBtnCircle = 'btn-circle'\nconst dInputError = 'input-error'\nconst dInputWarning = 'input-warning'\n\nexport interface TimePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n format?: '12' | '24'\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n showSeconds?: boolean\n allowClear?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n hourStep?: number\n minuteStep?: number\n secondStep?: number\n status?: 'error' | 'warning'\n 'data-testid'?: string\n}\n\nfunction formatTime(date: Date | null, format: '12' | '24' = '24', showSeconds: boolean = false): string {\n if (!date) return ''\n\n let hours = date.getHours()\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n\n if (format === '12') {\n const period = hours >= 12 ? 'PM' : 'AM'\n hours = hours % 12 || 12\n const timeStr = showSeconds\n ? `${hours}:${minutes}:${seconds} ${period}`\n : `${hours}:${minutes} ${period}`\n return timeStr\n }\n\n const hoursStr = String(hours).padStart(2, '0')\n return showSeconds ? `${hoursStr}:${minutes}:${seconds}` : `${hoursStr}:${minutes}`\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(({\n value,\n defaultValue,\n onChange,\n format = '24',\n placeholder = 'Select time',\n disabled = false,\n className,\n size,\n showSeconds = false,\n allowClear = true,\n open: controlledOpen,\n onOpenChange,\n hourStep = 1,\n minuteStep = 1,\n secondStep = 1,\n status,\n 'data-testid': testId,\n ...rest\n}, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [selectedTime, setSelectedTime] = useState<Date | null>(\n value !== undefined ? value : defaultValue || null\n )\n const [internalOpen, setInternalOpen] = useState(false)\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen\n const [hours, setHours] = useState(selectedTime ? selectedTime.getHours() : 0)\n const [minutes, setMinutes] = useState(selectedTime ? selectedTime.getMinutes() : 0)\n const [seconds, setSeconds] = useState(selectedTime ? selectedTime.getSeconds() : 0)\n const [period, setPeriod] = useState<'AM' | 'PM'>(\n selectedTime && selectedTime.getHours() >= 12 ? 'PM' : 'AM'\n )\n const [focusedColumn, setFocusedColumn] = useState<'hour' | 'minute' | 'second' | 'period'>('hour')\n\n const containerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const uniqueId = useId()\n const baseTestId = testId || 'timepicker'\n\n useEffect(() => {\n if (value !== undefined) {\n setSelectedTime(value)\n if (value) {\n setHours(value.getHours())\n setMinutes(value.getMinutes())\n setSeconds(value.getSeconds())\n setPeriod(value.getHours() >= 12 ? 'PM' : 'AM')\n }\n }\n }, [value])\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [controlledOpen, onOpenChange])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setOpen])\n\n // Focus trap and keyboard navigation\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false)\n return\n }\n\n if (e.key === 'Tab') {\n // Allow tab to cycle through columns\n return\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n const delta = e.key === 'ArrowUp' ? -1 : 1\n\n if (focusedColumn === 'hour') {\n const maxHour = format === '12' ? 12 : 23\n const minHour = format === '12' ? 1 : 0\n let newHour = hours + (delta * hourStep)\n if (newHour > maxHour) newHour = minHour\n if (newHour < minHour) newHour = maxHour\n handleHourChange(newHour)\n } else if (focusedColumn === 'minute') {\n let newMinute = minutes + (delta * minuteStep)\n if (newMinute > 59) newMinute = 0\n if (newMinute < 0) newMinute = 59\n handleMinuteChange(newMinute)\n } else if (focusedColumn === 'second') {\n let newSecond = seconds + (delta * secondStep)\n if (newSecond > 59) newSecond = 0\n if (newSecond < 0) newSecond = 59\n handleSecondChange(newSecond)\n } else if (focusedColumn === 'period') {\n handlePeriodChange(period === 'AM' ? 'PM' : 'AM')\n }\n }\n\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const columns: Array<'hour' | 'minute' | 'second' | 'period'> = ['hour', 'minute']\n if (showSeconds) columns.push('second')\n if (format === '12') columns.push('period')\n\n const currentIndex = columns.indexOf(focusedColumn)\n const delta = e.key === 'ArrowLeft' ? -1 : 1\n let newIndex = currentIndex + delta\n if (newIndex < 0) newIndex = columns.length - 1\n if (newIndex >= columns.length) newIndex = 0\n setFocusedColumn(columns[newIndex])\n }\n\n if (e.key === 'Enter') {\n setOpen(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [isOpen, focusedColumn, hours, minutes, seconds, period, format, showSeconds, hourStep, minuteStep, secondStep, setOpen])\n\n const handleClear = useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n setSelectedTime(null)\n setHours(0)\n setMinutes(0)\n setSeconds(0)\n setPeriod('AM')\n onChange?.(null)\n }, [onChange])\n\n const handleTimeChange = (newHours: number, newMinutes: number, newSeconds: number) => {\n const now = new Date()\n const newTime = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n newHours,\n newMinutes,\n newSeconds\n )\n setSelectedTime(newTime)\n onChange?.(newTime)\n }\n\n const handleHourChange = (newHour: number) => {\n let actualHour = newHour\n if (format === '12') {\n actualHour = period === 'PM' ? (newHour % 12) + 12 : newHour % 12\n }\n setHours(actualHour)\n handleTimeChange(actualHour, minutes, seconds)\n }\n\n const handleMinuteChange = (newMinute: number) => {\n setMinutes(newMinute)\n handleTimeChange(hours, newMinute, seconds)\n }\n\n const handleSecondChange = (newSecond: number) => {\n setSeconds(newSecond)\n handleTimeChange(hours, minutes, newSecond)\n }\n\n const handlePeriodChange = (newPeriod: 'AM' | 'PM') => {\n setPeriod(newPeriod)\n const newHours = newPeriod === 'PM'\n ? (hours % 12) + 12\n : hours % 12\n setHours(newHours)\n handleTimeChange(newHours, minutes, seconds)\n }\n\n const renderTimeColumn = (\n columnType: 'hour' | 'minute' | 'second',\n label: string,\n maxValue: number,\n currentValue: number,\n onChangeValue: (value: number) => void,\n step: number = 1,\n start: number = 0\n ) => {\n const items: number[] = []\n for (let i = start; i <= maxValue; i += step) {\n items.push(i)\n }\n const listboxId = `${uniqueId}-${columnType}-listbox`\n const isFocused = focusedColumn === columnType\n\n return (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label={`Select ${label.toLowerCase()}`}\n id={listboxId}\n data-testid={`${baseTestId}-${columnType}-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn(columnType)}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n {label}\n </div>\n <div className=\"overflow-y-auto max-h-48\">\n {items.map((item) => {\n const isSelected = currentValue === item\n return (\n <button\n key={item}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => onChangeValue(item)}\n data-testid={`${baseTestId}-${columnType}-${item}`}\n className={[\n 'w-full px-4 py-2 text-center hover:bg-base-200 transition-colors',\n isSelected ? 'bg-primary text-primary-content' : '',\n isFocused && isSelected ? 'ring-2 ring-primary ring-offset-1' : ''\n ].filter(Boolean).join(' ')}\n >\n {String(item).padStart(2, '0')}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayHours = format === '12' ? (hours % 12 || 12) : hours\n\n const statusClasses = {\n error: dInputError,\n warning: dInputWarning,\n }\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={['relative', className].filter(Boolean).join(' ')}\n data-testid={baseTestId}\n data-state={isOpen ? 'open' : 'closed'}\n {...rest}\n >\n <div className=\"relative\">\n <Input\n value={formatTime(selectedTime, format, showSeconds)}\n placeholder={placeholder}\n disabled={disabled}\n size={effectiveSize}\n readOnly\n onClick={() => !disabled && setOpen(!isOpen)}\n className={['cursor-pointer pr-8', status ? statusClasses[status] : ''].filter(Boolean).join(' ')}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? `${uniqueId}-dropdown` : undefined}\n data-testid={`${baseTestId}-input`}\n />\n {allowClear && selectedTime && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={`absolute right-2 top-1/2 -translate-y-1/2 ${dBtn} ${dBtnGhost} ${dBtnXs} ${dBtnCircle}`}\n aria-label=\"Clear time\"\n data-testid={`${baseTestId}-clear`}\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n\n {isOpen && (\n <div\n ref={dropdownRef}\n id={`${uniqueId}-dropdown`}\n className=\"absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-xl z-[9999] w-fit\"\n role=\"dialog\"\n aria-label=\"Time picker\"\n data-testid={`${baseTestId}-dropdown`}\n >\n <div className=\"flex divide-x divide-base-300\">\n {renderTimeColumn(\n 'hour',\n 'Hour',\n format === '12' ? 12 : 23,\n displayHours,\n handleHourChange,\n hourStep,\n format === '12' ? 1 : 0\n )}\n\n {renderTimeColumn('minute', 'Min', 59, minutes, handleMinuteChange, minuteStep)}\n\n {showSeconds && renderTimeColumn('second', 'Sec', 59, seconds, handleSecondChange, secondStep)}\n\n {format === '12' && (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label=\"Select period\"\n data-testid={`${baseTestId}-period-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn('period')}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n Period\n </div>\n <div className=\"flex flex-col p-2 gap-2\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'AM'}\n onClick={() => handlePeriodChange('AM')}\n data-testid={`${baseTestId}-period-am`}\n className={[\n dBtn, dBtnSm,\n period === 'AM' ? dBtnPrimary : dBtnGhost\n ].join(' ')}\n >\n AM\n </button>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'PM'}\n onClick={() => handlePeriodChange('PM')}\n data-testid={`${baseTestId}-period-pm`}\n className={[\n dBtn, dBtnSm,\n period === 'PM' ? dBtnPrimary : dBtnGhost\n ].join(' ')}\n >\n PM\n </button>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"flex justify-end gap-2 p-3 border-t border-base-300\">\n <button\n type=\"button\"\n onClick={() => {\n const now = new Date()\n setHours(now.getHours())\n setMinutes(now.getMinutes())\n setSeconds(now.getSeconds())\n setPeriod(now.getHours() >= 12 ? 'PM' : 'AM')\n handleTimeChange(now.getHours(), now.getMinutes(), now.getSeconds())\n }}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm}`}\n data-testid={`${baseTestId}-now`}\n >\n Now\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className={`${dBtn} ${dBtnPrimary} ${dBtnSm}`}\n data-testid={`${baseTestId}-ok`}\n >\n OK\n </button>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nTimePicker.displayName = 'TimePicker'\n"],"names":["dBtn","dBtnGhost","dBtnPrimary","dBtnXs","dBtnSm","dBtnCircle","dInputError","dInputWarning","formatTime","date","format","showSeconds","hours","minutes","seconds","period","hoursStr","TimePicker","forwardRef","value","defaultValue","onChange","placeholder","disabled","className","size","allowClear","controlledOpen","onOpenChange","hourStep","minuteStep","secondStep","status","testId","rest","ref","componentSize","useConfig","effectiveSize","selectedTime","setSelectedTime","useState","internalOpen","setInternalOpen","isOpen","setHours","setMinutes","setSeconds","setPeriod","focusedColumn","setFocusedColumn","containerRef","useRef","dropdownRef","uniqueId","useId","baseTestId","useEffect","setOpen","useCallback","newOpen","handleClickOutside","event","handleKeyDown","e","delta","maxHour","minHour","newHour","handleHourChange","newMinute","handleMinuteChange","newSecond","handleSecondChange","handlePeriodChange","columns","currentIndex","newIndex","handleClear","handleTimeChange","newHours","newMinutes","newSeconds","now","newTime","actualHour","newPeriod","renderTimeColumn","columnType","label","maxValue","currentValue","onChangeValue","step","start","items","i","listboxId","isFocused","jsxs","jsx","item","isSelected","displayHours","statusClasses","node","Input"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as i } from "react/jsx-runtime";
2
2
  import { forwardRef as m } from "react";
3
- import { useConfig as T } from "./ConfigProvider.js";
3
+ import { useConfig as T } from "../providers/ConfigProvider.js";
4
4
  const f = "toggle", u = "toggle-xs", p = "toggle-sm", y = "toggle-md", x = "toggle-lg", S = "toggle-xl", h = "toggle-primary", k = "toggle-secondary", C = "toggle-accent", w = "toggle-neutral", z = "toggle-success", N = "toggle-warning", j = "toggle-info", X = "toggle-error", b = m(
5
5
  ({
6
6
  size: t,
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.js","sources":["../../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\nconst dTogglePrimary = 'toggle-primary'\nconst dToggleSecondary = 'toggle-secondary'\nconst dToggleAccent = 'toggle-accent'\nconst dToggleNeutral = 'toggle-neutral'\nconst dToggleSuccess = 'toggle-success'\nconst dToggleWarning = 'toggle-warning'\nconst dToggleInfo = 'toggle-info'\nconst dToggleError = 'toggle-error'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n }\n\n const colorClasses = {\n primary: dTogglePrimary,\n secondary: dToggleSecondary,\n accent: dToggleAccent,\n neutral: dToggleNeutral,\n success: dToggleSuccess,\n warning: dToggleWarning,\n info: dToggleInfo,\n error: dToggleError,\n }\n\n const toggleClasses = [\n dToggle,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","dTogglePrimary","dToggleSecondary","dToggleAccent","dToggleNeutral","dToggleSuccess","dToggleWarning","dToggleInfo","dToggleError","Toggle","forwardRef","size","color","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","toggleClasses","dataState","jsx"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAiB,kBACjBC,IAAmB,oBACnBC,IAAgB,iBAChBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAc,eACdC,IAAe,gBAQRC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBP,KAAQK,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIvB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAoB,IAAe;AAAA,MACnB,SAASnB;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,SAASC;AAAA,MACT,SAASC;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,IAAA,GAGHa,IAAgB;AAAA,MACpB1B;AAAA,MACAuB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CN,KAASQ,EAAaR,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELS,IAAYR,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAS,EAAC,SAAA,EAAM,KAAAR,GAAU,MAAK,YAAW,WAAWM,GAAe,cAAYC,GAAY,GAAGR,EAAA,CAAO;AAAA,EACtG;AACF;AAEAL,EAAO,cAAc;"}
1
+ {"version":3,"file":"Toggle.js","sources":["../../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from '../providers/ConfigProvider'\n\n// DaisyUI classes\nconst dToggle = 'toggle'\nconst dToggleXs = 'toggle-xs'\nconst dToggleSm = 'toggle-sm'\nconst dToggleMd = 'toggle-md'\nconst dToggleLg = 'toggle-lg'\nconst dToggleXl = 'toggle-xl'\nconst dTogglePrimary = 'toggle-primary'\nconst dToggleSecondary = 'toggle-secondary'\nconst dToggleAccent = 'toggle-accent'\nconst dToggleNeutral = 'toggle-neutral'\nconst dToggleSuccess = 'toggle-success'\nconst dToggleWarning = 'toggle-warning'\nconst dToggleInfo = 'toggle-info'\nconst dToggleError = 'toggle-error'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n }\n\n const colorClasses = {\n primary: dTogglePrimary,\n secondary: dToggleSecondary,\n accent: dToggleAccent,\n neutral: dToggleNeutral,\n success: dToggleSuccess,\n warning: dToggleWarning,\n info: dToggleInfo,\n error: dToggleError,\n }\n\n const toggleClasses = [\n dToggle,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","dTogglePrimary","dToggleSecondary","dToggleAccent","dToggleNeutral","dToggleSuccess","dToggleWarning","dToggleInfo","dToggleError","Toggle","forwardRef","size","color","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","toggleClasses","dataState","jsx"],"mappings":";;;AAIA,MAAMA,IAAU,UACVC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAY,aACZC,IAAiB,kBACjBC,IAAmB,oBACnBC,IAAgB,iBAChBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAiB,kBACjBC,IAAc,eACdC,IAAe,gBAQRC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBP,KAAQK,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIvB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAoB,IAAe;AAAA,MACnB,SAASnB;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,SAASC;AAAA,MACT,SAASC;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,IAAA,GAGHa,IAAgB;AAAA,MACpB1B;AAAA,MACAuB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CN,KAASQ,EAAaR,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELS,IAAYR,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAS,EAAC,SAAA,EAAM,KAAAR,GAAU,MAAK,YAAW,WAAWM,GAAe,cAAYC,GAAY,GAAGR,EAAA,CAAO;AAAA,EACtG;AACF;AAEAL,EAAO,cAAc;"}
@@ -1,7 +1,8 @@
1
- import { jsx as s, jsxs as p } from "react/jsx-runtime";
2
- import { forwardRef as qt, useState as K, useRef as M, useCallback as y, useImperativeHandle as Wt, useEffect as T } from "react";
3
- import { createPortal as Ft } from "react-dom";
4
- const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs", Mt = "btn-circle", it = (t) => t ? typeof t == "function" ? t() : t.current : null, Ot = (t, c, i, o, k) => {
1
+ import { jsx as s, jsxs as b } from "react/jsx-runtime";
2
+ import { forwardRef as Wt, useState as H, useRef as K, useCallback as y, useImperativeHandle as Ft, useEffect as T } from "react";
3
+ import { createPortal as Ht } from "react-dom";
4
+ import { useConfig as Kt } from "../providers/ConfigProvider.js";
5
+ const D = "btn", M = "btn-ghost", O = "btn-sm", Mt = "btn-primary", Ot = "btn-xs", Vt = "btn-circle", it = (t) => t ? typeof t == "function" ? t() : t.current : null, Xt = (t, c, i, o, k) => {
5
6
  if (!t || c === "center")
6
7
  return {
7
8
  top: window.innerHeight / 2 - i.height / 2,
@@ -62,7 +63,7 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
62
63
  left: window.innerWidth / 2 - i.width / 2
63
64
  }
64
65
  }[c];
65
- }, Vt = (t) => ({
66
+ }, It = (t) => ({
66
67
  top: { position: "bottom-0 left-1/2", transform: "translate(-50%, 50%) rotate(45deg)" },
67
68
  topLeft: { position: "bottom-0 left-4", transform: "translate(0, 50%) rotate(45deg)" },
68
69
  topRight: { position: "bottom-0 right-4", transform: "translate(0, 50%) rotate(45deg)" },
@@ -76,7 +77,7 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
76
77
  rightTop: { position: "left-0 top-4", transform: "translate(-50%, 0) rotate(45deg)" },
77
78
  rightBottom: { position: "left-0 bottom-4", transform: "translate(-50%, 0) rotate(45deg)" },
78
79
  center: { position: "hidden", transform: "" }
79
- })[t], Xt = /* @__PURE__ */ s("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ s("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }), Gt = qt(
80
+ })[t], Ut = /* @__PURE__ */ s("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ s("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }), Yt = Wt(
80
81
  ({
81
82
  open: t = !1,
82
83
  onClose: c,
@@ -86,8 +87,8 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
86
87
  onChange: a,
87
88
  arrow: d = !0,
88
89
  closeIcon: q,
89
- mask: X = !0,
90
- disabledInteraction: G = !1,
90
+ mask: V = !0,
91
+ disabledInteraction: X = !1,
91
92
  type: st = "default",
92
93
  gap: I = { offset: 6, radius: 2 },
93
94
  prevButtonText: lt = "Previous",
@@ -102,57 +103,57 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
102
103
  zIndex: L = 1001,
103
104
  indicatorsRender: z,
104
105
  actionsRender: _,
105
- getPopupContainer: J,
106
+ getPopupContainer: mt,
106
107
  classNames: m = {},
107
- styles: b = {},
108
- className: mt,
108
+ styles: p = {},
109
+ className: pt,
109
110
  style: bt,
110
- "data-testid": pt,
111
- ...wt
112
- }, gt) => {
113
- const [vt, Q] = K(0), [u, yt] = K(null), [Z, kt] = K({ top: 0, left: 0 }), w = M(null), $t = M(null), $ = M(null), A = pt ?? "tour", f = (n) => `${A}-${n}`, B = k !== void 0, l = B ? k : vt, e = o[l], W = I.offset ?? 6, h = I.radius ?? 2, R = Array.isArray(W) ? W[0] : W, F = e?.arrow ?? d, g = e?.mask ?? X, Bt = e?.type ?? st, S = e?.scrollIntoViewOptions ?? ut, tt = e?.closeIcon ?? q, xt = F !== !1 && e?.placement !== "center", Pt = typeof g == "object" && g.color ? g.color : "rgba(0, 0, 0, 0.5)", Ct = typeof g == "object" && g.style ? g.style : {}, x = y(() => {
111
+ "data-testid": wt,
112
+ ...gt
113
+ }, vt) => {
114
+ const { getPopupContainer: yt } = Kt(), J = mt ?? yt, [kt, Q] = H(0), [u, $t] = H(null), [Z, Ct] = H({ top: 0, left: 0 }), w = K(null), Pt = K(null), $ = K(null), A = wt ?? "tour", f = (n) => `${A}-${n}`, C = k !== void 0, l = C ? k : kt, e = o[l], G = I.offset ?? 6, h = I.radius ?? 2, R = Array.isArray(G) ? G[0] : G, W = e?.arrow ?? d, g = e?.mask ?? V, Bt = e?.type ?? st, S = e?.scrollIntoViewOptions ?? ut, tt = e?.closeIcon ?? q, xt = W !== !1 && e?.placement !== "center", Nt = typeof g == "object" && g.color ? g.color : "rgba(0, 0, 0, 0.5)", Tt = typeof g == "object" && g.style ? g.style : {}, P = y(() => {
114
115
  if (!e) return;
115
116
  const r = it(e.target)?.getBoundingClientRect() ?? null;
116
- if (yt(r), w.current) {
117
- const N = w.current.getBoundingClientRect(), E = e.placement ?? "bottom", j = Ot(
117
+ if ($t(r), w.current) {
118
+ const N = w.current.getBoundingClientRect(), E = e.placement ?? "bottom", j = Xt(
118
119
  r,
119
120
  E,
120
121
  N,
121
122
  R + h,
122
- F
123
+ W
123
124
  );
124
- kt(j);
125
+ Ct(j);
125
126
  }
126
- }, [e, R, h, F]), v = y(
127
+ }, [e, R, h, W]), v = y(
127
128
  (n) => {
128
- n < 0 || n >= o.length || (o[l]?.onClose?.(), B || Q(n), a?.(n), $.current && ($.current.textContent = `Step ${n + 1} of ${o.length}: ${typeof o[n]?.title == "string" ? o[n]?.title : ""}`));
129
+ n < 0 || n >= o.length || (o[l]?.onClose?.(), C || Q(n), a?.(n), $.current && ($.current.textContent = `Step ${n + 1} of ${o.length}: ${typeof o[n]?.title == "string" ? o[n]?.title : ""}`));
129
130
  },
130
- [o, l, B, a]
131
- ), H = y(() => {
131
+ [o, l, C, a]
132
+ ), F = y(() => {
132
133
  c?.();
133
- }, [c]), P = y(() => {
134
+ }, [c]), B = y(() => {
134
135
  e?.prevButtonProps?.onClick?.(), v(l - 1);
135
- }, [l, v, e]), C = y(() => {
136
+ }, [l, v, e]), x = y(() => {
136
137
  e?.nextButtonProps?.onClick?.(), l === o.length - 1 ? (i?.(), c?.()) : v(l + 1);
137
- }, [l, o.length, v, i, c, e]), Nt = y(() => {
138
+ }, [l, o.length, v, i, c, e]), Lt = y(() => {
138
139
  c?.();
139
- }, [c]), Tt = y(() => {
140
+ }, [c]), At = y(() => {
140
141
  U && c?.();
141
142
  }, [U, c]);
142
- if (Wt(
143
- gt,
143
+ if (Ft(
144
+ vt,
144
145
  () => ({
145
146
  goTo: v,
146
- next: C,
147
- prev: P,
148
- close: H
147
+ next: x,
148
+ prev: B,
149
+ close: F
149
150
  }),
150
- [v, C, P, H]
151
+ [v, x, B, F]
151
152
  ), T(() => {
152
- t && !B && Q(0);
153
- }, [t, B]), T(() => {
153
+ t && !C && Q(0);
154
+ }, [t, C]), T(() => {
154
155
  if (t) {
155
- if (x(), S && e?.target) {
156
+ if (P(), S && e?.target) {
156
157
  const n = it(e.target);
157
158
  if (n) {
158
159
  const r = typeof S == "object" ? S : { behavior: "smooth", block: "center" };
@@ -161,21 +162,21 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
161
162
  }
162
163
  l === 0 && $.current && ($.current.textContent = `Tour started. Step 1 of ${o.length}: ${typeof e?.title == "string" ? e?.title : ""}`);
163
164
  }
164
- }, [t, l, e, S, x, o.length]), T(() => {
165
+ }, [t, l, e, S, P, o.length]), T(() => {
165
166
  if (!t) return;
166
- const n = () => x();
167
- return window.addEventListener("resize", n), window.addEventListener("scroll", n, !0), requestAnimationFrame(x), () => {
167
+ const n = () => P();
168
+ return window.addEventListener("resize", n), window.addEventListener("scroll", n, !0), requestAnimationFrame(P), () => {
168
169
  window.removeEventListener("resize", n), window.removeEventListener("scroll", n, !0);
169
170
  };
170
- }, [t, x]), T(() => {
171
+ }, [t, P]), T(() => {
171
172
  if (!t) return;
172
173
  const n = (r) => {
173
174
  if (r.key === "Escape" && Y)
174
175
  c?.();
175
176
  else if (r.key === "ArrowRight" || r.key === "ArrowDown")
176
- r.preventDefault(), C();
177
+ r.preventDefault(), x();
177
178
  else if (r.key === "ArrowLeft" || r.key === "ArrowUp")
178
- r.preventDefault(), P();
179
+ r.preventDefault(), B();
179
180
  else if (r.key === "Tab" && w.current) {
180
181
  const N = w.current.querySelectorAll(
181
182
  'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
@@ -184,16 +185,16 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
184
185
  }
185
186
  };
186
187
  return document.addEventListener("keydown", n), () => document.removeEventListener("keydown", n);
187
- }, [t, Y, c, C, P]), T(() => {
188
+ }, [t, Y, c, x, B]), T(() => {
188
189
  t && w.current && requestAnimationFrame(() => {
189
190
  w.current?.querySelector("button")?.focus();
190
191
  });
191
192
  }, [t, l]), !t || !e) return null;
192
- const Lt = l === 0, ot = l === o.length - 1, et = e.placement ?? "bottom", nt = Vt(et), At = ht && o.length > 1 ? /* @__PURE__ */ s(
193
+ const St = l === 0, ot = l === o.length - 1, et = e.placement ?? "bottom", nt = It(et), Et = ht && o.length > 1 ? /* @__PURE__ */ s(
193
194
  "div",
194
195
  {
195
196
  className: `flex gap-1 mb-4 ${m.indicator ?? ""}`,
196
- style: b.indicator,
197
+ style: p.indicator,
197
198
  "data-testid": f("indicators"),
198
199
  children: o.map((n, r) => /* @__PURE__ */ s(
199
200
  "button",
@@ -207,28 +208,28 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
207
208
  r
208
209
  ))
209
210
  }
210
- ) : null, St = z ? z(l, o.length) : At, rt = /* @__PURE__ */ p(
211
+ ) : null, jt = z ? z(l, o.length) : Et, rt = /* @__PURE__ */ b(
211
212
  "div",
212
213
  {
213
214
  className: `flex items-center justify-between gap-2 ${m.footer ?? ""}`,
214
- style: b.footer,
215
+ style: p.footer,
215
216
  "data-testid": f("footer"),
216
217
  children: [
217
218
  /* @__PURE__ */ s("div", { children: ft && !ot && /* @__PURE__ */ s(
218
219
  "button",
219
220
  {
220
- className: `${D} ${O} ${V}`,
221
- onClick: Nt,
221
+ className: `${D} ${M} ${O}`,
222
+ onClick: Lt,
222
223
  "data-testid": f("skip"),
223
224
  children: ct
224
225
  }
225
226
  ) }),
226
- /* @__PURE__ */ p("div", { className: "flex gap-2", children: [
227
- !Lt && /* @__PURE__ */ s(
227
+ /* @__PURE__ */ b("div", { className: "flex gap-2", children: [
228
+ !St && /* @__PURE__ */ s(
228
229
  "button",
229
230
  {
230
- className: `${D} ${O} ${V}`,
231
- onClick: P,
231
+ className: `${D} ${M} ${O}`,
232
+ onClick: B,
232
233
  "data-testid": f("prev"),
233
234
  children: e.prevButtonProps?.children ?? lt
234
235
  }
@@ -236,8 +237,8 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
236
237
  /* @__PURE__ */ s(
237
238
  "button",
238
239
  {
239
- className: `${D} ${V} ${Bt === "primary" ? Ht : ""}`,
240
- onClick: C,
240
+ className: `${D} ${O} ${Bt === "primary" ? Mt : ""}`,
241
+ onClick: x,
241
242
  "data-testid": f("next"),
242
243
  children: e.nextButtonProps?.children ?? (ot ? dt : at)
243
244
  }
@@ -245,18 +246,18 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
245
246
  ] })
246
247
  ]
247
248
  }
248
- ), Et = _ ? _(rt, { current: l, total: o.length }) : rt, jt = /* @__PURE__ */ p(
249
+ ), Dt = _ ? _(rt, { current: l, total: o.length }) : rt, qt = /* @__PURE__ */ b(
249
250
  "div",
250
251
  {
251
- ref: $t,
252
- className: `fixed inset-0 ${m.root ?? ""} ${mt ?? ""}`,
253
- style: { zIndex: L, ...b.root, ...bt },
252
+ ref: Pt,
253
+ className: `fixed inset-0 ${m.root ?? ""} ${pt ?? ""}`,
254
+ style: { zIndex: L, ...p.root, ...bt },
254
255
  "data-testid": A,
255
256
  "data-state": t ? "open" : "closed",
256
257
  role: "dialog",
257
258
  "aria-modal": "true",
258
259
  "aria-label": `Tour step ${l + 1} of ${o.length}`,
259
- ...wt,
260
+ ...gt,
260
261
  children: [
261
262
  /* @__PURE__ */ s(
262
263
  "div",
@@ -268,16 +269,16 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
268
269
  "aria-atomic": "true"
269
270
  }
270
271
  ),
271
- g && /* @__PURE__ */ p(
272
+ g && /* @__PURE__ */ b(
272
273
  "svg",
273
274
  {
274
275
  className: `absolute inset-0 w-full h-full pointer-events-auto ${m.mask ?? ""}`,
275
- style: { zIndex: L, ...Ct, ...b.mask },
276
- onClick: Tt,
276
+ style: { zIndex: L, ...Tt, ...p.mask },
277
+ onClick: At,
277
278
  "data-testid": f("mask"),
278
279
  "aria-hidden": "true",
279
280
  children: [
280
- /* @__PURE__ */ s("defs", { children: /* @__PURE__ */ p("mask", { id: `tour-mask-${A}`, children: [
281
+ /* @__PURE__ */ s("defs", { children: /* @__PURE__ */ b("mask", { id: `tour-mask-${A}`, children: [
281
282
  /* @__PURE__ */ s("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: "white" }),
282
283
  u && /* @__PURE__ */ s(
283
284
  "rect",
@@ -298,14 +299,14 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
298
299
  y: "0",
299
300
  width: "100%",
300
301
  height: "100%",
301
- fill: Pt,
302
+ fill: Nt,
302
303
  mask: `url(#tour-mask-${A})`
303
304
  }
304
305
  )
305
306
  ]
306
307
  }
307
308
  ),
308
- G && u && /* @__PURE__ */ s(
309
+ X && u && /* @__PURE__ */ s(
309
310
  "div",
310
311
  {
311
312
  className: "absolute pointer-events-auto",
@@ -319,7 +320,7 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
319
320
  "data-testid": f("blocker")
320
321
  }
321
322
  ),
322
- /* @__PURE__ */ p(
323
+ /* @__PURE__ */ b(
323
324
  "div",
324
325
  {
325
326
  ref: w,
@@ -328,7 +329,7 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
328
329
  top: Z.top,
329
330
  left: Z.left,
330
331
  zIndex: L + 2,
331
- ...b.popover,
332
+ ...p.popover,
332
333
  ...e.style
333
334
  },
334
335
  onClick: (n) => n.stopPropagation(),
@@ -351,27 +352,27 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
351
352
  tt !== !1 && /* @__PURE__ */ s(
352
353
  "button",
353
354
  {
354
- className: `absolute top-2 right-2 ${D} ${O} ${Kt} ${Mt} ${m.close ?? ""}`,
355
- style: b.close,
356
- onClick: H,
355
+ className: `absolute top-2 right-2 ${D} ${M} ${Ot} ${Vt} ${m.close ?? ""}`,
356
+ style: p.close,
357
+ onClick: F,
357
358
  "aria-label": "Close tour",
358
359
  "data-testid": f("close"),
359
- children: tt ?? Xt
360
+ children: tt ?? Ut
360
361
  }
361
362
  ),
362
363
  e.cover && /* @__PURE__ */ s("div", { className: "rounded-t-lg overflow-hidden", "data-testid": f("cover"), children: e.cover }),
363
- /* @__PURE__ */ p(
364
+ /* @__PURE__ */ b(
364
365
  "div",
365
366
  {
366
367
  className: `p-4 ${m.content ?? ""}`,
367
- style: b.content,
368
+ style: p.content,
368
369
  "data-testid": f("content"),
369
370
  children: [
370
- /* @__PURE__ */ p(
371
+ /* @__PURE__ */ b(
371
372
  "div",
372
373
  {
373
374
  className: `${m.header ?? ""}`,
374
- style: b.header,
375
+ style: p.header,
375
376
  "data-testid": f("header"),
376
377
  children: [
377
378
  /* @__PURE__ */ s("h3", { className: "font-semibold text-lg mb-1 pr-6", children: e.title }),
@@ -379,8 +380,8 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
379
380
  ]
380
381
  }
381
382
  ),
382
- St,
383
- Et
383
+ jt,
384
+ Dt
384
385
  ]
385
386
  }
386
387
  )
@@ -389,12 +390,12 @@ const D = "btn", O = "btn-ghost", V = "btn-sm", Ht = "btn-primary", Kt = "btn-xs
389
390
  )
390
391
  ]
391
392
  }
392
- ), Dt = J ? J(document.body) : document.body;
393
- return Ft(jt, Dt);
393
+ ), Gt = J ? J(document.body) : document.body;
394
+ return Ht(qt, Gt);
394
395
  }
395
396
  );
396
- Gt.displayName = "Tour";
397
+ Yt.displayName = "Tour";
397
398
  export {
398
- Gt as Tour
399
+ Yt as Tour
399
400
  };
400
401
  //# sourceMappingURL=Tour.js.map