@backbay/glia 0.2.0-alpha.7 → 0.2.0-alpha.8
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/audio/index.js +1145 -5
- package/dist/audio/index.js.map +1 -1
- package/dist/components/index.js +3187 -10
- package/dist/components/index.js.map +1 -1
- package/dist/core.js +19714 -12
- package/dist/core.js.map +1 -1
- package/dist/emotion/index.js +1 -1
- package/dist/emotion/index.js.map +1 -1
- package/dist/hooks/index.js +941 -6
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +31841 -183
- package/dist/index.js.map +1 -1
- package/dist/primitives/index.js +21111 -57
- package/dist/primitives/index.js.map +1 -1
- package/dist/protocol/index.js +360 -2
- package/dist/protocol/index.js.map +1 -1
- package/dist/speakeasy/index.js +2786 -38
- package/dist/speakeasy/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/index.js +1150 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/vision/index.js +370 -2
- package/dist/vision/index.js.map +1 -1
- package/dist/workspace/index.js +16824 -2
- package/dist/workspace/index.js.map +1 -1
- package/package.json +15 -9
- package/dist/AuroraBackground-AP6ZHVFA.js +0 -6
- package/dist/AuroraBackground-AP6ZHVFA.js.map +0 -1
- package/dist/BentoGrid-CDARICNM.js +0 -6
- package/dist/BentoGrid-CDARICNM.js.map +0 -1
- package/dist/CommandPalette-JCWJKRBY.js +0 -6
- package/dist/CommandPalette-JCWJKRBY.js.map +0 -1
- package/dist/Glass-H4X4ZI4P.js +0 -7
- package/dist/Glass-H4X4ZI4P.js.map +0 -1
- package/dist/GlitchText-KLQ57PPY.js +0 -6
- package/dist/GlitchText-KLQ57PPY.js.map +0 -1
- package/dist/GlowButton-VGBPMZO7.js +0 -6
- package/dist/GlowButton-VGBPMZO7.js.map +0 -1
- package/dist/Graph3D-GO7N2EZQ.js +0 -540
- package/dist/Graph3D-GO7N2EZQ.js.map +0 -1
- package/dist/HUDProgressRing-N6C5NAEV.js +0 -6
- package/dist/HUDProgressRing-N6C5NAEV.js.map +0 -1
- package/dist/KPIStat-PBQK27ZB.js +0 -6
- package/dist/KPIStat-PBQK27ZB.js.map +0 -1
- package/dist/NeonToast-W5F7MU3U.js +0 -6
- package/dist/NeonToast-W5F7MU3U.js.map +0 -1
- package/dist/ParticleField-WK6CNHWU.js +0 -51
- package/dist/ParticleField-WK6CNHWU.js.map +0 -1
- package/dist/TextGenerateEffect-EUCEIIUJ.js +0 -6
- package/dist/TextGenerateEffect-EUCEIIUJ.js.map +0 -1
- package/dist/ThreeDCard-VH5I3SSY.js +0 -6
- package/dist/ThreeDCard-VH5I3SSY.js.map +0 -1
- package/dist/TypingAnimation-GIWOHPIX.js +0 -6
- package/dist/TypingAnimation-GIWOHPIX.js.map +0 -1
- package/dist/alert-dialog-QOSYBIIE.js +0 -19
- package/dist/alert-dialog-QOSYBIIE.js.map +0 -1
- package/dist/avatar-N5R37PCU.js +0 -10
- package/dist/avatar-N5R37PCU.js.map +0 -1
- package/dist/badge-GTVIIGPY.js +0 -8
- package/dist/badge-GTVIIGPY.js.map +0 -1
- package/dist/button-D7IMSV2D.js +0 -8
- package/dist/button-D7IMSV2D.js.map +0 -1
- package/dist/chunk-3CMPQOMY.js +0 -69
- package/dist/chunk-3CMPQOMY.js.map +0 -1
- package/dist/chunk-3OQT6IYR.js +0 -41
- package/dist/chunk-3OQT6IYR.js.map +0 -1
- package/dist/chunk-43B2WVLS.js +0 -85
- package/dist/chunk-43B2WVLS.js.map +0 -1
- package/dist/chunk-4SRFO5W3.js +0 -121
- package/dist/chunk-4SRFO5W3.js.map +0 -1
- package/dist/chunk-5IZELOOU.js +0 -362
- package/dist/chunk-5IZELOOU.js.map +0 -1
- package/dist/chunk-6DM4ACSS.js +0 -154
- package/dist/chunk-6DM4ACSS.js.map +0 -1
- package/dist/chunk-6IGT34PC.js +0 -50
- package/dist/chunk-6IGT34PC.js.map +0 -1
- package/dist/chunk-6RKBCJHN.js +0 -194
- package/dist/chunk-6RKBCJHN.js.map +0 -1
- package/dist/chunk-6RX2WGCO.js +0 -108
- package/dist/chunk-6RX2WGCO.js.map +0 -1
- package/dist/chunk-7K4WZM3U.js +0 -189
- package/dist/chunk-7K4WZM3U.js.map +0 -1
- package/dist/chunk-7MDBHJPT.js +0 -407
- package/dist/chunk-7MDBHJPT.js.map +0 -1
- package/dist/chunk-7UQD6ROV.js +0 -9
- package/dist/chunk-7UQD6ROV.js.map +0 -1
- package/dist/chunk-AFNIVLZP.js +0 -1069
- package/dist/chunk-AFNIVLZP.js.map +0 -1
- package/dist/chunk-ANWYRO6A.js +0 -407
- package/dist/chunk-ANWYRO6A.js.map +0 -1
- package/dist/chunk-DIXPOHDO.js +0 -71
- package/dist/chunk-DIXPOHDO.js.map +0 -1
- package/dist/chunk-DWYMKYPI.js +0 -3
- package/dist/chunk-DWYMKYPI.js.map +0 -1
- package/dist/chunk-E3NVDCZG.js +0 -280
- package/dist/chunk-E3NVDCZG.js.map +0 -1
- package/dist/chunk-EBM7YBKL.js +0 -399
- package/dist/chunk-EBM7YBKL.js.map +0 -1
- package/dist/chunk-EPAM7IWW.js +0 -294
- package/dist/chunk-EPAM7IWW.js.map +0 -1
- package/dist/chunk-EXQ7GYRS.js +0 -134
- package/dist/chunk-EXQ7GYRS.js.map +0 -1
- package/dist/chunk-F4QTUZ3C.js +0 -136
- package/dist/chunk-F4QTUZ3C.js.map +0 -1
- package/dist/chunk-FEW533R2.js +0 -105
- package/dist/chunk-FEW533R2.js.map +0 -1
- package/dist/chunk-FFZLJKC7.js +0 -270
- package/dist/chunk-FFZLJKC7.js.map +0 -1
- package/dist/chunk-GEAMOBF7.js +0 -8486
- package/dist/chunk-GEAMOBF7.js.map +0 -1
- package/dist/chunk-GRTRSCTD.js +0 -74
- package/dist/chunk-GRTRSCTD.js.map +0 -1
- package/dist/chunk-IKGYOGLK.js +0 -16
- package/dist/chunk-IKGYOGLK.js.map +0 -1
- package/dist/chunk-IQ7WYWVJ.js +0 -73
- package/dist/chunk-IQ7WYWVJ.js.map +0 -1
- package/dist/chunk-IXIVWQLF.js +0 -543
- package/dist/chunk-IXIVWQLF.js.map +0 -1
- package/dist/chunk-JCJU57RC.js +0 -115
- package/dist/chunk-JCJU57RC.js.map +0 -1
- package/dist/chunk-KORSTBU4.js +0 -117
- package/dist/chunk-KORSTBU4.js.map +0 -1
- package/dist/chunk-KSEZ6UM2.js +0 -235
- package/dist/chunk-KSEZ6UM2.js.map +0 -1
- package/dist/chunk-MHPF7R3O.js +0 -1376
- package/dist/chunk-MHPF7R3O.js.map +0 -1
- package/dist/chunk-MPC5IH7E.js +0 -81
- package/dist/chunk-MPC5IH7E.js.map +0 -1
- package/dist/chunk-MQIU2NYA.js +0 -114
- package/dist/chunk-MQIU2NYA.js.map +0 -1
- package/dist/chunk-NYMBJOGR.js +0 -2192
- package/dist/chunk-NYMBJOGR.js.map +0 -1
- package/dist/chunk-OBZD2M3C.js +0 -169
- package/dist/chunk-OBZD2M3C.js.map +0 -1
- package/dist/chunk-ODM2AG6G.js +0 -176
- package/dist/chunk-ODM2AG6G.js.map +0 -1
- package/dist/chunk-ONDKF5LP.js +0 -53
- package/dist/chunk-ONDKF5LP.js.map +0 -1
- package/dist/chunk-P25YCWQB.js +0 -41
- package/dist/chunk-P25YCWQB.js.map +0 -1
- package/dist/chunk-PFYVNM6H.js +0 -14
- package/dist/chunk-PFYVNM6H.js.map +0 -1
- package/dist/chunk-PWNNSGFL.js +0 -20
- package/dist/chunk-PWNNSGFL.js.map +0 -1
- package/dist/chunk-Q2PGZVOT.js +0 -36
- package/dist/chunk-Q2PGZVOT.js.map +0 -1
- package/dist/chunk-Q2XDMV7U.js +0 -76
- package/dist/chunk-Q2XDMV7U.js.map +0 -1
- package/dist/chunk-QG7FH2FI.js +0 -45
- package/dist/chunk-QG7FH2FI.js.map +0 -1
- package/dist/chunk-R7HUOK2D.js +0 -1914
- package/dist/chunk-R7HUOK2D.js.map +0 -1
- package/dist/chunk-REUYY7G5.js +0 -773
- package/dist/chunk-REUYY7G5.js.map +0 -1
- package/dist/chunk-RHC2Z2HT.js +0 -199
- package/dist/chunk-RHC2Z2HT.js.map +0 -1
- package/dist/chunk-RMCVLIFE.js +0 -23
- package/dist/chunk-RMCVLIFE.js.map +0 -1
- package/dist/chunk-ROZLTXGR.js +0 -234
- package/dist/chunk-ROZLTXGR.js.map +0 -1
- package/dist/chunk-RSS2C2O3.js +0 -17
- package/dist/chunk-RSS2C2O3.js.map +0 -1
- package/dist/chunk-SAGCG5SH.js +0 -355
- package/dist/chunk-SAGCG5SH.js.map +0 -1
- package/dist/chunk-TM6AOUSD.js +0 -40
- package/dist/chunk-TM6AOUSD.js.map +0 -1
- package/dist/chunk-TPK4BYCO.js +0 -970
- package/dist/chunk-TPK4BYCO.js.map +0 -1
- package/dist/chunk-UNQIL4K2.js +0 -34
- package/dist/chunk-UNQIL4K2.js.map +0 -1
- package/dist/chunk-UUG6L75Y.js +0 -47
- package/dist/chunk-UUG6L75Y.js.map +0 -1
- package/dist/chunk-V2SYMV4W.js +0 -114
- package/dist/chunk-V2SYMV4W.js.map +0 -1
- package/dist/chunk-V7EN5CTH.js +0 -130
- package/dist/chunk-V7EN5CTH.js.map +0 -1
- package/dist/chunk-VITKG2HL.js +0 -1125
- package/dist/chunk-VITKG2HL.js.map +0 -1
- package/dist/chunk-VYEWU5LO.js +0 -2631
- package/dist/chunk-VYEWU5LO.js.map +0 -1
- package/dist/chunk-W67QAGSH.js +0 -178
- package/dist/chunk-W67QAGSH.js.map +0 -1
- package/dist/chunk-WWBIN6KV.js +0 -1353
- package/dist/chunk-WWBIN6KV.js.map +0 -1
- package/dist/chunk-X77Z4PFB.js +0 -224
- package/dist/chunk-X77Z4PFB.js.map +0 -1
- package/dist/chunk-X7VG7OTT.js +0 -8
- package/dist/chunk-X7VG7OTT.js.map +0 -1
- package/dist/chunk-XE4K2SGI.js +0 -74
- package/dist/chunk-XE4K2SGI.js.map +0 -1
- package/dist/chunk-YIUG7IJK.js +0 -628
- package/dist/chunk-YIUG7IJK.js.map +0 -1
- package/dist/chunk-YNVN3V4Y.js +0 -13
- package/dist/chunk-YNVN3V4Y.js.map +0 -1
- package/dist/chunk-Z2S54IZX.js +0 -198
- package/dist/chunk-Z2S54IZX.js.map +0 -1
- package/dist/chunk-ZR6AH25Z.js +0 -17
- package/dist/chunk-ZR6AH25Z.js.map +0 -1
- package/dist/dialog-SPM3DTTI.js +0 -17
- package/dist/dialog-SPM3DTTI.js.map +0 -1
- package/dist/dropdown-menu-HMTWKWGK.js +0 -21
- package/dist/dropdown-menu-HMTWKWGK.js.map +0 -1
- package/dist/input-BH4P4S26.js +0 -6
- package/dist/input-BH4P4S26.js.map +0 -1
- package/dist/label-5Z4Q6VER.js +0 -8
- package/dist/label-5Z4Q6VER.js.map +0 -1
- package/dist/popover-IFOUXYLI.js +0 -18
- package/dist/popover-IFOUXYLI.js.map +0 -1
- package/dist/scroll-area-DJXNW6QX.js +0 -14
- package/dist/scroll-area-DJXNW6QX.js.map +0 -1
- package/dist/select-FZ277C3G.js +0 -22
- package/dist/select-FZ277C3G.js.map +0 -1
- package/dist/separator-BTMLN4NB.js +0 -8
- package/dist/separator-BTMLN4NB.js.map +0 -1
- package/dist/skeleton-DXIWBH4W.js +0 -6
- package/dist/skeleton-DXIWBH4W.js.map +0 -1
- package/dist/switch-4MCXIZBY.js +0 -13
- package/dist/switch-4MCXIZBY.js.map +0 -1
- package/dist/tabs-O7AW3APK.js +0 -17
- package/dist/tabs-O7AW3APK.js.map +0 -1
- package/dist/textarea-IB5WAFDO.js +0 -6
- package/dist/textarea-IB5WAFDO.js.map +0 -1
- package/dist/toggle-XVPPG6P4.js +0 -10
- package/dist/toggle-XVPPG6P4.js.map +0 -1
- package/dist/tooltip-JICZTD4F.js +0 -18
- package/dist/tooltip-JICZTD4F.js.map +0 -1
package/dist/chunk-6DM4ACSS.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { createContextScope } from './chunk-MPC5IH7E.js';
|
|
2
|
-
import { useComposedRefs, composeRefs } from './chunk-P25YCWQB.js';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import React__default from 'react';
|
|
5
|
-
import { jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
// @__NO_SIDE_EFFECTS__
|
|
8
|
-
function createSlot(ownerName) {
|
|
9
|
-
const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);
|
|
10
|
-
const Slot2 = React.forwardRef((props, forwardedRef) => {
|
|
11
|
-
const { children, ...slotProps } = props;
|
|
12
|
-
const childrenArray = React.Children.toArray(children);
|
|
13
|
-
const slottable = childrenArray.find(isSlottable);
|
|
14
|
-
if (slottable) {
|
|
15
|
-
const newElement = slottable.props.children;
|
|
16
|
-
const newChildren = childrenArray.map((child) => {
|
|
17
|
-
if (child === slottable) {
|
|
18
|
-
if (React.Children.count(newElement) > 1) return React.Children.only(null);
|
|
19
|
-
return React.isValidElement(newElement) ? newElement.props.children : null;
|
|
20
|
-
} else {
|
|
21
|
-
return child;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });
|
|
25
|
-
}
|
|
26
|
-
return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });
|
|
27
|
-
});
|
|
28
|
-
Slot2.displayName = `${ownerName}.Slot`;
|
|
29
|
-
return Slot2;
|
|
30
|
-
}
|
|
31
|
-
// @__NO_SIDE_EFFECTS__
|
|
32
|
-
function createSlotClone(ownerName) {
|
|
33
|
-
const SlotClone = React.forwardRef((props, forwardedRef) => {
|
|
34
|
-
const { children, ...slotProps } = props;
|
|
35
|
-
if (React.isValidElement(children)) {
|
|
36
|
-
const childrenRef = getElementRef(children);
|
|
37
|
-
const props2 = mergeProps(slotProps, children.props);
|
|
38
|
-
if (children.type !== React.Fragment) {
|
|
39
|
-
props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
|
|
40
|
-
}
|
|
41
|
-
return React.cloneElement(children, props2);
|
|
42
|
-
}
|
|
43
|
-
return React.Children.count(children) > 1 ? React.Children.only(null) : null;
|
|
44
|
-
});
|
|
45
|
-
SlotClone.displayName = `${ownerName}.SlotClone`;
|
|
46
|
-
return SlotClone;
|
|
47
|
-
}
|
|
48
|
-
var SLOTTABLE_IDENTIFIER = /* @__PURE__ */ Symbol("radix.slottable");
|
|
49
|
-
function isSlottable(child) {
|
|
50
|
-
return React.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
|
|
51
|
-
}
|
|
52
|
-
function mergeProps(slotProps, childProps) {
|
|
53
|
-
const overrideProps = { ...childProps };
|
|
54
|
-
for (const propName in childProps) {
|
|
55
|
-
const slotPropValue = slotProps[propName];
|
|
56
|
-
const childPropValue = childProps[propName];
|
|
57
|
-
const isHandler = /^on[A-Z]/.test(propName);
|
|
58
|
-
if (isHandler) {
|
|
59
|
-
if (slotPropValue && childPropValue) {
|
|
60
|
-
overrideProps[propName] = (...args) => {
|
|
61
|
-
const result = childPropValue(...args);
|
|
62
|
-
slotPropValue(...args);
|
|
63
|
-
return result;
|
|
64
|
-
};
|
|
65
|
-
} else if (slotPropValue) {
|
|
66
|
-
overrideProps[propName] = slotPropValue;
|
|
67
|
-
}
|
|
68
|
-
} else if (propName === "style") {
|
|
69
|
-
overrideProps[propName] = { ...slotPropValue, ...childPropValue };
|
|
70
|
-
} else if (propName === "className") {
|
|
71
|
-
overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return { ...slotProps, ...overrideProps };
|
|
75
|
-
}
|
|
76
|
-
function getElementRef(element) {
|
|
77
|
-
let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
|
|
78
|
-
let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
79
|
-
if (mayWarn) {
|
|
80
|
-
return element.ref;
|
|
81
|
-
}
|
|
82
|
-
getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
|
|
83
|
-
mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
84
|
-
if (mayWarn) {
|
|
85
|
-
return element.props.ref;
|
|
86
|
-
}
|
|
87
|
-
return element.props.ref || element.ref;
|
|
88
|
-
}
|
|
89
|
-
function createCollection(name) {
|
|
90
|
-
const PROVIDER_NAME = name + "CollectionProvider";
|
|
91
|
-
const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);
|
|
92
|
-
const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(
|
|
93
|
-
PROVIDER_NAME,
|
|
94
|
-
{ collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }
|
|
95
|
-
);
|
|
96
|
-
const CollectionProvider = (props) => {
|
|
97
|
-
const { scope, children } = props;
|
|
98
|
-
const ref = React__default.useRef(null);
|
|
99
|
-
const itemMap = React__default.useRef(/* @__PURE__ */ new Map()).current;
|
|
100
|
-
return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });
|
|
101
|
-
};
|
|
102
|
-
CollectionProvider.displayName = PROVIDER_NAME;
|
|
103
|
-
const COLLECTION_SLOT_NAME = name + "CollectionSlot";
|
|
104
|
-
const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);
|
|
105
|
-
const CollectionSlot = React__default.forwardRef(
|
|
106
|
-
(props, forwardedRef) => {
|
|
107
|
-
const { scope, children } = props;
|
|
108
|
-
const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);
|
|
109
|
-
const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);
|
|
110
|
-
return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });
|
|
111
|
-
}
|
|
112
|
-
);
|
|
113
|
-
CollectionSlot.displayName = COLLECTION_SLOT_NAME;
|
|
114
|
-
const ITEM_SLOT_NAME = name + "CollectionItemSlot";
|
|
115
|
-
const ITEM_DATA_ATTR = "data-radix-collection-item";
|
|
116
|
-
const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);
|
|
117
|
-
const CollectionItemSlot = React__default.forwardRef(
|
|
118
|
-
(props, forwardedRef) => {
|
|
119
|
-
const { scope, children, ...itemData } = props;
|
|
120
|
-
const ref = React__default.useRef(null);
|
|
121
|
-
const composedRefs = useComposedRefs(forwardedRef, ref);
|
|
122
|
-
const context = useCollectionContext(ITEM_SLOT_NAME, scope);
|
|
123
|
-
React__default.useEffect(() => {
|
|
124
|
-
context.itemMap.set(ref, { ref, ...itemData });
|
|
125
|
-
return () => void context.itemMap.delete(ref);
|
|
126
|
-
});
|
|
127
|
-
return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: "" }, ref: composedRefs, children });
|
|
128
|
-
}
|
|
129
|
-
);
|
|
130
|
-
CollectionItemSlot.displayName = ITEM_SLOT_NAME;
|
|
131
|
-
function useCollection(scope) {
|
|
132
|
-
const context = useCollectionContext(name + "CollectionConsumer", scope);
|
|
133
|
-
const getItems = React__default.useCallback(() => {
|
|
134
|
-
const collectionNode = context.collectionRef.current;
|
|
135
|
-
if (!collectionNode) return [];
|
|
136
|
-
const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));
|
|
137
|
-
const items = Array.from(context.itemMap.values());
|
|
138
|
-
const orderedItems = items.sort(
|
|
139
|
-
(a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)
|
|
140
|
-
);
|
|
141
|
-
return orderedItems;
|
|
142
|
-
}, [context.collectionRef, context.itemMap]);
|
|
143
|
-
return getItems;
|
|
144
|
-
}
|
|
145
|
-
return [
|
|
146
|
-
{ Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },
|
|
147
|
-
useCollection,
|
|
148
|
-
createCollectionScope
|
|
149
|
-
];
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export { createCollection };
|
|
153
|
-
//# sourceMappingURL=chunk-6DM4ACSS.js.map
|
|
154
|
-
//# sourceMappingURL=chunk-6DM4ACSS.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/src/slot.tsx","../../../node_modules/@radix-ui/react-collection/src/collection-legacy.tsx"],"names":["Slot","props","React","jsx"],"mappings":"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","file":"chunk-6DM4ACSS.js","sourcesContent":["import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import React from 'react';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createSlot, type Slot } from '@radix-ui/react-slot';\n\ntype SlotProps = React.ComponentPropsWithoutRef<typeof Slot>;\ntype CollectionElement = HTMLElement;\ninterface CollectionProps extends SlotProps {\n scope: any;\n}\n\n// We have resorted to returning slots directly rather than exposing primitives that can then\n// be slotted like `<CollectionItem as={Slot}>…</CollectionItem>`.\n// This is because we encountered issues with generic types that cannot be statically analysed\n// due to creating them dynamically via createCollection.\n\nfunction createCollection<ItemElement extends HTMLElement, ItemData = {}>(name: string) {\n /* -----------------------------------------------------------------------------------------------\n * CollectionProvider\n * ---------------------------------------------------------------------------------------------*/\n\n const PROVIDER_NAME = name + 'CollectionProvider';\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n\n type ContextValue = {\n collectionRef: React.RefObject<CollectionElement | null>;\n itemMap: Map<\n React.RefObject<ItemElement | null>,\n { ref: React.RefObject<ItemElement | null> } & ItemData\n >;\n };\n\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext<ContextValue>(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: new Map() }\n );\n\n const CollectionProvider: React.FC<{ children?: React.ReactNode; scope: any }> = (props) => {\n const { scope, children } = props;\n const ref = React.useRef<CollectionElement>(null);\n const itemMap = React.useRef<ContextValue['itemMap']>(new Map()).current;\n return (\n <CollectionProviderImpl scope={scope} itemMap={itemMap} collectionRef={ref}>\n {children}\n </CollectionProviderImpl>\n );\n };\n\n CollectionProvider.displayName = PROVIDER_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionSlot\n * ---------------------------------------------------------------------------------------------*/\n\n const COLLECTION_SLOT_NAME = name + 'CollectionSlot';\n\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef<CollectionElement, CollectionProps>(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return <CollectionSlotImpl ref={composedRefs}>{children}</CollectionSlotImpl>;\n }\n );\n\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * CollectionItem\n * ---------------------------------------------------------------------------------------------*/\n\n const ITEM_SLOT_NAME = name + 'CollectionItemSlot';\n const ITEM_DATA_ATTR = 'data-radix-collection-item';\n\n type CollectionItemSlotProps = ItemData & {\n children: React.ReactNode;\n scope: any;\n };\n\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef<ItemElement, CollectionItemSlotProps>(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef<ItemElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...(itemData as unknown as ItemData) });\n return () => void context.itemMap.delete(ref);\n });\n\n return (\n <CollectionItemSlotImpl {...{ [ITEM_DATA_ATTR]: '' }} ref={composedRefs}>\n {children}\n </CollectionItemSlotImpl>\n );\n }\n );\n\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n\n /* -----------------------------------------------------------------------------------------------\n * useCollection\n * ---------------------------------------------------------------------------------------------*/\n\n function useCollection(scope: any) {\n const context = useCollectionContext(name + 'CollectionConsumer', scope);\n\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current!) - orderedNodes.indexOf(b.ref.current!)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n\n return getItems;\n }\n\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope,\n ] as const;\n}\n\nexport { createCollection };\nexport type { CollectionProps };\n"]}
|
package/dist/chunk-6IGT34PC.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-6RX2WGCO.js';
|
|
2
|
-
import { useEffect } from 'react';
|
|
3
|
-
import { useAnimate, stagger, motion } from 'framer-motion';
|
|
4
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
var TextGenerateEffect = ({
|
|
7
|
-
words,
|
|
8
|
-
className,
|
|
9
|
-
filter = true,
|
|
10
|
-
duration = 0.5
|
|
11
|
-
}) => {
|
|
12
|
-
const [scope, animate] = useAnimate();
|
|
13
|
-
let wordsArray = words.split(" ");
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
animate(
|
|
16
|
-
"span",
|
|
17
|
-
{
|
|
18
|
-
opacity: 1,
|
|
19
|
-
filter: filter ? "blur(0px)" : "none"
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
duration: duration ? duration : 1,
|
|
23
|
-
delay: stagger(0.2)
|
|
24
|
-
}
|
|
25
|
-
);
|
|
26
|
-
}, [animate, duration, filter, words]);
|
|
27
|
-
const renderWords = () => {
|
|
28
|
-
return /* @__PURE__ */ jsx(motion.div, { ref: scope, children: wordsArray.map((word, idx) => {
|
|
29
|
-
return /* @__PURE__ */ jsxs(
|
|
30
|
-
motion.span,
|
|
31
|
-
{
|
|
32
|
-
className: "text-white opacity-0",
|
|
33
|
-
style: {
|
|
34
|
-
filter: filter ? "blur(10px)" : "none"
|
|
35
|
-
},
|
|
36
|
-
children: [
|
|
37
|
-
word,
|
|
38
|
-
" "
|
|
39
|
-
]
|
|
40
|
-
},
|
|
41
|
-
word + idx
|
|
42
|
-
);
|
|
43
|
-
}) });
|
|
44
|
-
};
|
|
45
|
-
return /* @__PURE__ */ jsx("div", { className: cn("font-bold", className), children: /* @__PURE__ */ jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsx("div", { className: "text-white text-2xl leading-snug tracking-wide", children: renderWords() }) }) });
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export { TextGenerateEffect };
|
|
49
|
-
//# sourceMappingURL=chunk-6IGT34PC.js.map
|
|
50
|
-
//# sourceMappingURL=chunk-6IGT34PC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/atoms/TextGenerateEffect/TextGenerateEffect.tsx"],"names":[],"mappings":";;;;;AAKO,IAAM,qBAAqB,CAAC;AAAA,EACjC,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,QAAA,GAAW;AACb,CAAA,KAKM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,GAAI,UAAA,EAAW;AACpC,EAAA,IAAI,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA;AAAA,MACE,MAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS,CAAA;AAAA,QACT,MAAA,EAAQ,SAAS,WAAA,GAAc;AAAA,OACjC;AAAA,MACA;AAAA,QACE,QAAA,EAAU,WAAW,QAAA,GAAW,CAAA;AAAA,QAChC,KAAA,EAAO,QAAQ,GAAG;AAAA;AACpB,KACF;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,QAAA,EAAU,MAAA,EAAQ,KAAK,CAAC,CAAA;AAErC,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,uBACE,GAAA,CAAC,MAAA,CAAO,GAAA,EAAP,EAAW,GAAA,EAAK,OACd,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,KAAQ;AAC7B,MAAA,uBACE,IAAA;AAAA,QAAC,MAAA,CAAO,IAAA;AAAA,QAAP;AAAA,UAEC,SAAA,EAAU,sBAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,SAAS,YAAA,GAAe;AAAA,WAClC;AAAA,UAEC,QAAA,EAAA;AAAA,YAAA,IAAA;AAAA,YAAM;AAAA;AAAA,SAAA;AAAA,QANF,IAAA,GAAO;AAAA,OAOd;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,WAAA,EAAa,SAAS,GACvC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,8BAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kDACZ,QAAA,EAAA,WAAA,EAAY,EACf,GACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-6IGT34PC.js","sourcesContent":["\"use client\";\nimport { useEffect } from \"react\";\nimport { motion, stagger, useAnimate } from \"framer-motion\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const TextGenerateEffect = ({\n words,\n className,\n filter = true,\n duration = 0.5,\n}: {\n words: string;\n className?: string;\n filter?: boolean;\n duration?: number;\n}) => {\n const [scope, animate] = useAnimate();\n let wordsArray = words.split(\" \");\n useEffect(() => {\n animate(\n \"span\",\n {\n opacity: 1,\n filter: filter ? \"blur(0px)\" : \"none\",\n },\n {\n duration: duration ? duration : 1,\n delay: stagger(0.2),\n }\n );\n }, [animate, duration, filter, words]);\n\n const renderWords = () => {\n return (\n <motion.div ref={scope}>\n {wordsArray.map((word, idx) => {\n return (\n <motion.span\n key={word + idx}\n className=\"text-white opacity-0\"\n style={{\n filter: filter ? \"blur(10px)\" : \"none\",\n }}\n >\n {word}{\" \"}\n </motion.span>\n );\n })}\n </motion.div>\n );\n };\n\n return (\n <div className={cn(\"font-bold\", className)}>\n <div className=\"mt-4\">\n <div className=\"text-white text-2xl leading-snug tracking-wide\">\n {renderWords()}\n </div>\n </div>\n </div>\n );\n};\n"]}
|
package/dist/chunk-6RKBCJHN.js
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { prefersReducedMotion, formatNumber, cn } from './chunk-6RX2WGCO.js';
|
|
2
|
-
import { cva } from 'class-variance-authority';
|
|
3
|
-
import { motion } from 'framer-motion';
|
|
4
|
-
import { MoreHorizontal, TrendingUp, TrendingDown, Minus } from 'lucide-react';
|
|
5
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var kpiStatVariants = cva(
|
|
8
|
-
"relative min-h-[120px] flex flex-col justify-between p-4 rounded-xl border backdrop-blur-sm transition-all duration-200",
|
|
9
|
-
{
|
|
10
|
-
variants: {
|
|
11
|
-
variant: {
|
|
12
|
-
default: "bg-card/30 border-border/30",
|
|
13
|
-
success: "bg-emerald-400/5 border-emerald-400/20",
|
|
14
|
-
warning: "bg-yellow-500/5 border-yellow-500/20",
|
|
15
|
-
danger: "bg-destructive/5 border-destructive/20",
|
|
16
|
-
accent: "bg-cyan-400/5 border-cyan-400/20"
|
|
17
|
-
},
|
|
18
|
-
size: {
|
|
19
|
-
default: "p-4",
|
|
20
|
-
compact: "p-3 min-h-[100px]",
|
|
21
|
-
expanded: "p-6 min-h-[140px]"
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
defaultVariants: {
|
|
25
|
-
variant: "default",
|
|
26
|
-
size: "default"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
);
|
|
30
|
-
function KPIStat({
|
|
31
|
-
className,
|
|
32
|
-
variant,
|
|
33
|
-
size,
|
|
34
|
-
title,
|
|
35
|
-
value,
|
|
36
|
-
previousValue,
|
|
37
|
-
suffix,
|
|
38
|
-
prefix,
|
|
39
|
-
delta,
|
|
40
|
-
deltaType = "percentage",
|
|
41
|
-
sparklineData,
|
|
42
|
-
showTrend = true,
|
|
43
|
-
description,
|
|
44
|
-
loading = false,
|
|
45
|
-
disableAnimations = false,
|
|
46
|
-
onClick,
|
|
47
|
-
...props
|
|
48
|
-
}) {
|
|
49
|
-
const reducedMotion = prefersReducedMotion();
|
|
50
|
-
const shouldAnimate = !disableAnimations && !reducedMotion;
|
|
51
|
-
const calculatedDelta = delta !== void 0 ? delta : typeof value === "number" && previousValue !== void 0 ? deltaType === "percentage" ? (value - previousValue) / previousValue * 100 : value - previousValue : 0;
|
|
52
|
-
const deltaValue = Math.abs(calculatedDelta);
|
|
53
|
-
const deltaDirection = calculatedDelta > 0 ? "up" : calculatedDelta < 0 ? "down" : "neutral";
|
|
54
|
-
const DeltaIcon = deltaDirection === "up" ? TrendingUp : deltaDirection === "down" ? TrendingDown : Minus;
|
|
55
|
-
const deltaColor = deltaDirection === "up" ? "text-emerald-neon" : deltaDirection === "down" ? "text-destructive" : "text-muted-foreground";
|
|
56
|
-
const formattedValue = typeof value === "number" ? formatNumber(value) : value;
|
|
57
|
-
const generateSparklinePath = (data) => {
|
|
58
|
-
if (data.length < 2) return "";
|
|
59
|
-
const width = 60;
|
|
60
|
-
const height = 20;
|
|
61
|
-
const max = Math.max(...data);
|
|
62
|
-
const min = Math.min(...data);
|
|
63
|
-
const range = max - min || 1;
|
|
64
|
-
const points = data.map((point, index) => {
|
|
65
|
-
const x = index / (data.length - 1) * width;
|
|
66
|
-
const y = height - (point - min) / range * height;
|
|
67
|
-
return `${x},${y}`;
|
|
68
|
-
});
|
|
69
|
-
return `M ${points.join(" L ")}`;
|
|
70
|
-
};
|
|
71
|
-
return /* @__PURE__ */ jsxs(
|
|
72
|
-
motion.div,
|
|
73
|
-
{
|
|
74
|
-
className: cn(
|
|
75
|
-
kpiStatVariants({ variant, size }),
|
|
76
|
-
onClick && "cursor-pointer hover:shadow-lg",
|
|
77
|
-
className
|
|
78
|
-
),
|
|
79
|
-
onClick,
|
|
80
|
-
initial: shouldAnimate ? { opacity: 0, y: 20 } : {},
|
|
81
|
-
animate: { opacity: 1, y: 0 },
|
|
82
|
-
transition: { duration: 0.3 },
|
|
83
|
-
whileHover: shouldAnimate && onClick ? {
|
|
84
|
-
scale: 1.02,
|
|
85
|
-
transition: { duration: 0.2 }
|
|
86
|
-
} : {},
|
|
87
|
-
...props,
|
|
88
|
-
children: [
|
|
89
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between", children: [
|
|
90
|
-
/* @__PURE__ */ jsx(
|
|
91
|
-
motion.h3,
|
|
92
|
-
{
|
|
93
|
-
className: "text-sm font-medium text-muted-foreground leading-tight",
|
|
94
|
-
initial: shouldAnimate ? { opacity: 0, x: -10 } : {},
|
|
95
|
-
animate: { opacity: 1, x: 0 },
|
|
96
|
-
transition: { duration: 0.3, delay: 0.1 },
|
|
97
|
-
children: title
|
|
98
|
-
}
|
|
99
|
-
),
|
|
100
|
-
loading && /* @__PURE__ */ jsx(
|
|
101
|
-
motion.div,
|
|
102
|
-
{
|
|
103
|
-
initial: shouldAnimate ? { opacity: 0, scale: 0.8 } : {},
|
|
104
|
-
animate: { opacity: 1, scale: 1 },
|
|
105
|
-
transition: { duration: 0.2 },
|
|
106
|
-
children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "h-4 w-4 text-muted-foreground animate-pulse" })
|
|
107
|
-
}
|
|
108
|
-
)
|
|
109
|
-
] }),
|
|
110
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-end justify-between flex-1", children: [
|
|
111
|
-
/* @__PURE__ */ jsxs(
|
|
112
|
-
motion.div,
|
|
113
|
-
{
|
|
114
|
-
className: "space-y-1",
|
|
115
|
-
initial: shouldAnimate ? { opacity: 0, y: 10 } : {},
|
|
116
|
-
animate: { opacity: 1, y: 0 },
|
|
117
|
-
transition: { duration: 0.3, delay: 0.2 },
|
|
118
|
-
children: [
|
|
119
|
-
loading ? /* @__PURE__ */ jsx("div", { className: "h-8 w-24 bg-muted/20 rounded animate-pulse" }) : /* @__PURE__ */ jsxs("div", { className: "text-3xl font-bold text-foreground tabular-nums leading-none", children: [
|
|
120
|
-
prefix,
|
|
121
|
-
formattedValue,
|
|
122
|
-
suffix
|
|
123
|
-
] }),
|
|
124
|
-
description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-tight", children: description })
|
|
125
|
-
]
|
|
126
|
-
}
|
|
127
|
-
),
|
|
128
|
-
showTrend && deltaType !== "none" && !loading && (calculatedDelta !== 0 || delta !== void 0) && /* @__PURE__ */ jsxs(
|
|
129
|
-
motion.div,
|
|
130
|
-
{
|
|
131
|
-
className: cn("flex items-center gap-1 text-xs", deltaColor),
|
|
132
|
-
initial: shouldAnimate ? { opacity: 0, x: 10 } : {},
|
|
133
|
-
animate: { opacity: 1, x: 0 },
|
|
134
|
-
transition: { duration: 0.3, delay: 0.3 },
|
|
135
|
-
children: [
|
|
136
|
-
/* @__PURE__ */ jsx(DeltaIcon, { className: "h-3 w-3" }),
|
|
137
|
-
/* @__PURE__ */ jsx("span", { className: "font-medium tabular-nums", children: deltaType === "percentage" ? `${deltaValue.toFixed(1)}%` : formatNumber(deltaValue) })
|
|
138
|
-
]
|
|
139
|
-
}
|
|
140
|
-
)
|
|
141
|
-
] }),
|
|
142
|
-
sparklineData && sparklineData.length > 1 && !loading && /* @__PURE__ */ jsx(
|
|
143
|
-
motion.div,
|
|
144
|
-
{
|
|
145
|
-
className: "flex justify-end",
|
|
146
|
-
initial: shouldAnimate ? { opacity: 0, scaleX: 0 } : {},
|
|
147
|
-
animate: { opacity: 1, scaleX: 1 },
|
|
148
|
-
transition: { duration: 0.5, delay: 0.4 },
|
|
149
|
-
children: /* @__PURE__ */ jsxs("svg", { width: "60", height: "20", className: "text-cyan-neon/60", children: [
|
|
150
|
-
/* @__PURE__ */ jsx(
|
|
151
|
-
"path",
|
|
152
|
-
{
|
|
153
|
-
d: generateSparklinePath(sparklineData),
|
|
154
|
-
fill: "none",
|
|
155
|
-
stroke: "currentColor",
|
|
156
|
-
strokeWidth: "1.5",
|
|
157
|
-
strokeLinecap: "round",
|
|
158
|
-
strokeLinejoin: "round"
|
|
159
|
-
}
|
|
160
|
-
),
|
|
161
|
-
sparklineData.length > 0 && /* @__PURE__ */ jsx(
|
|
162
|
-
"circle",
|
|
163
|
-
{
|
|
164
|
-
cx: "60",
|
|
165
|
-
cy: 20 - (sparklineData[sparklineData.length - 1] - Math.min(...sparklineData)) / (Math.max(...sparklineData) - Math.min(...sparklineData) || 1) * 20,
|
|
166
|
-
r: "1.5",
|
|
167
|
-
fill: "currentColor"
|
|
168
|
-
}
|
|
169
|
-
)
|
|
170
|
-
] })
|
|
171
|
-
}
|
|
172
|
-
),
|
|
173
|
-
loading && shouldAnimate && /* @__PURE__ */ jsx(
|
|
174
|
-
motion.div,
|
|
175
|
-
{
|
|
176
|
-
className: "absolute inset-0 bg-gradient-to-r from-transparent via-foreground/5 to-transparent rounded-lg",
|
|
177
|
-
animate: {
|
|
178
|
-
x: [-100, 100]
|
|
179
|
-
},
|
|
180
|
-
transition: {
|
|
181
|
-
duration: 1.5,
|
|
182
|
-
repeat: Infinity,
|
|
183
|
-
ease: "easeInOut"
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
)
|
|
187
|
-
]
|
|
188
|
-
}
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
export { KPIStat };
|
|
193
|
-
//# sourceMappingURL=chunk-6RKBCJHN.js.map
|
|
194
|
-
//# sourceMappingURL=chunk-6RKBCJHN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/molecules/KPIStat/KPIStat.tsx"],"names":[],"mappings":"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","file":"chunk-6RKBCJHN.js","sourcesContent":["\"use client\";\n\nimport { cn, formatNumber, prefersReducedMotion } from \"../../../lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { motion } from \"framer-motion\";\nimport { Minus, MoreHorizontal, TrendingDown, TrendingUp } from \"lucide-react\";\nimport React from \"react\";\n\nconst kpiStatVariants = cva(\n \"relative min-h-[120px] flex flex-col justify-between p-4 rounded-xl border backdrop-blur-sm transition-all duration-200\",\n {\n variants: {\n variant: {\n default: \"bg-card/30 border-border/30\",\n success: \"bg-emerald-400/5 border-emerald-400/20\",\n warning: \"bg-yellow-500/5 border-yellow-500/20\",\n danger: \"bg-destructive/5 border-destructive/20\",\n accent: \"bg-cyan-400/5 border-cyan-400/20\",\n },\n size: {\n default: \"p-4\",\n compact: \"p-3 min-h-[100px]\",\n expanded: \"p-6 min-h-[140px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface KPIStatProps\n extends\n Omit<\n React.HTMLAttributes<HTMLDivElement>,\n | \"children\"\n | \"onDrag\"\n | \"onDragEnd\"\n | \"onDragEnter\"\n | \"onDragExit\"\n | \"onDragLeave\"\n | \"onDragOver\"\n | \"onDragStart\"\n | \"onDrop\"\n | \"onAnimationStart\"\n | \"onAnimationEnd\"\n | \"onAnimationIteration\"\n >,\n VariantProps<typeof kpiStatVariants> {\n /** KPI title/label */\n title: string;\n /** Current value */\n value: number | string;\n /** Previous value for delta calculation */\n previousValue?: number;\n /** Value suffix (%, XP, etc.) */\n suffix?: string;\n /** Value prefix */\n prefix?: string;\n /** Custom delta value (overrides calculation) */\n delta?: number;\n /** Delta display type */\n deltaType?: \"percentage\" | \"absolute\" | \"none\";\n /** Sparkline data points */\n sparklineData?: number[];\n /** Show trend indicator */\n showTrend?: boolean;\n /** Additional description */\n description?: string;\n /** Loading state */\n loading?: boolean;\n /** Disable animations */\n disableAnimations?: boolean;\n /** Click handler */\n onClick?: () => void;\n}\n\nexport function KPIStat({\n className,\n variant,\n size,\n title,\n value,\n previousValue,\n suffix,\n prefix,\n delta,\n deltaType = \"percentage\",\n sparklineData,\n showTrend = true,\n description,\n loading = false,\n disableAnimations = false,\n onClick,\n ...props\n}: KPIStatProps) {\n const reducedMotion = prefersReducedMotion();\n const shouldAnimate = !disableAnimations && !reducedMotion;\n\n // Calculate delta if not provided\n const calculatedDelta =\n delta !== undefined\n ? delta\n : typeof value === \"number\" && previousValue !== undefined\n ? deltaType === \"percentage\"\n ? ((value - previousValue) / previousValue) * 100\n : value - previousValue\n : 0;\n\n const deltaValue = Math.abs(calculatedDelta);\n const deltaDirection = calculatedDelta > 0 ? \"up\" : calculatedDelta < 0 ? \"down\" : \"neutral\";\n\n const DeltaIcon =\n deltaDirection === \"up\" ? TrendingUp : deltaDirection === \"down\" ? TrendingDown : Minus;\n\n const deltaColor =\n deltaDirection === \"up\"\n ? \"text-emerald-neon\"\n : deltaDirection === \"down\"\n ? \"text-destructive\"\n : \"text-muted-foreground\";\n\n // Format the main value\n const formattedValue = typeof value === \"number\" ? formatNumber(value) : value;\n\n // Generate simple sparkline path if data provided\n const generateSparklinePath = (data: number[]) => {\n if (data.length < 2) return \"\";\n\n const width = 60;\n const height = 20;\n const max = Math.max(...data);\n const min = Math.min(...data);\n const range = max - min || 1;\n\n const points = data.map((point, index) => {\n const x = (index / (data.length - 1)) * width;\n const y = height - ((point - min) / range) * height;\n return `${x},${y}`;\n });\n\n return `M ${points.join(\" L \")}`;\n };\n\n return (\n <motion.div\n className={cn(\n kpiStatVariants({ variant, size }),\n onClick && \"cursor-pointer hover:shadow-lg\",\n className\n )}\n onClick={onClick}\n initial={shouldAnimate ? { opacity: 0, y: 20 } : {}}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3 }}\n whileHover={\n shouldAnimate && onClick\n ? {\n scale: 1.02,\n transition: { duration: 0.2 },\n }\n : {}\n }\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-start justify-between\">\n <motion.h3\n className=\"text-sm font-medium text-muted-foreground leading-tight\"\n initial={shouldAnimate ? { opacity: 0, x: -10 } : {}}\n animate={{ opacity: 1, x: 0 }}\n transition={{ duration: 0.3, delay: 0.1 }}\n >\n {title}\n </motion.h3>\n\n {loading && (\n <motion.div\n initial={shouldAnimate ? { opacity: 0, scale: 0.8 } : {}}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.2 }}\n >\n <MoreHorizontal className=\"h-4 w-4 text-muted-foreground animate-pulse\" />\n </motion.div>\n )}\n </div>\n\n {/* Main value and delta */}\n <div className=\"flex items-end justify-between flex-1\">\n <motion.div\n className=\"space-y-1\"\n initial={shouldAnimate ? { opacity: 0, y: 10 } : {}}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3, delay: 0.2 }}\n >\n {loading ? (\n <div className=\"h-8 w-24 bg-muted/20 rounded animate-pulse\" />\n ) : (\n <div className=\"text-3xl font-bold text-foreground tabular-nums leading-none\">\n {prefix}\n {formattedValue}\n {suffix}\n </div>\n )}\n\n {description && (\n <p className=\"text-sm text-muted-foreground leading-tight\">{description}</p>\n )}\n </motion.div>\n\n {/* Delta indicator */}\n {showTrend &&\n deltaType !== \"none\" &&\n !loading &&\n (calculatedDelta !== 0 || delta !== undefined) && (\n <motion.div\n className={cn(\"flex items-center gap-1 text-xs\", deltaColor)}\n initial={shouldAnimate ? { opacity: 0, x: 10 } : {}}\n animate={{ opacity: 1, x: 0 }}\n transition={{ duration: 0.3, delay: 0.3 }}\n >\n <DeltaIcon className=\"h-3 w-3\" />\n <span className=\"font-medium tabular-nums\">\n {deltaType === \"percentage\"\n ? `${deltaValue.toFixed(1)}%`\n : formatNumber(deltaValue)}\n </span>\n </motion.div>\n )}\n </div>\n\n {/* Sparkline */}\n {sparklineData && sparklineData.length > 1 && !loading && (\n <motion.div\n className=\"flex justify-end\"\n initial={shouldAnimate ? { opacity: 0, scaleX: 0 } : {}}\n animate={{ opacity: 1, scaleX: 1 }}\n transition={{ duration: 0.5, delay: 0.4 }}\n >\n <svg width=\"60\" height=\"20\" className=\"text-cyan-neon/60\">\n <path\n d={generateSparklinePath(sparklineData)}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n {/* Highlight last point */}\n {sparklineData.length > 0 && (\n <circle\n cx=\"60\"\n cy={\n 20 -\n ((sparklineData[sparklineData.length - 1] - Math.min(...sparklineData)) /\n (Math.max(...sparklineData) - Math.min(...sparklineData) || 1)) *\n 20\n }\n r=\"1.5\"\n fill=\"currentColor\"\n />\n )}\n </svg>\n </motion.div>\n )}\n\n {/* Loading shimmer effect */}\n {loading && shouldAnimate && (\n <motion.div\n className=\"absolute inset-0 bg-gradient-to-r from-transparent via-foreground/5 to-transparent rounded-lg\"\n animate={{\n x: [-100, 100],\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n />\n )}\n </motion.div>\n );\n}\n"]}
|
package/dist/chunk-6RX2WGCO.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { useEffect } from 'react';
|
|
2
|
-
import { clsx } from 'clsx';
|
|
3
|
-
import { twMerge } from 'tailwind-merge';
|
|
4
|
-
|
|
5
|
-
// src/lib/useFocusTrap.ts
|
|
6
|
-
var FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
7
|
-
function useFocusTrap(ref, active) {
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
if (!active || !ref.current) return;
|
|
10
|
-
const element = ref.current;
|
|
11
|
-
function handleKeyDown(e) {
|
|
12
|
-
if (e.key !== "Tab") return;
|
|
13
|
-
const focusable = element.querySelectorAll(FOCUSABLE_SELECTOR);
|
|
14
|
-
if (focusable.length === 0) return;
|
|
15
|
-
const first = focusable[0];
|
|
16
|
-
const last = focusable[focusable.length - 1];
|
|
17
|
-
if (e.shiftKey && document.activeElement === first) {
|
|
18
|
-
e.preventDefault();
|
|
19
|
-
last.focus();
|
|
20
|
-
} else if (!e.shiftKey && document.activeElement === last) {
|
|
21
|
-
e.preventDefault();
|
|
22
|
-
first.focus();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
element.addEventListener("keydown", handleKeyDown);
|
|
26
|
-
const firstFocusable = element.querySelector(FOCUSABLE_SELECTOR);
|
|
27
|
-
firstFocusable?.focus();
|
|
28
|
-
return () => element.removeEventListener("keydown", handleKeyDown);
|
|
29
|
-
}, [active, ref]);
|
|
30
|
-
}
|
|
31
|
-
function cn(...inputs) {
|
|
32
|
-
return twMerge(clsx(inputs));
|
|
33
|
-
}
|
|
34
|
-
function glow(color = "cyan", intensity = "medium") {
|
|
35
|
-
const colorMap = {
|
|
36
|
-
cyan: "var(--cyan-neon)",
|
|
37
|
-
magenta: "var(--magenta-neon)",
|
|
38
|
-
emerald: "var(--emerald-neon)"
|
|
39
|
-
};
|
|
40
|
-
const intensityMap = {
|
|
41
|
-
low: "0 0 10px",
|
|
42
|
-
medium: "0 0 20px, 0 0 40px",
|
|
43
|
-
high: "0 0 20px, 0 0 40px, 0 0 80px"
|
|
44
|
-
};
|
|
45
|
-
const hslColor = `hsl(${colorMap[color]})`;
|
|
46
|
-
return `${intensityMap[intensity]} ${hslColor}`;
|
|
47
|
-
}
|
|
48
|
-
function hudGrad(progress = 0.75, colors) {
|
|
49
|
-
const defaultColors = {
|
|
50
|
-
start: "hsl(var(--cyan-neon))",
|
|
51
|
-
middle: "hsl(var(--magenta-neon))",
|
|
52
|
-
end: "hsl(var(--emerald-neon))"
|
|
53
|
-
};
|
|
54
|
-
const gradColors = { ...defaultColors, ...colors };
|
|
55
|
-
const progressDeg = progress * 360;
|
|
56
|
-
return `conic-gradient(from 0deg at 50% 50%, ${gradColors.start} 0deg, ${gradColors.middle} ${progressDeg / 2}deg, ${gradColors.end} ${progressDeg}deg, transparent ${progressDeg}deg, transparent 360deg)`;
|
|
57
|
-
}
|
|
58
|
-
function formatNumber(num) {
|
|
59
|
-
if (num >= 1e9) return (num / 1e9).toFixed(1) + "B";
|
|
60
|
-
if (num >= 1e6) return (num / 1e6).toFixed(1) + "M";
|
|
61
|
-
if (num >= 1e3) return (num / 1e3).toFixed(1) + "K";
|
|
62
|
-
return num.toString();
|
|
63
|
-
}
|
|
64
|
-
function animateNumber(from, to, duration = 1e3, onUpdate, easing = (t) => t * (2 - t)) {
|
|
65
|
-
const startTime = Date.now();
|
|
66
|
-
const delta = to - from;
|
|
67
|
-
const animate = () => {
|
|
68
|
-
const elapsed = Date.now() - startTime;
|
|
69
|
-
const progress = Math.min(elapsed / duration, 1);
|
|
70
|
-
const easedProgress = easing(progress);
|
|
71
|
-
const currentValue = from + delta * easedProgress;
|
|
72
|
-
onUpdate(Math.round(currentValue));
|
|
73
|
-
if (progress < 1) {
|
|
74
|
-
requestAnimationFrame(animate);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
requestAnimationFrame(animate);
|
|
78
|
-
}
|
|
79
|
-
function animateFloat(from, to, duration = 1e3, onUpdate, easing = (t) => t * (2 - t)) {
|
|
80
|
-
const startTime = Date.now();
|
|
81
|
-
const delta = to - from;
|
|
82
|
-
const animate = () => {
|
|
83
|
-
const elapsed = Date.now() - startTime;
|
|
84
|
-
const progress = Math.min(elapsed / duration, 1);
|
|
85
|
-
const easedProgress = easing(progress);
|
|
86
|
-
const currentValue = from + delta * easedProgress;
|
|
87
|
-
onUpdate(currentValue);
|
|
88
|
-
if (progress < 1) {
|
|
89
|
-
requestAnimationFrame(animate);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
requestAnimationFrame(animate);
|
|
93
|
-
}
|
|
94
|
-
function debounce(func, wait) {
|
|
95
|
-
let timeout;
|
|
96
|
-
return (...args) => {
|
|
97
|
-
clearTimeout(timeout);
|
|
98
|
-
timeout = setTimeout(() => func(...args), wait);
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function prefersReducedMotion() {
|
|
102
|
-
if (typeof window === "undefined") return false;
|
|
103
|
-
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
export { animateFloat, animateNumber, cn, debounce, formatNumber, glow, hudGrad, prefersReducedMotion, useFocusTrap };
|
|
107
|
-
//# sourceMappingURL=chunk-6RX2WGCO.js.map
|
|
108
|
-
//# sourceMappingURL=chunk-6RX2WGCO.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/useFocusTrap.ts","../src/lib/utils.ts"],"names":[],"mappings":"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","file":"chunk-6RX2WGCO.js","sourcesContent":["\"use client\";\n\nimport { useEffect, type RefObject } from \"react\";\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Traps keyboard focus within a container element while active.\n * When the user tabs past the last focusable element, focus wraps to the first,\n * and vice versa with Shift+Tab.\n *\n * @param ref - Ref to the container element\n * @param active - Whether the trap is active\n */\nexport function useFocusTrap(ref: RefObject<HTMLElement | null>, active: boolean) {\n useEffect(() => {\n if (!active || !ref.current) return;\n const element = ref.current;\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== \"Tab\") return;\n const focusable = element.querySelectorAll(FOCUSABLE_SELECTOR);\n if (focusable.length === 0) return;\n const first = focusable[0] as HTMLElement;\n const last = focusable[focusable.length - 1] as HTMLElement;\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n\n element.addEventListener(\"keydown\", handleKeyDown);\n // Focus first focusable element on activation\n const firstFocusable = element.querySelector(FOCUSABLE_SELECTOR) as HTMLElement;\n firstFocusable?.focus();\n\n return () => element.removeEventListener(\"keydown\", handleKeyDown);\n }, [active, ref]);\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Generate neon glow shadow styles\n */\nexport function glow(\n color: \"cyan\" | \"magenta\" | \"emerald\" = \"cyan\",\n intensity: \"low\" | \"medium\" | \"high\" = \"medium\"\n) {\n const colorMap = {\n cyan: \"var(--cyan-neon)\",\n magenta: \"var(--magenta-neon)\",\n emerald: \"var(--emerald-neon)\",\n };\n\n const intensityMap = {\n low: \"0 0 10px\",\n medium: \"0 0 20px, 0 0 40px\",\n high: \"0 0 20px, 0 0 40px, 0 0 80px\",\n };\n\n const hslColor = `hsl(${colorMap[color]})`;\n return `${intensityMap[intensity]} ${hslColor}`;\n}\n\n/**\n * Generate HUD-style conic gradient for progress rings\n */\nexport function hudGrad(\n progress: number = 0.75,\n colors?: { start?: string; middle?: string; end?: string }\n) {\n const defaultColors = {\n start: \"hsl(var(--cyan-neon))\",\n middle: \"hsl(var(--magenta-neon))\",\n end: \"hsl(var(--emerald-neon))\",\n };\n\n const gradColors = { ...defaultColors, ...colors };\n const progressDeg = progress * 360;\n\n return `conic-gradient(from 0deg at 50% 50%, ${gradColors.start} 0deg, ${\n gradColors.middle\n } ${progressDeg / 2}deg, ${\n gradColors.end\n } ${progressDeg}deg, transparent ${progressDeg}deg, transparent 360deg)`;\n}\n\n/**\n * Format numbers with appropriate suffixes (K, M, B)\n */\nexport function formatNumber(num: number): string {\n if (num >= 1e9) return (num / 1e9).toFixed(1) + \"B\";\n if (num >= 1e6) return (num / 1e6).toFixed(1) + \"M\";\n if (num >= 1e3) return (num / 1e3).toFixed(1) + \"K\";\n return num.toString();\n}\n\n/**\n * Animate number changes with a spring-like effect\n */\nexport function animateNumber(\n from: number,\n to: number,\n duration: number = 1000,\n onUpdate: (value: number) => void,\n easing: (t: number) => number = (t) => t * (2 - t) // ease-out quad\n) {\n const startTime = Date.now();\n const delta = to - from;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentValue = from + delta * easedProgress;\n\n onUpdate(Math.round(currentValue));\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n}\n\n/**\n * Animate float changes without rounding (for smooth SVG/progress animations)\n */\nexport function animateFloat(\n from: number,\n to: number,\n duration: number = 1000,\n onUpdate: (value: number) => void,\n easing: (t: number) => number = (t) => t * (2 - t)\n) {\n const startTime = Date.now();\n const delta = to - from;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easedProgress = easing(progress);\n const currentValue = from + delta * easedProgress;\n\n onUpdate(currentValue);\n\n if (progress < 1) {\n requestAnimationFrame(animate);\n }\n };\n\n requestAnimationFrame(animate);\n}\n\n/**\n * Debounce function for search/input handling\n */\nexport function debounce<T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n}\n\n/**\n * Check if user prefers reduced motion\n */\nexport function prefersReducedMotion(): boolean {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n// Accessibility\nexport { prefersReducedTransparency, usePrefersReducedTransparency, usePrefersReducedMotion, usePrefersColorScheme, usePrefersHighContrast } from './accessibility';\nexport { useFocusTrap } from './useFocusTrap';\n"]}
|