@djangocfg/ui-tools 2.1.389 → 2.1.393

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 (183) 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 +9 -17
  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/SpeechRecognition/README.md +1 -1
  29. package/dist/ChatRoot-EFNXQXXN.cjs +0 -15
  30. package/dist/ChatRoot-EFNXQXXN.cjs.map +0 -1
  31. package/dist/ChatRoot-FITF5RVP.mjs +0 -6
  32. package/dist/ChatRoot-FITF5RVP.mjs.map +0 -1
  33. package/dist/ChatRoot-PNNGQCYF.css +0 -7
  34. package/dist/ChatRoot-PNNGQCYF.css.map +0 -1
  35. package/dist/CronScheduler.client-DLMXCPAJ.mjs +0 -67
  36. package/dist/CronScheduler.client-DLMXCPAJ.mjs.map +0 -1
  37. package/dist/CronScheduler.client-WEJF4PWQ.cjs +0 -72
  38. package/dist/CronScheduler.client-WEJF4PWQ.cjs.map +0 -1
  39. package/dist/DictationField-AS2F33WI.cjs +0 -13
  40. package/dist/DictationField-AS2F33WI.cjs.map +0 -1
  41. package/dist/DictationField-WPONUCYE.mjs +0 -4
  42. package/dist/DictationField-WPONUCYE.mjs.map +0 -1
  43. package/dist/DocsLayout-EKASBSP7.mjs +0 -3448
  44. package/dist/DocsLayout-EKASBSP7.mjs.map +0 -1
  45. package/dist/DocsLayout-MBFIB4NO.css +0 -7
  46. package/dist/DocsLayout-MBFIB4NO.css.map +0 -1
  47. package/dist/DocsLayout-OURFYWQE.cjs +0 -3455
  48. package/dist/DocsLayout-OURFYWQE.cjs.map +0 -1
  49. package/dist/JsonSchemaForm-DD7CLRIG.cjs +0 -13
  50. package/dist/JsonSchemaForm-DD7CLRIG.cjs.map +0 -1
  51. package/dist/JsonSchemaForm-XKUIVELK.mjs +0 -4
  52. package/dist/JsonSchemaForm-XKUIVELK.mjs.map +0 -1
  53. package/dist/JsonTree-43PQAJKY.mjs +0 -5
  54. package/dist/JsonTree-43PQAJKY.mjs.map +0 -1
  55. package/dist/JsonTree-MLET23ZA.css +0 -7
  56. package/dist/JsonTree-MLET23ZA.css.map +0 -1
  57. package/dist/JsonTree-X6W5YEVY.cjs +0 -11
  58. package/dist/JsonTree-X6W5YEVY.cjs.map +0 -1
  59. package/dist/LottiePlayer.client-2S7ISJ2S.cjs +0 -168
  60. package/dist/LottiePlayer.client-2S7ISJ2S.cjs.map +0 -1
  61. package/dist/LottiePlayer.client-5LDSSJWS.mjs +0 -161
  62. package/dist/LottiePlayer.client-5LDSSJWS.mjs.map +0 -1
  63. package/dist/MapContainer-AKIPABJK.mjs +0 -4
  64. package/dist/MapContainer-AKIPABJK.mjs.map +0 -1
  65. package/dist/MapContainer-STVDMC36.cjs +0 -17
  66. package/dist/MapContainer-STVDMC36.cjs.map +0 -1
  67. package/dist/Mermaid.client-DDXWXZXY.css +0 -7
  68. package/dist/Mermaid.client-DDXWXZXY.css.map +0 -1
  69. package/dist/Mermaid.client-NL4SVR7F.mjs +0 -481
  70. package/dist/Mermaid.client-NL4SVR7F.mjs.map +0 -1
  71. package/dist/Mermaid.client-NNTI6DFX.cjs +0 -487
  72. package/dist/Mermaid.client-NNTI6DFX.cjs.map +0 -1
  73. package/dist/Player-BRV7XTWR.mjs +0 -4
  74. package/dist/Player-BRV7XTWR.mjs.map +0 -1
  75. package/dist/Player-PM7F7DD7.cjs +0 -13
  76. package/dist/Player-PM7F7DD7.cjs.map +0 -1
  77. package/dist/Player-ZGQKKOWI.css +0 -66
  78. package/dist/Player-ZGQKKOWI.css.map +0 -1
  79. package/dist/PrettyCode.client-GWFAIVFN.css +0 -7
  80. package/dist/PrettyCode.client-GWFAIVFN.css.map +0 -1
  81. package/dist/PrettyCode.client-KOHDVPPN.cjs +0 -285
  82. package/dist/PrettyCode.client-KOHDVPPN.cjs.map +0 -1
  83. package/dist/PrettyCode.client-ZGYGKE7G.mjs +0 -283
  84. package/dist/PrettyCode.client-ZGYGKE7G.mjs.map +0 -1
  85. package/dist/TreeRoot-5COOOSWG.mjs +0 -4
  86. package/dist/TreeRoot-5COOOSWG.mjs.map +0 -1
  87. package/dist/TreeRoot-AABP2J6Y.cjs +0 -19
  88. package/dist/TreeRoot-AABP2J6Y.cjs.map +0 -1
  89. package/dist/chunk-2NG4SXEP.mjs +0 -743
  90. package/dist/chunk-2NG4SXEP.mjs.map +0 -1
  91. package/dist/chunk-4LFB7I5K.cjs +0 -1387
  92. package/dist/chunk-4LFB7I5K.cjs.map +0 -1
  93. package/dist/chunk-5D2OCOPQ.cjs +0 -222
  94. package/dist/chunk-5D2OCOPQ.cjs.map +0 -1
  95. package/dist/chunk-5I5QNGUG.cjs +0 -611
  96. package/dist/chunk-5I5QNGUG.cjs.map +0 -1
  97. package/dist/chunk-6ZX2G25W.mjs +0 -1361
  98. package/dist/chunk-6ZX2G25W.mjs.map +0 -1
  99. package/dist/chunk-76NNDZH6.cjs +0 -1061
  100. package/dist/chunk-76NNDZH6.cjs.map +0 -1
  101. package/dist/chunk-7CWGZPO3.mjs +0 -214
  102. package/dist/chunk-7CWGZPO3.mjs.map +0 -1
  103. package/dist/chunk-7EYHNP3E.cjs +0 -965
  104. package/dist/chunk-7EYHNP3E.cjs.map +0 -1
  105. package/dist/chunk-7IYXZUJO.cjs +0 -769
  106. package/dist/chunk-7IYXZUJO.cjs.map +0 -1
  107. package/dist/chunk-ADEN3UA4.cjs +0 -892
  108. package/dist/chunk-ADEN3UA4.cjs.map +0 -1
  109. package/dist/chunk-B6IR5KSC.mjs +0 -59
  110. package/dist/chunk-B6IR5KSC.mjs.map +0 -1
  111. package/dist/chunk-C6GXVH5J.mjs +0 -338
  112. package/dist/chunk-C6GXVH5J.mjs.map +0 -1
  113. package/dist/chunk-DMX7W4XZ.mjs +0 -1113
  114. package/dist/chunk-DMX7W4XZ.mjs.map +0 -1
  115. package/dist/chunk-ECONRHIG.mjs +0 -212
  116. package/dist/chunk-ECONRHIG.mjs.map +0 -1
  117. package/dist/chunk-FEN5S772.cjs +0 -1227
  118. package/dist/chunk-FEN5S772.cjs.map +0 -1
  119. package/dist/chunk-FP2RLYQZ.cjs +0 -187
  120. package/dist/chunk-FP2RLYQZ.cjs.map +0 -1
  121. package/dist/chunk-FVVF7VCD.cjs +0 -1325
  122. package/dist/chunk-FVVF7VCD.cjs.map +0 -1
  123. package/dist/chunk-GYIO7W7M.mjs +0 -1197
  124. package/dist/chunk-GYIO7W7M.mjs.map +0 -1
  125. package/dist/chunk-KNDLV4PI.cjs +0 -1356
  126. package/dist/chunk-KNDLV4PI.cjs.map +0 -1
  127. package/dist/chunk-KNEQRUBA.mjs +0 -181
  128. package/dist/chunk-KNEQRUBA.mjs.map +0 -1
  129. package/dist/chunk-N2XQF2OL.mjs +0 -14
  130. package/dist/chunk-N4MZYNR4.mjs +0 -1342
  131. package/dist/chunk-N4MZYNR4.mjs.map +0 -1
  132. package/dist/chunk-NTVBIIUD.mjs +0 -1439
  133. package/dist/chunk-NTVBIIUD.mjs.map +0 -1
  134. package/dist/chunk-OBRSGM64.mjs +0 -607
  135. package/dist/chunk-OBRSGM64.mjs.map +0 -1
  136. package/dist/chunk-ODO4GMW7.mjs +0 -79
  137. package/dist/chunk-ODO4GMW7.mjs.map +0 -1
  138. package/dist/chunk-OLISEQHS.cjs +0 -18
  139. package/dist/chunk-PVAX67JG.mjs +0 -1041
  140. package/dist/chunk-PVAX67JG.mjs.map +0 -1
  141. package/dist/chunk-QJ6GTUCO.cjs +0 -81
  142. package/dist/chunk-QJ6GTUCO.cjs.map +0 -1
  143. package/dist/chunk-T3MWM23F.cjs +0 -214
  144. package/dist/chunk-T3MWM23F.cjs.map +0 -1
  145. package/dist/chunk-TBSHZO5R.cjs +0 -1134
  146. package/dist/chunk-TBSHZO5R.cjs.map +0 -1
  147. package/dist/chunk-UNCS5V5F.mjs +0 -887
  148. package/dist/chunk-UNCS5V5F.mjs.map +0 -1
  149. package/dist/chunk-VWQ5WOIL.mjs +0 -2059
  150. package/dist/chunk-VWQ5WOIL.mjs.map +0 -1
  151. package/dist/chunk-W75B7Y6C.cjs +0 -1478
  152. package/dist/chunk-W75B7Y6C.cjs.map +0 -1
  153. package/dist/chunk-Y6UTOBF6.mjs +0 -938
  154. package/dist/chunk-Y6UTOBF6.mjs.map +0 -1
  155. package/dist/chunk-YDPDTOSP.cjs +0 -2061
  156. package/dist/chunk-YDPDTOSP.cjs.map +0 -1
  157. package/dist/chunk-YW5IVWHQ.cjs +0 -346
  158. package/dist/chunk-YW5IVWHQ.cjs.map +0 -1
  159. package/dist/chunk-YXZ6GU7H.cjs +0 -63
  160. package/dist/chunk-YXZ6GU7H.cjs.map +0 -1
  161. package/dist/chunk-ZL7FH4NW.mjs +0 -1274
  162. package/dist/chunk-ZL7FH4NW.mjs.map +0 -1
  163. package/dist/components-EHOGXATG.cjs +0 -22
  164. package/dist/components-EHOGXATG.cjs.map +0 -1
  165. package/dist/components-MQ6DR7TX.cjs +0 -26
  166. package/dist/components-MQ6DR7TX.cjs.map +0 -1
  167. package/dist/components-XRX7QGLB.mjs +0 -5
  168. package/dist/components-XRX7QGLB.mjs.map +0 -1
  169. package/dist/components-YATKRWLH.mjs +0 -5
  170. package/dist/components-YATKRWLH.mjs.map +0 -1
  171. package/dist/index.cjs +0 -3674
  172. package/dist/index.cjs.map +0 -1
  173. package/dist/index.css +0 -234
  174. package/dist/index.css.map +0 -1
  175. package/dist/index.d.cts +0 -4929
  176. package/dist/index.d.ts +0 -4929
  177. package/dist/index.mjs +0 -2912
  178. package/dist/index.mjs.map +0 -1
  179. package/dist/launcher-5Y42OBSN.mjs +0 -6
  180. package/dist/launcher-5Y42OBSN.mjs.map +0 -1
  181. package/dist/launcher-PMW2YB24.cjs +0 -59
  182. package/dist/launcher-PMW2YB24.cjs.map +0 -1
  183. package/src/index.ts +0 -157
