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.
- package/dist/components/Autocomplete.js +1 -1
- package/dist/components/Autocomplete.js.map +1 -1
- package/dist/components/Button.js +1 -1
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Cascader.js +147 -146
- package/dist/components/Cascader.js.map +1 -1
- package/dist/components/Checkbox.js +1 -1
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/ColorPicker.js +1 -1
- package/dist/components/ColorPicker.js.map +1 -1
- package/dist/components/ContextMenu.js +90 -89
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/CopyButton.js +1 -1
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/Countdown.js +1 -1
- package/dist/components/Countdown.js.map +1 -1
- package/dist/components/DatePicker.js +1 -1
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/Dock.js +1 -1
- package/dist/components/Dock.js.map +1 -1
- package/dist/components/Drawer.js +66 -65
- package/dist/components/Drawer.js.map +1 -1
- package/dist/components/Dropdown.js +174 -173
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/Empty.js +1 -1
- package/dist/components/Empty.js.map +1 -1
- package/dist/components/FileInput.js +1 -1
- package/dist/components/FileInput.js.map +1 -1
- package/dist/components/Filter.js +1 -1
- package/dist/components/Filter.js.map +1 -1
- package/dist/components/Form.js +1 -1
- package/dist/components/Form.js.map +1 -1
- package/dist/components/Input.js +1 -1
- package/dist/components/Input.js.map +1 -1
- package/dist/components/InputNumber.js +1 -1
- package/dist/components/InputNumber.js.map +1 -1
- package/dist/components/List.js +1 -1
- package/dist/components/List.js.map +1 -1
- package/dist/components/Loading.js +1 -1
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/Mention.js +66 -65
- package/dist/components/Mention.js.map +1 -1
- package/dist/components/Modal.js +1 -1
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/OTPInput.js +1 -1
- package/dist/components/OTPInput.js.map +1 -1
- package/dist/components/Pagination.js +1 -1
- package/dist/components/Pagination.js.map +1 -1
- package/dist/components/Popconfirm.js +1 -1
- package/dist/components/Popconfirm.js.map +1 -1
- package/dist/components/Radio.js +1 -1
- package/dist/components/Radio.js.map +1 -1
- package/dist/components/Range.js +1 -1
- package/dist/components/Range.js.map +1 -1
- package/dist/components/Rating.js +1 -1
- package/dist/components/Rating.js.map +1 -1
- package/dist/components/RichTextEditor.js +1 -1
- package/dist/components/RichTextEditor.js.map +1 -1
- package/dist/components/Segmented.js +1 -1
- package/dist/components/Segmented.js.map +1 -1
- package/dist/components/Select.js +1 -1
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Table.d.ts +19 -0
- package/dist/components/Table.js +348 -310
- package/dist/components/Table.js.map +1 -1
- package/dist/components/Tabs.js +1 -1
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Textarea.js +1 -1
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeController.js +1 -1
- package/dist/components/ThemeController.js.map +1 -1
- package/dist/components/TimePicker.js +1 -1
- package/dist/components/TimePicker.js.map +1 -1
- package/dist/components/Toggle.js +1 -1
- package/dist/components/Toggle.js.map +1 -1
- package/dist/components/Tour.js +83 -82
- package/dist/components/Tour.js.map +1 -1
- package/dist/components/Transfer.js +107 -103
- package/dist/components/Transfer.js.map +1 -1
- package/dist/components/TreeSelect.js +245 -244
- package/dist/components/TreeSelect.js.map +1 -1
- package/dist/hooks/useTheme.d.ts +1 -1
- package/dist/hooks/useTheme.js +1 -1
- package/dist/hooks/useTheme.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/{components → providers}/ConfigProvider.d.ts +8 -0
- package/dist/providers/ConfigProvider.js +50 -0
- package/dist/providers/ConfigProvider.js.map +1 -0
- package/dist/providers/ThemeProvider.js.map +1 -0
- package/package.json +1 -1
- package/dist/components/ConfigProvider.js +0 -46
- package/dist/components/ConfigProvider.js.map +0 -1
- package/dist/components/ThemeProvider.js.map +0 -1
- /package/dist/{components → providers}/ThemeProvider.d.ts +0 -0
- /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":"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"}
|
|
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 "
|
|
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 '
|
|
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;"}
|
package/dist/components/Tour.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { jsx as s, jsxs as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import { createPortal as
|
|
4
|
-
|
|
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
|
-
},
|
|
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],
|
|
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:
|
|
90
|
-
disabledInteraction:
|
|
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:
|
|
106
|
+
getPopupContainer: mt,
|
|
106
107
|
classNames: m = {},
|
|
107
|
-
styles:
|
|
108
|
-
className:
|
|
108
|
+
styles: p = {},
|
|
109
|
+
className: pt,
|
|
109
110
|
style: bt,
|
|
110
|
-
"data-testid":
|
|
111
|
-
...
|
|
112
|
-
},
|
|
113
|
-
const [
|
|
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 (
|
|
117
|
-
const N = w.current.getBoundingClientRect(), E = e.placement ?? "bottom", j =
|
|
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
|
-
|
|
123
|
+
W
|
|
123
124
|
);
|
|
124
|
-
|
|
125
|
+
Ct(j);
|
|
125
126
|
}
|
|
126
|
-
}, [e, R, h,
|
|
127
|
+
}, [e, R, h, W]), v = y(
|
|
127
128
|
(n) => {
|
|
128
|
-
n < 0 || n >= o.length || (o[l]?.onClose?.(),
|
|
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,
|
|
131
|
-
),
|
|
131
|
+
[o, l, C, a]
|
|
132
|
+
), F = y(() => {
|
|
132
133
|
c?.();
|
|
133
|
-
}, [c]),
|
|
134
|
+
}, [c]), B = y(() => {
|
|
134
135
|
e?.prevButtonProps?.onClick?.(), v(l - 1);
|
|
135
|
-
}, [l, v, e]),
|
|
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]),
|
|
138
|
+
}, [l, o.length, v, i, c, e]), Lt = y(() => {
|
|
138
139
|
c?.();
|
|
139
|
-
}, [c]),
|
|
140
|
+
}, [c]), At = y(() => {
|
|
140
141
|
U && c?.();
|
|
141
142
|
}, [U, c]);
|
|
142
|
-
if (
|
|
143
|
-
|
|
143
|
+
if (Ft(
|
|
144
|
+
vt,
|
|
144
145
|
() => ({
|
|
145
146
|
goTo: v,
|
|
146
|
-
next:
|
|
147
|
-
prev:
|
|
148
|
-
close:
|
|
147
|
+
next: x,
|
|
148
|
+
prev: B,
|
|
149
|
+
close: F
|
|
149
150
|
}),
|
|
150
|
-
[v,
|
|
151
|
+
[v, x, B, F]
|
|
151
152
|
), T(() => {
|
|
152
|
-
t && !
|
|
153
|
-
}, [t,
|
|
153
|
+
t && !C && Q(0);
|
|
154
|
+
}, [t, C]), T(() => {
|
|
154
155
|
if (t) {
|
|
155
|
-
if (
|
|
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,
|
|
165
|
+
}, [t, l, e, S, P, o.length]), T(() => {
|
|
165
166
|
if (!t) return;
|
|
166
|
-
const n = () =>
|
|
167
|
-
return window.addEventListener("resize", n), window.addEventListener("scroll", n, !0), requestAnimationFrame(
|
|
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,
|
|
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(),
|
|
177
|
+
r.preventDefault(), x();
|
|
177
178
|
else if (r.key === "ArrowLeft" || r.key === "ArrowUp")
|
|
178
|
-
r.preventDefault(),
|
|
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,
|
|
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
|
|
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:
|
|
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,
|
|
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:
|
|
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} ${
|
|
221
|
-
onClick:
|
|
221
|
+
className: `${D} ${M} ${O}`,
|
|
222
|
+
onClick: Lt,
|
|
222
223
|
"data-testid": f("skip"),
|
|
223
224
|
children: ct
|
|
224
225
|
}
|
|
225
226
|
) }),
|
|
226
|
-
/* @__PURE__ */
|
|
227
|
-
!
|
|
227
|
+
/* @__PURE__ */ b("div", { className: "flex gap-2", children: [
|
|
228
|
+
!St && /* @__PURE__ */ s(
|
|
228
229
|
"button",
|
|
229
230
|
{
|
|
230
|
-
className: `${D} ${
|
|
231
|
-
onClick:
|
|
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} ${
|
|
240
|
-
onClick:
|
|
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
|
-
),
|
|
249
|
+
), Dt = _ ? _(rt, { current: l, total: o.length }) : rt, qt = /* @__PURE__ */ b(
|
|
249
250
|
"div",
|
|
250
251
|
{
|
|
251
|
-
ref:
|
|
252
|
-
className: `fixed inset-0 ${m.root ?? ""} ${
|
|
253
|
-
style: { zIndex: L, ...
|
|
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
|
-
...
|
|
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__ */
|
|
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, ...
|
|
276
|
-
onClick:
|
|
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__ */
|
|
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:
|
|
302
|
+
fill: Nt,
|
|
302
303
|
mask: `url(#tour-mask-${A})`
|
|
303
304
|
}
|
|
304
305
|
)
|
|
305
306
|
]
|
|
306
307
|
}
|
|
307
308
|
),
|
|
308
|
-
|
|
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__ */
|
|
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
|
-
...
|
|
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} ${
|
|
355
|
-
style:
|
|
356
|
-
onClick:
|
|
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 ??
|
|
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__ */
|
|
364
|
+
/* @__PURE__ */ b(
|
|
364
365
|
"div",
|
|
365
366
|
{
|
|
366
367
|
className: `p-4 ${m.content ?? ""}`,
|
|
367
|
-
style:
|
|
368
|
+
style: p.content,
|
|
368
369
|
"data-testid": f("content"),
|
|
369
370
|
children: [
|
|
370
|
-
/* @__PURE__ */
|
|
371
|
+
/* @__PURE__ */ b(
|
|
371
372
|
"div",
|
|
372
373
|
{
|
|
373
374
|
className: `${m.header ?? ""}`,
|
|
374
|
-
style:
|
|
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
|
-
|
|
383
|
-
|
|
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
|
-
),
|
|
393
|
-
return
|
|
393
|
+
), Gt = J ? J(document.body) : document.body;
|
|
394
|
+
return Ht(qt, Gt);
|
|
394
395
|
}
|
|
395
396
|
);
|
|
396
|
-
|
|
397
|
+
Yt.displayName = "Tour";
|
|
397
398
|
export {
|
|
398
|
-
|
|
399
|
+
Yt as Tour
|
|
399
400
|
};
|
|
400
401
|
//# sourceMappingURL=Tour.js.map
|