@djangocfg/ui-tools 2.1.390 → 2.1.394

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.
Files changed (184) hide show
  1. package/README.md +7 -10
  2. package/dist/chunk-PAWJFY3S.mjs +6 -0
  3. package/dist/{chunk-N2XQF2OL.mjs.map → chunk-PAWJFY3S.mjs.map} +1 -1
  4. package/dist/chunk-PK6SKIKE.cjs +8 -0
  5. package/dist/{chunk-OLISEQHS.cjs.map → chunk-PK6SKIKE.cjs.map} +1 -1
  6. package/dist/file-icon/index.cjs +6 -6
  7. package/dist/file-icon/index.d.cts +1 -1
  8. package/dist/file-icon/index.d.ts +1 -1
  9. package/dist/file-icon/index.mjs +1 -1
  10. package/dist/tree/index.cjs +1372 -143
  11. package/dist/tree/index.cjs.map +1 -1
  12. package/dist/tree/index.d.cts +2 -2
  13. package/dist/tree/index.d.ts +2 -2
  14. package/dist/tree/index.mjs +1322 -3
  15. package/dist/tree/index.mjs.map +1 -1
  16. package/dist/{types-CevSbyfD.d.cts → types-B_zhyAqR.d.cts} +1 -1
  17. package/dist/{types-CevSbyfD.d.ts → types-B_zhyAqR.d.ts} +1 -1
  18. package/package.json +6 -14
  19. package/src/tools/AudioPlayer/README.md +4 -4
  20. package/src/tools/Chat/README.md +6 -6
  21. package/src/tools/CronScheduler/index.tsx +1 -1
  22. package/src/tools/CronScheduler/lazy.tsx +1 -1
  23. package/src/tools/ImageViewer/README.md +1 -1
  24. package/src/tools/JsonForm/README.md +2 -2
  25. package/src/tools/MarkdownEditor/README.md +3 -3
  26. package/src/tools/MarkdownMessage/README.md +2 -2
  27. package/src/tools/OpenapiViewer/components/DocsLayout/grouping.ts +5 -1
  28. package/src/tools/PrettyCode/lazy.tsx +6 -0
  29. package/src/tools/SpeechRecognition/README.md +1 -1
  30. package/dist/ChatRoot-EFNXQXXN.cjs +0 -15
  31. package/dist/ChatRoot-EFNXQXXN.cjs.map +0 -1
  32. package/dist/ChatRoot-FITF5RVP.mjs +0 -6
  33. package/dist/ChatRoot-FITF5RVP.mjs.map +0 -1
  34. package/dist/ChatRoot-PNNGQCYF.css +0 -7
  35. package/dist/ChatRoot-PNNGQCYF.css.map +0 -1
  36. package/dist/CronScheduler.client-DLMXCPAJ.mjs +0 -67
  37. package/dist/CronScheduler.client-DLMXCPAJ.mjs.map +0 -1
  38. package/dist/CronScheduler.client-WEJF4PWQ.cjs +0 -72
  39. package/dist/CronScheduler.client-WEJF4PWQ.cjs.map +0 -1
  40. package/dist/DictationField-AS2F33WI.cjs +0 -13
  41. package/dist/DictationField-AS2F33WI.cjs.map +0 -1
  42. package/dist/DictationField-WPONUCYE.mjs +0 -4
  43. package/dist/DictationField-WPONUCYE.mjs.map +0 -1
  44. package/dist/DocsLayout-EKASBSP7.mjs +0 -3448
  45. package/dist/DocsLayout-EKASBSP7.mjs.map +0 -1
  46. package/dist/DocsLayout-MBFIB4NO.css +0 -7
  47. package/dist/DocsLayout-MBFIB4NO.css.map +0 -1
  48. package/dist/DocsLayout-OURFYWQE.cjs +0 -3455
  49. package/dist/DocsLayout-OURFYWQE.cjs.map +0 -1
  50. package/dist/JsonSchemaForm-DD7CLRIG.cjs +0 -13
  51. package/dist/JsonSchemaForm-DD7CLRIG.cjs.map +0 -1
  52. package/dist/JsonSchemaForm-XKUIVELK.mjs +0 -4
  53. package/dist/JsonSchemaForm-XKUIVELK.mjs.map +0 -1
  54. package/dist/JsonTree-43PQAJKY.mjs +0 -5
  55. package/dist/JsonTree-43PQAJKY.mjs.map +0 -1
  56. package/dist/JsonTree-MLET23ZA.css +0 -7
  57. package/dist/JsonTree-MLET23ZA.css.map +0 -1
  58. package/dist/JsonTree-X6W5YEVY.cjs +0 -11
  59. package/dist/JsonTree-X6W5YEVY.cjs.map +0 -1
  60. package/dist/LottiePlayer.client-2S7ISJ2S.cjs +0 -168
  61. package/dist/LottiePlayer.client-2S7ISJ2S.cjs.map +0 -1
  62. package/dist/LottiePlayer.client-5LDSSJWS.mjs +0 -161
  63. package/dist/LottiePlayer.client-5LDSSJWS.mjs.map +0 -1
  64. package/dist/MapContainer-AKIPABJK.mjs +0 -4
  65. package/dist/MapContainer-AKIPABJK.mjs.map +0 -1
  66. package/dist/MapContainer-STVDMC36.cjs +0 -17
  67. package/dist/MapContainer-STVDMC36.cjs.map +0 -1
  68. package/dist/Mermaid.client-DDXWXZXY.css +0 -7
  69. package/dist/Mermaid.client-DDXWXZXY.css.map +0 -1
  70. package/dist/Mermaid.client-NL4SVR7F.mjs +0 -481
  71. package/dist/Mermaid.client-NL4SVR7F.mjs.map +0 -1
  72. package/dist/Mermaid.client-NNTI6DFX.cjs +0 -487
  73. package/dist/Mermaid.client-NNTI6DFX.cjs.map +0 -1
  74. package/dist/Player-BRV7XTWR.mjs +0 -4
  75. package/dist/Player-BRV7XTWR.mjs.map +0 -1
  76. package/dist/Player-PM7F7DD7.cjs +0 -13
  77. package/dist/Player-PM7F7DD7.cjs.map +0 -1
  78. package/dist/Player-ZGQKKOWI.css +0 -66
  79. package/dist/Player-ZGQKKOWI.css.map +0 -1
  80. package/dist/PrettyCode.client-GWFAIVFN.css +0 -7
  81. package/dist/PrettyCode.client-GWFAIVFN.css.map +0 -1
  82. package/dist/PrettyCode.client-KOHDVPPN.cjs +0 -285
  83. package/dist/PrettyCode.client-KOHDVPPN.cjs.map +0 -1
  84. package/dist/PrettyCode.client-ZGYGKE7G.mjs +0 -283
  85. package/dist/PrettyCode.client-ZGYGKE7G.mjs.map +0 -1
  86. package/dist/TreeRoot-5COOOSWG.mjs +0 -4
  87. package/dist/TreeRoot-5COOOSWG.mjs.map +0 -1
  88. package/dist/TreeRoot-AABP2J6Y.cjs +0 -19
  89. package/dist/TreeRoot-AABP2J6Y.cjs.map +0 -1
  90. package/dist/chunk-2NG4SXEP.mjs +0 -743
  91. package/dist/chunk-2NG4SXEP.mjs.map +0 -1
  92. package/dist/chunk-4LFB7I5K.cjs +0 -1387
  93. package/dist/chunk-4LFB7I5K.cjs.map +0 -1
  94. package/dist/chunk-5D2OCOPQ.cjs +0 -222
  95. package/dist/chunk-5D2OCOPQ.cjs.map +0 -1
  96. package/dist/chunk-5I5QNGUG.cjs +0 -611
  97. package/dist/chunk-5I5QNGUG.cjs.map +0 -1
  98. package/dist/chunk-6ZX2G25W.mjs +0 -1361
  99. package/dist/chunk-6ZX2G25W.mjs.map +0 -1
  100. package/dist/chunk-76NNDZH6.cjs +0 -1061
  101. package/dist/chunk-76NNDZH6.cjs.map +0 -1
  102. package/dist/chunk-7CWGZPO3.mjs +0 -214
  103. package/dist/chunk-7CWGZPO3.mjs.map +0 -1
  104. package/dist/chunk-7EYHNP3E.cjs +0 -965
  105. package/dist/chunk-7EYHNP3E.cjs.map +0 -1
  106. package/dist/chunk-7IYXZUJO.cjs +0 -769
  107. package/dist/chunk-7IYXZUJO.cjs.map +0 -1
  108. package/dist/chunk-ADEN3UA4.cjs +0 -892
  109. package/dist/chunk-ADEN3UA4.cjs.map +0 -1
  110. package/dist/chunk-B6IR5KSC.mjs +0 -59
  111. package/dist/chunk-B6IR5KSC.mjs.map +0 -1
  112. package/dist/chunk-C6GXVH5J.mjs +0 -338
  113. package/dist/chunk-C6GXVH5J.mjs.map +0 -1
  114. package/dist/chunk-DMX7W4XZ.mjs +0 -1113
  115. package/dist/chunk-DMX7W4XZ.mjs.map +0 -1
  116. package/dist/chunk-ECONRHIG.mjs +0 -212
  117. package/dist/chunk-ECONRHIG.mjs.map +0 -1
  118. package/dist/chunk-FEN5S772.cjs +0 -1227
  119. package/dist/chunk-FEN5S772.cjs.map +0 -1
  120. package/dist/chunk-FP2RLYQZ.cjs +0 -187
  121. package/dist/chunk-FP2RLYQZ.cjs.map +0 -1
  122. package/dist/chunk-FVVF7VCD.cjs +0 -1325
  123. package/dist/chunk-FVVF7VCD.cjs.map +0 -1
  124. package/dist/chunk-GYIO7W7M.mjs +0 -1197
  125. package/dist/chunk-GYIO7W7M.mjs.map +0 -1
  126. package/dist/chunk-KNDLV4PI.cjs +0 -1356
  127. package/dist/chunk-KNDLV4PI.cjs.map +0 -1
  128. package/dist/chunk-KNEQRUBA.mjs +0 -181
  129. package/dist/chunk-KNEQRUBA.mjs.map +0 -1
  130. package/dist/chunk-N2XQF2OL.mjs +0 -14
  131. package/dist/chunk-N4MZYNR4.mjs +0 -1342
  132. package/dist/chunk-N4MZYNR4.mjs.map +0 -1
  133. package/dist/chunk-NTVBIIUD.mjs +0 -1439
  134. package/dist/chunk-NTVBIIUD.mjs.map +0 -1
  135. package/dist/chunk-OBRSGM64.mjs +0 -607
  136. package/dist/chunk-OBRSGM64.mjs.map +0 -1
  137. package/dist/chunk-ODO4GMW7.mjs +0 -79
  138. package/dist/chunk-ODO4GMW7.mjs.map +0 -1
  139. package/dist/chunk-OLISEQHS.cjs +0 -18
  140. package/dist/chunk-PVAX67JG.mjs +0 -1041
  141. package/dist/chunk-PVAX67JG.mjs.map +0 -1
  142. package/dist/chunk-QJ6GTUCO.cjs +0 -81
  143. package/dist/chunk-QJ6GTUCO.cjs.map +0 -1
  144. package/dist/chunk-T3MWM23F.cjs +0 -214
  145. package/dist/chunk-T3MWM23F.cjs.map +0 -1
  146. package/dist/chunk-TBSHZO5R.cjs +0 -1134
  147. package/dist/chunk-TBSHZO5R.cjs.map +0 -1
  148. package/dist/chunk-UNCS5V5F.mjs +0 -887
  149. package/dist/chunk-UNCS5V5F.mjs.map +0 -1
  150. package/dist/chunk-VWQ5WOIL.mjs +0 -2059
  151. package/dist/chunk-VWQ5WOIL.mjs.map +0 -1
  152. package/dist/chunk-W75B7Y6C.cjs +0 -1478
  153. package/dist/chunk-W75B7Y6C.cjs.map +0 -1
  154. package/dist/chunk-Y6UTOBF6.mjs +0 -938
  155. package/dist/chunk-Y6UTOBF6.mjs.map +0 -1
  156. package/dist/chunk-YDPDTOSP.cjs +0 -2061
  157. package/dist/chunk-YDPDTOSP.cjs.map +0 -1
  158. package/dist/chunk-YW5IVWHQ.cjs +0 -346
  159. package/dist/chunk-YW5IVWHQ.cjs.map +0 -1
  160. package/dist/chunk-YXZ6GU7H.cjs +0 -63
  161. package/dist/chunk-YXZ6GU7H.cjs.map +0 -1
  162. package/dist/chunk-ZL7FH4NW.mjs +0 -1274
  163. package/dist/chunk-ZL7FH4NW.mjs.map +0 -1
  164. package/dist/components-EHOGXATG.cjs +0 -22
  165. package/dist/components-EHOGXATG.cjs.map +0 -1
  166. package/dist/components-MQ6DR7TX.cjs +0 -26
  167. package/dist/components-MQ6DR7TX.cjs.map +0 -1
  168. package/dist/components-XRX7QGLB.mjs +0 -5
  169. package/dist/components-XRX7QGLB.mjs.map +0 -1
  170. package/dist/components-YATKRWLH.mjs +0 -5
  171. package/dist/components-YATKRWLH.mjs.map +0 -1
  172. package/dist/index.cjs +0 -3674
  173. package/dist/index.cjs.map +0 -1
  174. package/dist/index.css +0 -234
  175. package/dist/index.css.map +0 -1
  176. package/dist/index.d.cts +0 -4929
  177. package/dist/index.d.ts +0 -4929
  178. package/dist/index.mjs +0 -2912
  179. package/dist/index.mjs.map +0 -1
  180. package/dist/launcher-5Y42OBSN.mjs +0 -6
  181. package/dist/launcher-5Y42OBSN.mjs.map +0 -1
  182. package/dist/launcher-PMW2YB24.cjs +0 -59
  183. package/dist/launcher-PMW2YB24.cjs.map +0 -1
  184. package/src/index.ts +0 -157