@@ -1,283 +0,0 @@
1
- import { FloatingToolbar, CopyAction } from './chunk-KNEQRUBA.mjs';
2
- import { __name } from './chunk-N2XQF2OL.mjs';
3
- import { Prism, themes, Highlight } from 'prism-react-renderer';
4
- import { useSyncExternalStore, useRef, useMemo } from 'react';
5
- import { useAppT } from '@djangocfg/i18n';
6
- import { useResolvedTheme } from '@djangocfg/ui-core/hooks';
7
- import { jsx, jsxs } from 'react/jsx-runtime';
8
-
9
- var globalScope = typeof globalThis !== "undefined" ? globalThis : {};
10
- if (!globalScope.Prism) {
11
- globalScope.Prism = Prism;
12
- }
13
- var ready = false;
14
- var loading = null;
15
- var listeners = /* @__PURE__ */ new Set();
16
- function subscribe(cb) {
17
- listeners.add(cb);
18
- return () => listeners.delete(cb);
19
- }
20
- __name(subscribe, "subscribe");
21
- function getSnapshot() {
22
- return ready;
23
- }
24
- __name(getSnapshot, "getSnapshot");
25
- function getServerSnapshot() {
26
- return true;
27
- }
28
- __name(getServerSnapshot, "getServerSnapshot");
29
- async function ensurePrismLanguages() {
30
- if (ready) return;
31
- if (loading) return loading;
32
- loading = (async () => {
33
- await import('prismjs/components/prism-markup-templating');
34
- await Promise.all([
35
- import('prismjs/components/prism-bash'),
36
- import('prismjs/components/prism-java'),
37
- import('prismjs/components/prism-ruby'),
38
- import('prismjs/components/prism-php')
39
- ]);
40
- ready = true;
41
- listeners.forEach((cb) => cb());
42
- })();
43
- return loading;
44
- }
45
- __name(ensurePrismLanguages, "ensurePrismLanguages");
46
- function useEnsurePrismLanguages() {
47
- const loaded = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
48
- if (!loaded) {
49
- void ensurePrismLanguages();
50
- }
51
- return loaded;
52
- }
53
- __name(useEnsurePrismLanguages, "useEnsurePrismLanguages");
54
- void ensurePrismLanguages();
55
- var PrettyCode = /* @__PURE__ */ __name(({ data, language, className, mode, inline = false, customBg, isCompact = false, scrollIsolation, maxLines, variant = "card" }) => {
56
- const containerRef = useRef(null);
57
- const t = useAppT();
58
- const detectedTheme = useResolvedTheme();
59
- useEnsurePrismLanguages();
60
- const labels = useMemo(() => ({
61
- copyCode: t("tools.code.copyCode"),
62
- noContent: t("tools.code.noContent")
63
- }), [t]);
64
- const fontSize = isCompact ? "0.75rem" : "0.875rem";
65
- const currentTheme = mode || detectedTheme;
66
- const isDarkMode = currentTheme === "dark";
67
- const prismTheme = isDarkMode ? themes.vsDark : themes.vsLight;
68
- const contentJson = typeof data === "string" ? data : JSON.stringify(data || {}, null, 2);
69
- const lineCount = contentJson ? contentJson.split("\n").length : 0;
70
- const lineHeightRatio = isCompact ? 1.4 : 1.5;
71
- const fontSizePx = isCompact ? 12 : 14;
72
- const verticalPadPx = 16 + 12;
73
- const shouldScroll = maxLines !== void 0 && lineCount > maxLines;
74
- const maxHeightPx = maxLines !== void 0 ? maxLines * fontSizePx * lineHeightRatio + verticalPadPx : void 0;
75
- if (!contentJson || contentJson.trim() === "") {
76
- const emptyBgClass = customBg || (isDarkMode ? "bg-zinc-900" : "bg-white");
77
- const emptyBorderClass = isDarkMode ? "border-zinc-700" : "border-border";
78
- return /* @__PURE__ */ jsx("div", { className: `relative h-full ${emptyBgClass} rounded-sm border ${emptyBorderClass} ${className || ""}`, children: /* @__PURE__ */ jsx("div", { className: "h-full overflow-auto p-4", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm italic", children: labels.noContent }) }) });
79
- }
80
- const getLanguageDisplayName = /* @__PURE__ */ __name((lang) => {
81
- switch (lang.toLowerCase()) {
82
- case "bash":
83
- case "shell":
84
- return "Bash";
85
- case "python":
86
- case "py":
87
- return "Python";
88
- case "javascript":
89
- case "js":
90
- return "JavaScript";
91
- case "typescript":
92
- case "ts":
93
- return "TypeScript";
94
- case "json":
95
- return "JSON";
96
- case "yaml":
97
- case "yml":
98
- return "YAML";
99
- case "html":
100
- return "HTML";
101
- case "css":
102
- return "CSS";
103
- case "sql":
104
- return "SQL";
105
- case "xml":
106
- return "XML";
107
- case "markdown":
108
- case "md":
109
- return "Markdown";
110
- case "plaintext":
111
- case "text":
112
- return "Text";
113
- case "mermaid":
114
- return "Mermaid";
115
- case "ruby":
116
- case "rb":
117
- return "Ruby";
118
- case "java":
119
- return "Java";
120
- case "php":
121
- return "PHP";
122
- case "go":
123
- case "golang":
124
- return "Go";
125
- default:
126
- return lang.charAt(0).toUpperCase() + lang.slice(1);
127
- }
128
- }, "getLanguageDisplayName");
129
- const normalizedLanguage = (() => {
130
- const lang = language.toLowerCase();
131
- switch (lang) {
132
- case "javascript":
133
- case "js":
134
- return "javascript";
135
- case "typescript":
136
- case "ts":
137
- return "typescript";
138
- // Try TypeScript first
139
- case "python":
140
- case "py":
141
- return "python";
142
- case "json":
143
- return "json";
144
- case "css":
145
- return "css";
146
- case "html":
147
- return "markup";
148
- case "xml":
149
- return "markup";
150
- case "bash":
151
- case "shell":
152
- case "sh":
153
- return "bash";
154
- case "ruby":
155
- case "rb":
156
- return "ruby";
157
- case "java":
158
- return "java";
159
- case "php":
160
- return "php";
161
- case "go":
162
- case "golang":
163
- return "go";
164
- case "sql":
165
- return "sql";
166
- case "yaml":
167
- case "yml":
168
- return "yaml";
169
- case "markdown":
170
- case "md":
171
- return "markdown";
172
- case "mermaid":
173
- return "text";
174
- // Mermaid is handled separately in MarkdownMessage
175
- default:
176
- return lang || "text";
177
- }
178
- })();
179
- const displayLanguage = getLanguageDisplayName(language);
180
- if (variant === "plain") {
181
- return /* @__PURE__ */ jsx(Highlight, { theme: prismTheme, code: contentJson, language: normalizedLanguage, children: ({ className: prismClassName, style, tokens, getLineProps, getTokenProps }) => {
182
- const { backgroundColor: _bg, ...restStyle } = style;
183
- return /* @__PURE__ */ jsx(
184
- "pre",
185
- {
186
- className: `${prismClassName} ${className || ""}`,
187
- style: {
188
- ...restStyle,
189
- background: "transparent",
190
- margin: 0,
191
- padding: isCompact ? "0.75rem 1rem" : "1rem",
192
- fontSize,
193
- lineHeight: lineHeightRatio,
194
- fontFamily: "monospace",
195
- // ``break-all`` (not ``break-word``) so long unbroken
196
- // strings without whitespace — typical of escaped
197
- // JSON bodies in generated code samples — wrap at any
198
- // character rather than overflowing the container.
199
- whiteSpace: "pre-wrap",
200
- wordBreak: "break-all",
201
- overflowWrap: "anywhere",
202
- // Hard cap on width — parents (grid cells, panels)
203
- // should constrain us but some callers render inside
204
- // ``flex: 1 1 auto`` which lets the pre grow past
205
- // intended bounds. ``max-width: 100%`` pins to parent.
206
- maxWidth: "100%"
207
- },
208
- children: tokens.map((line, i) => /* @__PURE__ */ jsx("div", { ...getLineProps({ line }), children: line.map((token, key) => /* @__PURE__ */ jsx("span", { ...getTokenProps({ token }) }, key)) }, i))
209
- }
210
- );
211
- } });
212
- }
213
- if (inline) {
214
- const inlineBgClass = customBg || (isDarkMode ? "bg-zinc-800" : "bg-zinc-100");
215
- return /* @__PURE__ */ jsx(Highlight, { theme: prismTheme, code: contentJson, language: normalizedLanguage, children: ({ className: className2, style, tokens, getTokenProps }) => /* @__PURE__ */ jsx(
216
- "code",
217
- {
218
- className: `${className2} ${inlineBgClass} px-2 py-1 rounded ${isCompact ? "text-xs" : "text-sm"} font-mono inline-block`,
219
- style: {
220
- ...style,
221
- fontSize,
222
- fontFamily: "monospace"
223
- },
224
- children: tokens.map((line) => line.map((token, key) => /* @__PURE__ */ jsx("span", { ...getTokenProps({ token }) }, key)))
225
- }
226
- ) });
227
- }
228
- const bgClass = customBg || (isDarkMode ? "bg-zinc-900" : "bg-white");
229
- const borderClass = isDarkMode ? "border-zinc-700" : "border-border";
230
- return /* @__PURE__ */ jsxs(
231
- "div",
232
- {
233
- ref: containerRef,
234
- className: `group relative ${bgClass} rounded-lg border ${borderClass} ${className || ""}`,
235
- style: (
236
- // maxHeight caps growth at ``maxLines`` rows; without maxLines we
237
- // let the block grow to fit its content (no scroll).
238
- maxHeightPx ? { maxHeight: `${maxHeightPx}px` } : void 0
239
- ),
240
- children: [
241
- /* @__PURE__ */ jsx("div", { className: "absolute inset-x-0 top-0 pointer-events-none opacity-0 group-hover:opacity-100 transition-opacity duration-150 z-30", children: /* @__PURE__ */ jsx("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx(
242
- FloatingToolbar,
243
- {
244
- containerRef,
245
- scrollIsolation: shouldScroll ? scrollIsolation : false,
246
- label: /* @__PURE__ */ jsx("span", { className: "inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-muted/80 text-muted-foreground border border-border/50 backdrop-blur-sm", children: displayLanguage }),
247
- children: /* @__PURE__ */ jsx(CopyAction, { value: contentJson, title: labels.copyCode })
248
- }
249
- ) }) }),
250
- /* @__PURE__ */ jsx("div", { className: shouldScroll ? "h-full overflow-auto" : "", style: shouldScroll ? { maxHeight: maxHeightPx } : void 0, children: /* @__PURE__ */ jsx(Highlight, { theme: prismTheme, code: contentJson, language: normalizedLanguage, children: ({ className: className2, style, tokens, getLineProps, getTokenProps }) => {
251
- const { backgroundColor: _bg, ...restStyle } = style;
252
- return /* @__PURE__ */ jsx(
253
- "pre",
254
- {
255
- className: `${className2} rounded-lg`,
256
- style: {
257
- ...restStyle,
258
- margin: 0,
259
- // Top padding gives the hover toolbar room to sit over
260
- // the first line without covering it. Before: 2.5rem —
261
- // too much empty space on short snippets. Now: 1rem,
262
- // toolbar overlays with translucent bg on hover only.
263
- padding: "1rem 1rem 0.75rem 1rem",
264
- fontSize,
265
- lineHeight: lineHeightRatio,
266
- fontFamily: "monospace",
267
- whiteSpace: "pre-wrap",
268
- wordBreak: "break-word",
269
- overflowWrap: "break-word"
270
- },
271
- children: tokens.map((line, i) => /* @__PURE__ */ jsx("div", { ...getLineProps({ line }), children: line.map((token, key) => /* @__PURE__ */ jsx("span", { ...getTokenProps({ token }) }, key)) }, i))
272
- }
273
- );
274
- } }) })
275
- ]
276
- }
277
- );
278
- }, "PrettyCode");
279
- var PrettyCode_client_default = PrettyCode;
280
-
281
- export { PrettyCode_client_default as default };
282
- //# sourceMappingURL=PrettyCode.client-ZGYGKE7G.mjs.map
283
- //# sourceMappingURL=PrettyCode.client-ZGYGKE7G.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tools/PrettyCode/registerPrismLanguages.ts","../src/tools/PrettyCode/PrettyCode.client.tsx"],"names":["className"],"mappings":"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","file":"PrettyCode.client-ZGYGKE7G.mjs","sourcesContent":["/**\n * Register extra Prism language grammars onto the vendored Prism\n * instance that ``prism-react-renderer`` ships.\n *\n * Why this file exists:\n * ``prism-react-renderer@2.x`` bundles only a small set of core\n * languages (javascript, typescript, python, go, json, css,\n * markup, clike, …). Anything else — ``bash``, ``ruby``, ``java``,\n * ``php`` — isn't in the bundle, so passing ``language=\"bash\"`` to\n * ``<Highlight>`` silently renders as plain text.\n *\n * Canonical solution (per the official README):\n * - Grab the exported ``Prism`` instance.\n * - Hang it off ``globalThis`` so that ``prismjs`` language\n * components can find it when they self-register (they read\n * ``window.Prism`` / ``global.Prism`` at module-evaluation time).\n * - Load each grammar via dynamic ``import()`` — bare ``require``\n * doesn't work in ESM/Vite and static ``import 'prismjs/…'``\n * runs before we can hang Prism on the global.\n *\n * Runs once on module load, with a guard so repeated imports in\n * different bundles are a no-op. Safe for SSR: the grammars don't\n * touch the DOM and the dynamic import is awaited asynchronously —\n * server renders just miss the extra grammars, client renders pick\n * them up after hydration which is when the <Highlight> components\n * actually render anyway.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { useSyncExternalStore } from 'react';\nimport { Prism } from 'prism-react-renderer';\n\n// Hang the vendored Prism on the global so ``prismjs`` language\n// components can find it when their self-registration runs.\nconst globalScope: any = typeof globalThis !== 'undefined' ? globalThis : {};\nif (!globalScope.Prism) {\n globalScope.Prism = Prism;\n}\n\n// Ready-state machinery: one-shot boolean + subscribers. When loading\n// finishes we flip ``ready`` and notify listeners so components that\n// rendered before the grammars loaded can re-render and pick them up.\nlet ready = false;\nlet loading: Promise<void> | null = null;\nconst listeners = new Set<() => void>();\n\nfunction subscribe(cb: () => void): () => void {\n listeners.add(cb);\n return () => listeners.delete(cb);\n}\n\nfunction getSnapshot(): boolean {\n return ready;\n}\n\n// Server snapshot — always ``true`` so SSR doesn't trip the\n// ``server ≠ client`` warning. The actual registration only runs on\n// the client; server renders fall back to the bundled Prism set,\n// which for the OpenAPI viewer means JS / Python / Go highlight\n// server-side and bash / java / ruby / php render plain until hydration.\nfunction getServerSnapshot(): boolean {\n return true;\n}\n\nexport async function ensurePrismLanguages(): Promise<void> {\n if (ready) return;\n if (loading) return loading;\n\n loading = (async () => {\n // Dynamic imports so these modules evaluate AFTER we've\n // attached Prism to the global scope above.\n //\n // Load order matters: ``prism-php`` calls\n // ``Prism.languages.markup.tokenizePlaceholders`` at module\n // evaluation time, which is only defined after\n // ``markup-templating`` loads — so that must come first.\n // ``bash`` / ``java`` / ``ruby`` only depend on ``clike``\n // which is already bundled in ``prism-react-renderer``.\n await import('prismjs/components/prism-markup-templating' as string);\n await Promise.all([\n import('prismjs/components/prism-bash' as string),\n import('prismjs/components/prism-java' as string),\n import('prismjs/components/prism-ruby' as string),\n import('prismjs/components/prism-php' as string),\n ]);\n ready = true;\n listeners.forEach((cb) => cb());\n })();\n\n return loading;\n}\n\n/** Hook that triggers a re-render when the extra grammars finish\n * loading. Used by ``PrettyCode`` so the first render (which might\n * happen before loading completes) gets re-highlighted once the\n * grammars are available. */\nexport function useEnsurePrismLanguages(): boolean {\n const loaded = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n if (!loaded) {\n // Kick off loading (idempotent — re-entry is cheap) so the\n // next store update flips ``ready`` and we re-render.\n void ensurePrismLanguages();\n }\n return loaded;\n}\n\n// Also kick off on module load so the grammars start loading as\n// early as possible — by the time the user clicks a code-sample tab\n// they've usually finished.\nvoid ensurePrismLanguages();\n","'use client';\n\nimport { Highlight, Language, themes } from 'prism-react-renderer';\nimport React, { useMemo, useRef } from 'react';\n\nimport { useAppT } from '@djangocfg/i18n';\nimport { useResolvedTheme } from '@djangocfg/ui-core/hooks';\nimport { FloatingToolbar } from '../../components/FloatingToolbar';\nimport { CopyAction } from '../../components/FloatingToolbar/actions';\n\n// Load extra Prism grammars (``bash``, ``ruby``, ``java``, ``php``)\n// that aren't in ``prism-react-renderer``'s default bundle. The hook\n// below subscribes to its ready state and re-renders this component\n// once loading completes, so the first tab click gets highlighted\n// correctly even if it happened before the dynamic import resolved.\nimport { useEnsurePrismLanguages } from './registerPrismLanguages';\n\ninterface PrettyCodeProps {\n data: string | object;\n language: Language;\n className?: string;\n mode?: 'dark' | 'light';\n inline?: boolean;\n customBg?: string; // Custom background class\n isCompact?: boolean; // Compact mode for smaller font sizes\n scrollIsolation?: boolean; // Block scroll capture until user clicks (default: true)\n /**\n * Line count at which the viewer starts to scroll instead of growing.\n * ``undefined`` (default) = always grows to fit content, no scroll.\n * Set e.g. ``50`` to cap short snippets inline and scroll long ones.\n */\n maxLines?: number;\n /**\n * Visual variant. ``\"card\"`` (default) ships full chrome (border,\n * background, hover toolbar, optional internal scroll). ``\"plain\"``\n * is chrome-less — use when embedding inside another scroll\n * container so the surface manages its own chrome and scroll. */\n variant?: 'card' | 'plain';\n}\n\nconst PrettyCode = ({ data, language, className, mode, inline = false, customBg, isCompact = false, scrollIsolation, maxLines, variant = 'card' }: PrettyCodeProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const t = useAppT();\n const detectedTheme = useResolvedTheme();\n\n // Subscribe to the extra-grammars ready state. When ``bash`` /\n // ``ruby`` / ``java`` / ``php`` finish loading, this hook triggers a\n // re-render so the code block picks up the new grammar.\n useEnsurePrismLanguages();\n\n const labels = useMemo(() => ({\n copyCode: t('tools.code.copyCode'),\n noContent: t('tools.code.noContent'),\n }), [t]);\n\n // Font size based on compact mode\n const fontSize = isCompact ? '0.75rem' : '0.875rem'; // 12px vs 14px\n\n // Use provided mode or fall back to detected theme\n const currentTheme = mode || detectedTheme;\n const isDarkMode = currentTheme === 'dark';\n\n // Select the Prism theme based on the current theme\n const prismTheme = isDarkMode ? themes.vsDark : themes.vsLight;\n\n // Convert form object to JSON string with proper formatting\n const contentJson = typeof data === 'string' ? data : JSON.stringify(data || {}, null, 2);\n\n // Enable scroll only when content exceeds maxLines. Otherwise the block\n // grows to fit — short snippets feel natural, long ones get a cap.\n const lineCount = contentJson ? contentJson.split('\\n').length : 0;\n const lineHeightRatio = isCompact ? 1.4 : 1.5;\n const fontSizePx = isCompact ? 12 : 14;\n // Vertical padding of the <pre> (top + bottom, in px) — keep in sync\n // with the padding string below.\n const verticalPadPx = 16 + 12; // 1rem top + 0.75rem bottom (≈)\n const shouldScroll = maxLines !== undefined && lineCount > maxLines;\n const maxHeightPx = maxLines !== undefined\n ? maxLines * fontSizePx * lineHeightRatio + verticalPadPx\n : undefined;\n \n // Handle empty content\n if (!contentJson || contentJson.trim() === '') {\n const emptyBgClass = customBg || (isDarkMode ? 'bg-zinc-900' : 'bg-white');\n const emptyBorderClass = isDarkMode ? 'border-zinc-700' : 'border-border';\n return (\n <div className={`relative h-full ${emptyBgClass} rounded-sm border ${emptyBorderClass} ${className || ''}`}>\n <div className=\"h-full overflow-auto p-4\">\n <p className=\"text-muted-foreground text-sm italic\">{labels.noContent}</p>\n </div>\n </div>\n );\n }\n\n // Get display name for language badge\n const getLanguageDisplayName = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'bash':\n case 'shell':\n return 'Bash';\n case 'python':\n case 'py':\n return 'Python';\n case 'javascript':\n case 'js':\n return 'JavaScript';\n case 'typescript':\n case 'ts':\n return 'TypeScript';\n case 'json':\n return 'JSON';\n case 'yaml':\n case 'yml':\n return 'YAML';\n case 'html':\n return 'HTML';\n case 'css':\n return 'CSS';\n case 'sql':\n return 'SQL';\n case 'xml':\n return 'XML';\n case 'markdown':\n case 'md':\n return 'Markdown';\n case 'plaintext':\n case 'text':\n return 'Text';\n case 'mermaid':\n return 'Mermaid';\n case 'ruby':\n case 'rb':\n return 'Ruby';\n case 'java':\n return 'Java';\n case 'php':\n return 'PHP';\n case 'go':\n case 'golang':\n return 'Go';\n default:\n return lang.charAt(0).toUpperCase() + lang.slice(1);\n }\n };\n\n // Normalize language for Prism - use only basic supported languages\n const normalizedLanguage = (() => {\n const lang = language.toLowerCase();\n \n // Try basic languages that are definitely supported\n switch (lang) {\n case 'javascript':\n case 'js':\n return 'javascript';\n case 'typescript':\n case 'ts':\n return 'typescript'; // Try TypeScript first\n case 'python':\n case 'py':\n return 'python';\n case 'json':\n return 'json';\n case 'css':\n return 'css';\n case 'html':\n return 'markup';\n case 'xml':\n return 'markup';\n case 'bash':\n case 'shell':\n case 'sh':\n return 'bash';\n case 'ruby':\n case 'rb':\n return 'ruby';\n case 'java':\n return 'java';\n case 'php':\n return 'php';\n case 'go':\n case 'golang':\n return 'go';\n case 'sql':\n return 'sql';\n case 'yaml':\n case 'yml':\n return 'yaml';\n case 'markdown':\n case 'md':\n return 'markdown';\n case 'mermaid':\n return 'text'; // Mermaid is handled separately in MarkdownMessage\n default:\n // For unknown languages, try to use the original name first\n // If it doesn't work, Prism will fallback to plain text\n return lang || 'text';\n }\n })();\n\n const displayLanguage = getLanguageDisplayName(language);\n\n // Plain variant — chrome-less render for embedding inside other\n // scroll containers. No border, no background, no hover toolbar, no\n // internal scroll. The caller's ScrollArea/panel owns the chrome\n // and scroll responsibilities.\n if (variant === 'plain') {\n return (\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className: prismClassName, style, tokens, getLineProps, getTokenProps }) => {\n const { backgroundColor: _bg, ...restStyle } = style;\n return (\n <pre\n className={`${prismClassName} ${className || ''}`}\n style={{\n ...restStyle,\n background: 'transparent',\n margin: 0,\n padding: isCompact ? '0.75rem 1rem' : '1rem',\n fontSize,\n lineHeight: lineHeightRatio,\n fontFamily: 'monospace',\n // ``break-all`` (not ``break-word``) so long unbroken\n // strings without whitespace — typical of escaped\n // JSON bodies in generated code samples — wrap at any\n // character rather than overflowing the container.\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n overflowWrap: 'anywhere',\n // Hard cap on width — parents (grid cells, panels)\n // should constrain us but some callers render inside\n // ``flex: 1 1 auto`` which lets the pre grow past\n // intended bounds. ``max-width: 100%`` pins to parent.\n maxWidth: '100%',\n }}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n );\n }}\n </Highlight>\n );\n }\n\n if (inline) {\n const inlineBgClass = customBg || (isDarkMode ? 'bg-zinc-800' : 'bg-zinc-100');\n return (\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getTokenProps }) => (\n <code\n className={`${className} ${inlineBgClass} px-2 py-1 rounded ${isCompact ? 'text-xs' : 'text-sm'} font-mono inline-block`}\n style={{\n ...style,\n fontSize,\n fontFamily: 'monospace',\n }}\n >\n {tokens.map((line) => (\n line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))\n ))}\n </code>\n )}\n </Highlight>\n );\n }\n\n // Different backgrounds for dark/light - light mode uses white for better contrast with vsLight theme\n const bgClass = customBg || (isDarkMode ? 'bg-zinc-900' : 'bg-white');\n const borderClass = isDarkMode ? 'border-zinc-700' : 'border-border';\n\n return (\n <div\n ref={containerRef}\n className={`group relative ${bgClass} rounded-lg border ${borderClass} ${className || ''}`}\n style={\n // maxHeight caps growth at ``maxLines`` rows; without maxLines we\n // let the block grow to fit its content (no scroll).\n maxHeightPx ? { maxHeight: `${maxHeightPx}px` } : undefined\n }\n >\n {/* Toolbar: hidden by default, appears on hover. Absolute overlay so it doesn't shift layout.\n scrollIsolation is force-disabled when content fits without scrolling —\n otherwise the \"Click to scroll\" prompt shows on a block that has\n nothing to scroll, which reads as a bug. */}\n <div className=\"absolute inset-x-0 top-0 pointer-events-none opacity-0 group-hover:opacity-100 transition-opacity duration-150 z-30\">\n <div className=\"pointer-events-auto\">\n <FloatingToolbar\n containerRef={containerRef}\n scrollIsolation={shouldScroll ? scrollIsolation : false}\n label={\n <span className=\"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-muted/80 text-muted-foreground border border-border/50 backdrop-blur-sm\">\n {displayLanguage}\n </span>\n }\n >\n <CopyAction value={contentJson} title={labels.copyCode} />\n </FloatingToolbar>\n </div>\n </div>\n\n <div className={shouldScroll ? 'h-full overflow-auto' : ''} style={shouldScroll ? { maxHeight: maxHeightPx } : undefined}>\n <Highlight theme={prismTheme} code={contentJson} language={normalizedLanguage as Language}>\n {({ className, style, tokens, getLineProps, getTokenProps }) => {\n // Remove background from Prism theme - we use our own via CSS\n const { backgroundColor: _bg, ...restStyle } = style;\n return (\n <pre\n className={`${className} rounded-lg`}\n style={{\n ...restStyle,\n margin: 0,\n // Top padding gives the hover toolbar room to sit over\n // the first line without covering it. Before: 2.5rem —\n // too much empty space on short snippets. Now: 1rem,\n // toolbar overlays with translucent bg on hover only.\n padding: '1rem 1rem 0.75rem 1rem',\n fontSize,\n lineHeight: lineHeightRatio,\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}}\n </Highlight>\n </div>\n </div>\n );\n};\n\nexport default PrettyCode; "]}
@@ -1,4 +0,0 @@
1
- export { TreeRoot, TreeRoot_default as default } from './chunk-ZL7FH4NW.mjs';
2
- import './chunk-N2XQF2OL.mjs';
3
- //# sourceMappingURL=TreeRoot-5COOOSWG.mjs.map
4
- //# sourceMappingURL=TreeRoot-5COOOSWG.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"TreeRoot-5COOOSWG.mjs"}
@@ -1,19 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var chunkFVVF7VCD_cjs = require('./chunk-FVVF7VCD.cjs');
6
- require('./chunk-OLISEQHS.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, "TreeRoot", {
11
- enumerable: true,
12
- get: function () { return chunkFVVF7VCD_cjs.TreeRoot; }
13
- });
14
- Object.defineProperty(exports, "default", {
15
- enumerable: true,
16
- get: function () { return chunkFVVF7VCD_cjs.TreeRoot_default; }
17
- });
18
- //# sourceMappingURL=TreeRoot-AABP2J6Y.cjs.map
19
- //# sourceMappingURL=TreeRoot-AABP2J6Y.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"TreeRoot-AABP2J6Y.cjs"}