@avenue-ticketing/ui 0.4.0 → 0.5.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/dist/react/avatar.d.ts +42 -0
- package/dist/react/avatar.js +159 -0
- package/dist/react/avatar.js.map +1 -0
- package/dist/react/badge.d.ts +12 -0
- package/dist/react/badge.js +35 -1
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button.d.ts +1 -1
- package/dist/react/button.js +3 -3
- package/dist/react/button.js.map +1 -1
- package/dist/react/calendar.d.ts +13 -0
- package/dist/react/calendar.js +4639 -0
- package/dist/react/calendar.js.map +1 -0
- package/dist/react/card.d.ts +11 -0
- package/dist/react/card.js +113 -0
- package/dist/react/card.js.map +1 -0
- package/dist/react/checkbox.d.ts +11 -0
- package/dist/react/checkbox.js +131 -0
- package/dist/react/checkbox.js.map +1 -0
- package/dist/react/datetime-picker.d.ts +21 -0
- package/dist/react/datetime-picker.js +6124 -0
- package/dist/react/datetime-picker.js.map +1 -0
- package/dist/react/dialog.js +1 -1
- package/dist/react/dialog.js.map +1 -1
- package/dist/react/dropdown.d.ts +26 -9
- package/dist/react/dropdown.js +194 -96
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/input.d.ts +7 -0
- package/dist/react/input.js +15 -2
- package/dist/react/input.js.map +1 -1
- package/dist/react/pagination.d.ts +28 -0
- package/dist/react/pagination.js +262 -0
- package/dist/react/pagination.js.map +1 -0
- package/dist/react/popover.d.ts +76 -0
- package/dist/react/popover.js +564 -0
- package/dist/react/popover.js.map +1 -0
- package/dist/react/scroll-header.js +13 -1
- package/dist/react/scroll-header.js.map +1 -1
- package/dist/react/scroll-wheel.d.ts +45 -0
- package/dist/react/scroll-wheel.js +557 -0
- package/dist/react/scroll-wheel.js.map +1 -0
- package/dist/react/select.d.ts +62 -0
- package/dist/react/select.js +889 -0
- package/dist/react/select.js.map +1 -0
- package/dist/react/sheet.js +1 -1
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/switch.d.ts +38 -0
- package/dist/react/switch.js +117 -0
- package/dist/react/switch.js.map +1 -0
- package/dist/react/table-pagination.d.ts +15 -0
- package/dist/react/table-pagination.js +1153 -0
- package/dist/react/table-pagination.js.map +1 -0
- package/dist/react/table-view/column-menu.d.ts +15 -0
- package/dist/react/table-view/column-menu.js +918 -0
- package/dist/react/table-view/column-menu.js.map +1 -0
- package/dist/react/table-view/index.d.ts +70 -0
- package/dist/react/table-view/index.js +2155 -0
- package/dist/react/table-view/index.js.map +1 -0
- package/dist/react/table.d.ts +86 -0
- package/dist/react/table.js +414 -0
- package/dist/react/table.js.map +1 -0
- package/dist/react/tabs.d.ts +9 -3
- package/dist/react/tabs.js +204 -48
- package/dist/react/tabs.js.map +1 -1
- package/dist/react/textarea.d.ts +6 -0
- package/dist/react/textarea.js +33 -0
- package/dist/react/textarea.js.map +1 -0
- package/dist/react/time-picker.d.ts +22 -0
- package/dist/react/time-picker.js +856 -0
- package/dist/react/time-picker.js.map +1 -0
- package/dist/react/tooltip.d.ts +45 -0
- package/dist/react/tooltip.js +540 -0
- package/dist/react/tooltip.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/button.tsx","../../src/react/scroll-wheel-axis.ts","../../src/react/scroll-wheel.tsx","../../src/react/time-picker.tsx"],"names":["React","jsx","React3","jsxs"],"mappings":"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","file":"time-picker.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst sizeClass = {\n xs: \"h-8 min-h-8 gap-2 px-4 text-sm has-[>svg]:px-3 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"h-10 min-h-10 gap-2 px-5 text-sm has-[>svg]:px-4 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"h-11 min-h-11 gap-2 px-6 text-base has-[>svg]:px-5 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\n/** Square hit targets for `iconOnly` — same keys as `sizeClass` (`default` | `lg`). */\nconst iconOnlySizeClass = {\n xs: \"size-8 min-h-8 min-w-8 gap-0 p-0 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"size-10 min-h-10 min-w-10 gap-0 p-0 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"size-11 min-h-11 min-w-11 gap-0 p-0 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\nconst roundedClass = {\n full: \"rounded-full\",\n lg: \"rounded-lg\",\n md: \"rounded-md\",\n} as const;\n\nconst variantClass = {\n primary:\n \"bg-primary text-background border border-transparent hover:bg-primary/90 active:bg-primary/85\",\n secondary:\n \"bg-background text-primary border border-primary/10 hover:bg-primary/5\",\n destructive:\n \"bg-background text-red-500 border border-red-500/25 hover:bg-red-500/5\",\n success:\n \"bg-background text-green-500 border border-green-500/25 hover:bg-green-500/5\",\n} as const;\n\nexport type ButtonProps = React.ComponentProps<\"button\"> & {\n /**\n * Visual style: neutral (`secondary`, `primary`), or outline (`destructive`,\n * `success`) using Tailwind `red-500` / `green-500` text and matching borders on\n * `bg-background` (no solid fill).\n */\n variant?: keyof typeof variantClass;\n /**\n * Corner radius. Labeled buttons default to `full` (pill). `iconOnly` buttons\n * default to `md` (square corners) unless you pass `rounded` explicitly.\n */\n rounded?: keyof typeof roundedClass;\n /** Height and horizontal padding: `default` or `lg` only. */\n size?: keyof typeof sizeClass;\n /**\n * Square icon-only control; same `size` presets (`default` | `lg`). Pair with\n * `aria-label` (or `title`) when there is no visible text.\n */\n iconOnly?: boolean;\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n type = \"button\",\n variant = \"secondary\",\n rounded: roundedProp,\n size = \"default\",\n iconOnly = false,\n disabled,\n ...props\n },\n ref,\n ) => {\n const rounded = roundedProp ?? (iconOnly ? \"md\" : \"full\");\n\n return (\n <button\n type={type}\n disabled={disabled}\n data-slot=\"button\"\n data-icon-only={iconOnly ? \"\" : undefined}\n className={cn(\n \"inline-flex shrink-0 cursor-pointer items-center justify-center whitespace-nowrap outline-none scale-100 transition-[color,background-color,box-shadow,transform] duration-150 ease-out active:scale-[0.98] active:duration-100 active:ease-linear [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring font-medium lg:tracking-wide focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n iconOnly ? iconOnlySizeClass[size] : sizeClass[size],\n roundedClass[rounded],\n variantClass[variant],\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button };\n","/**\n * Axis-local math and scroll writes for {@link ScrollWheel} (vertical vs horizontal).\n * Keeps the React component free of duplicated `horizontal ? … : …` branches.\n */\n\nexport const MAIN_AXIS_MIN_PX = 8;\n\nexport function viewportCenter(horizontal: boolean, cr: DOMRect): number {\n return horizontal ? cr.left + cr.width / 2 : cr.top + cr.height / 2;\n}\n\nexport function itemCenter(horizontal: boolean, r: DOMRect): number {\n return horizontal ? r.left + r.width / 2 : r.top + r.height / 2;\n}\n\nexport function mainClientSize(horizontal: boolean, el: HTMLElement): number {\n return horizontal ? el.clientWidth : el.clientHeight;\n}\n\nexport function mainViewportRect(horizontal: boolean, cr: DOMRect): number {\n return horizontal ? cr.width : cr.height;\n}\n\nexport function halfMainViewport(horizontal: boolean, cr: DOMRect): number {\n return Math.max(mainViewportRect(horizontal, cr) / 2, 1);\n}\n\nexport function readScroll(horizontal: boolean, root: HTMLElement): number {\n return horizontal ? root.scrollLeft : root.scrollTop;\n}\n\nexport function addScroll(horizontal: boolean, root: HTMLElement, delta: number): void {\n if (horizontal) root.scrollLeft += delta;\n else root.scrollTop += delta;\n}\n\nfunction maxScroll(horizontal: boolean, root: HTMLElement): number {\n return horizontal\n ? Math.max(0, root.scrollWidth - root.clientWidth)\n : Math.max(0, root.scrollHeight - root.clientHeight);\n}\n\n/** Clamp `next` into [0, maxScroll] and assign to scrollLeft / scrollTop. */\nexport function setScroll(\n horizontal: boolean,\n root: HTMLElement,\n next: number,\n behavior: ScrollBehavior,\n): void {\n const max = maxScroll(horizontal, root);\n const clamped = Math.min(Math.max(0, next), max);\n if (behavior === \"smooth\") {\n if (horizontal) root.scrollTo({ left: clamped, behavior: \"smooth\" });\n else root.scrollTo({ top: clamped, behavior: \"smooth\" });\n } else if (horizontal) {\n root.scrollLeft = clamped;\n } else {\n root.scrollTop = clamped;\n }\n}\n\n/** Symmetric end padding so first/last items can reach the viewport center. */\nexport function applyEndPadding(\n horizontal: boolean,\n list: HTMLDivElement,\n root: HTMLElement,\n slotRect: DOMRect,\n): void {\n if (horizontal) {\n const pad = Math.max(0, (root.clientWidth - slotRect.width) / 2);\n list.style.paddingLeft = `${pad}px`;\n list.style.paddingRight = `${pad}px`;\n list.style.paddingTop = \"\";\n list.style.paddingBottom = \"\";\n } else {\n const pad = Math.max(0, (root.clientHeight - slotRect.height) / 2);\n list.style.paddingTop = `${pad}px`;\n list.style.paddingBottom = `${pad}px`;\n list.style.paddingLeft = \"\";\n list.style.paddingRight = \"\";\n }\n}\n\nexport function clearListPadding(list: HTMLDivElement): void {\n list.style.paddingTop = \"\";\n list.style.paddingBottom = \"\";\n list.style.paddingLeft = \"\";\n list.style.paddingRight = \"\";\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nimport {\n MAIN_AXIS_MIN_PX,\n addScroll,\n applyEndPadding,\n halfMainViewport,\n itemCenter,\n mainClientSize,\n mainViewportRect,\n readScroll,\n setScroll,\n viewportCenter,\n} from \"./scroll-wheel-axis\";\n\n/** Row marker attribute name (module-private); spread `ScrollWheel.itemProps` on rows instead. */\nconst SCROLL_WHEEL_ITEM_ATTR = \"data-scroll-wheel-item\" as const;\n\nconst scrollWheelItemProps = { [SCROLL_WHEEL_ITEM_ATTR]: \"\" } as const;\n\nconst WHEEL_SETTLE_SUPPRESS_MS = 48;\nconst WHEEL_SMOOTH_SCROLL_SUPPRESS_MS = 520;\nconst WHEEL_SETTLE_IDLE_MS = 200;\nconst WHEEL_SETTLE_SCROLLEND_BACKUP_MS = 420;\n/** After `recenterKey` changes, hide spotlight while optical center ≠ selected row (click flash). */\nconst SPOTLIGHT_CENTER_MISMATCH_SUPPRESS_MS = 280;\n\nconst SCROLL_END_SUPPORTED =\n typeof HTMLElement !== \"undefined\" &&\n \"onscrollend\" in HTMLElement.prototype;\n\nconst itemSelector = `[${SCROLL_WHEEL_ITEM_ATTR}]`;\nconst selectedItemSelector = `[${SCROLL_WHEEL_ITEM_ATTR}][data-selected]`;\n\nconst CLAMP_EPS = 1;\nconst CLAMP_ITERS = 8;\n\n/**\n * Theme border on the centered row — inline so React `className` commits do not strip it.\n * Primary @ 40% (stronger than calendar “today” `border-primary/20` for legibility on wheels).\n */\nfunction applySpotlightFrameStyles(el: HTMLElement) {\n el.style.setProperty(\"position\", \"relative\");\n el.style.setProperty(\"z-index\", \"10\");\n el.style.setProperty(\n \"border-color\",\n \"color-mix(in oklab, var(--primary) 40%, transparent)\",\n );\n}\n\nfunction stripSpotlightFrameStyles(el: HTMLElement) {\n el.style.removeProperty(\"position\");\n el.style.removeProperty(\"z-index\");\n el.style.removeProperty(\"border-color\");\n}\n\nexport type ScrollWheelOrientation = \"vertical\" | \"horizontal\";\n\nexport type ScrollWheelProps = {\n /** Bumps padding and recenters when external selection changes. Unmount to tear down timers. */\n recenterKey: string | number;\n /** `vertical` (default): `scrollTop`; `horizontal`: `scrollLeft` and row layout. */\n orientation?: ScrollWheelOrientation;\n /**\n * When true, disables scroll-settle commits and turns off **center spotlight** (proximity\n * transform/opacity on rows still updates while scrolling).\n */\n disabled?: boolean;\n /** Fires with the nearest-to-center index after scroll idle or `scrollend`. */\n onScrollSettle?: (index: number) => void;\n children: React.ReactNode;\n /** Merged onto the outer shell (e.g. `h-full` in a fixed-height host). */\n className?: string;\n /**\n * When non-empty, the nearest row **without** `data-selected` gets `data-scroll-wheel-center`,\n * your Tailwind tokens on `classList` when possible, and a **primary @ 40% border-color** via\n * **inline style** (so React `className` commits do not remove the ring). Skipping the selected\n * row avoids a duplicate ring when it sits in the center. For a short interval after `recenterKey`\n * changes, spotlight is hidden while optical center still lags the new selection (post-click flash\n * on the previous row). Whitespace-only turns spotlight off. Has no effect while `disabled` is\n * true.\n */\n centerSpotlightClassName?: string;\n};\n\nconst FADE_EDGES: Record<ScrollWheelOrientation, [string, string]> = {\n vertical: [\n \"pointer-events-none absolute inset-x-0 top-0 z-10 h-16 bg-linear-to-b from-background via-background/85 to-transparent\",\n \"pointer-events-none absolute inset-x-0 bottom-0 z-10 h-16 bg-linear-to-t from-background via-background/85 to-transparent\",\n ],\n horizontal: [\n \"pointer-events-none absolute inset-y-0 left-0 z-10 w-16 bg-linear-to-r from-background via-background/85 to-transparent\",\n \"pointer-events-none absolute inset-y-0 right-0 z-10 w-16 bg-linear-to-l from-background via-background/85 to-transparent\",\n ],\n};\n\n/**\n * Scroll list: value = item nearest the viewport center. End padding, proximity, `scrollend` or\n * idle settle, touch + pen gesture suppression (iOS-safe touch ids), programmatic recenter.\n */\nfunction ScrollWheelRoot({\n recenterKey,\n orientation = \"vertical\",\n disabled,\n onScrollSettle,\n children,\n className,\n centerSpotlightClassName,\n}: ScrollWheelProps) {\n const horizontal = orientation === \"horizontal\";\n\n const centerSpotlightTokens = React.useMemo(\n () => centerSpotlightClassName?.trim().split(/\\s+/).filter(Boolean) ?? [],\n [centerSpotlightClassName],\n );\n const centerSpotlightActive =\n centerSpotlightTokens.length > 0 && disabled !== true;\n const centerSpotlightFingerprint =\n centerSpotlightClassName?.trim() ?? \"\";\n\n const rootRef = React.useRef<HTMLDivElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n const rafProximityRef = React.useRef(0);\n const settleTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const lastSettledIdxRef = React.useRef<number | null>(null);\n const suppressSettleUntilRef = React.useRef(0);\n const wasPopoverOpenRef = React.useRef(false);\n const prevRecenterKeyRef = React.useRef<string | number | undefined>(undefined);\n const penPointerDownRef = React.useRef(false);\n const touchIdsOnRootRef = React.useRef<Set<number>>(new Set());\n\n /** DOM node that currently has spotlight classes (imperative — avoids React re-renders on scroll). */\n const spotlightDomRef = React.useRef<HTMLElement | null>(null);\n const spotlightAddedClassesRef = React.useRef(\n new WeakMap<HTMLElement, ReadonlySet<string>>(),\n );\n const spotlightFingerprintRef = React.useRef(\"\");\n const spotlightSuppressCenterMismatchUntilRef = React.useRef(0);\n\n const stripSpotlightFromEl = React.useCallback((el: HTMLElement | null) => {\n if (!el) return;\n const added = spotlightAddedClassesRef.current.get(el);\n if (added) {\n added.forEach((token) => el.classList.remove(token));\n spotlightAddedClassesRef.current.delete(el);\n }\n el.removeAttribute(\"data-scroll-wheel-center\");\n stripSpotlightFrameStyles(el);\n }, []);\n\n const moveSpotlightDom = React.useCallback(\n (next: HTMLElement | null, tokens: readonly string[]) => {\n const prev = spotlightDomRef.current;\n if (tokens.length === 0) {\n if (prev) stripSpotlightFromEl(prev);\n spotlightDomRef.current = null;\n spotlightFingerprintRef.current = \"\";\n return;\n }\n if (!next) return;\n if (prev && prev !== next) stripSpotlightFromEl(prev);\n stripSpotlightFromEl(next);\n const newlyAdded = new Set<string>();\n for (const token of tokens) {\n if (!next.classList.contains(token)) {\n next.classList.add(token);\n newlyAdded.add(token);\n }\n }\n if (newlyAdded.size > 0) {\n spotlightAddedClassesRef.current.set(next, newlyAdded);\n }\n next.setAttribute(\"data-scroll-wheel-center\", \"\");\n applySpotlightFrameStyles(next);\n spotlightDomRef.current = next;\n },\n [stripSpotlightFromEl],\n );\n\n const suppressingGesture = () =>\n touchIdsOnRootRef.current.size > 0 || penPointerDownRef.current;\n\n const runScrollCommitRef = React.useRef<() => void>(() => {});\n const tryCommitAfterGestureRef = React.useRef<() => void>(() => {});\n const clearSettleTimerRef = React.useRef<() => void>(() => {});\n\n const clearSettleTimer = React.useCallback(() => {\n if (settleTimerRef.current != null) {\n clearTimeout(settleTimerRef.current);\n settleTimerRef.current = null;\n }\n }, []);\n clearSettleTimerRef.current = clearSettleTimer;\n\n const applyProximityStyles = React.useCallback(() => {\n const root = rootRef.current;\n if (!root) return;\n const slots = root.querySelectorAll<HTMLElement>(itemSelector);\n if (slots.length === 0) return;\n const cr = root.getBoundingClientRect();\n const mid = viewportCenter(horizontal, cr);\n const half = halfMainViewport(horizontal, cr);\n const nodes = [...slots];\n const dists = nodes.map((node) => {\n const r = node.getBoundingClientRect();\n return Math.abs(itemCenter(horizontal, r) - mid);\n });\n\n // Single nearest slot (same tie-break as findBestIndex).\n let bestI = 0;\n let bestD = Number.POSITIVE_INFINITY;\n nodes.forEach((node, i) => {\n const dist = dists[i]!;\n const t = Math.min(1, dist / half);\n node.style.transform = `scale(${1 - 0.42 * t})`;\n node.style.opacity = String(1 - 0.52 * t);\n if (dist < bestD) {\n bestD = dist;\n bestI = i;\n }\n });\n\n if (!centerSpotlightActive) {\n if (\n spotlightDomRef.current !== null ||\n spotlightFingerprintRef.current !== \"\"\n ) {\n moveSpotlightDom(null, []);\n }\n return;\n }\n\n const selectedIdx = nodes.findIndex((n) => n.hasAttribute(\"data-selected\"));\n\n const el = nodes[bestI]!;\n // After a click / external value change, `data-selected` moves before scroll re-centers; the\n // old row can still be nearest the optical center but is no longer selected — suppress the\n // ring until `recenterKey`-driven scroll catches up (see layout effect).\n if (\n selectedIdx >= 0 &&\n bestI !== selectedIdx &&\n Date.now() < spotlightSuppressCenterMismatchUntilRef.current\n ) {\n if (\n spotlightDomRef.current !== null ||\n spotlightFingerprintRef.current !== \"\"\n ) {\n moveSpotlightDom(null, []);\n }\n spotlightFingerprintRef.current = \"\";\n return;\n }\n\n // No spotlight on the committed row when it sits in the center (variant already shows it).\n if (el.hasAttribute(\"data-selected\")) {\n if (\n spotlightDomRef.current !== null ||\n spotlightFingerprintRef.current !== \"\"\n ) {\n moveSpotlightDom(null, []);\n }\n spotlightFingerprintRef.current = \"\";\n return;\n }\n\n const fp = centerSpotlightFingerprint;\n if (\n el === spotlightDomRef.current &&\n fp === spotlightFingerprintRef.current\n ) {\n // React may have re-applied `className` from the row host and dropped our tokens; inline\n // frame styles are re-applied every frame while this row stays centered (cheap).\n applySpotlightFrameStyles(el);\n return;\n }\n moveSpotlightDom(el, centerSpotlightTokens);\n spotlightFingerprintRef.current = fp;\n }, [\n horizontal,\n centerSpotlightActive,\n centerSpotlightTokens,\n centerSpotlightFingerprint,\n moveSpotlightDom,\n ]);\n\n const queueProximity = React.useCallback(() => {\n cancelAnimationFrame(rafProximityRef.current);\n rafProximityRef.current = requestAnimationFrame(applyProximityStyles);\n }, [applyProximityStyles]);\n\n React.useLayoutEffect(() => {\n if (disabled === true) {\n moveSpotlightDom(null, []);\n spotlightFingerprintRef.current = \"\";\n return;\n }\n if (centerSpotlightActive) {\n queueProximity();\n }\n }, [disabled, centerSpotlightActive, moveSpotlightDom, queueProximity]);\n\n const applyWheelPadding = React.useCallback(() => {\n const list = listRef.current;\n const root = rootRef.current;\n if (!list || !root) return;\n const slot = root.querySelector<HTMLElement>(itemSelector);\n if (!slot) return;\n applyEndPadding(horizontal, list, root, slot.getBoundingClientRect());\n }, [horizontal]);\n\n const findBestIndex = React.useCallback((): number => {\n const root = rootRef.current;\n if (!root) return -1;\n if (mainClientSize(horizontal, root) < MAIN_AXIS_MIN_PX) return -1;\n const slots = [...root.querySelectorAll<HTMLElement>(itemSelector)];\n if (slots.length === 0) return -1;\n const cr = root.getBoundingClientRect();\n if (mainViewportRect(horizontal, cr) < MAIN_AXIS_MIN_PX) return -1;\n const mid = viewportCenter(horizontal, cr);\n let best = 0;\n let bestD = Number.POSITIVE_INFINITY;\n slots.forEach((node, i) => {\n const d = Math.abs(itemCenter(horizontal, node.getBoundingClientRect()) - mid);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n });\n return best;\n }, [horizontal]);\n\n const clampWheelScroll = React.useCallback(() => {\n const root = rootRef.current;\n if (!root || mainClientSize(horizontal, root) < MAIN_AXIS_MIN_PX) return;\n const slots = [...root.querySelectorAll<HTMLElement>(itemSelector)];\n if (slots.length < 2) return;\n\n for (let i = 0; i < CLAMP_ITERS; i += 1) {\n const rootRect = root.getBoundingClientRect();\n const mid = viewportCenter(horizontal, rootRect);\n const fr = slots[0]!.getBoundingClientRect();\n const lr = slots[slots.length - 1]!.getBoundingClientRect();\n const firstMid = itemCenter(horizontal, fr);\n const lastMid = itemCenter(horizontal, lr);\n\n if (firstMid > mid + CLAMP_EPS) {\n suppressSettleUntilRef.current = Date.now() + WHEEL_SETTLE_SUPPRESS_MS;\n addScroll(horizontal, root, firstMid - mid);\n continue;\n }\n if (lastMid < mid - CLAMP_EPS) {\n suppressSettleUntilRef.current = Date.now() + WHEEL_SETTLE_SUPPRESS_MS;\n addScroll(horizontal, root, lastMid - mid);\n continue;\n }\n break;\n }\n }, [horizontal]);\n\n const runScrollCommit = React.useCallback(() => {\n if (suppressingGesture() || !onScrollSettle || disabled) return;\n if (Date.now() < suppressSettleUntilRef.current) return;\n clampWheelScroll();\n const idx = findBestIndex();\n if (idx < 0) return;\n if (idx !== lastSettledIdxRef.current) {\n lastSettledIdxRef.current = idx;\n onScrollSettle(idx);\n }\n queueProximity();\n }, [onScrollSettle, disabled, findBestIndex, queueProximity, clampWheelScroll]);\n runScrollCommitRef.current = runScrollCommit;\n\n const scrollSelectedToCenter = React.useCallback(\n (scrollBehavior: ScrollBehavior = \"auto\") => {\n const root = rootRef.current;\n if (!root) return;\n const selected = root.querySelector<HTMLElement>(selectedItemSelector);\n lastSettledIdxRef.current = null;\n suppressSettleUntilRef.current =\n Date.now() +\n (scrollBehavior === \"smooth\"\n ? WHEEL_SMOOTH_SCROLL_SUPPRESS_MS\n : WHEEL_SETTLE_SUPPRESS_MS);\n if (selected) {\n const rootRect = root.getBoundingClientRect();\n const sr = selected.getBoundingClientRect();\n const delta =\n itemCenter(horizontal, sr) - viewportCenter(horizontal, rootRect);\n setScroll(\n horizontal,\n root,\n readScroll(horizontal, root) + delta,\n scrollBehavior,\n );\n }\n queueProximity();\n },\n [horizontal, queueProximity],\n );\n\n const scheduleIdleSettle = React.useCallback(() => {\n if (!onScrollSettle || disabled || suppressingGesture()) return;\n clearSettleTimer();\n settleTimerRef.current = setTimeout(\n runScrollCommit,\n SCROLL_END_SUPPORTED ? WHEEL_SETTLE_SCROLLEND_BACKUP_MS : WHEEL_SETTLE_IDLE_MS,\n );\n }, [onScrollSettle, disabled, clearSettleTimer, runScrollCommit]);\n\n const tryCommitAfterGestureRelease = React.useCallback(() => {\n if (suppressingGesture()) return;\n const root = rootRef.current;\n if (!root) return;\n const s0 = readScroll(horizontal, root);\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (suppressingGesture()) return;\n const r = rootRef.current;\n if (!r) return;\n if (readScroll(horizontal, r) !== s0) {\n queueProximity();\n scheduleIdleSettle();\n return;\n }\n runScrollCommit();\n });\n });\n }, [horizontal, runScrollCommit, scheduleIdleSettle, queueProximity]);\n tryCommitAfterGestureRef.current = tryCommitAfterGestureRelease;\n\n const onPointerDownCapture = React.useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (!onScrollSettle || disabled || e.pointerType !== \"pen\") return;\n penPointerDownRef.current = true;\n clearSettleTimer();\n },\n [onScrollSettle, disabled, clearSettleTimer],\n );\n\n const onTouchStartCapture = React.useCallback(\n (e: React.TouchEvent<HTMLDivElement>) => {\n if (!onScrollSettle || disabled) return;\n for (let i = 0; i < e.changedTouches.length; i += 1) {\n touchIdsOnRootRef.current.add(e.changedTouches[i]!.identifier);\n }\n clearSettleTimer();\n },\n [onScrollSettle, disabled, clearSettleTimer],\n );\n\n const onScroll = React.useCallback(() => {\n queueProximity();\n if (!onScrollSettle || disabled) return;\n if (suppressingGesture()) clearSettleTimer();\n else scheduleIdleSettle();\n }, [queueProximity, onScrollSettle, disabled, clearSettleTimer, scheduleIdleSettle]);\n\n React.useEffect(() => {\n if (disabled || !onScrollSettle) return;\n\n const onPenEnd = (e: PointerEvent) => {\n if (e.pointerType !== \"pen\" || !penPointerDownRef.current) return;\n penPointerDownRef.current = false;\n tryCommitAfterGestureRef.current();\n };\n\n const onTouchEnd = (e: TouchEvent) => {\n for (let i = 0; i < e.changedTouches.length; i += 1) {\n touchIdsOnRootRef.current.delete(e.changedTouches[i]!.identifier);\n }\n if (touchIdsOnRootRef.current.size === 0) tryCommitAfterGestureRef.current();\n };\n\n window.addEventListener(\"pointerup\", onPenEnd, true);\n window.addEventListener(\"pointercancel\", onPenEnd, true);\n window.addEventListener(\"touchend\", onTouchEnd, true);\n window.addEventListener(\"touchcancel\", onTouchEnd, true);\n return () => {\n window.removeEventListener(\"pointerup\", onPenEnd, true);\n window.removeEventListener(\"pointercancel\", onPenEnd, true);\n window.removeEventListener(\"touchend\", onTouchEnd, true);\n window.removeEventListener(\"touchcancel\", onTouchEnd, true);\n };\n }, [disabled, onScrollSettle]);\n\n React.useLayoutEffect(() => {\n let followRaf1 = 0;\n let followRaf2 = 0;\n let ro: ResizeObserver | undefined;\n\n const root = rootRef.current;\n if (!root) return;\n\n const onResize = () => {\n applyWheelPadding();\n queueProximity();\n };\n\n onResize();\n const prev = prevRecenterKeyRef.current;\n const firstOpen = !wasPopoverOpenRef.current;\n const selectionChanged =\n wasPopoverOpenRef.current && prev !== undefined && prev !== recenterKey;\n\n if (firstOpen || selectionChanged) {\n if (selectionChanged) {\n spotlightSuppressCenterMismatchUntilRef.current =\n Date.now() + SPOTLIGHT_CENTER_MISMATCH_SUPPRESS_MS;\n }\n const reducedMotion =\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n const behavior: ScrollBehavior =\n selectionChanged && !reducedMotion ? \"smooth\" : \"auto\";\n scrollSelectedToCenter(behavior);\n if (firstOpen) {\n followRaf1 = requestAnimationFrame(() => {\n followRaf2 = requestAnimationFrame(() => {\n scrollSelectedToCenter(\"auto\");\n });\n });\n }\n }\n\n prevRecenterKeyRef.current = recenterKey;\n wasPopoverOpenRef.current = true;\n\n if (typeof ResizeObserver !== \"undefined\") {\n ro = new ResizeObserver(onResize);\n ro.observe(root);\n }\n\n return () => {\n ro?.disconnect();\n cancelAnimationFrame(followRaf1);\n cancelAnimationFrame(followRaf2);\n };\n }, [\n recenterKey,\n orientation,\n centerSpotlightClassName,\n applyWheelPadding,\n scrollSelectedToCenter,\n queueProximity,\n ]);\n\n React.useLayoutEffect(() => {\n return () => {\n penPointerDownRef.current = false;\n touchIdsOnRootRef.current.clear();\n wasPopoverOpenRef.current = false;\n prevRecenterKeyRef.current = undefined;\n lastSettledIdxRef.current = null;\n spotlightSuppressCenterMismatchUntilRef.current = 0;\n moveSpotlightDom(null, []);\n clearSettleTimer();\n cancelAnimationFrame(rafProximityRef.current);\n };\n // only on unmount — do not reset recenter refs when recenterKey/orientation deps re-run\n }, []);\n\n React.useLayoutEffect(() => {\n if (!onScrollSettle || disabled || !SCROLL_END_SUPPORTED) return;\n const root = rootRef.current;\n if (!root) return;\n const onScrollEnd = () => {\n if (suppressingGesture()) return;\n clearSettleTimerRef.current();\n runScrollCommitRef.current();\n };\n root.addEventListener(\"scrollend\", onScrollEnd);\n return () => root.removeEventListener(\"scrollend\", onScrollEnd);\n }, [disabled, onScrollSettle]);\n\n /** Parent may replace row elements (e.g. value change); re-sync spotlight after commit. */\n React.useLayoutEffect(() => {\n if (!centerSpotlightActive) return;\n queueProximity();\n }, [centerSpotlightActive, children, queueProximity]);\n\n const fadeClasses = FADE_EDGES[orientation];\n\n return (\n <div\n className={cn(\n \"relative z-2 flex h-full min-h-0 min-w-0 flex-1 basis-0 overflow-hidden\",\n horizontal ? \"flex-row\" : \"flex-col\",\n className,\n )}\n data-scroll-wheel-orientation={orientation}\n >\n <div\n className={cn(\n \"relative isolate flex min-h-0 min-w-0 flex-1\",\n horizontal ? \"flex-row\" : \"flex-col\",\n )}\n >\n <div\n ref={rootRef}\n className={cn(\n \"relative z-0 min-h-0 min-w-0 flex-1 [-ms-overflow-style:none] [scrollbar-width:none] [-webkit-overflow-scrolling:touch] [&::-webkit-scrollbar]:hidden\",\n horizontal\n ? \"overflow-x-auto overflow-y-hidden overscroll-x-contain\"\n : \"overflow-y-auto overflow-x-hidden overscroll-y-contain\",\n )}\n onPointerDownCapture={onPointerDownCapture}\n onTouchStartCapture={onTouchStartCapture}\n onScroll={onScroll}\n >\n <div\n ref={listRef}\n className={cn(\n \"flex gap-0.5\",\n horizontal\n ? \"min-w-min flex-row flex-nowrap items-center gap-0.5 py-0 pl-2 pr-2 [&>[data-scroll-wheel-item]]:shrink-0\"\n : \"min-h-0 flex-col px-2 pb-2\",\n )}\n >\n {children}\n </div>\n </div>\n {fadeClasses.map((cls, i) => (\n <div key={i} className={cls} aria-hidden />\n ))}\n </div>\n </div>\n );\n}\n\nconst ScrollWheelMemo = React.memo(ScrollWheelRoot);\nScrollWheelMemo.displayName = \"ScrollWheel\";\n\n/** Memoized wheel — spread `ScrollWheel.itemProps` on each row. */\nexport const ScrollWheel = Object.assign(ScrollWheelMemo, {\n /** Marker props for each wheel row — spread onto the focusable control. */\n itemProps: scrollWheelItemProps,\n}) as typeof ScrollWheelMemo & { readonly itemProps: typeof scrollWheelItemProps };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Button } from \"./button\";\nimport { cn } from \"@/lib/utils\";\nimport { ScrollWheel } from \"./scroll-wheel\";\n\nconst HOURS_12 = Array.from({ length: 12 }, (_, i) => i + 1);\nconst MINUTES = Array.from({ length: 12 }, (_, i) => i * 5);\nconst AMPM = [\"AM\", \"PM\"] as const;\n\nfunction startOfLocalDay(d: Date) {\n const n = new Date(d);\n n.setHours(0, 0, 0, 0);\n return n;\n}\n\n/** When no time base exists yet, use today at local midnight. */\nexport function baseDateForTimePick(value: Date | undefined) {\n return value ?? startOfLocalDay(new Date());\n}\n\nfunction setHour12(d: Date, hour12: number) {\n const n = new Date(d);\n const pm = n.getHours() >= 12;\n n.setHours((hour12 % 12) + (pm ? 12 : 0));\n return n;\n}\n\nfunction setMinute(d: Date, m: number) {\n const n = new Date(d);\n n.setMinutes(m);\n return n;\n}\n\nfunction setAmPm(d: Date, ampm: \"AM\" | \"PM\") {\n const n = new Date(d);\n const h = n.getHours();\n if (ampm === \"PM\" && h < 12) n.setHours(h + 12);\n if (ampm === \"AM\" && h >= 12) n.setHours(h - 12);\n return n;\n}\n\nconst TIME_RAIL_CENTER_BAND_HEIGHT_CLASS = \"h-[3.25rem]\";\n/** Passed to `ScrollWheel` — `border-primary/40` (inline frame matches); slots use `border border-transparent`. */\nconst SCROLL_WHEEL_CENTER_SPOTLIGHT_CLASSNAME =\n \"relative z-10 border-primary/40\";\n\nconst slotClass = cn(\n \"box-border flex aspect-square w-full min-h-0 min-w-0 origin-center shrink-0 flex-col justify-center border border-transparent p-3.5 text-base tracking-normal shadow-none will-change-transform\",\n \"gap-0 leading-none !font-normal !h-auto ![transition-property:color,background-color,box-shadow,opacity]\",\n \"focus-visible:border-transparent focus-visible:ring-0\",\n);\n\n/** Same look as desktop columns: full `rounded-full` circles in a horizontal row. */\nconst slotClassHorizontalCircular = cn(\n slotClass,\n \"!box-border !aspect-square !h-[3.25rem] !w-[3.25rem] !max-h-[3.25rem] !max-w-[3.25rem] !min-h-0 !min-w-0 shrink-0\",\n);\n\nexport type TimePickerProps = {\n value: Date | undefined;\n onChange: (next: Date) => void;\n disabled?: boolean;\n /**\n * `vertical` (default): three columns with `scrollTop`.\n * `horizontal`: three stacked strips with `scrollLeft` — use on narrow viewports (e.g. under a calendar).\n */\n orientation?: \"vertical\" | \"horizontal\";\n className?: string;\n};\n\n/**\n * Three linked scroll columns (12h clock, 5‑minute steps, AM/PM) sharing a center highlight.\n * Built from {@link ScrollWheel}; use inside popovers or any fixed-height row.\n */\nexport function TimePicker({\n value,\n onChange,\n disabled,\n orientation = \"vertical\",\n className,\n}: TimePickerProps) {\n const horizontal = orientation === \"horizontal\";\n const onHourScrollSettle = React.useCallback(\n (idx: number) => {\n const h = HOURS_12[idx];\n if (h === undefined) return;\n const base = baseDateForTimePick(value);\n if (value && value.getHours() % 12 === h % 12) return;\n onChange(setHour12(base, h));\n },\n [value, onChange],\n );\n\n const onMinuteScrollSettle = React.useCallback(\n (idx: number) => {\n const m = MINUTES[idx];\n if (m === undefined) return;\n const base = baseDateForTimePick(value);\n if (value && value.getMinutes() === m) return;\n onChange(setMinute(base, m));\n },\n [value, onChange],\n );\n\n const onAmPmScrollSettle = React.useCallback(\n (idx: number) => {\n const a = AMPM[idx];\n if (a === undefined) return;\n const base = baseDateForTimePick(value);\n if (value) {\n const pm = value.getHours() >= 12;\n if ((a === \"PM\") === pm) return;\n }\n onChange(setAmPm(base, a));\n },\n [value, onChange],\n );\n\n const hourSlots = React.useMemo(\n () =>\n HOURS_12.map((h) => {\n const selected = Boolean(value) && value!.getHours() % 12 === h % 12;\n return (\n <Button\n key={h}\n type=\"button\"\n rounded=\"full\"\n variant={selected ? \"primary\" : \"secondary\"}\n disabled={disabled}\n className={horizontal ? slotClassHorizontalCircular : slotClass}\n {...ScrollWheel.itemProps}\n {...(selected ? { \"data-selected\": true } : {})}\n onClick={() =>\n onChange(setHour12(baseDateForTimePick(value), h))\n }\n >\n <span className=\"tabular-nums\">{h}</span>\n </Button>\n );\n }),\n [value, disabled, onChange, horizontal],\n );\n\n const minuteSlots = React.useMemo(\n () =>\n MINUTES.map((m) => {\n const selected = Boolean(value) && value!.getMinutes() === m;\n return (\n <Button\n key={m}\n type=\"button\"\n rounded=\"full\"\n variant={selected ? \"primary\" : \"secondary\"}\n disabled={disabled}\n className={horizontal ? slotClassHorizontalCircular : slotClass}\n {...ScrollWheel.itemProps}\n {...(selected ? { \"data-selected\": true } : {})}\n onClick={() =>\n onChange(setMinute(baseDateForTimePick(value), m))\n }\n >\n <span className=\"tabular-nums\">\n {String(m).padStart(2, \"0\")}\n </span>\n </Button>\n );\n }),\n [value, disabled, onChange, horizontal],\n );\n\n const amPmSlots = React.useMemo(\n () =>\n AMPM.map((a) => {\n const selected = Boolean(\n value &&\n ((a === \"AM\" && value.getHours() < 12) ||\n (a === \"PM\" && value.getHours() >= 12)),\n );\n return (\n <Button\n key={a}\n type=\"button\"\n rounded=\"full\"\n variant={selected ? \"primary\" : \"secondary\"}\n disabled={disabled}\n className={horizontal ? slotClassHorizontalCircular : slotClass}\n {...ScrollWheel.itemProps}\n {...(selected ? { \"data-selected\": true } : {})}\n onClick={() =>\n onChange(setAmPm(baseDateForTimePick(value), a))\n }\n >\n <span className=\"text-sm font-normal tracking-wide\">{a}</span>\n </Button>\n );\n }),\n [value, disabled, onChange, horizontal],\n );\n\n const hourRecenterKey = React.useMemo(\n () => (value ? value.getHours() : \"n\"),\n [value],\n );\n const minuteRecenterKey = React.useMemo(\n () => (value ? value.getMinutes() : \"n\"),\n [value],\n );\n const amPmRecenterKey = React.useMemo(\n () => (value ? (value.getHours() >= 12 ? \"pm\" : \"am\") : \"n\"),\n [value],\n );\n\n const horizontalCenterColumnClass =\n \"pointer-events-none absolute inset-y-2 left-1/2 z-1 w-[3.25rem] -translate-x-1/2 rounded-full bg-accent/88 dark:bg-accent/72\";\n\n const verticalCenterBandClass = cn(\n \"pointer-events-none absolute top-1/2 left-2 right-2 z-1 -translate-y-1/2 rounded-full bg-accent/88 dark:bg-accent/72\",\n TIME_RAIL_CENTER_BAND_HEIGHT_CLASS,\n );\n\n if (horizontal) {\n return (\n <div\n className={cn(\n \"border-border/60 relative flex h-full min-h-0 min-w-0 flex-1 shrink-0 flex-col divide-y divide-border/60 overflow-hidden border-t\",\n className,\n )}\n >\n <div aria-hidden className={horizontalCenterColumnClass} />\n {(\n [\n [hourSlots, hourRecenterKey, onHourScrollSettle],\n [minuteSlots, minuteRecenterKey, onMinuteScrollSettle],\n [amPmSlots, amPmRecenterKey, onAmPmScrollSettle],\n ] as const\n ).map(([slots, recenterKey, onSettle], i) => (\n <div\n key={i}\n className=\"relative flex w-full shrink-0 flex-col overflow-hidden py-2\"\n >\n <ScrollWheel\n orientation=\"horizontal\"\n disabled={disabled}\n centerSpotlightClassName={SCROLL_WHEEL_CENTER_SPOTLIGHT_CLASSNAME}\n className=\"h-[3.25rem] min-h-[3.25rem] w-full shrink-0\"\n recenterKey={recenterKey}\n onScrollSettle={disabled ? undefined : onSettle}\n >\n {slots}\n </ScrollWheel>\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"border-border/60 relative flex h-full min-h-0 min-w-0 flex-1 shrink-0 flex-row divide-x divide-border/60 overflow-hidden border-l\",\n className,\n )}\n >\n <div aria-hidden className={verticalCenterBandClass} />\n <ScrollWheel\n disabled={disabled}\n centerSpotlightClassName={SCROLL_WHEEL_CENTER_SPOTLIGHT_CLASSNAME}\n recenterKey={hourRecenterKey}\n onScrollSettle={disabled ? undefined : onHourScrollSettle}\n >\n {hourSlots}\n </ScrollWheel>\n <ScrollWheel\n disabled={disabled}\n centerSpotlightClassName={SCROLL_WHEEL_CENTER_SPOTLIGHT_CLASSNAME}\n recenterKey={minuteRecenterKey}\n onScrollSettle={disabled ? undefined : onMinuteScrollSettle}\n >\n {minuteSlots}\n </ScrollWheel>\n <ScrollWheel\n disabled={disabled}\n centerSpotlightClassName={SCROLL_WHEEL_CENTER_SPOTLIGHT_CLASSNAME}\n recenterKey={amPmRecenterKey}\n onScrollSettle={disabled ? undefined : onAmPmScrollSettle}\n >\n {amPmSlots}\n </ScrollWheel>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
type Side = "top" | "right" | "bottom" | "left";
|
|
4
|
+
type Align = "start" | "center" | "end";
|
|
5
|
+
type TooltipProps = {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
/** delay before showing on hover (ms); `0` is instant; focus always opens immediately */
|
|
8
|
+
delayDuration?: number;
|
|
9
|
+
/** delay after pointer leaves trigger/content before hiding (ms) */
|
|
10
|
+
closeDelay?: number;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
open?: boolean;
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
};
|
|
15
|
+
declare const Tooltip: React.FC<TooltipProps>;
|
|
16
|
+
type TooltipTriggerProps = React.HTMLAttributes<HTMLElement> & {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
asChild?: boolean;
|
|
19
|
+
};
|
|
20
|
+
declare const TooltipTrigger: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & {
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
asChild?: boolean;
|
|
23
|
+
} & React.RefAttributes<HTMLElement>>;
|
|
24
|
+
type TooltipContentProps = Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
25
|
+
children: React.ReactNode;
|
|
26
|
+
side?: Side;
|
|
27
|
+
align?: Align;
|
|
28
|
+
offset?: number;
|
|
29
|
+
viewportPadding?: number;
|
|
30
|
+
container?: HTMLElement | null;
|
|
31
|
+
/** small diamond at the trigger edge; set `false` to hide */
|
|
32
|
+
showArrow?: boolean;
|
|
33
|
+
};
|
|
34
|
+
declare const TooltipContent: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
|
|
35
|
+
children: React.ReactNode;
|
|
36
|
+
side?: Side;
|
|
37
|
+
align?: Align;
|
|
38
|
+
offset?: number;
|
|
39
|
+
viewportPadding?: number;
|
|
40
|
+
container?: HTMLElement | null;
|
|
41
|
+
/** small diamond at the trigger edge; set `false` to hide */
|
|
42
|
+
showArrow?: boolean;
|
|
43
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
44
|
+
|
|
45
|
+
export { Tooltip, TooltipContent, type TooltipContentProps, type TooltipProps, TooltipTrigger, type TooltipTriggerProps };
|