aporia 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +177 -0
- package/dist/ThemeProvider.d.ts +13 -0
- package/dist/ThemeProvider.d.ts.map +1 -0
- package/dist/components/ColorRow.d.ts +7 -0
- package/dist/components/ColorRow.d.ts.map +1 -0
- package/dist/components/GradientPicker.d.ts +19 -0
- package/dist/components/GradientPicker.d.ts.map +1 -0
- package/dist/components/GradientRow.d.ts +12 -0
- package/dist/components/GradientRow.d.ts.map +1 -0
- package/dist/components/SliderOverlapDebug.d.ts +6 -0
- package/dist/components/SliderOverlapDebug.d.ts.map +1 -0
- package/dist/components/SliderRow.d.ts +11 -0
- package/dist/components/SliderRow.d.ts.map +1 -0
- package/dist/components/SwatchPopover.d.ts +16 -0
- package/dist/components/SwatchPopover.d.ts.map +1 -0
- package/dist/components/ToggleRow.d.ts +7 -0
- package/dist/components/ToggleRow.d.ts.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1169 -0
- package/dist/index.js.map +1 -0
- package/dist/style.css +977 -0
- package/dist/utils/isTextInputTarget.d.ts +3 -0
- package/dist/utils/isTextInputTarget.d.ts.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/isTextInputTarget.ts","../src/components/SliderOverlapDebug.tsx","../src/ThemeProvider.tsx","../src/components/SliderRow.tsx","../src/components/SwatchPopover.tsx","../src/components/ColorRow.tsx","../src/components/ToggleRow.tsx","../src/components/GradientPicker.tsx","../src/components/GradientRow.tsx"],"sourcesContent":["/** True when a keyboard shortcut should not steal focus from editable fields. */\nexport function isTextInputTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) return false\n if (target.isContentEditable) return true\n const tag = target.tagName\n if (tag === 'TEXTAREA' || tag === 'SELECT') return true\n if (tag !== 'INPUT') return false\n const type = (target as HTMLInputElement).type\n return (\n type === 'text' ||\n type === 'search' ||\n type === 'url' ||\n type === 'tel' ||\n type === 'email' ||\n type === 'password' ||\n type === 'number' ||\n type === ''\n )\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from 'react'\nimport { isTextInputTarget } from '../utils/isTextInputTarget'\n\nconst SliderOverlapDebugContext = createContext(false)\n\nexport function SliderOverlapDebugProvider({ children }: { children: ReactNode }) {\n const [enabled, setEnabled] = useState(false)\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (!e.shiftKey || e.repeat) return\n if (e.code !== 'KeyD') return\n if (isTextInputTarget(e.target)) return\n e.preventDefault()\n setEnabled((v) => !v)\n }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [])\n\n return (\n <SliderOverlapDebugContext.Provider value={enabled}>\n {children}\n </SliderOverlapDebugContext.Provider>\n )\n}\n\nexport function useSliderOverlapDebugEnabled() {\n return useContext(SliderOverlapDebugContext)\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from 'react'\nimport { isTextInputTarget } from './utils/isTextInputTarget'\n\nexport type Theme = 'dark' | 'light'\n\nconst STORAGE_KEY = 'aporia-theme'\n\ntype ThemeContextValue = {\n theme: Theme\n setTheme: (t: Theme) => void\n toggleTheme: () => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nfunction readStoredTheme(): Theme {\n try {\n const s = localStorage.getItem(STORAGE_KEY)\n if (s === 'light' || s === 'dark') return s\n } catch {\n /* private mode etc. */\n }\n return 'dark'\n}\n\nexport function ThemeProvider({ children }: { children: ReactNode }) {\n const [theme, setThemeState] = useState<Theme>(readStoredTheme)\n\n useEffect(() => {\n document.documentElement.dataset.theme = theme\n try {\n localStorage.setItem(STORAGE_KEY, theme)\n } catch {\n /* ignore */\n }\n }, [theme])\n\n const setTheme = useCallback((t: Theme) => setThemeState(t), [])\n const toggleTheme = useCallback(() => {\n setThemeState((t) => (t === 'dark' ? 'light' : 'dark'))\n }, [])\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (!e.shiftKey || e.repeat) return\n if (e.code !== 'KeyT') return\n if (isTextInputTarget(e.target)) return\n e.preventDefault()\n toggleTheme()\n }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [toggleTheme])\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\nexport function useTheme() {\n const ctx = useContext(ThemeContext)\n if (!ctx) {\n throw new Error('useTheme must be used within ThemeProvider')\n }\n return ctx\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport type { PointerEvent as ReactPointerEvent } from 'react'\nimport { motion, useMotionValue, useSpring, useTransform } from 'motion/react'\nimport { useSliderOverlapDebugEnabled } from './SliderOverlapDebug'\nimport { useTheme } from '../ThemeProvider'\nimport './SliderRow.css'\n\nfunction clearDocumentSelection() {\n const sel = window.getSelection?.()\n if (sel && sel.rangeCount > 0) sel.removeAllRanges()\n}\n\n/** Fractional step → allow one decimal separator while typing. */\nfunction stepAllowsDecimal(step: number): boolean {\n if (!Number.isFinite(step) || step === 0) return true\n return step % 1 !== 0\n}\n\n/** Strip letters/symbols; keep optional leading `-` (if min < 0) and at most one `.` when step is fractional. */\nfunction sanitizeValueDraft(raw: string, min: number, step: number): string {\n const allowNeg = min < 0\n const allowDecimal = stepAllowsDecimal(step)\n let out = ''\n let dotUsed = false\n\n for (let i = 0; i < raw.length; i++) {\n const c = raw[i]\n if (allowNeg && c === '-' && out === '') {\n out += '-'\n continue\n }\n if (allowDecimal && c === '.' && !dotUsed) {\n dotUsed = true\n out += '.'\n continue\n }\n if (c >= '0' && c <= '9') {\n out += c\n continue\n }\n }\n return out\n}\n\n/** Normalized position in [0, 1]; stretch ramps to max within `edge` of each end */\nfunction edgeStretchPx(\n u: number,\n maxStretch: number,\n edge: number,\n dragBoost: number,\n): { left: number; right: number } {\n if (!Number.isFinite(u)) return { left: 0, right: 0 }\n const uClamped = Math.min(1, Math.max(0, u))\n let left = 0\n let right = 0\n if (uClamped < edge) left = (1 - uClamped / edge) * maxStretch\n else if (uClamped > 1 - edge) right = ((uClamped - (1 - edge)) / edge) * maxStretch\n return { left: left * dragBoost, right: right * dragBoost }\n}\n\nexport type SliderRowProps = {\n label: string\n value: number\n min: number\n max: number\n step: number\n onChange: (value: number) => void\n fmt?: (value: number) => string\n}\n\n/** Edge stretch while dragging (px at full deflection) */\nconst MAX_EDGE_STRETCH_PX = 2\nconst EDGE_FRACTION = 0.14\nconst AT_END_DRAG_BOOST = 1.04\n/** Overpull past min/max */\nconst PULL_GAIN = 0.05\nconst PULL_CAP_PX = 3\n\n/** Spring residue below this (px) snaps to 0 so width/margin match base exactly */\nconst STRETCH_SNAP_EPS_PX = 0.4\n\n/** Stiffer pull/stretch = quicker snap back after release */\nconst stretchSpringOpts = {\n stiffness: 340,\n damping: 42,\n mass: 0.4,\n restDelta: 0.012,\n restSpeed: 0.045,\n} as const\n\nconst pullSpringOpts = {\n stiffness: 520,\n damping: 46,\n mass: 0.34,\n restDelta: 0.012,\n restSpeed: 0.045,\n} as const\n\nconst THUMB_WIDTH_PX = 2\nconst THUMB_HEIGHT_PX = 16\nconst THUMB_HEIGHT_BEHIND_LABEL_PX = 10\n/** Gap from progress fill’s right edge to thumb’s right edge (translate anchor) */\nconst THUMB_INSET_FROM_FILL_END_PX = 10\n\n/** Extra space past measured text before the thumb counts as clear of label / value. */\nconst THUMB_OVERLAP_PAD_PX = 10\n\n/** Extra px after measured draft width so the caret isn’t clipped in the number input. */\nconst VALUE_EDIT_WIDTH_CARET_PAD_PX = 6\n\ntype ThumbOverlapDebugZones = {\n overlapLabelEnd: number\n overlapValueStart: number\n domLabelText: { left: number; top: number; width: number; height: number }\n domValueText: { left: number; top: number; width: number; height: number }\n}\n\ntype ThumbOverlapLayout = { labelEnd: number; valueStart: number }\n\nexport function SliderRow({\n label,\n value,\n min,\n max,\n step,\n onChange,\n fmt,\n}: SliderRowProps) {\n const { theme } = useTheme()\n const debugOverlap = useSliderOverlapDebugEnabled()\n const [editing, setEditing] = useState(false)\n const [hovered, setHovered] = useState(false)\n const [dragging, setDragging] = useState(false)\n const [draft, setDraft] = useState('')\n const [mounted, setMounted] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const cardRef = useRef<HTMLDivElement>(null)\n const wrapRef = useRef<HTMLDivElement>(null)\n const labelTextRef = useRef<HTMLSpanElement>(null)\n const valueTextRef = useRef<HTMLSpanElement>(null)\n const valueEditMeasureRef = useRef<HTMLSpanElement>(null)\n const valueRef = useRef<HTMLDivElement>(null)\n const [valueEditWidthPx, setValueEditWidthPx] = useState<number | null>(null)\n const [overlapLayout, setOverlapLayout] = useState<ThumbOverlapLayout | null>(null)\n const [idleThumbOpacity, setIdleThumbOpacity] = useState(0)\n const lastPointerXRef = useRef(0)\n const dragStateRef = useRef({ value, min, max })\n dragStateRef.current = { value, min, max }\n\n const targetStretchL = useMotionValue(0)\n const targetStretchR = useMotionValue(0)\n const stretchL = useSpring(targetStretchL, stretchSpringOpts)\n const stretchR = useSpring(targetStretchR, stretchSpringOpts)\n\n const pullL = useMotionValue(0)\n const pullR = useMotionValue(0)\n const pullLSpring = useSpring(pullL, pullSpringOpts)\n const pullRSpring = useSpring(pullR, pullSpringOpts)\n\n const baseW = useMotionValue(0)\n\n const cardWidth = useTransform(\n [stretchL, stretchR, pullLSpring, pullRSpring, baseW],\n ([l, r, pl, pr, b]) => {\n const base = Number(b)\n let extra = Number(l) + Number(r) + Number(pl) + Number(pr)\n if (Math.abs(extra) < STRETCH_SNAP_EPS_PX) extra = 0\n return Math.max(1, Math.round(base + extra))\n },\n )\n const cardMarginLeft = useTransform([stretchL, pullLSpring], ([l, pl]) => {\n let leftExtra = Number(l) + Number(pl)\n if (Math.abs(leftExtra) < STRETCH_SNAP_EPS_PX) leftExtra = 0\n return Math.round(-leftExtra)\n })\n\n /** Column width for sliders = parent row (e.g. .sliderGroup), not the wrap (can inflate with flex min-width:auto). */\n const syncBaseWidthFromParent = () => {\n const wrap = wrapRef.current\n const parent = wrap?.parentElement\n if (!parent) return\n // offsetWidth: integer layout width; avoids subpixel drift vs getBoundingClientRect\n baseW.set(parent.offsetWidth)\n }\n\n useLayoutEffect(() => {\n const wrap = wrapRef.current\n const parent = wrap?.parentElement\n if (!parent) return\n\n syncBaseWidthFromParent()\n const ro = new ResizeObserver(() => {\n syncBaseWidthFromParent()\n })\n ro.observe(parent)\n return () => ro.disconnect()\n }, [baseW])\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useLayoutEffect(() => {\n if (theme !== 'light') {\n setIdleThumbOpacity(0)\n return\n }\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue('--slider-thumb-idle-opacity')\n .trim()\n const n = parseFloat(raw)\n setIdleThumbOpacity(Number.isFinite(n) ? n : 0.4)\n }, [theme])\n\n const display = fmt ? fmt(value) : value\n\n useLayoutEffect(() => {\n const card = cardRef.current\n const labelEl = labelTextRef.current\n const valueEl = editing ? inputRef.current : valueTextRef.current\n if (!mounted || !card || !labelEl || !valueEl) {\n setOverlapLayout(null)\n return\n }\n\n const measure = () => {\n const c = cardRef.current\n const le = labelTextRef.current\n const ve = editing ? inputRef.current : valueTextRef.current\n if (!c || !le || !ve) {\n setOverlapLayout(null)\n return\n }\n const cardRect = c.getBoundingClientRect()\n const lr = le.getBoundingClientRect()\n const vr = ve.getBoundingClientRect()\n const w = cardRect.width\n let labelEnd = lr.right - cardRect.left + THUMB_OVERLAP_PAD_PX\n let valueStart = vr.left - cardRect.left - THUMB_OVERLAP_PAD_PX\n labelEnd = Math.min(Math.max(0, labelEnd), w)\n valueStart = Math.min(Math.max(0, valueStart), w)\n if (valueStart < labelEnd) valueStart = labelEnd\n\n setOverlapLayout((prev) => {\n if (\n prev &&\n prev.labelEnd === labelEnd &&\n prev.valueStart === valueStart\n ) {\n return prev\n }\n return { labelEnd, valueStart }\n })\n }\n\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(card)\n return () => ro.disconnect()\n }, [mounted, label, display, editing, draft, value])\n\n useLayoutEffect(() => {\n if (!editing) {\n setValueEditWidthPx(null)\n return\n }\n const measure = () => {\n const m = valueEditMeasureRef.current\n const zone = valueRef.current\n if (!m || !zone) return\n const w = m.getBoundingClientRect().width\n const cs = getComputedStyle(zone)\n const padL = parseFloat(cs.paddingLeft) || 0\n const padR = parseFloat(cs.paddingRight) || 0\n const maxInner = Math.max(0, zone.clientWidth - padL - padR)\n const next = Math.min(\n Math.max(Math.ceil(w + VALUE_EDIT_WIDTH_CARET_PAD_PX), 22),\n Math.max(maxInner, 22),\n )\n setValueEditWidthPx((prev) => (prev === next ? prev : next))\n }\n measure()\n const ro = new ResizeObserver(measure)\n const z = valueRef.current\n if (z) ro.observe(z)\n return () => ro.disconnect()\n }, [editing, draft])\n\n const span = max - min\n const u = span > 0 ? (value - min) / span : 0\n\n /*\n * Edge stretch must only run while the pointer drag is active. If we keep stretching\n * whenever u is near 0/1 (e.g. Spread stuck at 1.00), the card stays wider than siblings\n * forever — that reads as \"stuck overdrag\" and a second click often nudges u/hover.\n */\n useEffect(() => {\n if (span <= 0 || !Number.isFinite(u) || !dragging) {\n targetStretchL.set(0)\n targetStretchR.set(0)\n return\n }\n const atEnd = value <= min + 1e-9 || value >= max - 1e-9\n const dragBoost = atEnd ? AT_END_DRAG_BOOST : 1\n const { left, right } = edgeStretchPx(u, MAX_EDGE_STRETCH_PX, EDGE_FRACTION, dragBoost)\n targetStretchL.set(left)\n targetStretchR.set(right)\n }, [u, span, dragging, value, min, max, targetStretchL, targetStretchR])\n\n const resetPull = () => {\n pullL.set(0)\n pullR.set(0)\n }\n\n useEffect(() => {\n if (!dragging) return\n\n const onMove = (e: PointerEvent) => {\n const { value: v, min: lo, max: hi } = dragStateRef.current\n const sp = hi - lo\n if (sp <= 0) return\n const uNow = (v - lo) / sp\n const dx = e.clientX - lastPointerXRef.current\n lastPointerXRef.current = e.clientX\n\n if (uNow >= 1 - 1e-6 && dx > 0) {\n pullR.set(Math.min(PULL_CAP_PX, Math.max(0, pullR.get() + dx * PULL_GAIN)))\n } else if (uNow <= 1e-6 && dx < 0) {\n pullL.set(Math.min(PULL_CAP_PX, Math.max(0, pullL.get() - dx * PULL_GAIN)))\n }\n }\n\n const onEnd = () => {\n resetPull()\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onEnd)\n window.addEventListener('pointercancel', onEnd)\n return () => {\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onEnd)\n window.removeEventListener('pointercancel', onEnd)\n }\n }, [dragging, pullL, pullR])\n\n const pct = u * 100\n\n const getThumbLayout = (): {\n opacity: number\n height: number\n debugZones: ThumbOverlapDebugZones | null\n } => {\n if (!mounted || !cardRef.current || !overlapLayout) {\n return {\n opacity: dragging ? 1 : 0.7,\n height: THUMB_HEIGHT_PX,\n debugZones: null,\n }\n }\n\n const cardRect = cardRef.current.getBoundingClientRect()\n const fillEndPx = (cardRect.width * pct) / 100\n const thumbRightPx = fillEndPx - THUMB_INSET_FROM_FILL_END_PX\n const thumbCenterX = thumbRightPx - THUMB_WIDTH_PX / 2\n const { labelEnd, valueStart } = overlapLayout\n\n const behindLabel = thumbCenterX < labelEnd\n const behindValue = thumbCenterX > valueStart\n\n let opacity: number\n if (behindLabel || behindValue) {\n opacity = 0.1\n } else {\n opacity = dragging ? 1 : 0.7\n }\n\n const height = behindLabel ? THUMB_HEIGHT_BEHIND_LABEL_PX : THUMB_HEIGHT_PX\n\n let debugZones: ThumbOverlapDebugZones | null = null\n if (\n debugOverlap &&\n labelTextRef.current &&\n (editing ? inputRef.current : valueTextRef.current)\n ) {\n const cr = cardRef.current.getBoundingClientRect()\n const lr = labelTextRef.current.getBoundingClientRect()\n const ve = editing ? inputRef.current! : valueTextRef.current!\n const vr = ve.getBoundingClientRect()\n debugZones = {\n overlapLabelEnd: labelEnd,\n overlapValueStart: valueStart,\n domLabelText: {\n left: lr.left - cr.left,\n top: lr.top - cr.top,\n width: lr.width,\n height: lr.height,\n },\n domValueText: {\n left: vr.left - cr.left,\n top: vr.top - cr.top,\n width: vr.width,\n height: vr.height,\n },\n }\n }\n\n return { opacity, height, debugZones }\n }\n\n const { opacity: thumbOpacity, height: thumbHeight, debugZones } = getThumbLayout()\n\n const startEdit = (e: React.MouseEvent) => {\n e.stopPropagation()\n setDraft(String(value))\n setEditing(true)\n setTimeout(() => inputRef.current?.select(), 0)\n }\n\n const commitEdit = () => {\n const parsed = parseFloat(draft)\n if (!Number.isNaN(parsed)) {\n onChange(Math.max(min, Math.min(max, parsed)))\n }\n setEditing(false)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commitEdit()\n }\n if (e.key === 'Escape') {\n setEditing(false)\n }\n e.stopPropagation()\n }\n\n const isActive = hovered || dragging\n\n const idleThumbWidth = theme === 'light' ? THUMB_WIDTH_PX : 0\n\n const handleRangePointerDown = (e: ReactPointerEvent<HTMLInputElement>) => {\n clearDocumentSelection()\n lastPointerXRef.current = e.clientX\n syncBaseWidthFromParent()\n try {\n e.currentTarget.setPointerCapture(e.pointerId)\n } catch {\n /* ignore */\n }\n setDragging(true)\n }\n\n const handleRangePointerUp = (e: ReactPointerEvent<HTMLInputElement>) => {\n try {\n if (e.currentTarget.hasPointerCapture?.(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId)\n }\n } catch {\n /* ignore */\n }\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }\n\n return (\n <div\n className=\"sliderCardWrap\"\n ref={wrapRef}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <motion.div\n ref={cardRef}\n className=\"sliderCard\"\n data-active={isActive ? 'true' : 'false'}\n style={{ width: cardWidth, marginLeft: cardMarginLeft }}\n draggable={false}\n onDragStart={(e) => e.preventDefault()}\n >\n <motion.div\n className=\"sliderTrack\"\n data-active={isActive ? 'true' : 'false'}\n style={{ width: `${pct}%` }}\n />\n {debugZones ? (\n <div className=\"sliderDebugOverlap\" aria-hidden>\n <div\n className=\"sliderDebugOverlap__heuristic sliderDebugOverlap__heuristic--label\"\n style={{ width: debugZones.overlapLabelEnd }}\n title=\"Label overlap threshold (text right + pad)\"\n />\n <div\n className=\"sliderDebugOverlap__heuristic sliderDebugOverlap__heuristic--value\"\n style={{ left: debugZones.overlapValueStart }}\n title=\"Value overlap threshold (text left − pad)\"\n />\n <div\n className=\"sliderDebugOverlap__dom sliderDebugOverlap__dom--label\"\n style={{\n left: debugZones.domLabelText.left,\n top: debugZones.domLabelText.top,\n width: debugZones.domLabelText.width,\n height: debugZones.domLabelText.height,\n }}\n title=\"Measured label text box\"\n />\n <div\n className=\"sliderDebugOverlap__dom sliderDebugOverlap__dom--value\"\n style={{\n left: debugZones.domValueText.left,\n top: debugZones.domValueText.top,\n width: debugZones.domValueText.width,\n height: debugZones.domValueText.height,\n }}\n title=\"Measured value text / input box\"\n />\n </div>\n ) : null}\n <motion.div\n className=\"sliderThumb\"\n data-dragging={dragging ? 'true' : 'false'}\n style={{\n left: `calc(${pct}% - ${THUMB_INSET_FROM_FILL_END_PX}px)`,\n }}\n animate={{\n width: isActive ? THUMB_WIDTH_PX : idleThumbWidth,\n height: isActive ? thumbHeight : THUMB_HEIGHT_PX,\n opacity: isActive ? thumbOpacity : idleThumbOpacity,\n }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n />\n <motion.div\n className=\"sliderTicks\"\n animate={{ opacity: isActive ? 1 : 0 }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n >\n {[...Array(10)].map((_, i) => (\n <div key={i} className=\"sliderTick\" />\n ))}\n </motion.div>\n <input\n className=\"sliderInput\"\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n draggable={false}\n onChange={(e) => onChange(parseFloat(e.target.value))}\n onPointerDown={handleRangePointerDown}\n onPointerUp={handleRangePointerUp}\n onPointerCancel={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }}\n onLostPointerCapture={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }}\n />\n <span className=\"sliderLabel\" draggable={false}>\n <span ref={labelTextRef} className=\"sliderLabelText\">\n {label}\n </span>\n </span>\n <div\n ref={valueRef}\n className=\"sliderValueZone\"\n onClick={(e) => e.stopPropagation()}\n >\n {editing ? (\n <>\n <span\n ref={valueEditMeasureRef}\n className=\"sliderValue sliderValueText sliderValueMeasure\"\n aria-hidden\n >\n {draft.length > 0 ? draft : '0'}\n </span>\n <input\n ref={inputRef}\n className=\"sliderValueInput\"\n type=\"text\"\n inputMode={min < 0 || stepAllowsDecimal(step) ? 'decimal' : 'numeric'}\n value={draft}\n autoComplete=\"off\"\n spellCheck={false}\n aria-valuemin={min}\n aria-valuemax={max}\n style={\n valueEditWidthPx != null\n ? { width: valueEditWidthPx }\n : { minWidth: 22 }\n }\n onChange={(e) => setDraft(sanitizeValueDraft(e.target.value, min, step))}\n onBlur={commitEdit}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n />\n </>\n ) : (\n <span\n className=\"sliderValue\"\n draggable={false}\n data-active={isActive ? 'true' : 'false'}\n onClick={startEdit}\n >\n <span ref={valueTextRef} className=\"sliderValueText\">\n {display}\n </span>\n </span>\n )}\n </div>\n </motion.div>\n </div>\n )\n}\n","import { Popover } from '@base-ui/react'\nimport type { PopoverTrigger } from '@base-ui/react/popover'\nimport type { ReactNode } from 'react'\nimport './SwatchPopover.css'\n\nexport type SwatchPopoverRenderTrigger = PopoverTrigger.Props['render']\n\ntype SwatchPopoverProps = {\n title?: string\n renderTrigger: NonNullable<SwatchPopoverRenderTrigger>\n children: ReactNode\n}\n\n/**\n * Base UI Popover anchored to a swatch: opens below, aligned to the inline end (bottom-trailing in LTR).\n * `modal={true}` is required for the internal backdrop (blocks clicks/scroll on the rest of the page).\n * `modal=\"trap-focus\"` does not mount that layer, so controls underneath stayed clickable.\n */\nexport function SwatchPopover({ title, renderTrigger, children }: SwatchPopoverProps) {\n return (\n <Popover.Root modal>\n <Popover.Trigger render={renderTrigger} />\n <Popover.Portal className=\"swatchPopoverPortal\">\n <Popover.Positioner\n className=\"swatchPopoverPositioner\"\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"end\"\n sideOffset={6}\n collisionAvoidance={{ side: 'flip', align: 'shift', fallbackAxisSide: 'none' }}\n >\n <Popover.Popup\n className=\"swatchPopoverPopup\"\n initialFocus={(openType) => openType === 'keyboard'}\n >\n {title && <Popover.Title className=\"swatchPopoverTitle\">{title}</Popover.Title>}\n <Popover.Close type=\"button\" className=\"swatchPopoverCloseSrOnly\">\n Close\n </Popover.Close>\n <div className=\"swatchPopoverBody\">{children}</div>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import { useLayoutEffect, useRef, useState, type ChangeEvent, type ClipboardEvent, type KeyboardEvent, type MouseEvent } from 'react'\nimport { SwatchPopover } from './SwatchPopover'\nimport './ColorRow.css'\n\nfunction normalizeHex(raw: string): string {\n const s = raw.trim()\n const m = s.match(/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/)\n if (!m) return '#808080'\n let h = m[1]\n if (h.length === 3) {\n h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2]\n }\n return `#${h.toUpperCase()}`\n}\n\nfunction hexDigits(hex: string): string {\n const n = normalizeHex(hex)\n return n.slice(1)\n}\n\nfunction isValidSixHex(d: string): boolean {\n return /^[0-9a-fA-F]{6}$/.test(d)\n}\n\nexport type ColorRowProps = {\n label?: string\n value: string\n onChange: (hex: string) => void\n}\n\nexport function ColorRow({ label = 'Color', value, onChange }: ColorRowProps) {\n const [hovered, setHovered] = useState(false)\n const [editing, setEditing] = useState(false)\n const [draft, setDraft] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const hex = normalizeHex(value)\n const isActive = hovered || editing\n\n useLayoutEffect(() => {\n if (!editing) return\n inputRef.current?.focus()\n inputRef.current?.select()\n }, [editing])\n\n const startEdit = (e: MouseEvent) => {\n e.stopPropagation()\n setDraft(hexDigits(value))\n setEditing(true)\n }\n\n const commit = () => {\n const d = draft.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n if (isValidSixHex(d)) {\n onChange(`#${d.toUpperCase()}`)\n }\n setEditing(false)\n }\n\n const onHexKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commit()\n }\n if (e.key === 'Escape') {\n setEditing(false)\n }\n e.stopPropagation()\n }\n\n const onHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(next)\n }\n\n const onHexPaste = (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault()\n const pasted = e.clipboardData.getData('text')\n // Strip # and any non-hex characters, take first 6 valid chars\n const cleaned = pasted.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(cleaned)\n }\n\n const onPickerChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange(normalizeHex(e.target.value))\n }\n\n return (\n <div\n className=\"colorRowWrap\"\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <div className=\"colorCard\" data-active={isActive ? 'true' : 'false'}>\n <span className=\"colorLabel\">{label}</span>\n <div className=\"colorValueZone\">\n {editing ? (\n <span className=\"colorRowValue\" data-active={isActive ? 'true' : 'false'}>\n <span className=\"colorHexHash\">#</span>\n <input\n ref={inputRef}\n className=\"colorHexInput\"\n value={draft}\n onChange={onHexChange}\n onPaste={onHexPaste}\n onBlur={commit}\n onKeyDown={onHexKeyDown}\n onClick={(e) => e.stopPropagation()}\n maxLength={6}\n inputMode=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n aria-label=\"Hex color without hash\"\n />\n </span>\n ) : (\n <span\n className=\"colorRowValue\"\n data-active={isActive ? 'true' : 'false'}\n role=\"button\"\n tabIndex={0}\n aria-label={`Edit hex color, ${hex}`}\n onClick={startEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setDraft(hexDigits(value))\n setEditing(true)\n }\n }}\n >\n <span className=\"colorHexHash\">#</span>\n <span className=\"colorHexDigits\">{hexDigits(hex)}</span>\n </span>\n )}\n <SwatchPopover\n title={label}\n renderTrigger={(props) => (\n <button\n type=\"button\"\n {...props}\n className={['colorSwatchBtn', props.className].filter(Boolean).join(' ')}\n style={{ ...props.style, backgroundColor: hex }}\n aria-label={`Open ${label} picker`}\n />\n )}\n >\n <p>Custom color controls will live here. For now, use the system picker below.</p>\n <input\n type=\"color\"\n className=\"swatchPopoverNativeColor\"\n value={hex}\n onChange={onPickerChange}\n aria-label=\"Native color picker\"\n />\n </SwatchPopover>\n </div>\n </div>\n </div>\n )\n}\n","import type { KeyboardEvent } from 'react'\nimport './ToggleRow.css'\n\nexport type ToggleRowProps = {\n label: string\n checked: boolean\n onChange: (next: boolean) => void\n}\n\nexport function ToggleRow({ label, checked, onChange }: ToggleRowProps) {\n const toggle = () => onChange(!checked)\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n toggle()\n }\n }\n\n return (\n <div className=\"toggleRowWrap\">\n <div\n role=\"switch\"\n tabIndex={0}\n aria-checked={checked}\n aria-label={label}\n className=\"toggleCard\"\n data-on={checked ? 'true' : 'false'}\n onClick={toggle}\n onKeyDown={onKeyDown}\n >\n <span className=\"toggleLabel\">{label}</span>\n <div className=\"toggleControl\" aria-hidden>\n <div className=\"toggleSwitch\">\n <div className=\"toggleSwitch__track\">\n <div className=\"toggleSwitch__thumb\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ClipboardEvent,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react'\nimport './GradientPicker.css'\n\nexport type GradientStop = {\n color: string // hex with #\n}\n\nexport type GradientPickerProps = {\n /** Array of gradient stops (colors only, positions auto-distributed) */\n stops: GradientStop[]\n /** Called when stops change */\n onChange: (stops: GradientStop[]) => void\n /** Gradient angle in degrees, default 90 (left to right) */\n angle?: number\n}\n\nfunction normalizeHex(raw: string): string {\n const s = raw.trim()\n const m = s.match(/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/)\n if (!m) return '#808080'\n let h = m[1]\n if (h.length === 3) {\n h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2]\n }\n return `#${h.toUpperCase()}`\n}\n\n/** Convert HSL to RGB hex */\nfunction hslToHex(h: number, s: number, l: number): string {\n const hue = ((h % 360) + 360) % 360\n const sat = Math.max(0, Math.min(1, s))\n const lit = Math.max(0, Math.min(1, l))\n\n const c = (1 - Math.abs(2 * lit - 1)) * sat\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1))\n const m = lit - c / 2\n\n let r = 0, g = 0, b = 0\n if (hue < 60) { r = c; g = x; b = 0 }\n else if (hue < 120) { r = x; g = c; b = 0 }\n else if (hue < 180) { r = 0; g = c; b = x }\n else if (hue < 240) { r = 0; g = x; b = c }\n else if (hue < 300) { r = x; g = 0; b = c }\n else { r = c; g = 0; b = x }\n\n const toHex = (v: number) => Math.round((v + m) * 255).toString(16).padStart(2, '0')\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase()\n}\n\n/**\n * Generate an aesthetic gradient with smooth color transitions.\n * Creates gradients that flow from light to dark with a cohesive color story.\n */\nfunction generateAestheticGradient(stopCount: number): GradientStop[] {\n // Pick a random base hue (0-360)\n const baseHue = Math.random() * 360\n\n // Hue shift across the gradient (30-60 degrees for analogous feel)\n const hueShift = 25 + Math.random() * 35\n // Direction of hue shift (positive or negative)\n const hueDirection = Math.random() > 0.5 ? 1 : -1\n\n const stops: GradientStop[] = []\n\n for (let i = 0; i < stopCount; i++) {\n const t = i / (stopCount - 1) // 0 to 1\n\n // Hue shifts gradually across the gradient\n const hue = baseHue + hueDirection * hueShift * t\n\n // Saturation curve: starts lower, peaks in middle, can vary\n // This creates more interesting gradients than flat saturation\n const satBase = 0.35 + Math.random() * 0.15 // 0.35-0.50 base\n const satPeak = 0.65 + Math.random() * 0.25 // 0.65-0.90 peak\n const saturation = satBase + (satPeak - satBase) * Math.sin(t * Math.PI * 0.8)\n\n // Lightness: smooth transition from light to dark\n // Start light (0.75-0.85), end dark (0.08-0.15)\n const lightStart = 0.75 + Math.random() * 0.10\n const lightEnd = 0.08 + Math.random() * 0.07\n // Use easing for more natural transition\n const eased = t * t * (3 - 2 * t) // smoothstep\n const lightness = lightStart + (lightEnd - lightStart) * eased\n\n stops.push({ color: hslToHex(hue, saturation, lightness) })\n }\n\n return stops\n}\n\nfunction hexDigits(hex: string): string {\n return normalizeHex(hex).slice(1)\n}\n\nfunction isValidSixHex(d: string): boolean {\n return /^[0-9a-fA-F]{6}$/.test(d)\n}\n\n/** Generate CSS linear-gradient from stops with even distribution */\nexport function stopsToGradient(stops: GradientStop[], angle = 90): string {\n if (stops.length === 0) return 'linear-gradient(90deg, #808080, #808080)'\n if (stops.length === 1) {\n const c = normalizeHex(stops[0].color)\n return `linear-gradient(${angle}deg, ${c}, ${c})`\n }\n const colorStops = stops.map((s, i) => {\n const pos = Math.round((i / (stops.length - 1)) * 100)\n return `${normalizeHex(s.color)} ${pos}%`\n })\n return `linear-gradient(${angle}deg, ${colorStops.join(', ')})`\n}\n\n/** Parse a linear-gradient string into stops */\nexport function parseGradient(gradient: string): GradientStop[] {\n // Match linear-gradient(angle, color1 pos1%, color2 pos2%, ...)\n const match = gradient.match(/linear-gradient\\s*\\([^,]+,\\s*(.+)\\)/)\n if (!match) return [{ color: '#FF0000' }, { color: '#0000FF' }]\n\n const colorPart = match[1]\n // Split by comma, extract colors (ignore positions since we auto-distribute)\n const parts = colorPart.split(/,\\s*/)\n const stops: GradientStop[] = []\n\n for (const part of parts) {\n // Extract hex color from each part (e.g., \"#FF0000 0%\" or just \"#FF0000\")\n const hexMatch = part.match(/#[0-9a-fA-F]{3,6}/)\n if (hexMatch) {\n stops.push({ color: normalizeHex(hexMatch[0]) })\n }\n }\n\n return stops.length >= 2 ? stops : [{ color: '#FF0000' }, { color: '#0000FF' }]\n}\n\n/** Default 6 colors for gradient picker (dark to light, top to bottom) */\nexport const DEFAULT_GRADIENT_STOPS: GradientStop[] = [\n { color: '#0E171B' },\n { color: '#00354F' },\n { color: '#005F7A' },\n { color: '#009A97' },\n { color: '#42C0B0' },\n { color: '#BAC9C7' },\n]\n\ntype StopRowProps = {\n index: number\n stop: GradientStop\n canDelete: boolean\n onColorChange: (color: string) => void\n onDelete: () => void\n}\n\nfunction StopRow({ index, stop, canDelete, onColorChange, onDelete }: StopRowProps) {\n const [editing, setEditing] = useState(false)\n const [draft, setDraft] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const hex = normalizeHex(stop.color)\n\n useLayoutEffect(() => {\n if (!editing) return\n inputRef.current?.focus()\n inputRef.current?.select()\n }, [editing])\n\n const startEdit = (e: MouseEvent) => {\n e.stopPropagation()\n setDraft(hexDigits(stop.color))\n setEditing(true)\n }\n\n const commit = () => {\n const d = draft.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n if (isValidSixHex(d)) {\n onColorChange(`#${d.toUpperCase()}`)\n }\n setEditing(false)\n }\n\n const onHexKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commit()\n }\n if (e.key === 'Escape') {\n setEditing(false)\n }\n e.stopPropagation()\n }\n\n const onHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(next)\n }\n\n const onHexPaste = (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault()\n const pasted = e.clipboardData.getData('text')\n // Strip # and any non-hex characters, take first 6 valid chars\n const cleaned = pasted.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(cleaned)\n }\n\n return (\n <div className=\"gradientPickerStop\">\n <div className=\"gradientPickerStopColorHex\">\n <button\n type=\"button\"\n className=\"gradientPickerStopSwatch\"\n style={{ backgroundColor: hex }}\n onClick={startEdit}\n aria-label={`Edit color for stop ${index + 1}`}\n />\n {editing ? (\n <span className=\"gradientPickerStopHexWrap\">\n <span className=\"gradientPickerStopHexHash\">#</span>\n <input\n ref={inputRef}\n className=\"gradientPickerStopHexInput\"\n value={draft}\n onChange={onHexChange}\n onPaste={onHexPaste}\n onBlur={commit}\n onKeyDown={onHexKeyDown}\n onClick={(e) => e.stopPropagation()}\n maxLength={6}\n inputMode=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n aria-label=\"Hex color without hash\"\n />\n </span>\n ) : (\n <span\n className=\"gradientPickerStopHex\"\n role=\"button\"\n tabIndex={0}\n onClick={startEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setDraft(hexDigits(stop.color))\n setEditing(true)\n }\n }}\n >\n <span className=\"gradientPickerStopHexHash\">#</span>\n <span className=\"gradientPickerStopHexDigits\">{hexDigits(hex)}</span>\n </span>\n )}\n </div>\n\n <button\n type=\"button\"\n className=\"gradientPickerStopDelete\"\n onClick={onDelete}\n disabled={!canDelete}\n aria-label={`Remove stop ${index + 1}`}\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#minus\" />\n </svg>\n </button>\n </div>\n )\n}\n\nexport function GradientPicker({ stops, onChange }: GradientPickerProps) {\n const handleInvert = () => {\n onChange([...stops].reverse())\n }\n\n const handleAddStop = () => {\n // Add a new stop with a color interpolated between existing stops, or gray\n let newColor = '#808080'\n if (stops.length >= 2) {\n // Pick the midpoint color (just use the middle stop or first stop)\n const midIdx = Math.floor(stops.length / 2)\n newColor = stops[midIdx].color\n } else if (stops.length === 1) {\n newColor = stops[0].color\n }\n onChange([...stops, { color: newColor }])\n }\n\n const handleShuffle = () => {\n // Generate a new aesthetic gradient with the same number of stops\n onChange(generateAestheticGradient(stops.length))\n }\n\n const handleDeleteStop = (index: number) => {\n if (stops.length <= 2) return\n onChange(stops.filter((_, i) => i !== index))\n }\n\n const handleColorChange = (index: number, color: string) => {\n const newStops = stops.map((s, i) => (i === index ? { ...s, color } : s))\n onChange(newStops)\n }\n\n return (\n <div className=\"gradientPicker\">\n {/* Header with icons */}\n <div className=\"gradientPickerHeader\">\n <div className=\"gradientPickerHeaderIconsLeft\">\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleShuffle}\n aria-label=\"Randomize gradient\"\n title=\"Randomize gradient\"\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#shuffle-sparkle\" />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleInvert}\n aria-label=\"Invert gradient\"\n title=\"Invert gradient\"\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#dark-mode\" />\n </svg>\n </button>\n </div>\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleAddStop}\n aria-label=\"Add color stop\"\n title=\"Add color stop\"\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#plus\" />\n </svg>\n </button>\n </div>\n\n {/* Color stops list */}\n <div className=\"gradientPickerStopsList\">\n {stops.map((stop, i) => (\n <StopRow\n key={i}\n index={i}\n stop={stop}\n canDelete={stops.length > 2}\n onColorChange={(color) => handleColorChange(i, color)}\n onDelete={() => handleDeleteStop(i)}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { SwatchPopover } from './SwatchPopover'\nimport { GradientPicker, DEFAULT_GRADIENT_STOPS, stopsToGradient, type GradientStop } from './GradientPicker'\nimport './GradientRow.css'\n\nexport type GradientRowProps = {\n label?: string\n /** Initial gradient stops - defaults to 6 teal-to-dark colors */\n initialStops?: GradientStop[]\n /** Called when gradient changes */\n onChange?: (gradient: string) => void\n /** Gradient angle in degrees, default 90 */\n angle?: number\n}\n\nexport function GradientRow({ label = 'Gradient', initialStops, onChange, angle = 90 }: GradientRowProps) {\n const [hovered, setHovered] = useState(false)\n const isActive = hovered\n\n // Use provided stops or default to 6 colors\n const [stops, setStops] = useState<GradientStop[]>(() => initialStops ?? DEFAULT_GRADIENT_STOPS)\n\n const handleStopsChange = (newStops: GradientStop[]) => {\n setStops(newStops)\n if (onChange) {\n onChange(stopsToGradient(newStops, angle))\n }\n }\n\n const currentGradient = stopsToGradient(stops, angle)\n\n return (\n <div\n className=\"gradientRowWrap\"\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <div className=\"gradientCard\" data-active={isActive ? 'true' : 'false'}>\n <span className=\"gradientLabel\">{label}</span>\n <div className=\"gradientSwatchZone\">\n <SwatchPopover\n renderTrigger={(props) => (\n <button\n type=\"button\"\n {...props}\n className={['gradientSwatchBtn', props.className].filter(Boolean).join(' ')}\n style={{ ...props.style, background: currentGradient }}\n aria-label={`Open ${label} editor`}\n />\n )}\n >\n <GradientPicker stops={stops} onChange={handleStopsChange} angle={angle} />\n </SwatchPopover>\n </div>\n </div>\n </div>\n )\n}\n"],"names":["debugZones","normalizeHex","hexDigits","isValidSixHex"],"mappings":"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"}
|