@particle-academy/react-fancy 5.52.0 → 5.53.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.
Files changed (131) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +29 -1
  3. package/dist/accordion.cjs +3 -3
  4. package/dist/accordion.js +1 -1
  5. package/dist/autocomplete.cjs +2 -2
  6. package/dist/autocomplete.js +1 -1
  7. package/dist/chart.cjs +2 -2
  8. package/dist/chart.js +1 -1
  9. package/dist/{chunk-FWCREAIT.js → chunk-2BXMMVQS.js} +2 -2
  10. package/dist/{chunk-FWCREAIT.js.map → chunk-2BXMMVQS.js.map} +1 -1
  11. package/dist/{chunk-BYUJJXGY.cjs → chunk-2KFHSFFY.cjs} +3 -3
  12. package/dist/{chunk-BYUJJXGY.cjs.map → chunk-2KFHSFFY.cjs.map} +1 -1
  13. package/dist/{chunk-PRP5N7NY.js → chunk-35MF32VQ.js} +3 -3
  14. package/dist/{chunk-PRP5N7NY.js.map → chunk-35MF32VQ.js.map} +1 -1
  15. package/dist/{chunk-TJTC4WNY.cjs → chunk-4DGXL6JC.cjs} +3 -3
  16. package/dist/{chunk-TJTC4WNY.cjs.map → chunk-4DGXL6JC.cjs.map} +1 -1
  17. package/dist/{chunk-QAKIG43N.cjs → chunk-5IWKZ2WK.cjs} +3 -3
  18. package/dist/{chunk-QAKIG43N.cjs.map → chunk-5IWKZ2WK.cjs.map} +1 -1
  19. package/dist/{chunk-OWT5B3C2.cjs → chunk-5ZNOLPIJ.cjs} +3 -3
  20. package/dist/{chunk-OWT5B3C2.cjs.map → chunk-5ZNOLPIJ.cjs.map} +1 -1
  21. package/dist/{chunk-HPNIEYSJ.cjs → chunk-A2JUTNE6.cjs} +2 -2
  22. package/dist/{chunk-HPNIEYSJ.cjs.map → chunk-A2JUTNE6.cjs.map} +1 -1
  23. package/dist/{chunk-546K5LRX.cjs → chunk-CVDL6C2O.cjs} +3 -3
  24. package/dist/{chunk-546K5LRX.cjs.map → chunk-CVDL6C2O.cjs.map} +1 -1
  25. package/dist/{chunk-ZULMMW5W.js → chunk-EEFWVFKO.js} +3 -3
  26. package/dist/{chunk-ZULMMW5W.js.map → chunk-EEFWVFKO.js.map} +1 -1
  27. package/dist/{chunk-N2JESOCJ.js → chunk-EJ6P7K4G.js} +3 -3
  28. package/dist/{chunk-N2JESOCJ.js.map → chunk-EJ6P7K4G.js.map} +1 -1
  29. package/dist/{chunk-SONXLQPJ.cjs → chunk-EZA6GWZL.cjs} +7 -7
  30. package/dist/chunk-EZA6GWZL.cjs.map +1 -0
  31. package/dist/{chunk-45FDQ3R5.js → chunk-FRWOWDGX.js} +3 -3
  32. package/dist/{chunk-45FDQ3R5.js.map → chunk-FRWOWDGX.js.map} +1 -1
  33. package/dist/{chunk-36HG5JK6.cjs → chunk-GISORLGW.cjs} +3 -3
  34. package/dist/{chunk-36HG5JK6.cjs.map → chunk-GISORLGW.cjs.map} +1 -1
  35. package/dist/{chunk-BDUL42VO.cjs → chunk-GLGUQGAQ.cjs} +3 -3
  36. package/dist/{chunk-BDUL42VO.cjs.map → chunk-GLGUQGAQ.cjs.map} +1 -1
  37. package/dist/{chunk-A5DN2XNM.cjs → chunk-HTNQ5XUR.cjs} +3 -3
  38. package/dist/{chunk-A5DN2XNM.cjs.map → chunk-HTNQ5XUR.cjs.map} +1 -1
  39. package/dist/{chunk-RGMHRPHQ.cjs → chunk-ICI33QMY.cjs} +10 -10
  40. package/dist/{chunk-RGMHRPHQ.cjs.map → chunk-ICI33QMY.cjs.map} +1 -1
  41. package/dist/{chunk-JUQZMNPR.cjs → chunk-IEQK3LGI.cjs} +3 -3
  42. package/dist/{chunk-JUQZMNPR.cjs.map → chunk-IEQK3LGI.cjs.map} +1 -1
  43. package/dist/{chunk-MV6BK4WG.js → chunk-IUCYRQ4J.js} +6 -6
  44. package/dist/{chunk-MV6BK4WG.js.map → chunk-IUCYRQ4J.js.map} +1 -1
  45. package/dist/{chunk-N5XMBHX7.js → chunk-JXXUTPDH.js} +3 -3
  46. package/dist/{chunk-N5XMBHX7.js.map → chunk-JXXUTPDH.js.map} +1 -1
  47. package/dist/{chunk-WONP337S.cjs → chunk-JY7HPFOE.cjs} +6 -6
  48. package/dist/{chunk-WONP337S.cjs.map → chunk-JY7HPFOE.cjs.map} +1 -1
  49. package/dist/{chunk-4TVAHZ35.js → chunk-LZHGXRFD.js} +3 -3
  50. package/dist/{chunk-4TVAHZ35.js.map → chunk-LZHGXRFD.js.map} +1 -1
  51. package/dist/{chunk-Y7UE37QZ.js → chunk-NHGU2BWT.js} +3 -3
  52. package/dist/{chunk-Y7UE37QZ.js.map → chunk-NHGU2BWT.js.map} +1 -1
  53. package/dist/{chunk-ELBCK3V7.js → chunk-OC5OUZSD.js} +5 -5
  54. package/dist/{chunk-ELBCK3V7.js.map → chunk-OC5OUZSD.js.map} +1 -1
  55. package/dist/{chunk-3EWO5EBI.js → chunk-QGY5FPVM.js} +4 -4
  56. package/dist/{chunk-3EWO5EBI.js.map → chunk-QGY5FPVM.js.map} +1 -1
  57. package/dist/{chunk-OFNA5HS5.js → chunk-T45LBTXH.js} +3 -3
  58. package/dist/{chunk-OFNA5HS5.js.map → chunk-T45LBTXH.js.map} +1 -1
  59. package/dist/{chunk-XOYRJFMU.js → chunk-TKGMH5PA.js} +3 -3
  60. package/dist/{chunk-XOYRJFMU.js.map → chunk-TKGMH5PA.js.map} +1 -1
  61. package/dist/{chunk-A5RTALZJ.js → chunk-U4Y7ZXME.js} +7 -7
  62. package/dist/chunk-U4Y7ZXME.js.map +1 -0
  63. package/dist/{chunk-Z4EPQWVC.js → chunk-UIE5FP3A.js} +3 -3
  64. package/dist/{chunk-Z4EPQWVC.js.map → chunk-UIE5FP3A.js.map} +1 -1
  65. package/dist/{chunk-S3V2C4DW.cjs → chunk-UXYFM2XT.cjs} +4 -4
  66. package/dist/{chunk-S3V2C4DW.cjs.map → chunk-UXYFM2XT.cjs.map} +1 -1
  67. package/dist/{chunk-JBHQQGG5.cjs → chunk-VP7MT7LH.cjs} +7 -7
  68. package/dist/{chunk-JBHQQGG5.cjs.map → chunk-VP7MT7LH.cjs.map} +1 -1
  69. package/dist/{chunk-5DG4CAWS.js → chunk-YAPGHVBZ.js} +3 -3
  70. package/dist/{chunk-5DG4CAWS.js.map → chunk-YAPGHVBZ.js.map} +1 -1
  71. package/dist/{chunk-UVMIJCY3.js → chunk-YJHP5FVA.js} +7 -7
  72. package/dist/chunk-YJHP5FVA.js.map +1 -0
  73. package/dist/{chunk-3YA6FDVN.cjs → chunk-YJXP6AOL.cjs} +3 -3
  74. package/dist/{chunk-3YA6FDVN.cjs.map → chunk-YJXP6AOL.cjs.map} +1 -1
  75. package/dist/{chunk-QHN63FRP.cjs → chunk-YVTFODCJ.cjs} +3 -3
  76. package/dist/{chunk-QHN63FRP.cjs.map → chunk-YVTFODCJ.cjs.map} +1 -1
  77. package/dist/{chunk-FVDQNQKA.js → chunk-ZASX5GO4.js} +4 -4
  78. package/dist/{chunk-FVDQNQKA.js.map → chunk-ZASX5GO4.js.map} +1 -1
  79. package/dist/{chunk-LX23ZJDM.cjs → chunk-ZGDOWJKL.cjs} +7 -7
  80. package/dist/chunk-ZGDOWJKL.cjs.map +1 -0
  81. package/dist/content-renderer.cjs +4 -4
  82. package/dist/content-renderer.js +1 -1
  83. package/dist/dark-variant.css +3 -0
  84. package/dist/dark-variant.css.map +1 -0
  85. package/dist/editor.cjs +6 -6
  86. package/dist/editor.js +4 -4
  87. package/dist/index.cjs +170 -155
  88. package/dist/index.cjs.map +1 -1
  89. package/dist/index.d.cts +14 -0
  90. package/dist/index.d.ts +14 -0
  91. package/dist/index.js +49 -34
  92. package/dist/index.js.map +1 -1
  93. package/dist/inputs.cjs +13 -13
  94. package/dist/inputs.js +3 -3
  95. package/dist/json-editor.cjs +20 -20
  96. package/dist/json-editor.js +9 -9
  97. package/dist/kanban.cjs +3 -3
  98. package/dist/kanban.js +1 -1
  99. package/dist/magic-wand.cjs +5 -5
  100. package/dist/magic-wand.js +4 -4
  101. package/dist/media-viewer.cjs +1 -1
  102. package/dist/media-viewer.js +1 -1
  103. package/dist/menu.cjs +3 -3
  104. package/dist/menu.js +1 -1
  105. package/dist/mobile-menu.cjs +4 -4
  106. package/dist/mobile-menu.js +2 -2
  107. package/dist/multi-switch.cjs +2 -2
  108. package/dist/multi-switch.js +1 -1
  109. package/dist/navbar.cjs +3 -3
  110. package/dist/navbar.js +1 -1
  111. package/dist/prompt-input.cjs +4 -4
  112. package/dist/prompt-input.js +4 -4
  113. package/dist/reason-tag.cjs +4 -4
  114. package/dist/reason-tag.js +4 -4
  115. package/dist/select.cjs +2 -2
  116. package/dist/select.js +1 -1
  117. package/dist/sidebar.cjs +4 -4
  118. package/dist/sidebar.js +2 -2
  119. package/dist/styles.css +37 -37
  120. package/dist/styles.css.map +1 -1
  121. package/dist/table.cjs +11 -11
  122. package/dist/table.js +1 -1
  123. package/dist/timeline.cjs +4 -4
  124. package/dist/timeline.js +1 -1
  125. package/dist/toast.cjs +4 -4
  126. package/dist/toast.js +2 -2
  127. package/package.json +2 -1
  128. package/dist/chunk-A5RTALZJ.js.map +0 -1
  129. package/dist/chunk-LX23ZJDM.cjs.map +0 -1
  130. package/dist/chunk-SONXLQPJ.cjs.map +0 -1
  131. package/dist/chunk-UVMIJCY3.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Toast/Toast.context.ts","../src/components/Toast/ToastItem.tsx","../src/components/Toast/ToastStack.tsx","../src/components/Toast/Toast.tsx"],"names":["useEffect","jsx","jsxs","POSITION_STYLES","useRef"],"mappings":"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","file":"chunk-Z4EPQWVC.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ToastContextValue } from \"./Toast.types\";\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast must be used within a <Toast.Provider>\");\n }\n return ctx;\n}\n","import { useEffect } from \"react\";\nimport { AlertTriangle, Check, Info, X, XCircle } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ToastItemProps } from \"./Toast.types\";\n\nconst VARIANT_STYLES = {\n default:\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n success:\n \"border-emerald-200 bg-emerald-50 dark:border-emerald-800 dark:bg-emerald-950\",\n error:\n \"border-red-200 bg-red-50 dark:border-red-800 dark:bg-red-950\",\n warning:\n \"border-amber-200 bg-amber-50 dark:border-amber-800 dark:bg-amber-950\",\n info: \"border-blue-200 bg-blue-50 dark:border-blue-800 dark:bg-blue-950\",\n} as const;\n\nconst VARIANT_ICON_COLORS = {\n default: \"text-zinc-400\",\n success: \"text-emerald-500\",\n error: \"text-red-500\",\n warning: \"text-amber-500\",\n info: \"text-blue-500\",\n} as const;\n\nexport function ToastItem({ data, onDismiss }: ToastItemProps) {\n const { id, title, description, variant = \"default\", action } = data;\n // An action toast does not expire by default.\n const duration = data.duration ?? (action ? 0 : 5000);\n\n useEffect(() => {\n if (duration <= 0) return;\n const timer = setTimeout(() => onDismiss(id), duration);\n return () => clearTimeout(timer);\n }, [id, duration, onDismiss]);\n\n return (\n <div\n data-react-fancy-toast-item=\"\"\n role=\"alert\"\n // Scoped to the toast rather than the document: a global Escape handler\n // would fight whatever modal or drawer is already listening.\n onKeyDown={(e) => {\n if (e.key === \"Escape\") onDismiss(id);\n }}\n className={cn(\n \"fancy-toast-in pointer-events-auto w-80 rounded-xl border p-4 shadow-lg\",\n VARIANT_STYLES[variant],\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn(\"mt-0.5 shrink-0\", VARIANT_ICON_COLORS[variant])}>\n {variant === \"success\" && <Check size={16} />}\n {variant === \"error\" && <XCircle size={16} />}\n {variant === \"warning\" && <AlertTriangle size={16} />}\n {variant === \"info\" && <Info size={16} />}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">{title}</p>\n {description && (\n <p className=\"mt-1 text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {description}\n </p>\n )}\n </div>\n {action && (\n <button\n type=\"button\"\n onClick={() => {\n action.onClick();\n // The offer is consumed; leaving it up invites undoing an\n // already-undone action.\n onDismiss(id);\n }}\n className=\"shrink-0 self-center rounded-md px-2 py-1 text-xs font-medium text-zinc-700 underline-offset-2 transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:underline dark:text-zinc-200 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n {action.label}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => onDismiss(id)}\n className=\"shrink-0 rounded p-0.5 text-zinc-400 transition-colors hover:text-zinc-600 dark:hover:text-zinc-300\"\n aria-label=\"Dismiss\"\n >\n <X size={14} />\n </button>\n </div>\n </div>\n );\n}\n\nToastItem.displayName = \"ToastItem\";\n","import { useEffect, useRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { Portal } from \"../Portal\";\nimport { Badge } from \"../Badge\";\nimport type { ToastPosition } from \"./Toast.types\";\n\nexport interface ToastStackProps<T> {\n /**\n * Everything to show — the stack is a VIEW of this list and owns none of it.\n * There is no limit and no timer: an item leaves only when you remove it.\n */\n items: readonly T[];\n /** One card's content, actions included. Only the front card is interactive. */\n renderItem: (item: T, state: { index: number; isFront: boolean }) => ReactNode;\n /** A stable key per item. Defaults to `item.id`, then the index. */\n getKey?: (item: T, index: number) => string;\n /** How many cards show behind the front one. Default 2. */\n depth?: number;\n /** How far each card behind peeks out above the one in front, in px. Default 8. */\n offset?: number;\n /** How much smaller each card behind is than the one in front. Default 0.05. */\n scaleStep?: number;\n /** Which item is in front, if you want to own it. Wraps; out-of-range values are clamped. */\n frontIndex?: number;\n defaultFrontIndex?: number;\n onFrontIndexChange?: (index: number) => void;\n /** A screen corner, or `\"inline\"` to render where it is placed. Default `\"bottom-right\"`. */\n position?: ToastPosition | \"inline\";\n /** The stack's accessible name. Default \"Notifications\". */\n label?: string;\n /** Classes for each card's shell, merged onto the defaults. */\n cardClassName?: string;\n className?: string;\n}\n\nconst POSITION_STYLES: Record<ToastPosition, string> = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n};\n\n/** Pixels of wheel travel that count as one step. A mouse notch is ~100; a trackpad sends many small ones. */\nconst WHEEL_STEP = 50;\n\nconst CARD =\n \"rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\nfunction defaultKey(item: unknown, index: number): string {\n const id = (item as { id?: unknown } | null)?.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : String(index);\n}\n\nfunction isTextField(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return (\n target.isContentEditable ||\n target.getAttribute(\"contenteditable\") === \"true\" ||\n /^(INPUT|TEXTAREA|SELECT)$/.test(target.tagName)\n );\n}\n\n/**\n * A controlled stack of actionable toasts — approval requests, say — that the\n * person walks through rather than races.\n *\n * Built for react-fancy#33. The owner's requirements were that requests stack\n * behind each other with a slight top offset, that scrolling over the stack\n * walks through them, and that a pending request NEVER expires or disappears.\n * The last is why this is a view of the caller's list rather than a queue it\n * keeps: there is nothing here that can drop an item, because nothing here owns\n * one. (The imperative provider's `maxToasts` silently drops the oldest.)\n */\nexport function ToastStack<T>({\n items,\n renderItem,\n getKey = defaultKey,\n depth = 2,\n offset = 8,\n scaleStep = 0.05,\n frontIndex: controlledFront,\n defaultFrontIndex = 0,\n onFrontIndexChange,\n position = \"bottom-right\",\n label = \"Notifications\",\n cardClassName,\n className,\n}: ToastStackProps<T>) {\n const [rawFront, setFront] = useControllableState(\n controlledFront,\n defaultFrontIndex,\n onFrontIndexChange,\n );\n const count = items.length;\n // Clamped for display rather than corrected through onChange: a list that\n // shrinks under a far-forward index must not make render report a change.\n const front = count === 0 ? 0 : ((rawFront % count) + count) % count;\n\n const stackRef = useRef<HTMLDivElement>(null);\n const wheelTravel = useRef(0);\n const live = useRef({ front, count });\n live.current = { front, count };\n\n const step = (by: number) => {\n const { front: current, count: n } = live.current;\n if (n < 2) return;\n setFront((((current + by) % n) + n) % n);\n };\n const stepRef = useRef(step);\n stepRef.current = step;\n\n /*\n * A native listener, because React's wheel listener is passive and cannot stop\n * the page scrolling underneath — and a stack that cycles AND scrolls the page\n * moves two things at once under the person's hand.\n */\n useEffect(() => {\n const el = stackRef.current;\n if (!el) return;\n\n const onWheel = (e: WheelEvent) => {\n if (live.current.count < 2 || e.deltaY === 0) return;\n e.preventDefault();\n\n // Line or page mode: every event is a notch.\n if (e.deltaMode !== 0) {\n wheelTravel.current = 0;\n stepRef.current(Math.sign(e.deltaY));\n return;\n }\n // A notch-sized event steps at once; small trackpad deltas add up first.\n if (Math.abs(e.deltaY) >= WHEEL_STEP) {\n wheelTravel.current = 0;\n stepRef.current(Math.sign(e.deltaY));\n return;\n }\n wheelTravel.current += e.deltaY;\n if (Math.abs(wheelTravel.current) >= WHEEL_STEP) {\n stepRef.current(Math.sign(wheelTravel.current));\n wheelTravel.current = 0;\n }\n };\n\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => el.removeEventListener(\"wheel\", onWheel);\n // Re-bound when the element can change: it appears with the first item, and\n // moving between a corner and inline remounts it.\n }, [count > 0, position]);\n\n if (count === 0) return null;\n\n const visibleBehind = Math.min(Math.max(0, depth), count - 1);\n const hidden = count - 1 - visibleBehind;\n\n const card = (index: number, k: number) => {\n const item = items[index];\n const isFront = k === 0;\n return (\n <div\n key={getKey(item, index)}\n data-react-fancy-toast-stack-card={isFront ? \"front\" : \"behind\"}\n aria-hidden={isFront ? undefined : true}\n inert={isFront ? undefined : true}\n className={cn(\n CARD,\n \"origin-top transition-transform duration-200\",\n isFront ? \"relative\" : \"pointer-events-none absolute inset-0 overflow-hidden\",\n cardClassName,\n )}\n style={{\n zIndex: depth + 1 - k,\n transform: isFront ? undefined : `translateY(-${k * offset}px) scale(${1 - k * scaleStep})`,\n }}\n >\n {renderItem(item, { index, isFront })}\n </div>\n );\n };\n\n const stackEl = (\n <div\n ref={stackRef}\n data-react-fancy-toast-stack=\"\"\n role=\"region\"\n aria-label={label}\n tabIndex={0}\n onKeyDown={(e) => {\n if (isTextField(e.target)) return;\n if (e.key === \"ArrowDown\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n step(1);\n } else if (e.key === \"ArrowUp\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n step(-1);\n }\n }}\n className={cn(\n \"pointer-events-auto relative w-80 rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2\",\n className,\n )}\n style={{ paddingTop: visibleBehind * offset }}\n >\n <div className=\"relative\">\n {/*\n * z-index decides what paints on top; the front card sizes the box.\n * The front card comes FIRST in the DOM, then the cards behind in walk\n * order: the ones behind are absolutely positioned against this box, so\n * their place in the source changes nothing visible -- but it is what\n * a DOM query, `textContent` and copy-paste read.\n */}\n {card(front, 0)}\n {Array.from({ length: visibleBehind }, (_, i) => i + 1).map((k) =>\n card((front + k) % count, k),\n )}\n </div>\n {hidden > 0 && (\n /*\n * Opaque in BOTH themes, because it sits over the cards peeking out\n * behind the front one -- often a light image header. The soft zinc\n * Badge is `dark:bg-zinc-900/30`, which let that image through and left\n * zinc-300 text on a light screenshot (fancy-app-update#1). The dark\n * pair is overridden here, not in Badge, so every other soft badge\n * keeps its look; the ring separates it from a zinc-900 card edge.\n */\n <Badge\n data-react-fancy-toast-stack-more=\"\"\n size=\"sm\"\n variant=\"soft\"\n color=\"zinc\"\n className=\"absolute -top-2 right-2 z-20 shadow-sm ring-1 ring-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-zinc-800 dark:text-zinc-100 dark:ring-[color:var(--fancy-border-dark,var(--color-zinc-700))]\"\n >\n +{hidden}\n </Badge>\n )}\n <span data-react-fancy-toast-stack-status=\"\" aria-live=\"polite\" className=\"sr-only\">\n {count > 1 ? `${front + 1} of ${count}` : \"\"}\n </span>\n </div>\n );\n\n if (position === \"inline\") return stackEl;\n\n return (\n <Portal>\n <div\n data-react-fancy-toast-stack-position={position}\n className={cn(\"pointer-events-none fixed z-[100]\", POSITION_STYLES[position])}\n >\n {stackEl}\n </div>\n </Portal>\n );\n}\n\nToastStack.displayName = \"ToastStack\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { ToastContext } from \"./Toast.context\";\nimport { ToastItem } from \"./ToastItem\";\nimport { ToastStack } from \"./ToastStack\";\nimport type { ToastData, ToastProviderProps } from \"./Toast.types\";\n\nconst POSITION_STYLES = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n} as const;\n\nfunction ToastProvider({\n children,\n position = \"bottom-right\",\n maxToasts = 5,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n const idCounter = useRef(0);\n\n const toast = useCallback(\n (data: Omit<ToastData, \"id\">) => {\n const id = `toast-${++idCounter.current}`;\n setToasts((prev) => [...prev.slice(-(maxToasts - 1)), { ...data, id }]);\n return id;\n },\n [maxToasts],\n );\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const ctx = useMemo(() => ({ toasts, toast, dismiss }), [toasts, toast, dismiss]);\n\n return (\n <ToastContext.Provider value={ctx}>\n {children}\n <Portal>\n <div\n data-react-fancy-toast=\"\"\n className={cn(\n \"fixed z-[100] flex flex-col gap-2 pointer-events-none\",\n POSITION_STYLES[position],\n )}\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} data={t} onDismiss={dismiss} />\n ))}\n </div>\n </Portal>\n </ToastContext.Provider>\n );\n}\n\nexport const Toast = {\n Provider: ToastProvider,\n Stack: ToastStack,\n Item: ToastItem,\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Toast/Toast.context.ts","../src/components/Toast/ToastItem.tsx","../src/components/Toast/ToastStack.tsx","../src/components/Toast/Toast.tsx"],"names":["useEffect","jsx","jsxs","POSITION_STYLES","useRef"],"mappings":"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","file":"chunk-UIE5FP3A.js","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { ToastContextValue } from \"./Toast.types\";\n\nexport const ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) {\n throw new Error(\"useToast must be used within a <Toast.Provider>\");\n }\n return ctx;\n}\n","import { useEffect } from \"react\";\nimport { AlertTriangle, Check, Info, X, XCircle } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport type { ToastItemProps } from \"./Toast.types\";\n\nconst VARIANT_STYLES = {\n default:\n \"border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n success:\n \"border-emerald-200 bg-emerald-50 dark:border-emerald-800 dark:bg-emerald-950\",\n error:\n \"border-red-200 bg-red-50 dark:border-red-800 dark:bg-red-950\",\n warning:\n \"border-amber-200 bg-amber-50 dark:border-amber-800 dark:bg-amber-950\",\n info: \"border-blue-200 bg-blue-50 dark:border-blue-800 dark:bg-blue-950\",\n} as const;\n\nconst VARIANT_ICON_COLORS = {\n default: \"text-zinc-400\",\n success: \"text-emerald-500\",\n error: \"text-red-500\",\n warning: \"text-amber-500\",\n info: \"text-blue-500\",\n} as const;\n\nexport function ToastItem({ data, onDismiss }: ToastItemProps) {\n const { id, title, description, variant = \"default\", action } = data;\n // An action toast does not expire by default.\n const duration = data.duration ?? (action ? 0 : 5000);\n\n useEffect(() => {\n if (duration <= 0) return;\n const timer = setTimeout(() => onDismiss(id), duration);\n return () => clearTimeout(timer);\n }, [id, duration, onDismiss]);\n\n return (\n <div\n data-react-fancy-toast-item=\"\"\n role=\"alert\"\n // Scoped to the toast rather than the document: a global Escape handler\n // would fight whatever modal or drawer is already listening.\n onKeyDown={(e) => {\n if (e.key === \"Escape\") onDismiss(id);\n }}\n className={cn(\n \"fancy-toast-in pointer-events-auto w-80 rounded-xl border p-4 shadow-lg\",\n VARIANT_STYLES[variant],\n )}\n >\n <div className=\"flex items-start gap-3\">\n <div className={cn(\"mt-0.5 shrink-0\", VARIANT_ICON_COLORS[variant])}>\n {variant === \"success\" && <Check size={16} />}\n {variant === \"error\" && <XCircle size={16} />}\n {variant === \"warning\" && <AlertTriangle size={16} />}\n {variant === \"info\" && <Info size={16} />}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">{title}</p>\n {description && (\n <p className=\"mt-1 text-xs text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">\n {description}\n </p>\n )}\n </div>\n {action && (\n <button\n type=\"button\"\n onClick={() => {\n action.onClick();\n // The offer is consumed; leaving it up invites undoing an\n // already-undone action.\n onDismiss(id);\n }}\n className=\"shrink-0 self-center rounded-md px-2 py-1 text-xs font-medium text-zinc-700 underline-offset-2 transition-colors hover:bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:underline dark:text-zinc-200 dark:hover:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\"\n >\n {action.label}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => onDismiss(id)}\n className=\"shrink-0 rounded p-0.5 text-zinc-400 transition-colors hover:text-zinc-600 dark:hover:text-zinc-300\"\n aria-label=\"Dismiss\"\n >\n <X size={14} />\n </button>\n </div>\n </div>\n );\n}\n\nToastItem.displayName = \"ToastItem\";\n","import { useEffect, useRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useControllableState } from \"../../hooks/use-controllable-state\";\nimport { Portal } from \"../Portal\";\nimport { Badge } from \"../Badge\";\nimport type { ToastPosition } from \"./Toast.types\";\n\nexport interface ToastStackProps<T> {\n /**\n * Everything to show — the stack is a VIEW of this list and owns none of it.\n * There is no limit and no timer: an item leaves only when you remove it.\n */\n items: readonly T[];\n /** One card's content, actions included. Only the front card is interactive. */\n renderItem: (item: T, state: { index: number; isFront: boolean }) => ReactNode;\n /** A stable key per item. Defaults to `item.id`, then the index. */\n getKey?: (item: T, index: number) => string;\n /** How many cards show behind the front one. Default 2. */\n depth?: number;\n /** How far each card behind peeks out above the one in front, in px. Default 8. */\n offset?: number;\n /** How much smaller each card behind is than the one in front. Default 0.05. */\n scaleStep?: number;\n /** Which item is in front, if you want to own it. Wraps; out-of-range values are clamped. */\n frontIndex?: number;\n defaultFrontIndex?: number;\n onFrontIndexChange?: (index: number) => void;\n /** A screen corner, or `\"inline\"` to render where it is placed. Default `\"bottom-right\"`. */\n position?: ToastPosition | \"inline\";\n /** The stack's accessible name. Default \"Notifications\". */\n label?: string;\n /** Classes for each card's shell, merged onto the defaults. */\n cardClassName?: string;\n className?: string;\n}\n\nconst POSITION_STYLES: Record<ToastPosition, string> = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n};\n\n/** Pixels of wheel travel that count as one step. A mouse notch is ~100; a trackpad sends many small ones. */\nconst WHEEL_STEP = 50;\n\nconst CARD =\n \"rounded-xl border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 shadow-lg dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\nfunction defaultKey(item: unknown, index: number): string {\n const id = (item as { id?: unknown } | null)?.id;\n return typeof id === \"string\" || typeof id === \"number\" ? String(id) : String(index);\n}\n\nfunction isTextField(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return (\n target.isContentEditable ||\n target.getAttribute(\"contenteditable\") === \"true\" ||\n /^(INPUT|TEXTAREA|SELECT)$/.test(target.tagName)\n );\n}\n\n/**\n * A controlled stack of actionable toasts — approval requests, say — that the\n * person walks through rather than races.\n *\n * Built for react-fancy#33. The owner's requirements were that requests stack\n * behind each other with a slight top offset, that scrolling over the stack\n * walks through them, and that a pending request NEVER expires or disappears.\n * The last is why this is a view of the caller's list rather than a queue it\n * keeps: there is nothing here that can drop an item, because nothing here owns\n * one. (The imperative provider's `maxToasts` silently drops the oldest.)\n */\nexport function ToastStack<T>({\n items,\n renderItem,\n getKey = defaultKey,\n depth = 2,\n offset = 8,\n scaleStep = 0.05,\n frontIndex: controlledFront,\n defaultFrontIndex = 0,\n onFrontIndexChange,\n position = \"bottom-right\",\n label = \"Notifications\",\n cardClassName,\n className,\n}: ToastStackProps<T>) {\n const [rawFront, setFront] = useControllableState(\n controlledFront,\n defaultFrontIndex,\n onFrontIndexChange,\n );\n const count = items.length;\n // Clamped for display rather than corrected through onChange: a list that\n // shrinks under a far-forward index must not make render report a change.\n const front = count === 0 ? 0 : ((rawFront % count) + count) % count;\n\n const stackRef = useRef<HTMLDivElement>(null);\n const wheelTravel = useRef(0);\n const live = useRef({ front, count });\n live.current = { front, count };\n\n const step = (by: number) => {\n const { front: current, count: n } = live.current;\n if (n < 2) return;\n setFront((((current + by) % n) + n) % n);\n };\n const stepRef = useRef(step);\n stepRef.current = step;\n\n /*\n * A native listener, because React's wheel listener is passive and cannot stop\n * the page scrolling underneath — and a stack that cycles AND scrolls the page\n * moves two things at once under the person's hand.\n */\n useEffect(() => {\n const el = stackRef.current;\n if (!el) return;\n\n const onWheel = (e: WheelEvent) => {\n if (live.current.count < 2 || e.deltaY === 0) return;\n e.preventDefault();\n\n // Line or page mode: every event is a notch.\n if (e.deltaMode !== 0) {\n wheelTravel.current = 0;\n stepRef.current(Math.sign(e.deltaY));\n return;\n }\n // A notch-sized event steps at once; small trackpad deltas add up first.\n if (Math.abs(e.deltaY) >= WHEEL_STEP) {\n wheelTravel.current = 0;\n stepRef.current(Math.sign(e.deltaY));\n return;\n }\n wheelTravel.current += e.deltaY;\n if (Math.abs(wheelTravel.current) >= WHEEL_STEP) {\n stepRef.current(Math.sign(wheelTravel.current));\n wheelTravel.current = 0;\n }\n };\n\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => el.removeEventListener(\"wheel\", onWheel);\n // Re-bound when the element can change: it appears with the first item, and\n // moving between a corner and inline remounts it.\n }, [count > 0, position]);\n\n if (count === 0) return null;\n\n const visibleBehind = Math.min(Math.max(0, depth), count - 1);\n const hidden = count - 1 - visibleBehind;\n\n const card = (index: number, k: number) => {\n const item = items[index];\n const isFront = k === 0;\n return (\n <div\n key={getKey(item, index)}\n data-react-fancy-toast-stack-card={isFront ? \"front\" : \"behind\"}\n aria-hidden={isFront ? undefined : true}\n inert={isFront ? undefined : true}\n className={cn(\n CARD,\n \"origin-top transition-transform duration-200\",\n isFront ? \"relative\" : \"pointer-events-none absolute inset-0 overflow-hidden\",\n cardClassName,\n )}\n style={{\n zIndex: depth + 1 - k,\n transform: isFront ? undefined : `translateY(-${k * offset}px) scale(${1 - k * scaleStep})`,\n }}\n >\n {renderItem(item, { index, isFront })}\n </div>\n );\n };\n\n const stackEl = (\n <div\n ref={stackRef}\n data-react-fancy-toast-stack=\"\"\n role=\"region\"\n aria-label={label}\n tabIndex={0}\n onKeyDown={(e) => {\n if (isTextField(e.target)) return;\n if (e.key === \"ArrowDown\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n step(1);\n } else if (e.key === \"ArrowUp\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n step(-1);\n }\n }}\n className={cn(\n \"pointer-events-auto relative w-80 rounded-xl outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2\",\n className,\n )}\n style={{ paddingTop: visibleBehind * offset }}\n >\n <div className=\"relative\">\n {/*\n * z-index decides what paints on top; the front card sizes the box.\n * The front card comes FIRST in the DOM, then the cards behind in walk\n * order: the ones behind are absolutely positioned against this box, so\n * their place in the source changes nothing visible -- but it is what\n * a DOM query, `textContent` and copy-paste read.\n */}\n {card(front, 0)}\n {Array.from({ length: visibleBehind }, (_, i) => i + 1).map((k) =>\n card((front + k) % count, k),\n )}\n </div>\n {hidden > 0 && (\n /*\n * Opaque in BOTH themes, because it sits over the cards peeking out\n * behind the front one -- often a light image header. The soft zinc\n * Badge is `dark:bg-zinc-900/30`, which let that image through and left\n * zinc-300 text on a light screenshot (fancy-app-update#1). The dark\n * pair is overridden here, not in Badge, so every other soft badge\n * keeps its look; the ring separates it from a zinc-900 card edge.\n */\n <Badge\n data-react-fancy-toast-stack-more=\"\"\n size=\"sm\"\n variant=\"soft\"\n color=\"zinc\"\n className=\"absolute -top-2 right-2 z-20 shadow-sm ring-1 ring-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-zinc-800 dark:text-zinc-100 dark:ring-[color:var(--fancy-border-dark,var(--color-zinc-700))]\"\n >\n +{hidden}\n </Badge>\n )}\n <span data-react-fancy-toast-stack-status=\"\" aria-live=\"polite\" className=\"sr-only\">\n {count > 1 ? `${front + 1} of ${count}` : \"\"}\n </span>\n </div>\n );\n\n if (position === \"inline\") return stackEl;\n\n return (\n <Portal>\n <div\n data-react-fancy-toast-stack-position={position}\n className={cn(\"pointer-events-none fixed z-[100]\", POSITION_STYLES[position])}\n >\n {stackEl}\n </div>\n </Portal>\n );\n}\n\nToastStack.displayName = \"ToastStack\";\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Portal } from \"../Portal\";\nimport { ToastContext } from \"./Toast.context\";\nimport { ToastItem } from \"./ToastItem\";\nimport { ToastStack } from \"./ToastStack\";\nimport type { ToastData, ToastProviderProps } from \"./Toast.types\";\n\nconst POSITION_STYLES = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n} as const;\n\nfunction ToastProvider({\n children,\n position = \"bottom-right\",\n maxToasts = 5,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastData[]>([]);\n const idCounter = useRef(0);\n\n const toast = useCallback(\n (data: Omit<ToastData, \"id\">) => {\n const id = `toast-${++idCounter.current}`;\n setToasts((prev) => [...prev.slice(-(maxToasts - 1)), { ...data, id }]);\n return id;\n },\n [maxToasts],\n );\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const ctx = useMemo(() => ({ toasts, toast, dismiss }), [toasts, toast, dismiss]);\n\n return (\n <ToastContext.Provider value={ctx}>\n {children}\n <Portal>\n <div\n data-react-fancy-toast=\"\"\n className={cn(\n \"fixed z-[100] flex flex-col gap-2 pointer-events-none\",\n POSITION_STYLES[position],\n )}\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} data={t} onDismiss={dismiss} />\n ))}\n </div>\n </Portal>\n </ToastContext.Provider>\n );\n}\n\nexport const Toast = {\n Provider: ToastProvider,\n Stack: ToastStack,\n Item: ToastItem,\n};\n"]}
@@ -216,7 +216,7 @@ var TimelineBlock = react.forwardRef(
216
216
  ),
217
217
  children: [
218
218
  heading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 text-sm font-semibold text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]", children: heading }),
219
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-zinc-600 dark:text-zinc-400", children })
219
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]", children })
220
220
  ]
