@avenue-ticketing/ui 0.11.0 → 0.12.0-beta.1
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/README.md +47 -0
- package/dist/badge-types-B67wcd4m.d.ts +22 -0
- package/dist/react/app-store-buttons-outline.d.ts +17 -0
- package/dist/react/app-store-buttons-outline.js +582 -0
- package/dist/react/app-store-buttons-outline.js.map +1 -0
- package/dist/react/app-store-buttons.d.ts +20 -0
- package/dist/react/app-store-buttons.js +817 -0
- package/dist/react/app-store-buttons.js.map +1 -0
- package/dist/react/avatar-label-group.d.ts +14 -0
- package/dist/react/avatar-label-group.js +183 -0
- package/dist/react/avatar-label-group.js.map +1 -0
- package/dist/react/avatar-profile-photo.d.ts +9 -0
- package/dist/react/avatar-profile-photo.js +202 -0
- package/dist/react/avatar-profile-photo.js.map +1 -0
- package/dist/react/avatar.d.ts +66 -40
- package/dist/react/avatar.js +159 -149
- package/dist/react/avatar.js.map +1 -1
- package/dist/react/badge-groups.d.ts +25 -0
- package/dist/react/badge-groups.js +162 -0
- package/dist/react/badge-groups.js.map +1 -0
- package/dist/react/badge.d.ts +123 -59
- package/dist/react/badge.js +314 -86
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button-group.d.ts +43 -0
- package/dist/react/button-group.js +108 -0
- package/dist/react/button-group.js.map +1 -0
- package/dist/react/button-utility.d.ts +47 -0
- package/dist/react/button-utility.js +158 -0
- package/dist/react/button-utility.js.map +1 -0
- package/dist/react/button.d.ts +112 -37
- package/dist/react/button.js +270 -55
- package/dist/react/button.js.map +1 -1
- package/dist/react/checkbox.d.ts +25 -8
- package/dist/react/checkbox.js +112 -110
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/close-button.d.ts +25 -0
- package/dist/react/close-button.js +54 -0
- package/dist/react/close-button.js.map +1 -0
- package/dist/react/combobox.d.ts +17 -0
- package/dist/react/combobox.js +322 -0
- package/dist/react/combobox.js.map +1 -0
- package/dist/react/dialog.d.ts +15 -15
- package/dist/react/dialog.js +43 -108
- package/dist/react/dialog.js.map +1 -1
- package/dist/react/dropdown-account-breadcrumb.d.ts +5 -0
- package/dist/react/dropdown-account-breadcrumb.js +319 -0
- package/dist/react/dropdown-account-breadcrumb.js.map +1 -0
- package/dist/react/dropdown-account-button.d.ts +5 -0
- package/dist/react/dropdown-account-button.js +773 -0
- package/dist/react/dropdown-account-button.js.map +1 -0
- package/dist/react/dropdown-account-card-md.d.ts +5 -0
- package/dist/react/dropdown-account-card-md.js +549 -0
- package/dist/react/dropdown-account-card-md.js.map +1 -0
- package/dist/react/dropdown-account-card-sm.d.ts +5 -0
- package/dist/react/dropdown-account-card-sm.js +527 -0
- package/dist/react/dropdown-account-card-sm.js.map +1 -0
- package/dist/react/dropdown-account-card-xs.d.ts +5 -0
- package/dist/react/dropdown-account-card-xs.js +507 -0
- package/dist/react/dropdown-account-card-xs.js.map +1 -0
- package/dist/react/dropdown-avatar.d.ts +5 -0
- package/dist/react/dropdown-avatar.js +790 -0
- package/dist/react/dropdown-avatar.js.map +1 -0
- package/dist/react/dropdown-button-advanced.d.ts +5 -0
- package/dist/react/dropdown-button-advanced.js +799 -0
- package/dist/react/dropdown-button-advanced.js.map +1 -0
- package/dist/react/dropdown-button-link.d.ts +5 -0
- package/dist/react/dropdown-button-link.js +501 -0
- package/dist/react/dropdown-button-link.js.map +1 -0
- package/dist/react/dropdown-button-simple.d.ts +5 -0
- package/dist/react/dropdown-button-simple.js +754 -0
- package/dist/react/dropdown-button-simple.js.map +1 -0
- package/dist/react/dropdown-icon-advanced.d.ts +5 -0
- package/dist/react/dropdown-icon-advanced.js +543 -0
- package/dist/react/dropdown-icon-advanced.js.map +1 -0
- package/dist/react/dropdown-icon-simple.d.ts +5 -0
- package/dist/react/dropdown-icon-simple.js +505 -0
- package/dist/react/dropdown-icon-simple.js.map +1 -0
- package/dist/react/dropdown-integration.d.ts +5 -0
- package/dist/react/dropdown-integration.js +1325 -0
- package/dist/react/dropdown-integration.js.map +1 -0
- package/dist/react/dropdown-search-advanced.d.ts +5 -0
- package/dist/react/dropdown-search-advanced.js +998 -0
- package/dist/react/dropdown-search-advanced.js.map +1 -0
- package/dist/react/dropdown-search-simple.d.ts +5 -0
- package/dist/react/dropdown-search-simple.js +960 -0
- package/dist/react/dropdown-search-simple.js.map +1 -0
- package/dist/react/dropdown.d.ts +32 -133
- package/dist/react/dropdown.js +404 -1351
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/file-upload-trigger.d.ts +34 -0
- package/dist/react/file-upload-trigger.js +39 -0
- package/dist/react/file-upload-trigger.js.map +1 -0
- package/dist/react/form.d.ts +10 -0
- package/dist/react/form.js +11 -0
- package/dist/react/form.js.map +1 -0
- package/dist/react/hint-text.d.ts +17 -0
- package/dist/react/hint-text.js +36 -0
- package/dist/react/hint-text.js.map +1 -0
- package/dist/react/hook-form.d.ts +35 -0
- package/dist/react/hook-form.js +50 -0
- package/dist/react/hook-form.js.map +1 -0
- package/dist/react/input-date.d.ts +43 -0
- package/dist/react/input-date.js +306 -0
- package/dist/react/input-date.js.map +1 -0
- package/dist/react/input-file.d.ts +45 -0
- package/dist/react/input-file.js +748 -0
- package/dist/react/input-file.js.map +1 -0
- package/dist/react/input-group.d.ts +37 -0
- package/dist/react/input-group.js +251 -0
- package/dist/react/input-group.js.map +1 -0
- package/dist/react/input-number.d.ts +32 -0
- package/dist/react/input-number.js +553 -0
- package/dist/react/input-number.js.map +1 -0
- package/dist/react/input-payment.d.ts +16 -0
- package/dist/react/input-payment.js +593 -0
- package/dist/react/input-payment.js.map +1 -0
- package/dist/react/input-tags-outer.d.ts +53 -0
- package/dist/react/input-tags-outer.js +607 -0
- package/dist/react/input-tags-outer.js.map +1 -0
- package/dist/react/input-tags.d.ts +53 -0
- package/dist/react/input-tags.js +565 -0
- package/dist/react/input-tags.js.map +1 -0
- package/dist/react/input.d.ts +71 -22
- package/dist/react/input.js +332 -45
- package/dist/react/input.js.map +1 -1
- package/dist/react/label.d.ts +18 -0
- package/dist/react/label.js +112 -0
- package/dist/react/label.js.map +1 -0
- package/dist/react/multi-select.d.ts +89 -0
- package/dist/react/multi-select.js +1036 -0
- package/dist/react/multi-select.js.map +1 -0
- package/dist/react/pin-input.d.ts +59 -0
- package/dist/react/pin-input.js +229 -0
- package/dist/react/pin-input.js.map +1 -0
- package/dist/react/popover.d.ts +7 -73
- package/dist/react/popover.js +23 -569
- package/dist/react/popover.js.map +1 -1
- package/dist/react/progress-circle.d.ts +9 -0
- package/dist/react/progress-circle.js +36 -0
- package/dist/react/progress-circle.js.map +1 -0
- package/dist/react/progress-circles.d.ts +14 -0
- package/dist/react/progress-circles.js +160 -0
- package/dist/react/progress-circles.js.map +1 -0
- package/dist/react/progress-indicators.d.ts +52 -0
- package/dist/react/progress-indicators.js +78 -0
- package/dist/react/progress-indicators.js.map +1 -0
- package/dist/react/radio-buttons.d.ts +35 -0
- package/dist/react/radio-buttons.js +116 -0
- package/dist/react/radio-buttons.js.map +1 -0
- package/dist/react/scroll-header.d.ts +6 -0
- package/dist/react/scroll-header.js +42 -61
- package/dist/react/scroll-header.js.map +1 -1
- package/dist/react/scroll-wheel.d.ts +4 -5
- package/dist/react/scroll-wheel.js +19 -15
- package/dist/react/scroll-wheel.js.map +1 -1
- package/dist/react/select-item.d.ts +13 -0
- package/dist/react/select-item.js +336 -0
- package/dist/react/select-item.js.map +1 -0
- package/dist/react/select-native.d.ts +17 -0
- package/dist/react/select-native.js +203 -0
- package/dist/react/select-native.js.map +1 -0
- package/dist/react/select.d.ts +18 -61
- package/dist/react/select.js +625 -923
- package/dist/react/select.js.map +1 -1
- package/dist/react/sheet.d.ts +19 -19
- package/dist/react/sheet.js +97 -219
- package/dist/react/sheet.js.map +1 -1
- package/dist/react/slider.d.ts +15 -0
- package/dist/react/slider.js +66 -0
- package/dist/react/slider.js.map +1 -0
- package/dist/react/social-button.d.ts +55 -0
- package/dist/react/social-button.js +263 -0
- package/dist/react/social-button.js.map +1 -0
- package/dist/react/social-logos.d.ts +20 -0
- package/dist/react/social-logos.js +131 -0
- package/dist/react/social-logos.js.map +1 -0
- package/dist/react/switch.d.ts +21 -36
- package/dist/react/switch.js +121 -109
- package/dist/react/switch.js.map +1 -1
- package/dist/react/tag-select.d.ts +44 -0
- package/dist/react/tag-select.js +1062 -0
- package/dist/react/tag-select.js.map +1 -0
- package/dist/react/tags.d.ts +30 -0
- package/dist/react/tags.js +228 -0
- package/dist/react/tags.js.map +1 -0
- package/dist/react/textarea.d.ts +40 -4
- package/dist/react/textarea.js +193 -27
- package/dist/react/textarea.js.map +1 -1
- package/dist/react/tooltip.d.ts +30 -43
- package/dist/react/tooltip.js +65 -521
- package/dist/react/tooltip.js.map +1 -1
- package/dist/select-shared-B3Y5SMXU.d.ts +62 -0
- package/package.json +28 -21
- package/source.css +2 -13
- package/theme.css +883 -79
- package/dist/react/calendar.d.ts +0 -13
- package/dist/react/calendar.js +0 -4639
- package/dist/react/calendar.js.map +0 -1
- package/dist/react/card.d.ts +0 -11
- package/dist/react/card.js +0 -113
- package/dist/react/card.js.map +0 -1
- package/dist/react/datetime-picker.d.ts +0 -21
- package/dist/react/datetime-picker.js +0 -6142
- package/dist/react/datetime-picker.js.map +0 -1
- package/dist/react/pagination.d.ts +0 -28
- package/dist/react/pagination.js +0 -262
- package/dist/react/pagination.js.map +0 -1
- package/dist/react/table-pagination.d.ts +0 -15
- package/dist/react/table-pagination.js +0 -1247
- package/dist/react/table-pagination.js.map +0 -1
- package/dist/react/table-view/column-menu.d.ts +0 -15
- package/dist/react/table-view/column-menu.js +0 -1049
- package/dist/react/table-view/column-menu.js.map +0 -1
- package/dist/react/table-view/index.d.ts +0 -70
- package/dist/react/table-view/index.js +0 -2284
- package/dist/react/table-view/index.js.map +0 -1
- package/dist/react/table.d.ts +0 -86
- package/dist/react/table.js +0 -414
- package/dist/react/table.js.map +0 -1
- package/dist/react/tabs.d.ts +0 -34
- package/dist/react/tabs.js +0 -423
- package/dist/react/tabs.js.map +0 -1
- package/dist/react/time-picker.d.ts +0 -22
- package/dist/react/time-picker.js +0 -856
- package/dist/react/time-picker.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/scroll-wheel-axis.ts","../../src/react/scroll-wheel.tsx"],"names":[],"mappings":"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","file":"scroll-wheel.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","/**\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"]}
|
|
1
|
+
{"version":3,"sources":["../../../../utils/cx.ts","../../../../components/base/scroll-wheel/scroll-wheel-axis.ts","../../../../components/base/scroll-wheel/scroll-wheel.tsx"],"names":[],"mappings":"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","file":"scroll-wheel.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\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 ? Math.max(0, root.scrollWidth - root.clientWidth) : Math.max(0, root.scrollHeight - root.clientHeight);\n}\n\n/** Clamp `next` into [0, maxScroll] and assign to scrollLeft / scrollTop. */\nexport function setScroll(horizontal: boolean, root: HTMLElement, next: number, behavior: ScrollBehavior): 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(horizontal: boolean, list: HTMLDivElement, root: HTMLElement, slotRect: DOMRect): 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\";\nimport { cx } from \"@/utils/cx\";\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(--color-fg-brand-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-primary via-primary/85 to-transparent\",\n \"pointer-events-none absolute inset-x-0 bottom-0 z-10 h-16 bg-linear-to-t from-primary via-primary/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-primary via-primary/85 to-transparent\",\n \"pointer-events-none absolute inset-y-0 right-0 z-10 w-16 bg-linear-to-l from-primary via-primary/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={cx(\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={cx(\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={cx(\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={cx(\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"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ListBoxItemProps } from 'react-aria-components';
|
|
3
|
+
import { S as SelectItemType } from '../select-shared-B3Y5SMXU.js';
|
|
4
|
+
|
|
5
|
+
interface SelectItemProps extends Omit<ListBoxItemProps<SelectItemType>, "id">, SelectItemType {
|
|
6
|
+
/** The selection indicator to be displayed on the item. */
|
|
7
|
+
selectionIndicator?: "checkmark" | "checkbox" | "none";
|
|
8
|
+
/** The alignment of the selection indicator. */
|
|
9
|
+
selectionIndicatorAlign?: "left" | "right";
|
|
10
|
+
}
|
|
11
|
+
declare const SelectItem: ({ label, id, value, avatarUrl, supportingText, isDisabled, icon: Icon, className, children, selectionIndicator, selectionIndicatorAlign, ...props }: SelectItemProps) => react.JSX.Element;
|
|
12
|
+
|
|
13
|
+
export { SelectItem };
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { createContext, useContext, isValidElement, useState, useRef, useLayoutEffect } from 'react';
|
|
2
|
+
import { CheckIcon } from '@phosphor-icons/react/dist/csr/Check';
|
|
3
|
+
import { ListBoxItem, Text } from 'react-aria-components';
|
|
4
|
+
import { UserIcon } from '@phosphor-icons/react/dist/csr/User';
|
|
5
|
+
import { extendTailwindMerge } from 'tailwind-merge';
|
|
6
|
+
import '@phosphor-icons/react/dist/csr/Plus';
|
|
7
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var twMerge = extendTailwindMerge({
|
|
10
|
+
extend: {
|
|
11
|
+
theme: {
|
|
12
|
+
text: ["display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
var cx = twMerge;
|
|
17
|
+
var sizes = {
|
|
18
|
+
xs: "size-1.5",
|
|
19
|
+
sm: "size-2",
|
|
20
|
+
md: "size-2.5",
|
|
21
|
+
lg: "size-3",
|
|
22
|
+
xl: "size-3.5",
|
|
23
|
+
"2xl": "size-4",
|
|
24
|
+
"3xl": "size-4.5",
|
|
25
|
+
"4xl": "size-5"
|
|
26
|
+
};
|
|
27
|
+
var AvatarOnlineIndicator = ({ size, status, className }) => /* @__PURE__ */ jsx(
|
|
28
|
+
"span",
|
|
29
|
+
{
|
|
30
|
+
className: cx(
|
|
31
|
+
"absolute right-0 bottom-0 flex justify-center rounded-full ring-[1.5px] ring-bg-primary",
|
|
32
|
+
status === "online" ? "bg-fg-success-secondary" : "bg-utility-neutral-300",
|
|
33
|
+
sizes[size],
|
|
34
|
+
className
|
|
35
|
+
),
|
|
36
|
+
style: {
|
|
37
|
+
backgroundImage: "radial-gradient(43.75% 43.75% at 50% 28.75%, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.00) 100%), radial-gradient(50% 50% at 50% 50%, rgba(255, 255, 255, 0.00) 74.66%, rgba(255, 255, 255, 0.18) 100%), radial-gradient(75% 75% at 50% 0%, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 99%, rgba(255, 255, 255, 0.00) 100%)"
|
|
38
|
+
},
|
|
39
|
+
children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 7.2 2.85", fill: "none", className: "mt-[10%] h-[20%] w-[60%]", children: [
|
|
40
|
+
/* @__PURE__ */ jsx(
|
|
41
|
+
"path",
|
|
42
|
+
{
|
|
43
|
+
d: "M7.2 1.83107C7.2 2.84235 5.58823 2.19729 3.6 2.19729C1.61177 2.19729 0 2.84235 0 1.83107C0 0.8198 1.61177 0 3.6 0C5.58823 0 7.2 0.8198 7.2 1.83107Z",
|
|
44
|
+
fill: "url(#reflection-gradient)",
|
|
45
|
+
fillOpacity: "0.4"
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: "reflection-gradient", x1: "3.6", y1: "0", x2: "3.6", y2: "2.4", gradientUnits: "userSpaceOnUse", children: [
|
|
49
|
+
/* @__PURE__ */ jsx("stop", { stopColor: "white" }),
|
|
50
|
+
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "white", stopOpacity: "0.1" })
|
|
51
|
+
] }) })
|
|
52
|
+
] })
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
var sizes2 = {
|
|
56
|
+
xs: "size-2.5",
|
|
57
|
+
sm: "size-3",
|
|
58
|
+
md: "size-3.5",
|
|
59
|
+
lg: "size-4",
|
|
60
|
+
xl: "size-4.5",
|
|
61
|
+
"2xl": "size-5",
|
|
62
|
+
"3xl": "size-6",
|
|
63
|
+
"4xl": "size-8"
|
|
64
|
+
};
|
|
65
|
+
var VerifiedTick = ({ size, className }) => /* @__PURE__ */ jsxs("svg", { className: cx("z-10 text-utility-blue-500", sizes2[size], className), viewBox: "0 0 10 10", fill: "none", children: [
|
|
66
|
+
/* @__PURE__ */ jsx(
|
|
67
|
+
"path",
|
|
68
|
+
{
|
|
69
|
+
d: "M7.72237 1.77098C7.81734 2.00068 7.99965 2.18326 8.2292 2.27858L9.03413 2.61199C9.26384 2.70714 9.44635 2.88965 9.5415 3.11936C9.63665 3.34908 9.63665 3.60718 9.5415 3.83689L9.20833 4.64125C9.11313 4.87106 9.113 5.12943 9.20863 5.35913L9.54122 6.16325C9.58839 6.27702 9.61268 6.39897 9.6127 6.52214C9.61272 6.6453 9.58847 6.76726 9.54134 6.88105C9.4942 6.99484 9.42511 7.09823 9.33801 7.18531C9.2509 7.27238 9.14749 7.34144 9.03369 7.38854L8.22934 7.72171C7.99964 7.81669 7.81706 7.99899 7.72174 8.22855L7.38833 9.03348C7.29318 9.26319 7.11067 9.4457 6.88096 9.54085C6.65124 9.636 6.39314 9.636 6.16343 9.54085L5.35907 9.20767C5.12935 9.11276 4.87134 9.11295 4.64177 9.20821L3.83684 9.54115C3.60725 9.63608 3.34937 9.636 3.11984 9.54092C2.89032 9.44585 2.70791 9.26356 2.6127 9.03409L2.27918 8.22892C2.18421 7.99923 2.0019 7.81665 1.77235 7.72133L0.967421 7.38792C0.737807 7.29281 0.555355 7.11041 0.460169 6.88083C0.364983 6.65125 0.364854 6.39327 0.45981 6.16359L0.792984 5.35924C0.8879 5.12952 0.887707 4.87151 0.792445 4.64193L0.459749 3.83642C0.41258 3.72265 0.388291 3.60069 0.388272 3.47753C0.388252 3.35436 0.412501 3.2324 0.459634 3.11861C0.506767 3.00482 0.57586 2.90144 0.662965 2.81436C0.75007 2.72728 0.853479 2.65822 0.967283 2.61113L1.77164 2.27795C2.00113 2.18306 2.1836 2.00099 2.27899 1.7717L2.6124 0.966768C2.70755 0.737054 2.89006 0.554547 3.11978 0.459397C3.34949 0.364246 3.60759 0.364246 3.83731 0.459397L4.64166 0.792571C4.87138 0.887487 5.12939 0.887293 5.35897 0.792031L6.16424 0.459913C6.39392 0.364816 6.65197 0.364836 6.88164 0.459968C7.11131 0.555099 7.29379 0.737554 7.38895 0.967208L7.72247 1.77238L7.72237 1.77098Z",
|
|
70
|
+
className: "fill-current"
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
/* @__PURE__ */ jsx(
|
|
74
|
+
"path",
|
|
75
|
+
{
|
|
76
|
+
fillRule: "evenodd",
|
|
77
|
+
clipRule: "evenodd",
|
|
78
|
+
d: "M6.95829 3.68932C7.02509 3.58439 7.04747 3.45723 7.02051 3.3358C6.99356 3.21437 6.91946 3.10862 6.81454 3.04182C6.70961 2.97502 6.58245 2.95264 6.46102 2.97959C6.33959 3.00655 6.23384 3.08064 6.16704 3.18557L4.33141 6.06995L3.49141 5.01995C3.41375 4.92281 3.30069 4.8605 3.17709 4.84673C3.05349 4.83296 2.92949 4.86885 2.83235 4.94651C2.73522 5.02417 2.67291 5.13723 2.65914 5.26083C2.64536 5.38443 2.68125 5.50843 2.75891 5.60557L4.00891 7.16807C4.0555 7.22638 4.11533 7.27271 4.18344 7.30323C4.25154 7.33375 4.32595 7.34757 4.40047 7.34353C4.47499 7.3395 4.54747 7.31773 4.61188 7.28004C4.67629 7.24234 4.73077 7.18981 4.77079 7.12682L6.95829 3.68932Z",
|
|
79
|
+
fill: "white"
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
] });
|
|
83
|
+
var AvatarCount = ({ count, className }) => /* @__PURE__ */ jsx("div", { className: cx("absolute right-0 bottom-0 p-px", className), children: /* @__PURE__ */ jsx("div", { className: "flex size-3.5 items-center justify-center rounded-full bg-fg-error-primary text-center text-[10px] leading-[13px] font-bold text-white", children: count }) });
|
|
84
|
+
var styles = {
|
|
85
|
+
xs: { root: "size-6", rootWithBorder: "p-px", initials: "text-xs font-semibold", icon: "size-4" },
|
|
86
|
+
sm: { root: "size-8", rootWithBorder: "p-px", initials: "text-sm font-semibold", icon: "size-5" },
|
|
87
|
+
md: { root: "size-10", rootWithBorder: "p-px", initials: "text-md font-semibold", icon: "size-6" },
|
|
88
|
+
lg: { root: "size-12", rootWithBorder: "p-[1.5px]", initials: "text-lg font-semibold", icon: "size-7" },
|
|
89
|
+
xl: { root: "size-14", rootWithBorder: "p-0.5", initials: "text-xl font-semibold", icon: "size-8" },
|
|
90
|
+
"2xl": { root: "size-16", rootWithBorder: "p-0.5", initials: "text-display-xs font-semibold", icon: "size-8" }
|
|
91
|
+
};
|
|
92
|
+
var Avatar = ({
|
|
93
|
+
size = "md",
|
|
94
|
+
src,
|
|
95
|
+
alt,
|
|
96
|
+
initials,
|
|
97
|
+
placeholder,
|
|
98
|
+
placeholderIcon: PlaceholderIcon,
|
|
99
|
+
border,
|
|
100
|
+
badge,
|
|
101
|
+
status,
|
|
102
|
+
verified,
|
|
103
|
+
count,
|
|
104
|
+
focusable = false,
|
|
105
|
+
rounded = true,
|
|
106
|
+
className,
|
|
107
|
+
contentClassName
|
|
108
|
+
}) => {
|
|
109
|
+
const [isFailed, setIsFailed] = useState(false);
|
|
110
|
+
const canShowImage = src && !isFailed;
|
|
111
|
+
const renderMainContent = () => {
|
|
112
|
+
if (canShowImage) {
|
|
113
|
+
return /* @__PURE__ */ jsx("img", { "data-avatar-img": true, className: "size-full object-cover", src, alt, onError: () => setIsFailed(true) });
|
|
114
|
+
}
|
|
115
|
+
if (initials) {
|
|
116
|
+
return /* @__PURE__ */ jsx("span", { className: cx("text-quaternary", styles[size].initials), children: initials });
|
|
117
|
+
}
|
|
118
|
+
if (PlaceholderIcon) {
|
|
119
|
+
return /* @__PURE__ */ jsx(PlaceholderIcon, { className: cx("text-fg-quaternary", styles[size].icon) });
|
|
120
|
+
}
|
|
121
|
+
return placeholder || /* @__PURE__ */ jsx(UserIcon, { className: cx("text-fg-quaternary", styles[size].icon) });
|
|
122
|
+
};
|
|
123
|
+
const renderBadgeContent = () => {
|
|
124
|
+
if (status) {
|
|
125
|
+
return /* @__PURE__ */ jsx(AvatarOnlineIndicator, { status, size });
|
|
126
|
+
}
|
|
127
|
+
if (verified) {
|
|
128
|
+
return /* @__PURE__ */ jsx(VerifiedTick, { size, className: cx("absolute right-0 bottom-0", size === "xs" && "-right-px -bottom-px") });
|
|
129
|
+
}
|
|
130
|
+
if (count) {
|
|
131
|
+
return /* @__PURE__ */ jsx(AvatarCount, { count });
|
|
132
|
+
}
|
|
133
|
+
return badge;
|
|
134
|
+
};
|
|
135
|
+
return /* @__PURE__ */ jsxs(
|
|
136
|
+
"div",
|
|
137
|
+
{
|
|
138
|
+
"data-avatar": true,
|
|
139
|
+
className: cx(
|
|
140
|
+
"relative inline-flex shrink-0 rounded-[7px]",
|
|
141
|
+
rounded && "rounded-full",
|
|
142
|
+
// Focus styles
|
|
143
|
+
focusable && "outline-none group-focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]",
|
|
144
|
+
border && "ring-1 ring-secondary_alt",
|
|
145
|
+
border && styles[size].rootWithBorder,
|
|
146
|
+
styles[size].root,
|
|
147
|
+
className
|
|
148
|
+
),
|
|
149
|
+
children: [
|
|
150
|
+
/* @__PURE__ */ jsx(
|
|
151
|
+
"div",
|
|
152
|
+
{
|
|
153
|
+
className: cx(
|
|
154
|
+
"relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]",
|
|
155
|
+
rounded && "rounded-full",
|
|
156
|
+
canShowImage && size !== "xs" && "before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]",
|
|
157
|
+
contentClassName
|
|
158
|
+
),
|
|
159
|
+
children: renderMainContent()
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
renderBadgeContent()
|
|
163
|
+
]
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
};
|
|
167
|
+
var CHECKBOX_TICK_DELAY_MS = 60;
|
|
168
|
+
var CHECKBOX_TICK_DRAW_MS = 100;
|
|
169
|
+
function CheckboxAnimatedCheckMark({ className }) {
|
|
170
|
+
const pathRef = useRef(null);
|
|
171
|
+
useLayoutEffect(() => {
|
|
172
|
+
const path = pathRef.current;
|
|
173
|
+
if (!path || typeof path.getTotalLength !== "function") return;
|
|
174
|
+
const len = path.getTotalLength();
|
|
175
|
+
if (len <= 0) return;
|
|
176
|
+
path.style.strokeDasharray = `${len}`;
|
|
177
|
+
path.style.strokeDashoffset = `${len}`;
|
|
178
|
+
if (typeof path.animate !== "function") {
|
|
179
|
+
path.style.strokeDashoffset = "0";
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const anim = path.animate([{ strokeDashoffset: len }, { strokeDashoffset: 0 }], {
|
|
183
|
+
duration: CHECKBOX_TICK_DRAW_MS,
|
|
184
|
+
delay: CHECKBOX_TICK_DELAY_MS,
|
|
185
|
+
easing: "cubic-bezier(0.45, 0, 0.2, 1)",
|
|
186
|
+
fill: "forwards"
|
|
187
|
+
});
|
|
188
|
+
return () => anim.cancel();
|
|
189
|
+
}, []);
|
|
190
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 14 14", fill: "none", className: cx("block shrink-0", className), children: /* @__PURE__ */ jsx(
|
|
191
|
+
"path",
|
|
192
|
+
{
|
|
193
|
+
ref: pathRef,
|
|
194
|
+
d: "M2.33325 7L5.24992 9.91667L11.6666 3.5",
|
|
195
|
+
stroke: "currentColor",
|
|
196
|
+
strokeWidth: "2",
|
|
197
|
+
strokeLinecap: "round",
|
|
198
|
+
strokeLinejoin: "round"
|
|
199
|
+
}
|
|
200
|
+
) });
|
|
201
|
+
}
|
|
202
|
+
var focusRingShadow = "outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]";
|
|
203
|
+
var CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size = "sm", isFocusVisible = false }) => {
|
|
204
|
+
const isChecked = isSelected || isIndeterminate;
|
|
205
|
+
const iconClassName = size === "sm" ? "size-2.5" : "size-3.5";
|
|
206
|
+
return /* @__PURE__ */ jsxs(
|
|
207
|
+
"div",
|
|
208
|
+
{
|
|
209
|
+
className: cx(
|
|
210
|
+
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center border border-solid border-primary",
|
|
211
|
+
size === "sm" ? "size-4 rounded-xs" : "size-5 rounded-sm",
|
|
212
|
+
isChecked ? "border-transparent bg-brand-solid" : "bg-primary",
|
|
213
|
+
isDisabled && "cursor-not-allowed opacity-50",
|
|
214
|
+
isDisabled && !isChecked && "bg-tertiary",
|
|
215
|
+
isFocusVisible && !isDisabled && focusRingShadow,
|
|
216
|
+
className
|
|
217
|
+
),
|
|
218
|
+
children: [
|
|
219
|
+
isIndeterminate && /* @__PURE__ */ jsx(
|
|
220
|
+
"svg",
|
|
221
|
+
{
|
|
222
|
+
"aria-hidden": "true",
|
|
223
|
+
viewBox: "0 0 14 14",
|
|
224
|
+
fill: "none",
|
|
225
|
+
className: cx("pointer-events-none block shrink-0 text-fg-white", iconClassName),
|
|
226
|
+
children: /* @__PURE__ */ jsx("path", { d: "M2.91675 7H11.0834", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
227
|
+
}
|
|
228
|
+
),
|
|
229
|
+
isSelected && !isIndeterminate && /* @__PURE__ */ jsx(CheckboxAnimatedCheckMark, { className: cx("pointer-events-none text-fg-white", iconClassName) })
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
);
|
|
233
|
+
};
|
|
234
|
+
CheckboxBase.displayName = "CheckboxBase";
|
|
235
|
+
|
|
236
|
+
// ../../utils/is-react-component.ts
|
|
237
|
+
var isFunctionComponent = (component) => {
|
|
238
|
+
return typeof component === "function";
|
|
239
|
+
};
|
|
240
|
+
var isClassComponent = (component) => {
|
|
241
|
+
return typeof component === "function" && component.prototype && (!!component.prototype.isReactComponent || !!component.prototype.render);
|
|
242
|
+
};
|
|
243
|
+
var isForwardRefComponent = (component) => {
|
|
244
|
+
return typeof component === "object" && component !== null && component.$$typeof.toString() === "Symbol(react.forward_ref)";
|
|
245
|
+
};
|
|
246
|
+
var isReactComponent = (component) => {
|
|
247
|
+
return isFunctionComponent(component) || isForwardRefComponent(component) || isClassComponent(component);
|
|
248
|
+
};
|
|
249
|
+
var SelectContext = createContext({ size: "md" });
|
|
250
|
+
var sizes3 = {
|
|
251
|
+
sm: {
|
|
252
|
+
root: "p-2 pr-2.5 gap-2 *:data-icon:size-4 *:data-icon:stroke-[2.25px]",
|
|
253
|
+
text: "text-sm",
|
|
254
|
+
textContainer: "gap-x-1.5",
|
|
255
|
+
check: "size-4 stroke-[2.25px]",
|
|
256
|
+
checkbox: "sm"
|
|
257
|
+
},
|
|
258
|
+
md: {
|
|
259
|
+
root: "p-2 pr-2.5 gap-2 *:data-icon:size-5",
|
|
260
|
+
text: "text-md",
|
|
261
|
+
textContainer: "gap-x-2",
|
|
262
|
+
check: "size-5",
|
|
263
|
+
checkbox: "sm"
|
|
264
|
+
},
|
|
265
|
+
lg: {
|
|
266
|
+
root: "p-2.5 pl-2 gap-2 *:data-icon:size-5",
|
|
267
|
+
text: "text-md",
|
|
268
|
+
textContainer: "gap-x-2",
|
|
269
|
+
check: "size-5",
|
|
270
|
+
checkbox: "md"
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
var SelectItem = ({
|
|
274
|
+
label,
|
|
275
|
+
id,
|
|
276
|
+
value,
|
|
277
|
+
avatarUrl,
|
|
278
|
+
supportingText,
|
|
279
|
+
isDisabled,
|
|
280
|
+
icon: Icon,
|
|
281
|
+
className,
|
|
282
|
+
children,
|
|
283
|
+
selectionIndicator = "checkmark",
|
|
284
|
+
selectionIndicatorAlign = "right",
|
|
285
|
+
...props
|
|
286
|
+
}) => {
|
|
287
|
+
const { size } = useContext(SelectContext);
|
|
288
|
+
const labelOrChildren = label || (typeof children === "string" ? children : "");
|
|
289
|
+
const textValue = supportingText ? labelOrChildren + " " + supportingText : labelOrChildren;
|
|
290
|
+
const isLeft = selectionIndicatorAlign === "left";
|
|
291
|
+
return /* @__PURE__ */ jsx(
|
|
292
|
+
ListBoxItem,
|
|
293
|
+
{
|
|
294
|
+
id,
|
|
295
|
+
value: value ?? {
|
|
296
|
+
id,
|
|
297
|
+
label: labelOrChildren,
|
|
298
|
+
avatarUrl,
|
|
299
|
+
supportingText,
|
|
300
|
+
isDisabled,
|
|
301
|
+
icon: Icon
|
|
302
|
+
},
|
|
303
|
+
textValue,
|
|
304
|
+
isDisabled,
|
|
305
|
+
...props,
|
|
306
|
+
className: (state) => cx("w-full py-px outline-hidden", size === "sm" ? "px-1" : "px-1.5", typeof className === "function" ? className(state) : className),
|
|
307
|
+
children: (state) => /* @__PURE__ */ jsxs(
|
|
308
|
+
"div",
|
|
309
|
+
{
|
|
310
|
+
className: cx(
|
|
311
|
+
"flex cursor-pointer items-center rounded-md outline-hidden select-none",
|
|
312
|
+
(state.isFocused || state.isHovered || state.isSelected && selectionIndicator !== "checkbox") && "bg-primary_hover",
|
|
313
|
+
state.isDisabled && "cursor-not-allowed opacity-50",
|
|
314
|
+
// Icon styles
|
|
315
|
+
"*:data-icon:shrink-0 *:data-icon:text-fg-quaternary",
|
|
316
|
+
sizes3[size].root
|
|
317
|
+
),
|
|
318
|
+
children: [
|
|
319
|
+
isLeft && selectionIndicator === "checkbox" && /* @__PURE__ */ jsx(CheckboxBase, { size: sizes3[size].checkbox, isSelected: state.isSelected, isDisabled: state.isDisabled }),
|
|
320
|
+
avatarUrl ? /* @__PURE__ */ jsx(Avatar, { "aria-hidden": "true", size: "xs", src: avatarUrl, alt: label, className: cx(size === "sm" && "size-5") }) : isReactComponent(Icon) ? /* @__PURE__ */ jsx(Icon, { "data-icon": true, "aria-hidden": "true" }) : isValidElement(Icon) ? Icon : null,
|
|
321
|
+
/* @__PURE__ */ jsxs("div", { className: cx("flex w-full min-w-0 flex-1 flex-wrap", sizes3[size].textContainer), children: [
|
|
322
|
+
/* @__PURE__ */ jsx(Text, { slot: "label", className: cx("truncate font-medium whitespace-nowrap text-primary", sizes3[size].text), children: label || (typeof children === "function" ? children(state) : children) }),
|
|
323
|
+
supportingText && /* @__PURE__ */ jsx(Text, { slot: "description", className: cx("whitespace-nowrap text-tertiary", sizes3[size].text), children: supportingText })
|
|
324
|
+
] }),
|
|
325
|
+
state.isSelected && selectionIndicator === "checkmark" && /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": "true", className: cx("ml-auto text-fg-brand-primary", sizes3[size].check) }),
|
|
326
|
+
!isLeft && selectionIndicator === "checkbox" && /* @__PURE__ */ jsx(CheckboxBase, { size: sizes3[size].checkbox, isSelected: state.isSelected, isDisabled: state.isDisabled, className: "ml-auto" })
|
|
327
|
+
]
|
|
328
|
+
}
|
|
329
|
+
)
|
|
330
|
+
}
|
|
331
|
+
);
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
export { SelectItem };
|
|
335
|
+
//# sourceMappingURL=select-item.js.map
|
|
336
|
+
//# sourceMappingURL=select-item.js.map
|