@djangocfg/ui-tools 2.1.334 → 2.1.336
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -2
- package/dist/ChatRoot-IIYQEWUU.mjs +5 -0
- package/dist/ChatRoot-IIYQEWUU.mjs.map +1 -0
- package/dist/ChatRoot-PNNGQCYF.css +7 -0
- package/dist/ChatRoot-PNNGQCYF.css.map +1 -0
- package/dist/ChatRoot-UUKTYM4N.cjs +14 -0
- package/dist/ChatRoot-UUKTYM4N.cjs.map +1 -0
- package/dist/{CronScheduler.client-3O3VU4CI.mjs → CronScheduler.client-DLMXCPAJ.mjs} +4 -4
- package/dist/{CronScheduler.client-3O3VU4CI.mjs.map → CronScheduler.client-DLMXCPAJ.mjs.map} +1 -1
- package/dist/{CronScheduler.client-A4GO6YBY.cjs → CronScheduler.client-WEJF4PWQ.cjs} +14 -14
- package/dist/{CronScheduler.client-A4GO6YBY.cjs.map → CronScheduler.client-WEJF4PWQ.cjs.map} +1 -1
- package/dist/{DocsLayout-XLDB6CJ2.cjs → DocsLayout-N5ZJZPBY.cjs} +200 -199
- package/dist/DocsLayout-N5ZJZPBY.cjs.map +1 -0
- package/dist/{DocsLayout-CTJINVBM.mjs → DocsLayout-VFPPNKSQ.mjs} +7 -6
- package/dist/DocsLayout-VFPPNKSQ.mjs.map +1 -0
- package/dist/JsonSchemaForm-DD7CLRIG.cjs +13 -0
- package/dist/{JsonSchemaForm-OSPUUUHM.cjs.map → JsonSchemaForm-DD7CLRIG.cjs.map} +1 -1
- package/dist/JsonSchemaForm-XKUIVELK.mjs +4 -0
- package/dist/{JsonSchemaForm-TSLX2GRO.mjs.map → JsonSchemaForm-XKUIVELK.mjs.map} +1 -1
- package/dist/JsonTree-55625VVH.mjs +5 -0
- package/dist/{JsonTree-F27RMYSI.cjs.map → JsonTree-55625VVH.mjs.map} +1 -1
- package/dist/JsonTree-DCM5QGWF.cjs +11 -0
- package/dist/{JsonTree-QTJYSHCV.mjs.map → JsonTree-DCM5QGWF.cjs.map} +1 -1
- package/dist/{LottiePlayer.client-6WVWDO75.cjs → LottiePlayer.client-2S7ISJ2S.cjs} +6 -6
- package/dist/{LottiePlayer.client-6WVWDO75.cjs.map → LottiePlayer.client-2S7ISJ2S.cjs.map} +1 -1
- package/dist/{LottiePlayer.client-B4I6WNZM.mjs → LottiePlayer.client-5LDSSJWS.mjs} +4 -4
- package/dist/{LottiePlayer.client-B4I6WNZM.mjs.map → LottiePlayer.client-5LDSSJWS.mjs.map} +1 -1
- package/dist/{MapContainer-RYG4HPH4.cjs → MapContainer-76YL2JXL.cjs} +8 -8
- package/dist/{MapContainer-RYG4HPH4.cjs.map → MapContainer-76YL2JXL.cjs.map} +1 -1
- package/dist/{MapContainer-GXQLP5WY.mjs → MapContainer-7HXBI3OH.mjs} +3 -3
- package/dist/{MapContainer-GXQLP5WY.mjs.map → MapContainer-7HXBI3OH.mjs.map} +1 -1
- package/dist/{Mermaid.client-SXRRI2YW.mjs → Mermaid.client-NL4SVR7F.mjs} +4 -4
- package/dist/{Mermaid.client-SXRRI2YW.mjs.map → Mermaid.client-NL4SVR7F.mjs.map} +1 -1
- package/dist/{Mermaid.client-W76R5AKJ.cjs → Mermaid.client-NNTI6DFX.cjs} +26 -26
- package/dist/{Mermaid.client-W76R5AKJ.cjs.map → Mermaid.client-NNTI6DFX.cjs.map} +1 -1
- package/dist/Player-BRV7XTWR.mjs +4 -0
- package/dist/{Player-M3GC3VPE.mjs.map → Player-BRV7XTWR.mjs.map} +1 -1
- package/dist/Player-PM7F7DD7.cjs +13 -0
- package/dist/{Player-ZL2X5LGG.cjs.map → Player-PM7F7DD7.cjs.map} +1 -1
- package/dist/{PrettyCode.client-RPDIE5CH.cjs → PrettyCode.client-KOHDVPPN.cjs} +13 -13
- package/dist/{PrettyCode.client-RPDIE5CH.cjs.map → PrettyCode.client-KOHDVPPN.cjs.map} +1 -1
- package/dist/{PrettyCode.client-SPMTQEG4.mjs → PrettyCode.client-ZGYGKE7G.mjs} +4 -4
- package/dist/{PrettyCode.client-SPMTQEG4.mjs.map → PrettyCode.client-ZGYGKE7G.mjs.map} +1 -1
- package/dist/TreeRoot-N72OYKXU.cjs +19 -0
- package/dist/{TreeRoot-A3J65L6F.mjs.map → TreeRoot-N72OYKXU.cjs.map} +1 -1
- package/dist/TreeRoot-VGAIXCUA.mjs +4 -0
- package/dist/{TreeRoot-DSK5JILT.cjs.map → TreeRoot-VGAIXCUA.mjs.map} +1 -1
- package/dist/chunk-2ZLKZ5VR.mjs +631 -0
- package/dist/chunk-2ZLKZ5VR.mjs.map +1 -0
- package/dist/{chunk-LFWQ36LJ.mjs → chunk-5G5YBFS6.mjs} +4 -4
- package/dist/{chunk-LFWQ36LJ.mjs.map → chunk-5G5YBFS6.mjs.map} +1 -1
- package/dist/{chunk-IHAY6FO6.cjs → chunk-5I5QNGUG.cjs} +17 -17
- package/dist/{chunk-IHAY6FO6.cjs.map → chunk-5I5QNGUG.cjs.map} +1 -1
- package/dist/{chunk-F2CMIIOH.cjs → chunk-76NNDZH6.cjs} +42 -42
- package/dist/{chunk-F2CMIIOH.cjs.map → chunk-76NNDZH6.cjs.map} +1 -1
- package/dist/chunk-B5AWZOHJ.cjs +649 -0
- package/dist/chunk-B5AWZOHJ.cjs.map +1 -0
- package/dist/{chunk-KR6B3LVY.mjs → chunk-B6IR5KSC.mjs} +3 -3
- package/dist/{chunk-KR6B3LVY.mjs.map → chunk-B6IR5KSC.mjs.map} +1 -1
- package/dist/{chunk-5LBDYFWH.mjs → chunk-C6GXVH5J.mjs} +3 -3
- package/dist/{chunk-5LBDYFWH.mjs.map → chunk-C6GXVH5J.mjs.map} +1 -1
- package/dist/{chunk-4IW7GZFQ.cjs → chunk-FEN5S772.cjs} +74 -48
- package/dist/chunk-FEN5S772.cjs.map +1 -0
- package/dist/{chunk-2SMCH62O.cjs → chunk-FP2RLYQZ.cjs} +11 -11
- package/dist/{chunk-2SMCH62O.cjs.map → chunk-FP2RLYQZ.cjs.map} +1 -1
- package/dist/{chunk-MOME6KYD.mjs → chunk-G5IEC7SR.mjs} +3 -3
- package/dist/{chunk-MOME6KYD.mjs.map → chunk-G5IEC7SR.mjs.map} +1 -1
- package/dist/{chunk-EXGXUK2N.mjs → chunk-GYIO7W7M.mjs} +41 -15
- package/dist/chunk-GYIO7W7M.mjs.map +1 -0
- package/dist/{chunk-3Z3A7FHA.cjs → chunk-IEEAENLX.cjs} +48 -48
- package/dist/{chunk-3Z3A7FHA.cjs.map → chunk-IEEAENLX.cjs.map} +1 -1
- package/dist/{chunk-DFTVB66S.cjs → chunk-KNDLV4PI.cjs} +85 -85
- package/dist/{chunk-DFTVB66S.cjs.map → chunk-KNDLV4PI.cjs.map} +1 -1
- package/dist/{chunk-SSUOENAZ.mjs → chunk-KNEQRUBA.mjs} +3 -3
- package/dist/{chunk-SSUOENAZ.mjs.map → chunk-KNEQRUBA.mjs.map} +1 -1
- package/dist/chunk-KRETIZU6.mjs +2218 -0
- package/dist/chunk-KRETIZU6.mjs.map +1 -0
- package/dist/{chunk-CGILA3WO.mjs → chunk-N2XQF2OL.mjs} +5 -3
- package/dist/{chunk-CGILA3WO.mjs.map → chunk-N2XQF2OL.mjs.map} +1 -1
- package/dist/{chunk-EUADAUBQ.mjs → chunk-N4MZYNR4.mjs} +4 -4
- package/dist/{chunk-EUADAUBQ.mjs.map → chunk-N4MZYNR4.mjs.map} +1 -1
- package/dist/chunk-NRXYYO5V.cjs +2257 -0
- package/dist/chunk-NRXYYO5V.cjs.map +1 -0
- package/dist/{chunk-GGKGH5PM.mjs → chunk-OBRSGM64.mjs} +4 -4
- package/dist/{chunk-GGKGH5PM.mjs.map → chunk-OBRSGM64.mjs.map} +1 -1
- package/dist/{chunk-6JTB2X72.mjs → chunk-ODO4GMW7.mjs} +3 -3
- package/dist/{chunk-6JTB2X72.mjs.map → chunk-ODO4GMW7.mjs.map} +1 -1
- package/dist/{chunk-WGEGR3DF.cjs → chunk-OLISEQHS.cjs} +5 -2
- package/dist/{chunk-WGEGR3DF.cjs.map → chunk-OLISEQHS.cjs.map} +1 -1
- package/dist/{chunk-PZKAH7WQ.mjs → chunk-PVAX67JG.mjs} +3 -3
- package/dist/{chunk-PZKAH7WQ.mjs.map → chunk-PVAX67JG.mjs.map} +1 -1
- package/dist/{chunk-PRPG2T2E.cjs → chunk-QJ6GTUCO.cjs} +6 -6
- package/dist/{chunk-PRPG2T2E.cjs.map → chunk-QJ6GTUCO.cjs.map} +1 -1
- package/dist/chunk-QW4RBGHN.cjs +961 -0
- package/dist/chunk-QW4RBGHN.cjs.map +1 -0
- package/dist/{chunk-33AMWFBZ.cjs → chunk-SGP7V2UW.cjs} +15 -15
- package/dist/{chunk-33AMWFBZ.cjs.map → chunk-SGP7V2UW.cjs.map} +1 -1
- package/dist/{chunk-FX2QFYWF.mjs → chunk-VWQ5WOIL.mjs} +3 -3
- package/dist/{chunk-FX2QFYWF.mjs.map → chunk-VWQ5WOIL.mjs.map} +1 -1
- package/dist/{chunk-ZLQHUZDU.cjs → chunk-YDPDTOSP.cjs} +139 -139
- package/dist/{chunk-ZLQHUZDU.cjs.map → chunk-YDPDTOSP.cjs.map} +1 -1
- package/dist/{chunk-77HQWEQ6.cjs → chunk-YW5IVWHQ.cjs} +33 -33
- package/dist/{chunk-77HQWEQ6.cjs.map → chunk-YW5IVWHQ.cjs.map} +1 -1
- package/dist/{chunk-YXBOAGIM.cjs → chunk-YXZ6GU7H.cjs} +7 -7
- package/dist/{chunk-YXBOAGIM.cjs.map → chunk-YXZ6GU7H.cjs.map} +1 -1
- package/dist/{chunk-62Y65TGK.mjs → chunk-ZUFTH5IR.mjs} +8 -631
- package/dist/chunk-ZUFTH5IR.mjs.map +1 -0
- package/dist/components-EHOGXATG.cjs +22 -0
- package/dist/{components-5UXYNAKR.cjs.map → components-EHOGXATG.cjs.map} +1 -1
- package/dist/components-MQ6DR7TX.cjs +26 -0
- package/dist/{components-CFXOEVPN.mjs.map → components-MQ6DR7TX.cjs.map} +1 -1
- package/dist/components-XRX7QGLB.mjs +5 -0
- package/dist/{components-WYEZL5TE.cjs.map → components-XRX7QGLB.mjs.map} +1 -1
- package/dist/components-YATKRWLH.mjs +5 -0
- package/dist/{components-ZAGG2PBO.mjs.map → components-YATKRWLH.mjs.map} +1 -1
- package/dist/file-icon/index.cjs +6 -6
- package/dist/file-icon/index.mjs +1 -1
- package/dist/index.cjs +735 -215
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +972 -39
- package/dist/index.d.ts +972 -39
- package/dist/index.mjs +387 -31
- package/dist/index.mjs.map +1 -1
- package/dist/tree/index.cjs +38 -38
- package/dist/tree/index.d.cts +2 -2
- package/dist/tree/index.d.ts +2 -2
- package/dist/tree/index.mjs +3 -3
- package/package.json +6 -6
- package/src/index.ts +5 -0
- package/src/stories/index.ts +3 -1
- package/src/tools/Chat/Chat.story.tsx +1006 -0
- package/src/tools/Chat/README.md +528 -0
- package/src/tools/Chat/components/Attachments.tsx +192 -0
- package/src/tools/Chat/components/ChatRoot.tsx +201 -0
- package/src/tools/Chat/components/Composer.tsx +134 -0
- package/src/tools/Chat/components/EmptyState.tsx +47 -0
- package/src/tools/Chat/components/ErrorBanner.tsx +47 -0
- package/src/tools/Chat/components/JumpToLatest.tsx +30 -0
- package/src/tools/Chat/components/MessageActions.tsx +72 -0
- package/src/tools/Chat/components/MessageBubble.tsx +228 -0
- package/src/tools/Chat/components/MessageList.tsx +82 -0
- package/src/tools/Chat/components/Sources.tsx +55 -0
- package/src/tools/Chat/components/StreamingIndicator.tsx +29 -0
- package/src/tools/Chat/components/ToolCalls.tsx +172 -0
- package/src/tools/Chat/components/index.ts +24 -0
- package/src/tools/Chat/config.ts +55 -0
- package/src/tools/Chat/context/ChatProvider.tsx +122 -0
- package/src/tools/Chat/context/index.ts +9 -0
- package/src/tools/Chat/core/audio/audioBus.ts +172 -0
- package/src/tools/Chat/core/audio/index.ts +8 -0
- package/src/tools/Chat/core/audio/preferences.ts +68 -0
- package/src/tools/Chat/core/audio/types.ts +49 -0
- package/src/tools/Chat/core/ids.ts +16 -0
- package/src/tools/Chat/core/index.ts +5 -0
- package/src/tools/Chat/core/markdown.ts +56 -0
- package/src/tools/Chat/core/payload-dispatch.ts +54 -0
- package/src/tools/Chat/core/persona.ts +35 -0
- package/src/tools/Chat/core/reducer.ts +335 -0
- package/src/tools/Chat/core/transport/http.ts +167 -0
- package/src/tools/Chat/core/transport/index.ts +13 -0
- package/src/tools/Chat/core/transport/mock.ts +134 -0
- package/src/tools/Chat/core/transport/sse.ts +116 -0
- package/src/tools/Chat/core/transport/types.ts +24 -0
- package/src/tools/Chat/hooks/index.ts +26 -0
- package/src/tools/Chat/hooks/useChat.ts +440 -0
- package/src/tools/Chat/hooks/useChatAudio.ts +191 -0
- package/src/tools/Chat/hooks/useChatComposer.ts +227 -0
- package/src/tools/Chat/hooks/useChatHistory.ts +59 -0
- package/src/tools/Chat/hooks/useChatLayout.ts +111 -0
- package/src/tools/Chat/hooks/useChatLightbox.ts +34 -0
- package/src/tools/Chat/hooks/useChatScroll.ts +132 -0
- package/src/tools/Chat/index.ts +158 -0
- package/src/tools/Chat/lazy.tsx +14 -0
- package/src/tools/Chat/types.ts +237 -0
- package/src/tools/Chat/utils/collectImageAttachments.ts +13 -0
- package/src/tools/JsonForm/JsonSchemaForm.tsx +32 -1
- package/src/tools/Map/README.md +384 -0
- package/dist/DocsLayout-CTJINVBM.mjs.map +0 -1
- package/dist/DocsLayout-XLDB6CJ2.cjs.map +0 -1
- package/dist/JsonSchemaForm-OSPUUUHM.cjs +0 -13
- package/dist/JsonSchemaForm-TSLX2GRO.mjs +0 -4
- package/dist/JsonTree-F27RMYSI.cjs +0 -11
- package/dist/JsonTree-QTJYSHCV.mjs +0 -5
- package/dist/Player-M3GC3VPE.mjs +0 -4
- package/dist/Player-ZL2X5LGG.cjs +0 -13
- package/dist/TreeRoot-A3J65L6F.mjs +0 -4
- package/dist/TreeRoot-DSK5JILT.cjs +0 -19
- package/dist/chunk-4IW7GZFQ.cjs.map +0 -1
- package/dist/chunk-62Y65TGK.mjs.map +0 -1
- package/dist/chunk-EXGXUK2N.mjs.map +0 -1
- package/dist/chunk-TKSFZHCG.cjs +0 -1597
- package/dist/chunk-TKSFZHCG.cjs.map +0 -1
- package/dist/components-5UXYNAKR.cjs +0 -22
- package/dist/components-CFXOEVPN.mjs +0 -5
- package/dist/components-WYEZL5TE.cjs +0 -26
- package/dist/components-ZAGG2PBO.mjs +0 -5
|
@@ -1 +1 @@
|
|
|
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-SPMTQEG4.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
|
+
{"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; "]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var chunkIEEAENLX_cjs = require('./chunk-IEEAENLX.cjs');
|
|
6
|
+
require('./chunk-OLISEQHS.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
Object.defineProperty(exports, "TreeRoot", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () { return chunkIEEAENLX_cjs.TreeRoot; }
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "default", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return chunkIEEAENLX_cjs.TreeRoot_default; }
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=TreeRoot-N72OYKXU.cjs.map
|
|
19
|
+
//# sourceMappingURL=TreeRoot-N72OYKXU.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"TreeRoot-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"TreeRoot-N72OYKXU.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"TreeRoot-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"TreeRoot-VGAIXCUA.mjs"}
|