@n3wth/ui 0.8.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atoms/AnimatedText/AnimatedText.js +65 -0
- package/dist/atoms/AnimatedText/AnimatedText.js.map +1 -0
- package/dist/atoms/Avatar/Avatar.js +55 -0
- package/dist/atoms/Avatar/Avatar.js.map +1 -0
- package/dist/atoms/Badge/Badge.js +57 -0
- package/dist/atoms/Badge/Badge.js.map +1 -0
- package/dist/atoms/Button/Button.js +92 -0
- package/dist/atoms/Button/Button.js.map +1 -0
- package/dist/atoms/Character/Character.js +155 -0
- package/dist/atoms/Character/Character.js.map +1 -0
- package/dist/atoms/CodeBlock/CodeBlock.js +75 -0
- package/dist/atoms/CodeBlock/CodeBlock.js.map +1 -0
- package/dist/atoms/HamburgerIcon/HamburgerIcon.js +50 -0
- package/dist/atoms/HamburgerIcon/HamburgerIcon.js.map +1 -0
- package/dist/atoms/Icon/Icon.js +199 -0
- package/dist/atoms/Icon/Icon.js.map +1 -0
- package/dist/atoms/Input/Input.js +80 -0
- package/dist/atoms/Input/Input.js.map +1 -0
- package/dist/atoms/Label/Label.js +32 -0
- package/dist/atoms/Label/Label.js.map +1 -0
- package/dist/atoms/NoiseOverlay/NoiseOverlay.js +32 -0
- package/dist/atoms/NoiseOverlay/NoiseOverlay.js.map +1 -0
- package/dist/atoms/Progress/Progress.js +63 -0
- package/dist/atoms/Progress/Progress.js.map +1 -0
- package/dist/atoms/ScrollIndicator/ScrollIndicator.js +51 -0
- package/dist/atoms/ScrollIndicator/ScrollIndicator.js.map +1 -0
- package/dist/atoms/Separator/Separator.js +28 -0
- package/dist/atoms/Separator/Separator.js.map +1 -0
- package/dist/atoms/Shape/Shape.js +110 -0
- package/dist/atoms/Shape/Shape.js.map +1 -0
- package/dist/atoms/Shape/patterns.js +66 -0
- package/dist/atoms/Shape/patterns.js.map +1 -0
- package/dist/atoms/Skeleton/Skeleton.js +77 -0
- package/dist/atoms/Skeleton/Skeleton.js.map +1 -0
- package/dist/atoms/SpeechBubble/SpeechBubble.js +98 -0
- package/dist/atoms/SpeechBubble/SpeechBubble.js.map +1 -0
- package/dist/atoms/Switch/Switch.js +78 -0
- package/dist/atoms/Switch/Switch.js.map +1 -0
- package/dist/atoms/Textarea/Textarea.js +40 -0
- package/dist/atoms/Textarea/Textarea.js.map +1 -0
- package/dist/atoms/Tooltip/Tooltip.js +153 -0
- package/dist/atoms/Tooltip/Tooltip.js.map +1 -0
- package/dist/hooks/useButtonPulse.js +43 -0
- package/dist/hooks/useButtonPulse.js.map +1 -0
- package/dist/hooks/useCountUp.js +52 -0
- package/dist/hooks/useCountUp.js.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +37 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/hooks/useMediaQuery.js +59 -0
- package/dist/hooks/useMediaQuery.js.map +1 -0
- package/dist/hooks/usePageTransition.js +39 -0
- package/dist/hooks/usePageTransition.js.map +1 -0
- package/dist/hooks/useReducedMotion.js +57 -0
- package/dist/hooks/useReducedMotion.js.map +1 -0
- package/dist/hooks/useScrollReveal.js +61 -0
- package/dist/hooks/useScrollReveal.js.map +1 -0
- package/dist/hooks/useStaggerList.js +54 -0
- package/dist/hooks/useStaggerList.js.map +1 -0
- package/dist/hooks/useTextReveal.js +59 -0
- package/dist/hooks/useTextReveal.js.map +1 -0
- package/dist/hooks/useTheme.js +37 -0
- package/dist/hooks/useTheme.js.map +1 -0
- package/dist/hooks/useToast.js +84 -0
- package/dist/hooks/useToast.js.map +1 -0
- package/dist/index.js +147 -7925
- package/dist/index.js.map +1 -1
- package/dist/molecules/Accordion/Accordion.js +178 -0
- package/dist/molecules/Accordion/Accordion.js.map +1 -0
- package/dist/molecules/Card/Card.js +104 -0
- package/dist/molecules/Card/Card.js.map +1 -0
- package/dist/molecules/CommandBox/CommandBox.js +65 -0
- package/dist/molecules/CommandBox/CommandBox.js.map +1 -0
- package/dist/molecules/CompositeShape/CompositeShape.js +69 -0
- package/dist/molecules/CompositeShape/CompositeShape.js.map +1 -0
- package/dist/molecules/CompositeShape/presets.js +71 -0
- package/dist/molecules/CompositeShape/presets.js.map +1 -0
- package/dist/molecules/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/molecules/Dropdown/Dropdown.js +530 -0
- package/dist/molecules/Dropdown/Dropdown.js.map +1 -0
- package/dist/molecules/ErrorBoundary/ErrorBoundary.js +128 -0
- package/dist/molecules/ErrorBoundary/ErrorBoundary.js.map +1 -0
- package/dist/molecules/MobileDrawer/MobileDrawer.js +78 -0
- package/dist/molecules/MobileDrawer/MobileDrawer.js.map +1 -0
- package/dist/molecules/Modal/Modal.js +262 -0
- package/dist/molecules/Modal/Modal.js.map +1 -0
- package/dist/molecules/NavLink/NavLink.js +38 -0
- package/dist/molecules/NavLink/NavLink.js.map +1 -0
- package/dist/molecules/Tabs/Tabs.js +188 -0
- package/dist/molecules/Tabs/Tabs.js.map +1 -0
- package/dist/molecules/ThemeToggle/ThemeToggle.js +48 -0
- package/dist/molecules/ThemeToggle/ThemeToggle.js.map +1 -0
- package/dist/molecules/Toast/Toast.js +156 -0
- package/dist/molecules/Toast/Toast.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.js +17 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/IconoirContext.js +6 -0
- package/dist/node_modules/iconoir-react/dist/esm/IconoirContext.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowDown.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowDown.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowLeft.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowLeft.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowRight.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowRight.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowUp.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowUp.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowUpRight.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ArrowUpRight.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Bell.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Bell.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Calendar.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Calendar.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Check.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Check.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/CheckCircle.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/CheckCircle.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Clock.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Clock.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Code.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Code.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Copy.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Copy.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Download.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Download.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/EditPencil.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/EditPencil.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Eye.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Eye.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/EyeClosed.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/EyeClosed.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Filter.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Filter.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Folder.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Folder.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Github.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Github.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/HalfMoon.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/HalfMoon.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Heart.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Heart.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Home.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Home.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/InfoCircle.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/InfoCircle.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Link.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Link.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/List.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/List.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Lock.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Lock.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/LockSlash.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/LockSlash.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Mail.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Mail.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Menu.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Menu.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Minus.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Minus.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/MoreHoriz.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/MoreHoriz.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/MoreVert.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/MoreVert.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowDown.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowDown.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowLeft.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowLeft.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowRight.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowRight.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowUp.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/NavArrowUp.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/OpenInWindow.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/OpenInWindow.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Page.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Page.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Plus.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Plus.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/RefreshDouble.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/RefreshDouble.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Search.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Search.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Settings.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Settings.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/SortDown.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/SortDown.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Sparks.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Sparks.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Star.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Star.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/SunLight.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/SunLight.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Terminal.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Terminal.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Trash.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Trash.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Upload.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Upload.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/User.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/User.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ViewGrid.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/ViewGrid.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/WarningTriangle.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/WarningTriangle.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Xmark.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/Xmark.js.map +1 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/XmarkCircle.js +17 -0
- package/dist/node_modules/iconoir-react/dist/esm/regular/XmarkCircle.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +2996 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/organisms/Footer/Footer.js +108 -0
- package/dist/organisms/Footer/Footer.js.map +1 -0
- package/dist/organisms/Hero/Hero.d.ts.map +1 -1
- package/dist/organisms/Hero/Hero.js +101 -0
- package/dist/organisms/Hero/Hero.js.map +1 -0
- package/dist/organisms/Nav/Nav.js +177 -0
- package/dist/organisms/Nav/Nav.js.map +1 -0
- package/dist/organisms/Section/Section.js +57 -0
- package/dist/organisms/Section/Section.js.map +1 -0
- package/dist/styles.css +6 -0
- package/dist/theme.css +2 -0
- package/dist/tokens/colors.js +105 -0
- package/dist/tokens/colors.js.map +1 -0
- package/dist/tokens/effects.js +26 -0
- package/dist/tokens/effects.js.map +1 -0
- package/dist/tokens/motion.js +25 -0
- package/dist/tokens/motion.js.map +1 -0
- package/dist/tokens/spacing.js +31 -0
- package/dist/tokens/spacing.js.map +1 -0
- package/dist/tokens/typography.js +63 -0
- package/dist/tokens/typography.js.map +1 -0
- package/dist/utils/cn.js +9 -0
- package/dist/utils/cn.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { useRef as p, useEffect as l } from "react";
|
|
2
|
+
import o from "gsap";
|
|
3
|
+
function b(f = {}) {
|
|
4
|
+
const {
|
|
5
|
+
duration: s = 0.5,
|
|
6
|
+
stagger: a = 0.08,
|
|
7
|
+
delay: n = 0,
|
|
8
|
+
direction: i = "up"
|
|
9
|
+
} = f, u = p(null);
|
|
10
|
+
return l(() => {
|
|
11
|
+
const r = u.current;
|
|
12
|
+
if (!r) return;
|
|
13
|
+
const c = r.querySelectorAll("[data-stagger-item]");
|
|
14
|
+
if (c.length === 0) return;
|
|
15
|
+
if (window.matchMedia(
|
|
16
|
+
"(prefers-reduced-motion: reduce)"
|
|
17
|
+
).matches) {
|
|
18
|
+
o.set(c, { opacity: 1 });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const t = { opacity: 0 }, e = {
|
|
22
|
+
opacity: 1,
|
|
23
|
+
duration: s,
|
|
24
|
+
stagger: a,
|
|
25
|
+
delay: n,
|
|
26
|
+
ease: "cubic.out"
|
|
27
|
+
};
|
|
28
|
+
switch (i) {
|
|
29
|
+
case "up":
|
|
30
|
+
t.y = 20, e.y = 0;
|
|
31
|
+
break;
|
|
32
|
+
case "down":
|
|
33
|
+
t.y = -20, e.y = 0;
|
|
34
|
+
break;
|
|
35
|
+
case "left":
|
|
36
|
+
t.x = 20, e.x = 0;
|
|
37
|
+
break;
|
|
38
|
+
case "right":
|
|
39
|
+
t.x = -20, e.x = 0;
|
|
40
|
+
break;
|
|
41
|
+
case "scale":
|
|
42
|
+
t.scale = 0.8, e.scale = 1, e.ease = "back.out(1.7)";
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
const d = o.context(() => {
|
|
46
|
+
o.fromTo(c, t, e);
|
|
47
|
+
}, r);
|
|
48
|
+
return () => d.revert();
|
|
49
|
+
}, [s, a, n, i]), u;
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
b as useStaggerList
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=useStaggerList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStaggerList.js","sources":["../../src/hooks/useStaggerList.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport gsap from 'gsap'\n\nexport interface UseStaggerListOptions {\n /** Animation duration in seconds */\n duration?: number\n /** Stagger delay between items */\n stagger?: number\n /** Delay before animation starts */\n delay?: number\n /** Direction items animate from */\n direction?: 'up' | 'down' | 'left' | 'right' | 'scale'\n}\n\n/**\n * Hook for staggered list item animations\n * Creates cascade effects as items appear\n *\n * Items should have data-stagger-item attribute:\n * ```tsx\n * <ul ref={ref}>\n * <li data-stagger-item>Item 1</li>\n * <li data-stagger-item>Item 2</li>\n * </ul>\n * ```\n */\nexport function useStaggerList(options: UseStaggerListOptions = {}) {\n const {\n duration = 0.5,\n stagger = 0.08,\n delay = 0,\n direction = 'up',\n } = options\n\n const ref = useRef<HTMLElement>(null)\n\n useEffect(() => {\n const container = ref.current\n if (!container) return\n\n const items = container.querySelectorAll('[data-stagger-item]')\n if (items.length === 0) return\n\n const prefersReducedMotion = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n ).matches\n\n if (prefersReducedMotion) {\n gsap.set(items, { opacity: 1 })\n return\n }\n\n const fromVars: gsap.TweenVars = { opacity: 0 }\n const toVars: gsap.TweenVars = {\n opacity: 1,\n duration,\n stagger,\n delay,\n ease: 'cubic.out',\n }\n\n switch (direction) {\n case 'up':\n fromVars.y = 20\n toVars.y = 0\n break\n case 'down':\n fromVars.y = -20\n toVars.y = 0\n break\n case 'left':\n fromVars.x = 20\n toVars.x = 0\n break\n case 'right':\n fromVars.x = -20\n toVars.x = 0\n break\n case 'scale':\n fromVars.scale = 0.8\n toVars.scale = 1\n toVars.ease = 'back.out(1.7)'\n break\n }\n\n const ctx = gsap.context(() => {\n gsap.fromTo(items, fromVars, toVars)\n }, container)\n\n return () => ctx.revert()\n }, [duration, stagger, delay, direction])\n\n return ref\n}\n"],"names":["useStaggerList","options","duration","stagger","delay","direction","ref","useRef","useEffect","container","items","gsap","fromVars","toVars","ctx"],"mappings":";;AA0BO,SAASA,EAAeC,IAAiC,IAAI;AAClE,QAAM;AAAA,IACJ,UAAAC,IAAW;AAAA,IACX,SAAAC,IAAU;AAAA,IACV,OAAAC,IAAQ;AAAA,IACR,WAAAC,IAAY;AAAA,EAAA,IACVJ,GAEEK,IAAMC,EAAoB,IAAI;AAEpC,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAYH,EAAI;AACtB,QAAI,CAACG,EAAW;AAEhB,UAAMC,IAAQD,EAAU,iBAAiB,qBAAqB;AAC9D,QAAIC,EAAM,WAAW,EAAG;AAMxB,QAJ6B,OAAO;AAAA,MAClC;AAAA,IAAA,EACA,SAEwB;AACxB,MAAAC,EAAK,IAAID,GAAO,EAAE,SAAS,GAAG;AAC9B;AAAA,IACF;AAEA,UAAME,IAA2B,EAAE,SAAS,EAAA,GACtCC,IAAyB;AAAA,MAC7B,SAAS;AAAA,MACT,UAAAX;AAAA,MACA,SAAAC;AAAA,MACA,OAAAC;AAAA,MACA,MAAM;AAAA,IAAA;AAGR,YAAQC,GAAA;AAAA,MACN,KAAK;AACH,QAAAO,EAAS,IAAI,IACbC,EAAO,IAAI;AACX;AAAA,MACF,KAAK;AACH,QAAAD,EAAS,IAAI,KACbC,EAAO,IAAI;AACX;AAAA,MACF,KAAK;AACH,QAAAD,EAAS,IAAI,IACbC,EAAO,IAAI;AACX;AAAA,MACF,KAAK;AACH,QAAAD,EAAS,IAAI,KACbC,EAAO,IAAI;AACX;AAAA,MACF,KAAK;AACH,QAAAD,EAAS,QAAQ,KACjBC,EAAO,QAAQ,GACfA,EAAO,OAAO;AACd;AAAA,IAAA;AAGJ,UAAMC,IAAMH,EAAK,QAAQ,MAAM;AAC7B,MAAAA,EAAK,OAAOD,GAAOE,GAAUC,CAAM;AAAA,IACrC,GAAGJ,CAAS;AAEZ,WAAO,MAAMK,EAAI,OAAA;AAAA,EACnB,GAAG,CAACZ,GAAUC,GAASC,GAAOC,CAAS,CAAC,GAEjCC;AACT;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useRef as g, useEffect as m } from "react";
|
|
2
|
+
import o from "gsap";
|
|
3
|
+
import { ScrollTrigger as y } from "gsap/ScrollTrigger";
|
|
4
|
+
o.registerPlugin(y);
|
|
5
|
+
function C(p = {}) {
|
|
6
|
+
const {
|
|
7
|
+
duration: r = 0.6,
|
|
8
|
+
delay: c = 0,
|
|
9
|
+
staggerAmount: n = 0.03,
|
|
10
|
+
onScroll: s = !0
|
|
11
|
+
} = p, i = g(null);
|
|
12
|
+
return m(() => {
|
|
13
|
+
const e = i.current;
|
|
14
|
+
if (!e) return;
|
|
15
|
+
const a = e.textContent || "";
|
|
16
|
+
if (window.matchMedia(
|
|
17
|
+
"(prefers-reduced-motion: reduce)"
|
|
18
|
+
).matches || !a) return;
|
|
19
|
+
const f = a.split("");
|
|
20
|
+
e.textContent = "", f.forEach((u) => {
|
|
21
|
+
const t = document.createElement("span");
|
|
22
|
+
t.textContent = u === " " ? " " : u, t.style.display = "inline-block", t.style.opacity = "0", e.appendChild(t);
|
|
23
|
+
});
|
|
24
|
+
const l = Array.from(e.querySelectorAll("span")), d = o.context(() => {
|
|
25
|
+
s ? o.fromTo(
|
|
26
|
+
l,
|
|
27
|
+
{ opacity: 0, y: 12 },
|
|
28
|
+
{
|
|
29
|
+
opacity: 1,
|
|
30
|
+
y: 0,
|
|
31
|
+
duration: r / 2,
|
|
32
|
+
stagger: n,
|
|
33
|
+
ease: "cubic.out",
|
|
34
|
+
scrollTrigger: {
|
|
35
|
+
trigger: e,
|
|
36
|
+
start: "top 75%",
|
|
37
|
+
toggleActions: "play none none none"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
) : o.fromTo(
|
|
41
|
+
l,
|
|
42
|
+
{ opacity: 0, y: 12 },
|
|
43
|
+
{
|
|
44
|
+
opacity: 1,
|
|
45
|
+
y: 0,
|
|
46
|
+
duration: r / 2,
|
|
47
|
+
stagger: n,
|
|
48
|
+
delay: c,
|
|
49
|
+
ease: "cubic.out"
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}, e);
|
|
53
|
+
return () => d.revert();
|
|
54
|
+
}, [r, c, n, s]), i;
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
C as useTextReveal
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=useTextReveal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTextReveal.js","sources":["../../src/hooks/useTextReveal.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport gsap from 'gsap'\nimport { ScrollTrigger } from 'gsap/ScrollTrigger'\n\ngsap.registerPlugin(ScrollTrigger)\n\nexport interface UseTextRevealOptions {\n /** Animation duration in seconds */\n duration?: number\n /** Delay before animation starts */\n delay?: number\n /** Stagger amount between characters */\n staggerAmount?: number\n /** Trigger animation on scroll into view */\n onScroll?: boolean\n}\n\n/**\n * Hook for revealing text character by character\n * Creates staggered entrance animations for text content\n *\n * Note: This will replace the element's text content with spans\n */\nexport function useTextReveal(options: UseTextRevealOptions = {}) {\n const {\n duration = 0.6,\n delay = 0,\n staggerAmount = 0.03,\n onScroll = true,\n } = options\n\n const ref = useRef<HTMLElement>(null)\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n const text = element.textContent || ''\n const prefersReducedMotion = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n ).matches\n\n if (prefersReducedMotion || !text) return\n\n // Split text into characters\n const characters = text.split('')\n element.textContent = ''\n\n // Create spans for each character\n characters.forEach((char) => {\n const span = document.createElement('span')\n span.textContent = char === ' ' ? '\\u00A0' : char // Non-breaking space for spaces\n span.style.display = 'inline-block'\n span.style.opacity = '0'\n element.appendChild(span)\n })\n\n const spans = Array.from(element.querySelectorAll('span'))\n\n const ctx = gsap.context(() => {\n if (onScroll) {\n gsap.fromTo(\n spans,\n { opacity: 0, y: 12 },\n {\n opacity: 1,\n y: 0,\n duration: duration / 2,\n stagger: staggerAmount,\n ease: 'cubic.out',\n scrollTrigger: {\n trigger: element,\n start: 'top 75%',\n toggleActions: 'play none none none',\n },\n }\n )\n } else {\n gsap.fromTo(\n spans,\n { opacity: 0, y: 12 },\n {\n opacity: 1,\n y: 0,\n duration: duration / 2,\n stagger: staggerAmount,\n delay,\n ease: 'cubic.out',\n }\n )\n }\n }, element)\n\n return () => ctx.revert()\n }, [duration, delay, staggerAmount, onScroll])\n\n return ref\n}\n"],"names":["gsap","ScrollTrigger","useTextReveal","options","duration","delay","staggerAmount","onScroll","ref","useRef","useEffect","element","text","characters","char","span","spans","ctx"],"mappings":";;;AAIAA,EAAK,eAAeC,CAAa;AAmB1B,SAASC,EAAcC,IAAgC,IAAI;AAChE,QAAM;AAAA,IACJ,UAAAC,IAAW;AAAA,IACX,OAAAC,IAAQ;AAAA,IACR,eAAAC,IAAgB;AAAA,IAChB,UAAAC,IAAW;AAAA,EAAA,IACTJ,GAEEK,IAAMC,EAAoB,IAAI;AAEpC,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAUH,EAAI;AACpB,QAAI,CAACG,EAAS;AAEd,UAAMC,IAAOD,EAAQ,eAAe;AAKpC,QAJ6B,OAAO;AAAA,MAClC;AAAA,IAAA,EACA,WAE0B,CAACC,EAAM;AAGnC,UAAMC,IAAaD,EAAK,MAAM,EAAE;AAChC,IAAAD,EAAQ,cAAc,IAGtBE,EAAW,QAAQ,CAACC,MAAS;AAC3B,YAAMC,IAAO,SAAS,cAAc,MAAM;AAC1C,MAAAA,EAAK,cAAcD,MAAS,MAAM,MAAWA,GAC7CC,EAAK,MAAM,UAAU,gBACrBA,EAAK,MAAM,UAAU,KACrBJ,EAAQ,YAAYI,CAAI;AAAA,IAC1B,CAAC;AAED,UAAMC,IAAQ,MAAM,KAAKL,EAAQ,iBAAiB,MAAM,CAAC,GAEnDM,IAAMjB,EAAK,QAAQ,MAAM;AAC7B,MAAIO,IACFP,EAAK;AAAA,QACHgB;AAAA,QACA,EAAE,SAAS,GAAG,GAAG,GAAA;AAAA,QACjB;AAAA,UACE,SAAS;AAAA,UACT,GAAG;AAAA,UACH,UAAUZ,IAAW;AAAA,UACrB,SAASE;AAAA,UACT,MAAM;AAAA,UACN,eAAe;AAAA,YACb,SAASK;AAAA,YACT,OAAO;AAAA,YACP,eAAe;AAAA,UAAA;AAAA,QACjB;AAAA,MACF,IAGFX,EAAK;AAAA,QACHgB;AAAA,QACA,EAAE,SAAS,GAAG,GAAG,GAAA;AAAA,QACjB;AAAA,UACE,SAAS;AAAA,UACT,GAAG;AAAA,UACH,UAAUZ,IAAW;AAAA,UACrB,SAASE;AAAA,UACT,OAAAD;AAAA,UACA,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IAGN,GAAGM,CAAO;AAEV,WAAO,MAAMM,EAAI,OAAA;AAAA,EACnB,GAAG,CAACb,GAAUC,GAAOC,GAAeC,CAAQ,CAAC,GAEtCC;AACT;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useState as u, useCallback as s, useEffect as d } from "react";
|
|
2
|
+
function k(c = {}) {
|
|
3
|
+
const {
|
|
4
|
+
defaultTheme: a = "dark",
|
|
5
|
+
storageKey: r = "n3wth-theme",
|
|
6
|
+
attribute: n = "data-theme"
|
|
7
|
+
} = c, [t, h] = u(() => {
|
|
8
|
+
if (typeof window > "u") return a;
|
|
9
|
+
const e = localStorage.getItem(r);
|
|
10
|
+
return e === "dark" || e === "light" ? e : window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : a;
|
|
11
|
+
}), o = s(
|
|
12
|
+
(e) => {
|
|
13
|
+
h(e), typeof window < "u" && (localStorage.setItem(r, e), document.documentElement.setAttribute(n, e));
|
|
14
|
+
},
|
|
15
|
+
[r, n]
|
|
16
|
+
), m = s(() => {
|
|
17
|
+
o(t === "dark" ? "light" : "dark");
|
|
18
|
+
}, [t, o]);
|
|
19
|
+
return d(() => {
|
|
20
|
+
document.documentElement.setAttribute(n, t);
|
|
21
|
+
}, [n, t]), d(() => {
|
|
22
|
+
const e = window.matchMedia("(prefers-color-scheme: light)"), i = (l) => {
|
|
23
|
+
localStorage.getItem(r) || o(l.matches ? "light" : "dark");
|
|
24
|
+
};
|
|
25
|
+
return e.addEventListener("change", i), () => e.removeEventListener("change", i);
|
|
26
|
+
}, [r, o]), {
|
|
27
|
+
theme: t,
|
|
28
|
+
setTheme: o,
|
|
29
|
+
toggleTheme: m,
|
|
30
|
+
isDark: t === "dark",
|
|
31
|
+
isLight: t === "light"
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
k as useTheme
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=useTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTheme.js","sources":["../../src/hooks/useTheme.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react'\n\nexport type Theme = 'dark' | 'light'\n\nexport interface UseThemeOptions {\n defaultTheme?: Theme\n storageKey?: string\n attribute?: string\n}\n\nexport interface UseThemeReturn {\n theme: Theme\n setTheme: (theme: Theme) => void\n toggleTheme: () => void\n isDark: boolean\n isLight: boolean\n}\n\nexport function useTheme(options: UseThemeOptions = {}): UseThemeReturn {\n const {\n defaultTheme = 'dark',\n storageKey = 'n3wth-theme',\n attribute = 'data-theme',\n } = options\n\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof window === 'undefined') return defaultTheme\n\n const stored = localStorage.getItem(storageKey)\n if (stored === 'dark' || stored === 'light') return stored\n\n if (window.matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light'\n }\n\n return defaultTheme\n })\n\n const setTheme = useCallback(\n (newTheme: Theme) => {\n setThemeState(newTheme)\n\n if (typeof window !== 'undefined') {\n localStorage.setItem(storageKey, newTheme)\n document.documentElement.setAttribute(attribute, newTheme)\n }\n },\n [storageKey, attribute]\n )\n\n const toggleTheme = useCallback(() => {\n setTheme(theme === 'dark' ? 'light' : 'dark')\n }, [theme, setTheme])\n\n // Initialize theme on mount\n useEffect(() => {\n document.documentElement.setAttribute(attribute, theme)\n }, [attribute, theme])\n\n // Listen for system theme changes\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: light)')\n\n const handleChange = (e: MediaQueryListEvent) => {\n const stored = localStorage.getItem(storageKey)\n if (!stored) {\n setTheme(e.matches ? 'light' : 'dark')\n }\n }\n\n mediaQuery.addEventListener('change', handleChange)\n return () => mediaQuery.removeEventListener('change', handleChange)\n }, [storageKey, setTheme])\n\n return {\n theme,\n setTheme,\n toggleTheme,\n isDark: theme === 'dark',\n isLight: theme === 'light',\n }\n}\n"],"names":["useTheme","options","defaultTheme","storageKey","attribute","theme","setThemeState","useState","stored","setTheme","useCallback","newTheme","toggleTheme","useEffect","mediaQuery","handleChange","e"],"mappings":";AAkBO,SAASA,EAASC,IAA2B,IAAoB;AACtE,QAAM;AAAA,IACJ,cAAAC,IAAe;AAAA,IACf,YAAAC,IAAa;AAAA,IACb,WAAAC,IAAY;AAAA,EAAA,IACVH,GAEE,CAACI,GAAOC,CAAa,IAAIC,EAAgB,MAAM;AACnD,QAAI,OAAO,SAAW,IAAa,QAAOL;AAE1C,UAAMM,IAAS,aAAa,QAAQL,CAAU;AAC9C,WAAIK,MAAW,UAAUA,MAAW,UAAgBA,IAEhD,OAAO,WAAW,+BAA+B,EAAE,UAC9C,UAGFN;AAAA,EACT,CAAC,GAEKO,IAAWC;AAAA,IACf,CAACC,MAAoB;AACnB,MAAAL,EAAcK,CAAQ,GAElB,OAAO,SAAW,QACpB,aAAa,QAAQR,GAAYQ,CAAQ,GACzC,SAAS,gBAAgB,aAAaP,GAAWO,CAAQ;AAAA,IAE7D;AAAA,IACA,CAACR,GAAYC,CAAS;AAAA,EAAA,GAGlBQ,IAAcF,EAAY,MAAM;AACpC,IAAAD,EAASJ,MAAU,SAAS,UAAU,MAAM;AAAA,EAC9C,GAAG,CAACA,GAAOI,CAAQ,CAAC;AAGpB,SAAAI,EAAU,MAAM;AACd,aAAS,gBAAgB,aAAaT,GAAWC,CAAK;AAAA,EACxD,GAAG,CAACD,GAAWC,CAAK,CAAC,GAGrBQ,EAAU,MAAM;AACd,UAAMC,IAAa,OAAO,WAAW,+BAA+B,GAE9DC,IAAe,CAACC,MAA2B;AAE/C,MADe,aAAa,QAAQb,CAAU,KAE5CM,EAASO,EAAE,UAAU,UAAU,MAAM;AAAA,IAEzC;AAEA,WAAAF,EAAW,iBAAiB,UAAUC,CAAY,GAC3C,MAAMD,EAAW,oBAAoB,UAAUC,CAAY;AAAA,EACpE,GAAG,CAACZ,GAAYM,CAAQ,CAAC,GAElB;AAAA,IACL,OAAAJ;AAAA,IACA,UAAAI;AAAA,IACA,aAAAG;AAAA,IACA,QAAQP,MAAU;AAAA,IAClB,SAASA,MAAU;AAAA,EAAA;AAEvB;"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createElement as f, useContext as C, useState as p, useRef as w, useCallback as i, createContext as x } from "react";
|
|
2
|
+
import { ToastContainer as h, Toast as k } from "../molecules/Toast/Toast.js";
|
|
3
|
+
let D = 0;
|
|
4
|
+
function P() {
|
|
5
|
+
return `toast-${++D}-${Date.now()}`;
|
|
6
|
+
}
|
|
7
|
+
const v = x(null);
|
|
8
|
+
function m(s = 5) {
|
|
9
|
+
const [r, o] = p([]), a = w(r);
|
|
10
|
+
a.current = r;
|
|
11
|
+
const e = i((t) => {
|
|
12
|
+
o((u) => u.filter((l) => l.id !== t));
|
|
13
|
+
}, []), T = i(() => {
|
|
14
|
+
o([]);
|
|
15
|
+
}, []), n = i(
|
|
16
|
+
(t) => {
|
|
17
|
+
const u = P(), l = {
|
|
18
|
+
id: u,
|
|
19
|
+
variant: t.variant ?? "default",
|
|
20
|
+
title: t.title,
|
|
21
|
+
description: t.description,
|
|
22
|
+
duration: t.duration ?? 5e3,
|
|
23
|
+
icon: t.icon
|
|
24
|
+
};
|
|
25
|
+
return o((g) => {
|
|
26
|
+
const d = [...g, l];
|
|
27
|
+
return d.length > s ? d.slice(d.length - s) : d;
|
|
28
|
+
}), u;
|
|
29
|
+
},
|
|
30
|
+
[s]
|
|
31
|
+
), c = i(
|
|
32
|
+
(t) => n(t),
|
|
33
|
+
[n]
|
|
34
|
+
);
|
|
35
|
+
return c.success = i(
|
|
36
|
+
(t) => n({ ...t, variant: "success" }),
|
|
37
|
+
[n]
|
|
38
|
+
), c.error = i(
|
|
39
|
+
(t) => n({ ...t, variant: "error" }),
|
|
40
|
+
[n]
|
|
41
|
+
), c.warning = i(
|
|
42
|
+
(t) => n({ ...t, variant: "warning" }),
|
|
43
|
+
[n]
|
|
44
|
+
), c.info = i(
|
|
45
|
+
(t) => n({ ...t, variant: "info" }),
|
|
46
|
+
[n]
|
|
47
|
+
), { toasts: r, toast: c, dismiss: e, dismissAll: T };
|
|
48
|
+
}
|
|
49
|
+
function $({
|
|
50
|
+
children: s,
|
|
51
|
+
maxToasts: r = 5,
|
|
52
|
+
position: o = "top-right"
|
|
53
|
+
}) {
|
|
54
|
+
const a = m(r);
|
|
55
|
+
return f(
|
|
56
|
+
v.Provider,
|
|
57
|
+
{ value: a },
|
|
58
|
+
s,
|
|
59
|
+
f(
|
|
60
|
+
h,
|
|
61
|
+
{ position: o },
|
|
62
|
+
...a.toasts.map(
|
|
63
|
+
(e) => f(k, {
|
|
64
|
+
key: e.id,
|
|
65
|
+
variant: e.variant,
|
|
66
|
+
title: e.title,
|
|
67
|
+
description: e.description,
|
|
68
|
+
duration: e.duration,
|
|
69
|
+
icon: e.icon,
|
|
70
|
+
onDismiss: () => a.dismiss(e.id)
|
|
71
|
+
})
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
function b(s) {
|
|
77
|
+
const r = C(v);
|
|
78
|
+
return r || m(s);
|
|
79
|
+
}
|
|
80
|
+
export {
|
|
81
|
+
$ as ToastProvider,
|
|
82
|
+
b as useToast
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=useToast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToast.js","sources":["../../src/hooks/useToast.ts"],"sourcesContent":["import {\n useState,\n useCallback,\n useRef,\n createContext,\n useContext,\n type ReactNode,\n} from 'react'\nimport { createElement } from 'react'\nimport type { ToastVariant, ToastData, ToastPosition } from '../molecules/Toast/Toast'\nimport { Toast, ToastContainer } from '../molecules/Toast/Toast'\n\nexport interface ToastOptions {\n title?: string\n description?: string\n variant?: ToastVariant\n duration?: number\n icon?: ReactNode\n}\n\nexport interface UseToastReturn {\n toasts: ToastData[]\n toast: ToastFn\n dismiss: (id: string) => void\n dismissAll: () => void\n}\n\nexport interface ToastFn {\n (options: ToastOptions): string\n success: (options: Omit<ToastOptions, 'variant'>) => string\n error: (options: Omit<ToastOptions, 'variant'>) => string\n warning: (options: Omit<ToastOptions, 'variant'>) => string\n info: (options: Omit<ToastOptions, 'variant'>) => string\n}\n\nexport interface ToastProviderProps {\n children: ReactNode\n maxToasts?: number\n position?: ToastPosition\n}\n\nlet idCounter = 0\n\nfunction generateId(): string {\n return `toast-${++idCounter}-${Date.now()}`\n}\n\nconst ToastContext = createContext<UseToastReturn | null>(null)\n\nfunction useToastState(maxToasts = 5): UseToastReturn {\n const [toasts, setToasts] = useState<ToastData[]>([])\n const toastsRef = useRef(toasts)\n toastsRef.current = toasts\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const dismissAll = useCallback(() => {\n setToasts([])\n }, [])\n\n const addToast = useCallback(\n (options: ToastOptions): string => {\n const id = generateId()\n const newToast: ToastData = {\n id,\n variant: options.variant ?? 'default',\n title: options.title,\n description: options.description,\n duration: options.duration ?? 5000,\n icon: options.icon,\n }\n\n setToasts((prev) => {\n const next = [...prev, newToast]\n if (next.length > maxToasts) {\n return next.slice(next.length - maxToasts)\n }\n return next\n })\n\n return id\n },\n [maxToasts]\n )\n\n const toast = useCallback(\n (options: ToastOptions) => addToast(options),\n [addToast]\n ) as ToastFn\n\n toast.success = useCallback(\n (options: Omit<ToastOptions, 'variant'>) =>\n addToast({ ...options, variant: 'success' }),\n [addToast]\n )\n\n toast.error = useCallback(\n (options: Omit<ToastOptions, 'variant'>) =>\n addToast({ ...options, variant: 'error' }),\n [addToast]\n )\n\n toast.warning = useCallback(\n (options: Omit<ToastOptions, 'variant'>) =>\n addToast({ ...options, variant: 'warning' }),\n [addToast]\n )\n\n toast.info = useCallback(\n (options: Omit<ToastOptions, 'variant'>) =>\n addToast({ ...options, variant: 'info' }),\n [addToast]\n )\n\n return { toasts, toast, dismiss, dismissAll }\n}\n\nexport function ToastProvider({\n children,\n maxToasts = 5,\n position = 'top-right',\n}: ToastProviderProps) {\n const state = useToastState(maxToasts)\n\n return createElement(\n ToastContext.Provider,\n { value: state },\n children,\n createElement(\n ToastContainer,\n { position },\n ...state.toasts.map((t) =>\n createElement(Toast, {\n key: t.id,\n variant: t.variant,\n title: t.title,\n description: t.description,\n duration: t.duration,\n icon: t.icon,\n onDismiss: () => state.dismiss(t.id),\n })\n )\n )\n )\n}\n\nexport function useToast(maxToasts?: number): UseToastReturn {\n const context = useContext(ToastContext)\n if (context) return context\n\n // Fallback: standalone usage without provider\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useToastState(maxToasts)\n}\n"],"names":["idCounter","generateId","ToastContext","createContext","useToastState","maxToasts","toasts","setToasts","useState","toastsRef","useRef","dismiss","useCallback","id","prev","t","dismissAll","addToast","options","newToast","next","toast","ToastProvider","children","position","state","createElement","ToastContainer","Toast","useToast","context","useContext"],"mappings":"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"}
|