@@ -1,346 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkOLISEQHS_cjs = require('./chunk-OLISEQHS.cjs');
4
- var zustand = require('zustand');
5
- var middleware = require('zustand/middleware');
6
- var shallow = require('zustand/react/shallow');
7
- var lib = require('@djangocfg/ui-core/lib');
8
-
9
- var cacheDebug = lib.createLogger("MediaCache");
10
- var STREAM_URL_TTL = 30 * 1e3;
11
- var DEFAULT_VIDEO_SETTINGS = {
12
- volume: 1,
13
- isLooping: false
14
- };
15
- var initialState = {
16
- blobUrls: /* @__PURE__ */ new Map(),
17
- imageDimensions: /* @__PURE__ */ new Map(),
18
- audioPlaybackPositions: /* @__PURE__ */ new Map(),
19
- audioEffectConfigs: /* @__PURE__ */ new Map(),
20
- videoStreamUrls: /* @__PURE__ */ new Map(),
21
- videoPosterUrls: /* @__PURE__ */ new Map(),
22
- videoPlaybackPositions: /* @__PURE__ */ new Map(),
23
- videoMetadata: /* @__PURE__ */ new Map(),
24
- videoPlayerSettings: DEFAULT_VIDEO_SETTINGS
25
- };
26
- var useMediaCacheStore = zustand.create()(
27
- middleware.devtools(
28
- middleware.persist(
29
- (set, get) => ({
30
- ...initialState,
31
- // ========== Blob URL Management ==========
32
- getOrCreateBlobUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key, content, mimeType) => {
33
- const existing = get().blobUrls.get(key);
34
- if (existing) {
35
- cacheDebug.debug(`Blob URL reused: ${key}`, { refCount: existing.refCount + 1 });
36
- set(
37
- (state) => ({
38
- blobUrls: new Map(state.blobUrls).set(key, {
39
- ...existing,
40
- refCount: existing.refCount + 1
41
- })
42
- }),
43
- false,
44
- "blobUrl/incrementRef"
45
- );
46
- return existing.url;
47
- }
48
- const blob = new Blob([content], { type: mimeType });
49
- const url = URL.createObjectURL(blob);
50
- const sizeMB = (content.byteLength / 1024 / 1024).toFixed(2);
51
- cacheDebug.debug(`Blob URL created: ${key}`, { mimeType, size: `${sizeMB}MB` });
52
- set(
53
- (state) => ({
54
- blobUrls: new Map(state.blobUrls).set(key, {
55
- url,
56
- refCount: 1,
57
- createdAt: Date.now()
58
- })
59
- }),
60
- false,
61
- "blobUrl/create"
62
- );
63
- return url;
64
- }, "getOrCreateBlobUrl"),
65
- releaseBlobUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key) => {
66
- const entry = get().blobUrls.get(key);
67
- if (!entry) return;
68
- if (entry.refCount <= 1) {
69
- cacheDebug.debug(`Blob URL revoked: ${key}`);
70
- URL.revokeObjectURL(entry.url);
71
- set(
72
- (state) => {
73
- const newMap = new Map(state.blobUrls);
74
- newMap.delete(key);
75
- return { blobUrls: newMap };
76
- },
77
- false,
78
- "blobUrl/revoke"
79
- );
80
- } else {
81
- cacheDebug.debug(`Blob URL released: ${key}`, { refCount: entry.refCount - 1 });
82
- set(
83
- (state) => ({
84
- blobUrls: new Map(state.blobUrls).set(key, {
85
- ...entry,
86
- refCount: entry.refCount - 1
87
- })
88
- }),
89
- false,
90
- "blobUrl/decrementRef"
91
- );
92
- }
93
- }, "releaseBlobUrl"),
94
- hasBlobUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key) => get().blobUrls.has(key), "hasBlobUrl"),
95
- // ========== Image Cache ==========
96
- cacheDimensions: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((src, dims) => {
97
- set(
98
- (state) => ({
99
- imageDimensions: new Map(state.imageDimensions).set(src, dims)
100
- }),
101
- false,
102
- "image/cacheDimensions"
103
- );
104
- }, "cacheDimensions"),
105
- getDimensions: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((src) => get().imageDimensions.get(src) ?? null, "getDimensions"),
106
- // ========== Audio Cache ==========
107
- saveAudioPosition: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((uri, time) => {
108
- set(
109
- (state) => ({
110
- audioPlaybackPositions: new Map(state.audioPlaybackPositions).set(
111
- uri,
112
- time
113
- )
114
- }),
115
- false,
116
- "audio/savePosition"
117
- );
118
- }, "saveAudioPosition"),
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
- set(
123
- (state) => ({
124
- audioEffectConfigs: new Map(state.audioEffectConfigs).set(
125
- key,
126
- config
127
- )
128
- }),
129
- false,
130
- "audio/cacheEffectConfig"
131
- );
132
- }, "cacheEffectConfig"),
133
- // ========== Video Cache ==========
134
- getOrCreateStreamUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((sessionId, path, generator) => {
135
- const key = `${sessionId}:${path}`;
136
- const cached = get().videoStreamUrls.get(key);
137
- if (cached && Date.now() - cached.timestamp < STREAM_URL_TTL) {
138
- return cached.url;
139
- }
140
- const url = generator(sessionId, path);
141
- set(
142
- (state) => ({
143
- videoStreamUrls: new Map(state.videoStreamUrls).set(key, {
144
- url,
145
- timestamp: Date.now()
146
- })
147
- }),
148
- false,
149
- "video/cacheStreamUrl"
150
- );
151
- return url;
152
- }, "getOrCreateStreamUrl"),
153
- getPosterUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((title) => get().videoPosterUrls.get(title) ?? null, "getPosterUrl"),
154
- cachePosterUrl: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((title, url) => {
155
- set(
156
- (state) => ({
157
- videoPosterUrls: new Map(state.videoPosterUrls).set(title, url)
158
- }),
159
- false,
160
- "video/cachePosterUrl"
161
- );
162
- }, "cachePosterUrl"),
163
- saveVideoPosition: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key, time) => {
164
- set(
165
- (state) => ({
166
- videoPlaybackPositions: new Map(state.videoPlaybackPositions).set(
167
- key,
168
- time
169
- )
170
- }),
171
- false,
172
- "video/savePosition"
173
- );
174
- }, "saveVideoPosition"),
175
- getVideoPosition: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((key) => get().videoPlaybackPositions.get(key) ?? null, "getVideoPosition"),
176
- cacheVideoMetadata: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((url, meta) => {
177
- set(
178
- (state) => ({
179
- videoMetadata: new Map(state.videoMetadata).set(url, meta)
180
- }),
181
- false,
182
- "video/cacheMetadata"
183
- );
184
- }, "cacheVideoMetadata"),
185
- getVideoMetadata: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((url) => get().videoMetadata.get(url) ?? null, "getVideoMetadata"),
186
- invalidateSession: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((sessionId) => {
187
- set(
188
- (state) => {
189
- const newUrls = new Map(state.videoStreamUrls);
190
- for (const [key] of newUrls) {
191
- if (key.startsWith(`${sessionId}:`)) {
192
- newUrls.delete(key);
193
- }
194
- }
195
- return { videoStreamUrls: newUrls };
196
- },
197
- false,
198
- "video/invalidateSession"
199
- );
200
- }, "invalidateSession"),
201
- getVideoPlayerSettings: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => get().videoPlayerSettings, "getVideoPlayerSettings"),
202
- saveVideoPlayerSettings: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((settings) => {
203
- set(
204
- (state) => ({
205
- videoPlayerSettings: { ...state.videoPlayerSettings, ...settings }
206
- }),
207
- false,
208
- "video/savePlayerSettings"
209
- );
210
- }, "saveVideoPlayerSettings"),
211
- // ========== Global ==========
212
- clearCache: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => {
213
- const stats = get().getCacheStats();
214
- cacheDebug.info("Clearing cache", stats);
215
- get().blobUrls.forEach(({ url }) => URL.revokeObjectURL(url));
216
- set(initialState, false, "clearCache");
217
- }, "clearCache"),
218
- getCacheStats: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => ({
219
- blobUrls: get().blobUrls.size,
220
- dimensions: get().imageDimensions.size,
221
- audioPositions: get().audioPlaybackPositions.size,
222
- videoPositions: get().videoPlaybackPositions.size
223
- }), "getCacheStats")
224
- }),
225
- {
226
- name: "media-cache-storage",
227
- // Only persist playback positions, poster URLs, and player settings
228
- partialize: /* @__PURE__ */ chunkOLISEQHS_cjs.__name((state) => ({
229
- audioPlaybackPositions: Array.from(
230
- state.audioPlaybackPositions.entries()
231
- ),
232
- videoPlaybackPositions: Array.from(
233
- state.videoPlaybackPositions.entries()
234
- ),
235
- videoPosterUrls: Array.from(state.videoPosterUrls.entries()),
236
- videoPlayerSettings: state.videoPlayerSettings
237
- }), "partialize"),
238
- // Rehydrate Maps from arrays
239
- onRehydrateStorage: /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => (state) => {
240
- if (state) {
241
- const persistedAudio = state.audioPlaybackPositions;
242
- const persistedVideo = state.videoPlaybackPositions;
243
- const persistedPosters = state.videoPosterUrls;
244
- const persistedSettings = state.videoPlayerSettings;
245
- state.audioPlaybackPositions = new Map(
246
- Array.isArray(persistedAudio) ? persistedAudio : []
247
- );
248
- state.videoPlaybackPositions = new Map(
249
- Array.isArray(persistedVideo) ? persistedVideo : []
250
- );
251
- state.videoPosterUrls = new Map(
252
- Array.isArray(persistedPosters) ? persistedPosters : []
253
- );
254
- state.videoPlayerSettings = {
255
- ...DEFAULT_VIDEO_SETTINGS,
256
- ...persistedSettings && typeof persistedSettings === "object" ? persistedSettings : {}
257
- };
258
- }
259
- }, "onRehydrateStorage")
260
- }
261
- ),
262
- { name: "MediaCacheStore" }
263
- )
264
- );
265
- var useImageCache = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
266
- shallow.useShallow((state) => ({
267
- getOrCreateBlobUrl: state.getOrCreateBlobUrl,
268
- releaseBlobUrl: state.releaseBlobUrl,
269
- hasBlobUrl: state.hasBlobUrl,
270
- cacheDimensions: state.cacheDimensions,
271
- getDimensions: state.getDimensions
272
- }))
273
- ), "useImageCache");
274
- var useAudioCache = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
275
- shallow.useShallow((state) => ({
276
- getOrCreateBlobUrl: state.getOrCreateBlobUrl,
277
- releaseBlobUrl: state.releaseBlobUrl,
278
- hasBlobUrl: state.hasBlobUrl,
279
- saveAudioPosition: state.saveAudioPosition,
280
- getAudioPosition: state.getAudioPosition,
281
- getEffectConfig: state.getEffectConfig,
282
- cacheEffectConfig: state.cacheEffectConfig
283
- }))
284
- ), "useAudioCache");
285
- var useVideoCache = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
286
- shallow.useShallow((state) => ({
287
- getOrCreateBlobUrl: state.getOrCreateBlobUrl,
288
- releaseBlobUrl: state.releaseBlobUrl,
289
- hasBlobUrl: state.hasBlobUrl,
290
- getOrCreateStreamUrl: state.getOrCreateStreamUrl,
291
- getPosterUrl: state.getPosterUrl,
292
- cachePosterUrl: state.cachePosterUrl,
293
- saveVideoPosition: state.saveVideoPosition,
294
- getVideoPosition: state.getVideoPosition,
295
- cacheVideoMetadata: state.cacheVideoMetadata,
296
- getVideoMetadata: state.getVideoMetadata,
297
- invalidateSession: state.invalidateSession,
298
- getVideoPlayerSettings: state.getVideoPlayerSettings,
299
- saveVideoPlayerSettings: state.saveVideoPlayerSettings
300
- }))
301
- ), "useVideoCache");
302
- var useVideoPlayerSettings = /* @__PURE__ */ chunkOLISEQHS_cjs.__name(() => useMediaCacheStore(
303
- shallow.useShallow((state) => ({
304
- settings: state.videoPlayerSettings,
305
- saveSettings: state.saveVideoPlayerSettings
306
- }))
307
- ), "useVideoPlayerSettings");
308
- function useBlobUrlCleanup(key) {
309
- const releaseBlobUrl = useMediaCacheStore((s) => s.releaseBlobUrl);
310
- if (typeof window !== "undefined") {
311
- const { useEffect } = chunkOLISEQHS_cjs.__require("react");
312
- useEffect(() => {
313
- return () => {
314
- if (key) {
315
- releaseBlobUrl(key);
316
- }
317
- };
318
- }, [key, releaseBlobUrl]);
319
- }
320
- }
321
- chunkOLISEQHS_cjs.__name(useBlobUrlCleanup, "useBlobUrlCleanup");
322
- function generateContentKey(content) {
323
- const arr = new Uint8Array(content);
324
- const len = arr.length;
325
- const start = arr.slice(0, Math.min(1024, len));
326
- const end = arr.slice(Math.max(0, len - 1024));
327
- let hash = len;
328
- for (let i = 0; i < start.length; i++) {
329
- hash = (hash << 5) - hash + start[i] | 0;
330
- }
331
- for (let i = 0; i < end.length; i++) {
332
- hash = (hash << 5) - hash + end[i] | 0;
333
- }
334
- return `blob-${len}-${hash.toString(16)}`;
335
- }
336
- chunkOLISEQHS_cjs.__name(generateContentKey, "generateContentKey");
337
-
338
- exports.generateContentKey = generateContentKey;
339
- exports.useAudioCache = useAudioCache;
340
- exports.useBlobUrlCleanup = useBlobUrlCleanup;
341
- exports.useImageCache = useImageCache;
342
- exports.useMediaCacheStore = useMediaCacheStore;
343
- exports.useVideoCache = useVideoCache;
344
- exports.useVideoPlayerSettings = useVideoPlayerSettings;
345
- //# sourceMappingURL=chunk-YW5IVWHQ.cjs.map
346
- //# sourceMappingURL=chunk-YW5IVWHQ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/stores/mediaCache.ts"],"names":["createLogger","create","devtools","persist","__name","useShallow","__require"],"mappings":";;;;;;;;AAQA,IAAM,UAAA,GAAaA,iBAAa,YAAY,CAAA;AAkC5C,IAAM,iBAAiB,EAAA,GAAK,GAAA;AAsE5B,IAAM,sBAAA,GAA8C;AAAA,EAClD,MAAA,EAAQ,CAAA;AAAA,EACR,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,YAAA,GAAgC;AAAA,EACpC,QAAA,sBAAc,GAAA,EAAI;AAAA,EAClB,eAAA,sBAAqB,GAAA,EAAI;AAAA,EACzB,sBAAA,sBAA4B,GAAA,EAAI;AAAA,EAChC,kBAAA,sBAAwB,GAAA,EAAI;AAAA,EAC5B,eAAA,sBAAqB,GAAA,EAAI;AAAA,EACzB,eAAA,sBAAqB,GAAA,EAAI;AAAA,EACzB,sBAAA,sBAA4B,GAAA,EAAI;AAAA,EAChC,aAAA,sBAAmB,GAAA,EAAI;AAAA,EACvB,mBAAA,EAAqB;AACvB,CAAA;AAEO,IAAM,qBAAqBC,cAAA,EAAwB;AAAA,EACxDC,mBAAA;AAAA,IACEC,kBAAA;AAAA,MACE,CAAC,KAAK,GAAA,MAAS;AAAA,QACb,GAAG,YAAA;AAAA;AAAA,QAIH,kBAAA,kBAAoBC,wBAAA,CAAA,CAAC,GAAA,EAAK,OAAA,EAAS,QAAA,KAAa;AAC9C,UAAA,MAAM,QAAA,GAAW,GAAA,EAAI,CAAE,QAAA,CAAS,IAAI,GAAG,CAAA;AACvC,UAAA,IAAI,QAAA,EAAU;AAEZ,YAAA,UAAA,CAAW,KAAA,CAAM,oBAAoB,GAAG,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,QAAA,CAAS,QAAA,GAAW,CAAA,EAAG,CAAA;AAC/E,YAAA,GAAA;AAAA,cACE,CAAC,KAAA,MAAW;AAAA,gBACV,UAAU,IAAI,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAE,IAAI,GAAA,EAAK;AAAA,kBACzC,GAAG,QAAA;AAAA,kBACH,QAAA,EAAU,SAAS,QAAA,GAAW;AAAA,iBAC/B;AAAA,eACH,CAAA;AAAA,cACA,KAAA;AAAA,cACA;AAAA,aACF;AACA,YAAA,OAAO,QAAA,CAAS,GAAA;AAAA,UAClB;AAGA,UAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,OAAO,CAAA,EAAG,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AACnD,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAA;AACpC,UAAA,MAAM,UAAU,OAAA,CAAQ,UAAA,GAAa,IAAA,GAAO,IAAA,EAAM,QAAQ,CAAC,CAAA;AAC3D,UAAA,UAAA,CAAW,KAAA,CAAM,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAA,EAAI,EAAE,UAAU,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAM,CAAA;AAC9E,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,UAAU,IAAI,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAE,IAAI,GAAA,EAAK;AAAA,gBACzC,GAAA;AAAA,gBACA,QAAA,EAAU,CAAA;AAAA,gBACV,SAAA,EAAW,KAAK,GAAA;AAAI,eACrB;AAAA,aACH,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,OAAO,GAAA;AAAA,QACT,CAAA,EAnCoB,oBAAA,CAAA;AAAA,QAqCpB,cAAA,4CAAiB,GAAA,KAAQ;AACvB,UAAA,MAAM,KAAA,GAAQ,GAAA,EAAI,CAAE,QAAA,CAAS,IAAI,GAAG,CAAA;AACpC,UAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,UAAA,IAAI,KAAA,CAAM,YAAY,CAAA,EAAG;AAEvB,YAAA,UAAA,CAAW,KAAA,CAAM,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,CAAA;AAC3C,YAAA,GAAA,CAAI,eAAA,CAAgB,MAAM,GAAG,CAAA;AAC7B,YAAA,GAAA;AAAA,cACE,CAAC,KAAA,KAAU;AACT,gBAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA;AACrC,gBAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AACjB,gBAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAAA,cAC5B,CAAA;AAAA,cACA,KAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF,CAAA,MAAO;AAEL,YAAA,UAAA,CAAW,KAAA,CAAM,sBAAsB,GAAG,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,CAAA;AAC9E,YAAA,GAAA;AAAA,cACE,CAAC,KAAA,MAAW;AAAA,gBACV,UAAU,IAAI,GAAA,CAAI,MAAM,QAAQ,CAAA,CAAE,IAAI,GAAA,EAAK;AAAA,kBACzC,GAAG,KAAA;AAAA,kBACH,QAAA,EAAU,MAAM,QAAA,GAAW;AAAA,iBAC5B;AAAA,eACH,CAAA;AAAA,cACA,KAAA;AAAA,cACA;AAAA,aACF;AAAA,UACF;AAAA,QACF,CAAA,EA/BgB,gBAAA,CAAA;AAAA,QAiChB,UAAA,4CAAa,GAAA,KAAQ,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAA/B,YAAA,CAAA;AAAA;AAAA,QAIZ,eAAA,kBAAiBA,wBAAA,CAAA,CAAC,GAAA,EAAK,IAAA,KAAS;AAC9B,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,eAAA,EAAiB,IAAI,GAAA,CAAI,KAAA,CAAM,eAAe,CAAA,CAAE,GAAA,CAAI,KAAK,IAAI;AAAA,aAC/D,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EARiB,iBAAA,CAAA;AAAA,QAUjB,aAAA,4CAAgB,GAAA,KAAQ,GAAA,GAAM,eAAA,CAAgB,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA,EAA3C,eAAA,CAAA;AAAA;AAAA,QAIf,iBAAA,kBAAmBA,wBAAA,CAAA,CAAC,GAAA,EAAK,IAAA,KAAS;AAChC,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,sBAAA,EAAwB,IAAI,GAAA,CAAI,KAAA,CAAM,sBAAsB,CAAA,CAAE,GAAA;AAAA,gBAC5D,GAAA;AAAA,gBACA;AAAA;AACF,aACF,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EAXmB,mBAAA,CAAA;AAAA,QAanB,gBAAA,4CAAmB,GAAA,KACjB,GAAA,GAAM,sBAAA,CAAuB,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA,EADzB,kBAAA,CAAA;AAAA,QAGlB,eAAA,4CAAkB,GAAA,KAAQ,GAAA,GAAM,kBAAA,CAAmB,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA,EAA9C,iBAAA,CAAA;AAAA,QAEjB,iBAAA,kBAAmBA,wBAAA,CAAA,CAAC,GAAA,EAAK,MAAA,KAAW;AAClC,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,kBAAA,EAAoB,IAAI,GAAA,CAAI,KAAA,CAAM,kBAAkB,CAAA,CAAE,GAAA;AAAA,gBACpD,GAAA;AAAA,gBACA;AAAA;AACF,aACF,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EAXmB,mBAAA,CAAA;AAAA;AAAA,QAenB,oBAAA,kBAAsBA,wBAAA,CAAA,CAAC,SAAA,EAAW,IAAA,EAAM,SAAA,KAAc;AACpD,UAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAChC,UAAA,MAAM,MAAA,GAAS,GAAA,EAAI,CAAE,eAAA,CAAgB,IAAI,GAAG,CAAA;AAG5C,UAAA,IAAI,UAAU,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,YAAY,cAAA,EAAgB;AAC5D,YAAA,OAAO,MAAA,CAAO,GAAA;AAAA,UAChB;AAGA,UAAA,MAAM,GAAA,GAAM,SAAA,CAAU,SAAA,EAAW,IAAI,CAAA;AACrC,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,iBAAiB,IAAI,GAAA,CAAI,MAAM,eAAe,CAAA,CAAE,IAAI,GAAA,EAAK;AAAA,gBACvD,GAAA;AAAA,gBACA,SAAA,EAAW,KAAK,GAAA;AAAI,eACrB;AAAA,aACH,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,OAAO,GAAA;AAAA,QACT,CAAA,EAtBsB,sBAAA,CAAA;AAAA,QAwBtB,YAAA,4CAAe,KAAA,KAAU,GAAA,GAAM,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,IAAK,IAAA,EAA/C,cAAA,CAAA;AAAA,QAEd,cAAA,kBAAgBA,wBAAA,CAAA,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC9B,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,eAAA,EAAiB,IAAI,GAAA,CAAI,KAAA,CAAM,eAAe,CAAA,CAAE,GAAA,CAAI,OAAO,GAAG;AAAA,aAChE,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EARgB,gBAAA,CAAA;AAAA,QAUhB,iBAAA,kBAAmBA,wBAAA,CAAA,CAAC,GAAA,EAAK,IAAA,KAAS;AAChC,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,sBAAA,EAAwB,IAAI,GAAA,CAAI,KAAA,CAAM,sBAAsB,CAAA,CAAE,GAAA;AAAA,gBAC5D,GAAA;AAAA,gBACA;AAAA;AACF,aACF,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EAXmB,mBAAA,CAAA;AAAA,QAanB,gBAAA,4CAAmB,GAAA,KACjB,GAAA,GAAM,sBAAA,CAAuB,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA,EADzB,kBAAA,CAAA;AAAA,QAGlB,kBAAA,kBAAoBA,wBAAA,CAAA,CAAC,GAAA,EAAK,IAAA,KAAS;AACjC,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,aAAA,EAAe,IAAI,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA,CAAE,GAAA,CAAI,KAAK,IAAI;AAAA,aAC3D,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EARoB,oBAAA,CAAA;AAAA,QAUpB,gBAAA,4CAAmB,GAAA,KAAQ,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA,EAAzC,kBAAA,CAAA;AAAA,QAElB,iBAAA,4CAAoB,SAAA,KAAc;AAChC,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,KAAU;AACT,cAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,KAAA,CAAM,eAAe,CAAA;AAC7C,cAAA,KAAA,MAAW,CAAC,GAAG,CAAA,IAAK,OAAA,EAAS;AAC3B,gBAAA,IAAI,GAAA,CAAI,UAAA,CAAW,CAAA,EAAG,SAAS,GAAG,CAAA,EAAG;AACnC,kBAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,gBACpB;AAAA,cACF;AACA,cAAA,OAAO,EAAE,iBAAiB,OAAA,EAAQ;AAAA,YACpC,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EAdmB,mBAAA,CAAA;AAAA,QAgBnB,sBAAA,kBAAwBA,wBAAA,CAAA,MAAM,GAAA,EAAI,CAAE,mBAAA,EAAZ,wBAAA,CAAA;AAAA,QAExB,uBAAA,4CAA0B,QAAA,KAAa;AACrC,UAAA,GAAA;AAAA,YACE,CAAC,KAAA,MAAW;AAAA,cACV,qBAAqB,EAAE,GAAG,KAAA,CAAM,mBAAA,EAAqB,GAAG,QAAA;AAAS,aACnE,CAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,EARyB,yBAAA,CAAA;AAAA;AAAA,QAYzB,4BAAYA,wBAAA,CAAA,MAAM;AAChB,UAAA,MAAM,KAAA,GAAQ,GAAA,EAAI,CAAE,aAAA,EAAc;AAClC,UAAA,UAAA,CAAW,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAEvC,UAAA,GAAA,EAAI,CAAE,QAAA,CAAS,OAAA,CAAQ,CAAC,EAAE,KAAI,KAAM,GAAA,CAAI,eAAA,CAAgB,GAAG,CAAC,CAAA;AAC5D,UAAA,GAAA,CAAI,YAAA,EAAc,OAAO,YAAY,CAAA;AAAA,QACvC,CAAA,EANY,YAAA,CAAA;AAAA,QAQZ,+BAAeA,wBAAA,CAAA,OAAO;AAAA,UACpB,QAAA,EAAU,GAAA,EAAI,CAAE,QAAA,CAAS,IAAA;AAAA,UACzB,UAAA,EAAY,GAAA,EAAI,CAAE,eAAA,CAAgB,IAAA;AAAA,UAClC,cAAA,EAAgB,GAAA,EAAI,CAAE,sBAAA,CAAuB,IAAA;AAAA,UAC7C,cAAA,EAAgB,GAAA,EAAI,CAAE,sBAAA,CAAuB;AAAA,SAC/C,CAAA,EALe,eAAA;AAAA,OAMjB,CAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM,qBAAA;AAAA;AAAA,QAEN,UAAA,4CAAa,KAAA,MAAW;AAAA,UACtB,wBAAwB,KAAA,CAAM,IAAA;AAAA,YAC5B,KAAA,CAAM,uBAAuB,OAAA;AAAQ,WACvC;AAAA,UACA,wBAAwB,KAAA,CAAM,IAAA;AAAA,YAC5B,KAAA,CAAM,uBAAuB,OAAA;AAAQ,WACvC;AAAA,UACA,iBAAiB,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,SAAS,CAAA;AAAA,UAC3D,qBAAqB,KAAA,CAAM;AAAA,SAC7B,CAAA,EATY,YAAA,CAAA;AAAA;AAAA,QAWZ,kBAAA,kBAAoBA,wBAAA,CAAA,MAAM,CAAC,KAAA,KAAU;AACnC,UAAA,IAAI,KAAA,EAAO;AAET,YAAA,MAAM,iBAAiB,KAAA,CAAM,sBAAA;AAC7B,YAAA,MAAM,iBAAiB,KAAA,CAAM,sBAAA;AAC7B,YAAA,MAAM,mBAAmB,KAAA,CAAM,eAAA;AAC/B,YAAA,MAAM,oBAAoB,KAAA,CAAM,mBAAA;AAEhC,YAAA,KAAA,CAAM,yBAAyB,IAAI,GAAA;AAAA,cACjC,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,GACvB,iBACD;AAAC,aACP;AACA,YAAA,KAAA,CAAM,yBAAyB,IAAI,GAAA;AAAA,cACjC,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,GACvB,iBACD;AAAC,aACP;AACA,YAAA,KAAA,CAAM,kBAAkB,IAAI,GAAA;AAAA,cAC1B,KAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAA,GACzB,mBACD;AAAC,aACP;AAEA,YAAA,KAAA,CAAM,mBAAA,GAAsB;AAAA,cAC1B,GAAG,sBAAA;AAAA,cACH,GAAI,iBAAA,IAAqB,OAAO,iBAAA,KAAsB,QAAA,GACjD,oBACD;AAAC,aACP;AAAA,UACF;AAAA,QACF,CAAA,EA/BoB,oBAAA;AAAA;AAgCtB,KACF;AAAA,IACA,EAAE,MAAM,iBAAA;AAAkB;AAE9B;AAQO,IAAM,gCAAgBA,wBAAA,CAAA,MAC3B,kBAAA;AAAA,EACEC,kBAAA,CAAW,CAAC,KAAA,MAAW;AAAA,IACrB,oBAAoB,KAAA,CAAM,kBAAA;AAAA,IAC1B,gBAAgB,KAAA,CAAM,cAAA;AAAA,IACtB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,eAAe,KAAA,CAAM;AAAA,GACvB,CAAE;AACJ,CAAA,EAT2B,eAAA;AAetB,IAAM,gCAAgBD,wBAAA,CAAA,MAC3B,kBAAA;AAAA,EACEC,kBAAA,CAAW,CAAC,KAAA,MAAW;AAAA,IACrB,oBAAoB,KAAA,CAAM,kBAAA;AAAA,IAC1B,gBAAgB,KAAA,CAAM,cAAA;AAAA,IACtB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,mBAAmB,KAAA,CAAM,iBAAA;AAAA,IACzB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,mBAAmB,KAAA,CAAM;AAAA,GAC3B,CAAE;AACJ,CAAA,EAX2B,eAAA;AAiBtB,IAAM,gCAAgBD,wBAAA,CAAA,MAC3B,kBAAA;AAAA,EACEC,kBAAA,CAAW,CAAC,KAAA,MAAW;AAAA,IACrB,oBAAoB,KAAA,CAAM,kBAAA;AAAA,IAC1B,gBAAgB,KAAA,CAAM,cAAA;AAAA,IACtB,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,sBAAsB,KAAA,CAAM,oBAAA;AAAA,IAC5B,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,gBAAgB,KAAA,CAAM,cAAA;AAAA,IACtB,mBAAmB,KAAA,CAAM,iBAAA;AAAA,IACzB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,oBAAoB,KAAA,CAAM,kBAAA;AAAA,IAC1B,kBAAkB,KAAA,CAAM,gBAAA;AAAA,IACxB,mBAAmB,KAAA,CAAM,iBAAA;AAAA,IACzB,wBAAwB,KAAA,CAAM,sBAAA;AAAA,IAC9B,yBAAyB,KAAA,CAAM;AAAA,GACjC,CAAE;AACJ,CAAA,EAjB2B,eAAA;AAuBtB,IAAM,yCAAyBD,wBAAA,CAAA,MACpC,kBAAA;AAAA,EACEC,kBAAA,CAAW,CAAC,KAAA,MAAW;AAAA,IACrB,UAAU,KAAA,CAAM,mBAAA;AAAA,IAChB,cAAc,KAAA,CAAM;AAAA,GACtB,CAAE;AACJ,CAAA,EANoC,wBAAA;AAW/B,SAAS,kBAAkB,GAAA,EAAoB;AACpD,EAAA,MAAM,cAAA,GAAiB,kBAAA,CAAmB,CAAC,CAAA,KAAM,EAAE,cAAc,CAAA;AAGjE,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEjC,IAAA,MAAM,EAAE,SAAA,EAAU,GAAIC,2BAAA,CAAQ,OAAO,CAAA;AAErC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,cAAA,CAAe,GAAG,CAAA;AAAA,QACpB;AAAA,MACF,CAAA;AAAA,IACF,CAAA,EAAG,CAAC,GAAA,EAAK,cAAc,CAAC,CAAA;AAAA,EAC1B;AACF;AAhBgBF,wBAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAwBT,SAAS,mBAAmB,OAAA,EAA8B;AAC/D,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,OAAO,CAAA;AAClC,EAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAGhB,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAC,CAAA;AAE9C,EAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG,GAAA,GAAM,IAAI,CAAC,CAAA;AAG7C,EAAA,IAAI,IAAA,GAAO,GAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,CAAA,IAAK,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,GAAK,CAAA;AAAA,EAC3C;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,IAAA,GAAA,CAAS,IAAA,IAAQ,CAAA,IAAK,IAAA,GAAO,GAAA,CAAI,CAAC,CAAA,GAAK,CAAA;AAAA,EACzC;AAEA,EAAA,OAAO,QAAQ,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AACzC;AAnBgBA,wBAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA","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,63 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkOLISEQHS_cjs = require('./chunk-OLISEQHS.cjs');
4
- var lib = require('@djangocfg/ui-core/lib');
5
- var jsxRuntime = require('react/jsx-runtime');
6
- var lucideReact = require('lucide-react');
7
-
8
- function TreeSkeleton({ rows = 6, className }) {
9
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: lib.cn("flex flex-col gap-1 p-2", className), "aria-hidden": true, children: Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", style: { paddingLeft: i % 3 * 16 }, children: [
10
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0 animate-pulse rounded bg-muted" }),
11
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0 animate-pulse rounded bg-muted" }),
12
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-3 flex-1 animate-pulse rounded bg-muted" })
13
- ] }, i)) });
14
- }
15
- chunkOLISEQHS_cjs.__name(TreeSkeleton, "TreeSkeleton");
16
- function TreeError({ children, className }) {
17
- return /* @__PURE__ */ jsxRuntime.jsxs(
18
- "div",
19
- {
20
- className: lib.cn(
21
- "flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",
22
- className
23
- ),
24
- role: "alert",
25
- children: [
26
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { "aria-hidden": true, className: "mt-0.5 size-4 shrink-0" }),
27
- /* @__PURE__ */ jsxRuntime.jsx("span", { children })
28
- ]
29
- }
30
- );
31
- }
32
- chunkOLISEQHS_cjs.__name(TreeError, "TreeError");
33
-
34
- // src/tools/Tree/data/createDemoTree.ts
35
- function createDemoTree({
36
- depth = 3,
37
- breadth = 4,
38
- rootPrefix = "node"
39
- } = {}) {
40
- const make = /* @__PURE__ */ chunkOLISEQHS_cjs.__name((id, name, level) => {
41
- if (level >= depth) {
42
- return { id, data: { name } };
43
- }
44
- const children = [];
45
- for (let i = 0; i < breadth; i++) {
46
- const childId = `${id}/${i}`;
47
- children.push(make(childId, `${name}-${i}`, level + 1));
48
- }
49
- return { id, data: { name }, children };
50
- }, "make");
51
- const roots = [];
52
- for (let i = 0; i < breadth; i++) {
53
- roots.push(make(`${rootPrefix}-${i}`, `${rootPrefix} ${i}`, 1));
54
- }
55
- return roots;
56
- }
57
- chunkOLISEQHS_cjs.__name(createDemoTree, "createDemoTree");
58
-
59
- exports.TreeError = TreeError;
60
- exports.TreeSkeleton = TreeSkeleton;
61
- exports.createDemoTree = createDemoTree;
62
- //# sourceMappingURL=chunk-YXZ6GU7H.cjs.map
63
- //# sourceMappingURL=chunk-YXZ6GU7H.cjs.map
@@ -1 +0,0 @@
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"]}