@djangocfg/ui-tools 2.1.334 → 2.1.336
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/README.md +68 -2
- package/dist/ChatRoot-IIYQEWUU.mjs +5 -0
- package/dist/ChatRoot-IIYQEWUU.mjs.map +1 -0
- package/dist/ChatRoot-PNNGQCYF.css +7 -0
- package/dist/ChatRoot-PNNGQCYF.css.map +1 -0
- package/dist/ChatRoot-UUKTYM4N.cjs +14 -0
- package/dist/ChatRoot-UUKTYM4N.cjs.map +1 -0
- package/dist/{CronScheduler.client-3O3VU4CI.mjs → CronScheduler.client-DLMXCPAJ.mjs} +4 -4
- package/dist/{CronScheduler.client-3O3VU4CI.mjs.map → CronScheduler.client-DLMXCPAJ.mjs.map} +1 -1
- package/dist/{CronScheduler.client-A4GO6YBY.cjs → CronScheduler.client-WEJF4PWQ.cjs} +14 -14
- package/dist/{CronScheduler.client-A4GO6YBY.cjs.map → CronScheduler.client-WEJF4PWQ.cjs.map} +1 -1
- package/dist/{DocsLayout-XLDB6CJ2.cjs → DocsLayout-N5ZJZPBY.cjs} +200 -199
- package/dist/DocsLayout-N5ZJZPBY.cjs.map +1 -0
- package/dist/{DocsLayout-CTJINVBM.mjs → DocsLayout-VFPPNKSQ.mjs} +7 -6
- package/dist/DocsLayout-VFPPNKSQ.mjs.map +1 -0
- package/dist/JsonSchemaForm-DD7CLRIG.cjs +13 -0
- package/dist/{JsonSchemaForm-OSPUUUHM.cjs.map → JsonSchemaForm-DD7CLRIG.cjs.map} +1 -1
- package/dist/JsonSchemaForm-XKUIVELK.mjs +4 -0
- package/dist/{JsonSchemaForm-TSLX2GRO.mjs.map → JsonSchemaForm-XKUIVELK.mjs.map} +1 -1
- package/dist/JsonTree-55625VVH.mjs +5 -0
- package/dist/{JsonTree-F27RMYSI.cjs.map → JsonTree-55625VVH.mjs.map} +1 -1
- package/dist/JsonTree-DCM5QGWF.cjs +11 -0
- package/dist/{JsonTree-QTJYSHCV.mjs.map → JsonTree-DCM5QGWF.cjs.map} +1 -1
- package/dist/{LottiePlayer.client-6WVWDO75.cjs → LottiePlayer.client-2S7ISJ2S.cjs} +6 -6
- package/dist/{LottiePlayer.client-6WVWDO75.cjs.map → LottiePlayer.client-2S7ISJ2S.cjs.map} +1 -1
- package/dist/{LottiePlayer.client-B4I6WNZM.mjs → LottiePlayer.client-5LDSSJWS.mjs} +4 -4
- package/dist/{LottiePlayer.client-B4I6WNZM.mjs.map → LottiePlayer.client-5LDSSJWS.mjs.map} +1 -1
- package/dist/{MapContainer-RYG4HPH4.cjs → MapContainer-76YL2JXL.cjs} +8 -8
- package/dist/{MapContainer-RYG4HPH4.cjs.map → MapContainer-76YL2JXL.cjs.map} +1 -1
- package/dist/{MapContainer-GXQLP5WY.mjs → MapContainer-7HXBI3OH.mjs} +3 -3
- package/dist/{MapContainer-GXQLP5WY.mjs.map → MapContainer-7HXBI3OH.mjs.map} +1 -1
- package/dist/{Mermaid.client-SXRRI2YW.mjs → Mermaid.client-NL4SVR7F.mjs} +4 -4
- package/dist/{Mermaid.client-SXRRI2YW.mjs.map → Mermaid.client-NL4SVR7F.mjs.map} +1 -1
- package/dist/{Mermaid.client-W76R5AKJ.cjs → Mermaid.client-NNTI6DFX.cjs} +26 -26
- package/dist/{Mermaid.client-W76R5AKJ.cjs.map → Mermaid.client-NNTI6DFX.cjs.map} +1 -1
- package/dist/Player-BRV7XTWR.mjs +4 -0
- package/dist/{Player-M3GC3VPE.mjs.map → Player-BRV7XTWR.mjs.map} +1 -1
- package/dist/Player-PM7F7DD7.cjs +13 -0
- package/dist/{Player-ZL2X5LGG.cjs.map → Player-PM7F7DD7.cjs.map} +1 -1
- package/dist/{PrettyCode.client-RPDIE5CH.cjs → PrettyCode.client-KOHDVPPN.cjs} +13 -13
- package/dist/{PrettyCode.client-RPDIE5CH.cjs.map → PrettyCode.client-KOHDVPPN.cjs.map} +1 -1
- package/dist/{PrettyCode.client-SPMTQEG4.mjs → PrettyCode.client-ZGYGKE7G.mjs} +4 -4
- package/dist/{PrettyCode.client-SPMTQEG4.mjs.map → PrettyCode.client-ZGYGKE7G.mjs.map} +1 -1
- package/dist/TreeRoot-N72OYKXU.cjs +19 -0
- package/dist/{TreeRoot-A3J65L6F.mjs.map → TreeRoot-N72OYKXU.cjs.map} +1 -1
- package/dist/TreeRoot-VGAIXCUA.mjs +4 -0
- package/dist/{TreeRoot-DSK5JILT.cjs.map → TreeRoot-VGAIXCUA.mjs.map} +1 -1
- package/dist/chunk-2ZLKZ5VR.mjs +631 -0
- package/dist/chunk-2ZLKZ5VR.mjs.map +1 -0
- package/dist/{chunk-LFWQ36LJ.mjs → chunk-5G5YBFS6.mjs} +4 -4
- package/dist/{chunk-LFWQ36LJ.mjs.map → chunk-5G5YBFS6.mjs.map} +1 -1
- package/dist/{chunk-IHAY6FO6.cjs → chunk-5I5QNGUG.cjs} +17 -17
- package/dist/{chunk-IHAY6FO6.cjs.map → chunk-5I5QNGUG.cjs.map} +1 -1
- package/dist/{chunk-F2CMIIOH.cjs → chunk-76NNDZH6.cjs} +42 -42
- package/dist/{chunk-F2CMIIOH.cjs.map → chunk-76NNDZH6.cjs.map} +1 -1
- package/dist/chunk-B5AWZOHJ.cjs +649 -0
- package/dist/chunk-B5AWZOHJ.cjs.map +1 -0
- package/dist/{chunk-KR6B3LVY.mjs → chunk-B6IR5KSC.mjs} +3 -3
- package/dist/{chunk-KR6B3LVY.mjs.map → chunk-B6IR5KSC.mjs.map} +1 -1
- package/dist/{chunk-5LBDYFWH.mjs → chunk-C6GXVH5J.mjs} +3 -3
- package/dist/{chunk-5LBDYFWH.mjs.map → chunk-C6GXVH5J.mjs.map} +1 -1
- package/dist/{chunk-4IW7GZFQ.cjs → chunk-FEN5S772.cjs} +74 -48
- package/dist/chunk-FEN5S772.cjs.map +1 -0
- package/dist/{chunk-2SMCH62O.cjs → chunk-FP2RLYQZ.cjs} +11 -11
- package/dist/{chunk-2SMCH62O.cjs.map → chunk-FP2RLYQZ.cjs.map} +1 -1
- package/dist/{chunk-MOME6KYD.mjs → chunk-G5IEC7SR.mjs} +3 -3
- package/dist/{chunk-MOME6KYD.mjs.map → chunk-G5IEC7SR.mjs.map} +1 -1
- package/dist/{chunk-EXGXUK2N.mjs → chunk-GYIO7W7M.mjs} +41 -15
- package/dist/chunk-GYIO7W7M.mjs.map +1 -0
- package/dist/{chunk-3Z3A7FHA.cjs → chunk-IEEAENLX.cjs} +48 -48
- package/dist/{chunk-3Z3A7FHA.cjs.map → chunk-IEEAENLX.cjs.map} +1 -1
- package/dist/{chunk-DFTVB66S.cjs → chunk-KNDLV4PI.cjs} +85 -85
- package/dist/{chunk-DFTVB66S.cjs.map → chunk-KNDLV4PI.cjs.map} +1 -1
- package/dist/{chunk-SSUOENAZ.mjs → chunk-KNEQRUBA.mjs} +3 -3
- package/dist/{chunk-SSUOENAZ.mjs.map → chunk-KNEQRUBA.mjs.map} +1 -1
- package/dist/chunk-KRETIZU6.mjs +2218 -0
- package/dist/chunk-KRETIZU6.mjs.map +1 -0
- package/dist/{chunk-CGILA3WO.mjs → chunk-N2XQF2OL.mjs} +5 -3
- package/dist/{chunk-CGILA3WO.mjs.map → chunk-N2XQF2OL.mjs.map} +1 -1
- package/dist/{chunk-EUADAUBQ.mjs → chunk-N4MZYNR4.mjs} +4 -4
- package/dist/{chunk-EUADAUBQ.mjs.map → chunk-N4MZYNR4.mjs.map} +1 -1
- package/dist/chunk-NRXYYO5V.cjs +2257 -0
- package/dist/chunk-NRXYYO5V.cjs.map +1 -0
- package/dist/{chunk-GGKGH5PM.mjs → chunk-OBRSGM64.mjs} +4 -4
- package/dist/{chunk-GGKGH5PM.mjs.map → chunk-OBRSGM64.mjs.map} +1 -1
- package/dist/{chunk-6JTB2X72.mjs → chunk-ODO4GMW7.mjs} +3 -3
- package/dist/{chunk-6JTB2X72.mjs.map → chunk-ODO4GMW7.mjs.map} +1 -1
- package/dist/{chunk-WGEGR3DF.cjs → chunk-OLISEQHS.cjs} +5 -2
- package/dist/{chunk-WGEGR3DF.cjs.map → chunk-OLISEQHS.cjs.map} +1 -1
- package/dist/{chunk-PZKAH7WQ.mjs → chunk-PVAX67JG.mjs} +3 -3
- package/dist/{chunk-PZKAH7WQ.mjs.map → chunk-PVAX67JG.mjs.map} +1 -1
- package/dist/{chunk-PRPG2T2E.cjs → chunk-QJ6GTUCO.cjs} +6 -6
- package/dist/{chunk-PRPG2T2E.cjs.map → chunk-QJ6GTUCO.cjs.map} +1 -1
- package/dist/chunk-QW4RBGHN.cjs +961 -0
- package/dist/chunk-QW4RBGHN.cjs.map +1 -0
- package/dist/{chunk-33AMWFBZ.cjs → chunk-SGP7V2UW.cjs} +15 -15
- package/dist/{chunk-33AMWFBZ.cjs.map → chunk-SGP7V2UW.cjs.map} +1 -1
- package/dist/{chunk-FX2QFYWF.mjs → chunk-VWQ5WOIL.mjs} +3 -3
- package/dist/{chunk-FX2QFYWF.mjs.map → chunk-VWQ5WOIL.mjs.map} +1 -1
- package/dist/{chunk-ZLQHUZDU.cjs → chunk-YDPDTOSP.cjs} +139 -139
- package/dist/{chunk-ZLQHUZDU.cjs.map → chunk-YDPDTOSP.cjs.map} +1 -1
- package/dist/{chunk-77HQWEQ6.cjs → chunk-YW5IVWHQ.cjs} +33 -33
- package/dist/{chunk-77HQWEQ6.cjs.map → chunk-YW5IVWHQ.cjs.map} +1 -1
- package/dist/{chunk-YXBOAGIM.cjs → chunk-YXZ6GU7H.cjs} +7 -7
- package/dist/{chunk-YXBOAGIM.cjs.map → chunk-YXZ6GU7H.cjs.map} +1 -1
- package/dist/{chunk-62Y65TGK.mjs → chunk-ZUFTH5IR.mjs} +8 -631
- package/dist/chunk-ZUFTH5IR.mjs.map +1 -0
- package/dist/components-EHOGXATG.cjs +22 -0
- package/dist/{components-5UXYNAKR.cjs.map → components-EHOGXATG.cjs.map} +1 -1
- package/dist/components-MQ6DR7TX.cjs +26 -0
- package/dist/{components-CFXOEVPN.mjs.map → components-MQ6DR7TX.cjs.map} +1 -1
- package/dist/components-XRX7QGLB.mjs +5 -0
- package/dist/{components-WYEZL5TE.cjs.map → components-XRX7QGLB.mjs.map} +1 -1
- package/dist/components-YATKRWLH.mjs +5 -0
- package/dist/{components-ZAGG2PBO.mjs.map → components-YATKRWLH.mjs.map} +1 -1
- package/dist/file-icon/index.cjs +6 -6
- package/dist/file-icon/index.mjs +1 -1
- package/dist/index.cjs +735 -215
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +972 -39
- package/dist/index.d.ts +972 -39
- package/dist/index.mjs +387 -31
- package/dist/index.mjs.map +1 -1
- package/dist/tree/index.cjs +38 -38
- package/dist/tree/index.d.cts +2 -2
- package/dist/tree/index.d.ts +2 -2
- package/dist/tree/index.mjs +3 -3
- package/package.json +6 -6
- package/src/index.ts +5 -0
- package/src/stories/index.ts +3 -1
- package/src/tools/Chat/Chat.story.tsx +1006 -0
- package/src/tools/Chat/README.md +528 -0
- package/src/tools/Chat/components/Attachments.tsx +192 -0
- package/src/tools/Chat/components/ChatRoot.tsx +201 -0
- package/src/tools/Chat/components/Composer.tsx +134 -0
- package/src/tools/Chat/components/EmptyState.tsx +47 -0
- package/src/tools/Chat/components/ErrorBanner.tsx +47 -0
- package/src/tools/Chat/components/JumpToLatest.tsx +30 -0
- package/src/tools/Chat/components/MessageActions.tsx +72 -0
- package/src/tools/Chat/components/MessageBubble.tsx +228 -0
- package/src/tools/Chat/components/MessageList.tsx +82 -0
- package/src/tools/Chat/components/Sources.tsx +55 -0
- package/src/tools/Chat/components/StreamingIndicator.tsx +29 -0
- package/src/tools/Chat/components/ToolCalls.tsx +172 -0
- package/src/tools/Chat/components/index.ts +24 -0
- package/src/tools/Chat/config.ts +55 -0
- package/src/tools/Chat/context/ChatProvider.tsx +122 -0
- package/src/tools/Chat/context/index.ts +9 -0
- package/src/tools/Chat/core/audio/audioBus.ts +172 -0
- package/src/tools/Chat/core/audio/index.ts +8 -0
- package/src/tools/Chat/core/audio/preferences.ts +68 -0
- package/src/tools/Chat/core/audio/types.ts +49 -0
- package/src/tools/Chat/core/ids.ts +16 -0
- package/src/tools/Chat/core/index.ts +5 -0
- package/src/tools/Chat/core/markdown.ts +56 -0
- package/src/tools/Chat/core/payload-dispatch.ts +54 -0
- package/src/tools/Chat/core/persona.ts +35 -0
- package/src/tools/Chat/core/reducer.ts +335 -0
- package/src/tools/Chat/core/transport/http.ts +167 -0
- package/src/tools/Chat/core/transport/index.ts +13 -0
- package/src/tools/Chat/core/transport/mock.ts +134 -0
- package/src/tools/Chat/core/transport/sse.ts +116 -0
- package/src/tools/Chat/core/transport/types.ts +24 -0
- package/src/tools/Chat/hooks/index.ts +26 -0
- package/src/tools/Chat/hooks/useChat.ts +440 -0
- package/src/tools/Chat/hooks/useChatAudio.ts +191 -0
- package/src/tools/Chat/hooks/useChatComposer.ts +227 -0
- package/src/tools/Chat/hooks/useChatHistory.ts +59 -0
- package/src/tools/Chat/hooks/useChatLayout.ts +111 -0
- package/src/tools/Chat/hooks/useChatLightbox.ts +34 -0
- package/src/tools/Chat/hooks/useChatScroll.ts +132 -0
- package/src/tools/Chat/index.ts +158 -0
- package/src/tools/Chat/lazy.tsx +14 -0
- package/src/tools/Chat/types.ts +237 -0
- package/src/tools/Chat/utils/collectImageAttachments.ts +13 -0
- package/src/tools/JsonForm/JsonSchemaForm.tsx +32 -1
- package/src/tools/Map/README.md +384 -0
- package/dist/DocsLayout-CTJINVBM.mjs.map +0 -1
- package/dist/DocsLayout-XLDB6CJ2.cjs.map +0 -1
- package/dist/JsonSchemaForm-OSPUUUHM.cjs +0 -13
- package/dist/JsonSchemaForm-TSLX2GRO.mjs +0 -4
- package/dist/JsonTree-F27RMYSI.cjs +0 -11
- package/dist/JsonTree-QTJYSHCV.mjs +0 -5
- package/dist/Player-M3GC3VPE.mjs +0 -4
- package/dist/Player-ZL2X5LGG.cjs +0 -13
- package/dist/TreeRoot-A3J65L6F.mjs +0 -4
- package/dist/TreeRoot-DSK5JILT.cjs +0 -19
- package/dist/chunk-4IW7GZFQ.cjs.map +0 -1
- package/dist/chunk-62Y65TGK.mjs.map +0 -1
- package/dist/chunk-EXGXUK2N.mjs.map +0 -1
- package/dist/chunk-TKSFZHCG.cjs +0 -1597
- package/dist/chunk-TKSFZHCG.cjs.map +0 -1
- package/dist/components-5UXYNAKR.cjs +0 -22
- package/dist/components-CFXOEVPN.mjs +0 -5
- package/dist/components-WYEZL5TE.cjs +0 -26
- package/dist/components-ZAGG2PBO.mjs +0 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkOLISEQHS_cjs = require('./chunk-OLISEQHS.cjs');
|
|
4
4
|
var react = require('react');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var components = require('@djangocfg/ui-core/components');
|
|
@@ -12,7 +12,7 @@ function useScrollIsolation(ref, enabled) {
|
|
|
12
12
|
const unlock = react.useCallback(() => setLocked(false), []);
|
|
13
13
|
react.useEffect(() => {
|
|
14
14
|
if (!enabled) return;
|
|
15
|
-
const handleDocClick = /* @__PURE__ */
|
|
15
|
+
const handleDocClick = /* @__PURE__ */ chunkOLISEQHS_cjs.__name((e) => {
|
|
16
16
|
const el = ref.current;
|
|
17
17
|
if (!el) return;
|
|
18
18
|
if (!el.contains(e.target)) {
|
|
@@ -37,8 +37,8 @@ function useScrollIsolation(ref, enabled) {
|
|
|
37
37
|
}, [enabled]);
|
|
38
38
|
return { locked, unlock };
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
var FloatingToolbar = /* @__PURE__ */
|
|
40
|
+
chunkOLISEQHS_cjs.__name(useScrollIsolation, "useScrollIsolation");
|
|
41
|
+
var FloatingToolbar = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(({
|
|
42
42
|
containerRef,
|
|
43
43
|
children,
|
|
44
44
|
label,
|
|
@@ -108,7 +108,7 @@ var FloatingToolbar = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
108
108
|
] });
|
|
109
109
|
}, "FloatingToolbar");
|
|
110
110
|
var BUTTON_CLASS = "h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm";
|
|
111
|
-
var CopyAction = /* @__PURE__ */
|
|
111
|
+
var CopyAction = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(({ value, title = "Copy" }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
112
112
|
components.CopyButton,
|
|
113
113
|
{
|
|
114
114
|
value,
|
|
@@ -120,13 +120,13 @@ var CopyAction = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({ value, title = "Cop
|
|
|
120
120
|
}
|
|
121
121
|
), "CopyAction");
|
|
122
122
|
var BUTTON_CLASS2 = "h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm";
|
|
123
|
-
var DownloadAction = /* @__PURE__ */
|
|
123
|
+
var DownloadAction = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(({
|
|
124
124
|
value,
|
|
125
125
|
filename = "download.txt",
|
|
126
126
|
mimeType = "text/plain",
|
|
127
127
|
title = "Download"
|
|
128
128
|
}) => {
|
|
129
|
-
const handleDownload = /* @__PURE__ */
|
|
129
|
+
const handleDownload = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => {
|
|
130
130
|
const blob = new Blob([value], { type: mimeType });
|
|
131
131
|
const url = URL.createObjectURL(blob);
|
|
132
132
|
const a = document.createElement("a");
|
|
@@ -150,7 +150,7 @@ var DownloadAction = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({
|
|
|
150
150
|
);
|
|
151
151
|
}, "DownloadAction");
|
|
152
152
|
var BUTTON_CLASS3 = "h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm";
|
|
153
|
-
var ExpandAction = /* @__PURE__ */
|
|
153
|
+
var ExpandAction = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(({ isExpanded, onToggle }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
154
|
components.Button,
|
|
155
155
|
{
|
|
156
156
|
variant: "ghost",
|
|
@@ -162,7 +162,7 @@ var ExpandAction = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(({ isExpanded, onTog
|
|
|
162
162
|
}
|
|
163
163
|
), "ExpandAction");
|
|
164
164
|
var BUTTON_CLASS4 = "h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm";
|
|
165
|
-
var FullscreenAction = /* @__PURE__ */
|
|
165
|
+
var FullscreenAction = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(({
|
|
166
166
|
isFullscreen = false,
|
|
167
167
|
onToggle,
|
|
168
168
|
title
|
|
@@ -183,5 +183,5 @@ exports.DownloadAction = DownloadAction;
|
|
|
183
183
|
exports.ExpandAction = ExpandAction;
|
|
184
184
|
exports.FloatingToolbar = FloatingToolbar;
|
|
185
185
|
exports.FullscreenAction = FullscreenAction;
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
187
|
-
//# sourceMappingURL=chunk-
|
|
186
|
+
//# sourceMappingURL=chunk-FP2RLYQZ.cjs.map
|
|
187
|
+
//# sourceMappingURL=chunk-FP2RLYQZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FloatingToolbar/hooks/useScrollIsolation.ts","../src/components/FloatingToolbar/index.tsx","../src/components/FloatingToolbar/actions/CopyAction.tsx","../src/components/FloatingToolbar/actions/DownloadAction.tsx","../src/components/FloatingToolbar/actions/ExpandAction.tsx","../src/components/FloatingToolbar/actions/FullscreenAction.tsx"],"names":["useState","useCallback","useEffect","__name","jsx","jsxs","Fragment","CopyButton","BUTTON_CLASS","Button","Download","ChevronUp","ChevronDown","Minimize2","Maximize2"],"mappings":"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","file":"chunk-2SMCH62O.cjs","sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nconst UNLOCKED_CLASS = 'scroll-unlocked';\n\n/**\n * Scroll isolation — prevents the container from capturing wheel scroll\n * until the user explicitly clicks inside it (like Google Maps).\n *\n * Locked (overlay visible): wheel events on container scroll the PAGE.\n * Unlocked: normal scroll inside the container.\n *\n * Unlock: click anywhere inside the container.\n * Re-lock: click outside the container.\n *\n * When unlocked, adds `scroll-unlocked` class to the container element\n * so it can be styled (e.g. focus ring) via CSS.\n */\nexport function useScrollIsolation(\n ref: React.RefObject<HTMLElement | null>,\n enabled: boolean,\n) {\n const [locked, setLocked] = useState(true);\n\n const unlock = useCallback(() => setLocked(false), []);\n\n // Re-lock when clicking outside the container\n useEffect(() => {\n if (!enabled) return;\n\n const handleDocClick = (e: MouseEvent) => {\n const el = ref.current;\n if (!el) return;\n if (!el.contains(e.target as Node)) {\n setLocked(true);\n }\n };\n\n document.addEventListener('click', handleDocClick, true);\n return () => document.removeEventListener('click', handleDocClick, true);\n }, [enabled, ref]);\n\n // Toggle class on container to allow CSS-driven focus ring\n useEffect(() => {\n const el = ref.current;\n if (!el || !enabled) return;\n if (locked) {\n el.classList.remove(UNLOCKED_CLASS);\n } else {\n el.classList.add(UNLOCKED_CLASS);\n }\n return () => el.classList.remove(UNLOCKED_CLASS);\n }, [locked, enabled, ref]);\n\n // Reset to locked when feature toggled on\n useEffect(() => {\n if (enabled) setLocked(true);\n }, [enabled]);\n\n return { locked, unlock };\n}\n","'use client';\n\nimport React, { useState } from 'react';\n\nimport './FloatingToolbar.css';\nimport { useScrollIsolation } from './hooks/useScrollIsolation';\n\nexport interface FloatingToolbarProps {\n /** Ref to the container element the toolbar anchors to */\n containerRef: React.RefObject<HTMLElement | null>;\n /** Action buttons to render (right side) */\n children: React.ReactNode;\n /** Optional label shown left of the buttons (e.g. language badge) */\n label?: React.ReactNode;\n /** Where to anchor relative to the container (default: bottom-right) */\n position?: 'top-right' | 'bottom-right';\n /** Offset from the edge in px (default: 8) */\n offset?: number;\n /** z-index (default: 30) */\n zIndex?: number;\n /**\n * Block wheel scroll inside the container until user clicks into it.\n * Re-locks when mouse leaves. Like Google Maps scroll isolation.\n * @default true\n */\n scrollIsolation?: boolean;\n}\n\n/**\n * Toolbar is anchored with `position: absolute` inside the container (PrettyCode, etc.).\n * `position: fixed` + viewport coordinates breaks embedded layouts (e.g. chat composer overlap).\n */\nexport const FloatingToolbar: React.FC<FloatingToolbarProps> = ({\n containerRef,\n children,\n label,\n position = 'bottom-right',\n offset = 8,\n zIndex = 30,\n scrollIsolation = true,\n}) => {\n const { locked, unlock } = useScrollIsolation(containerRef, scrollIsolation);\n const [overlayHovered, setOverlayHovered] = useState(false);\n\n const overlay =\n scrollIsolation && locked ? (\n <div\n onClick={unlock}\n onMouseEnter={() => setOverlayHovered(true)}\n onMouseLeave={() => setOverlayHovered(false)}\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: zIndex - 1,\n cursor: 'pointer',\n background: overlayHovered ? 'rgba(0,0,0,0.04)' : 'transparent',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background 150ms',\n }}\n >\n {overlayHovered && (\n <span\n style={{\n fontSize: '0.75rem',\n padding: '0.25rem 0.625rem',\n borderRadius: '9999px',\n background: 'rgba(0,0,0,0.55)',\n color: '#fff',\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n >\n Click to scroll\n </span>\n )}\n </div>\n ) : null;\n\n const positionStyle: React.CSSProperties =\n position === 'bottom-right'\n ? { bottom: offset, right: offset }\n : { top: offset, right: offset };\n\n const toolbar = (\n <div\n className=\"flex items-center gap-1\"\n style={{\n position: 'absolute',\n ...positionStyle,\n zIndex,\n }}\n >\n {label && (\n <>\n {label}\n <div className=\"w-px h-4 bg-border/50 mx-0.5\" />\n </>\n )}\n {children}\n </div>\n );\n\n return (\n <>\n {overlay}\n {toolbar}\n </>\n );\n};\n","'use client';\n\nimport React from 'react';\nimport { CopyButton } from '@djangocfg/ui-core/components';\n\ninterface CopyActionProps {\n value: string;\n title?: string;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const CopyAction: React.FC<CopyActionProps> = ({ value, title = 'Copy' }) => (\n <CopyButton\n value={value}\n variant=\"ghost\"\n size=\"icon\"\n className={BUTTON_CLASS}\n iconClassName=\"h-3 w-3\"\n title={title}\n />\n);\n","'use client';\n\nimport { Download } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@djangocfg/ui-core/components';\n\ninterface DownloadActionProps {\n value: string;\n filename?: string;\n mimeType?: string;\n title?: string;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const DownloadAction: React.FC<DownloadActionProps> = ({\n value,\n filename = 'download.txt',\n mimeType = 'text/plain',\n title = 'Download',\n}) => {\n const handleDownload = () => {\n const blob = new Blob([value], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n };\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleDownload}\n className={BUTTON_CLASS}\n title={title}\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n );\n};\n","'use client';\n\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@djangocfg/ui-core/components';\n\ninterface ExpandActionProps {\n isExpanded: boolean;\n onToggle: () => void;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const ExpandAction: React.FC<ExpandActionProps> = ({ isExpanded, onToggle }) => (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onToggle}\n className={BUTTON_CLASS}\n title={isExpanded ? 'Collapse All' : 'Expand All'}\n >\n {isExpanded ? <ChevronUp className=\"h-3 w-3\" /> : <ChevronDown className=\"h-3 w-3\" />}\n </Button>\n);\n","'use client';\n\nimport { Maximize2, Minimize2 } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@djangocfg/ui-core/components';\n\ninterface FullscreenActionProps {\n isFullscreen?: boolean;\n onToggle: () => void;\n title?: string;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const FullscreenAction: React.FC<FullscreenActionProps> = ({\n isFullscreen = false,\n onToggle,\n title,\n}) => (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onToggle}\n className={BUTTON_CLASS}\n title={title ?? (isFullscreen ? 'Exit fullscreen' : 'Fullscreen')}\n >\n {isFullscreen ? <Minimize2 className=\"h-3 w-3\" /> : <Maximize2 className=\"h-3 w-3\" />}\n </Button>\n);\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/FloatingToolbar/hooks/useScrollIsolation.ts","../src/components/FloatingToolbar/index.tsx","../src/components/FloatingToolbar/actions/CopyAction.tsx","../src/components/FloatingToolbar/actions/DownloadAction.tsx","../src/components/FloatingToolbar/actions/ExpandAction.tsx","../src/components/FloatingToolbar/actions/FullscreenAction.tsx"],"names":["useState","useCallback","useEffect","__name","jsx","jsxs","Fragment","CopyButton","BUTTON_CLASS","Button","Download","ChevronUp","ChevronDown","Minimize2","Maximize2"],"mappings":"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","file":"chunk-FP2RLYQZ.cjs","sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nconst UNLOCKED_CLASS = 'scroll-unlocked';\n\n/**\n * Scroll isolation — prevents the container from capturing wheel scroll\n * until the user explicitly clicks inside it (like Google Maps).\n *\n * Locked (overlay visible): wheel events on container scroll the PAGE.\n * Unlocked: normal scroll inside the container.\n *\n * Unlock: click anywhere inside the container.\n * Re-lock: click outside the container.\n *\n * When unlocked, adds `scroll-unlocked` class to the container element\n * so it can be styled (e.g. focus ring) via CSS.\n */\nexport function useScrollIsolation(\n ref: React.RefObject<HTMLElement | null>,\n enabled: boolean,\n) {\n const [locked, setLocked] = useState(true);\n\n const unlock = useCallback(() => setLocked(false), []);\n\n // Re-lock when clicking outside the container\n useEffect(() => {\n if (!enabled) return;\n\n const handleDocClick = (e: MouseEvent) => {\n const el = ref.current;\n if (!el) return;\n if (!el.contains(e.target as Node)) {\n setLocked(true);\n }\n };\n\n document.addEventListener('click', handleDocClick, true);\n return () => document.removeEventListener('click', handleDocClick, true);\n }, [enabled, ref]);\n\n // Toggle class on container to allow CSS-driven focus ring\n useEffect(() => {\n const el = ref.current;\n if (!el || !enabled) return;\n if (locked) {\n el.classList.remove(UNLOCKED_CLASS);\n } else {\n el.classList.add(UNLOCKED_CLASS);\n }\n return () => el.classList.remove(UNLOCKED_CLASS);\n }, [locked, enabled, ref]);\n\n // Reset to locked when feature toggled on\n useEffect(() => {\n if (enabled) setLocked(true);\n }, [enabled]);\n\n return { locked, unlock };\n}\n","'use client';\n\nimport React, { useState } from 'react';\n\nimport './FloatingToolbar.css';\nimport { useScrollIsolation } from './hooks/useScrollIsolation';\n\nexport interface FloatingToolbarProps {\n /** Ref to the container element the toolbar anchors to */\n containerRef: React.RefObject<HTMLElement | null>;\n /** Action buttons to render (right side) */\n children: React.ReactNode;\n /** Optional label shown left of the buttons (e.g. language badge) */\n label?: React.ReactNode;\n /** Where to anchor relative to the container (default: bottom-right) */\n position?: 'top-right' | 'bottom-right';\n /** Offset from the edge in px (default: 8) */\n offset?: number;\n /** z-index (default: 30) */\n zIndex?: number;\n /**\n * Block wheel scroll inside the container until user clicks into it.\n * Re-locks when mouse leaves. Like Google Maps scroll isolation.\n * @default true\n */\n scrollIsolation?: boolean;\n}\n\n/**\n * Toolbar is anchored with `position: absolute` inside the container (PrettyCode, etc.).\n * `position: fixed` + viewport coordinates breaks embedded layouts (e.g. chat composer overlap).\n */\nexport const FloatingToolbar: React.FC<FloatingToolbarProps> = ({\n containerRef,\n children,\n label,\n position = 'bottom-right',\n offset = 8,\n zIndex = 30,\n scrollIsolation = true,\n}) => {\n const { locked, unlock } = useScrollIsolation(containerRef, scrollIsolation);\n const [overlayHovered, setOverlayHovered] = useState(false);\n\n const overlay =\n scrollIsolation && locked ? (\n <div\n onClick={unlock}\n onMouseEnter={() => setOverlayHovered(true)}\n onMouseLeave={() => setOverlayHovered(false)}\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: zIndex - 1,\n cursor: 'pointer',\n background: overlayHovered ? 'rgba(0,0,0,0.04)' : 'transparent',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background 150ms',\n }}\n >\n {overlayHovered && (\n <span\n style={{\n fontSize: '0.75rem',\n padding: '0.25rem 0.625rem',\n borderRadius: '9999px',\n background: 'rgba(0,0,0,0.55)',\n color: '#fff',\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n >\n Click to scroll\n </span>\n )}\n </div>\n ) : null;\n\n const positionStyle: React.CSSProperties =\n position === 'bottom-right'\n ? { bottom: offset, right: offset }\n : { top: offset, right: offset };\n\n const toolbar = (\n <div\n className=\"flex items-center gap-1\"\n style={{\n position: 'absolute',\n ...positionStyle,\n zIndex,\n }}\n >\n {label && (\n <>\n {label}\n <div className=\"w-px h-4 bg-border/50 mx-0.5\" />\n </>\n )}\n {children}\n </div>\n );\n\n return (\n <>\n {overlay}\n {toolbar}\n </>\n );\n};\n","'use client';\n\nimport React from 'react';\nimport { CopyButton } from '@djangocfg/ui-core/components';\n\ninterface CopyActionProps {\n value: string;\n title?: string;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const CopyAction: React.FC<CopyActionProps> = ({ value, title = 'Copy' }) => (\n <CopyButton\n value={value}\n variant=\"ghost\"\n size=\"icon\"\n className={BUTTON_CLASS}\n iconClassName=\"h-3 w-3\"\n title={title}\n />\n);\n","'use client';\n\nimport { Download } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@djangocfg/ui-core/components';\n\ninterface DownloadActionProps {\n value: string;\n filename?: string;\n mimeType?: string;\n title?: string;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const DownloadAction: React.FC<DownloadActionProps> = ({\n value,\n filename = 'download.txt',\n mimeType = 'text/plain',\n title = 'Download',\n}) => {\n const handleDownload = () => {\n const blob = new Blob([value], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n };\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={handleDownload}\n className={BUTTON_CLASS}\n title={title}\n >\n <Download className=\"h-3 w-3\" />\n </Button>\n );\n};\n","'use client';\n\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@djangocfg/ui-core/components';\n\ninterface ExpandActionProps {\n isExpanded: boolean;\n onToggle: () => void;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const ExpandAction: React.FC<ExpandActionProps> = ({ isExpanded, onToggle }) => (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onToggle}\n className={BUTTON_CLASS}\n title={isExpanded ? 'Collapse All' : 'Expand All'}\n >\n {isExpanded ? <ChevronUp className=\"h-3 w-3\" /> : <ChevronDown className=\"h-3 w-3\" />}\n </Button>\n);\n","'use client';\n\nimport { Maximize2, Minimize2 } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@djangocfg/ui-core/components';\n\ninterface FullscreenActionProps {\n isFullscreen?: boolean;\n onToggle: () => void;\n title?: string;\n}\n\nconst BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';\n\nexport const FullscreenAction: React.FC<FullscreenActionProps> = ({\n isFullscreen = false,\n onToggle,\n title,\n}) => (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onToggle}\n className={BUTTON_CLASS}\n title={title ?? (isFullscreen ? 'Exit fullscreen' : 'Fullscreen')}\n >\n {isFullscreen ? <Minimize2 className=\"h-3 w-3\" /> : <Maximize2 className=\"h-3 w-3\" />}\n </Button>\n);\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __name } from './chunk-
|
|
1
|
+
import { __name } from './chunk-N2XQF2OL.mjs';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { createContext, useMemo, useReducer, useRef, useCallback, useEffect, Fragment as Fragment$1 } from 'react';
|
|
4
4
|
import { cn } from '@djangocfg/ui-core/lib';
|
|
@@ -1266,5 +1266,5 @@ __name(TreeRootShell, "TreeRootShell");
|
|
|
1266
1266
|
var TreeRoot_default = TreeRoot;
|
|
1267
1267
|
|
|
1268
1268
|
export { DEFAULT_TREE_APPEARANCE, DEFAULT_TREE_LABELS, TreeChevron, TreeContent, TreeEmpty, TreeIcon, TreeIndentGuides, TreeLabel, TreeProvider, TreeRoot, TreeRoot_default, TreeRow, TreeSearchInput, appearanceToStyle, clearTreeState, createChildCache, flattenTree, loadTreeState, resolveAppearance, resolveChildren, saveTreeState, useTreeActions, useTreeContext, useTreeExpansion, useTreeFocus, useTreeKeyboard, useTreeLabels, useTreeRows, useTreeSearch, useTreeSelection, useTreeTypeAhead };
|
|
1269
|
-
//# sourceMappingURL=chunk-
|
|
1270
|
-
//# sourceMappingURL=chunk-
|
|
1269
|
+
//# sourceMappingURL=chunk-G5IEC7SR.mjs.map
|
|
1270
|
+
//# sourceMappingURL=chunk-G5IEC7SR.mjs.map
|