221
221
  }
222
222
  ) });
@@ -243,7 +243,7 @@ var TimelineRoot = react.forwardRef(
243
243
  const isAlternating = variant === "alternating";
244
244
  const items = events ? events.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs(TimelineItem, { date: e.date, emoji: e.emoji, icon: e.icon, color: e.color, children: [
245
245
  e.title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-zinc-900 dark:text-white", children: e.title }),
246
- e.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-sm leading-relaxed text-zinc-600 dark:text-zinc-400", children: e.description })
246
+ e.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 text-sm leading-relaxed text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]", children: e.description })
247
247
  ] }, i)) : react.Children.toArray(children);
248
248
  const handleWheel = react.useCallback((e) => {
249
249
  if (!scrollRef.current) return;
@@ -287,5 +287,5 @@ var Timeline = Object.assign(TimelineRoot, {
287
287
  exports.Timeline = Timeline;
288
288
  exports.TimelineBlock = TimelineBlock;
289
289
  exports.TimelineItem = TimelineItem;
290
- //# sourceMappingURL=chunk-S3V2C4DW.cjs.map
291
- //# sourceMappingURL=chunk-S3V2C4DW.cjs.map
290
+ //# sourceMappingURL=chunk-UXYFM2XT.cjs.map
291
+ //# sourceMappingURL=chunk-UXYFM2XT.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Timeline/Timeline.context.ts","../src/components/Timeline/TimelineItem.tsx","../src/components/Timeline/TimelineBlock.tsx","../src/components/Timeline/Timeline.tsx"],"names":["createContext","useContext","jsx","cn","useRef","useState","useEffect","forwardRef","jsxs","Children","useCallback"],"mappings":"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","file":"chunk-S3V2C4DW.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { TimelineVariant } from \"./Timeline.types\";\n\ninterface TimelineContextValue {\n variant: TimelineVariant;\n index: number;\n total: number;\n animated: boolean;\n}\n\nexport const TimelineContext = createContext<TimelineContextValue>({\n variant: \"stacked\",\n index: 0,\n total: 0,\n animated: true,\n});\n\nexport function useTimeline() {\n return useContext(TimelineContext);\n}\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useTimeline } from \"./Timeline.context\";\nimport type { TimelineItemProps } from \"./Timeline.types\";\nimport type { Color } from \"../../utils/types\";\n\nconst dotColorClasses: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"bg-brand\",\n slate: \"bg-slate-400 dark:bg-slate-600\", gray: \"bg-gray-400 dark:bg-gray-600\",\n zinc: \"bg-zinc-300 dark:bg-zinc-600\", neutral: \"bg-neutral-400 dark:bg-neutral-600\",\n stone: \"bg-stone-400 dark:bg-stone-600\",\n red: \"bg-red-500\", orange: \"bg-orange-500\", amber: \"bg-amber-500\",\n yellow: \"bg-yellow-500\", lime: \"bg-lime-500\", green: \"bg-green-500\",\n emerald: \"bg-emerald-500\", teal: \"bg-teal-500\", cyan: \"bg-cyan-500\",\n sky: \"bg-sky-500\", blue: \"bg-blue-500\", indigo: \"bg-indigo-500\",\n violet: \"bg-violet-500\", purple: \"bg-purple-500\", fuchsia: \"bg-fuchsia-500\",\n pink: \"bg-pink-500\", rose: \"bg-rose-500\",\n};\n\nconst ringColorClasses: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"ring-brand/30\",\n slate: \"ring-slate-400/30\", gray: \"ring-gray-400/30\",\n zinc: \"ring-zinc-400/30 dark:ring-zinc-500/30\", neutral: \"ring-neutral-400/30\",\n stone: \"ring-stone-400/30\",\n red: \"ring-red-500/30\", orange: \"ring-orange-500/30\", amber: \"ring-amber-500/30\",\n yellow: \"ring-yellow-500/30\", lime: \"ring-lime-500/30\", green: \"ring-green-500/30\",\n emerald: \"ring-emerald-500/30\", teal: \"ring-teal-500/30\", cyan: \"ring-cyan-500/30\",\n sky: \"ring-sky-500/30\", blue: \"ring-blue-500/30\", indigo: \"ring-indigo-500/30\",\n violet: \"ring-violet-500/30\", purple: \"ring-purple-500/30\", fuchsia: \"ring-fuchsia-500/30\",\n pink: \"ring-pink-500/30\", rose: \"ring-rose-500/30\",\n};\n\nfunction Dot({ icon, emoji, color, active }: Pick<TimelineItemProps, \"icon\" | \"emoji\" | \"color\" | \"active\">) {\n const c = color ?? \"zinc\";\n\n if (emoji) {\n return (\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\">\n <span className=\"text-sm\">{emoji}</span>\n </span>\n );\n }\n\n if (icon) {\n return (\n <span\n className={cn(\n \"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-white\",\n dotColorClasses[c],\n active && \"ring-4\",\n active && ringColorClasses[c],\n )}\n >\n {icon}\n </span>\n );\n }\n\n return (\n <span\n className={cn(\n \"h-3 w-3 shrink-0 rounded-full\",\n dotColorClasses[c],\n active && \"ring-4\",\n active && ringColorClasses[c],\n )}\n />\n );\n}\n\nfunction useIntersectionReveal(animated: boolean) {\n const ref = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(!animated);\n\n useEffect(() => {\n if (!animated || !ref.current) return;\n const el = ref.current;\n const observer = new IntersectionObserver(\n ([entry]) => { if (entry.isIntersecting) { setVisible(true); observer.disconnect(); } },\n { threshold: 0.2 },\n );\n observer.observe(el);\n return () => observer.disconnect();\n }, [animated]);\n\n return { ref, visible };\n}\n\nexport const TimelineItem = forwardRef<HTMLDivElement, TimelineItemProps>(\n ({ children, icon, emoji, date, color = \"zinc\", active = false, className }, _ref) => {\n const { variant, index, total, animated } = useTimeline();\n const { ref, visible } = useIntersectionReveal(animated);\n const isLast = index === total - 1;\n const isLargeDot = !!icon || !!emoji;\n const isEven = index % 2 === 0;\n\n // ── Horizontal ────────────────────────────────────────\n if (variant === \"horizontal\") {\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"flex flex-col items-center\",\n !isLast && \"min-w-40\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot + horizontal line (fixed height for alignment) */}\n <div className=\"flex h-8 w-full items-center\">\n {index > 0\n ? <div className=\"h-px flex-1 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n : <div className=\"flex-1\" />}\n <Dot icon={icon} emoji={emoji} color={color} active={active} />\n {!isLast\n ? <div className=\"h-px flex-1 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n : <div className=\"flex-1\" />}\n </div>\n\n {/* Content below */}\n <div className=\"mt-3 max-w-40 px-2 text-center\">\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n }\n\n // ── Alternating ───────────────────────────────────────\n if (variant === \"alternating\") {\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"relative flex gap-x-4 md:grid md:grid-cols-[1fr_1.5rem_1fr] md:gap-x-6\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot (sits on top of the background line) */}\n <div className=\"relative z-10 flex w-8 shrink-0 justify-center md:col-start-2 md:row-start-1 md:w-auto md:justify-center\">\n {!isLargeDot ? <div className=\"mt-1.5\"><Dot icon={icon} emoji={emoji} color={color} active={active} /></div> : <Dot icon={icon} emoji={emoji} color={color} active={active} />}\n </div>\n\n {/* Content */}\n <div className={cn(\n \"min-w-0 flex-1\",\n !isLast && \"pb-8\",\n isLargeDot && \"pt-1\",\n isEven ? \"md:col-start-1 md:row-start-1 md:text-right\" : \"md:col-start-3\",\n )}>\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n }\n\n // ── Stacked (default) ─────────────────────────────────\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"relative flex gap-x-4\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot (sits on top of the background line) */}\n <div className=\"relative z-10 flex w-8 shrink-0 justify-center\">\n {!isLargeDot\n ? <div className=\"mt-1.5\"><Dot icon={icon} emoji={emoji} color={color} active={active} /></div>\n : <Dot icon={icon} emoji={emoji} color={color} active={active} />}\n </div>\n\n {/* Content */}\n <div className={cn(\"min-w-0 flex-1\", !isLast && \"pb-8\", isLargeDot && \"pt-1\")}>\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n },\n);\n\nTimelineItem.displayName = \"TimelineItem\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TimelineItem } from \"./TimelineItem\";\nimport type { TimelineBlockProps } from \"./Timeline.types\";\n\nexport const TimelineBlock = forwardRef<HTMLDivElement, TimelineBlockProps>(\n ({ heading, children, icon, emoji, color = \"zinc\", active = false, className }, ref) => {\n return (\n <TimelineItem icon={icon} emoji={emoji} color={color} active={active}>\n <div\n ref={ref}\n data-react-fancy-timeline-block=\"\"\n className={cn(\n \"rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n active && \"ring-2 ring-blue-500/20 dark:ring-blue-400/20\",\n className,\n )}\n >\n {heading && (\n <div className=\"mb-2 text-sm font-semibold text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">\n {heading}\n </div>\n )}\n <div className=\"text-sm text-zinc-600 dark:text-zinc-400\">{children}</div>\n </div>\n </TimelineItem>\n );\n },\n);\n\nTimelineBlock.displayName = \"TimelineBlock\";\n","import { Children, forwardRef, useCallback, useRef, type WheelEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TimelineContext } from \"./Timeline.context\";\nimport { TimelineItem } from \"./TimelineItem\";\nimport { TimelineBlock } from \"./TimelineBlock\";\nimport type { TimelineProps, TimelineVariant } from \"./Timeline.types\";\n\nconst TimelineRoot = forwardRef<HTMLDivElement, TimelineProps>(\n ({\n children,\n variant: variantProp,\n orientation,\n events,\n heading,\n description,\n animated = true,\n className,\n }, ref) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Backward compat: map deprecated orientation to variant\n let variant: TimelineVariant = variantProp ?? \"stacked\";\n if (!variantProp && orientation) {\n variant = orientation === \"horizontal\" ? \"horizontal\" : \"stacked\";\n }\n\n const isHorizontal = variant === \"horizontal\";\n const isAlternating = variant === \"alternating\";\n\n // Build items from events prop (data-driven) or children (compound)\n const items = events\n ? events.map((e, i) => (\n <TimelineItem key={i} date={e.date} emoji={e.emoji} icon={e.icon} color={e.color}>\n {e.title && <h3 className=\"font-semibold text-zinc-900 dark:text-white\">{e.title}</h3>}\n {e.description && <div className=\"mt-1 text-sm leading-relaxed text-zinc-600 dark:text-zinc-400\">{e.description}</div>}\n </TimelineItem>\n ))\n : Children.toArray(children);\n\n const handleWheel = useCallback((e: WheelEvent) => {\n if (!scrollRef.current) return;\n e.preventDefault();\n scrollRef.current.scrollLeft += e.deltaY;\n }, []);\n\n const content = items.map((child, i) => (\n <TimelineContext.Provider key={i} value={{ variant, index: i, total: items.length, animated }}>\n {child}\n </TimelineContext.Provider>\n ));\n\n return (\n <div ref={ref} data-react-fancy-timeline=\"\" data-variant={variant} className={className}>\n {(heading || description) && (\n <div className=\"mb-8\">\n {heading && <h2 className=\"text-xl font-semibold text-zinc-900 dark:text-white\">{heading}</h2>}\n {description && <p className=\"mt-1 text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{description}</p>}\n </div>\n )}\n\n {isHorizontal ? (\n <div\n ref={scrollRef}\n className=\"overflow-x-auto pb-4 -mb-4 [scrollbar-color:var(--fancy-text-faint,rgb(161_161_170))_transparent] dark:[scrollbar-color:var(--fancy-text-faint-dark,rgb(161_161_170))_transparent]\"\n style={{ scrollbarWidth: \"thin\" }}\n onWheel={handleWheel}\n >\n <div className=\"flex min-w-max items-start\">\n {content}\n </div>\n </div>\n ) : (\n /* Vertical variants: continuous background line behind all events */\n <div className=\"relative\">\n {items.length > 1 && (\n <div className={cn(\n \"absolute top-0 bottom-0 w-px bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\",\n isAlternating\n ? \"left-4 md:left-1/2 md:-translate-x-px\"\n : \"left-4\",\n )} />\n )}\n {content}\n </div>\n )}\n </div>\n );\n },\n);\n\nTimelineRoot.displayName = \"Timeline\";\n\nexport const Timeline = Object.assign(TimelineRoot, {\n Item: TimelineItem,\n Block: TimelineBlock,\n});\n"]}
1
+ {"version":3,"sources":["../src/components/Timeline/Timeline.context.ts","../src/components/Timeline/TimelineItem.tsx","../src/components/Timeline/TimelineBlock.tsx","../src/components/Timeline/Timeline.tsx"],"names":["createContext","useContext","jsx","cn","useRef","useState","useEffect","forwardRef","jsxs","Children","useCallback"],"mappings":"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","file":"chunk-UXYFM2XT.cjs","sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { TimelineVariant } from \"./Timeline.types\";\n\ninterface TimelineContextValue {\n variant: TimelineVariant;\n index: number;\n total: number;\n animated: boolean;\n}\n\nexport const TimelineContext = createContext<TimelineContextValue>({\n variant: \"stacked\",\n index: 0,\n total: 0,\n animated: true,\n});\n\nexport function useTimeline() {\n return useContext(TimelineContext);\n}\n","import { forwardRef, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { useTimeline } from \"./Timeline.context\";\nimport type { TimelineItemProps } from \"./Timeline.types\";\nimport type { Color } from \"../../utils/types\";\n\nconst dotColorClasses: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"bg-brand\",\n slate: \"bg-slate-400 dark:bg-slate-600\", gray: \"bg-gray-400 dark:bg-gray-600\",\n zinc: \"bg-zinc-300 dark:bg-zinc-600\", neutral: \"bg-neutral-400 dark:bg-neutral-600\",\n stone: \"bg-stone-400 dark:bg-stone-600\",\n red: \"bg-red-500\", orange: \"bg-orange-500\", amber: \"bg-amber-500\",\n yellow: \"bg-yellow-500\", lime: \"bg-lime-500\", green: \"bg-green-500\",\n emerald: \"bg-emerald-500\", teal: \"bg-teal-500\", cyan: \"bg-cyan-500\",\n sky: \"bg-sky-500\", blue: \"bg-blue-500\", indigo: \"bg-indigo-500\",\n violet: \"bg-violet-500\", purple: \"bg-purple-500\", fuchsia: \"bg-fuchsia-500\",\n pink: \"bg-pink-500\", rose: \"bg-rose-500\",\n};\n\nconst ringColorClasses: Record<Color, string> = {\n // The host's colour, from CSS variables -- no dark: variant, because a\n // host that themes per mode scopes the variables themselves.\n brand: \"ring-brand/30\",\n slate: \"ring-slate-400/30\", gray: \"ring-gray-400/30\",\n zinc: \"ring-zinc-400/30 dark:ring-zinc-500/30\", neutral: \"ring-neutral-400/30\",\n stone: \"ring-stone-400/30\",\n red: \"ring-red-500/30\", orange: \"ring-orange-500/30\", amber: \"ring-amber-500/30\",\n yellow: \"ring-yellow-500/30\", lime: \"ring-lime-500/30\", green: \"ring-green-500/30\",\n emerald: \"ring-emerald-500/30\", teal: \"ring-teal-500/30\", cyan: \"ring-cyan-500/30\",\n sky: \"ring-sky-500/30\", blue: \"ring-blue-500/30\", indigo: \"ring-indigo-500/30\",\n violet: \"ring-violet-500/30\", purple: \"ring-purple-500/30\", fuchsia: \"ring-fuchsia-500/30\",\n pink: \"ring-pink-500/30\", rose: \"ring-rose-500/30\",\n};\n\nfunction Dot({ icon, emoji, color, active }: Pick<TimelineItemProps, \"icon\" | \"emoji\" | \"color\" | \"active\">) {\n const c = color ?? \"zinc\";\n\n if (emoji) {\n return (\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\">\n <span className=\"text-sm\">{emoji}</span>\n </span>\n );\n }\n\n if (icon) {\n return (\n <span\n className={cn(\n \"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-white\",\n dotColorClasses[c],\n active && \"ring-4\",\n active && ringColorClasses[c],\n )}\n >\n {icon}\n </span>\n );\n }\n\n return (\n <span\n className={cn(\n \"h-3 w-3 shrink-0 rounded-full\",\n dotColorClasses[c],\n active && \"ring-4\",\n active && ringColorClasses[c],\n )}\n />\n );\n}\n\nfunction useIntersectionReveal(animated: boolean) {\n const ref = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(!animated);\n\n useEffect(() => {\n if (!animated || !ref.current) return;\n const el = ref.current;\n const observer = new IntersectionObserver(\n ([entry]) => { if (entry.isIntersecting) { setVisible(true); observer.disconnect(); } },\n { threshold: 0.2 },\n );\n observer.observe(el);\n return () => observer.disconnect();\n }, [animated]);\n\n return { ref, visible };\n}\n\nexport const TimelineItem = forwardRef<HTMLDivElement, TimelineItemProps>(\n ({ children, icon, emoji, date, color = \"zinc\", active = false, className }, _ref) => {\n const { variant, index, total, animated } = useTimeline();\n const { ref, visible } = useIntersectionReveal(animated);\n const isLast = index === total - 1;\n const isLargeDot = !!icon || !!emoji;\n const isEven = index % 2 === 0;\n\n // ── Horizontal ────────────────────────────────────────\n if (variant === \"horizontal\") {\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"flex flex-col items-center\",\n !isLast && \"min-w-40\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot + horizontal line (fixed height for alignment) */}\n <div className=\"flex h-8 w-full items-center\">\n {index > 0\n ? <div className=\"h-px flex-1 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n : <div className=\"flex-1\" />}\n <Dot icon={icon} emoji={emoji} color={color} active={active} />\n {!isLast\n ? <div className=\"h-px flex-1 bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\" />\n : <div className=\"flex-1\" />}\n </div>\n\n {/* Content below */}\n <div className=\"mt-3 max-w-40 px-2 text-center\">\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n }\n\n // ── Alternating ───────────────────────────────────────\n if (variant === \"alternating\") {\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"relative flex gap-x-4 md:grid md:grid-cols-[1fr_1.5rem_1fr] md:gap-x-6\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot (sits on top of the background line) */}\n <div className=\"relative z-10 flex w-8 shrink-0 justify-center md:col-start-2 md:row-start-1 md:w-auto md:justify-center\">\n {!isLargeDot ? <div className=\"mt-1.5\"><Dot icon={icon} emoji={emoji} color={color} active={active} /></div> : <Dot icon={icon} emoji={emoji} color={color} active={active} />}\n </div>\n\n {/* Content */}\n <div className={cn(\n \"min-w-0 flex-1\",\n !isLast && \"pb-8\",\n isLargeDot && \"pt-1\",\n isEven ? \"md:col-start-1 md:row-start-1 md:text-right\" : \"md:col-start-3\",\n )}>\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n }\n\n // ── Stacked (default) ─────────────────────────────────\n return (\n <div\n ref={ref}\n data-react-fancy-timeline-item=\"\"\n className={cn(\n \"relative flex gap-x-4\",\n animated && \"transition duration-500 ease-out\",\n animated && (visible ? \"translate-y-0 opacity-100\" : \"translate-y-4 opacity-0\"),\n className,\n )}\n >\n {/* Dot (sits on top of the background line) */}\n <div className=\"relative z-10 flex w-8 shrink-0 justify-center\">\n {!isLargeDot\n ? <div className=\"mt-1.5\"><Dot icon={icon} emoji={emoji} color={color} active={active} /></div>\n : <Dot icon={icon} emoji={emoji} color={color} active={active} />}\n </div>\n\n {/* Content */}\n <div className={cn(\"min-w-0 flex-1\", !isLast && \"pb-8\", isLargeDot && \"pt-1\")}>\n {date && <time className=\"text-xs font-medium uppercase tracking-wide text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{date}</time>}\n {children}\n </div>\n </div>\n );\n },\n);\n\nTimelineItem.displayName = \"TimelineItem\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TimelineItem } from \"./TimelineItem\";\nimport type { TimelineBlockProps } from \"./Timeline.types\";\n\nexport const TimelineBlock = forwardRef<HTMLDivElement, TimelineBlockProps>(\n ({ heading, children, icon, emoji, color = \"zinc\", active = false, className }, ref) => {\n return (\n <TimelineItem icon={icon} emoji={emoji} color={color} active={active}>\n <div\n ref={ref}\n data-react-fancy-timeline-block=\"\"\n className={cn(\n \"rounded-lg border border-[color:var(--fancy-border,var(--color-zinc-200))] bg-[color:var(--fancy-surface,var(--color-white))] p-4 dark:border-[color:var(--fancy-border-dark,var(--color-zinc-700))] dark:bg-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\",\n active && \"ring-2 ring-blue-500/20 dark:ring-blue-400/20\",\n className,\n )}\n >\n {heading && (\n <div className=\"mb-2 text-sm font-semibold text-[color:var(--fancy-text,var(--color-zinc-900))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\">\n {heading}\n </div>\n )}\n <div className=\"text-sm text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\">{children}</div>\n </div>\n </TimelineItem>\n );\n },\n);\n\nTimelineBlock.displayName = \"TimelineBlock\";\n","import { Children, forwardRef, useCallback, useRef, type WheelEvent } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { TimelineContext } from \"./Timeline.context\";\nimport { TimelineItem } from \"./TimelineItem\";\nimport { TimelineBlock } from \"./TimelineBlock\";\nimport type { TimelineProps, TimelineVariant } from \"./Timeline.types\";\n\nconst TimelineRoot = forwardRef<HTMLDivElement, TimelineProps>(\n ({\n children,\n variant: variantProp,\n orientation,\n events,\n heading,\n description,\n animated = true,\n className,\n }, ref) => {\n const scrollRef = useRef<HTMLDivElement>(null);\n\n // Backward compat: map deprecated orientation to variant\n let variant: TimelineVariant = variantProp ?? \"stacked\";\n if (!variantProp && orientation) {\n variant = orientation === \"horizontal\" ? \"horizontal\" : \"stacked\";\n }\n\n const isHorizontal = variant === \"horizontal\";\n const isAlternating = variant === \"alternating\";\n\n // Build items from events prop (data-driven) or children (compound)\n const items = events\n ? events.map((e, i) => (\n <TimelineItem key={i} date={e.date} emoji={e.emoji} icon={e.icon} color={e.color}>\n {e.title && <h3 className=\"font-semibold text-zinc-900 dark:text-white\">{e.title}</h3>}\n {e.description && <div className=\"mt-1 text-sm leading-relaxed text-[color:var(--fancy-text-subtle,var(--color-zinc-600))] dark:text-[color:var(--fancy-text-subtle-dark,var(--color-zinc-400))]\">{e.description}</div>}\n </TimelineItem>\n ))\n : Children.toArray(children);\n\n const handleWheel = useCallback((e: WheelEvent) => {\n if (!scrollRef.current) return;\n e.preventDefault();\n scrollRef.current.scrollLeft += e.deltaY;\n }, []);\n\n const content = items.map((child, i) => (\n <TimelineContext.Provider key={i} value={{ variant, index: i, total: items.length, animated }}>\n {child}\n </TimelineContext.Provider>\n ));\n\n return (\n <div ref={ref} data-react-fancy-timeline=\"\" data-variant={variant} className={className}>\n {(heading || description) && (\n <div className=\"mb-8\">\n {heading && <h2 className=\"text-xl font-semibold text-zinc-900 dark:text-white\">{heading}</h2>}\n {description && <p className=\"mt-1 text-sm text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\">{description}</p>}\n </div>\n )}\n\n {isHorizontal ? (\n <div\n ref={scrollRef}\n className=\"overflow-x-auto pb-4 -mb-4 [scrollbar-color:var(--fancy-text-faint,rgb(161_161_170))_transparent] dark:[scrollbar-color:var(--fancy-text-faint-dark,rgb(161_161_170))_transparent]\"\n style={{ scrollbarWidth: \"thin\" }}\n onWheel={handleWheel}\n >\n <div className=\"flex min-w-max items-start\">\n {content}\n </div>\n </div>\n ) : (\n /* Vertical variants: continuous background line behind all events */\n <div className=\"relative\">\n {items.length > 1 && (\n <div className={cn(\n \"absolute top-0 bottom-0 w-px bg-[color:var(--fancy-border,var(--color-zinc-200))] dark:bg-[color:var(--fancy-border-dark,var(--color-zinc-700))]\",\n isAlternating\n ? \"left-4 md:left-1/2 md:-translate-x-px\"\n : \"left-4\",\n )} />\n )}\n {content}\n </div>\n )}\n </div>\n );\n },\n);\n\nTimelineRoot.displayName = \"Timeline\";\n\nexport const Timeline = Object.assign(TimelineRoot, {\n Item: TimelineItem,\n Block: TimelineBlock,\n});\n"]}
@@ -1,18 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkJRRYYW3Y_cjs = require('./chunk-JRRYYW3Y.cjs');
4
- var chunkBDUL42VO_cjs = require('./chunk-BDUL42VO.cjs');
4
+ var chunkGLGUQGAQ_cjs = require('./chunk-GLGUQGAQ.cjs');
5
5
  var chunkRVBTDXPD_cjs = require('./chunk-RVBTDXPD.cjs');
6
6
  var chunkTLRFXSPA_cjs = require('./chunk-TLRFXSPA.cjs');
7
7
  var chunkMAZEX4EZ_cjs = require('./chunk-MAZEX4EZ.cjs');
8
8
  var chunkP53432AK_cjs = require('./chunk-P53432AK.cjs');
9
9
  var chunkO3F6DYWR_cjs = require('./chunk-O3F6DYWR.cjs');
10
+ var chunk4XMBXG4K_cjs = require('./chunk-4XMBXG4K.cjs');
10
11
  var chunkGKLETY7D_cjs = require('./chunk-GKLETY7D.cjs');
12
+ var chunkKJ22KE56_cjs = require('./chunk-KJ22KE56.cjs');
11
13
  var chunkMOU6O324_cjs = require('./chunk-MOU6O324.cjs');
12
14
  var chunkCAMQ5B3V_cjs = require('./chunk-CAMQ5B3V.cjs');
13
15
  var chunkLCNHEYIM_cjs = require('./chunk-LCNHEYIM.cjs');
14
- var chunk4XMBXG4K_cjs = require('./chunk-4XMBXG4K.cjs');
15
- var chunkKJ22KE56_cjs = require('./chunk-KJ22KE56.cjs');
16
16
  var chunkZU5Q77OT_cjs = require('./chunk-ZU5Q77OT.cjs');
17
17
  var react = require('react');
18
18
  var jsxRuntime = require('react/jsx-runtime');
@@ -522,7 +522,7 @@ function JsonEditorValue({ node, mode, size, readOnly, id, onCommit }) {
522
522
  case "enum": {
523
523
  const options = rule?.options ?? [];
524
524
  return /* @__PURE__ */ jsxRuntime.jsx(
525
- chunkBDUL42VO_cjs.Select,
525
+ chunkGLGUQGAQ_cjs.Select,
526
526
  {
527
527
  ...common,
528
528
  list: options,
@@ -902,7 +902,7 @@ function JsonEditorAddForm({ path, kind, depth, suggestedType }) {
902
902
  }
903
903
  ),
904
904
  /* @__PURE__ */ jsxRuntime.jsx(
905
- chunkBDUL42VO_cjs.Select,
905
+ chunkGLGUQGAQ_cjs.Select,
906
906
  {
907
907
  size: ctx.size,
908
908
  mode: "edit",
@@ -1350,5 +1350,5 @@ exports.parsePath = parsePath;
1350
1350
  exports.pathToString = pathToString;
1351
1351
  exports.resolveKeyRule = resolveKeyRule;
1352
1352
  exports.typeMatches = typeMatches;
1353
- //# sourceMappingURL=chunk-JBHQQGG5.cjs.map
1354
- //# sourceMappingURL=chunk-JBHQQGG5.cjs.map
1353
+ //# sourceMappingURL=chunk-VP7MT7LH.cjs.map
1354
+ //# sourceMappingURL=chunk-VP7MT7LH.cjs.map