@terra-symposium/docs 0.1.17 → 0.1.72
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 +26 -7
- package/bin/terra-docs.mjs +187 -0
- package/lib-dist/assets/fonts/AUTHENTICSans-130.woff +0 -0
- package/lib-dist/assets/fonts/AUTHENTICSans-130.woff2 +0 -0
- package/lib-dist/assets/fonts/AUTHENTICSans-150.woff +0 -0
- package/lib-dist/assets/fonts/AUTHENTICSans-150.woff2 +0 -0
- package/lib-dist/assets/fonts/AUTHENTICSans-90.woff +0 -0
- package/lib-dist/assets/fonts/AUTHENTICSans-90.woff2 +0 -0
- package/lib-dist/assets/fonts/Avara-Bold.woff +0 -0
- package/lib-dist/assets/fonts/Avara-BoldItalic.woff +0 -0
- package/lib-dist/assets/fonts/InterVariable-Italic-latin-20260728.woff2 +0 -0
- package/lib-dist/assets/fonts/InterVariable-latin-20260728.woff2 +0 -0
- package/lib-dist/assets/fonts/README.md +7 -0
- package/lib-dist/assets/fonts/licenses/Inter-OFL-1.1.txt +92 -0
- package/lib-dist/assets/fonts/licenses/OFL-1.1.txt +93 -0
- package/lib-dist/{Docs.d.ts → components/Docs.d.ts} +1 -1
- package/lib-dist/components/Docs.d.ts.map +1 -0
- package/lib-dist/components/Docs.js +9 -0
- package/lib-dist/components/Docs.js.map +1 -0
- package/lib-dist/{LocalDocsWorkspace.d.ts → components/LocalDocsWorkspace.d.ts} +9 -2
- package/lib-dist/components/LocalDocsWorkspace.d.ts.map +1 -0
- package/lib-dist/{LocalDocsWorkspace.js → components/LocalDocsWorkspace.js} +83 -24
- package/lib-dist/components/LocalDocsWorkspace.js.map +1 -0
- package/lib-dist/components/NotFound.d.ts +8 -0
- package/lib-dist/components/NotFound.d.ts.map +1 -0
- package/lib-dist/components/NotFound.js +6 -0
- package/lib-dist/components/NotFound.js.map +1 -0
- package/lib-dist/components/SiteLayout.d.ts +25 -0
- package/lib-dist/components/SiteLayout.d.ts.map +1 -0
- package/lib-dist/components/SiteLayout.js +12 -0
- package/lib-dist/components/SiteLayout.js.map +1 -0
- package/lib-dist/{StaticWorkspace.d.ts → components/StaticWorkspace.d.ts} +7 -3
- package/lib-dist/components/StaticWorkspace.d.ts.map +1 -0
- package/lib-dist/{StaticWorkspace.js → components/StaticWorkspace.js} +106 -34
- package/lib-dist/components/StaticWorkspace.js.map +1 -0
- package/lib-dist/components/StrictLocalWorkspaceHarness.d.ts +10 -0
- package/lib-dist/components/StrictLocalWorkspaceHarness.d.ts.map +1 -0
- package/lib-dist/components/StrictLocalWorkspaceHarness.js +12 -0
- package/lib-dist/components/StrictLocalWorkspaceHarness.js.map +1 -0
- package/lib-dist/components/blocks.d.ts.map +1 -0
- package/lib-dist/{blocks.js → components/blocks.js} +88 -13
- package/lib-dist/components/blocks.js.map +1 -0
- package/lib-dist/{navigation.d.ts → components/navigation.d.ts} +3 -1
- package/lib-dist/components/navigation.d.ts.map +1 -0
- package/lib-dist/components/navigation.js.map +1 -0
- package/lib-dist/{terra → components/terra}/Workspace.d.ts +1 -1
- package/lib-dist/components/terra/Workspace.d.ts.map +1 -0
- package/lib-dist/components/terra/Workspace.js +190 -0
- package/lib-dist/components/terra/Workspace.js.map +1 -0
- package/lib-dist/components/terra/editor/TerraContentEditor.d.ts +16 -0
- package/lib-dist/components/terra/editor/TerraContentEditor.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/TerraContentEditor.js +358 -0
- package/lib-dist/components/terra/editor/TerraContentEditor.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/_blocks.d.ts +3 -4
- package/lib-dist/components/terra/editor/_blocks.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/_blocks.js +120 -0
- package/lib-dist/components/terra/editor/_blocks.js.map +1 -0
- package/lib-dist/components/terra/editor/docs/BlockContext.d.ts +7 -0
- package/lib-dist/components/terra/editor/docs/BlockContext.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/BlockContext.js +60 -0
- package/lib-dist/components/terra/editor/docs/BlockContext.js.map +1 -0
- package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.d.ts +12 -0
- package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js +66 -0
- package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js.map +1 -0
- package/lib-dist/components/terra/editor/docs/TerraToolbar.d.ts +12 -0
- package/lib-dist/components/terra/editor/docs/TerraToolbar.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/TerraToolbar.js +169 -0
- package/lib-dist/components/terra/editor/docs/TerraToolbar.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Callout.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_Callout.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Callout.js +11 -7
- package/lib-dist/components/terra/editor/docs/_Callout.js.map +1 -0
- package/lib-dist/components/terra/editor/docs/_CodeBlock.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_CodeBlock.js +111 -46
- package/lib-dist/components/terra/editor/docs/_CodeBlock.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_DocsCode.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_DocsCode.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_DocsCode.js +47 -14
- package/lib-dist/components/terra/editor/docs/_DocsCode.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_DocsImage.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_DocsImage.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/_DocsImage.js +62 -0
- package/lib-dist/components/terra/editor/docs/_DocsImage.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Embed.d.ts +3 -1
- package/lib-dist/components/terra/editor/docs/_Embed.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/_Embed.js +73 -0
- package/lib-dist/components/terra/editor/docs/_Embed.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Math.d.ts +2 -2
- package/lib-dist/components/terra/editor/docs/_Math.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Math.js +29 -17
- package/lib-dist/components/terra/editor/docs/_Math.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Nodes.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_Nodes.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/_Nodes.js +62 -0
- package/lib-dist/components/terra/editor/docs/_Nodes.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Raw.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_Raw.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Raw.js +8 -3
- package/lib-dist/components/terra/editor/docs/_Raw.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Table.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_Table.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/_Table.js +99 -0
- package/lib-dist/components/terra/editor/docs/_Table.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Tabs.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_Tabs.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_Tabs.js +36 -15
- package/lib-dist/components/terra/editor/docs/_Tabs.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_TsDocs.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_TsDocs.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_TsDocs.js +16 -14
- package/lib-dist/components/terra/editor/docs/_TsDocs.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_math_inline.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/_math_inline.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/_math_inline.js +2 -2
- package/lib-dist/components/terra/editor/docs/_math_inline.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/heading.d.ts +1 -1
- package/lib-dist/components/terra/editor/docs/heading.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/docs/heading.js +8 -5
- package/lib-dist/components/terra/editor/docs/heading.js.map +1 -0
- package/lib-dist/components/terra/editor/docs/index.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/docs/index.js.map +1 -0
- package/lib-dist/components/terra/editor/terra-content.styles.d.ts +3 -0
- package/lib-dist/components/terra/editor/terra-content.styles.d.ts.map +1 -0
- package/lib-dist/components/terra/editor/terra-content.styles.js +3 -0
- package/lib-dist/components/terra/editor/terra-content.styles.js.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/types.d.ts +2 -2
- package/lib-dist/components/terra/editor/types.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/editor/types.js +1 -1
- package/lib-dist/components/terra/editor/types.js.map +1 -0
- package/lib-dist/{terra → components/terra}/flow/Nodes.d.ts +2 -3
- package/lib-dist/components/terra/flow/Nodes.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/flow/Nodes.js +213 -106
- package/lib-dist/components/terra/flow/Nodes.js.map +1 -0
- package/lib-dist/{terra → components/terra}/flow/_chrome.d.ts +7 -9
- package/lib-dist/components/terra/flow/_chrome.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/flow/_chrome.js +329 -118
- package/lib-dist/components/terra/flow/_chrome.js.map +1 -0
- package/lib-dist/components/terra/flow/menuContext.d.ts.map +1 -0
- package/lib-dist/components/terra/flow/menuContext.js.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_attachments.d.ts +1 -1
- package/lib-dist/components/terra/pages/docs/_attachments.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_attachments.js +375 -131
- package/lib-dist/components/terra/pages/docs/_attachments.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/_blocks.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_blocks.js +42 -31
- package/lib-dist/components/terra/pages/docs/_blocks.js.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_editable.d.ts +2 -3
- package/lib-dist/components/terra/pages/docs/_editable.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_editable.js +82 -44
- package/lib-dist/components/terra/pages/docs/_editable.js.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_export-dialog.d.ts +1 -1
- package/lib-dist/components/terra/pages/docs/_export-dialog.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_export-dialog.js +17 -17
- package/lib-dist/components/terra/pages/docs/_export-dialog.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/_icons.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/_icons.js.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_main.d.ts +10 -7
- package/lib-dist/components/terra/pages/docs/_main.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/_main.js +710 -0
- package/lib-dist/components/terra/pages/docs/_main.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.d.ts +10 -0
- package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js +597 -0
- package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_sidebar.d.ts +3 -12
- package/lib-dist/components/terra/pages/docs/_sidebar.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/_sidebar.js +1437 -0
- package/lib-dist/components/terra/pages/docs/_sidebar.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/_toc.d.ts +4 -0
- package/lib-dist/components/terra/pages/docs/_toc.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/_toc.js +212 -0
- package/lib-dist/components/terra/pages/docs/_toc.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.d.ts +15 -0
- package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js +207 -0
- package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_toolbar.d.ts +3 -5
- package/lib-dist/components/terra/pages/docs/_toolbar.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_toolbar.js +318 -350
- package/lib-dist/components/terra/pages/docs/_toolbar.js.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_tree.d.ts +1 -4
- package/lib-dist/components/terra/pages/docs/_tree.d.ts.map +1 -0
- package/lib-dist/{terra → components/terra}/pages/docs/_tree.js +219 -264
- package/lib-dist/components/terra/pages/docs/_tree.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/use-block-nav.d.ts +5 -0
- package/lib-dist/components/terra/pages/docs/use-block-nav.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/use-block-nav.js +1306 -0
- package/lib-dist/components/terra/pages/docs/use-block-nav.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/use-media-paste.d.ts +5 -0
- package/lib-dist/components/terra/pages/docs/use-media-paste.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/use-media-paste.js +391 -0
- package/lib-dist/components/terra/pages/docs/use-media-paste.js.map +1 -0
- package/lib-dist/components/terra/pages/docs/use-render-tripwire.d.ts +2 -0
- package/lib-dist/components/terra/pages/docs/use-render-tripwire.d.ts.map +1 -0
- package/lib-dist/components/terra/pages/docs/use-render-tripwire.js +25 -0
- package/lib-dist/components/terra/pages/docs/use-render-tripwire.js.map +1 -0
- package/lib-dist/{terra/runtime → components/terra}/ui.d.ts +2 -5
- package/lib-dist/components/terra/ui.d.ts.map +1 -0
- package/lib-dist/components/terra/ui.js +20 -0
- package/lib-dist/components/terra/ui.js.map +1 -0
- package/lib-dist/components/workspace-demo-fixture.d.ts +35 -0
- package/lib-dist/components/workspace-demo-fixture.d.ts.map +1 -0
- package/lib-dist/components/workspace-demo-fixture.js +820 -0
- package/lib-dist/components/workspace-demo-fixture.js.map +1 -0
- package/lib-dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/lib-dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/lib-dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Main-Bold.woff +0 -0
- package/lib-dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/lib-dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Main-Italic.woff +0 -0
- package/lib-dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Main-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/lib-dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Math-Italic.woff +0 -0
- package/lib-dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Script-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/lib-dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/lib-dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/lib-dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/lib-dist/lib/astro.d.ts +8 -0
- package/lib-dist/lib/astro.d.ts.map +1 -0
- package/lib-dist/lib/astro.js +27 -0
- package/lib-dist/lib/astro.js.map +1 -0
- package/lib-dist/lib/docs-theme.d.ts +7 -0
- package/lib-dist/lib/docs-theme.d.ts.map +1 -0
- package/lib-dist/lib/docs-theme.js +51 -0
- package/lib-dist/lib/docs-theme.js.map +1 -0
- package/lib-dist/lib/host-runtime.d.ts.map +1 -0
- package/lib-dist/{host-runtime.js → lib/host-runtime.js} +4 -2
- package/lib-dist/lib/host-runtime.js.map +1 -0
- package/lib-dist/{host.d.ts → lib/host.d.ts} +20 -0
- package/lib-dist/lib/host.d.ts.map +1 -0
- package/lib-dist/lib/host.js.map +1 -0
- package/lib-dist/lib/index.d.ts +34 -0
- package/lib-dist/lib/index.d.ts.map +1 -0
- package/lib-dist/lib/index.js +27 -0
- package/lib-dist/lib/index.js.map +1 -0
- package/lib-dist/{markdown-model.d.ts → lib/markdown-model.d.ts} +3 -3
- package/lib-dist/lib/markdown-model.d.ts.map +1 -0
- package/lib-dist/lib/markdown-model.js +2030 -0
- package/lib-dist/lib/markdown-model.js.map +1 -0
- package/lib-dist/lib/markdown.d.ts +3 -0
- package/lib-dist/lib/markdown.d.ts.map +1 -0
- package/lib-dist/lib/markdown.js +222 -0
- package/lib-dist/lib/markdown.js.map +1 -0
- package/lib-dist/{schema.d.ts → lib/schema.d.ts} +55 -23
- package/lib-dist/lib/schema.d.ts.map +1 -0
- package/lib-dist/{schema.js → lib/schema.js} +26 -18
- package/lib-dist/lib/schema.js.map +1 -0
- package/lib-dist/{terra/pages/docs/_custom.d.ts → lib/terra/custom-components.d.ts} +2 -2
- package/lib-dist/lib/terra/custom-components.d.ts.map +1 -0
- package/lib-dist/{terra/pages/docs/_custom.js → lib/terra/custom-components.js} +1 -1
- package/lib-dist/lib/terra/custom-components.js.map +1 -0
- package/lib-dist/lib/terra/docs/archive.d.ts +3 -0
- package/lib-dist/lib/terra/docs/archive.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/archive.js +654 -0
- package/lib-dist/lib/terra/docs/archive.js.map +1 -0
- package/lib-dist/lib/terra/docs/assets.d.ts +26 -0
- package/lib-dist/lib/terra/docs/assets.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/assets.js +74 -0
- package/lib-dist/lib/terra/docs/assets.js.map +1 -0
- package/lib-dist/lib/terra/docs/attachments.d.ts +4 -0
- package/lib-dist/lib/terra/docs/attachments.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/attachments.js +5 -0
- package/lib-dist/lib/terra/docs/attachments.js.map +1 -0
- package/lib-dist/lib/terra/docs/editor-dom.d.ts +50 -0
- package/lib-dist/lib/terra/docs/editor-dom.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/editor-dom.js +236 -0
- package/lib-dist/lib/terra/docs/editor-dom.js.map +1 -0
- package/lib-dist/lib/terra/docs/mutations.d.ts +10 -0
- package/lib-dist/lib/terra/docs/mutations.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/mutations.js +105 -0
- package/lib-dist/lib/terra/docs/mutations.js.map +1 -0
- package/lib-dist/lib/terra/docs/navigation.d.ts +6 -0
- package/lib-dist/lib/terra/docs/navigation.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/navigation.js +21 -0
- package/lib-dist/lib/terra/docs/navigation.js.map +1 -0
- package/lib-dist/lib/terra/docs/state.d.ts +185 -0
- package/lib-dist/lib/terra/docs/state.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/state.js +254 -0
- package/lib-dist/lib/terra/docs/state.js.map +1 -0
- package/lib-dist/lib/terra/docs/toolbar.d.ts +11 -0
- package/lib-dist/lib/terra/docs/toolbar.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/toolbar.js +41 -0
- package/lib-dist/lib/terra/docs/toolbar.js.map +1 -0
- package/lib-dist/lib/terra/docs/tree.d.ts +15 -0
- package/lib-dist/lib/terra/docs/tree.d.ts.map +1 -0
- package/lib-dist/lib/terra/docs/tree.js +61 -0
- package/lib-dist/lib/terra/docs/tree.js.map +1 -0
- package/lib-dist/{terra/pages/docs/_helpers.d.ts → lib/terra/docs/workspace.d.ts} +6 -8
- package/lib-dist/lib/terra/docs/workspace.d.ts.map +1 -0
- package/lib-dist/{terra/pages/docs/_helpers.js → lib/terra/docs/workspace.js} +39 -28
- package/lib-dist/lib/terra/docs/workspace.js.map +1 -0
- package/lib-dist/lib/terra/flow/_layout.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/flow/_layout.js +16 -6
- package/lib-dist/lib/terra/flow/_layout.js.map +1 -0
- package/lib-dist/{terra → lib/terra}/flow/powerSource.d.ts +1 -2
- package/lib-dist/lib/terra/flow/powerSource.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/flow/powerSource.js +10 -4
- package/lib-dist/lib/terra/flow/powerSource.js.map +1 -0
- package/lib-dist/{terra → lib/terra}/regex.mjs +11 -6
- package/lib-dist/lib/terra/runtime/action-proxy.d.ts +45 -0
- package/lib-dist/lib/terra/runtime/action-proxy.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/runtime/action-proxy.js +1 -1
- package/lib-dist/lib/terra/runtime/action-proxy.js.map +1 -0
- package/lib-dist/lib/terra/runtime/content/block-jsx.d.ts +23 -0
- package/lib-dist/lib/terra/runtime/content/block-jsx.d.ts.map +1 -0
- package/lib-dist/lib/terra/runtime/content/block-jsx.js +225 -0
- package/lib-dist/lib/terra/runtime/content/block-jsx.js.map +1 -0
- package/lib-dist/lib/terra/runtime/content/document-markdown.d.ts +41 -0
- package/lib-dist/lib/terra/runtime/content/document-markdown.d.ts.map +1 -0
- package/lib-dist/lib/terra/runtime/content/document-markdown.js +536 -0
- package/lib-dist/lib/terra/runtime/content/document-markdown.js.map +1 -0
- package/lib-dist/lib/terra/runtime/content/markdown.d.ts +109 -0
- package/lib-dist/lib/terra/runtime/content/markdown.d.ts.map +1 -0
- package/lib-dist/lib/terra/runtime/content/markdown.js +428 -0
- package/lib-dist/lib/terra/runtime/content/markdown.js.map +1 -0
- package/lib-dist/lib/terra/runtime/content.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/runtime/content.js +147 -62
- package/lib-dist/lib/terra/runtime/content.js.map +1 -0
- package/lib-dist/lib/terra/runtime/leaf.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/runtime/leaf.js +1 -1
- package/lib-dist/lib/terra/runtime/leaf.js.map +1 -0
- package/lib-dist/lib/terra/runtime/nodes.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/runtime/nodes.js +103 -31
- package/lib-dist/lib/terra/runtime/nodes.js.map +1 -0
- package/lib-dist/{terra → lib/terra}/runtime/runtime.d.ts +8 -2
- package/lib-dist/lib/terra/runtime/runtime.d.ts.map +1 -0
- package/lib-dist/lib/terra/runtime/runtime.js +86 -0
- package/lib-dist/lib/terra/runtime/runtime.js.map +1 -0
- package/lib-dist/lib/terra/runtime/shared.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/runtime/shared.js +56 -11
- package/lib-dist/lib/terra/runtime/shared.js.map +1 -0
- package/lib-dist/lib/terra/runtime/types.d.ts +529 -0
- package/lib-dist/lib/terra/runtime/types.d.ts.map +1 -0
- package/lib-dist/{terra → lib/terra}/runtime/types.js +28 -2
- package/lib-dist/lib/terra/runtime/types.js.map +1 -0
- package/lib-dist/lib/workspace-types.d.ts +32 -0
- package/lib-dist/lib/workspace-types.d.ts.map +1 -0
- package/lib-dist/lib/workspace-types.js +2 -0
- package/lib-dist/lib/workspace-types.js.map +1 -0
- package/lib-dist/style.css +237 -1
- package/package.json +63 -38
- package/site/astro.config.mjs +67 -0
- package/site/docs-content-plugin.mjs +62 -0
- package/site/src/components/DocsSiteSearch.tsx +108 -0
- package/site/src/lib/catalog.ts +151 -0
- package/site/src/pages/404.astro +38 -0
- package/site/src/pages/[...slug].astro +49 -0
- package/site/src/styles/search.css +56 -0
- package/src/components/NotFound.astro +6 -0
- package/src/components/NotFound.tsx +48 -0
- package/src/{SiteLayout.astro → components/SiteLayout.astro} +17 -5
- package/src/{navigation.tsx → components/navigation.tsx} +3 -1
- package/lib-dist/Docs.d.ts.map +0 -1
- package/lib-dist/Docs.js +0 -60
- package/lib-dist/Docs.js.map +0 -1
- package/lib-dist/LocalDocsWorkspace.d.ts.map +0 -1
- package/lib-dist/LocalDocsWorkspace.js.map +0 -1
- package/lib-dist/SiteLayout.d.ts +0 -30
- package/lib-dist/SiteLayout.d.ts.map +0 -1
- package/lib-dist/SiteLayout.js +0 -34
- package/lib-dist/SiteLayout.js.map +0 -1
- package/lib-dist/StaticWorkspace.d.ts.map +0 -1
- package/lib-dist/StaticWorkspace.js.map +0 -1
- package/lib-dist/_Toolbar.d.ts +0 -7
- package/lib-dist/_Toolbar.d.ts.map +0 -1
- package/lib-dist/_Toolbar.js +0 -85
- package/lib-dist/_Toolbar.js.map +0 -1
- package/lib-dist/blocks.d.ts.map +0 -1
- package/lib-dist/blocks.js.map +0 -1
- package/lib-dist/docs-catalog.d.ts +0 -5
- package/lib-dist/docs-catalog.d.ts.map +0 -1
- package/lib-dist/docs-catalog.js +0 -38
- package/lib-dist/docs-catalog.js.map +0 -1
- package/lib-dist/docs-style.css +0 -31
- package/lib-dist/fonts/README.md +0 -5
- package/lib-dist/host-runtime.d.ts.map +0 -1
- package/lib-dist/host-runtime.js.map +0 -1
- package/lib-dist/host.d.ts.map +0 -1
- package/lib-dist/host.js.map +0 -1
- package/lib-dist/index.d.ts +0 -35
- package/lib-dist/index.d.ts.map +0 -1
- package/lib-dist/index.js +0 -28
- package/lib-dist/index.js.map +0 -1
- package/lib-dist/markdown-model.d.ts.map +0 -1
- package/lib-dist/markdown-model.js +0 -181
- package/lib-dist/markdown-model.js.map +0 -1
- package/lib-dist/markdown.d.ts +0 -3
- package/lib-dist/markdown.d.ts.map +0 -1
- package/lib-dist/markdown.js +0 -83
- package/lib-dist/markdown.js.map +0 -1
- package/lib-dist/navigation.d.ts.map +0 -1
- package/lib-dist/navigation.js.map +0 -1
- package/lib-dist/schema.d.ts.map +0 -1
- package/lib-dist/schema.js.map +0 -1
- package/lib-dist/terra/Workspace.d.ts.map +0 -1
- package/lib-dist/terra/Workspace.js +0 -9
- package/lib-dist/terra/Workspace.js.map +0 -1
- package/lib-dist/terra/editor/TerraContentEditor.d.ts +0 -10
- package/lib-dist/terra/editor/TerraContentEditor.d.ts.map +0 -1
- package/lib-dist/terra/editor/TerraContentEditor.js +0 -47
- package/lib-dist/terra/editor/TerraContentEditor.js.map +0 -1
- package/lib-dist/terra/editor/_blocks.d.ts.map +0 -1
- package/lib-dist/terra/editor/_blocks.js +0 -110
- package/lib-dist/terra/editor/_blocks.js.map +0 -1
- package/lib-dist/terra/editor/docs/_Callout.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_Callout.js.map +0 -1
- package/lib-dist/terra/editor/docs/_CodeBlock.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_CodeBlock.js.map +0 -1
- package/lib-dist/terra/editor/docs/_DocsCode.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_DocsCode.js.map +0 -1
- package/lib-dist/terra/editor/docs/_DocsImage.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_DocsImage.js +0 -62
- package/lib-dist/terra/editor/docs/_DocsImage.js.map +0 -1
- package/lib-dist/terra/editor/docs/_Embed.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_Embed.js +0 -27
- package/lib-dist/terra/editor/docs/_Embed.js.map +0 -1
- package/lib-dist/terra/editor/docs/_Math.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_Math.js.map +0 -1
- package/lib-dist/terra/editor/docs/_Nodes.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_Nodes.js +0 -52
- package/lib-dist/terra/editor/docs/_Nodes.js.map +0 -1
- package/lib-dist/terra/editor/docs/_Raw.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_Raw.js.map +0 -1
- package/lib-dist/terra/editor/docs/_Table.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_Table.js +0 -71
- package/lib-dist/terra/editor/docs/_Table.js.map +0 -1
- package/lib-dist/terra/editor/docs/_Tabs.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_Tabs.js.map +0 -1
- package/lib-dist/terra/editor/docs/_TsDocs.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_TsDocs.js.map +0 -1
- package/lib-dist/terra/editor/docs/_math_inline.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/_math_inline.js.map +0 -1
- package/lib-dist/terra/editor/docs/heading.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/heading.js.map +0 -1
- package/lib-dist/terra/editor/docs/index.d.ts.map +0 -1
- package/lib-dist/terra/editor/docs/index.js.map +0 -1
- package/lib-dist/terra/editor/types.d.ts.map +0 -1
- package/lib-dist/terra/editor/types.js.map +0 -1
- package/lib-dist/terra/flow/Nodes.d.ts.map +0 -1
- package/lib-dist/terra/flow/Nodes.js.map +0 -1
- package/lib-dist/terra/flow/_chrome.d.ts.map +0 -1
- package/lib-dist/terra/flow/_chrome.js.map +0 -1
- package/lib-dist/terra/flow/_layout.d.ts.map +0 -1
- package/lib-dist/terra/flow/_layout.js.map +0 -1
- package/lib-dist/terra/flow/menuContext.d.ts.map +0 -1
- package/lib-dist/terra/flow/menuContext.js.map +0 -1
- package/lib-dist/terra/flow/powerSource.d.ts.map +0 -1
- package/lib-dist/terra/flow/powerSource.js.map +0 -1
- package/lib-dist/terra/pages/docs/_attachments.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_attachments.js.map +0 -1
- package/lib-dist/terra/pages/docs/_blocks.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_blocks.js.map +0 -1
- package/lib-dist/terra/pages/docs/_custom.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_custom.js.map +0 -1
- package/lib-dist/terra/pages/docs/_editable.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_editable.js.map +0 -1
- package/lib-dist/terra/pages/docs/_export-dialog.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_export-dialog.js.map +0 -1
- package/lib-dist/terra/pages/docs/_helpers.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_helpers.js.map +0 -1
- package/lib-dist/terra/pages/docs/_icons.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_icons.js.map +0 -1
- package/lib-dist/terra/pages/docs/_main.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_main.js +0 -1959
- package/lib-dist/terra/pages/docs/_main.js.map +0 -1
- package/lib-dist/terra/pages/docs/_sidebar.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_sidebar.js +0 -2450
- package/lib-dist/terra/pages/docs/_sidebar.js.map +0 -1
- package/lib-dist/terra/pages/docs/_toolbar.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_toolbar.js.map +0 -1
- package/lib-dist/terra/pages/docs/_tree.d.ts.map +0 -1
- package/lib-dist/terra/pages/docs/_tree.js.map +0 -1
- package/lib-dist/terra/runtime/action-proxy.d.ts +0 -5
- package/lib-dist/terra/runtime/action-proxy.d.ts.map +0 -1
- package/lib-dist/terra/runtime/action-proxy.js.map +0 -1
- package/lib-dist/terra/runtime/content.d.ts.map +0 -1
- package/lib-dist/terra/runtime/content.js.map +0 -1
- package/lib-dist/terra/runtime/leaf.d.ts.map +0 -1
- package/lib-dist/terra/runtime/leaf.js.map +0 -1
- package/lib-dist/terra/runtime/nodes.d.ts.map +0 -1
- package/lib-dist/terra/runtime/nodes.js.map +0 -1
- package/lib-dist/terra/runtime/runtime.d.ts.map +0 -1
- package/lib-dist/terra/runtime/runtime.js +0 -50
- package/lib-dist/terra/runtime/runtime.js.map +0 -1
- package/lib-dist/terra/runtime/shared.d.ts.map +0 -1
- package/lib-dist/terra/runtime/shared.js.map +0 -1
- package/lib-dist/terra/runtime/types.d.ts +0 -266
- package/lib-dist/terra/runtime/types.d.ts.map +0 -1
- package/lib-dist/terra/runtime/types.js.map +0 -1
- package/lib-dist/terra/runtime/ui.d.ts.map +0 -1
- package/lib-dist/terra/runtime/ui.js +0 -16
- package/lib-dist/terra/runtime/ui.js.map +0 -1
- package/lib-dist/workspace.d.ts +0 -78
- package/lib-dist/workspace.d.ts.map +0 -1
- package/lib-dist/workspace.js +0 -151
- package/lib-dist/workspace.js.map +0 -1
- package/src/style.css +0 -733
- /package/lib-dist/{fonts → assets/fonts}/Avara-Bold.woff2 +0 -0
- /package/lib-dist/{fonts → assets/fonts}/Avara-BoldItalic.woff2 +0 -0
- /package/lib-dist/{fonts → assets/fonts}/OFL-1.1.txt +0 -0
- /package/lib-dist/{blocks.d.ts → components/blocks.d.ts} +0 -0
- /package/lib-dist/{navigation.js → components/navigation.js} +0 -0
- /package/lib-dist/{terra → components/terra}/editor/docs/_CodeBlock.d.ts +0 -0
- /package/lib-dist/{terra → components/terra}/editor/docs/index.d.ts +0 -0
- /package/lib-dist/{terra → components/terra}/editor/docs/index.js +0 -0
- /package/lib-dist/{terra → components/terra}/flow/menuContext.d.ts +0 -0
- /package/lib-dist/{terra → components/terra}/flow/menuContext.js +0 -0
- /package/lib-dist/{terra → components/terra}/pages/docs/_blocks.d.ts +0 -0
- /package/lib-dist/{terra → components/terra}/pages/docs/_icons.d.ts +0 -0
- /package/lib-dist/{terra → components/terra}/pages/docs/_icons.js +0 -0
- /package/lib-dist/{host-runtime.d.ts → lib/host-runtime.d.ts} +0 -0
- /package/lib-dist/{host.js → lib/host.js} +0 -0
- /package/lib-dist/{terra → lib/terra}/flow/_layout.d.ts +0 -0
- /package/lib-dist/{terra → lib/terra}/runtime/content.d.ts +0 -0
- /package/lib-dist/{terra → lib/terra}/runtime/leaf.d.ts +0 -0
- /package/lib-dist/{terra → lib/terra}/runtime/nodes.d.ts +0 -0
- /package/lib-dist/{terra → lib/terra}/runtime/shared.d.ts +0 -0
|
@@ -8,29 +8,32 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
8
8
|
IMPORTS
|
|
9
9
|
//////////////////////////////////////////////////*/
|
|
10
10
|
// API
|
|
11
|
-
import { $
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
11
|
+
import { $surfaceReady, $transition, clearTransition, useAtom, } from '../../../../lib/terra/docs/state.js';
|
|
12
|
+
import { $attachmentFilter } from '../../../../lib/terra/docs/attachments.js';
|
|
13
|
+
import { sanitizeName } from '../../../../lib/terra/docs/tree.js';
|
|
14
|
+
import { uploadAssetChunked } from '../../../../lib/terra/docs/assets.js';
|
|
15
|
+
import { actions } from '../../../../lib/terra/runtime/action-proxy.js';
|
|
16
|
+
import { cn, error as logError, errorLog, isRec, notify, warn, } from '../../../../lib/terra/runtime/runtime.js';
|
|
17
|
+
import { createElement, createElement as __terraQualityCreateElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from 'react';
|
|
18
|
+
import { currLeafSrc } from '../../../../lib/terra/runtime/leaf.js';
|
|
19
|
+
import { dirname, docsPath, isDocsPath } from '../../../../lib/terra/runtime/shared.js';
|
|
17
20
|
import { toast } from 'sonner';
|
|
18
21
|
// COMPONENTS
|
|
19
|
-
import * as TerraQualityRegex from '
|
|
22
|
+
import * as TerraQualityRegex from '../../../../lib/terra/regex.mjs';
|
|
20
23
|
import { ArrowUpRight as PopOutIcon, Box as BoxIcon, Catalog as CatalogIcon, Copy as CopyIcon, Doc as DocumentIcon, Download as DownloadIcon, Edit as EditIcon, Image as ImageIcon, Link as LinkIcon, LogoYoutube as YouTubeIcon, MagicWand as MagicIcon, TrashCan as TrashIcon, Upload as UploadIcon, } from '@carbon/icons-react';
|
|
21
|
-
import { Button } from '@terra-symposium/styling/ui
|
|
22
|
-
import { Card, CardDescription, CardHeader, CardTitle } from '@terra-symposium/styling/ui
|
|
24
|
+
import { Button } from '@terra-symposium/styling/ui';
|
|
25
|
+
import { Card, CardDescription, CardHeader, CardTitle } from '@terra-symposium/styling/ui';
|
|
23
26
|
import { CodeBlock } from '../../editor/docs/_CodeBlock.js';
|
|
24
|
-
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@terra-symposium/styling/ui
|
|
25
|
-
import { ErrorBoundary } from '../../
|
|
26
|
-
import { Empty } from '../../
|
|
27
|
-
import { Input } from '@terra-symposium/styling/ui
|
|
28
|
-
import { Label } from '@terra-symposium/styling/ui
|
|
29
|
-
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@terra-symposium/styling/ui
|
|
30
|
-
import { Textarea } from '@terra-symposium/styling/ui
|
|
27
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@terra-symposium/styling/ui';
|
|
28
|
+
import { ErrorBoundary } from '../../ui.js';
|
|
29
|
+
import { Empty } from '../../ui.js';
|
|
30
|
+
import { Input } from '@terra-symposium/styling/ui';
|
|
31
|
+
import { Label } from '@terra-symposium/styling/ui';
|
|
32
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@terra-symposium/styling/ui';
|
|
33
|
+
import { Textarea } from '@terra-symposium/styling/ui';
|
|
31
34
|
import { TsDocsSelect } from './_blocks.js';
|
|
32
35
|
// DATA
|
|
33
|
-
import { ATTCH_TYPES } from '
|
|
36
|
+
import { ATTCH_TYPES } from '../../../../lib/terra/docs/attachments.js';
|
|
34
37
|
/*//////////////////////////////////////////////////
|
|
35
38
|
HELPERS
|
|
36
39
|
//////////////////////////////////////////////////*/
|
|
@@ -52,7 +55,16 @@ const latestContent = (content) => {
|
|
|
52
55
|
*
|
|
53
56
|
* @param sis - Attachment records to normalize for the Docs editor.
|
|
54
57
|
*/
|
|
55
|
-
const textAsset = (sis) =>
|
|
58
|
+
const textAsset = (sis) => {
|
|
59
|
+
const extension = /\.(?:csv|json|log|md|mdx|text|txt|xml|ya?ml)(?:[?#].*)?$/i;
|
|
60
|
+
return [sis.name, sis.title, sis.path].some((candidate) => typeof candidate === 'string' && extension.test(candidate.trim()));
|
|
61
|
+
};
|
|
62
|
+
const attachmentUrl = (attachmentPath, documentPath) => {
|
|
63
|
+
if (!/^(?:\.\.?(?:\/|$))/.test(attachmentPath))
|
|
64
|
+
return attachmentPath;
|
|
65
|
+
const basePath = documentPath.startsWith('/') ? documentPath : `/${documentPath}`;
|
|
66
|
+
return new URL(attachmentPath, new URL(basePath, window.location.origin)).toString();
|
|
67
|
+
};
|
|
56
68
|
/*//////////////////////////////////////////////////
|
|
57
69
|
COMPONENTS
|
|
58
70
|
//////////////////////////////////////////////////*/
|
|
@@ -84,9 +96,10 @@ export function Attachments({ dPath, tree }) {
|
|
|
84
96
|
const [transferring, setTransferring] = useState(false);
|
|
85
97
|
const [mergePdfState, setMergePdfState] = useState(null);
|
|
86
98
|
const [ctxAttachment, setCtxAttachment] = useState(null);
|
|
99
|
+
const ctxMenuRef = useRef(null);
|
|
87
100
|
const sistersMap = useMemo(() => {
|
|
88
101
|
const map = new Map();
|
|
89
|
-
sisters.forEach(s => {
|
|
102
|
+
sisters.forEach((s) => {
|
|
90
103
|
if (s.path)
|
|
91
104
|
map.set(s.path, s);
|
|
92
105
|
if (s.id)
|
|
@@ -94,7 +107,7 @@ export function Attachments({ dPath, tree }) {
|
|
|
94
107
|
});
|
|
95
108
|
return map;
|
|
96
109
|
}, [sisters]);
|
|
97
|
-
const selItems = useMemo(() => sel.map(p => sistersMap.get(p)).filter((s) => Boolean(s)), [sel, sistersMap]);
|
|
110
|
+
const selItems = useMemo(() => sel.map((p) => sistersMap.get(p)).filter((s) => Boolean(s)), [sel, sistersMap]);
|
|
98
111
|
useEffect(() => {
|
|
99
112
|
if (!viewDlg)
|
|
100
113
|
return;
|
|
@@ -105,7 +118,7 @@ export function Attachments({ dPath, tree }) {
|
|
|
105
118
|
const groups = [tree];
|
|
106
119
|
while (groups.length > 0) {
|
|
107
120
|
const nodes = groups.pop();
|
|
108
|
-
if (nodes.some(n => n.type === 'leaf' && n.path === dPath)) {
|
|
121
|
+
if (nodes.some((n) => n.type === 'leaf' && n.path === dPath)) {
|
|
109
122
|
tgts = nodes.filter((n) => n.type === 'leaf' && n.path !== dPath);
|
|
110
123
|
break;
|
|
111
124
|
}
|
|
@@ -123,7 +136,10 @@ export function Attachments({ dPath, tree }) {
|
|
|
123
136
|
let cat = 'other';
|
|
124
137
|
if (s.type === 'youtube')
|
|
125
138
|
cat = 'youtube';
|
|
126
|
-
else if (s.name.toLowerCase().endsWith('.pdf') ||
|
|
139
|
+
else if (s.name.toLowerCase().endsWith('.pdf') ||
|
|
140
|
+
s.path.toLowerCase().split('?')[0].endsWith('.pdf') ||
|
|
141
|
+
s.isMd ||
|
|
142
|
+
s.type === 'document')
|
|
127
143
|
cat = 'document';
|
|
128
144
|
else if (s.type === 'website')
|
|
129
145
|
cat = 'website';
|
|
@@ -131,7 +147,8 @@ export function Attachments({ dPath, tree }) {
|
|
|
131
147
|
cat = 'tsdocs';
|
|
132
148
|
else if (TerraQualityRegex.REGEX_PNG_JPE_G_GIF_WEBP_SVG_AVIF_I_REGEX_2().test(s.name))
|
|
133
149
|
cat = 'image';
|
|
134
|
-
else if (s.type &&
|
|
150
|
+
else if (s.type &&
|
|
151
|
+
((val) => ATTCH_TYPES.includes(val))(s.type))
|
|
135
152
|
cat = s.type;
|
|
136
153
|
if (!attchFilter.includes(cat))
|
|
137
154
|
continue;
|
|
@@ -179,7 +196,7 @@ export function Attachments({ dPath, tree }) {
|
|
|
179
196
|
}
|
|
180
197
|
setSisters(d);
|
|
181
198
|
})
|
|
182
|
-
.catch(_err => {
|
|
199
|
+
.catch((_err) => {
|
|
183
200
|
errorLog('Attachments', 'Fetch threw an exception', logError(_err));
|
|
184
201
|
})
|
|
185
202
|
.finally(() => {
|
|
@@ -197,18 +214,21 @@ export function Attachments({ dPath, tree }) {
|
|
|
197
214
|
* @param sis - Attachment records being filtered for the active document.
|
|
198
215
|
*/
|
|
199
216
|
const viewAsset = async (sis) => {
|
|
200
|
-
if (!textAsset(sis) || !sis.path.startsWith('
|
|
217
|
+
if (!textAsset(sis) || !sis.path || sis.path.startsWith('temp-')) {
|
|
201
218
|
setViewDlg(sis);
|
|
202
219
|
return;
|
|
203
220
|
}
|
|
204
221
|
try {
|
|
205
|
-
const res = await fetch(sis.path);
|
|
222
|
+
const res = await fetch(attachmentUrl(sis.path, dPath));
|
|
206
223
|
if (!res.ok)
|
|
207
224
|
throw new Error(`Attachment preview failed (${res.status}).`);
|
|
208
225
|
setViewDlg({ ...sis, content: await res.text() });
|
|
209
226
|
}
|
|
210
227
|
catch (err) {
|
|
211
|
-
notify({
|
|
228
|
+
notify({
|
|
229
|
+
error: err instanceof Error ? err : new Error('Attachment preview failed.'),
|
|
230
|
+
fallback: 'Failed to load attachment preview.',
|
|
231
|
+
});
|
|
212
232
|
setViewDlg(sis);
|
|
213
233
|
}
|
|
214
234
|
};
|
|
@@ -224,18 +244,30 @@ export function Attachments({ dPath, tree }) {
|
|
|
224
244
|
const finalAsset = await uploadAssetChunked(file, docId, {
|
|
225
245
|
onProgress: ({ currentChunk: currChunk, totalChunks, message: msg }) => {
|
|
226
246
|
if (msg)
|
|
227
|
-
setSisters(p => p.map(s => (s.id === tempId ? { ...s, name: msg } : s)));
|
|
247
|
+
setSisters((p) => p.map((s) => (s.id === tempId ? { ...s, name: msg } : s)));
|
|
228
248
|
else if (totalChunks > 1)
|
|
229
|
-
setSisters(p => p.map(s =>
|
|
249
|
+
setSisters((p) => p.map((s) => s.id === tempId ? { ...s, name: `Uploading (${currChunk}/${totalChunks})...` } : s));
|
|
230
250
|
},
|
|
231
251
|
});
|
|
232
|
-
setSisters(p => p.map(s =>
|
|
252
|
+
setSisters((p) => p.map((s) => s.id === tempId
|
|
253
|
+
? {
|
|
254
|
+
...s,
|
|
255
|
+
...(finalAsset.id ? { id: finalAsset.id } : {}),
|
|
256
|
+
path: finalAsset.path || finalAsset.src || tempId,
|
|
257
|
+
name: finalAsset.name || file.name,
|
|
258
|
+
isMd: isMdFile,
|
|
259
|
+
title: file.name,
|
|
260
|
+
}
|
|
261
|
+
: s));
|
|
233
262
|
}
|
|
234
263
|
catch (_err) {
|
|
235
264
|
errorLog('Attachments:Upload', `Failed '${file.name}'`, logError(_err));
|
|
236
|
-
setSisters(p => p.filter(s => s.id !== tempId));
|
|
265
|
+
setSisters((p) => p.filter((s) => s.id !== tempId));
|
|
237
266
|
toast.error(_err instanceof Error ? _err.message : `Failed to upload ${file.name}.`);
|
|
238
|
-
notify({
|
|
267
|
+
notify({
|
|
268
|
+
error: _err instanceof Error ? _err : new Error('Failed to attach.'),
|
|
269
|
+
fallback: `Failed to upload ${file.name}.`,
|
|
270
|
+
});
|
|
239
271
|
}
|
|
240
272
|
};
|
|
241
273
|
const add = useCallback(async (v) => {
|
|
@@ -243,13 +275,16 @@ export function Attachments({ dPath, tree }) {
|
|
|
243
275
|
return;
|
|
244
276
|
const validFiles = [];
|
|
245
277
|
const pdfFiles = [];
|
|
246
|
-
Array.from(v).forEach(f => {
|
|
278
|
+
Array.from(v).forEach((f) => {
|
|
247
279
|
validFiles.push(f);
|
|
248
280
|
if (f.name.toLowerCase().endsWith('.pdf') || f.type === 'application/pdf')
|
|
249
281
|
pdfFiles.push(f);
|
|
250
282
|
});
|
|
251
283
|
if (pdfFiles.length > 1) {
|
|
252
|
-
setMergePdfState({
|
|
284
|
+
setMergePdfState({
|
|
285
|
+
pdfs: pdfFiles,
|
|
286
|
+
others: validFiles.filter((f) => !pdfFiles.includes(f)),
|
|
287
|
+
});
|
|
253
288
|
if (fileRef.current)
|
|
254
289
|
fileRef.current.value = '';
|
|
255
290
|
return;
|
|
@@ -257,7 +292,7 @@ export function Attachments({ dPath, tree }) {
|
|
|
257
292
|
validFiles.forEach((f, i) => {
|
|
258
293
|
const isMdFile = TerraQualityRegex.REGEX_MD_MDX_I_REGEX().test(f.name);
|
|
259
294
|
const tmpId = `temp-${Date.now()}-${i}`;
|
|
260
|
-
setSisters(p => [...p, { id: tmpId, path: tmpId, name: f.name, isMd: isMdFile }]);
|
|
295
|
+
setSisters((p) => [...p, { id: tmpId, path: tmpId, name: f.name, isMd: isMdFile }]);
|
|
261
296
|
void processUpload(f, tmpId, isMdFile);
|
|
262
297
|
});
|
|
263
298
|
if (fileRef.current)
|
|
@@ -267,7 +302,11 @@ export function Attachments({ dPath, tree }) {
|
|
|
267
302
|
setAddDialogOpen(false);
|
|
268
303
|
if ($transition.get() || !dPath || !v.trim())
|
|
269
304
|
return;
|
|
270
|
-
const urls = v
|
|
305
|
+
const urls = v
|
|
306
|
+
.split(TerraQualityRegex.REGEX_N_S_REGEX())
|
|
307
|
+
.filter((u) => t === 'tsdocs'
|
|
308
|
+
? u.trim().length > 0
|
|
309
|
+
: u.startsWith('http') || isDocsPath(u) || u.startsWith('/tsdocs'));
|
|
271
310
|
if (!urls.length)
|
|
272
311
|
return;
|
|
273
312
|
setUploading(true);
|
|
@@ -285,48 +324,96 @@ export function Attachments({ dPath, tree }) {
|
|
|
285
324
|
try {
|
|
286
325
|
let item = null;
|
|
287
326
|
if (aType === 'youtube') {
|
|
288
|
-
const { data, error } = await actions.write.attachment.youtube({
|
|
327
|
+
const { data, error } = await actions.write.attachment.youtube({
|
|
328
|
+
path: docId,
|
|
329
|
+
url: u,
|
|
330
|
+
});
|
|
289
331
|
if (error || !data)
|
|
290
332
|
throw error;
|
|
291
333
|
const { title } = data;
|
|
292
|
-
item = {
|
|
334
|
+
item = {
|
|
335
|
+
id: tmpId,
|
|
336
|
+
path: u,
|
|
337
|
+
name: `${title} Video`,
|
|
338
|
+
isMd: false,
|
|
339
|
+
title,
|
|
340
|
+
type: 'youtube',
|
|
341
|
+
sourceUrl: u,
|
|
342
|
+
};
|
|
293
343
|
}
|
|
294
344
|
else if (aType === 'website') {
|
|
295
|
-
const { data: webData, error: webErr } = await actions.read.external.website({
|
|
345
|
+
const { data: webData, error: webErr } = await actions.read.external.website({
|
|
346
|
+
url: u,
|
|
347
|
+
});
|
|
296
348
|
if (webErr || !webData)
|
|
297
349
|
throw webErr;
|
|
298
350
|
const { title, text } = webData;
|
|
299
351
|
const dir = dirname(dPath);
|
|
300
352
|
const nPath = `${dir === '.' ? '' : `${dir}/`}${sanitizeName(title || 'website')}.mdx`;
|
|
301
|
-
const { data: docData, error: wErr } = await actions.write.doc.editor({
|
|
353
|
+
const { data: docData, error: wErr } = await actions.write.doc.editor({
|
|
354
|
+
path: nPath,
|
|
355
|
+
source: text,
|
|
356
|
+
title,
|
|
357
|
+
type: 'website',
|
|
358
|
+
sourceUrl: u,
|
|
359
|
+
});
|
|
302
360
|
if (wErr || !docData)
|
|
303
361
|
throw wErr;
|
|
304
|
-
item = {
|
|
362
|
+
item = {
|
|
363
|
+
id: tmpId,
|
|
364
|
+
path: nPath,
|
|
365
|
+
name: nPath.split('/').pop() || '',
|
|
366
|
+
isMd: true,
|
|
367
|
+
title,
|
|
368
|
+
type: 'website',
|
|
369
|
+
sourceUrl: u,
|
|
370
|
+
source: text,
|
|
371
|
+
};
|
|
305
372
|
}
|
|
306
373
|
else if (aType === 'tsdocs') {
|
|
307
|
-
const fmtUrl = u.startsWith('http')
|
|
374
|
+
const fmtUrl = u.startsWith('http')
|
|
375
|
+
? u
|
|
376
|
+
: u.startsWith('/')
|
|
377
|
+
? `${window.location.origin}${u}`
|
|
378
|
+
: `${window.location.origin}${docsPath(`tsdocs/${u}`)}`;
|
|
308
379
|
const { data: linkData, error: linkErr } = await actions.write.attachment.link({
|
|
309
380
|
path: docId,
|
|
310
381
|
url: fmtUrl,
|
|
311
382
|
type: 'tsdocs',
|
|
312
|
-
title: (u
|
|
383
|
+
title: (u
|
|
384
|
+
.split('/')
|
|
385
|
+
.filter(Boolean)
|
|
386
|
+
.pop()
|
|
387
|
+
?.replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ') || 'TsDocs Reference').replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), (c) => c.toUpperCase()),
|
|
313
388
|
});
|
|
314
389
|
if (linkErr || !linkData)
|
|
315
390
|
throw linkErr;
|
|
316
391
|
const { title } = linkData;
|
|
317
|
-
item = {
|
|
392
|
+
item = {
|
|
393
|
+
id: tmpId,
|
|
394
|
+
path: fmtUrl,
|
|
395
|
+
name: title,
|
|
396
|
+
isMd: false,
|
|
397
|
+
title,
|
|
398
|
+
type: 'tsdocs',
|
|
399
|
+
sourceUrl: fmtUrl,
|
|
400
|
+
};
|
|
318
401
|
}
|
|
319
402
|
else {
|
|
320
|
-
const { data, error } = await actions.write.attachment.remoteFile({
|
|
403
|
+
const { data, error } = await actions.write.attachment.remoteFile({
|
|
404
|
+
path: docId,
|
|
405
|
+
url: u,
|
|
406
|
+
type: aType,
|
|
407
|
+
});
|
|
321
408
|
if (error || !data)
|
|
322
409
|
throw error;
|
|
323
|
-
const { title, id, path: assetPath, name } = data;
|
|
410
|
+
const { title, id, path: assetPath, name, } = data;
|
|
324
411
|
item = { id, path: assetPath, name, isMd: false, title, type: aType, sourceUrl: u };
|
|
325
412
|
}
|
|
326
|
-
setSisters(p => p.map(s => (s.id === tmpId ? item : s)));
|
|
413
|
+
setSisters((p) => p.map((s) => (s.id === tmpId ? item : s)));
|
|
327
414
|
}
|
|
328
415
|
catch (_err) {
|
|
329
|
-
setSisters(p => p.filter(s => s.id !== tmpId));
|
|
416
|
+
setSisters((p) => p.filter((s) => s.id !== tmpId));
|
|
330
417
|
toast.error(`Failed to process ${u}`);
|
|
331
418
|
}
|
|
332
419
|
}));
|
|
@@ -344,14 +431,22 @@ export function Attachments({ dPath, tree }) {
|
|
|
344
431
|
return;
|
|
345
432
|
const text = e.clipboardData?.getData('text');
|
|
346
433
|
if (text) {
|
|
347
|
-
const urls = text
|
|
434
|
+
const urls = text
|
|
435
|
+
.split(TerraQualityRegex.REGEX_N_S_REGEX())
|
|
436
|
+
.filter((u) => u.startsWith('http') || isDocsPath(u) || u.startsWith('/tsdocs'));
|
|
348
437
|
if (urls.length > 0) {
|
|
349
438
|
e.preventDefault();
|
|
350
|
-
const ytUrls = urls.filter(u => u.includes('youtube.com') || u.includes('youtu.be'));
|
|
351
|
-
const refUrls = urls.filter(u => u.includes('/tsdocs/'));
|
|
352
|
-
const imgUrls = urls.filter(u => TerraQualityRegex.REGEX_PNG_JPE_G_GIF_WEBP_SVG_AVIF_I_REGEX_2().test(u.toLowerCase().split('?')[0] ?? ''));
|
|
353
|
-
const docUrls = [
|
|
354
|
-
|
|
439
|
+
const ytUrls = urls.filter((u) => u.includes('youtube.com') || u.includes('youtu.be'));
|
|
440
|
+
const refUrls = urls.filter((u) => u.includes('/tsdocs/'));
|
|
441
|
+
const imgUrls = urls.filter((u) => TerraQualityRegex.REGEX_PNG_JPE_G_GIF_WEBP_SVG_AVIF_I_REGEX_2().test(u.toLowerCase().split('?')[0] ?? ''));
|
|
442
|
+
const docUrls = [
|
|
443
|
+
...urls.filter((u) => u.toLowerCase().split('?')[0].endsWith('.pdf')),
|
|
444
|
+
...urls.filter((u) => u.toLowerCase().split('?')[0].endsWith('.json')),
|
|
445
|
+
];
|
|
446
|
+
const webUrls = urls.filter((u) => !ytUrls.includes(u) &&
|
|
447
|
+
!refUrls.includes(u) &&
|
|
448
|
+
!docUrls.includes(u) &&
|
|
449
|
+
!imgUrls.includes(u));
|
|
355
450
|
if (ytUrls.length > 0)
|
|
356
451
|
void addRemote(ytUrls.join('\n'), 'youtube');
|
|
357
452
|
if (refUrls.length > 0)
|
|
@@ -386,19 +481,23 @@ export function Attachments({ dPath, tree }) {
|
|
|
386
481
|
const { path, name, isMd, id } = renameDlg;
|
|
387
482
|
const nFilename = `${sanitizeName(nName)}${name.match(TerraQualityRegex.REGEX_I_REGEX())?.[0] ?? ''}`;
|
|
388
483
|
const nPath = `${dirname(path) === '.' ? '' : `${dirname(path)}/`}${nFilename}`;
|
|
389
|
-
setSisters(p => p.map(s => (s.path === path ? { ...s, path: nPath, name: nFilename } : s)));
|
|
484
|
+
setSisters((p) => p.map((s) => (s.path === path ? { ...s, path: nPath, name: nFilename } : s)));
|
|
390
485
|
if (isMd) {
|
|
391
486
|
const { error: err } = await actions.write.doc.commit({ cur: path, next: nPath });
|
|
392
487
|
if (err)
|
|
393
488
|
throw err;
|
|
394
489
|
}
|
|
395
490
|
else if (id)
|
|
396
|
-
await actions.write.attachment.rename({
|
|
491
|
+
await actions.write.attachment.rename({
|
|
492
|
+
docPath: docId,
|
|
493
|
+
attachmentKey: id,
|
|
494
|
+
newName: nFilename,
|
|
495
|
+
});
|
|
397
496
|
toast.success('Renamed successfully');
|
|
398
497
|
}
|
|
399
498
|
catch (_err) {
|
|
400
499
|
errorLog('Attachments:Rename', 'Rename failed', logError(_err));
|
|
401
|
-
setSisters(p => p.map(s =>
|
|
500
|
+
setSisters((p) => p.map((s) => s.path === renameDlg.path ? { ...s, path: renameDlg.path, name: renameDlg.name } : s));
|
|
402
501
|
toast.error('Failed to rename attachment');
|
|
403
502
|
}
|
|
404
503
|
finally {
|
|
@@ -414,8 +513,8 @@ export function Attachments({ dPath, tree }) {
|
|
|
414
513
|
const remove = async (items) => {
|
|
415
514
|
if (!window.confirm(`Are you sure you want to delete ${items.length} items?`))
|
|
416
515
|
return;
|
|
417
|
-
const itemKeys = new Set(items.flatMap(i => [i.id, i.path].filter(Boolean)));
|
|
418
|
-
setSisters(p => p.filter(s => !(s.id && itemKeys.has(s.id)) && !(s.path && itemKeys.has(s.path))));
|
|
516
|
+
const itemKeys = new Set(items.flatMap((i) => [i.id, i.path].filter(Boolean)));
|
|
517
|
+
setSisters((p) => p.filter((s) => !(s.id && itemKeys.has(s.id)) && !(s.path && itemKeys.has(s.path))));
|
|
419
518
|
try {
|
|
420
519
|
await Promise.allSettled(items.map(async (i) => {
|
|
421
520
|
if (i.isMd)
|
|
@@ -430,10 +529,17 @@ export function Attachments({ dPath, tree }) {
|
|
|
430
529
|
}
|
|
431
530
|
catch (_err) {
|
|
432
531
|
setSisters([...sisters]);
|
|
433
|
-
notify({
|
|
532
|
+
notify({
|
|
533
|
+
error: _err instanceof Error ? _err : new Error('Deletion failed'),
|
|
534
|
+
fallback: 'Failed to delete some attachments.',
|
|
535
|
+
});
|
|
434
536
|
}
|
|
435
537
|
};
|
|
436
|
-
const isDialogOpen = !!mergePdfState ||
|
|
538
|
+
const isDialogOpen = !!mergePdfState ||
|
|
539
|
+
!!viewDlg ||
|
|
540
|
+
(renameDlg?.open ?? false) ||
|
|
541
|
+
(transferDlg?.open ?? false) ||
|
|
542
|
+
addDialogOpen;
|
|
437
543
|
// GLOBAL KEYBOARD SHORTCUTS
|
|
438
544
|
useEffect(() => {
|
|
439
545
|
/**
|
|
@@ -472,6 +578,18 @@ export function Attachments({ dPath, tree }) {
|
|
|
472
578
|
window.addEventListener('keydown', close);
|
|
473
579
|
return () => window.removeEventListener('keydown', close);
|
|
474
580
|
}, [ctxAttachment]);
|
|
581
|
+
useLayoutEffect(() => {
|
|
582
|
+
const menu = ctxMenuRef.current;
|
|
583
|
+
if (!ctxAttachment || !menu)
|
|
584
|
+
return;
|
|
585
|
+
const { width, height } = menu.getBoundingClientRect();
|
|
586
|
+
const inset = 8;
|
|
587
|
+
const x = Math.max(inset, Math.min(ctxAttachment.x, window.innerWidth - width - inset));
|
|
588
|
+
const y = Math.max(inset, Math.min(ctxAttachment.y, window.innerHeight - height - inset));
|
|
589
|
+
if (x !== ctxAttachment.x || y !== ctxAttachment.y) {
|
|
590
|
+
setCtxAttachment((current) => current?.item.path === ctxAttachment.item.path ? { ...current, x, y } : current);
|
|
591
|
+
}
|
|
592
|
+
}, [ctxAttachment]);
|
|
475
593
|
useEffect(() => {
|
|
476
594
|
/**
|
|
477
595
|
* Opens the attachment context menu for the item under the pointer.
|
|
@@ -479,9 +597,13 @@ export function Attachments({ dPath, tree }) {
|
|
|
479
597
|
* @param e - Mouse event used to identify the attachment item and menu position.
|
|
480
598
|
*/
|
|
481
599
|
const open = (e) => {
|
|
482
|
-
const id = (e.target instanceof Element
|
|
600
|
+
const id = (e.target instanceof Element
|
|
601
|
+
? e.target.closest('[data-docs-attachment-id]')
|
|
602
|
+
: null)?.dataset.docsAttachmentId;
|
|
483
603
|
const item = id ? sistersMap.get(id) : undefined;
|
|
484
|
-
if (!(e.target instanceof Element
|
|
604
|
+
if (!(e.target instanceof Element
|
|
605
|
+
? e.target.closest('[data-docs-attachments]')
|
|
606
|
+
: null))
|
|
485
607
|
return;
|
|
486
608
|
e.preventDefault();
|
|
487
609
|
if (item)
|
|
@@ -493,72 +615,94 @@ export function Attachments({ dPath, tree }) {
|
|
|
493
615
|
return () => document.removeEventListener('contextmenu', open, true);
|
|
494
616
|
}, [sistersMap]);
|
|
495
617
|
// RENDER
|
|
496
|
-
return (_jsxs(ErrorBoundary, { name:
|
|
618
|
+
return (_jsxs(ErrorBoundary, { name: "Attachments", children: [_jsxs("div", { "data-docs-attachments": true, "data-docs-path": dPath, "data-loading": loading, className: cn('-mx-6 -my-40 flex min-h-[calc(100vh+8rem)] flex-col rounded-xl border-2 px-6 pb-40 transition-colors md:-mx-20 md:px-20', isDragging ? 'border-primary-8 bg-primary-4/20' : 'border-transparent'), onDragOver: (e) => {
|
|
497
619
|
e.preventDefault();
|
|
498
620
|
e.stopPropagation();
|
|
499
621
|
setIsDragging(true);
|
|
500
|
-
}, onDragEnter: e => {
|
|
622
|
+
}, onDragEnter: (e) => {
|
|
501
623
|
e.preventDefault();
|
|
502
624
|
e.stopPropagation();
|
|
503
625
|
setIsDragging(true);
|
|
504
|
-
}, onDragLeave: e => {
|
|
626
|
+
}, onDragLeave: (e) => {
|
|
505
627
|
e.preventDefault();
|
|
506
628
|
e.stopPropagation();
|
|
507
629
|
setIsDragging(false);
|
|
508
|
-
}, onDrop: e => {
|
|
630
|
+
}, onDrop: (e) => {
|
|
509
631
|
e.preventDefault();
|
|
510
632
|
e.stopPropagation();
|
|
511
633
|
setIsDragging(false);
|
|
512
634
|
if (e.dataTransfer.files?.length)
|
|
513
635
|
void add(e.dataTransfer.files);
|
|
514
|
-
}, onContextMenu: e => {
|
|
636
|
+
}, onContextMenu: (e) => {
|
|
515
637
|
if (e.target === e.currentTarget) {
|
|
516
638
|
e.preventDefault();
|
|
517
639
|
setAddDialogOpen(true);
|
|
518
640
|
}
|
|
519
|
-
}, onClick: e => {
|
|
641
|
+
}, onClick: (e) => {
|
|
520
642
|
if (e.target === e.currentTarget)
|
|
521
643
|
setSel([]);
|
|
522
|
-
}, children: [_jsx("div", { className:
|
|
644
|
+
}, children: [_jsx("div", { className: "flex flex-col gap-8 py-8", children: loading ? null : Object.keys(gSisters).length === 0 ? (_jsx(Empty, { children: "No attachments found." })) : (ATTCH_TYPES.filter((c) => gSisters[c]).map((c) => (_jsxs("div", { className: "space-y-4", children: [_jsx("h3", { className: "h3 capitalize", children: c }), _jsx("div", { className: "grid grid-cols-1 content-start gap-4 sm:grid-cols-2 md:grid-cols-1 lg:grid-cols-3", children: gSisters[c].map((v) => {
|
|
523
645
|
const isTemp = v.path.startsWith('temp-');
|
|
524
|
-
return (_jsx(Card, { "data-docs-attachment-id": v.id || v.path, role:
|
|
646
|
+
return (_jsx(Card, { "data-docs-attachment-id": v.id || v.path, role: "button", tabIndex: isTemp ? -1 : 0, "aria-disabled": isTemp ? true : undefined, "aria-selected": sel.includes(v.path), "aria-label": `Attachment ${v.title || v.name}`, className: cn('cursor-pointer transition-colors hover:border-primary-8 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-8', sel.includes(v.path) && 'bg-primary-4/50 ring-2 ring-primary-8', isTemp && 'pointer-events-none opacity-50'), onKeyDown: (e) => {
|
|
525
647
|
if (isTemp)
|
|
526
648
|
return;
|
|
527
649
|
if (e.key === 'Enter' || e.key === ' ') {
|
|
528
650
|
e.preventDefault();
|
|
529
651
|
if (v.type === 'youtube')
|
|
530
|
-
setViewDlg({
|
|
652
|
+
setViewDlg({
|
|
653
|
+
...v,
|
|
654
|
+
isMd: true,
|
|
655
|
+
content: latestContent(v.content) || 'No transcript text found.',
|
|
656
|
+
});
|
|
531
657
|
else
|
|
532
658
|
void viewAsset(v);
|
|
533
659
|
}
|
|
534
|
-
}, onClick: e => {
|
|
660
|
+
}, onClick: (e) => {
|
|
535
661
|
if (isTemp)
|
|
536
662
|
return;
|
|
537
663
|
e.stopPropagation();
|
|
538
664
|
if (e.shiftKey && sel.length > 0) {
|
|
539
|
-
const i1 = sisters.findIndex(s => s.path === sel[sel.length - 1]);
|
|
540
|
-
const i2 = sisters.findIndex(s => s.path === v.path);
|
|
541
|
-
setSel(p => Array.from(new Set([
|
|
665
|
+
const i1 = sisters.findIndex((s) => s.path === sel[sel.length - 1]);
|
|
666
|
+
const i2 = sisters.findIndex((s) => s.path === v.path);
|
|
667
|
+
setSel((p) => Array.from(new Set([
|
|
668
|
+
...(e.metaKey || e.ctrlKey ? p : []),
|
|
669
|
+
...sisters
|
|
670
|
+
.slice(Math.min(i1, i2), Math.max(i1, i2) + 1)
|
|
671
|
+
.map((s) => s.path),
|
|
672
|
+
])));
|
|
542
673
|
}
|
|
543
674
|
else if (e.metaKey || e.ctrlKey) {
|
|
544
|
-
setSel(p =>
|
|
675
|
+
setSel((p) => p.includes(v.path) ? p.filter((x) => x !== v.path) : [...p, v.path]);
|
|
545
676
|
}
|
|
546
677
|
else {
|
|
547
678
|
if (v.type === 'youtube')
|
|
548
|
-
setViewDlg({
|
|
679
|
+
setViewDlg({
|
|
680
|
+
...v,
|
|
681
|
+
isMd: true,
|
|
682
|
+
content: latestContent(v.content) || 'No transcript text found.',
|
|
683
|
+
});
|
|
549
684
|
else
|
|
550
685
|
void viewAsset(v);
|
|
551
686
|
}
|
|
552
|
-
}, onContextMenu: e => {
|
|
687
|
+
}, onContextMenu: (e) => {
|
|
553
688
|
e.preventDefault();
|
|
554
689
|
setCtxAttachment({ item: v, x: e.clientX, y: e.clientY });
|
|
555
690
|
}, children: _jsxs(CardHeader, { children: [__terraQualityCreateElement(
|
|
556
|
-
/* prettier-ignore */ v.type === 'youtube' ? YouTubeIcon : v.type === 'website' ? LinkIcon : v.type === 'image' ? ImageIcon : v.type === 'tsdocs' ? CatalogIcon : v.type === 'other' ? BoxIcon : DocumentIcon, { className: 'size-6 text-primary-10', 'aria-hidden': 'true' }), _jsx(CardTitle, { className:
|
|
557
|
-
}) })] }, c)))) }), _jsx("input", { "data-testid":
|
|
691
|
+
/* prettier-ignore */ v.type === 'youtube' ? YouTubeIcon : v.type === 'website' ? LinkIcon : v.type === 'image' ? ImageIcon : v.type === 'tsdocs' ? CatalogIcon : v.type === 'other' ? BoxIcon : DocumentIcon, { className: 'size-6 text-primary-10', 'aria-hidden': 'true' }), _jsx(CardTitle, { className: "truncate text-base", children: v.title || v.name }), _jsx(CardDescription, { className: "truncate", children: v.sourceUrl || v.path })] }) }, v.id || v.path));
|
|
692
|
+
}) })] }, c)))) }), _jsx("input", { "data-testid": "docs-attachment-upload", ref: fileRef, type: "file", className: "hidden", multiple: true, onChange: (e) => void add(e.currentTarget.files), disabled: uploading || loading })] }), ctxAttachment && (_jsx("div", { ref: ctxMenuRef, role: "menu", "data-docs-attachment-menu": true, className: "fixed z-[120] max-h-[calc(100dvh-1rem)] min-w-32 max-w-[calc(100vw-1rem)] overflow-y-auto rounded-md border border-primary-6 bg-white p-1 text-primary-12 shadow-lg dark:bg-black", style: { left: ctxAttachment.x, top: ctxAttachment.y }, onContextMenu: (e) => e.preventDefault(), children: (sel.includes(ctxAttachment.item.path) && sel.length > 1
|
|
558
693
|
? [
|
|
559
|
-
{
|
|
560
|
-
|
|
561
|
-
|
|
694
|
+
{
|
|
695
|
+
icon: _jsx(CopyIcon, {}),
|
|
696
|
+
label: `Copy ${sel.length} items`,
|
|
697
|
+
onSelect: () => setTransferDlg({ open: true, action: 'copy', items: selItems }),
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
icon: _jsx(PopOutIcon, {}),
|
|
701
|
+
label: `Move ${sel.length} items`,
|
|
702
|
+
onSelect: () => setTransferDlg({ open: true, action: 'cut', items: selItems }),
|
|
703
|
+
},
|
|
704
|
+
...(selItems.every((s) => s.path.toLowerCase().split('?')[0].endsWith('.pdf') ||
|
|
705
|
+
s.name.toLowerCase().endsWith('.pdf'))
|
|
562
706
|
? [
|
|
563
707
|
{
|
|
564
708
|
icon: _jsx(DocumentIcon, {}),
|
|
@@ -569,10 +713,17 @@ export function Attachments({ dPath, tree }) {
|
|
|
569
713
|
return;
|
|
570
714
|
setUploading(true);
|
|
571
715
|
const tmpId = `temp-merge-${Date.now()}`;
|
|
572
|
-
const itemKeys = new Set(selItems.flatMap(i => [i.id, i.path].filter(Boolean)));
|
|
573
|
-
setSisters(p => [
|
|
574
|
-
...p.filter(s => !(s.id && itemKeys.has(s.id)) &&
|
|
575
|
-
|
|
716
|
+
const itemKeys = new Set(selItems.flatMap((i) => [i.id, i.path].filter(Boolean)));
|
|
717
|
+
setSisters((p) => [
|
|
718
|
+
...p.filter((s) => !(s.id && itemKeys.has(s.id)) &&
|
|
719
|
+
!(s.path && itemKeys.has(s.path))),
|
|
720
|
+
{
|
|
721
|
+
id: tmpId,
|
|
722
|
+
path: tmpId,
|
|
723
|
+
name: 'Merging PDFs...',
|
|
724
|
+
isMd: false,
|
|
725
|
+
type: 'document',
|
|
726
|
+
},
|
|
576
727
|
]);
|
|
577
728
|
setSel([]);
|
|
578
729
|
try {
|
|
@@ -585,31 +736,52 @@ export function Attachments({ dPath, tree }) {
|
|
|
585
736
|
buf = await (await fetch(item.path)).arrayBuffer();
|
|
586
737
|
}
|
|
587
738
|
else {
|
|
588
|
-
const { data, error: err } = await actions.read.asset.get({
|
|
739
|
+
const { data, error: err } = await actions.read.asset.get({
|
|
740
|
+
path: item?.path || '',
|
|
741
|
+
});
|
|
589
742
|
if (err || !data)
|
|
590
743
|
throw err || new Error('Failed to read local asset');
|
|
591
744
|
buf = data;
|
|
592
745
|
}
|
|
593
746
|
const pdfDoc = await PDFDocument.load(buf);
|
|
594
|
-
(await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices())).forEach(p => mergedPdf.addPage(p));
|
|
747
|
+
(await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices())).forEach((p) => mergedPdf.addPage(p));
|
|
595
748
|
}
|
|
596
749
|
const mergedFile = new File([(await mergedPdf.save()).buffer], 'Merged-Document.pdf', { type: 'application/pdf' });
|
|
597
|
-
setSisters(p => p.map(s =>
|
|
750
|
+
setSisters((p) => p.map((s) => s.id === tmpId ? { ...s, name: 'Uploading Merged PDF...' } : s));
|
|
598
751
|
const finalAsset = await uploadAssetChunked(mergedFile, docId, {
|
|
599
|
-
onProgress: ({ currentChunk: currChunk, totalChunks, message: msg }) => {
|
|
752
|
+
onProgress: ({ currentChunk: currChunk, totalChunks, message: msg, }) => {
|
|
600
753
|
if (msg)
|
|
601
|
-
setSisters(p => p.map(s => (s.id === tmpId ? { ...s, name: msg } : s)));
|
|
754
|
+
setSisters((p) => p.map((s) => (s.id === tmpId ? { ...s, name: msg } : s)));
|
|
602
755
|
else if (totalChunks > 1)
|
|
603
|
-
setSisters(p => p.map(s =>
|
|
756
|
+
setSisters((p) => p.map((s) => s.id === tmpId
|
|
757
|
+
? {
|
|
758
|
+
...s,
|
|
759
|
+
name: `Uploading (${currChunk}/${totalChunks})...`,
|
|
760
|
+
}
|
|
761
|
+
: s));
|
|
604
762
|
},
|
|
605
763
|
});
|
|
606
764
|
const fPath = finalAsset.path || finalAsset.src || tmpId;
|
|
607
|
-
setSisters(p => p.map(s =>
|
|
765
|
+
setSisters((p) => p.map((s) => s.id === tmpId
|
|
766
|
+
? {
|
|
767
|
+
...s,
|
|
768
|
+
...(finalAsset.id ? { id: finalAsset.id } : {}),
|
|
769
|
+
path: fPath,
|
|
770
|
+
name: fPath.split('/').pop() || mergedFile.name,
|
|
771
|
+
}
|
|
772
|
+
: s));
|
|
608
773
|
await Promise.allSettled(selItems.map(async (i) => {
|
|
609
774
|
if (i.isMd)
|
|
610
|
-
await actions.write.doc.rm({
|
|
775
|
+
await actions.write.doc.rm({
|
|
776
|
+
assets: false,
|
|
777
|
+
path: i.path,
|
|
778
|
+
type: 'doc',
|
|
779
|
+
});
|
|
611
780
|
else if (i.id) {
|
|
612
|
-
await actions.write.attachment.rm({
|
|
781
|
+
await actions.write.attachment.rm({
|
|
782
|
+
docPath: docId,
|
|
783
|
+
attachmentKey: i.id,
|
|
784
|
+
});
|
|
613
785
|
if (i.path.startsWith('http'))
|
|
614
786
|
await actions.write.asset.delete({ url: i.path });
|
|
615
787
|
}
|
|
@@ -630,7 +802,12 @@ export function Attachments({ dPath, tree }) {
|
|
|
630
802
|
]
|
|
631
803
|
: []),
|
|
632
804
|
{ separator: true },
|
|
633
|
-
{
|
|
805
|
+
{
|
|
806
|
+
destructive: true,
|
|
807
|
+
icon: _jsx(TrashIcon, {}),
|
|
808
|
+
label: `Delete ${sel.length} items`,
|
|
809
|
+
onSelect: () => void remove(selItems),
|
|
810
|
+
},
|
|
634
811
|
]
|
|
635
812
|
: [
|
|
636
813
|
...(!ctxAttachment.item.type || ctxAttachment.item.type !== 'youtube'
|
|
@@ -638,19 +815,38 @@ export function Attachments({ dPath, tree }) {
|
|
|
638
815
|
{
|
|
639
816
|
onSelect: () => {
|
|
640
817
|
setRenameInput(ctxAttachment.item.name.replace(TerraQualityRegex.REGEX_I_REGEX(), ''));
|
|
641
|
-
setRenameDlg({
|
|
818
|
+
setRenameDlg({
|
|
819
|
+
open: true,
|
|
820
|
+
path: ctxAttachment.item.path,
|
|
821
|
+
name: ctxAttachment.item.name,
|
|
822
|
+
isMd: ctxAttachment.item.isMd || false,
|
|
823
|
+
id: ctxAttachment.item.id,
|
|
824
|
+
});
|
|
642
825
|
},
|
|
643
826
|
icon: _jsx(EditIcon, {}),
|
|
644
827
|
label: 'Rename',
|
|
645
828
|
},
|
|
646
829
|
]
|
|
647
830
|
: []),
|
|
648
|
-
{
|
|
649
|
-
|
|
831
|
+
{
|
|
832
|
+
icon: _jsx(CopyIcon, {}),
|
|
833
|
+
label: 'Copy to...',
|
|
834
|
+
onSelect: () => setTransferDlg({ open: true, action: 'copy', items: [ctxAttachment.item] }),
|
|
835
|
+
},
|
|
836
|
+
{
|
|
837
|
+
icon: _jsx(PopOutIcon, {}),
|
|
838
|
+
label: 'Move to...',
|
|
839
|
+
onSelect: () => setTransferDlg({ open: true, action: 'cut', items: [ctxAttachment.item] }),
|
|
840
|
+
},
|
|
650
841
|
...(ctxAttachment.item.isMd
|
|
651
842
|
? [
|
|
652
843
|
{
|
|
653
|
-
onSelect: () => document.dispatchEvent(new CustomEvent('docs:synthesize', {
|
|
844
|
+
onSelect: () => document.dispatchEvent(new CustomEvent('docs:synthesize', {
|
|
845
|
+
detail: {
|
|
846
|
+
path: ctxAttachment.item.path,
|
|
847
|
+
name: ctxAttachment.item.name,
|
|
848
|
+
},
|
|
849
|
+
})),
|
|
654
850
|
icon: _jsx(MagicIcon, {}),
|
|
655
851
|
label: 'Synthesize Content',
|
|
656
852
|
},
|
|
@@ -672,11 +868,15 @@ export function Attachments({ dPath, tree }) {
|
|
|
672
868
|
if (readErr || !docData)
|
|
673
869
|
throw readErr || new Error('Failed to read doc.');
|
|
674
870
|
const nPath = `${dirname(path)}/${sanitizeName(name)}.mdx`;
|
|
675
|
-
const { data, error: writeErr } = await actions.write.doc.save({
|
|
871
|
+
const { data, error: writeErr } = await actions.write.doc.save({
|
|
872
|
+
path: nPath,
|
|
873
|
+
source: docData
|
|
874
|
+
.source,
|
|
875
|
+
});
|
|
676
876
|
if (writeErr || !data)
|
|
677
877
|
throw writeErr || new Error('Failed to duplicate.');
|
|
678
878
|
const duplicateData = data;
|
|
679
|
-
setSisters(p => [
|
|
879
|
+
setSisters((p) => [
|
|
680
880
|
...p,
|
|
681
881
|
{
|
|
682
882
|
path: nPath,
|
|
@@ -691,7 +891,12 @@ export function Attachments({ dPath, tree }) {
|
|
|
691
891
|
}
|
|
692
892
|
catch (_err) {
|
|
693
893
|
errorLog('Attachments:Duplicate', 'Duplicate failed', logError(_err));
|
|
694
|
-
notify({
|
|
894
|
+
notify({
|
|
895
|
+
error: _err instanceof Error
|
|
896
|
+
? _err
|
|
897
|
+
: new Error('Failed to duplicate.'),
|
|
898
|
+
fallback: 'Failed to duplicate.',
|
|
899
|
+
});
|
|
695
900
|
}
|
|
696
901
|
})();
|
|
697
902
|
},
|
|
@@ -701,11 +906,16 @@ export function Attachments({ dPath, tree }) {
|
|
|
701
906
|
]
|
|
702
907
|
: []),
|
|
703
908
|
{ separator: true },
|
|
704
|
-
{
|
|
705
|
-
|
|
909
|
+
{
|
|
910
|
+
destructive: true,
|
|
911
|
+
onSelect: () => void remove([ctxAttachment.item]),
|
|
912
|
+
icon: _jsx(TrashIcon, {}),
|
|
913
|
+
label: 'Delete',
|
|
914
|
+
},
|
|
915
|
+
]).map((a, i) => a.separator ? (_jsx("div", { role: "separator", className: "mx-1.5 my-1 h-px bg-primary-6/50" }, `separator-${i}`)) : (_jsx("button", { type: "button", role: "menuitem", className: "relative flex w-full cursor-default select-none items-center rounded-sm px-3 py-1 text-left text-sm hover:bg-primary-4", disabled: a.disabled, onClick: () => {
|
|
706
916
|
setCtxAttachment(null);
|
|
707
917
|
a.onSelect?.();
|
|
708
|
-
}, children: a.label }, `${a.label}-${i}`))) })), _jsxs(Dialog, { open: isDialogOpen, onOpenChange: open => {
|
|
918
|
+
}, children: a.label }, `${a.label}-${i}`))) })), _jsxs(Dialog, { open: isDialogOpen, onOpenChange: (open) => {
|
|
709
919
|
if (open)
|
|
710
920
|
return;
|
|
711
921
|
if (viewDlg)
|
|
@@ -725,11 +935,14 @@ export function Attachments({ dPath, tree }) {
|
|
|
725
935
|
setUrlInput('');
|
|
726
936
|
}, 200);
|
|
727
937
|
}
|
|
728
|
-
}, children: [!!mergePdfState && (_jsxs(DialogContent, { className:
|
|
938
|
+
}, children: [!!mergePdfState && (_jsxs(DialogContent, { className: "sm:max-w-md", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Multiple PDFs Selected" }), _jsxs(DialogDescription, { children: ["Would you like to merge these ", mergePdfState.pdfs.length, " PDFs into a single file, or upload them separately?"] })] }), _jsxs(DialogFooter, { className: "flex gap-2 sm:justify-between", children: [_jsx(Button, { variant: "ghost", onClick: () => {
|
|
729
939
|
[...mergePdfState.pdfs, ...mergePdfState.others].forEach((f, i) => {
|
|
730
940
|
const isMdFile = TerraQualityRegex.REGEX_MD_MDX_I_REGEX().test(f.name);
|
|
731
941
|
const tmpId = `temp-${Date.now()}-${i}`;
|
|
732
|
-
setSisters(p => [
|
|
942
|
+
setSisters((p) => [
|
|
943
|
+
...p,
|
|
944
|
+
{ id: tmpId, path: tmpId, name: f.name, isMd: isMdFile, type: 'document' },
|
|
945
|
+
]);
|
|
733
946
|
void processUpload(f, tmpId, isMdFile);
|
|
734
947
|
});
|
|
735
948
|
setMergePdfState(null);
|
|
@@ -741,12 +954,18 @@ export function Attachments({ dPath, tree }) {
|
|
|
741
954
|
const mergedPdf = await PDFDocument.create();
|
|
742
955
|
for (let i = 0; i < mergePdfState.pdfs.length; i++) {
|
|
743
956
|
const pdfDoc = await PDFDocument.load(await mergePdfState.pdfs[i].arrayBuffer());
|
|
744
|
-
(await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices())).forEach(p => mergedPdf.addPage(p));
|
|
957
|
+
(await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices())).forEach((p) => mergedPdf.addPage(p));
|
|
745
958
|
}
|
|
746
|
-
[
|
|
959
|
+
[
|
|
960
|
+
new File([(await mergedPdf.save()).buffer], 'Merged-Document.pdf', { type: 'application/pdf' }),
|
|
961
|
+
...mergePdfState.others,
|
|
962
|
+
].forEach((f, i) => {
|
|
747
963
|
const isMdFile = TerraQualityRegex.REGEX_MD_MDX_I_REGEX().test(f.name);
|
|
748
964
|
const tmpId = `temp-${Date.now()}-${i}`;
|
|
749
|
-
setSisters(p => [
|
|
965
|
+
setSisters((p) => [
|
|
966
|
+
...p,
|
|
967
|
+
{ id: tmpId, path: tmpId, name: f.name, isMd: isMdFile, type: 'document' },
|
|
968
|
+
]);
|
|
750
969
|
void processUpload(f, tmpId, isMdFile);
|
|
751
970
|
});
|
|
752
971
|
}
|
|
@@ -757,7 +976,9 @@ export function Attachments({ dPath, tree }) {
|
|
|
757
976
|
finally {
|
|
758
977
|
setUploading(false);
|
|
759
978
|
}
|
|
760
|
-
}, children: "Merge to Single PDF" })] })] })), !!viewDlg && (_jsxs(DialogContent, { className:
|
|
979
|
+
}, children: "Merge to Single PDF" })] })] })), !!viewDlg && (_jsxs(DialogContent, { className: "flex max-h-[85vh] flex-col sm:max-w-4xl", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: viewDlg.title || viewDlg.name }), _jsx(DialogDescription, { className: "truncate", children: viewDlg.sourceUrl || viewDlg.path })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto py-4", children: viewDlg.isMd ? (_jsx(CodeBlock, { docsSource: true, code: typeof viewDlg.content === 'string'
|
|
980
|
+
? viewDlg.content
|
|
981
|
+
: latestContent(viewDlg.content) || '', language: "mdx", tone: "view", className: "my-0 text-xs" })) : textAsset(viewDlg) ? (_jsx(CodeBlock, { code: typeof viewDlg.content === 'string' ? viewDlg.content : '', language: "text", tone: "view", className: "my-0 text-xs" })) : (_jsxs("div", { className: "flex flex-col items-center justify-center gap-4 py-12 text-primary-11", children: [_jsx(DocumentIcon, { className: "size-16 opacity-50", "aria-hidden": "true" }), _jsx("p", { children: "Binary storage entry." }), viewDlg.unavailable ? (_jsx("p", { children: "Source asset is unavailable." })) : (_jsxs(Button, { onClick: () => {
|
|
761
982
|
void (async () => {
|
|
762
983
|
if (!viewDlg)
|
|
763
984
|
return;
|
|
@@ -768,7 +989,13 @@ export function Attachments({ dPath, tree }) {
|
|
|
768
989
|
const { data, error } = await actions.read.tsdocs({ scope });
|
|
769
990
|
if (!error && data?.docs) {
|
|
770
991
|
const url = URL.createObjectURL(new Blob([
|
|
771
|
-
JSON.stringify((Array.isArray(data.docs) ? data.docs : [])
|
|
992
|
+
JSON.stringify((Array.isArray(data.docs) ? data.docs : [])
|
|
993
|
+
.filter(isRec)
|
|
994
|
+
.map((d) => ({
|
|
995
|
+
title: d.title,
|
|
996
|
+
slug: d.slug,
|
|
997
|
+
source: d.body,
|
|
998
|
+
})), null, 2),
|
|
772
999
|
], { type: 'application/json' }));
|
|
773
1000
|
const a = document.createElement('a');
|
|
774
1001
|
a.href = url;
|
|
@@ -787,15 +1014,25 @@ export function Attachments({ dPath, tree }) {
|
|
|
787
1014
|
return;
|
|
788
1015
|
}
|
|
789
1016
|
let dlName = viewDlg.title || viewDlg.name;
|
|
790
|
-
const extMatch = viewDlg.path
|
|
791
|
-
|
|
1017
|
+
const extMatch = viewDlg.path
|
|
1018
|
+
.split('?')[0]
|
|
1019
|
+
?.match(TerraQualityRegex.REGEX_A_Z0_9_I_REGEX());
|
|
1020
|
+
if (extMatch &&
|
|
1021
|
+
!dlName.toLowerCase().endsWith(extMatch[0].toLowerCase()))
|
|
792
1022
|
dlName = `${dlName}${extMatch[0]}`;
|
|
793
|
-
else if (viewDlg.type === 'document' &&
|
|
1023
|
+
else if (viewDlg.type === 'document' &&
|
|
1024
|
+
!dlName.toLowerCase().endsWith('.pdf'))
|
|
794
1025
|
dlName = `${dlName}.pdf`;
|
|
795
|
-
const { data, error } = await actions.read.asset.get({
|
|
1026
|
+
const { data, error } = await actions.read.asset.get({
|
|
1027
|
+
path: viewDlg.path,
|
|
1028
|
+
});
|
|
796
1029
|
if (error || !data)
|
|
797
1030
|
throw error;
|
|
798
|
-
const url = URL.createObjectURL(new Blob([data], {
|
|
1031
|
+
const url = URL.createObjectURL(new Blob([data], {
|
|
1032
|
+
type: viewDlg.type === 'document'
|
|
1033
|
+
? 'application/pdf'
|
|
1034
|
+
: 'application/octet-stream',
|
|
1035
|
+
}));
|
|
799
1036
|
const a = document.createElement('a');
|
|
800
1037
|
a.href = url;
|
|
801
1038
|
a.download = dlName;
|
|
@@ -808,11 +1045,11 @@ export function Attachments({ dPath, tree }) {
|
|
|
808
1045
|
toast.error('Failed to download asset.');
|
|
809
1046
|
}
|
|
810
1047
|
})();
|
|
811
|
-
}, children: [_jsx(DownloadIcon, { className:
|
|
1048
|
+
}, children: [_jsx(DownloadIcon, { className: "mr-2 size-4" }), " Download Asset"] }))] })) }), _jsx(DialogFooter, { children: _jsx(Button, { variant: "ghost", onClick: () => {
|
|
812
1049
|
setViewDlg(null);
|
|
813
|
-
}, children: "Close" }) })] })), renameDlg?.open && (_jsxs(DialogContent, { className:
|
|
1050
|
+
}, children: "Close" }) })] })), renameDlg?.open && (_jsxs(DialogContent, { className: "sm:max-w-md", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Rename Attachment" }), _jsx(DialogDescription, { children: "Assign folder-compliant file identity token string parameters." })] }), _jsx("div", { className: "py-4", children: _jsx(Input, { autoFocus: true, value: renameInput, onChange: (e) => {
|
|
814
1051
|
setRenameInput(e.target.value);
|
|
815
|
-
}, onKeyDown: e => e.key === 'Enter' && void renameAttch(renameInput) }) }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: 'ghost', onClick: () => { setRenameDlg(null); }, children: "Cancel" }), _jsx(Button, { disabled: !renameInput.trim(), onClick: () => void renameAttch(renameInput), children: "Rename" })] })] })), transferDlg?.open &&
|
|
1052
|
+
}, onKeyDown: (e) => e.key === 'Enter' && void renameAttch(renameInput) }) }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: 'ghost', onClick: () => { setRenameDlg(null); }, children: "Cancel" }), _jsx(Button, { disabled: !renameInput.trim(), onClick: () => void renameAttch(renameInput), children: "Rename" })] })] })), transferDlg?.open &&
|
|
816
1053
|
// prettier-ignore
|
|
817
1054
|
_jsxs(DialogContent, { className: 'sm:max-w-md', children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { children: [transferDlg.action === 'copy' ? 'Copy' : 'Move', " Asset", transferDlg.items.length > 1 ? 's' : ''] }), _jsx(DialogDescription, { children: "Shift structural components between system documents." })] }), _jsx("div", { className: 'py-4', children: _jsxs(Select, { value: transferTgt, onValueChange: setTransferTgt, children: [_jsx(SelectTrigger, { "aria-label": 'Select destination page', children: _jsx(SelectValue, { placeholder: 'Select destination page' }) }), _jsxs(SelectContent, { className: 'max-h-60', children: [_jsx(SelectItem, { value: '__new__', className: 'font-semibold text-primary-11', children: "\u2728 Move to new page..." }), localLeaves.length ? (localLeaves.map(l => (_jsx(SelectItem, { value: l.path, children: l.title || l.origName }, l.path)))) : (_jsx(SelectItem, { value: 'none', disabled: true, children: "No target layers found" }))] })] }) }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: 'ghost', onClick: () => { setTransferDlg(null); }, children: "Cancel" }), _jsx(Button, { disabled: !transferTgt || transferTgt === 'none' || transferring, loading: transferring, onClick: () => {
|
|
818
1055
|
void (async () => {
|
|
@@ -873,30 +1110,37 @@ export function Attachments({ dPath, tree }) {
|
|
|
873
1110
|
setTransferDlg(null);
|
|
874
1111
|
}
|
|
875
1112
|
})();
|
|
876
|
-
}, children: transferDlg.action === 'copy' ? 'Copy' : 'Move' })] })] }), addDialogOpen && (_jsxs(DialogContent, { className:
|
|
1113
|
+
}, children: transferDlg.action === 'copy' ? 'Copy' : 'Move' })] })] }), addDialogOpen && (_jsxs(DialogContent, { className: "flex max-h-[85vh] flex-col overflow-hidden sm:max-w-xl", children: [_jsx(DialogHeader, { children: dialogMode === 'select' ? (_jsxs(_Fragment, { children: [_jsx(DialogTitle, { children: "Add Attachment" }), _jsx(DialogDescription, { children: "Select attachment category." })] })) : (_jsxs(_Fragment, { children: [_jsxs(DialogTitle, { className: 'capitalize', children: ["Add ", dialogMode] }), _jsx(DialogDescription, { children: dialogMode === 'tsdocs' ? 'Select an API reference page or folder to link.' : ['youtube', 'website'].includes(dialogMode) ? `Provide URLs to attach ${dialogMode} content.` : `Upload files or provide URLs to attach remote ${dialogMode}s.` })] })) }), _jsx("div", { className: "flex-1 overflow-y-auto py-4", children: dialogMode === 'select' ? (_jsx("div", { className: "grid grid-cols-2 gap-4 sm:grid-cols-3", children: [
|
|
877
1114
|
{ Icon: DocumentIcon, text: 'Document', type: 'document' },
|
|
878
1115
|
{ Icon: ImageIcon, text: 'Image', type: 'image' },
|
|
879
1116
|
{ Icon: YouTubeIcon, text: 'YouTube', type: 'youtube' },
|
|
880
1117
|
{ Icon: LinkIcon, text: 'Website', type: 'website' },
|
|
881
1118
|
{ Icon: CatalogIcon, text: 'TsDocs', type: 'tsdocs' },
|
|
882
1119
|
{ Icon: BoxIcon, text: 'Other', type: 'other' },
|
|
883
|
-
].map(({ Icon: i, text: t, type: v }) => (_jsxs("button", { type:
|
|
1120
|
+
].map(({ Icon: i, text: t, type: v }) => (_jsxs("button", { type: "button", "aria-label": `Add ${t} attachment`, className: "flex cursor-pointer flex-col items-center justify-center rounded-xl border border-primary-6 bg-transparent p-6 text-center transition-colors hover:border-primary-8 hover:bg-primary-3/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-8", onClick: () => {
|
|
884
1121
|
setDialogMode(v);
|
|
885
|
-
}, children: [createElement(i, {
|
|
1122
|
+
}, children: [createElement(i, {
|
|
1123
|
+
className: 'size-6 text-primary-11',
|
|
1124
|
+
'aria-hidden': 'true',
|
|
1125
|
+
}), _jsx("span", { className: "mt-2 text-sm font-medium text-primary-11", children: t })] }, t))) })) : (_jsxs("div", { className: "flex flex-col gap-4", children: [!['youtube', 'website', 'tsdocs'].includes(dialogMode) && (_jsxs(Button, { variant: "outline", onClick: () => {
|
|
886
1126
|
setAddDialogOpen(false);
|
|
887
1127
|
fileRef.current?.click();
|
|
888
|
-
}, children: [_jsx(UploadIcon, { className:
|
|
1128
|
+
}, children: [_jsx(UploadIcon, { className: "mr-2 size-5" }), "Select Files to Upload"] })), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: dialogMode === 'tsdocs'
|
|
1129
|
+
? 'Select Reference'
|
|
1130
|
+
: !['youtube', 'website'].includes(dialogMode)
|
|
1131
|
+
? 'Or Import via URL'
|
|
1132
|
+
: 'Import via URL' }), dialogMode === 'tsdocs' ? (_jsx(TsDocsSelect, { variant: "inline", multiple: true, value: urlInput ? urlInput.split('\n').filter(Boolean) : [], onChange: (v) => {
|
|
889
1133
|
setUrlInput(Array.isArray(v) ? v.join('\n') : v);
|
|
890
|
-
} })) : (_jsx(Textarea, { autoFocus: true, placeholder: 'https://...\nPaste multiple URLs on new lines', value: urlInput, onChange: e => {
|
|
1134
|
+
} })) : (_jsx(Textarea, { autoFocus: true, placeholder: 'https://...\nPaste multiple URLs on new lines', value: urlInput, onChange: (e) => {
|
|
891
1135
|
setUrlInput(e.target.value);
|
|
892
|
-
}, rows: 4, onKeyDown: e => {
|
|
1136
|
+
}, rows: 4, onKeyDown: (e) => {
|
|
893
1137
|
if (e.key === 'Enter' && !e.shiftKey) {
|
|
894
1138
|
e.preventDefault();
|
|
895
1139
|
void addRemote(urlInput, dialogMode);
|
|
896
1140
|
}
|
|
897
|
-
} }))] })] })) }), _jsx(DialogFooter, { className:
|
|
1141
|
+
} }))] })] })) }), _jsx(DialogFooter, { className: "shrink-0 border-t border-primary-6 pt-4", children: dialogMode === 'select' ? (_jsx(Button, { variant: "ghost", onClick: () => {
|
|
898
1142
|
setAddDialogOpen(false);
|
|
899
|
-
}, children: "Cancel" })) : (_jsxs(_Fragment, { children: [_jsx(Button, { variant:
|
|
1143
|
+
}, children: "Cancel" })) : (_jsxs(_Fragment, { children: [_jsx(Button, { variant: "ghost", onClick: () => {
|
|
900
1144
|
setDialogMode('select');
|
|
901
1145
|
}, children: "Back" }), _jsx(Button, { disabled: !urlInput.trim() || uploading, loading: uploading, onClick: () => void addRemote(urlInput, dialogMode), children: dialogMode === 'tsdocs' ? 'Attach Reference' : 'Attach URL' })] })) })] }))] })] }));
|
|
902
1146
|
}
|