@neuronection/assistant-ui 0.8.0 → 0.9.0
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/CHANGELOG.md +19 -0
- package/README.md +45 -53
- package/dist/Logo-D8DEBUoL.d.ts +11 -0
- package/dist/about.d.ts +124 -0
- package/dist/about.js +3 -0
- package/dist/about.js.map +1 -0
- package/dist/badge.d.ts +1 -1
- package/dist/badge.js +1 -1
- package/dist/card.js +1 -1
- package/dist/chip-list.js +1 -1
- package/dist/chunk-3QGVWTBU.js +475 -0
- package/dist/chunk-3QGVWTBU.js.map +1 -0
- package/dist/chunk-7EG3AUTS.js +3 -0
- package/dist/chunk-7EG3AUTS.js.map +1 -0
- package/dist/chunk-A6RXCBJY.js +3 -0
- package/dist/chunk-A6RXCBJY.js.map +1 -0
- package/dist/chunk-CE7JZP67.js +3 -0
- package/dist/chunk-CE7JZP67.js.map +1 -0
- package/dist/{chunk-ERK53RFJ.js → chunk-CR42EAF4.js} +3 -3
- package/dist/chunk-CR42EAF4.js.map +1 -0
- package/dist/{chunk-SKTLC2XY.js → chunk-F4DP4PIM.js} +2 -2
- package/dist/{chunk-SKTLC2XY.js.map → chunk-F4DP4PIM.js.map} +1 -1
- package/dist/{chunk-TJLELOAW.js → chunk-GVOC3ARM.js} +3 -3
- package/dist/{chunk-TJLELOAW.js.map → chunk-GVOC3ARM.js.map} +1 -1
- package/dist/chunk-Q2JMEAKN.js +340 -0
- package/dist/chunk-Q2JMEAKN.js.map +1 -0
- package/dist/{chunk-BN3YHYYL.js → chunk-QUPGIPTT.js} +2 -2
- package/dist/{chunk-BN3YHYYL.js.map → chunk-QUPGIPTT.js.map} +1 -1
- package/dist/{chunk-HSWSYEFQ.js → chunk-RYE5YCFF.js} +2 -2
- package/dist/{chunk-HSWSYEFQ.js.map → chunk-RYE5YCFF.js.map} +1 -1
- package/dist/chunk-VPLCX2A5.js +3 -0
- package/dist/chunk-VPLCX2A5.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/dist/logo.d.ts +18 -0
- package/dist/logo.js +3 -0
- package/dist/logo.js.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/time-list.js +1 -1
- package/dist/time-picker.js +1 -1
- package/package.json +11 -1
- package/dist/chunk-ERK53RFJ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/time-picker/TimePicker.tsx"],"names":["TimePicker","ClockIcon"],"mappings":"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","file":"chunk-CR42EAF4.js","sourcesContent":["import * as React from 'react'\nimport { Check, Clock as ClockIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover'\n\ntype ViewMode = 'hours' | 'minutes'\n\nexport interface TimePickerProps {\n /** 24-hour `HH:MM` string, or null/undefined when empty. */\n value: string | null | undefined\n /** Fired with a 24-hour `HH:MM` string. */\n onChange: (value: string) => void\n className?: string\n placeholder?: string\n disabled?: boolean\n id?: string\n /** Diameter of the clock face in px (default 240). */\n size?: number\n /** Accessible name for the trigger (also an optional visible label). */\n label?: string\n hourLabel?: string\n minuteLabel?: string\n doneLabel?: string\n variant?: 'default' | 'unstyled'\n}\n\ninterface Hms {\n hour24: number\n minute: number\n}\n\nfunction parse24(value: string | null | undefined): Hms | null {\n if (!value) return null\n const m = /^(\\d{1,2}):(\\d{1,2})$/.exec(value.trim())\n if (!m) return null\n const h = parseInt(m[1]!, 10)\n const min = parseInt(m[2]!, 10)\n if (Number.isNaN(h) || Number.isNaN(min) || h < 0 || h > 23 || min < 0 || min > 59) return null\n return { hour24: h, minute: min }\n}\n\nfunction to24(hour12: number, period: 'AM' | 'PM'): number {\n if (period === 'AM') return hour12 === 12 ? 0 : hour12\n return hour12 === 12 ? 12 : hour12 + 12\n}\n\nfunction from24(hour24: number): { hour12: number; period: 'AM' | 'PM' } {\n if (hour24 === 0) return { hour12: 12, period: 'AM' }\n if (hour24 === 12) return { hour12: 12, period: 'PM' }\n if (hour24 < 12) return { hour12: hour24, period: 'AM' }\n return { hour12: hour24 - 12, period: 'PM' }\n}\n\nfunction format12(hour24: number, minute: number): string {\n const { hour12, period } = from24(hour24)\n const mm = minute.toString().padStart(2, '0')\n return `${hour12}:${mm} ${period}`\n}\n\nfunction format24(hour24: number, minute: number): string {\n return `${hour24.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`\n}\n\ninterface ClockProps {\n mode: ViewMode\n hour12: number\n minute: number\n size: number\n onPickHour: (h: number) => void\n onPickMinute: (m: number) => void\n}\n\n/**\n * SVG clock face. Hours (1–12) and minutes (0,5,…,55) sit on a ring; the\n * selected tick is highlighted and a hand points to it. Click anywhere on the\n * face to snap to the nearest tick of the active mode.\n */\nconst ClockFace: React.FC<ClockProps> = ({\n mode,\n hour12,\n minute,\n size,\n onPickHour,\n onPickMinute,\n}) => {\n const cx = size / 2\n const cy = size / 2\n const radius = size / 2 - 22\n\n const ticks =\n mode === 'hours'\n ? Array.from({ length: 12 }, (_, i) => i + 1)\n : Array.from({ length: 12 }, (_, i) => i * 5)\n\n const selectedValue = mode === 'hours' ? hour12 : minute\n\n const angleFor = React.useCallback(\n (val: number) => {\n if (mode === 'hours') {\n return (val / 12) * 360 - 90\n }\n return (val / 60) * 360 - 90\n },\n [mode],\n )\n\n const pointFor = React.useCallback(\n (val: number, r: number) => {\n const rad = (angleFor(val) * Math.PI) / 180\n return { x: cx + r * Math.cos(rad), y: cy + r * Math.sin(rad) }\n },\n [angleFor, cx, cy],\n )\n\n const handTarget = pointFor(selectedValue, radius - 22)\n const labelPoint = (val: number) => pointFor(val, radius)\n\n const handleClick = (e: React.MouseEvent<SVGSVGElement>) => {\n const svg = e.currentTarget\n const rect = svg.getBoundingClientRect()\n const x = e.clientX - rect.left - cx\n const y = e.clientY - rect.top - cy\n let deg = (Math.atan2(y, x) * 180) / Math.PI + 90\n if (deg < 0) deg += 360\n if (mode === 'hours') {\n const h = Math.round(deg / 30) || 12\n onPickHour(h)\n } else {\n const m = (Math.round(deg / 30) || 12) * 5\n onPickMinute(m === 60 ? 0 : m)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<SVGSVGElement>) => {\n if (mode === 'hours') {\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault()\n onPickHour(hour12 >= 12 ? 1 : hour12 + 1)\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault()\n onPickHour(hour12 <= 1 ? 12 : hour12 - 1)\n }\n } else {\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault()\n onPickMinute(minute >= 55 ? 0 : minute + 5)\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault()\n onPickMinute(minute <= 0 ? 55 : minute - 5)\n }\n }\n }\n\n return (\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n role=\"slider\"\n aria-label={mode === 'hours' ? 'Hour' : 'Minute'}\n aria-valuemin={mode === 'hours' ? 1 : 0}\n aria-valuemax={mode === 'hours' ? 12 : 59}\n aria-valuenow={selectedValue}\n className=\"cursor-pointer rounded-full outline-none focus-visible:ring-2 focus-visible:ring-[var(--as-focus-ring)]\"\n >\n <circle cx={cx} cy={cy} r={radius + 4} className=\"fill-[var(--as-muted)] stroke-[var(--as-border)]\" strokeWidth={1} />\n\n {ticks.map((val) => {\n const p = labelPoint(val)\n const isSelected = val === selectedValue\n return (\n <g key={val}>\n <circle\n cx={p.x}\n cy={p.y}\n r={isSelected ? 17 : 15}\n className={cn(\n 'transition-all',\n isSelected\n ? 'fill-[var(--as-primary)]'\n : 'fill-[var(--as-surface-raised)] stroke-[var(--as-border)]',\n )}\n strokeWidth={1}\n />\n <text\n x={p.x}\n y={p.y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n className={cn(\n 'font-medium',\n isSelected ? 'fill-[var(--as-primary-fg)] font-bold' : 'fill-[var(--as-fg)]',\n )}\n style={{ fontSize: 13, userSelect: 'none' }}\n >\n {val.toString().padStart(2, '0')}\n </text>\n </g>\n )\n })}\n\n <line\n x1={cx}\n y1={cy}\n x2={handTarget.x}\n y2={handTarget.y}\n className=\"stroke-[var(--as-primary)]\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n />\n <circle cx={cx} cy={cy} r={5} className=\"fill-[var(--as-primary)]\" />\n </svg>\n )\n}\n\ninterface TimeInputProps {\n value: number\n min: number\n max: number\n active?: boolean\n onChange: (n: number) => void\n onFocus: () => void\n onConvertFrom24?: (n24: number) => void\n ariaLabel?: string\n}\n\n/**\n * A 2-digit, keyboard-editable numeric field. Accepts only digits, clamps on\n * blur/Enter, and supports Arrow Up/Down to step. While focused it holds the\n * raw text; it re-syncs from `value` when not focused.\n */\nconst TimeInput: React.FC<TimeInputProps> = ({\n value,\n min,\n max,\n active,\n onChange,\n onFocus,\n onConvertFrom24,\n ariaLabel,\n}) => {\n const pad = (n: number) => n.toString().padStart(2, '0')\n const [text, setText] = React.useState<string>(pad(value))\n const [focused, setFocused] = React.useState(false)\n\n React.useEffect(() => {\n if (!focused) setText(pad(value))\n }, [value, focused])\n\n const commit = (raw: string) => {\n const digits = raw.replace(/\\D/g, '')\n if (digits === '') {\n setText(pad(value))\n return\n }\n const n = parseInt(digits, 10)\n if (Number.isNaN(n)) {\n setText(pad(value))\n return\n }\n if (onConvertFrom24 && (n > max || n === 0)) {\n onConvertFrom24(n)\n return\n }\n const clamped = Math.max(min, Math.min(max, n))\n onChange(clamped)\n setText(pad(clamped))\n }\n\n return (\n <input\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n value={text}\n aria-label={ariaLabel}\n onFocus={() => {\n setFocused(true)\n onFocus()\n requestAnimationFrame(() => {\n const el = document.activeElement as HTMLInputElement | null\n if (el && typeof el.select === 'function') el.select()\n })\n }}\n onBlur={() => {\n setFocused(false)\n commit(text)\n }}\n onChange={(e) => setText(e.target.value.replace(/\\D/g, '').slice(0, 2))}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n ;(e.target as HTMLInputElement).blur()\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n const next = value >= max ? min : value + 1\n onChange(next)\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n const next = value <= min ? max : value - 1\n onChange(next)\n }\n }}\n className={cn(\n 'h-10 w-12 rounded-[var(--as-radius-sm)] bg-transparent text-center text-2xl font-bold tabular-nums outline-none transition-colors',\n active\n ? 'bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] text-[var(--as-primary)]'\n : 'text-[var(--as-fg)] hover:bg-[var(--as-muted)]',\n )}\n />\n )\n}\n\nexport interface TimePickerContentProps {\n value: string | null | undefined\n onChange: (value: string) => void\n onDone?: () => void\n size?: number\n hourLabel?: string\n minuteLabel?: string\n doneLabel?: string\n className?: string\n}\n\n/**\n * The popover body: editable HH:MM inputs + AM/PM segmented control + clock\n * face + Done button. Owns a working copy of the time, seeded from `value`\n * once on mount (the parent unmounts it when the popover closes).\n */\nexport const TimePickerContent: React.FC<TimePickerContentProps> = ({\n value,\n onChange,\n onDone,\n size = 240,\n hourLabel = 'Hour',\n minuteLabel = 'Minute',\n doneLabel = 'Done',\n className,\n}) => {\n const seedRef = React.useRef<{ h24: number; min: number } | null>(null)\n if (seedRef.current === null) {\n const p = parse24(value)\n if (p) {\n seedRef.current = { h24: p.hour24, min: p.minute }\n } else {\n const now = new Date()\n seedRef.current = { h24: now.getHours(), min: now.getMinutes() }\n }\n }\n const seed = seedRef.current\n\n const [hour12, setHour12] = React.useState<number>(() => from24(seed.h24).hour12)\n const [minute, setMinute] = React.useState<number>(seed.min)\n const [period, setPeriod] = React.useState<'AM' | 'PM'>(() => from24(seed.h24).period)\n const [mode, setMode] = React.useState<ViewMode>('hours')\n\n const commit = React.useCallback(\n (h12: number, min: number, p: 'AM' | 'PM') => {\n onChange(format24(to24(h12, p), min))\n },\n [onChange],\n )\n\n const pickHour = (h: number) => {\n setHour12(h)\n commit(h, minute, period)\n }\n const pickMinute = (m: number) => {\n setMinute(m)\n commit(hour12, m, period)\n }\n const togglePeriod = (p: 'AM' | 'PM') => {\n if (p === period) return\n setPeriod(p)\n commit(hour12, minute, p)\n }\n\n return (\n <div\n data-as=\"time-picker-content\"\n className={cn('flex flex-col gap-2 p-4', className)}\n >\n <div className=\"mb-1 flex select-none items-center justify-center gap-2\">\n <div className=\"flex items-center gap-0.5 rounded-[var(--as-radius)] bg-[var(--as-muted)] px-1 py-0.5\">\n <TimeInput\n value={hour12}\n min={1}\n max={12}\n active={mode === 'hours'}\n ariaLabel={hourLabel}\n onChange={(h) => {\n setHour12(h)\n commit(h, minute, period)\n }}\n onConvertFrom24={(n24) => {\n const f = from24(n24)\n setHour12(f.hour12)\n setPeriod(f.period)\n commit(f.hour12, minute, f.period)\n }}\n onFocus={() => setMode('hours')}\n />\n <span className=\"px-0.5 text-2xl font-bold text-[var(--as-muted-fg)]\">:</span>\n <TimeInput\n value={minute}\n min={0}\n max={59}\n active={mode === 'minutes'}\n ariaLabel={minuteLabel}\n onChange={(m) => {\n setMinute(m)\n commit(hour12, m, period)\n }}\n onFocus={() => setMode('minutes')}\n />\n </div>\n\n <div className=\"flex overflow-hidden rounded-[var(--as-radius)] border border-[var(--as-border)]\">\n {(['AM', 'PM'] as const).map((p) => (\n <button\n key={p}\n type=\"button\"\n onClick={() => togglePeriod(p)}\n aria-pressed={period === p}\n className={cn(\n 'cursor-pointer px-3 py-1.5 text-xs font-bold uppercase tracking-widest transition-colors',\n period === p\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'bg-[var(--as-surface)] text-[var(--as-muted-fg)] hover:bg-[var(--as-muted)]',\n )}\n >\n {p}\n </button>\n ))}\n </div>\n </div>\n\n <p className=\"mb-1 text-center text-[10px] font-bold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {mode === 'hours' ? hourLabel : minuteLabel}\n </p>\n\n <div className=\"mb-2 flex justify-center\">\n <ClockFace\n mode={mode}\n hour12={hour12}\n minute={minute}\n size={size}\n onPickHour={pickHour}\n onPickMinute={pickMinute}\n />\n </div>\n\n <div className=\"flex justify-end border-t border-[var(--as-border)] pt-2\">\n <button\n type=\"button\"\n onClick={onDone}\n className=\"flex cursor-pointer items-center gap-1.5 rounded-[var(--as-radius)] bg-[var(--as-primary)] px-4 py-2 text-xs font-bold text-[var(--as-primary-fg)] transition-[filter] hover:brightness-110\"\n >\n <Check className=\"size-3.5\" aria-hidden />\n {doneLabel}\n </button>\n </div>\n </div>\n )\n}\n\nexport const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>(\n function TimePicker(\n {\n value,\n onChange,\n className,\n placeholder = 'Select time',\n disabled = false,\n id,\n size = 240,\n label,\n hourLabel,\n minuteLabel,\n doneLabel,\n variant = 'default',\n },\n ref,\n ) {\n const [open, setOpen] = React.useState(false)\n\n const parsed = parse24(value)\n const display = parsed ? format12(parsed.hour24, parsed.minute) : null\n\n return (\n <div\n ref={ref}\n data-as=\"time-picker\"\n className={cn(!className?.includes('w-') && 'w-full', 'flex flex-col', className)}\n >\n {label ? (\n <label className=\"mb-1.5 ml-1 block text-[10px] font-bold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {label}\n </label>\n ) : null}\n <Popover open={open && !disabled} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n aria-label={label ?? 'Choose time'}\n className={cn(\n 'flex items-center gap-2 text-left text-sm outline-none transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] disabled:cursor-not-allowed disabled:opacity-50',\n !className?.includes('w-') && 'w-full',\n variant === 'default' &&\n 'rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2.5 hover:border-[var(--as-primary)]',\n )}\n >\n {variant === 'default' ? (\n <ClockIcon className=\"size-4 shrink-0 text-[var(--as-muted-fg)]\" aria-hidden />\n ) : null}\n <span\n className={cn(\n 'flex-1 truncate',\n !parsed && (variant === 'default' ? 'text-[var(--as-muted-fg)]' : 'opacity-70'),\n parsed && variant === 'default' && 'font-medium text-[var(--as-fg)]',\n )}\n >\n {display ?? placeholder}\n </span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n aria-label={label ?? 'Choose time'}\n className=\"w-[300px] p-0\"\n >\n <TimePickerContent\n value={value}\n onChange={onChange}\n onDone={() => setOpen(false)}\n size={size}\n hourLabel={hourLabel}\n minuteLabel={minuteLabel}\n doneLabel={doneLabel}\n />\n </PopoverContent>\n </Popover>\n\n <input type=\"hidden\" value={value ?? ''} id={id} name={id} />\n </div>\n )\n },\n)\n"]}
|
|
@@ -35,5 +35,5 @@ var Badge = React.forwardRef(function Badge2({ className, variant, ...props }, r
|
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
export { Badge, badgeVariants };
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
38
|
+
//# sourceMappingURL=chunk-F4DP4PIM.js.map
|
|
39
|
+
//# sourceMappingURL=chunk-F4DP4PIM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/badge/Badge.tsx"],"names":["Badge"],"mappings":";;;;;AAIA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,qGAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,uEAAA;AAAA,QACT,SAAA,EACE,2EAAA;AAAA,QACF,OAAA,EAAS,+CAAA;AAAA,QACT,OAAA,EAAS,uEAAA;AAAA,QACT,OAAA,EAAS,uEAAA;AAAA,QACT,MAAA,EAAQ,qEAAA;AAAA,QACR,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAMO,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA,CAAwC,SAASA,MAAAA,CAC1E,EAAE,WAAW,OAAA,EAAS,GAAG,KAAA,EAAM,EAC/B,GAAA,EACA;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAQ,OAAA;AAAA,MACR,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/badge/Badge.tsx"],"names":["Badge"],"mappings":";;;;;AAIA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,qGAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,uEAAA;AAAA,QACT,SAAA,EACE,2EAAA;AAAA,QACF,OAAA,EAAS,+CAAA;AAAA,QACT,OAAA,EAAS,uEAAA;AAAA,QACT,OAAA,EAAS,uEAAA;AAAA,QACT,MAAA,EAAQ,qEAAA;AAAA,QACR,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ;AAMO,IAAM,KAAA,GAAc,KAAA,CAAA,UAAA,CAAwC,SAASA,MAAAA,CAC1E,EAAE,WAAW,OAAA,EAAS,GAAG,KAAA,EAAM,EAC/B,GAAA,EACA;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAQ,OAAA;AAAA,MACR,WAAW,EAAA,CAAG,aAAA,CAAc,EAAE,OAAA,EAAS,SAAA,EAAW,CAAC,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ,CAAC","file":"chunk-F4DP4PIM.js","sourcesContent":["import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center gap-1 rounded-full border px-2.5 py-0.5 text-xs font-medium [&_svg]:size-3',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-[var(--as-primary)] text-[var(--as-primary-fg)]',\n secondary:\n 'border-transparent bg-[var(--as-secondary)] text-[var(--as-secondary-fg)]',\n outline: 'border-[var(--as-border)] text-[var(--as-fg)]',\n success: 'border-transparent bg-[var(--as-success)] text-[var(--as-success-fg)]',\n warning: 'border-transparent bg-[var(--as-warning)] text-[var(--as-warning-fg)]',\n danger: 'border-transparent bg-[var(--as-danger)] text-[var(--as-danger-fg)]',\n ai: 'border-transparent bg-[var(--as-ai)] text-[var(--as-ai-fg)]',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nexport interface BadgeProps\n extends React.ComponentProps<'span'>,\n VariantProps<typeof badgeVariants> {}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { className, variant, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n data-as=\"badge\"\n className={cn(badgeVariants({ variant, className }))}\n {...props}\n />\n )\n})\n\nexport { badgeVariants }\n\n\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TimePickerContent } from './chunk-
|
|
1
|
+
import { TimePickerContent } from './chunk-CR42EAF4.js';
|
|
2
2
|
import { Popover, PopoverTrigger, PopoverContent } from './chunk-SIIY2EGI.js';
|
|
3
3
|
import { cn } from './chunk-BLJWR4ZV.js';
|
|
4
4
|
import * as React from 'react';
|
|
@@ -159,5 +159,5 @@ var TimeList = React.forwardRef(
|
|
|
159
159
|
);
|
|
160
160
|
|
|
161
161
|
export { TimeList };
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
162
|
+
//# sourceMappingURL=chunk-GVOC3ARM.js.map
|
|
163
|
+
//# sourceMappingURL=chunk-GVOC3ARM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/time-list/TimeList.tsx"],"names":["ClockIcon","TimeList"],"mappings":"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","file":"chunk-TJLELOAW.js","sourcesContent":["import * as React from 'react'\nimport { Clock as ClockIcon, Plus, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover'\nimport { TimePickerContent } from '../time-picker/TimePicker'\n\nexport interface TimeListProps {\n /** List of 24-hour `HH:MM` strings. */\n value: string[]\n /** Push the fully replaced list back to the parent. */\n onChange: (next: string[]) => void\n /** Optional heading rendered above the chips. */\n label?: string\n /** Optional helper text rendered under the label. */\n hint?: string\n addLabel?: string\n emptyLabel?: string\n /** Cap the number of chips; renders a note when reached. */\n maxItems?: number\n maxItemsLabel?: (n: number) => string\n removeLabel?: string\n /** Disable every chip + the add button. */\n disabled?: boolean\n /** Diameter of the picker's clock face (default 220). */\n clockSize?: number\n className?: string\n}\n\nfunction readTime(value: string): { h12: number; min: number; period: 'AM' | 'PM' } | null {\n const m = /^(\\d{1,2}):(\\d{1,2})$/.exec((value || '').trim())\n if (!m) return null\n const h = parseInt(m[1]!, 10)\n const min = parseInt(m[2]!, 10)\n if (Number.isNaN(h) || Number.isNaN(min) || h < 0 || h > 23 || min < 0 || min > 59) return null\n const period: 'AM' | 'PM' = h < 12 ? 'AM' : 'PM'\n const h12 = h === 0 ? 12 : h > 12 ? h - 12 : h\n return { h12, min, period }\n}\n\ninterface ChipProps {\n value: string\n onChange: (v: string) => void\n onRemove: () => void\n clockSize: number\n removeLabel: string\n disabled?: boolean\n}\n\nconst TimeChip: React.FC<ChipProps> = ({\n value,\n onChange,\n onRemove,\n clockSize,\n removeLabel,\n disabled,\n}) => {\n const [open, setOpen] = React.useState(false)\n const parsed = readTime(value ?? '')\n\n const main = parsed ? parsed.h12.toString() : '--'\n const minStr = parsed ? parsed.min.toString().padStart(2, '0') : '--'\n const period = parsed ? parsed.period : ''\n\n return (\n <Popover open={open && !disabled} onOpenChange={setOpen}>\n <span className=\"relative inline-flex group\">\n <PopoverTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n aria-label={`Edit ${value}`}\n className={cn(\n 'inline-flex cursor-pointer select-none items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] py-2 pl-3 pr-7 transition-[border-color,box-shadow,translate] hover:border-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n !disabled && 'hover:-translate-y-0.5 hover:shadow-[var(--as-shadow-2)]',\n disabled && 'cursor-not-allowed opacity-50',\n )}\n >\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-[var(--as-radius-sm)] bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] text-[var(--as-primary)]\">\n <ClockIcon className=\"size-4\" aria-hidden />\n </span>\n <span className=\"flex items-baseline gap-1 tabular-nums\">\n <span className=\"text-base font-extrabold leading-none text-[var(--as-fg)]\">\n {main}:{minStr}\n </span>\n {period ? (\n <span className=\"text-[10px] font-bold uppercase tracking-wider text-[var(--as-muted-fg)]\">\n {period}\n </span>\n ) : null}\n </span>\n </button>\n </PopoverTrigger>\n {!disabled ? (\n <button\n type=\"button\"\n aria-label={removeLabel}\n onClick={(e) => {\n e.stopPropagation()\n onRemove()\n }}\n className=\"absolute right-1.5 top-1/2 z-10 flex size-5 cursor-pointer items-center justify-center rounded-full bg-[var(--as-surface-raised)] text-[var(--as-muted-fg)] opacity-0 transition-all hover:bg-[var(--as-danger)] hover:text-[var(--as-danger-fg)] focus-visible:opacity-100 group-hover:opacity-100\"\n style={{ translate: '0 -50%' }}\n >\n <X className=\"size-3\" aria-hidden />\n </button>\n ) : null}\n <PopoverContent\n align=\"center\"\n sideOffset={6}\n collisionPadding={8}\n aria-label={`Edit ${value}`}\n className=\"w-[300px] p-0\"\n >\n <TimePickerContent\n value={value}\n onChange={onChange}\n onDone={() => setOpen(false)}\n size={clockSize}\n />\n </PopoverContent>\n </span>\n </Popover>\n )\n}\n\n/**\n * Chip-based editor for a list of `HH:MM` times: each chip opens the clock\n * picker, an add pill appends a slot. For a single time use `TimePicker`.\n */\nexport const TimeList = React.forwardRef<HTMLDivElement, TimeListProps>(\n function TimeList(\n {\n value,\n onChange,\n label,\n hint,\n addLabel = 'Add time',\n emptyLabel,\n maxItems,\n maxItemsLabel = (n) => `Maximum of ${n} items.`,\n removeLabel = 'Remove time',\n disabled = false,\n clockSize = 220,\n className,\n },\n ref,\n ) {\n const updateAt = React.useCallback(\n (i: number, v: string) => {\n if (disabled) return\n const next = value.slice()\n next[i] = v\n onChange(next)\n },\n [disabled, value, onChange],\n )\n\n const removeAt = React.useCallback(\n (i: number) => {\n if (disabled) return\n onChange(value.filter((_, idx) => idx !== i))\n },\n [disabled, value, onChange],\n )\n\n const add = React.useCallback(() => {\n if (disabled) return\n if (maxItems !== undefined && value.length >= maxItems) return\n onChange([...value, '09:00'])\n }, [disabled, maxItems, value, onChange])\n\n const atMax = maxItems !== undefined && value.length >= maxItems\n\n return (\n <div ref={ref} data-as=\"time-list\" className={cn('flex flex-col gap-2', className)}>\n {label || hint ? (\n <div>\n {label ? (\n <p className=\"px-1 text-[10px] font-bold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {label}\n </p>\n ) : null}\n {hint ? (\n <p className=\"mt-0.5 px-1 text-[11px] text-[var(--as-muted-fg)]\">{hint}</p>\n ) : null}\n </div>\n ) : null}\n\n {value.length === 0 && emptyLabel ? (\n <p className=\"px-1 py-2 text-xs italic text-[var(--as-muted-fg)]\">{emptyLabel}</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {value.map((time, i) => (\n <TimeChip\n key={`${i}-${time}`}\n value={time}\n onChange={(v) => updateAt(i, v)}\n onRemove={() => removeAt(i)}\n clockSize={clockSize}\n removeLabel={removeLabel}\n disabled={disabled}\n />\n ))}\n </div>\n )}\n\n {!atMax && !disabled ? (\n <button\n type=\"button\"\n onClick={add}\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-[var(--as-radius)] border border-dashed border-[var(--as-border)] py-1.5 pl-2.5 pr-3 text-xs font-bold text-[var(--as-muted-fg)] transition-colors hover:border-[var(--as-primary)] hover:bg-[color-mix(in_srgb,var(--as-primary)_6%,transparent)] hover:text-[var(--as-primary)]\"\n >\n <Plus className=\"size-3.5\" aria-hidden />\n {addLabel}\n </button>\n ) : null}\n\n {atMax && maxItems !== undefined ? (\n <p className=\"text-[10px] italic text-[var(--as-muted-fg)]\">{maxItemsLabel(maxItems)}</p>\n ) : null}\n </div>\n )\n },\n)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/time-list/TimeList.tsx"],"names":["ClockIcon","TimeList"],"mappings":"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","file":"chunk-GVOC3ARM.js","sourcesContent":["import * as React from 'react'\nimport { Clock as ClockIcon, Plus, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover'\nimport { TimePickerContent } from '../time-picker/TimePicker'\n\nexport interface TimeListProps {\n /** List of 24-hour `HH:MM` strings. */\n value: string[]\n /** Push the fully replaced list back to the parent. */\n onChange: (next: string[]) => void\n /** Optional heading rendered above the chips. */\n label?: string\n /** Optional helper text rendered under the label. */\n hint?: string\n addLabel?: string\n emptyLabel?: string\n /** Cap the number of chips; renders a note when reached. */\n maxItems?: number\n maxItemsLabel?: (n: number) => string\n removeLabel?: string\n /** Disable every chip + the add button. */\n disabled?: boolean\n /** Diameter of the picker's clock face (default 220). */\n clockSize?: number\n className?: string\n}\n\nfunction readTime(value: string): { h12: number; min: number; period: 'AM' | 'PM' } | null {\n const m = /^(\\d{1,2}):(\\d{1,2})$/.exec((value || '').trim())\n if (!m) return null\n const h = parseInt(m[1]!, 10)\n const min = parseInt(m[2]!, 10)\n if (Number.isNaN(h) || Number.isNaN(min) || h < 0 || h > 23 || min < 0 || min > 59) return null\n const period: 'AM' | 'PM' = h < 12 ? 'AM' : 'PM'\n const h12 = h === 0 ? 12 : h > 12 ? h - 12 : h\n return { h12, min, period }\n}\n\ninterface ChipProps {\n value: string\n onChange: (v: string) => void\n onRemove: () => void\n clockSize: number\n removeLabel: string\n disabled?: boolean\n}\n\nconst TimeChip: React.FC<ChipProps> = ({\n value,\n onChange,\n onRemove,\n clockSize,\n removeLabel,\n disabled,\n}) => {\n const [open, setOpen] = React.useState(false)\n const parsed = readTime(value ?? '')\n\n const main = parsed ? parsed.h12.toString() : '--'\n const minStr = parsed ? parsed.min.toString().padStart(2, '0') : '--'\n const period = parsed ? parsed.period : ''\n\n return (\n <Popover open={open && !disabled} onOpenChange={setOpen}>\n <span className=\"relative inline-flex group\">\n <PopoverTrigger asChild disabled={disabled}>\n <button\n type=\"button\"\n aria-label={`Edit ${value}`}\n className={cn(\n 'inline-flex cursor-pointer select-none items-center gap-2 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] py-2 pl-3 pr-7 transition-[border-color,box-shadow,translate] hover:border-[var(--as-primary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n !disabled && 'hover:-translate-y-0.5 hover:shadow-[var(--as-shadow-2)]',\n disabled && 'cursor-not-allowed opacity-50',\n )}\n >\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-[var(--as-radius-sm)] bg-[color-mix(in_srgb,var(--as-primary)_12%,transparent)] text-[var(--as-primary)]\">\n <ClockIcon className=\"size-4\" aria-hidden />\n </span>\n <span className=\"flex items-baseline gap-1 tabular-nums\">\n <span className=\"text-base font-extrabold leading-none text-[var(--as-fg)]\">\n {main}:{minStr}\n </span>\n {period ? (\n <span className=\"text-[10px] font-bold uppercase tracking-wider text-[var(--as-muted-fg)]\">\n {period}\n </span>\n ) : null}\n </span>\n </button>\n </PopoverTrigger>\n {!disabled ? (\n <button\n type=\"button\"\n aria-label={removeLabel}\n onClick={(e) => {\n e.stopPropagation()\n onRemove()\n }}\n className=\"absolute right-1.5 top-1/2 z-10 flex size-5 cursor-pointer items-center justify-center rounded-full bg-[var(--as-surface-raised)] text-[var(--as-muted-fg)] opacity-0 transition-all hover:bg-[var(--as-danger)] hover:text-[var(--as-danger-fg)] focus-visible:opacity-100 group-hover:opacity-100\"\n style={{ translate: '0 -50%' }}\n >\n <X className=\"size-3\" aria-hidden />\n </button>\n ) : null}\n <PopoverContent\n align=\"center\"\n sideOffset={6}\n collisionPadding={8}\n aria-label={`Edit ${value}`}\n className=\"w-[300px] p-0\"\n >\n <TimePickerContent\n value={value}\n onChange={onChange}\n onDone={() => setOpen(false)}\n size={clockSize}\n />\n </PopoverContent>\n </span>\n </Popover>\n )\n}\n\n/**\n * Chip-based editor for a list of `HH:MM` times: each chip opens the clock\n * picker, an add pill appends a slot. For a single time use `TimePicker`.\n */\nexport const TimeList = React.forwardRef<HTMLDivElement, TimeListProps>(\n function TimeList(\n {\n value,\n onChange,\n label,\n hint,\n addLabel = 'Add time',\n emptyLabel,\n maxItems,\n maxItemsLabel = (n) => `Maximum of ${n} items.`,\n removeLabel = 'Remove time',\n disabled = false,\n clockSize = 220,\n className,\n },\n ref,\n ) {\n const updateAt = React.useCallback(\n (i: number, v: string) => {\n if (disabled) return\n const next = value.slice()\n next[i] = v\n onChange(next)\n },\n [disabled, value, onChange],\n )\n\n const removeAt = React.useCallback(\n (i: number) => {\n if (disabled) return\n onChange(value.filter((_, idx) => idx !== i))\n },\n [disabled, value, onChange],\n )\n\n const add = React.useCallback(() => {\n if (disabled) return\n if (maxItems !== undefined && value.length >= maxItems) return\n onChange([...value, '09:00'])\n }, [disabled, maxItems, value, onChange])\n\n const atMax = maxItems !== undefined && value.length >= maxItems\n\n return (\n <div ref={ref} data-as=\"time-list\" className={cn('flex flex-col gap-2', className)}>\n {label || hint ? (\n <div>\n {label ? (\n <p className=\"px-1 text-[10px] font-bold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {label}\n </p>\n ) : null}\n {hint ? (\n <p className=\"mt-0.5 px-1 text-[11px] text-[var(--as-muted-fg)]\">{hint}</p>\n ) : null}\n </div>\n ) : null}\n\n {value.length === 0 && emptyLabel ? (\n <p className=\"px-1 py-2 text-xs italic text-[var(--as-muted-fg)]\">{emptyLabel}</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {value.map((time, i) => (\n <TimeChip\n key={`${i}-${time}`}\n value={time}\n onChange={(v) => updateAt(i, v)}\n onRemove={() => removeAt(i)}\n clockSize={clockSize}\n removeLabel={removeLabel}\n disabled={disabled}\n />\n ))}\n </div>\n )}\n\n {!atMax && !disabled ? (\n <button\n type=\"button\"\n onClick={add}\n className=\"inline-flex cursor-pointer items-center gap-1.5 rounded-[var(--as-radius)] border border-dashed border-[var(--as-border)] py-1.5 pl-2.5 pr-3 text-xs font-bold text-[var(--as-muted-fg)] transition-colors hover:border-[var(--as-primary)] hover:bg-[color-mix(in_srgb,var(--as-primary)_6%,transparent)] hover:text-[var(--as-primary)]\"\n >\n <Plus className=\"size-3.5\" aria-hidden />\n {addLabel}\n </button>\n ) : null}\n\n {atMax && maxItems !== undefined ? (\n <p className=\"text-[10px] italic text-[var(--as-muted-fg)]\">{maxItemsLabel(maxItems)}</p>\n ) : null}\n </div>\n )\n },\n)\n"]}
|