@djangocfg/ui-tools 2.1.335 → 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-6WMS4CIY.cjs.map → JsonSchemaForm-DD7CLRIG.cjs.map} +1 -1
- package/dist/JsonSchemaForm-XKUIVELK.mjs +4 -0
- package/dist/{JsonSchemaForm-KX4JT3M4.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-NRKD4F5X.cjs → chunk-FEN5S772.cjs} +36 -36
- package/dist/{chunk-NRKD4F5X.cjs.map → chunk-FEN5S772.cjs.map} +1 -1
- 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-SE5IERVH.mjs → chunk-GYIO7W7M.mjs} +3 -3
- package/dist/{chunk-SE5IERVH.mjs.map → chunk-GYIO7W7M.mjs.map} +1 -1
- 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/Map/README.md +384 -0
- package/dist/DocsLayout-CTJINVBM.mjs.map +0 -1
- package/dist/DocsLayout-XLDB6CJ2.cjs.map +0 -1
- package/dist/JsonSchemaForm-6WMS4CIY.cjs +0 -13
- package/dist/JsonSchemaForm-KX4JT3M4.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-62Y65TGK.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 zustand = require('zustand');
|
|
5
5
|
var middleware = require('zustand/middleware');
|
|
6
6
|
var shallow = require('zustand/react/shallow');
|
|
@@ -29,7 +29,7 @@ var useMediaCacheStore = zustand.create()(
|
|
|
29
29
|
(set, get) => ({
|
|
30
30
|
...initialState,
|
|
31
31
|
// ========== Blob URL Management ==========
|
|
32
|
-
getOrCreateBlobUrl: /* @__PURE__ */
|
|
32
|
+
getOrCreateBlobUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key, content, mimeType) => {
|
|
33
33
|
const existing = get().blobUrls.get(key);
|
|
34
34
|
if (existing) {
|
|
35
35
|
cacheDebug.debug(`Blob URL reused: ${key}`, { refCount: existing.refCount + 1 });
|
|
@@ -62,7 +62,7 @@ var useMediaCacheStore = zustand.create()(
|
|
|
62
62
|
);
|
|
63
63
|
return url;
|
|
64
64
|
}, "getOrCreateBlobUrl"),
|
|
65
|
-
releaseBlobUrl: /* @__PURE__ */
|
|
65
|
+
releaseBlobUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key) => {
|
|
66
66
|
const entry = get().blobUrls.get(key);
|
|
67
67
|
if (!entry) return;
|
|
68
68
|
if (entry.refCount <= 1) {
|
|
@@ -91,9 +91,9 @@ var useMediaCacheStore = zustand.create()(
|
|
|
91
91
|
);
|
|
92
92
|
}
|
|
93
93
|
}, "releaseBlobUrl"),
|
|
94
|
-
hasBlobUrl: /* @__PURE__ */
|
|
94
|
+
hasBlobUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key) => get().blobUrls.has(key), "hasBlobUrl"),
|
|
95
95
|
// ========== Image Cache ==========
|
|
96
|
-
cacheDimensions: /* @__PURE__ */
|
|
96
|
+
cacheDimensions: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((src, dims) => {
|
|
97
97
|
set(
|
|
98
98
|
(state) => ({
|
|
99
99
|
imageDimensions: new Map(state.imageDimensions).set(src, dims)
|
|
@@ -102,9 +102,9 @@ var useMediaCacheStore = zustand.create()(
|
|
|
102
102
|
"image/cacheDimensions"
|
|
103
103
|
);
|
|
104
104
|
}, "cacheDimensions"),
|
|
105
|
-
getDimensions: /* @__PURE__ */
|
|
105
|
+
getDimensions: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((src) => get().imageDimensions.get(src) ?? null, "getDimensions"),
|
|
106
106
|
// ========== Audio Cache ==========
|
|
107
|
-
saveAudioPosition: /* @__PURE__ */
|
|
107
|
+
saveAudioPosition: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((uri, time) => {
|
|
108
108
|
set(
|
|
109
109
|
(state) => ({
|
|
110
110
|
audioPlaybackPositions: new Map(state.audioPlaybackPositions).set(
|
|
@@ -116,9 +116,9 @@ var useMediaCacheStore = zustand.create()(
|
|
|
116
116
|
"audio/savePosition"
|
|
117
117
|
);
|
|
118
118
|
}, "saveAudioPosition"),
|
|
119
|
-
getAudioPosition: /* @__PURE__ */
|
|
120
|
-
getEffectConfig: /* @__PURE__ */
|
|
121
|
-
cacheEffectConfig: /* @__PURE__ */
|
|
119
|
+
getAudioPosition: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((uri) => get().audioPlaybackPositions.get(uri) ?? null, "getAudioPosition"),
|
|
120
|
+
getEffectConfig: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key) => get().audioEffectConfigs.get(key) ?? null, "getEffectConfig"),
|
|
121
|
+
cacheEffectConfig: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key, config) => {
|
|
122
122
|
set(
|
|
123
123
|
(state) => ({
|
|
124
124
|
audioEffectConfigs: new Map(state.audioEffectConfigs).set(
|
|
@@ -131,7 +131,7 @@ var useMediaCacheStore = zustand.create()(
|
|
|
131
131
|
);
|
|
132
132
|
}, "cacheEffectConfig"),
|
|
133
133
|
// ========== Video Cache ==========
|
|
134
|
-
getOrCreateStreamUrl: /* @__PURE__ */
|
|
134
|
+
getOrCreateStreamUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((sessionId, path, generator) => {
|
|
135
135
|
const key = `${sessionId}:${path}`;
|
|
136
136
|
const cached = get().videoStreamUrls.get(key);
|
|
137
137
|
if (cached && Date.now() - cached.timestamp < STREAM_URL_TTL) {
|
|
@@ -150,8 +150,8 @@ var useMediaCacheStore = zustand.create()(
|
|
|
150
150
|
);
|
|
151
151
|
return url;
|
|
152
152
|
}, "getOrCreateStreamUrl"),
|
|
153
|
-
getPosterUrl: /* @__PURE__ */
|
|
154
|
-
cachePosterUrl: /* @__PURE__ */
|
|
153
|
+
getPosterUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((title) => get().videoPosterUrls.get(title) ?? null, "getPosterUrl"),
|
|
154
|
+
cachePosterUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((title, url) => {
|
|
155
155
|
set(
|
|
156
156
|
(state) => ({
|
|
157
157
|
videoPosterUrls: new Map(state.videoPosterUrls).set(title, url)
|
|
@@ -160,7 +160,7 @@ var useMediaCacheStore = zustand.create()(
|
|
|
160
160
|
"video/cachePosterUrl"
|
|
161
161
|
);
|
|
162
162
|
}, "cachePosterUrl"),
|
|
163
|
-
saveVideoPosition: /* @__PURE__ */
|
|
163
|
+
saveVideoPosition: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key, time) => {
|
|
164
164
|
set(
|
|
165
165
|
(state) => ({
|
|
166
166
|
videoPlaybackPositions: new Map(state.videoPlaybackPositions).set(
|
|
@@ -172,8 +172,8 @@ var useMediaCacheStore = zustand.create()(
|
|
|
172
172
|
"video/savePosition"
|
|
173
173
|
);
|
|
174
174
|
}, "saveVideoPosition"),
|
|
175
|
-
getVideoPosition: /* @__PURE__ */
|
|
176
|
-
cacheVideoMetadata: /* @__PURE__ */
|
|
175
|
+
getVideoPosition: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key) => get().videoPlaybackPositions.get(key) ?? null, "getVideoPosition"),
|
|
176
|
+
cacheVideoMetadata: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((url, meta) => {
|
|
177
177
|
set(
|
|
178
178
|
(state) => ({
|
|
179
179
|
videoMetadata: new Map(state.videoMetadata).set(url, meta)
|
|
@@ -182,8 +182,8 @@ var useMediaCacheStore = zustand.create()(
|
|
|
182
182
|
"video/cacheMetadata"
|
|
183
183
|
);
|
|
184
184
|
}, "cacheVideoMetadata"),
|
|
185
|
-
getVideoMetadata: /* @__PURE__ */
|
|
186
|
-
invalidateSession: /* @__PURE__ */
|
|
185
|
+
getVideoMetadata: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((url) => get().videoMetadata.get(url) ?? null, "getVideoMetadata"),
|
|
186
|
+
invalidateSession: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((sessionId) => {
|
|
187
187
|
set(
|
|
188
188
|
(state) => {
|
|
189
189
|
const newUrls = new Map(state.videoStreamUrls);
|
|
@@ -198,8 +198,8 @@ var useMediaCacheStore = zustand.create()(
|
|
|
198
198
|
"video/invalidateSession"
|
|
199
199
|
);
|
|
200
200
|
}, "invalidateSession"),
|
|
201
|
-
getVideoPlayerSettings: /* @__PURE__ */
|
|
202
|
-
saveVideoPlayerSettings: /* @__PURE__ */
|
|
201
|
+
getVideoPlayerSettings: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => get().videoPlayerSettings, "getVideoPlayerSettings"),
|
|
202
|
+
saveVideoPlayerSettings: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((settings) => {
|
|
203
203
|
set(
|
|
204
204
|
(state) => ({
|
|
205
205
|
videoPlayerSettings: { ...state.videoPlayerSettings, ...settings }
|
|
@@ -209,13 +209,13 @@ var useMediaCacheStore = zustand.create()(
|
|
|
209
209
|
);
|
|
210
210
|
}, "saveVideoPlayerSettings"),
|
|
211
211
|
// ========== Global ==========
|
|
212
|
-
clearCache: /* @__PURE__ */
|
|
212
|
+
clearCache: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => {
|
|
213
213
|
const stats = get().getCacheStats();
|
|
214
214
|
cacheDebug.info("Clearing cache", stats);
|
|
215
215
|
get().blobUrls.forEach(({ url }) => URL.revokeObjectURL(url));
|
|
216
216
|
set(initialState, false, "clearCache");
|
|
217
217
|
}, "clearCache"),
|
|
218
|
-
getCacheStats: /* @__PURE__ */
|
|
218
|
+
getCacheStats: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => ({
|
|
219
219
|
blobUrls: get().blobUrls.size,
|
|
220
220
|
dimensions: get().imageDimensions.size,
|
|
221
221
|
audioPositions: get().audioPlaybackPositions.size,
|
|
@@ -225,7 +225,7 @@ var useMediaCacheStore = zustand.create()(
|
|
|
225
225
|
{
|
|
226
226
|
name: "media-cache-storage",
|
|
227
227
|
// Only persist playback positions, poster URLs, and player settings
|
|
228
|
-
partialize: /* @__PURE__ */
|
|
228
|
+
partialize: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((state) => ({
|
|
229
229
|
audioPlaybackPositions: Array.from(
|
|
230
230
|
state.audioPlaybackPositions.entries()
|
|
231
231
|
),
|
|
@@ -236,7 +236,7 @@ var useMediaCacheStore = zustand.create()(
|
|
|
236
236
|
videoPlayerSettings: state.videoPlayerSettings
|
|
237
237
|
}), "partialize"),
|
|
238
238
|
// Rehydrate Maps from arrays
|
|
239
|
-
onRehydrateStorage: /* @__PURE__ */
|
|
239
|
+
onRehydrateStorage: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => (state) => {
|
|
240
240
|
if (state) {
|
|
241
241
|
const persistedAudio = state.audioPlaybackPositions;
|
|
242
242
|
const persistedVideo = state.videoPlaybackPositions;
|
|
@@ -262,7 +262,7 @@ var useMediaCacheStore = zustand.create()(
|
|
|
262
262
|
{ name: "MediaCacheStore" }
|
|
263
263
|
)
|
|
264
264
|
);
|
|
265
|
-
var useImageCache = /* @__PURE__ */
|
|
265
|
+
var useImageCache = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
|
|
266
266
|
shallow.useShallow((state) => ({
|
|
267
267
|
getOrCreateBlobUrl: state.getOrCreateBlobUrl,
|
|
268
268
|
releaseBlobUrl: state.releaseBlobUrl,
|
|
@@ -271,7 +271,7 @@ var useImageCache = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => useMediaCache
|
|
|
271
271
|
getDimensions: state.getDimensions
|
|
272
272
|
}))
|
|
273
273
|
), "useImageCache");
|
|
274
|
-
var useAudioCache = /* @__PURE__ */
|
|
274
|
+
var useAudioCache = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
|
|
275
275
|
shallow.useShallow((state) => ({
|
|
276
276
|
getOrCreateBlobUrl: state.getOrCreateBlobUrl,
|
|
277
277
|
releaseBlobUrl: state.releaseBlobUrl,
|
|
@@ -282,7 +282,7 @@ var useAudioCache = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => useMediaCache
|
|
|
282
282
|
cacheEffectConfig: state.cacheEffectConfig
|
|
283
283
|
}))
|
|
284
284
|
), "useAudioCache");
|
|
285
|
-
var useVideoCache = /* @__PURE__ */
|
|
285
|
+
var useVideoCache = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
|
|
286
286
|
shallow.useShallow((state) => ({
|
|
287
287
|
getOrCreateBlobUrl: state.getOrCreateBlobUrl,
|
|
288
288
|
releaseBlobUrl: state.releaseBlobUrl,
|
|
@@ -299,7 +299,7 @@ var useVideoCache = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => useMediaCache
|
|
|
299
299
|
saveVideoPlayerSettings: state.saveVideoPlayerSettings
|
|
300
300
|
}))
|
|
301
301
|
), "useVideoCache");
|
|
302
|
-
var useVideoPlayerSettings = /* @__PURE__ */
|
|
302
|
+
var useVideoPlayerSettings = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
|
|
303
303
|
shallow.useShallow((state) => ({
|
|
304
304
|
settings: state.videoPlayerSettings,
|
|
305
305
|
saveSettings: state.saveVideoPlayerSettings
|
|
@@ -308,7 +308,7 @@ var useVideoPlayerSettings = /* @__PURE__ */ chunkWGEGR3DF_cjs.__name(() => useM
|
|
|
308
308
|
function useBlobUrlCleanup(key) {
|
|
309
309
|
const releaseBlobUrl = useMediaCacheStore((s) => s.releaseBlobUrl);
|
|
310
310
|
if (typeof window !== "undefined") {
|
|
311
|
-
const { useEffect } =
|
|
311
|
+
const { useEffect } = chunkOLISEQHS_cjs.__require("react");
|
|
312
312
|
useEffect(() => {
|
|
313
313
|
return () => {
|
|
314
314
|
if (key) {
|
|
@@ -318,7 +318,7 @@ function useBlobUrlCleanup(key) {
|
|
|
318
318
|
}, [key, releaseBlobUrl]);
|
|
319
319
|
}
|
|
320
320
|
}
|
|
321
|
-
|
|
321
|
+
chunkOLISEQHS_cjs.__name(useBlobUrlCleanup, "useBlobUrlCleanup");
|
|
322
322
|
function generateContentKey(content) {
|
|
323
323
|
const arr = new Uint8Array(content);
|
|
324
324
|
const len = arr.length;
|
|
@@ -333,7 +333,7 @@ function generateContentKey(content) {
|
|
|
333
333
|
}
|
|
334
334
|
return `blob-${len}-${hash.toString(16)}`;
|
|
335
335
|
}
|
|
336
|
-
|
|
336
|
+
chunkOLISEQHS_cjs.__name(generateContentKey, "generateContentKey");
|
|
337
337
|
|
|
338
338
|
exports.generateContentKey = generateContentKey;
|
|
339
339
|
exports.useAudioCache = useAudioCache;
|
|
@@ -342,5 +342,5 @@ exports.useImageCache = useImageCache;
|
|
|
342
342
|
exports.useMediaCacheStore = useMediaCacheStore;
|
|
343
343
|
exports.useVideoCache = useVideoCache;
|
|
344
344
|
exports.useVideoPlayerSettings = useVideoPlayerSettings;
|
|
345
|
-
//# sourceMappingURL=chunk-
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
345
|
+
//# sourceMappingURL=chunk-YW5IVWHQ.cjs.map
|
|
346
|
+
//# sourceMappingURL=chunk-YW5IVWHQ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/stores/mediaCache.ts"],"names":["createLogger","create","devtools","persist","__name","useShallow","__require"],"mappings":"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","file":"chunk-77HQWEQ6.cjs","sourcesContent":["'use client';\n\nimport { create } from 'zustand';\nimport { devtools, persist } from 'zustand/middleware';\nimport { useShallow } from 'zustand/react/shallow';\n\nimport { createLogger } from '@djangocfg/ui-core/lib';\n\nconst cacheDebug = createLogger('MediaCache');\n\n// Types\ninterface BlobUrlEntry {\n url: string;\n refCount: number;\n createdAt: number;\n}\n\ninterface ImageDimensions {\n width: number;\n height: number;\n}\n\ninterface VideoMetadata {\n duration: number;\n width: number;\n height: number;\n codec?: string;\n}\n\ninterface EffectConfig {\n opacity: number;\n scale: number;\n blur: string;\n}\n\n/** Video player settings (persisted) */\ninterface VideoPlayerSettings {\n volume: number;\n isLooping: boolean;\n}\n\n// Stream URL TTL (30 seconds - shorter to avoid stale session/token issues)\nconst STREAM_URL_TTL = 30 * 1000;\n\ninterface MediaCacheState {\n // Blob URL cache (shared by Image, Audio, Video)\n blobUrls: Map<string, BlobUrlEntry>;\n\n // Image-specific\n imageDimensions: Map<string, ImageDimensions>;\n\n // Audio-specific\n audioPlaybackPositions: Map<string, number>;\n audioEffectConfigs: Map<string, EffectConfig>;\n\n // Video-specific\n videoStreamUrls: Map<string, { url: string; timestamp: number }>;\n videoPosterUrls: Map<string, string>;\n videoPlaybackPositions: Map<string, number>;\n videoMetadata: Map<string, VideoMetadata>;\n videoPlayerSettings: VideoPlayerSettings;\n}\n\ninterface MediaCacheActions {\n // Blob URL management (shared)\n getOrCreateBlobUrl: (\n key: string,\n content: ArrayBuffer,\n mimeType: string\n ) => string;\n releaseBlobUrl: (key: string) => void;\n hasBlobUrl: (key: string) => boolean;\n\n // Image actions\n cacheDimensions: (src: string, dims: ImageDimensions) => void;\n getDimensions: (src: string) => ImageDimensions | null;\n\n // Audio actions\n saveAudioPosition: (uri: string, time: number) => void;\n getAudioPosition: (uri: string) => number | null;\n getEffectConfig: (key: string) => EffectConfig | null;\n cacheEffectConfig: (key: string, config: EffectConfig) => void;\n\n // Video actions\n getOrCreateStreamUrl: (\n sessionId: string,\n path: string,\n generator: (sessionId: string, path: string) => string\n ) => string;\n getPosterUrl: (title: string) => string | null;\n cachePosterUrl: (title: string, url: string) => void;\n saveVideoPosition: (key: string, time: number) => void;\n getVideoPosition: (key: string) => number | null;\n cacheVideoMetadata: (url: string, meta: VideoMetadata) => void;\n getVideoMetadata: (url: string) => VideoMetadata | null;\n invalidateSession: (sessionId: string) => void;\n getVideoPlayerSettings: () => VideoPlayerSettings;\n saveVideoPlayerSettings: (settings: Partial<VideoPlayerSettings>) => void;\n\n // Global\n clearCache: () => void;\n getCacheStats: () => {\n blobUrls: number;\n dimensions: number;\n audioPositions: number;\n videoPositions: number;\n };\n}\n\ntype MediaCacheStore = MediaCacheState & MediaCacheActions;\n\n// Initial state\nconst DEFAULT_VIDEO_SETTINGS: VideoPlayerSettings = {\n volume: 1,\n isLooping: false,\n};\n\nconst initialState: MediaCacheState = {\n blobUrls: new Map(),\n imageDimensions: new Map(),\n audioPlaybackPositions: new Map(),\n audioEffectConfigs: new Map(),\n videoStreamUrls: new Map(),\n videoPosterUrls: new Map(),\n videoPlaybackPositions: new Map(),\n videoMetadata: new Map(),\n videoPlayerSettings: DEFAULT_VIDEO_SETTINGS,\n};\n\nexport const useMediaCacheStore = create<MediaCacheStore>()(\n devtools(\n persist(\n (set, get) => ({\n ...initialState,\n\n // ========== Blob URL Management ==========\n\n getOrCreateBlobUrl: (key, content, mimeType) => {\n const existing = get().blobUrls.get(key);\n if (existing) {\n // Increment ref count\n cacheDebug.debug(`Blob URL reused: ${key}`, { refCount: existing.refCount + 1 });\n set(\n (state) => ({\n blobUrls: new Map(state.blobUrls).set(key, {\n ...existing,\n refCount: existing.refCount + 1,\n }),\n }),\n false,\n 'blobUrl/incrementRef'\n );\n return existing.url;\n }\n\n // Create new blob URL\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const sizeMB = (content.byteLength / 1024 / 1024).toFixed(2);\n cacheDebug.debug(`Blob URL created: ${key}`, { mimeType, size: `${sizeMB}MB` });\n set(\n (state) => ({\n blobUrls: new Map(state.blobUrls).set(key, {\n url,\n refCount: 1,\n createdAt: Date.now(),\n }),\n }),\n false,\n 'blobUrl/create'\n );\n return url;\n },\n\n releaseBlobUrl: (key) => {\n const entry = get().blobUrls.get(key);\n if (!entry) return;\n\n if (entry.refCount <= 1) {\n // Last reference - revoke and remove\n cacheDebug.debug(`Blob URL revoked: ${key}`);\n URL.revokeObjectURL(entry.url);\n set(\n (state) => {\n const newMap = new Map(state.blobUrls);\n newMap.delete(key);\n return { blobUrls: newMap };\n },\n false,\n 'blobUrl/revoke'\n );\n } else {\n // Decrement ref count\n cacheDebug.debug(`Blob URL released: ${key}`, { refCount: entry.refCount - 1 });\n set(\n (state) => ({\n blobUrls: new Map(state.blobUrls).set(key, {\n ...entry,\n refCount: entry.refCount - 1,\n }),\n }),\n false,\n 'blobUrl/decrementRef'\n );\n }\n },\n\n hasBlobUrl: (key) => get().blobUrls.has(key),\n\n // ========== Image Cache ==========\n\n cacheDimensions: (src, dims) => {\n set(\n (state) => ({\n imageDimensions: new Map(state.imageDimensions).set(src, dims),\n }),\n false,\n 'image/cacheDimensions'\n );\n },\n\n getDimensions: (src) => get().imageDimensions.get(src) ?? null,\n\n // ========== Audio Cache ==========\n\n saveAudioPosition: (uri, time) => {\n set(\n (state) => ({\n audioPlaybackPositions: new Map(state.audioPlaybackPositions).set(\n uri,\n time\n ),\n }),\n false,\n 'audio/savePosition'\n );\n },\n\n getAudioPosition: (uri) =>\n get().audioPlaybackPositions.get(uri) ?? null,\n\n getEffectConfig: (key) => get().audioEffectConfigs.get(key) ?? null,\n\n cacheEffectConfig: (key, config) => {\n set(\n (state) => ({\n audioEffectConfigs: new Map(state.audioEffectConfigs).set(\n key,\n config\n ),\n }),\n false,\n 'audio/cacheEffectConfig'\n );\n },\n\n // ========== Video Cache ==========\n\n getOrCreateStreamUrl: (sessionId, path, generator) => {\n const key = `${sessionId}:${path}`;\n const cached = get().videoStreamUrls.get(key);\n\n // Return if fresh\n if (cached && Date.now() - cached.timestamp < STREAM_URL_TTL) {\n return cached.url;\n }\n\n // Generate and cache\n const url = generator(sessionId, path);\n set(\n (state) => ({\n videoStreamUrls: new Map(state.videoStreamUrls).set(key, {\n url,\n timestamp: Date.now(),\n }),\n }),\n false,\n 'video/cacheStreamUrl'\n );\n return url;\n },\n\n getPosterUrl: (title) => get().videoPosterUrls.get(title) ?? null,\n\n cachePosterUrl: (title, url) => {\n set(\n (state) => ({\n videoPosterUrls: new Map(state.videoPosterUrls).set(title, url),\n }),\n false,\n 'video/cachePosterUrl'\n );\n },\n\n saveVideoPosition: (key, time) => {\n set(\n (state) => ({\n videoPlaybackPositions: new Map(state.videoPlaybackPositions).set(\n key,\n time\n ),\n }),\n false,\n 'video/savePosition'\n );\n },\n\n getVideoPosition: (key) =>\n get().videoPlaybackPositions.get(key) ?? null,\n\n cacheVideoMetadata: (url, meta) => {\n set(\n (state) => ({\n videoMetadata: new Map(state.videoMetadata).set(url, meta),\n }),\n false,\n 'video/cacheMetadata'\n );\n },\n\n getVideoMetadata: (url) => get().videoMetadata.get(url) ?? null,\n\n invalidateSession: (sessionId) => {\n set(\n (state) => {\n const newUrls = new Map(state.videoStreamUrls);\n for (const [key] of newUrls) {\n if (key.startsWith(`${sessionId}:`)) {\n newUrls.delete(key);\n }\n }\n return { videoStreamUrls: newUrls };\n },\n false,\n 'video/invalidateSession'\n );\n },\n\n getVideoPlayerSettings: () => get().videoPlayerSettings,\n\n saveVideoPlayerSettings: (settings) => {\n set(\n (state) => ({\n videoPlayerSettings: { ...state.videoPlayerSettings, ...settings },\n }),\n false,\n 'video/savePlayerSettings'\n );\n },\n\n // ========== Global ==========\n\n clearCache: () => {\n const stats = get().getCacheStats();\n cacheDebug.info('Clearing cache', stats);\n // Revoke all blob URLs before clearing\n get().blobUrls.forEach(({ url }) => URL.revokeObjectURL(url));\n set(initialState, false, 'clearCache');\n },\n\n getCacheStats: () => ({\n blobUrls: get().blobUrls.size,\n dimensions: get().imageDimensions.size,\n audioPositions: get().audioPlaybackPositions.size,\n videoPositions: get().videoPlaybackPositions.size,\n }),\n }),\n {\n name: 'media-cache-storage',\n // Only persist playback positions, poster URLs, and player settings\n partialize: (state) => ({\n audioPlaybackPositions: Array.from(\n state.audioPlaybackPositions.entries()\n ),\n videoPlaybackPositions: Array.from(\n state.videoPlaybackPositions.entries()\n ),\n videoPosterUrls: Array.from(state.videoPosterUrls.entries()),\n videoPlayerSettings: state.videoPlayerSettings,\n }),\n // Rehydrate Maps from arrays\n onRehydrateStorage: () => (state) => {\n if (state) {\n // Type assertion for persisted data\n const persistedAudio = state.audioPlaybackPositions as unknown;\n const persistedVideo = state.videoPlaybackPositions as unknown;\n const persistedPosters = state.videoPosterUrls as unknown;\n const persistedSettings = state.videoPlayerSettings as unknown;\n\n state.audioPlaybackPositions = new Map(\n Array.isArray(persistedAudio)\n ? (persistedAudio as [string, number][])\n : []\n );\n state.videoPlaybackPositions = new Map(\n Array.isArray(persistedVideo)\n ? (persistedVideo as [string, number][])\n : []\n );\n state.videoPosterUrls = new Map(\n Array.isArray(persistedPosters)\n ? (persistedPosters as [string, string][])\n : []\n );\n // Merge persisted settings with defaults (handles missing fields)\n state.videoPlayerSettings = {\n ...DEFAULT_VIDEO_SETTINGS,\n ...(persistedSettings && typeof persistedSettings === 'object'\n ? (persistedSettings as Partial<VideoPlayerSettings>)\n : {}),\n };\n }\n },\n }\n ),\n { name: 'MediaCacheStore' }\n )\n);\n\n// ========== Selective Hooks ==========\n\n/**\n * Hook for image-related cache operations\n * Uses useShallow to prevent infinite re-renders\n */\nexport const useImageCache = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n getOrCreateBlobUrl: state.getOrCreateBlobUrl,\n releaseBlobUrl: state.releaseBlobUrl,\n hasBlobUrl: state.hasBlobUrl,\n cacheDimensions: state.cacheDimensions,\n getDimensions: state.getDimensions,\n }))\n );\n\n/**\n * Hook for audio-related cache operations\n * Uses useShallow to prevent infinite re-renders\n */\nexport const useAudioCache = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n getOrCreateBlobUrl: state.getOrCreateBlobUrl,\n releaseBlobUrl: state.releaseBlobUrl,\n hasBlobUrl: state.hasBlobUrl,\n saveAudioPosition: state.saveAudioPosition,\n getAudioPosition: state.getAudioPosition,\n getEffectConfig: state.getEffectConfig,\n cacheEffectConfig: state.cacheEffectConfig,\n }))\n );\n\n/**\n * Hook for video-related cache operations\n * Uses useShallow to prevent infinite re-renders\n */\nexport const useVideoCache = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n getOrCreateBlobUrl: state.getOrCreateBlobUrl,\n releaseBlobUrl: state.releaseBlobUrl,\n hasBlobUrl: state.hasBlobUrl,\n getOrCreateStreamUrl: state.getOrCreateStreamUrl,\n getPosterUrl: state.getPosterUrl,\n cachePosterUrl: state.cachePosterUrl,\n saveVideoPosition: state.saveVideoPosition,\n getVideoPosition: state.getVideoPosition,\n cacheVideoMetadata: state.cacheVideoMetadata,\n getVideoMetadata: state.getVideoMetadata,\n invalidateSession: state.invalidateSession,\n getVideoPlayerSettings: state.getVideoPlayerSettings,\n saveVideoPlayerSettings: state.saveVideoPlayerSettings,\n }))\n );\n\n/**\n * Hook for video player settings only\n * Returns current settings and save function\n */\nexport const useVideoPlayerSettings = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n settings: state.videoPlayerSettings,\n saveSettings: state.saveVideoPlayerSettings,\n }))\n );\n\n/**\n * Hook for blob URL cleanup on unmount\n */\nexport function useBlobUrlCleanup(key: string | null) {\n const releaseBlobUrl = useMediaCacheStore((s) => s.releaseBlobUrl);\n\n // Using inline effect to avoid importing useEffect in store\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { useEffect } = require('react');\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n return () => {\n if (key) {\n releaseBlobUrl(key);\n }\n };\n }, [key, releaseBlobUrl]);\n }\n}\n\n// ========== Utilities ==========\n\n/**\n * Generate a cache key from ArrayBuffer content\n * Uses first and last 1KB + length for fast hashing\n */\nexport function generateContentKey(content: ArrayBuffer): string {\n const arr = new Uint8Array(content);\n const len = arr.length;\n\n // Take first 1KB\n const start = arr.slice(0, Math.min(1024, len));\n // Take last 1KB\n const end = arr.slice(Math.max(0, len - 1024));\n\n // Simple hash from bytes\n let hash = len;\n for (let i = 0; i < start.length; i++) {\n hash = ((hash << 5) - hash + start[i]) | 0;\n }\n for (let i = 0; i < end.length; i++) {\n hash = ((hash << 5) - hash + end[i]) | 0;\n }\n\n return `blob-${len}-${hash.toString(16)}`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/stores/mediaCache.ts"],"names":["createLogger","create","devtools","persist","__name","useShallow","__require"],"mappings":"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","file":"chunk-YW5IVWHQ.cjs","sourcesContent":["'use client';\n\nimport { create } from 'zustand';\nimport { devtools, persist } from 'zustand/middleware';\nimport { useShallow } from 'zustand/react/shallow';\n\nimport { createLogger } from '@djangocfg/ui-core/lib';\n\nconst cacheDebug = createLogger('MediaCache');\n\n// Types\ninterface BlobUrlEntry {\n url: string;\n refCount: number;\n createdAt: number;\n}\n\ninterface ImageDimensions {\n width: number;\n height: number;\n}\n\ninterface VideoMetadata {\n duration: number;\n width: number;\n height: number;\n codec?: string;\n}\n\ninterface EffectConfig {\n opacity: number;\n scale: number;\n blur: string;\n}\n\n/** Video player settings (persisted) */\ninterface VideoPlayerSettings {\n volume: number;\n isLooping: boolean;\n}\n\n// Stream URL TTL (30 seconds - shorter to avoid stale session/token issues)\nconst STREAM_URL_TTL = 30 * 1000;\n\ninterface MediaCacheState {\n // Blob URL cache (shared by Image, Audio, Video)\n blobUrls: Map<string, BlobUrlEntry>;\n\n // Image-specific\n imageDimensions: Map<string, ImageDimensions>;\n\n // Audio-specific\n audioPlaybackPositions: Map<string, number>;\n audioEffectConfigs: Map<string, EffectConfig>;\n\n // Video-specific\n videoStreamUrls: Map<string, { url: string; timestamp: number }>;\n videoPosterUrls: Map<string, string>;\n videoPlaybackPositions: Map<string, number>;\n videoMetadata: Map<string, VideoMetadata>;\n videoPlayerSettings: VideoPlayerSettings;\n}\n\ninterface MediaCacheActions {\n // Blob URL management (shared)\n getOrCreateBlobUrl: (\n key: string,\n content: ArrayBuffer,\n mimeType: string\n ) => string;\n releaseBlobUrl: (key: string) => void;\n hasBlobUrl: (key: string) => boolean;\n\n // Image actions\n cacheDimensions: (src: string, dims: ImageDimensions) => void;\n getDimensions: (src: string) => ImageDimensions | null;\n\n // Audio actions\n saveAudioPosition: (uri: string, time: number) => void;\n getAudioPosition: (uri: string) => number | null;\n getEffectConfig: (key: string) => EffectConfig | null;\n cacheEffectConfig: (key: string, config: EffectConfig) => void;\n\n // Video actions\n getOrCreateStreamUrl: (\n sessionId: string,\n path: string,\n generator: (sessionId: string, path: string) => string\n ) => string;\n getPosterUrl: (title: string) => string | null;\n cachePosterUrl: (title: string, url: string) => void;\n saveVideoPosition: (key: string, time: number) => void;\n getVideoPosition: (key: string) => number | null;\n cacheVideoMetadata: (url: string, meta: VideoMetadata) => void;\n getVideoMetadata: (url: string) => VideoMetadata | null;\n invalidateSession: (sessionId: string) => void;\n getVideoPlayerSettings: () => VideoPlayerSettings;\n saveVideoPlayerSettings: (settings: Partial<VideoPlayerSettings>) => void;\n\n // Global\n clearCache: () => void;\n getCacheStats: () => {\n blobUrls: number;\n dimensions: number;\n audioPositions: number;\n videoPositions: number;\n };\n}\n\ntype MediaCacheStore = MediaCacheState & MediaCacheActions;\n\n// Initial state\nconst DEFAULT_VIDEO_SETTINGS: VideoPlayerSettings = {\n volume: 1,\n isLooping: false,\n};\n\nconst initialState: MediaCacheState = {\n blobUrls: new Map(),\n imageDimensions: new Map(),\n audioPlaybackPositions: new Map(),\n audioEffectConfigs: new Map(),\n videoStreamUrls: new Map(),\n videoPosterUrls: new Map(),\n videoPlaybackPositions: new Map(),\n videoMetadata: new Map(),\n videoPlayerSettings: DEFAULT_VIDEO_SETTINGS,\n};\n\nexport const useMediaCacheStore = create<MediaCacheStore>()(\n devtools(\n persist(\n (set, get) => ({\n ...initialState,\n\n // ========== Blob URL Management ==========\n\n getOrCreateBlobUrl: (key, content, mimeType) => {\n const existing = get().blobUrls.get(key);\n if (existing) {\n // Increment ref count\n cacheDebug.debug(`Blob URL reused: ${key}`, { refCount: existing.refCount + 1 });\n set(\n (state) => ({\n blobUrls: new Map(state.blobUrls).set(key, {\n ...existing,\n refCount: existing.refCount + 1,\n }),\n }),\n false,\n 'blobUrl/incrementRef'\n );\n return existing.url;\n }\n\n // Create new blob URL\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const sizeMB = (content.byteLength / 1024 / 1024).toFixed(2);\n cacheDebug.debug(`Blob URL created: ${key}`, { mimeType, size: `${sizeMB}MB` });\n set(\n (state) => ({\n blobUrls: new Map(state.blobUrls).set(key, {\n url,\n refCount: 1,\n createdAt: Date.now(),\n }),\n }),\n false,\n 'blobUrl/create'\n );\n return url;\n },\n\n releaseBlobUrl: (key) => {\n const entry = get().blobUrls.get(key);\n if (!entry) return;\n\n if (entry.refCount <= 1) {\n // Last reference - revoke and remove\n cacheDebug.debug(`Blob URL revoked: ${key}`);\n URL.revokeObjectURL(entry.url);\n set(\n (state) => {\n const newMap = new Map(state.blobUrls);\n newMap.delete(key);\n return { blobUrls: newMap };\n },\n false,\n 'blobUrl/revoke'\n );\n } else {\n // Decrement ref count\n cacheDebug.debug(`Blob URL released: ${key}`, { refCount: entry.refCount - 1 });\n set(\n (state) => ({\n blobUrls: new Map(state.blobUrls).set(key, {\n ...entry,\n refCount: entry.refCount - 1,\n }),\n }),\n false,\n 'blobUrl/decrementRef'\n );\n }\n },\n\n hasBlobUrl: (key) => get().blobUrls.has(key),\n\n // ========== Image Cache ==========\n\n cacheDimensions: (src, dims) => {\n set(\n (state) => ({\n imageDimensions: new Map(state.imageDimensions).set(src, dims),\n }),\n false,\n 'image/cacheDimensions'\n );\n },\n\n getDimensions: (src) => get().imageDimensions.get(src) ?? null,\n\n // ========== Audio Cache ==========\n\n saveAudioPosition: (uri, time) => {\n set(\n (state) => ({\n audioPlaybackPositions: new Map(state.audioPlaybackPositions).set(\n uri,\n time\n ),\n }),\n false,\n 'audio/savePosition'\n );\n },\n\n getAudioPosition: (uri) =>\n get().audioPlaybackPositions.get(uri) ?? null,\n\n getEffectConfig: (key) => get().audioEffectConfigs.get(key) ?? null,\n\n cacheEffectConfig: (key, config) => {\n set(\n (state) => ({\n audioEffectConfigs: new Map(state.audioEffectConfigs).set(\n key,\n config\n ),\n }),\n false,\n 'audio/cacheEffectConfig'\n );\n },\n\n // ========== Video Cache ==========\n\n getOrCreateStreamUrl: (sessionId, path, generator) => {\n const key = `${sessionId}:${path}`;\n const cached = get().videoStreamUrls.get(key);\n\n // Return if fresh\n if (cached && Date.now() - cached.timestamp < STREAM_URL_TTL) {\n return cached.url;\n }\n\n // Generate and cache\n const url = generator(sessionId, path);\n set(\n (state) => ({\n videoStreamUrls: new Map(state.videoStreamUrls).set(key, {\n url,\n timestamp: Date.now(),\n }),\n }),\n false,\n 'video/cacheStreamUrl'\n );\n return url;\n },\n\n getPosterUrl: (title) => get().videoPosterUrls.get(title) ?? null,\n\n cachePosterUrl: (title, url) => {\n set(\n (state) => ({\n videoPosterUrls: new Map(state.videoPosterUrls).set(title, url),\n }),\n false,\n 'video/cachePosterUrl'\n );\n },\n\n saveVideoPosition: (key, time) => {\n set(\n (state) => ({\n videoPlaybackPositions: new Map(state.videoPlaybackPositions).set(\n key,\n time\n ),\n }),\n false,\n 'video/savePosition'\n );\n },\n\n getVideoPosition: (key) =>\n get().videoPlaybackPositions.get(key) ?? null,\n\n cacheVideoMetadata: (url, meta) => {\n set(\n (state) => ({\n videoMetadata: new Map(state.videoMetadata).set(url, meta),\n }),\n false,\n 'video/cacheMetadata'\n );\n },\n\n getVideoMetadata: (url) => get().videoMetadata.get(url) ?? null,\n\n invalidateSession: (sessionId) => {\n set(\n (state) => {\n const newUrls = new Map(state.videoStreamUrls);\n for (const [key] of newUrls) {\n if (key.startsWith(`${sessionId}:`)) {\n newUrls.delete(key);\n }\n }\n return { videoStreamUrls: newUrls };\n },\n false,\n 'video/invalidateSession'\n );\n },\n\n getVideoPlayerSettings: () => get().videoPlayerSettings,\n\n saveVideoPlayerSettings: (settings) => {\n set(\n (state) => ({\n videoPlayerSettings: { ...state.videoPlayerSettings, ...settings },\n }),\n false,\n 'video/savePlayerSettings'\n );\n },\n\n // ========== Global ==========\n\n clearCache: () => {\n const stats = get().getCacheStats();\n cacheDebug.info('Clearing cache', stats);\n // Revoke all blob URLs before clearing\n get().blobUrls.forEach(({ url }) => URL.revokeObjectURL(url));\n set(initialState, false, 'clearCache');\n },\n\n getCacheStats: () => ({\n blobUrls: get().blobUrls.size,\n dimensions: get().imageDimensions.size,\n audioPositions: get().audioPlaybackPositions.size,\n videoPositions: get().videoPlaybackPositions.size,\n }),\n }),\n {\n name: 'media-cache-storage',\n // Only persist playback positions, poster URLs, and player settings\n partialize: (state) => ({\n audioPlaybackPositions: Array.from(\n state.audioPlaybackPositions.entries()\n ),\n videoPlaybackPositions: Array.from(\n state.videoPlaybackPositions.entries()\n ),\n videoPosterUrls: Array.from(state.videoPosterUrls.entries()),\n videoPlayerSettings: state.videoPlayerSettings,\n }),\n // Rehydrate Maps from arrays\n onRehydrateStorage: () => (state) => {\n if (state) {\n // Type assertion for persisted data\n const persistedAudio = state.audioPlaybackPositions as unknown;\n const persistedVideo = state.videoPlaybackPositions as unknown;\n const persistedPosters = state.videoPosterUrls as unknown;\n const persistedSettings = state.videoPlayerSettings as unknown;\n\n state.audioPlaybackPositions = new Map(\n Array.isArray(persistedAudio)\n ? (persistedAudio as [string, number][])\n : []\n );\n state.videoPlaybackPositions = new Map(\n Array.isArray(persistedVideo)\n ? (persistedVideo as [string, number][])\n : []\n );\n state.videoPosterUrls = new Map(\n Array.isArray(persistedPosters)\n ? (persistedPosters as [string, string][])\n : []\n );\n // Merge persisted settings with defaults (handles missing fields)\n state.videoPlayerSettings = {\n ...DEFAULT_VIDEO_SETTINGS,\n ...(persistedSettings && typeof persistedSettings === 'object'\n ? (persistedSettings as Partial<VideoPlayerSettings>)\n : {}),\n };\n }\n },\n }\n ),\n { name: 'MediaCacheStore' }\n )\n);\n\n// ========== Selective Hooks ==========\n\n/**\n * Hook for image-related cache operations\n * Uses useShallow to prevent infinite re-renders\n */\nexport const useImageCache = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n getOrCreateBlobUrl: state.getOrCreateBlobUrl,\n releaseBlobUrl: state.releaseBlobUrl,\n hasBlobUrl: state.hasBlobUrl,\n cacheDimensions: state.cacheDimensions,\n getDimensions: state.getDimensions,\n }))\n );\n\n/**\n * Hook for audio-related cache operations\n * Uses useShallow to prevent infinite re-renders\n */\nexport const useAudioCache = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n getOrCreateBlobUrl: state.getOrCreateBlobUrl,\n releaseBlobUrl: state.releaseBlobUrl,\n hasBlobUrl: state.hasBlobUrl,\n saveAudioPosition: state.saveAudioPosition,\n getAudioPosition: state.getAudioPosition,\n getEffectConfig: state.getEffectConfig,\n cacheEffectConfig: state.cacheEffectConfig,\n }))\n );\n\n/**\n * Hook for video-related cache operations\n * Uses useShallow to prevent infinite re-renders\n */\nexport const useVideoCache = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n getOrCreateBlobUrl: state.getOrCreateBlobUrl,\n releaseBlobUrl: state.releaseBlobUrl,\n hasBlobUrl: state.hasBlobUrl,\n getOrCreateStreamUrl: state.getOrCreateStreamUrl,\n getPosterUrl: state.getPosterUrl,\n cachePosterUrl: state.cachePosterUrl,\n saveVideoPosition: state.saveVideoPosition,\n getVideoPosition: state.getVideoPosition,\n cacheVideoMetadata: state.cacheVideoMetadata,\n getVideoMetadata: state.getVideoMetadata,\n invalidateSession: state.invalidateSession,\n getVideoPlayerSettings: state.getVideoPlayerSettings,\n saveVideoPlayerSettings: state.saveVideoPlayerSettings,\n }))\n );\n\n/**\n * Hook for video player settings only\n * Returns current settings and save function\n */\nexport const useVideoPlayerSettings = () =>\n useMediaCacheStore(\n useShallow((state) => ({\n settings: state.videoPlayerSettings,\n saveSettings: state.saveVideoPlayerSettings,\n }))\n );\n\n/**\n * Hook for blob URL cleanup on unmount\n */\nexport function useBlobUrlCleanup(key: string | null) {\n const releaseBlobUrl = useMediaCacheStore((s) => s.releaseBlobUrl);\n\n // Using inline effect to avoid importing useEffect in store\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { useEffect } = require('react');\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n return () => {\n if (key) {\n releaseBlobUrl(key);\n }\n };\n }, [key, releaseBlobUrl]);\n }\n}\n\n// ========== Utilities ==========\n\n/**\n * Generate a cache key from ArrayBuffer content\n * Uses first and last 1KB + length for fast hashing\n */\nexport function generateContentKey(content: ArrayBuffer): string {\n const arr = new Uint8Array(content);\n const len = arr.length;\n\n // Take first 1KB\n const start = arr.slice(0, Math.min(1024, len));\n // Take last 1KB\n const end = arr.slice(Math.max(0, len - 1024));\n\n // Simple hash from bytes\n let hash = len;\n for (let i = 0; i < start.length; i++) {\n hash = ((hash << 5) - hash + start[i]) | 0;\n }\n for (let i = 0; i < end.length; i++) {\n hash = ((hash << 5) - hash + end[i]) | 0;\n }\n\n return `blob-${len}-${hash.toString(16)}`;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkOLISEQHS_cjs = require('./chunk-OLISEQHS.cjs');
|
|
4
4
|
var lib = require('@djangocfg/ui-core/lib');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var lucideReact = require('lucide-react');
|
|
@@ -12,7 +12,7 @@ function TreeSkeleton({ rows = 6, className }) {
|
|
|
12
12
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-3 flex-1 animate-pulse rounded bg-muted" })
|
|
13
13
|
] }, i)) });
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
chunkOLISEQHS_cjs.__name(TreeSkeleton, "TreeSkeleton");
|
|
16
16
|
function TreeError({ children, className }) {
|
|
17
17
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18
18
|
"div",
|
|
@@ -29,7 +29,7 @@ function TreeError({ children, className }) {
|
|
|
29
29
|
}
|
|
30
30
|
);
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
chunkOLISEQHS_cjs.__name(TreeError, "TreeError");
|
|
33
33
|
|
|
34
34
|
// src/tools/Tree/data/createDemoTree.ts
|
|
35
35
|
function createDemoTree({
|
|
@@ -37,7 +37,7 @@ function createDemoTree({
|
|
|
37
37
|
breadth = 4,
|
|
38
38
|
rootPrefix = "node"
|
|
39
39
|
} = {}) {
|
|
40
|
-
const make = /* @__PURE__ */
|
|
40
|
+
const make = /* @__PURE__ */ chunkOLISEQHS_cjs.__name((id, name, level) => {
|
|
41
41
|
if (level >= depth) {
|
|
42
42
|
return { id, data: { name } };
|
|
43
43
|
}
|
|
@@ -54,10 +54,10 @@ function createDemoTree({
|
|
|
54
54
|
}
|
|
55
55
|
return roots;
|
|
56
56
|
}
|
|
57
|
-
|
|
57
|
+
chunkOLISEQHS_cjs.__name(createDemoTree, "createDemoTree");
|
|
58
58
|
|
|
59
59
|
exports.TreeError = TreeError;
|
|
60
60
|
exports.TreeSkeleton = TreeSkeleton;
|
|
61
61
|
exports.createDemoTree = createDemoTree;
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
63
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-YXZ6GU7H.cjs.map
|
|
63
|
+
//# sourceMappingURL=chunk-YXZ6GU7H.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tools/Tree/components/TreeSkeleton.tsx","../src/tools/Tree/components/TreeError.tsx","../src/tools/Tree/data/createDemoTree.ts"],"names":["jsx","cn","jsxs","__name","AlertCircle"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/tools/Tree/components/TreeSkeleton.tsx","../src/tools/Tree/components/TreeError.tsx","../src/tools/Tree/data/createDemoTree.ts"],"names":["jsx","cn","jsxs","__name","AlertCircle"],"mappings":"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","file":"chunk-YXZ6GU7H.cjs","sourcesContent":["'use client';\n\nimport { cn } from '@djangocfg/ui-core/lib';\n\nexport interface TreeSkeletonProps {\n rows?: number;\n className?: string;\n}\n\nexport function TreeSkeleton({ rows = 6, className }: TreeSkeletonProps) {\n return (\n <div className={cn('flex flex-col gap-1 p-2', className)} aria-hidden>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2\" style={{ paddingLeft: (i % 3) * 16 }}>\n <span className=\"size-4 shrink-0 animate-pulse rounded bg-muted\" />\n <span className=\"size-4 shrink-0 animate-pulse rounded bg-muted\" />\n <span className=\"h-3 flex-1 animate-pulse rounded bg-muted\" />\n </div>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport { AlertCircle } from 'lucide-react';\nimport { cn } from '@djangocfg/ui-core/lib';\n\nexport interface TreeErrorProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function TreeError({ children, className }: TreeErrorProps) {\n return (\n <div\n className={cn(\n 'flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive',\n className,\n )}\n role=\"alert\"\n >\n <AlertCircle aria-hidden className=\"mt-0.5 size-4 shrink-0\" />\n <span>{children}</span>\n </div>\n );\n}\n","'use client';\n\nimport type { TreeNode } from '../types';\n\nexport interface DemoNode {\n name: string;\n}\n\n/**\n * Build a deterministic synthetic tree for stories and tests.\n *\n * @example\n * const data = createDemoTree({ depth: 4, breadth: 3 });\n * <TreeRoot data={data} getItemName={(n) => n.data.name} />\n */\nexport function createDemoTree({\n depth = 3,\n breadth = 4,\n rootPrefix = 'node',\n}: {\n depth?: number;\n breadth?: number;\n rootPrefix?: string;\n} = {}): TreeNode<DemoNode>[] {\n const make = (id: string, name: string, level: number): TreeNode<DemoNode> => {\n if (level >= depth) {\n return { id, data: { name } };\n }\n const children: TreeNode<DemoNode>[] = [];\n for (let i = 0; i < breadth; i++) {\n const childId = `${id}/${i}`;\n children.push(make(childId, `${name}-${i}`, level + 1));\n }\n return { id, data: { name }, children };\n };\n\n const roots: TreeNode<DemoNode>[] = [];\n for (let i = 0; i < breadth; i++) {\n roots.push(make(`${rootPrefix}-${i}`, `${rootPrefix} ${i}`, 1));\n }\n return roots;\n}\n"]}
|