@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-EPAM7IWW.js
DELETED
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
import { useSync, useAgentRun, usePlaySession } from './chunk-YIUG7IJK.js';
|
|
2
|
-
import { useBBContext } from './chunk-Q2XDMV7U.js';
|
|
3
|
-
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
4
|
-
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
5
|
-
|
|
6
|
-
function SyncDocument({
|
|
7
|
-
documentId,
|
|
8
|
-
endpoint,
|
|
9
|
-
debounce = 1e3,
|
|
10
|
-
initialContent,
|
|
11
|
-
onConflict,
|
|
12
|
-
onError,
|
|
13
|
-
onSave,
|
|
14
|
-
children,
|
|
15
|
-
fetcher,
|
|
16
|
-
saver
|
|
17
|
-
}) {
|
|
18
|
-
const fullEndpoint = `${endpoint}/${documentId}`;
|
|
19
|
-
const {
|
|
20
|
-
data,
|
|
21
|
-
setData,
|
|
22
|
-
status,
|
|
23
|
-
pendingChanges,
|
|
24
|
-
lastSyncedAt,
|
|
25
|
-
conflict,
|
|
26
|
-
resolveConflict,
|
|
27
|
-
forceSave,
|
|
28
|
-
refresh,
|
|
29
|
-
isLoaded
|
|
30
|
-
} = useSync({
|
|
31
|
-
key: `sync-doc:${documentId}`,
|
|
32
|
-
endpoint: fullEndpoint,
|
|
33
|
-
debounce,
|
|
34
|
-
initialData: initialContent,
|
|
35
|
-
fetcher,
|
|
36
|
-
saver,
|
|
37
|
-
onConflict: onConflict ? (c) => {
|
|
38
|
-
} : void 0,
|
|
39
|
-
onError,
|
|
40
|
-
onSync: onSave
|
|
41
|
-
});
|
|
42
|
-
const conflictUI = conflict && onConflict ? onConflict(conflict.local, conflict.remote, resolveConflict) : null;
|
|
43
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
44
|
-
conflictUI,
|
|
45
|
-
children({
|
|
46
|
-
content: data,
|
|
47
|
-
setContent: setData,
|
|
48
|
-
status,
|
|
49
|
-
lastSaved: lastSyncedAt,
|
|
50
|
-
pendingChanges,
|
|
51
|
-
save: forceSave,
|
|
52
|
-
refresh,
|
|
53
|
-
isLoaded
|
|
54
|
-
})
|
|
55
|
-
] });
|
|
56
|
-
}
|
|
57
|
-
function AgentPanel({
|
|
58
|
-
context,
|
|
59
|
-
quickPrompts = [],
|
|
60
|
-
onRunStart,
|
|
61
|
-
onRunComplete,
|
|
62
|
-
onRunError,
|
|
63
|
-
showCosts = true,
|
|
64
|
-
showHistory = true,
|
|
65
|
-
maxHistory = 10,
|
|
66
|
-
placeholder = "Enter a prompt...",
|
|
67
|
-
className,
|
|
68
|
-
agentFilter,
|
|
69
|
-
defaultAgent
|
|
70
|
-
}) {
|
|
71
|
-
const { agents, runHistory, totalCost: globalTotalCost } = useBBContext();
|
|
72
|
-
const availableAgents = agentFilter ? agents.filter(agentFilter) : agents;
|
|
73
|
-
const [selectedAgentId, setSelectedAgentId] = useState(
|
|
74
|
-
defaultAgent ?? availableAgents[0]?.id ?? null
|
|
75
|
-
);
|
|
76
|
-
const [prompt, setPrompt] = useState("");
|
|
77
|
-
const selectedAgent = availableAgents.find((a) => a.id === selectedAgentId) ?? null;
|
|
78
|
-
const {
|
|
79
|
-
run: currentRun,
|
|
80
|
-
status,
|
|
81
|
-
isRunning,
|
|
82
|
-
start
|
|
83
|
-
} = useAgentRun({
|
|
84
|
-
onStart: onRunStart,
|
|
85
|
-
onComplete: onRunComplete,
|
|
86
|
-
onError: onRunError
|
|
87
|
-
});
|
|
88
|
-
const panelHistory = runHistory.filter((run) => availableAgents.some((a) => a.id === run.agentId)).slice(0, maxHistory);
|
|
89
|
-
const panelTotalCost = panelHistory.reduce((sum, run) => sum + (run.cost ?? 0), 0);
|
|
90
|
-
const estimatedCost = selectedAgent?.costPerRun ?? null;
|
|
91
|
-
const handleSubmit = useCallback(
|
|
92
|
-
(e) => {
|
|
93
|
-
e?.preventDefault();
|
|
94
|
-
if (!selectedAgentId || !prompt.trim() || isRunning) return;
|
|
95
|
-
start(selectedAgentId, prompt, context);
|
|
96
|
-
setPrompt("");
|
|
97
|
-
},
|
|
98
|
-
[selectedAgentId, prompt, isRunning, start, context]
|
|
99
|
-
);
|
|
100
|
-
const executeQuickPrompt = useCallback(
|
|
101
|
-
(qp) => {
|
|
102
|
-
if (!selectedAgentId || isRunning) return;
|
|
103
|
-
start(selectedAgentId, qp.prompt, context);
|
|
104
|
-
},
|
|
105
|
-
[selectedAgentId, isRunning, start, context]
|
|
106
|
-
);
|
|
107
|
-
const selectAgent = useCallback((agentId) => {
|
|
108
|
-
setSelectedAgentId(agentId);
|
|
109
|
-
}, []);
|
|
110
|
-
return /* @__PURE__ */ jsxs("div", { className: `bb-agent-panel ${className ?? ""}`, "data-bb-state": status, children: [
|
|
111
|
-
/* @__PURE__ */ jsx("div", { className: "bb-agent-panel__agents", children: availableAgents.map((agent) => /* @__PURE__ */ jsxs(
|
|
112
|
-
"button",
|
|
113
|
-
{
|
|
114
|
-
type: "button",
|
|
115
|
-
className: `bb-agent-panel__agent ${agent.id === selectedAgentId ? "bb-agent-panel__agent--selected" : ""}`,
|
|
116
|
-
onClick: () => selectAgent(agent.id),
|
|
117
|
-
disabled: isRunning,
|
|
118
|
-
"data-bb-agent-id": agent.id,
|
|
119
|
-
children: [
|
|
120
|
-
/* @__PURE__ */ jsx("span", { className: "bb-agent-panel__agent-name", children: agent.name }),
|
|
121
|
-
showCosts && agent.costPerRun !== void 0 && /* @__PURE__ */ jsxs("span", { className: "bb-agent-panel__agent-cost", children: [
|
|
122
|
-
"$",
|
|
123
|
-
agent.costPerRun.toFixed(3)
|
|
124
|
-
] })
|
|
125
|
-
]
|
|
126
|
-
},
|
|
127
|
-
agent.id
|
|
128
|
-
)) }),
|
|
129
|
-
quickPrompts.length > 0 && /* @__PURE__ */ jsx("div", { className: "bb-agent-panel__quick-prompts", children: quickPrompts.map((qp, idx) => /* @__PURE__ */ jsxs(
|
|
130
|
-
"button",
|
|
131
|
-
{
|
|
132
|
-
type: "button",
|
|
133
|
-
className: "bb-agent-panel__quick-prompt",
|
|
134
|
-
onClick: () => executeQuickPrompt(qp),
|
|
135
|
-
disabled: isRunning || !selectedAgentId,
|
|
136
|
-
children: [
|
|
137
|
-
qp.icon && /* @__PURE__ */ jsx("span", { className: "bb-agent-panel__quick-prompt-icon", children: qp.icon }),
|
|
138
|
-
/* @__PURE__ */ jsx("span", { className: "bb-agent-panel__quick-prompt-label", children: qp.label })
|
|
139
|
-
]
|
|
140
|
-
},
|
|
141
|
-
idx
|
|
142
|
-
)) }),
|
|
143
|
-
/* @__PURE__ */ jsxs("form", { className: "bb-agent-panel__form", onSubmit: handleSubmit, children: [
|
|
144
|
-
/* @__PURE__ */ jsx(
|
|
145
|
-
"textarea",
|
|
146
|
-
{
|
|
147
|
-
className: "bb-agent-panel__input",
|
|
148
|
-
value: prompt,
|
|
149
|
-
onChange: (e) => setPrompt(e.target.value),
|
|
150
|
-
placeholder,
|
|
151
|
-
disabled: isRunning || !selectedAgentId,
|
|
152
|
-
rows: 3,
|
|
153
|
-
"data-bb-input": "agent-prompt"
|
|
154
|
-
}
|
|
155
|
-
),
|
|
156
|
-
/* @__PURE__ */ jsxs("div", { className: "bb-agent-panel__form-footer", children: [
|
|
157
|
-
showCosts && estimatedCost !== null && /* @__PURE__ */ jsxs("span", { className: "bb-agent-panel__estimate", children: [
|
|
158
|
-
"Est. $",
|
|
159
|
-
estimatedCost.toFixed(3)
|
|
160
|
-
] }),
|
|
161
|
-
/* @__PURE__ */ jsx(
|
|
162
|
-
"button",
|
|
163
|
-
{
|
|
164
|
-
type: "submit",
|
|
165
|
-
className: "bb-agent-panel__submit",
|
|
166
|
-
disabled: isRunning || !selectedAgentId || !prompt.trim(),
|
|
167
|
-
"data-bb-action": "submit-prompt",
|
|
168
|
-
children: isRunning ? "Running..." : "Run"
|
|
169
|
-
}
|
|
170
|
-
)
|
|
171
|
-
] })
|
|
172
|
-
] }),
|
|
173
|
-
currentRun && /* @__PURE__ */ jsxs(
|
|
174
|
-
"div",
|
|
175
|
-
{
|
|
176
|
-
className: `bb-agent-panel__status bb-agent-panel__status--${currentRun.status}`,
|
|
177
|
-
"data-bb-state": currentRun.status,
|
|
178
|
-
children: [
|
|
179
|
-
/* @__PURE__ */ jsxs("span", { className: "bb-agent-panel__status-label", children: [
|
|
180
|
-
currentRun.status === "running" && "Running...",
|
|
181
|
-
currentRun.status === "completed" && "Completed",
|
|
182
|
-
currentRun.status === "failed" && "Failed",
|
|
183
|
-
currentRun.status === "cancelled" && "Cancelled"
|
|
184
|
-
] }),
|
|
185
|
-
currentRun.status === "completed" && currentRun.output && /* @__PURE__ */ jsx("div", { className: "bb-agent-panel__output", "data-bb-output": "agent-output", children: currentRun.output }),
|
|
186
|
-
currentRun.status === "failed" && currentRun.error && /* @__PURE__ */ jsx("div", { className: "bb-agent-panel__error", children: currentRun.error })
|
|
187
|
-
]
|
|
188
|
-
}
|
|
189
|
-
),
|
|
190
|
-
showHistory && panelHistory.length > 0 && /* @__PURE__ */ jsxs("div", { className: "bb-agent-panel__history", children: [
|
|
191
|
-
/* @__PURE__ */ jsx("h4", { className: "bb-agent-panel__history-title", children: "Recent Runs" }),
|
|
192
|
-
/* @__PURE__ */ jsx("ul", { className: "bb-agent-panel__history-list", children: panelHistory.map((run) => /* @__PURE__ */ jsxs(
|
|
193
|
-
"li",
|
|
194
|
-
{
|
|
195
|
-
className: `bb-agent-panel__history-item bb-agent-panel__history-item--${run.status}`,
|
|
196
|
-
"data-bb-entity": "run",
|
|
197
|
-
"data-bb-entity-id": run.id,
|
|
198
|
-
children: [
|
|
199
|
-
/* @__PURE__ */ jsx("span", { className: "bb-agent-panel__history-agent", "data-bb-field": "agent", children: availableAgents.find((a) => a.id === run.agentId)?.name ?? run.agentId }),
|
|
200
|
-
/* @__PURE__ */ jsxs("span", { className: "bb-agent-panel__history-prompt", "data-bb-field": "prompt", children: [
|
|
201
|
-
run.prompt.slice(0, 50),
|
|
202
|
-
run.prompt.length > 50 && "..."
|
|
203
|
-
] }),
|
|
204
|
-
showCosts && run.cost !== void 0 && /* @__PURE__ */ jsxs("span", { className: "bb-agent-panel__history-cost", "data-bb-field": "cost", children: [
|
|
205
|
-
"$",
|
|
206
|
-
run.cost.toFixed(3)
|
|
207
|
-
] })
|
|
208
|
-
]
|
|
209
|
-
},
|
|
210
|
-
run.id
|
|
211
|
-
)) })
|
|
212
|
-
] }),
|
|
213
|
-
showCosts && /* @__PURE__ */ jsxs("div", { className: "bb-agent-panel__cost-summary", children: [
|
|
214
|
-
/* @__PURE__ */ jsx("span", { className: "bb-agent-panel__cost-label", children: "Session Total:" }),
|
|
215
|
-
/* @__PURE__ */ jsxs("span", { className: "bb-agent-panel__cost-value", "data-bb-field": "total-cost", children: [
|
|
216
|
-
"$",
|
|
217
|
-
panelTotalCost.toFixed(3)
|
|
218
|
-
] })
|
|
219
|
-
] })
|
|
220
|
-
] });
|
|
221
|
-
}
|
|
222
|
-
function PlaySession({
|
|
223
|
-
adapter,
|
|
224
|
-
autoConnect = false,
|
|
225
|
-
timeout,
|
|
226
|
-
onSessionStart,
|
|
227
|
-
onSessionEnd,
|
|
228
|
-
onRpcResult,
|
|
229
|
-
onError,
|
|
230
|
-
children,
|
|
231
|
-
className
|
|
232
|
-
}) {
|
|
233
|
-
const videoRef = useRef(null);
|
|
234
|
-
const {
|
|
235
|
-
session,
|
|
236
|
-
status,
|
|
237
|
-
videoTrack,
|
|
238
|
-
audioTrack,
|
|
239
|
-
call,
|
|
240
|
-
observe,
|
|
241
|
-
act,
|
|
242
|
-
connect,
|
|
243
|
-
disconnect,
|
|
244
|
-
isConnected,
|
|
245
|
-
error
|
|
246
|
-
} = usePlaySession({
|
|
247
|
-
adapter,
|
|
248
|
-
autoConnect,
|
|
249
|
-
timeout,
|
|
250
|
-
onConnect: onSessionStart,
|
|
251
|
-
onDisconnect: onSessionEnd,
|
|
252
|
-
onRpcResult,
|
|
253
|
-
onError
|
|
254
|
-
});
|
|
255
|
-
useEffect(() => {
|
|
256
|
-
if (videoRef.current && videoTrack) {
|
|
257
|
-
const stream = new MediaStream([videoTrack]);
|
|
258
|
-
videoRef.current.srcObject = stream;
|
|
259
|
-
}
|
|
260
|
-
}, [videoTrack]);
|
|
261
|
-
useEffect(() => {
|
|
262
|
-
if (videoRef.current && audioTrack) {
|
|
263
|
-
const currentStream = videoRef.current.srcObject;
|
|
264
|
-
if (currentStream) {
|
|
265
|
-
currentStream.addTrack(audioTrack);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}, [audioTrack]);
|
|
269
|
-
return /* @__PURE__ */ jsx(
|
|
270
|
-
"div",
|
|
271
|
-
{
|
|
272
|
-
className: `bb-play-session ${className ?? ""}`,
|
|
273
|
-
"data-bb-state": status,
|
|
274
|
-
"data-bb-adapter": adapter,
|
|
275
|
-
"data-bb-session-id": session?.id,
|
|
276
|
-
children: children({
|
|
277
|
-
session,
|
|
278
|
-
status,
|
|
279
|
-
call,
|
|
280
|
-
observe,
|
|
281
|
-
act,
|
|
282
|
-
connect,
|
|
283
|
-
disconnect,
|
|
284
|
-
videoRef,
|
|
285
|
-
isConnected,
|
|
286
|
-
error
|
|
287
|
-
})
|
|
288
|
-
}
|
|
289
|
-
);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
export { AgentPanel, PlaySession, SyncDocument };
|
|
293
|
-
//# sourceMappingURL=chunk-EPAM7IWW.js.map
|
|
294
|
-
//# sourceMappingURL=chunk-EPAM7IWW.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/SyncDocument.tsx","../src/components/AgentPanel.tsx","../src/components/PlaySession.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"chunk-EPAM7IWW.js","sourcesContent":["/**\n * SyncDocument - Wrapper for documents that need offline-first sync\n *\n * Provides render props for content, setContent, status, and lastSaved.\n * Handles conflict resolution UI delegation.\n */\n\nimport type { ReactNode, ReactElement } from 'react';\nimport { useSync, type UseSyncOptions } from '../hooks/useSync.js';\nimport type { SyncStatus, SyncConflict, ConflictResolution } from '../protocol/types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface SyncDocumentRenderProps<T> {\n /** Current document content */\n content: T | null;\n\n /** Update document content */\n setContent: (data: T | ((prev: T | null) => T)) => void;\n\n /** Current sync status */\n status: SyncStatus;\n\n /** Timestamp of last successful sync */\n lastSaved: number | null;\n\n /** Number of pending changes */\n pendingChanges: number;\n\n /** Force immediate save */\n save: () => Promise<void>;\n\n /** Refresh from server */\n refresh: () => Promise<void>;\n\n /** Whether initial load is complete */\n isLoaded: boolean;\n}\n\nexport interface SyncDocumentProps<T> {\n /** Unique document identifier */\n documentId: string;\n\n /** API endpoint (documentId will be appended) */\n endpoint: string;\n\n /** Debounce time in ms (default: 1000) */\n debounce?: number;\n\n /** Initial content */\n initialContent?: T;\n\n /** Conflict resolution UI renderer */\n onConflict?: (\n local: T,\n remote: T,\n resolve: (resolution: ConflictResolution) => void\n ) => ReactNode;\n\n /** Called on sync error */\n onError?: (error: Error) => void;\n\n /** Called on successful sync */\n onSave?: (content: T) => void;\n\n /** Render function for document UI */\n children: (props: SyncDocumentRenderProps<T>) => ReactElement;\n\n /** Custom fetch function */\n fetcher?: (endpoint: string) => Promise<T>;\n\n /** Custom save function */\n saver?: (endpoint: string, data: T) => Promise<T>;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function SyncDocument<T>({\n documentId,\n endpoint,\n debounce = 1000,\n initialContent,\n onConflict,\n onError,\n onSave,\n children,\n fetcher,\n saver,\n}: SyncDocumentProps<T>): ReactElement {\n const fullEndpoint = `${endpoint}/${documentId}`;\n\n const {\n data,\n setData,\n status,\n pendingChanges,\n lastSyncedAt,\n conflict,\n resolveConflict,\n forceSave,\n refresh,\n isLoaded,\n } = useSync<T>({\n key: `sync-doc:${documentId}`,\n endpoint: fullEndpoint,\n debounce,\n initialData: initialContent,\n fetcher,\n saver,\n onConflict: onConflict\n ? (c: SyncConflict<T>) => {\n // Conflict will be rendered in the component\n }\n : undefined,\n onError,\n onSync: onSave,\n });\n\n // Render conflict UI if provided and conflict exists\n const conflictUI =\n conflict && onConflict\n ? onConflict(conflict.local, conflict.remote, resolveConflict)\n : null;\n\n return (\n <>\n {conflictUI}\n {children({\n content: data,\n setContent: setData,\n status,\n lastSaved: lastSyncedAt,\n pendingChanges,\n save: forceSave,\n refresh,\n isLoaded,\n })}\n </>\n );\n}\n","/**\n * AgentPanel - Pre-built panel for selecting and invoking agents\n *\n * Provides quick prompts, agent selection, run history, and cost tracking.\n */\n\nimport { useState, useCallback, type ReactElement, type FormEvent } from 'react';\nimport { useBBContext } from './BBProvider.js';\nimport { useAgentRun } from '../hooks/useAgentRun.js';\nimport type { AgentRun, Agent } from '../protocol/types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface QuickPrompt {\n /** Display label */\n label: string;\n\n /** Prompt text to send */\n prompt: string;\n\n /** Optional icon (component or string) */\n icon?: ReactElement | string;\n}\n\nexport interface AgentPanelProps {\n /** Context data to include with every run */\n context?: Record<string, unknown>;\n\n /** Quick prompt buttons */\n quickPrompts?: QuickPrompt[];\n\n /** Called when a run starts */\n onRunStart?: (run: AgentRun) => void;\n\n /** Called when a run completes */\n onRunComplete?: (run: AgentRun) => void;\n\n /** Called when a run fails */\n onRunError?: (run: AgentRun, error: Error) => void;\n\n /** Show cost estimates and tracking */\n showCosts?: boolean;\n\n /** Show run history */\n showHistory?: boolean;\n\n /** Maximum history items to show */\n maxHistory?: number;\n\n /** Placeholder text for prompt input */\n placeholder?: string;\n\n /** Custom class name for the panel */\n className?: string;\n\n /** Custom agent filter (return true to include) */\n agentFilter?: (agent: Agent) => boolean;\n\n /** Default selected agent ID */\n defaultAgent?: string;\n}\n\nexport interface AgentPanelRenderProps {\n /** All available agents */\n agents: Agent[];\n\n /** Currently selected agent */\n selectedAgent: Agent | null;\n\n /** Select an agent */\n selectAgent: (agentId: string) => void;\n\n /** Current prompt text */\n prompt: string;\n\n /** Update prompt text */\n setPrompt: (text: string) => void;\n\n /** Submit the current prompt */\n submit: () => void;\n\n /** Whether a run is in progress */\n isRunning: boolean;\n\n /** Current run (if any) */\n currentRun: AgentRun | null;\n\n /** Run history */\n history: AgentRun[];\n\n /** Total cost of all runs */\n totalCost: number;\n\n /** Estimated cost of current prompt */\n estimatedCost: number | null;\n\n /** Quick prompts */\n quickPrompts: QuickPrompt[];\n\n /** Execute a quick prompt */\n executeQuickPrompt: (quickPrompt: QuickPrompt) => void;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function AgentPanel({\n context,\n quickPrompts = [],\n onRunStart,\n onRunComplete,\n onRunError,\n showCosts = true,\n showHistory = true,\n maxHistory = 10,\n placeholder = 'Enter a prompt...',\n className,\n agentFilter,\n defaultAgent,\n}: AgentPanelProps): ReactElement {\n const { agents, runHistory, totalCost: globalTotalCost } = useBBContext();\n\n // Filter agents\n const availableAgents = agentFilter ? agents.filter(agentFilter) : agents;\n\n // State\n const [selectedAgentId, setSelectedAgentId] = useState<string | null>(\n defaultAgent ?? availableAgents[0]?.id ?? null\n );\n const [prompt, setPrompt] = useState('');\n\n // Get selected agent\n const selectedAgent = availableAgents.find((a) => a.id === selectedAgentId) ?? null;\n\n // Use agent run hook\n const {\n run: currentRun,\n status,\n isRunning,\n start,\n } = useAgentRun({\n onStart: onRunStart,\n onComplete: onRunComplete,\n onError: onRunError,\n });\n\n // Filter history for this panel's agents\n const panelHistory = runHistory\n .filter((run) => availableAgents.some((a) => a.id === run.agentId))\n .slice(0, maxHistory);\n\n // Calculate total cost for this panel's agents\n const panelTotalCost = panelHistory.reduce((sum, run) => sum + (run.cost ?? 0), 0);\n\n // Estimated cost for current prompt\n const estimatedCost = selectedAgent?.costPerRun ?? null;\n\n // Submit handler\n const handleSubmit = useCallback(\n (e?: FormEvent) => {\n e?.preventDefault();\n if (!selectedAgentId || !prompt.trim() || isRunning) return;\n start(selectedAgentId, prompt, context);\n setPrompt('');\n },\n [selectedAgentId, prompt, isRunning, start, context]\n );\n\n // Quick prompt handler\n const executeQuickPrompt = useCallback(\n (qp: QuickPrompt) => {\n if (!selectedAgentId || isRunning) return;\n start(selectedAgentId, qp.prompt, context);\n },\n [selectedAgentId, isRunning, start, context]\n );\n\n // Select agent handler\n const selectAgent = useCallback((agentId: string) => {\n setSelectedAgentId(agentId);\n }, []);\n\n return (\n <div className={`bb-agent-panel ${className ?? ''}`} data-bb-state={status}>\n {/* Agent Selector */}\n <div className=\"bb-agent-panel__agents\">\n {availableAgents.map((agent) => (\n <button\n key={agent.id}\n type=\"button\"\n className={`bb-agent-panel__agent ${\n agent.id === selectedAgentId ? 'bb-agent-panel__agent--selected' : ''\n }`}\n onClick={() => selectAgent(agent.id)}\n disabled={isRunning}\n data-bb-agent-id={agent.id}\n >\n <span className=\"bb-agent-panel__agent-name\">{agent.name}</span>\n {showCosts && agent.costPerRun !== undefined && (\n <span className=\"bb-agent-panel__agent-cost\">\n ${agent.costPerRun.toFixed(3)}\n </span>\n )}\n </button>\n ))}\n </div>\n\n {/* Quick Prompts */}\n {quickPrompts.length > 0 && (\n <div className=\"bb-agent-panel__quick-prompts\">\n {quickPrompts.map((qp, idx) => (\n <button\n key={idx}\n type=\"button\"\n className=\"bb-agent-panel__quick-prompt\"\n onClick={() => executeQuickPrompt(qp)}\n disabled={isRunning || !selectedAgentId}\n >\n {qp.icon && <span className=\"bb-agent-panel__quick-prompt-icon\">{qp.icon}</span>}\n <span className=\"bb-agent-panel__quick-prompt-label\">{qp.label}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Prompt Input */}\n <form className=\"bb-agent-panel__form\" onSubmit={handleSubmit}>\n <textarea\n className=\"bb-agent-panel__input\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder={placeholder}\n disabled={isRunning || !selectedAgentId}\n rows={3}\n data-bb-input=\"agent-prompt\"\n />\n <div className=\"bb-agent-panel__form-footer\">\n {showCosts && estimatedCost !== null && (\n <span className=\"bb-agent-panel__estimate\">\n Est. ${estimatedCost.toFixed(3)}\n </span>\n )}\n <button\n type=\"submit\"\n className=\"bb-agent-panel__submit\"\n disabled={isRunning || !selectedAgentId || !prompt.trim()}\n data-bb-action=\"submit-prompt\"\n >\n {isRunning ? 'Running...' : 'Run'}\n </button>\n </div>\n </form>\n\n {/* Current Run Status */}\n {currentRun && (\n <div\n className={`bb-agent-panel__status bb-agent-panel__status--${currentRun.status}`}\n data-bb-state={currentRun.status}\n >\n <span className=\"bb-agent-panel__status-label\">\n {currentRun.status === 'running' && 'Running...'}\n {currentRun.status === 'completed' && 'Completed'}\n {currentRun.status === 'failed' && 'Failed'}\n {currentRun.status === 'cancelled' && 'Cancelled'}\n </span>\n {currentRun.status === 'completed' && currentRun.output && (\n <div className=\"bb-agent-panel__output\" data-bb-output=\"agent-output\">\n {currentRun.output}\n </div>\n )}\n {currentRun.status === 'failed' && currentRun.error && (\n <div className=\"bb-agent-panel__error\">{currentRun.error}</div>\n )}\n </div>\n )}\n\n {/* Run History */}\n {showHistory && panelHistory.length > 0 && (\n <div className=\"bb-agent-panel__history\">\n <h4 className=\"bb-agent-panel__history-title\">Recent Runs</h4>\n <ul className=\"bb-agent-panel__history-list\">\n {panelHistory.map((run) => (\n <li\n key={run.id}\n className={`bb-agent-panel__history-item bb-agent-panel__history-item--${run.status}`}\n data-bb-entity=\"run\"\n data-bb-entity-id={run.id}\n >\n <span className=\"bb-agent-panel__history-agent\" data-bb-field=\"agent\">\n {availableAgents.find((a) => a.id === run.agentId)?.name ?? run.agentId}\n </span>\n <span className=\"bb-agent-panel__history-prompt\" data-bb-field=\"prompt\">\n {run.prompt.slice(0, 50)}\n {run.prompt.length > 50 && '...'}\n </span>\n {showCosts && run.cost !== undefined && (\n <span className=\"bb-agent-panel__history-cost\" data-bb-field=\"cost\">\n ${run.cost.toFixed(3)}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Cost Summary */}\n {showCosts && (\n <div className=\"bb-agent-panel__cost-summary\">\n <span className=\"bb-agent-panel__cost-label\">Session Total:</span>\n <span className=\"bb-agent-panel__cost-value\" data-bb-field=\"total-cost\">\n ${panelTotalCost.toFixed(3)}\n </span>\n </div>\n )}\n </div>\n );\n}\n","/**\n * PlaySession - Component for managing play session lifecycle\n *\n * Provides render props for session control, video rendering, and RPC calls.\n */\n\nimport { useRef, useEffect, type ReactElement, type RefObject } from 'react';\nimport { usePlaySession, type UsePlaySessionOptions } from '../hooks/usePlaySession.js';\nimport type { PlaySessionData, PlaySessionStatus, JsonRpcResponse } from '../protocol/types.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface PlaySessionRenderProps {\n /** Current session or null */\n session: PlaySessionData | null;\n\n /** Session status */\n status: PlaySessionStatus;\n\n /** Make a JSON-RPC call */\n call: <T = unknown>(method: string, params?: Record<string, unknown>) => Promise<JsonRpcResponse<T>>;\n\n /** Shorthand for observe.* methods */\n observe: <T = unknown>(key: string) => Promise<T>;\n\n /** Shorthand for act.* methods */\n act: <T = unknown>(action: string, params?: Record<string, unknown>) => Promise<T>;\n\n /** Connect to the session */\n connect: (options?: { timeout?: number }) => Promise<void>;\n\n /** Disconnect from the session */\n disconnect: () => Promise<void>;\n\n /** Video element ref (attach to your video element) */\n videoRef: RefObject<HTMLVideoElement | null>;\n\n /** Whether currently connected */\n isConnected: boolean;\n\n /** Error message if any */\n error: string | null;\n}\n\nexport interface PlaySessionProps extends Omit<UsePlaySessionOptions, 'onConnect' | 'onDisconnect' | 'onRpcResult' | 'onError'> {\n /** Called when session starts */\n onSessionStart?: (session: PlaySessionData) => void;\n\n /** Called when session ends */\n onSessionEnd?: () => void;\n\n /** Called on RPC result */\n onRpcResult?: (result: JsonRpcResponse) => void;\n\n /** Called on error */\n onError?: (error: Error) => void;\n\n /** Render function for session UI */\n children: (props: PlaySessionRenderProps) => ReactElement;\n\n /** Custom class name for the wrapper */\n className?: string;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function PlaySession({\n adapter,\n autoConnect = false,\n timeout,\n onSessionStart,\n onSessionEnd,\n onRpcResult,\n onError,\n children,\n className,\n}: PlaySessionProps): ReactElement {\n const videoRef = useRef<HTMLVideoElement | null>(null);\n\n const {\n session,\n status,\n videoTrack,\n audioTrack,\n call,\n observe,\n act,\n connect,\n disconnect,\n isConnected,\n error,\n } = usePlaySession({\n adapter,\n autoConnect,\n timeout,\n onConnect: onSessionStart,\n onDisconnect: onSessionEnd,\n onRpcResult,\n onError,\n });\n\n // Attach video track to video element when available\n useEffect(() => {\n if (videoRef.current && videoTrack) {\n const stream = new MediaStream([videoTrack]);\n videoRef.current.srcObject = stream;\n }\n }, [videoTrack]);\n\n // Attach audio track when available\n useEffect(() => {\n if (videoRef.current && audioTrack) {\n const currentStream = videoRef.current.srcObject as MediaStream | null;\n if (currentStream) {\n currentStream.addTrack(audioTrack);\n }\n }\n }, [audioTrack]);\n\n return (\n <div\n className={`bb-play-session ${className ?? ''}`}\n data-bb-state={status}\n data-bb-adapter={adapter}\n data-bb-session-id={session?.id}\n >\n {children({\n session,\n status,\n call,\n observe,\n act,\n connect,\n disconnect,\n videoRef,\n isConnected,\n error,\n })}\n </div>\n );\n}\n"]}
|
package/dist/chunk-EXQ7GYRS.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { composeRefs } from './chunk-P25YCWQB.js';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import * as ReactDOM from 'react-dom';
|
|
4
|
-
import { jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
|
|
7
|
-
return function handleEvent(event) {
|
|
8
|
-
originalEventHandler?.(event);
|
|
9
|
-
if (checkForDefaultPrevented === false || !event.defaultPrevented) {
|
|
10
|
-
return ourEventHandler?.(event);
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
// @__NO_SIDE_EFFECTS__
|
|
15
|
-
function createSlot(ownerName) {
|
|
16
|
-
const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);
|
|
17
|
-
const Slot2 = React.forwardRef((props, forwardedRef) => {
|
|
18
|
-
const { children, ...slotProps } = props;
|
|
19
|
-
const childrenArray = React.Children.toArray(children);
|
|
20
|
-
const slottable = childrenArray.find(isSlottable);
|
|
21
|
-
if (slottable) {
|
|
22
|
-
const newElement = slottable.props.children;
|
|
23
|
-
const newChildren = childrenArray.map((child) => {
|
|
24
|
-
if (child === slottable) {
|
|
25
|
-
if (React.Children.count(newElement) > 1) return React.Children.only(null);
|
|
26
|
-
return React.isValidElement(newElement) ? newElement.props.children : null;
|
|
27
|
-
} else {
|
|
28
|
-
return child;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });
|
|
32
|
-
}
|
|
33
|
-
return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });
|
|
34
|
-
});
|
|
35
|
-
Slot2.displayName = `${ownerName}.Slot`;
|
|
36
|
-
return Slot2;
|
|
37
|
-
}
|
|
38
|
-
// @__NO_SIDE_EFFECTS__
|
|
39
|
-
function createSlotClone(ownerName) {
|
|
40
|
-
const SlotClone = React.forwardRef((props, forwardedRef) => {
|
|
41
|
-
const { children, ...slotProps } = props;
|
|
42
|
-
if (React.isValidElement(children)) {
|
|
43
|
-
const childrenRef = getElementRef(children);
|
|
44
|
-
const props2 = mergeProps(slotProps, children.props);
|
|
45
|
-
if (children.type !== React.Fragment) {
|
|
46
|
-
props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
|
|
47
|
-
}
|
|
48
|
-
return React.cloneElement(children, props2);
|
|
49
|
-
}
|
|
50
|
-
return React.Children.count(children) > 1 ? React.Children.only(null) : null;
|
|
51
|
-
});
|
|
52
|
-
SlotClone.displayName = `${ownerName}.SlotClone`;
|
|
53
|
-
return SlotClone;
|
|
54
|
-
}
|
|
55
|
-
var SLOTTABLE_IDENTIFIER = /* @__PURE__ */ Symbol("radix.slottable");
|
|
56
|
-
function isSlottable(child) {
|
|
57
|
-
return React.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
|
|
58
|
-
}
|
|
59
|
-
function mergeProps(slotProps, childProps) {
|
|
60
|
-
const overrideProps = { ...childProps };
|
|
61
|
-
for (const propName in childProps) {
|
|
62
|
-
const slotPropValue = slotProps[propName];
|
|
63
|
-
const childPropValue = childProps[propName];
|
|
64
|
-
const isHandler = /^on[A-Z]/.test(propName);
|
|
65
|
-
if (isHandler) {
|
|
66
|
-
if (slotPropValue && childPropValue) {
|
|
67
|
-
overrideProps[propName] = (...args) => {
|
|
68
|
-
const result = childPropValue(...args);
|
|
69
|
-
slotPropValue(...args);
|
|
70
|
-
return result;
|
|
71
|
-
};
|
|
72
|
-
} else if (slotPropValue) {
|
|
73
|
-
overrideProps[propName] = slotPropValue;
|
|
74
|
-
}
|
|
75
|
-
} else if (propName === "style") {
|
|
76
|
-
overrideProps[propName] = { ...slotPropValue, ...childPropValue };
|
|
77
|
-
} else if (propName === "className") {
|
|
78
|
-
overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return { ...slotProps, ...overrideProps };
|
|
82
|
-
}
|
|
83
|
-
function getElementRef(element) {
|
|
84
|
-
let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
|
|
85
|
-
let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
86
|
-
if (mayWarn) {
|
|
87
|
-
return element.ref;
|
|
88
|
-
}
|
|
89
|
-
getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
|
|
90
|
-
mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
|
91
|
-
if (mayWarn) {
|
|
92
|
-
return element.props.ref;
|
|
93
|
-
}
|
|
94
|
-
return element.props.ref || element.ref;
|
|
95
|
-
}
|
|
96
|
-
var NODES = [
|
|
97
|
-
"a",
|
|
98
|
-
"button",
|
|
99
|
-
"div",
|
|
100
|
-
"form",
|
|
101
|
-
"h2",
|
|
102
|
-
"h3",
|
|
103
|
-
"img",
|
|
104
|
-
"input",
|
|
105
|
-
"label",
|
|
106
|
-
"li",
|
|
107
|
-
"nav",
|
|
108
|
-
"ol",
|
|
109
|
-
"p",
|
|
110
|
-
"select",
|
|
111
|
-
"span",
|
|
112
|
-
"svg",
|
|
113
|
-
"ul"
|
|
114
|
-
];
|
|
115
|
-
var Primitive = NODES.reduce((primitive, node) => {
|
|
116
|
-
const Slot = createSlot(`Primitive.${node}`);
|
|
117
|
-
const Node = React.forwardRef((props, forwardedRef) => {
|
|
118
|
-
const { asChild, ...primitiveProps } = props;
|
|
119
|
-
const Comp = asChild ? Slot : node;
|
|
120
|
-
if (typeof window !== "undefined") {
|
|
121
|
-
window[/* @__PURE__ */ Symbol.for("radix-ui")] = true;
|
|
122
|
-
}
|
|
123
|
-
return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });
|
|
124
|
-
});
|
|
125
|
-
Node.displayName = `Primitive.${node}`;
|
|
126
|
-
return { ...primitive, [node]: Node };
|
|
127
|
-
}, {});
|
|
128
|
-
function dispatchDiscreteCustomEvent(target, event) {
|
|
129
|
-
if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export { Primitive, composeEventHandlers, dispatchDiscreteCustomEvent };
|
|
133
|
-
//# sourceMappingURL=chunk-EXQ7GYRS.js.map
|
|
134
|
-
//# sourceMappingURL=chunk-EXQ7GYRS.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/@radix-ui/primitive/src/primitive.tsx","../../../node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/src/slot.tsx","../../../node_modules/@radix-ui/react-primitive/src/primitive.tsx"],"names":["Slot","props","React2","jsx"],"mappings":"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","file":"chunk-EXQ7GYRS.js","sourcesContent":["/* eslint-disable no-restricted-properties */\n\n/* eslint-disable no-restricted-globals */\nexport const canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n/* eslint-enable no-restricted-globals */\n\nexport function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport function getOwnerWindow(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access window outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument?.defaultView ?? window;\n}\n\nexport function getOwnerDocument(element: Node | null | undefined) {\n if (!canUseDOM) {\n throw new Error('Cannot access document outside of the DOM');\n }\n // eslint-disable-next-line no-restricted-globals\n return element?.ownerDocument ?? document;\n}\n\n/**\n * Lifted from https://github.com/ariakit/ariakit/blob/main/packages/ariakit-core/src/utils/dom.ts#L37\n * MIT License, Copyright (c) AriaKit.\n */\nexport function getActiveElement(\n node: Node | null | undefined,\n activeDescendant = false\n): HTMLElement | null {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n // `activeElement` might be an empty object if we're interacting with elements\n // inside of an iframe.\n return null;\n }\n\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n\n if (activeDescendant) {\n const id = activeElement.getAttribute('aria-activedescendant');\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n\n return activeElement as HTMLElement | null;\n}\n\nexport function isFrame(element: Element): element is HTMLIFrameElement {\n return element.tagName === 'IFRAME';\n}\n","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 * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\nconst NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'select',\n 'span',\n 'svg',\n 'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n const { asChild, ...primitiveProps } = props;\n const Comp: any = asChild ? Slot : node;\n\n if (typeof window !== 'undefined') {\n (window as any)[Symbol.for('radix-ui')] = true;\n }\n\n return <Comp {...primitiveProps} ref={forwardedRef} />;\n });\n\n Node.displayName = `Primitive.${node}`;\n\n return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n Primitive,\n //\n Root,\n //\n dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n"]}
|
package/dist/chunk-F4QTUZ3C.js
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { useAmbientTokens } from './chunk-VITKG2HL.js';
|
|
2
|
-
import { prefersReducedMotion, cn } from './chunk-6RX2WGCO.js';
|
|
3
|
-
import { useReducedMotion, motion } from 'framer-motion';
|
|
4
|
-
import * as React from 'react';
|
|
5
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
function generateMotes(count, colors, sizeRange, speed) {
|
|
8
|
-
return Array.from({ length: count }, (_, i) => ({
|
|
9
|
-
id: i,
|
|
10
|
-
x: Math.random() * 100,
|
|
11
|
-
y: Math.random() * 100,
|
|
12
|
-
size: sizeRange[0] + Math.random() * (sizeRange[1] - sizeRange[0]),
|
|
13
|
-
color: colors[Math.floor(Math.random() * colors.length)],
|
|
14
|
-
delay: Math.random() * 5,
|
|
15
|
-
duration: (8 + Math.random() * 8) / speed,
|
|
16
|
-
driftX: (Math.random() - 0.5) * 30,
|
|
17
|
-
driftY: -20 - Math.random() * 40
|
|
18
|
-
// Upward drift
|
|
19
|
-
}));
|
|
20
|
-
}
|
|
21
|
-
var MoteParticle = React.memo(function MoteParticle2({
|
|
22
|
-
mote,
|
|
23
|
-
speedMultiplier
|
|
24
|
-
}) {
|
|
25
|
-
const reducedMotion = useReducedMotion();
|
|
26
|
-
if (reducedMotion) {
|
|
27
|
-
return /* @__PURE__ */ jsx(
|
|
28
|
-
"div",
|
|
29
|
-
{
|
|
30
|
-
className: "absolute rounded-full",
|
|
31
|
-
style: {
|
|
32
|
-
left: `${mote.x}%`,
|
|
33
|
-
top: `${mote.y}%`,
|
|
34
|
-
width: mote.size,
|
|
35
|
-
height: mote.size,
|
|
36
|
-
backgroundColor: mote.color,
|
|
37
|
-
opacity: 0.3
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
return /* @__PURE__ */ jsx(
|
|
43
|
-
motion.div,
|
|
44
|
-
{
|
|
45
|
-
className: "absolute rounded-full will-change-transform",
|
|
46
|
-
style: {
|
|
47
|
-
left: `${mote.x}%`,
|
|
48
|
-
top: `${mote.y}%`,
|
|
49
|
-
width: mote.size,
|
|
50
|
-
height: mote.size,
|
|
51
|
-
backgroundColor: mote.color,
|
|
52
|
-
filter: `blur(${mote.size > 4 ? 1 : 0}px)`
|
|
53
|
-
},
|
|
54
|
-
initial: { opacity: 0, scale: 0.5 },
|
|
55
|
-
animate: {
|
|
56
|
-
opacity: [0, 0.6, 0.4, 0.7, 0],
|
|
57
|
-
scale: [0.5, 1, 0.9, 1.1, 0.8],
|
|
58
|
-
x: [0, mote.driftX * 0.3, mote.driftX * 0.7, mote.driftX],
|
|
59
|
-
y: [0, mote.driftY * 0.3, mote.driftY * 0.7, mote.driftY]
|
|
60
|
-
},
|
|
61
|
-
transition: {
|
|
62
|
-
duration: mote.duration / speedMultiplier,
|
|
63
|
-
delay: mote.delay,
|
|
64
|
-
repeat: Infinity,
|
|
65
|
-
ease: "easeInOut"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
);
|
|
69
|
-
});
|
|
70
|
-
function DustMotesLayer({
|
|
71
|
-
colors: propColors,
|
|
72
|
-
density: propDensity,
|
|
73
|
-
speed: propSpeed,
|
|
74
|
-
sizeRange: propSizeRange,
|
|
75
|
-
className,
|
|
76
|
-
disabled = false
|
|
77
|
-
}) {
|
|
78
|
-
const ambientTokens = useAmbientTokens();
|
|
79
|
-
const reducedMotion = prefersReducedMotion();
|
|
80
|
-
const colors = propColors ?? ambientTokens.particleColors;
|
|
81
|
-
const density = propDensity ?? ambientTokens.particleDensity;
|
|
82
|
-
const speed = propSpeed ?? ambientTokens.particleSpeed;
|
|
83
|
-
const sizeRange = propSizeRange ?? ambientTokens.particleSizeRange;
|
|
84
|
-
const [motes, setMotes] = React.useState([]);
|
|
85
|
-
React.useEffect(() => {
|
|
86
|
-
if (disabled || reducedMotion) {
|
|
87
|
-
setMotes([]);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const viewportArea = typeof window !== "undefined" ? window.innerWidth * window.innerHeight / 1e4 : 100;
|
|
91
|
-
const count = Math.floor(viewportArea * density * 2);
|
|
92
|
-
const clampedCount = Math.min(Math.max(count, 15), 80);
|
|
93
|
-
setMotes(generateMotes(clampedCount, colors, sizeRange, speed));
|
|
94
|
-
}, [colors, density, disabled, reducedMotion, sizeRange, speed]);
|
|
95
|
-
if (disabled || motes.length === 0) {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
return /* @__PURE__ */ jsxs(
|
|
99
|
-
"div",
|
|
100
|
-
{
|
|
101
|
-
className: cn("pointer-events-none absolute inset-0 overflow-hidden", className),
|
|
102
|
-
"aria-hidden": "true",
|
|
103
|
-
children: [
|
|
104
|
-
/* @__PURE__ */ jsx(
|
|
105
|
-
"div",
|
|
106
|
-
{
|
|
107
|
-
className: "absolute inset-0",
|
|
108
|
-
style: {
|
|
109
|
-
background: ambientTokens.horizonGradient
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
),
|
|
113
|
-
motes.map((mote) => /* @__PURE__ */ jsx(MoteParticle, { mote, speedMultiplier: speed }, mote.id)),
|
|
114
|
-
/* @__PURE__ */ jsx(
|
|
115
|
-
"div",
|
|
116
|
-
{
|
|
117
|
-
className: "absolute inset-0 opacity-30",
|
|
118
|
-
style: {
|
|
119
|
-
background: `
|
|
120
|
-
radial-gradient(
|
|
121
|
-
ellipse 60% 100% at 70% 0%,
|
|
122
|
-
${colors[0]}15,
|
|
123
|
-
transparent 70%
|
|
124
|
-
)
|
|
125
|
-
`
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
)
|
|
129
|
-
]
|
|
130
|
-
}
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export { DustMotesLayer };
|
|
135
|
-
//# sourceMappingURL=chunk-F4QTUZ3C.js.map
|
|
136
|
-
//# sourceMappingURL=chunk-F4QTUZ3C.js.map
|