@particle-academy/react-fancy 1.3.5 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +73 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +73 -34
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -4506,6 +4506,13 @@ var Callout = react.forwardRef(
|
|
|
4506
4506
|
}
|
|
4507
4507
|
);
|
|
4508
4508
|
Callout.displayName = "Callout";
|
|
4509
|
+
var TimelineContext = react.createContext({
|
|
4510
|
+
orientation: "vertical",
|
|
4511
|
+
index: 0
|
|
4512
|
+
});
|
|
4513
|
+
function useTimeline() {
|
|
4514
|
+
return react.useContext(TimelineContext);
|
|
4515
|
+
}
|
|
4509
4516
|
var dotColorClasses2 = {
|
|
4510
4517
|
blue: "bg-blue-500 dark:bg-blue-400",
|
|
4511
4518
|
green: "bg-green-500 dark:bg-green-400",
|
|
@@ -4527,6 +4534,34 @@ var ringColorClasses = {
|
|
|
4527
4534
|
red: "ring-red-500/30 dark:ring-red-400/30",
|
|
4528
4535
|
zinc: "ring-zinc-400/30 dark:ring-zinc-500/30"
|
|
4529
4536
|
};
|
|
4537
|
+
function Dot({ icon, color, active }) {
|
|
4538
|
+
const c = color ?? "zinc";
|
|
4539
|
+
if (icon) {
|
|
4540
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4541
|
+
"span",
|
|
4542
|
+
{
|
|
4543
|
+
className: cn(
|
|
4544
|
+
"flex h-6 w-6 items-center justify-center rounded-full bg-white dark:bg-zinc-900",
|
|
4545
|
+
iconColorClasses2[c],
|
|
4546
|
+
active && "ring-4",
|
|
4547
|
+
active && ringColorClasses[c]
|
|
4548
|
+
),
|
|
4549
|
+
children: icon
|
|
4550
|
+
}
|
|
4551
|
+
);
|
|
4552
|
+
}
|
|
4553
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4554
|
+
"span",
|
|
4555
|
+
{
|
|
4556
|
+
className: cn(
|
|
4557
|
+
"h-3 w-3 rounded-full",
|
|
4558
|
+
dotColorClasses2[c],
|
|
4559
|
+
active && "ring-4",
|
|
4560
|
+
active && ringColorClasses[c]
|
|
4561
|
+
)
|
|
4562
|
+
}
|
|
4563
|
+
);
|
|
4564
|
+
}
|
|
4530
4565
|
var TimelineItem = react.forwardRef(
|
|
4531
4566
|
({
|
|
4532
4567
|
children,
|
|
@@ -4535,6 +4570,28 @@ var TimelineItem = react.forwardRef(
|
|
|
4535
4570
|
active = false,
|
|
4536
4571
|
className
|
|
4537
4572
|
}, ref) => {
|
|
4573
|
+
const { orientation, index } = useTimeline();
|
|
4574
|
+
if (orientation === "horizontal") {
|
|
4575
|
+
const isTop = index % 2 === 0;
|
|
4576
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4577
|
+
"div",
|
|
4578
|
+
{
|
|
4579
|
+
ref,
|
|
4580
|
+
"data-react-fancy-timeline-item": "",
|
|
4581
|
+
className: cn("relative flex flex-col items-center", className),
|
|
4582
|
+
style: { minWidth: 120 },
|
|
4583
|
+
children: [
|
|
4584
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex min-h-[4rem] items-end pb-2", !isTop && "invisible"), children: isTop && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 text-center", children }) }),
|
|
4585
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex w-full items-center justify-center", children: [
|
|
4586
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px flex-1 bg-zinc-200 dark:bg-zinc-700" }),
|
|
4587
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex shrink-0 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Dot, { icon, color, active }) }),
|
|
4588
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px flex-1 bg-zinc-200 dark:bg-zinc-700" })
|
|
4589
|
+
] }),
|
|
4590
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex min-h-[4rem] items-start pt-2", isTop && "invisible"), children: !isTop && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 text-center", children }) })
|
|
4591
|
+
]
|
|
4592
|
+
}
|
|
4593
|
+
);
|
|
4594
|
+
}
|
|
4538
4595
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4539
4596
|
"div",
|
|
4540
4597
|
{
|
|
@@ -4543,28 +4600,7 @@ var TimelineItem = react.forwardRef(
|
|
|
4543
4600
|
className: cn("relative flex gap-4 pb-8 last:pb-0", className),
|
|
4544
4601
|
children: [
|
|
4545
4602
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-[11px] top-6 bottom-0 w-px bg-zinc-200 last:hidden dark:bg-zinc-700" }),
|
|
4546
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex shrink-0", children:
|
|
4547
|
-
"span",
|
|
4548
|
-
{
|
|
4549
|
-
className: cn(
|
|
4550
|
-
"flex h-6 w-6 items-center justify-center rounded-full bg-white dark:bg-zinc-900",
|
|
4551
|
-
iconColorClasses2[color],
|
|
4552
|
-
active && "ring-4",
|
|
4553
|
-
active && ringColorClasses[color]
|
|
4554
|
-
),
|
|
4555
|
-
children: icon
|
|
4556
|
-
}
|
|
4557
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
4558
|
-
"span",
|
|
4559
|
-
{
|
|
4560
|
-
className: cn(
|
|
4561
|
-
"mt-1.5 h-3 w-3 rounded-full",
|
|
4562
|
-
dotColorClasses2[color],
|
|
4563
|
-
active && "ring-4",
|
|
4564
|
-
active && ringColorClasses[color]
|
|
4565
|
-
)
|
|
4566
|
-
}
|
|
4567
|
-
) }),
|
|
4603
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex shrink-0 mt-1.5", children: /* @__PURE__ */ jsxRuntime.jsx(Dot, { icon, color, active }) }),
|
|
4568
4604
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1 pt-0.5", children })
|
|
4569
4605
|
]
|
|
4570
4606
|
}
|
|
@@ -4594,14 +4630,19 @@ var TimelineBlock = react.forwardRef(
|
|
|
4594
4630
|
);
|
|
4595
4631
|
TimelineBlock.displayName = "TimelineBlock";
|
|
4596
4632
|
var TimelineRoot = react.forwardRef(
|
|
4597
|
-
({ children, className }, ref) => {
|
|
4633
|
+
({ children, orientation = "vertical", className }, ref) => {
|
|
4634
|
+
const items = react.Children.toArray(children);
|
|
4598
4635
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4599
4636
|
"div",
|
|
4600
4637
|
{
|
|
4601
4638
|
ref,
|
|
4602
4639
|
"data-react-fancy-timeline": "",
|
|
4603
|
-
|
|
4604
|
-
|
|
4640
|
+
"data-orientation": orientation,
|
|
4641
|
+
className: cn(
|
|
4642
|
+
orientation === "vertical" ? "flex flex-col" : "flex flex-row items-center overflow-x-auto",
|
|
4643
|
+
className
|
|
4644
|
+
),
|
|
4645
|
+
children: items.map((child, i) => /* @__PURE__ */ jsxRuntime.jsx(TimelineContext.Provider, { value: { orientation, index: i }, children: child }, i))
|
|
4605
4646
|
}
|
|
4606
4647
|
);
|
|
4607
4648
|
}
|
|
@@ -4767,24 +4808,22 @@ function PopoverTrigger({ children }) {
|
|
|
4767
4808
|
});
|
|
4768
4809
|
}
|
|
4769
4810
|
PopoverTrigger.displayName = "PopoverTrigger";
|
|
4770
|
-
function useOutsideClick(ref, handler, enabled = true) {
|
|
4811
|
+
function useOutsideClick(ref, handler, enabled = true, ignoreRef) {
|
|
4771
4812
|
react.useEffect(() => {
|
|
4772
4813
|
if (!enabled) return;
|
|
4773
4814
|
const listener = (event) => {
|
|
4774
4815
|
const el = ref.current;
|
|
4775
4816
|
if (!el || el.contains(event.target)) return;
|
|
4817
|
+
if (ignoreRef?.current?.contains(event.target)) return;
|
|
4776
4818
|
handler(event);
|
|
4777
4819
|
};
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
document.addEventListener("touchstart", listener);
|
|
4781
|
-
});
|
|
4820
|
+
document.addEventListener("mousedown", listener);
|
|
4821
|
+
document.addEventListener("touchstart", listener);
|
|
4782
4822
|
return () => {
|
|
4783
|
-
cancelAnimationFrame(raf);
|
|
4784
4823
|
document.removeEventListener("mousedown", listener);
|
|
4785
4824
|
document.removeEventListener("touchstart", listener);
|
|
4786
4825
|
};
|
|
4787
|
-
}, [ref, handler, enabled]);
|
|
4826
|
+
}, [ref, handler, enabled, ignoreRef]);
|
|
4788
4827
|
}
|
|
4789
4828
|
function useEscapeKey(handler, enabled = true) {
|
|
4790
4829
|
react.useEffect(() => {
|
|
@@ -4838,7 +4877,7 @@ function PopoverContent({ children, className }) {
|
|
|
4838
4877
|
enabled: open
|
|
4839
4878
|
});
|
|
4840
4879
|
const close = react.useCallback(() => setOpen(false), [setOpen]);
|
|
4841
|
-
useOutsideClick(outsideRef, close, open);
|
|
4880
|
+
useOutsideClick(outsideRef, close, open, anchorRef);
|
|
4842
4881
|
useEscapeKey(close, open);
|
|
4843
4882
|
const { mounted, className: animClass, ref: animRef } = useAnimation({
|
|
4844
4883
|
open,
|
|
@@ -4923,7 +4962,7 @@ function DropdownItems({ children, className }) {
|
|
|
4923
4962
|
setOpen(false);
|
|
4924
4963
|
setActiveIndex(-1);
|
|
4925
4964
|
}, [setOpen, setActiveIndex]);
|
|
4926
|
-
useOutsideClick(outsideRef, close, open);
|
|
4965
|
+
useOutsideClick(outsideRef, close, open, anchorRef);
|
|
4927
4966
|
useEscapeKey(close, open);
|
|
4928
4967
|
const { mounted, className: animClass, ref: animRef } = useAnimation({
|
|
4929
4968
|
open,
|