@codraoss/ui 0.9.4
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/LICENSE +625 -0
- package/README.md +15 -0
- package/dist/chunk-HCQJTSV3.js +39 -0
- package/dist/chunk-HCQJTSV3.js.map +1 -0
- package/dist/chunk-OU66JJZD.js +7 -0
- package/dist/chunk-OU66JJZD.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/chunk-TXNSYK4G.js +23 -0
- package/dist/chunk-TXNSYK4G.js.map +1 -0
- package/dist/components/motion/index.d.ts +92 -0
- package/dist/components/motion/index.js +643 -0
- package/dist/components/motion/index.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +241 -0
- package/dist/index.js +1144 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/ease.d.ts +3 -0
- package/dist/lib/ease.js +8 -0
- package/dist/lib/ease.js.map +1 -0
- package/dist/lib/file-tree.d.ts +16 -0
- package/dist/lib/file-tree.js +46 -0
- package/dist/lib/file-tree.js.map +1 -0
- package/dist/lib/highlight.d.ts +14 -0
- package/dist/lib/highlight.js +35 -0
- package/dist/lib/highlight.js.map +1 -0
- package/dist/lib/markdown-plugins.d.ts +6 -0
- package/dist/lib/markdown-plugins.js +11041 -0
- package/dist/lib/markdown-plugins.js.map +1 -0
- package/dist/lib/prompt-diff.d.ts +21 -0
- package/dist/lib/prompt-diff.js +95 -0
- package/dist/lib/prompt-diff.js.map +1 -0
- package/dist/lib/selection.d.ts +11 -0
- package/dist/lib/selection.js +15 -0
- package/dist/lib/selection.js.map +1 -0
- package/dist/lib/theme.d.ts +14 -0
- package/dist/lib/theme.js +78 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/utils.d.ts +15 -0
- package/dist/lib/utils.js +14 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/motion/shared-layout-bg.tsx","../../../src/components/motion/smooth-scroll.tsx","../../../src/components/motion/stepped-slider.tsx","../../../src/components/motion/tabs.tsx"],"sourcesContent":["// beui.dev/components/motion/shared-layout-bg\nimport {\n AnimatePresence,\n domMax,\n LazyMotion,\n m,\n useReducedMotion,\n type Variants,\n} from \"motion/react\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useId,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst SPRING_LAYOUT = {\n type: \"spring\" as const,\n stiffness: 400,\n damping: 40,\n mass: 0.6,\n};\n\nexport interface SharedLayoutBgProps {\n children: ReactNode;\n className?: string;\n pillClassName?: string;\n /** Horizontal inset of the pill relative to each row (px). */\n inset?: number;\n}\n\nconst variants: Variants = {\n initial: { opacity: 0, filter: \"blur(6px)\" },\n animate: { opacity: 1, filter: \"blur(0px)\" },\n exit: (isActive: boolean) =>\n !isActive ? { opacity: 0, filter: \"blur(6px)\" } : {},\n};\n\nconst reducedVariants: Variants = {\n initial: { opacity: 0 },\n animate: { opacity: 1 },\n exit: (isActive: boolean) => (!isActive ? { opacity: 0 } : {}),\n};\n\nexport function SharedLayoutBg({\n children,\n className,\n pillClassName,\n inset = 0,\n}: SharedLayoutBgProps) {\n const [activeId, setActiveId] = useState<string | null>(null);\n const uid = useId();\n const reduce = useReducedMotion();\n\n const rows: ReactNode[] = [];\n for (const child of Children.toArray(children)) {\n if (!isValidElement(child)) continue;\n const el = child as ReactElement<{\n className?: string;\n onMouseEnter?: (e?: any) => void;\n children?: ReactNode;\n }>;\n // rows.length is the index among *valid* children, so keyless rows keep stable fallback keys.\n const childKey = el.key ? String(el.key) : `item-${rows.length}`;\n rows.push(\n cloneElement(\n el,\n {\n key: childKey,\n className: cn(\"relative z-10\", el.props.className),\n onMouseEnter: (e: any) => {\n el.props.onMouseEnter?.(e);\n setActiveId(childKey);\n },\n },\n <>\n <div className=\"pointer-events-none absolute inset-0 z-0\">\n <AnimatePresence custom={activeId !== null}>\n {activeId !== null ? (\n <m.div\n variants={reduce ? reducedVariants : variants}\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n custom={activeId !== null}\n className=\"absolute inset-0\"\n style={{ left: -inset, right: -inset, top: 0, bottom: 0 }}\n >\n {activeId === childKey ? (\n <m.div\n layoutId={`shared-bg-${uid}`}\n transition={reduce ? { duration: 0 } : SPRING_LAYOUT}\n className={cn(\n \"pointer-events-none h-full w-full rounded-lg\",\n pillClassName,\n )}\n />\n ) : null}\n </m.div>\n ) : null}\n </AnimatePresence>\n </div>\n {el}\n </>\n ),\n );\n }\n\n return (\n <LazyMotion features={domMax}>\n <m.div\n layoutRoot\n onMouseLeave={() => setActiveId(null)}\n className={cn(\"flex w-full flex-col\", className)}\n >\n {rows}\n </m.div>\n </LazyMotion>\n );\n}\n","// beui.dev/components/motion/scroll-animation\nimport type Lenis from 'lenis';\nimport { ReactLenis, useLenis } from 'lenis/react';\nimport { type MotionValue, useMotionValue, useReducedMotion } from 'motion/react';\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\n// Lenis' own expo-out curve, kept as a named fn (not a lib/ease token): tokens are bezier control\n// points for the motion lib, while Lenis needs a (t) => number easing fn.\nconst EASE_SCROLL = (t: number) => Math.min(1, 1.001 - 2 ** (-10 * t));\n\nexport type ScrollTarget = number | string | HTMLElement;\n\nexport type ScrollToOptions = {\n offset?: number;\n immediate?: boolean;\n duration?: number;\n};\n\nexport type SmoothScrollApi = {\n /** Underlying Lenis instance, or null on the reduced-motion / native path. */\n lenis: Lenis | null;\n /** Current scroll offset in px. */\n scrollY: MotionValue<number>;\n /** Scroll position as 0..1 of the scrollable height. */\n progress: MotionValue<number>;\n /** Signed scroll velocity (px/frame). */\n velocity: MotionValue<number>;\n /** Programmatic smooth scroll. Respects reduced motion (jumps instantly). */\n scrollTo: (target: ScrollTarget, options?: ScrollToOptions) => void;\n};\n\nconst SmoothScrollContext = createContext<SmoothScrollApi | null>(null);\n\nexport interface SmoothScrollProps {\n children: ReactNode;\n /** Drive the page (window) when true, or a contained scroll area when false. */\n root?: boolean;\n /** Smoothing factor; lower is smoother and heavier. */\n lerp?: number;\n /** Wheel / programmatic ease duration in seconds. */\n duration?: number;\n orientation?: 'vertical' | 'horizontal';\n wheelMultiplier?: number;\n /** Off by default - native touch momentum is already good on mobile. */\n touch?: boolean;\n className?: string;\n}\n\ntype ScrollSource = Window | HTMLElement;\n\nfunction readMetrics(target: ScrollSource) {\n if (target instanceof Window) {\n const max = Math.max(\n 0,\n document.documentElement.scrollHeight - window.innerHeight,\n );\n return { y: window.scrollY, max };\n }\n return {\n y: target.scrollTop,\n max: Math.max(0, target.scrollHeight - target.clientHeight),\n };\n}\n\nfunction resolveTop(\n target: ScrollTarget,\n source: ScrollSource,\n offset = 0,\n): number {\n if (typeof target === 'number') return target + offset;\n if (source instanceof Window) {\n const el =\n typeof target === 'string' ? document.querySelector(target) : target;\n if (!el) return window.scrollY;\n return el.getBoundingClientRect().top + window.scrollY + offset;\n }\n const el =\n typeof target === 'string' ? source.querySelector(target) : target;\n if (!(el instanceof HTMLElement)) return source.scrollTop;\n return el.offsetTop + offset;\n}\n\n/** Pushes Lenis' live scroll state into the shared motion values. */\nfunction LenisBridge({\n scrollY,\n progress,\n velocity,\n lenisRef,\n}: {\n scrollY: MotionValue<number>;\n progress: MotionValue<number>;\n velocity: MotionValue<number>;\n lenisRef: { current: Lenis | null };\n}) {\n const lenis = useLenis((instance) => {\n scrollY.set(instance.scroll);\n progress.set(instance.progress);\n velocity.set(instance.velocity);\n });\n useEffect(() => {\n lenisRef.current = lenis ?? null;\n return () => {\n lenisRef.current = null;\n };\n }, [lenis, lenisRef]);\n return null;\n}\n\n/** Native scroll listener for the reduced-motion path and the no-provider fallback. */\nfunction useNativeScrollSync(\n enabled: boolean,\n getTarget: () => ScrollSource | null,\n scrollY: MotionValue<number>,\n progress: MotionValue<number>,\n velocity: MotionValue<number>,\n) {\n useEffect(() => {\n if (!enabled) return;\n const target = getTarget();\n if (!target) return;\n let lastY = readMetrics(target).y;\n let lastT = performance.now();\n const onScroll = () => {\n const { y, max } = readMetrics(target);\n const now = performance.now();\n const dt = now - lastT || 16;\n scrollY.set(y);\n progress.set(max > 0 ? y / max : 0);\n velocity.set(((y - lastY) / dt) * 16);\n lastY = y;\n lastT = now;\n };\n onScroll();\n target.addEventListener('scroll', onScroll, { passive: true });\n return () => target.removeEventListener('scroll', onScroll);\n }, [enabled, getTarget, scrollY, progress, velocity]);\n}\n\nexport function SmoothScroll({\n children,\n root = true,\n lerp = 0.1,\n duration = 1.2,\n orientation = 'vertical',\n wheelMultiplier = 1,\n touch = false,\n className,\n}: SmoothScrollProps) {\n const reduce = useReducedMotion();\n const scrollY = useMotionValue(0);\n const progress = useMotionValue(0);\n const velocity = useMotionValue(0);\n const lenisRef = useRef<Lenis | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const nativeSource = useCallback(\n (): ScrollSource | null => (root ? window : containerRef.current),\n [root],\n );\n\n const scrollTo = useCallback(\n (target: ScrollTarget, options?: ScrollToOptions) => {\n const lenis = lenisRef.current;\n if (lenis && !reduce) {\n lenis.scrollTo(target, {\n offset: options?.offset,\n duration: options?.duration,\n immediate: options?.immediate,\n });\n return;\n }\n const source = nativeSource();\n const behavior = reduce || options?.immediate ? 'auto' : 'smooth';\n const top = resolveTop(target, source ?? window, options?.offset);\n (source ?? window).scrollTo({ top, behavior });\n },\n [reduce, nativeSource],\n );\n\n // Reduced motion drives the native listener; otherwise LenisBridge feeds the values instead.\n useNativeScrollSync(!!reduce, nativeSource, scrollY, progress, velocity);\n\n const api = useMemo<SmoothScrollApi>(\n () => ({ lenis: lenisRef.current, scrollY, progress, velocity, scrollTo }),\n [scrollY, progress, velocity, scrollTo],\n );\n\n if (reduce) {\n return (\n <SmoothScrollContext.Provider value={api}>\n <div ref={containerRef} className={className}>\n {children}\n </div>\n </SmoothScrollContext.Provider>\n );\n }\n\n return (\n <SmoothScrollContext.Provider value={api}>\n <ReactLenis\n root={root}\n className={className}\n options={{\n lerp,\n duration,\n orientation,\n wheelMultiplier,\n smoothWheel: true,\n syncTouch: touch,\n easing: EASE_SCROLL,\n // Without this, Lenis preventDefault()s every wheel event, blocking nested scrollable\n // elements (log panes, drawers, option lists). Escape hatch: `data-lenis-prevent`.\n allowNestedScroll: true,\n }}\n >\n <LenisBridge\n scrollY={scrollY}\n progress={progress}\n velocity={velocity}\n lenisRef={lenisRef}\n />\n {children}\n </ReactLenis>\n </SmoothScrollContext.Provider>\n );\n}\n","// Adapted from a min/max/step range slider so labeled steps (e.g. Low/Medium/High/Max) line up on\n// evenly spaced stops; the value readout sits statically above the track (no floating/portal tooltip).\nimport {\n domAnimation,\n LazyMotion,\n m,\n useMotionTemplate,\n useMotionValue,\n useReducedMotion,\n useSpring,\n useTransform,\n} from 'motion/react';\nimport {\n type KeyboardEvent,\n type PointerEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { cn } from '../../lib/utils';\nimport { useIsDarkMode } from '../../hooks/use-is-dark-mode';\n\nconst SPRING_GLIDE = { stiffness: 700, damping: 50, mass: 0.5 } as const;\nconst SPRING_BOUNCY = { type: 'spring', stiffness: 500, damping: 14, mass: 0.7 } as const;\n\n// Deterministic 0..1 seed from the slider's id, so two sliders maxed out at once get slightly\n// different hues/timing instead of pulsing in perfect unison.\nfunction seedFromId(id: string | undefined) {\n if (!id) return 0;\n let hash = 0;\n for (let i = 0; i < id.length; i += 1) {\n hash = (hash * 31 + id.charCodeAt(i)) >>> 0;\n }\n return (hash % 997) / 997;\n}\n\nexport interface SteppedSliderStep {\n value: number;\n label: string;\n}\n\nexport interface SteppedSliderProps {\n id?: string;\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n /** Tick dots + labels rendered at each defined step. */\n steps?: SteppedSliderStep[];\n /** Live value readout shown above the track, and used as the accessible aria-valuetext. Defaults to the raw value. */\n formatValue?: (value: number) => string;\n disabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\nexport function SteppedSlider({\n id,\n value,\n defaultValue = 0,\n onValueChange,\n min = 0,\n max = 100,\n step = 1,\n steps = [],\n formatValue,\n disabled = false,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: SteppedSliderProps) {\n const reduce = useReducedMotion();\n const isDark = useIsDarkMode();\n const seed = useMemo(() => seedFromId(id), [id]);\n const trackRef = useRef<HTMLDivElement>(null);\n const [internal, setInternal] = useState(defaultValue);\n const [active, setActive] = useState(false);\n // Decoupled from the committed value so onValueChange fires once per gesture (on release),\n // not on every pointer-move tick. Mirrored in a ref so release can read the pending value\n // without doing the commit inside a state updater.\n const [dragValue, setDragValue] = useState<number | null>(null);\n const dragValueRef = useRef<number | null>(null);\n const controlled = value !== undefined;\n const committedValue = clamp(controlled ? (value as number) : internal, min, max);\n const current = active && dragValue !== null ? clamp(dragValue, min, max) : committedValue;\n const percent = ((current - min) / (max - min)) * 100;\n const isMaxed = current === max;\n\n // Hue-shifted and timed per instance so simultaneous maxed-out sliders don't pulse in unison.\n const hue = 185 + (seed - 0.5) * 16;\n const glowColor = isDark ? `oklch(68% 0.14 ${hue})` : `oklch(52% 0.13 ${hue})`;\n const fillGradient = isDark\n ? `linear-gradient(90deg, oklch(28% 0.08 ${hue}), oklch(62% 0.12 ${hue}))`\n : `linear-gradient(90deg, oklch(93% 0.03 ${hue}), oklch(56% 0.13 ${hue}))`;\n const dotDriftDuration = 1.4 + seed * 0.5;\n const glowDuration = 1.6 + seed * 0.6;\n\n const target = useMotionValue(percent);\n useEffect(() => {\n target.set(percent);\n }, [percent, target]);\n const smooth = useSpring(target, SPRING_GLIDE);\n const pos = reduce ? target : smooth;\n const left = useMotionTemplate`${pos}%`;\n const thumbX = useTransform(pos, (p) => `${-p}%`);\n\n const snapValue = useCallback(\n (next: number) => clamp(Math.round((next - min) / step) * step + min, min, max),\n [min, max, step],\n );\n\n const commit = useCallback(\n (next: number) => {\n const snapped = snapValue(next);\n if (!controlled) setInternal(snapped);\n onValueChange?.(snapped);\n },\n [controlled, onValueChange, snapValue],\n );\n\n const valueFromX = useCallback(\n (clientX: number) => {\n const rect = trackRef.current?.getBoundingClientRect();\n if (!rect) return committedValue;\n const ratio = clamp((clientX - rect.left) / rect.width, 0, 1);\n return min + ratio * (max - min);\n },\n [committedValue, min, max],\n );\n\n const trackDragValue = useCallback((next: number | null) => {\n dragValueRef.current = next;\n setDragValue(next);\n }, []);\n\n const onPointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n event.currentTarget.setPointerCapture(event.pointerId);\n setActive(true);\n trackDragValue(snapValue(valueFromX(event.clientX)));\n },\n [disabled, valueFromX, snapValue, trackDragValue],\n );\n\n const onPointerMove = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n if (!active || disabled) return;\n trackDragValue(snapValue(valueFromX(event.clientX)));\n },\n [active, disabled, valueFromX, snapValue, trackDragValue],\n );\n\n const endDrag = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n setActive(false);\n const pending = dragValueRef.current;\n trackDragValue(null);\n if (pending !== null) commit(pending);\n },\n [commit, trackDragValue],\n );\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n const map: Record<string, number> = {\n ArrowRight: committedValue + step,\n ArrowUp: committedValue + step,\n ArrowLeft: committedValue - step,\n ArrowDown: committedValue - step,\n Home: min,\n End: max,\n };\n if (event.key in map) {\n event.preventDefault();\n commit(map[event.key]);\n }\n },\n [disabled, committedValue, step, min, max, commit],\n );\n\n const valueLabel = formatValue ? formatValue(current) : String(current);\n\n return (\n <LazyMotion features={domAnimation}>\n <div className={cn('w-full', className)}>\n <div className=\"mb-1.5 flex justify-end\">\n <span className=\"text-xs font-medium text-foreground tabular-nums\">{valueLabel}</span>\n </div>\n\n <div\n ref={trackRef}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endDrag}\n onPointerCancel={endDrag}\n className={cn(\n 'relative flex h-10 w-full touch-none select-none items-center overflow-hidden rounded-lg bg-muted',\n disabled ? 'pointer-events-none opacity-50' : 'cursor-grab active:cursor-grabbing',\n )}\n >\n {/* Pattern repeats every 10px, shifting by exactly one period, so the loop point is never visible. */}\n <m.div className=\"absolute inset-y-0 left-0 overflow-hidden\" style={{ width: left }}>\n {isMaxed ? (\n <div\n className=\"absolute inset-0\"\n style={{ backgroundImage: fillGradient }}\n >\n <m.div\n className=\"absolute inset-0\"\n style={{\n backgroundImage: 'radial-gradient(circle, rgba(255,255,255,0.85) 1.3px, transparent 1.3px)',\n backgroundSize: '10px 10px',\n }}\n animate={reduce ? undefined : { backgroundPositionX: ['0px', '10px'] }}\n transition={{ duration: dotDriftDuration, repeat: Infinity, ease: 'linear' }}\n />\n </div>\n ) : (\n <div className=\"absolute inset-0 bg-foreground/15\" />\n )}\n </m.div>\n\n {/* Inset so end dots don't clip; sized up at max so they don't blend into the dot texture. */}\n <div className=\"pointer-events-none absolute inset-x-2 inset-y-0\">\n {steps.map((tick) => {\n const tp = ((tick.value - min) / (max - min)) * 100;\n return (\n <span\n key={tick.value}\n className={cn(\n 'absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full',\n isMaxed ? 'size-1.5 bg-white shadow-[0_0_0_1.5px_rgba(0,0,0,0.35)]' : 'size-1 bg-foreground/25',\n )}\n style={{ left: `${tp}%` }}\n />\n );\n })}\n </div>\n\n {/* Own layer so only opacity animates - Motion's box-shadow interpolator can't parse CSS custom properties in the color stops. */}\n {isMaxed && !reduce && (\n <m.div\n aria-hidden\n className=\"pointer-events-none absolute top-1/2 h-5 w-1.5 rounded-sm\"\n style={{ left, x: thumbX, y: '-50%', boxShadow: `0 0 9px 3px ${glowColor}` }}\n animate={{ opacity: [0.25, 0.9, 0.25], scale: [1, 1.15, 1] }}\n transition={{ duration: glowDuration, repeat: Infinity, ease: 'easeInOut', delay: seed * 0.5 }}\n />\n )}\n\n <m.div\n id={id}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={Math.round(current)}\n aria-valuetext={valueLabel}\n aria-disabled={disabled || undefined}\n onKeyDown={onKeyDown}\n animate={reduce ? undefined : { scaleY: active ? 1.35 : 1 }}\n transition={SPRING_BOUNCY}\n className={cn(\n 'absolute top-1/2 h-5 w-1.5 rounded-sm bg-foreground shadow-sm outline-none ring-foreground/30 focus-visible:ring-4',\n // Background-colored ring keeps the thumb legible against the accent fill at any position.\n isMaxed && 'ring-2 ring-background',\n )}\n style={{ left, x: thumbX, y: '-50%' }}\n />\n </div>\n\n {steps.length > 0 && (\n <div className=\"relative mt-1.5 h-4\">\n <div className=\"absolute inset-x-2 inset-y-0\">\n {steps.map((tick, index) => {\n const isFirst = index === 0;\n const isLast = index === steps.length - 1;\n const tp = ((tick.value - min) / (max - min)) * 100;\n return (\n <span\n key={tick.value}\n className={cn(\n 'absolute text-[10px] font-medium text-muted-foreground',\n isFirst && 'left-0',\n isLast && 'right-0',\n !isFirst && !isLast && '-translate-x-1/2',\n )}\n style={!isFirst && !isLast ? { left: `${tp}%` } : undefined}\n >\n {tick.label}\n </span>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </LazyMotion>\n );\n}\n","// beui.dev/components/motion/tabs\n// domMax rather than domAnimation: the active-tab indicator animates via layoutId/layoutRoot, and\n// layout projection only ships in the max bundle.\nimport { LazyMotion, m, domMax, MotionConfig, useReducedMotion, type Transition } from 'motion/react';\nimport {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../lib/utils';\n\ntype Variant = 'pill' | 'underline' | 'segment';\n\ntype Ctx = {\n value: string;\n setValue: (v: string) => void;\n layoutId: string;\n variant: Variant;\n};\n\nconst TabsCtx = createContext<Ctx | null>(null);\n\nfunction useTabs() {\n const ctx = useContext(TabsCtx);\n if (!ctx) throw new Error('Tabs.* must be used inside <Tabs>');\n return ctx;\n}\n\n// A touch of overshoot so the active-tab indicator settles with life instead of snapping.\nconst transition: Transition = {\n type: 'spring',\n stiffness: 170,\n damping: 24,\n mass: 1.2,\n};\n\nexport function Tabs({\n defaultValue,\n value,\n onValueChange,\n variant = 'pill',\n children,\n className,\n}: {\n defaultValue?: string;\n value?: string;\n onValueChange?: (v: string) => void;\n variant?: Variant;\n children: ReactNode;\n className?: string;\n}) {\n const [internal, setInternal] = useState(defaultValue ?? '');\n const layoutId = useId();\n const reduce = useReducedMotion();\n const controlled = value !== undefined;\n const current = controlled ? value : internal;\n const setValue = useCallback(\n (v: string) => {\n if (!controlled) setInternal(v);\n onValueChange?.(v);\n },\n [controlled, onValueChange],\n );\n const ctx = useMemo(\n () => ({ value: current, setValue, layoutId, variant }),\n [current, setValue, layoutId, variant],\n );\n return (\n <MotionConfig transition={reduce ? { duration: 0 } : transition}>\n <TabsCtx.Provider value={ctx}>\n <LazyMotion features={domMax}>\n {/* layoutRoot: the indicator's layoutId measures in page coordinates, so without this\n it would replay scroll offsets as movement inside fixed/scrolled containers. */}\n <m.div layoutRoot className={className}>\n {children}\n </m.div>\n </LazyMotion>\n </TabsCtx.Provider>\n </MotionConfig>\n );\n}\n\nconst listClasses: Record<Variant, string> = {\n pill: 'inline-flex items-center gap-1 rounded-full bg-card p-1',\n underline: 'inline-flex items-center gap-1 border-b border-border',\n segment: 'inline-flex items-center gap-0 rounded-md border border-ui-line bg-ui-fill/40 p-0.5',\n};\n\nexport function TabsList({ children, className }: { children: ReactNode; className?: string }) {\n const { variant } = useTabs();\n return (\n <div role=\"tablist\" className={cn(listClasses[variant], className)}>\n {children}\n </div>\n );\n}\n\nexport function TabsTrigger({\n value,\n children,\n className,\n indicatorClassName,\n}: {\n value: string;\n children: ReactNode;\n className?: string;\n indicatorClassName?: string;\n}) {\n const { value: current, setValue, layoutId, variant } = useTabs();\n const active = current === value;\n\n if (variant === 'underline') {\n return (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => setValue(value)}\n className={cn(\n 'relative isolate px-3 pb-2.5 pt-1 -mb-px text-sm font-medium transition-colors min-h-[44px] inline-flex items-center',\n active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground',\n className,\n )}\n >\n {children}\n {active ? (\n <m.span\n layoutId={layoutId}\n className={cn('absolute -bottom-px left-0 right-0 h-px bg-primary', indicatorClassName)}\n />\n ) : null}\n </button>\n );\n }\n\n // Segment uses a neutral raised surface (vs. pill's max-contrast) so it reads as a standard segmented control.\n const isSegment = variant === 'segment';\n const radius = variant === 'pill' ? 'rounded-full' : 'rounded-[5px]';\n const indicatorBg = isSegment ? 'bg-ui-base shadow-sm ring-1 ring-ui-line' : 'bg-primary';\n const activeText = isSegment ? 'text-ui-strong' : 'text-primary-foreground';\n const inactiveText = isSegment\n ? 'text-ui-subtle hover:text-ui-default'\n : 'text-muted-foreground hover:text-foreground';\n\n return (\n <div className=\"relative\">\n {active ? (\n <m.span\n layoutId={layoutId}\n style={{ borderRadius: variant === 'pill' ? 9999 : 5 }}\n className={cn('absolute inset-0', indicatorBg, radius, indicatorClassName)}\n />\n ) : null}\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => setValue(value)}\n className={cn(\n 'relative z-10 inline-flex items-center justify-center whitespace-nowrap bg-transparent px-3.5 py-1.5 text-sm font-medium capitalize transition-colors outline-none',\n active ? activeText : inactiveText,\n radius,\n className,\n )}\n >\n {children}\n </button>\n </div>\n );\n}\n"],"mappings":"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","names":["useReducedMotion","jsx","jsxs","el","LazyMotion","m","useMotionValue","useReducedMotion","useCallback","useEffect","useMemo","useRef","useState","jsx","jsxs","useReducedMotion","useMemo","useRef","useState","useMotionValue","useEffect","useCallback","LazyMotion","m","LazyMotion","m","domMax","useReducedMotion","createContext","useCallback","useId","useMemo","useState","jsx","jsxs","createContext","useState","useId","useReducedMotion","useCallback","useMemo","LazyMotion","domMax","m"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import * as lucide_react from 'lucide-react';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import React__default, { CSSProperties, ReactNode } from 'react';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
6
|
+
|
|
7
|
+
declare const variants: {
|
|
8
|
+
default: {
|
|
9
|
+
bg: string;
|
|
10
|
+
border: string;
|
|
11
|
+
color: string;
|
|
12
|
+
icon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
13
|
+
};
|
|
14
|
+
destructive: {
|
|
15
|
+
bg: string;
|
|
16
|
+
border: string;
|
|
17
|
+
color: string;
|
|
18
|
+
icon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
19
|
+
};
|
|
20
|
+
warning: {
|
|
21
|
+
bg: string;
|
|
22
|
+
border: string;
|
|
23
|
+
color: string;
|
|
24
|
+
icon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
25
|
+
};
|
|
26
|
+
success: {
|
|
27
|
+
bg: string;
|
|
28
|
+
border: string;
|
|
29
|
+
color: string;
|
|
30
|
+
icon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
34
|
+
variant?: keyof typeof variants;
|
|
35
|
+
icon?: React.ElementType;
|
|
36
|
+
}
|
|
37
|
+
declare const Alert: React.ForwardRefExoticComponent<AlertProps & React.RefAttributes<HTMLDivElement>>;
|
|
38
|
+
|
|
39
|
+
declare const badgeVariants: (props?: ({
|
|
40
|
+
variant?: "default" | "warning" | "success" | "secondary" | "neutral" | "info" | "danger" | "outline" | null | undefined;
|
|
41
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
42
|
+
|
|
43
|
+
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
44
|
+
}
|
|
45
|
+
declare function Badge({ className, variant, ...props }: BadgeProps): React.JSX.Element;
|
|
46
|
+
|
|
47
|
+
declare const buttonVariants: (props?: ({
|
|
48
|
+
variant?: "default" | "destructive" | "link" | "secondary" | "outline" | "primary" | "destructive-outline" | "warning-outline" | "ghost" | "accent" | null | undefined;
|
|
49
|
+
size?: "icon" | "default" | "base" | "sm" | "lg" | "xs" | null | undefined;
|
|
50
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
51
|
+
|
|
52
|
+
type Shape = 'base' | 'square' | 'circle';
|
|
53
|
+
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
54
|
+
asChild?: boolean;
|
|
55
|
+
shape?: Shape;
|
|
56
|
+
/** Element rendered before children (skipped while `loading`). */
|
|
57
|
+
icon?: React.ReactNode;
|
|
58
|
+
/** Shows a spinner and disables the button. */
|
|
59
|
+
loading?: boolean;
|
|
60
|
+
}
|
|
61
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
62
|
+
interface LinkButtonProps extends React.AnchorHTMLAttributes<HTMLAnchorElement>, VariantProps<typeof buttonVariants> {
|
|
63
|
+
shape?: Shape;
|
|
64
|
+
icon?: React.ReactNode;
|
|
65
|
+
/** Open in a new tab with safe rel attributes. */
|
|
66
|
+
external?: boolean;
|
|
67
|
+
}
|
|
68
|
+
declare const LinkButton: React.ForwardRefExoticComponent<LinkButtonProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
69
|
+
|
|
70
|
+
interface ConfirmDialogProps {
|
|
71
|
+
open: boolean;
|
|
72
|
+
onOpenChange: (open: boolean) => void;
|
|
73
|
+
title: string;
|
|
74
|
+
description: string;
|
|
75
|
+
confirmLabel?: string;
|
|
76
|
+
cancelLabel?: string;
|
|
77
|
+
confirmVariant?: ButtonProps['variant'];
|
|
78
|
+
onConfirm: () => void;
|
|
79
|
+
}
|
|
80
|
+
declare function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel, cancelLabel, confirmVariant, onConfirm, }: ConfirmDialogProps): React.JSX.Element;
|
|
81
|
+
|
|
82
|
+
type InputSize = 'xs' | 'sm' | 'base' | 'lg';
|
|
83
|
+
interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
84
|
+
size?: InputSize;
|
|
85
|
+
}
|
|
86
|
+
declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
87
|
+
|
|
88
|
+
/** Uses the `ui-*` surface tokens defined in app.css. */
|
|
89
|
+
declare const LayerCard: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
90
|
+
|
|
91
|
+
interface SelectOption {
|
|
92
|
+
value: string;
|
|
93
|
+
label: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
interface SelectProps {
|
|
97
|
+
value: string;
|
|
98
|
+
onValueChange: (value: string) => void;
|
|
99
|
+
options: SelectOption[];
|
|
100
|
+
placeholder?: string;
|
|
101
|
+
label?: string;
|
|
102
|
+
className?: string;
|
|
103
|
+
triggerClassName?: string;
|
|
104
|
+
triggerStyle?: CSSProperties;
|
|
105
|
+
leadingIcon?: ReactNode;
|
|
106
|
+
/** Decides the dropdown's background so it stays distinguishable from where the trigger sits. */
|
|
107
|
+
variant?: 'page' | 'card';
|
|
108
|
+
}
|
|
109
|
+
declare function Select({ value, onValueChange, options, placeholder, label, className, triggerClassName, triggerStyle, leadingIcon, variant, }: SelectProps): React.JSX.Element;
|
|
110
|
+
|
|
111
|
+
interface SwitchProps {
|
|
112
|
+
checked?: boolean;
|
|
113
|
+
defaultChecked?: boolean;
|
|
114
|
+
disabled?: boolean;
|
|
115
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
116
|
+
className?: string;
|
|
117
|
+
'aria-label'?: string;
|
|
118
|
+
id?: string;
|
|
119
|
+
}
|
|
120
|
+
/** Toggle switch on Base UI, styled with the ui-* tokens (brand track when on). */
|
|
121
|
+
declare const Switch: React.ForwardRefExoticComponent<SwitchProps & React.RefAttributes<HTMLButtonElement>>;
|
|
122
|
+
|
|
123
|
+
declare const textVariants: (props?: ({
|
|
124
|
+
variant?: "body" | "strong" | "secondary" | null | undefined;
|
|
125
|
+
size?: "base" | "sm" | null | undefined;
|
|
126
|
+
bold?: boolean | null | undefined;
|
|
127
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
128
|
+
interface TextProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof textVariants> {
|
|
129
|
+
/** Element to render (e.g. "span", "h3"). Defaults to <p>. */
|
|
130
|
+
as?: React.ElementType;
|
|
131
|
+
}
|
|
132
|
+
/** Typographic primitive keyed off the ui-* surface text tokens. */
|
|
133
|
+
declare function Text({ as: Comp, variant, size, bold, className, ...props }: TextProps): React.JSX.Element;
|
|
134
|
+
|
|
135
|
+
interface SkeletonProps {
|
|
136
|
+
width?: string | number;
|
|
137
|
+
height?: string | number;
|
|
138
|
+
borderRadius?: string | number;
|
|
139
|
+
className?: string;
|
|
140
|
+
style?: React__default.CSSProperties;
|
|
141
|
+
}
|
|
142
|
+
declare const Skeleton: React__default.FC<SkeletonProps>;
|
|
143
|
+
|
|
144
|
+
interface EmptyStateProps {
|
|
145
|
+
icon?: React__default.ReactNode;
|
|
146
|
+
title: string;
|
|
147
|
+
description?: string;
|
|
148
|
+
/** Bullet hints with a green dot prefix. */
|
|
149
|
+
hints?: string[];
|
|
150
|
+
linkAction?: {
|
|
151
|
+
label: string;
|
|
152
|
+
href?: string;
|
|
153
|
+
onClick?: () => void;
|
|
154
|
+
};
|
|
155
|
+
/** Legacy single action button */
|
|
156
|
+
action?: {
|
|
157
|
+
label: string;
|
|
158
|
+
onClick: () => void;
|
|
159
|
+
};
|
|
160
|
+
className?: string;
|
|
161
|
+
}
|
|
162
|
+
declare function EmptyState({ icon, title, description, hints, linkAction, action, className }: EmptyStateProps): React__default.JSX.Element;
|
|
163
|
+
|
|
164
|
+
declare function SectionCard({ icon, title, description, action, children, }: {
|
|
165
|
+
icon?: ReactNode;
|
|
166
|
+
title: string;
|
|
167
|
+
description?: string;
|
|
168
|
+
action?: ReactNode;
|
|
169
|
+
children: ReactNode;
|
|
170
|
+
}): React.JSX.Element;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Drag-selecting a long, scrollable `<pre>` is miserable - the container
|
|
174
|
+
* scrolls while you drag, so one click is the reliable path instead.
|
|
175
|
+
*/
|
|
176
|
+
declare function CopyButton({ value, label, className, }: {
|
|
177
|
+
value: string;
|
|
178
|
+
label?: string;
|
|
179
|
+
className?: string;
|
|
180
|
+
}): React.JSX.Element;
|
|
181
|
+
|
|
182
|
+
interface BarSparklineProps {
|
|
183
|
+
/** Raw daily series; aggregated into `bars` buckets for the mini chart. */
|
|
184
|
+
data: number[];
|
|
185
|
+
/** Bar color (hex). A vertical gradient is derived from it. */
|
|
186
|
+
color: string;
|
|
187
|
+
bars?: number;
|
|
188
|
+
className?: string;
|
|
189
|
+
}
|
|
190
|
+
declare function BarSparkline({ data, color, bars, className }: BarSparklineProps): React.JSX.Element;
|
|
191
|
+
|
|
192
|
+
/** GitHub brand mark - lucide-react no longer ships brand icons. */
|
|
193
|
+
declare function GithubMark({ size, className }: {
|
|
194
|
+
size?: number;
|
|
195
|
+
className?: string;
|
|
196
|
+
}): React.JSX.Element;
|
|
197
|
+
|
|
198
|
+
interface LoadErrorProps {
|
|
199
|
+
/** Friendly headline, e.g. "Couldn't load dashboard data". */
|
|
200
|
+
title?: string;
|
|
201
|
+
/** Raw error detail (e.g. "Failed to fetch"), shown as a mono chip. */
|
|
202
|
+
detail?: string | null;
|
|
203
|
+
/** Guidance line under the title; defaults to connection-check copy. */
|
|
204
|
+
hint?: string;
|
|
205
|
+
onRetry?: () => void;
|
|
206
|
+
retrying?: boolean;
|
|
207
|
+
className?: string;
|
|
208
|
+
}
|
|
209
|
+
/** Friendly copy up front, raw error as a small mono chip - instead of a bare toast echoing "Failed to fetch". */
|
|
210
|
+
declare function LoadError({ title, detail, hint, onRetry, retrying, className, }: LoadErrorProps): React.JSX.Element;
|
|
211
|
+
|
|
212
|
+
declare function CardDots(): React.JSX.Element;
|
|
213
|
+
declare function GraphShell({ title, icon, legend, children, className, }: {
|
|
214
|
+
title: string;
|
|
215
|
+
icon?: ReactNode;
|
|
216
|
+
legend?: ReactNode;
|
|
217
|
+
children: ReactNode;
|
|
218
|
+
className?: string;
|
|
219
|
+
}): React.JSX.Element;
|
|
220
|
+
declare function LegendChip({ color, hatched, dashed, label, }: {
|
|
221
|
+
color?: string;
|
|
222
|
+
hatched?: boolean;
|
|
223
|
+
dashed?: boolean;
|
|
224
|
+
label: string;
|
|
225
|
+
}): React.JSX.Element;
|
|
226
|
+
declare function ChartDefs({ isDark }: {
|
|
227
|
+
isDark: boolean;
|
|
228
|
+
}): React.JSX.Element;
|
|
229
|
+
declare function MeterList({ visible, children }: {
|
|
230
|
+
visible: number;
|
|
231
|
+
children: ReactNode;
|
|
232
|
+
}): React.JSX.Element;
|
|
233
|
+
declare function TickMeter({ label, value, max, color, valueLabel, }: {
|
|
234
|
+
label: string;
|
|
235
|
+
value: number;
|
|
236
|
+
max: number;
|
|
237
|
+
color: string;
|
|
238
|
+
valueLabel: string;
|
|
239
|
+
}): React.JSX.Element;
|
|
240
|
+
|
|
241
|
+
export { Alert, Badge, BarSparkline, Button, type ButtonProps, CardDots, ChartDefs, ConfirmDialog, CopyButton, EmptyState, GithubMark, GraphShell, Input, type InputProps, LayerCard, LegendChip, LinkButton, LoadError, MeterList, SectionCard, Select, Skeleton, Switch, type SwitchProps, Text, TickMeter, badgeVariants, buttonVariants };
|