@terra-symposium/docs 0.1.17 → 0.1.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/README.md +3 -3
  2. package/lib-dist/assets/fonts/AUTHENTICSans-130.woff +0 -0
  3. package/lib-dist/assets/fonts/AUTHENTICSans-130.woff2 +0 -0
  4. package/lib-dist/assets/fonts/AUTHENTICSans-150.woff +0 -0
  5. package/lib-dist/assets/fonts/AUTHENTICSans-150.woff2 +0 -0
  6. package/lib-dist/assets/fonts/AUTHENTICSans-90.woff +0 -0
  7. package/lib-dist/assets/fonts/AUTHENTICSans-90.woff2 +0 -0
  8. package/lib-dist/assets/fonts/Avara-Bold.woff +0 -0
  9. package/lib-dist/assets/fonts/Avara-BoldItalic.woff +0 -0
  10. package/lib-dist/assets/fonts/InterVariable-Italic-latin-20260728.woff2 +0 -0
  11. package/lib-dist/assets/fonts/InterVariable-latin-20260728.woff2 +0 -0
  12. package/lib-dist/assets/fonts/README.md +7 -0
  13. package/lib-dist/assets/fonts/licenses/Inter-OFL-1.1.txt +92 -0
  14. package/lib-dist/assets/fonts/licenses/OFL-1.1.txt +93 -0
  15. package/lib-dist/{Docs.d.ts → components/Docs.d.ts} +1 -1
  16. package/lib-dist/components/Docs.d.ts.map +1 -0
  17. package/lib-dist/components/Docs.js +9 -0
  18. package/lib-dist/components/Docs.js.map +1 -0
  19. package/lib-dist/{LocalDocsWorkspace.d.ts → components/LocalDocsWorkspace.d.ts} +9 -2
  20. package/lib-dist/components/LocalDocsWorkspace.d.ts.map +1 -0
  21. package/lib-dist/{LocalDocsWorkspace.js → components/LocalDocsWorkspace.js} +83 -24
  22. package/lib-dist/components/LocalDocsWorkspace.js.map +1 -0
  23. package/lib-dist/components/NotFound.d.ts +8 -0
  24. package/lib-dist/components/NotFound.d.ts.map +1 -0
  25. package/lib-dist/components/NotFound.js +6 -0
  26. package/lib-dist/components/NotFound.js.map +1 -0
  27. package/lib-dist/components/SiteLayout.d.ts +25 -0
  28. package/lib-dist/components/SiteLayout.d.ts.map +1 -0
  29. package/lib-dist/components/SiteLayout.js +12 -0
  30. package/lib-dist/components/SiteLayout.js.map +1 -0
  31. package/lib-dist/{StaticWorkspace.d.ts → components/StaticWorkspace.d.ts} +7 -3
  32. package/lib-dist/components/StaticWorkspace.d.ts.map +1 -0
  33. package/lib-dist/{StaticWorkspace.js → components/StaticWorkspace.js} +100 -34
  34. package/lib-dist/components/StaticWorkspace.js.map +1 -0
  35. package/lib-dist/components/StrictLocalWorkspaceHarness.d.ts +10 -0
  36. package/lib-dist/components/StrictLocalWorkspaceHarness.d.ts.map +1 -0
  37. package/lib-dist/components/StrictLocalWorkspaceHarness.js +12 -0
  38. package/lib-dist/components/StrictLocalWorkspaceHarness.js.map +1 -0
  39. package/lib-dist/components/blocks.d.ts.map +1 -0
  40. package/lib-dist/{blocks.js → components/blocks.js} +88 -13
  41. package/lib-dist/components/blocks.js.map +1 -0
  42. package/lib-dist/{navigation.d.ts → components/navigation.d.ts} +2 -1
  43. package/lib-dist/components/navigation.d.ts.map +1 -0
  44. package/lib-dist/components/navigation.js.map +1 -0
  45. package/lib-dist/{terra → components/terra}/Workspace.d.ts +1 -1
  46. package/lib-dist/components/terra/Workspace.d.ts.map +1 -0
  47. package/lib-dist/components/terra/Workspace.js +190 -0
  48. package/lib-dist/components/terra/Workspace.js.map +1 -0
  49. package/lib-dist/components/terra/editor/TerraContentEditor.d.ts +15 -0
  50. package/lib-dist/components/terra/editor/TerraContentEditor.d.ts.map +1 -0
  51. package/lib-dist/components/terra/editor/TerraContentEditor.js +358 -0
  52. package/lib-dist/components/terra/editor/TerraContentEditor.js.map +1 -0
  53. package/lib-dist/{terra → components/terra}/editor/_blocks.d.ts +3 -4
  54. package/lib-dist/components/terra/editor/_blocks.d.ts.map +1 -0
  55. package/lib-dist/components/terra/editor/_blocks.js +120 -0
  56. package/lib-dist/components/terra/editor/_blocks.js.map +1 -0
  57. package/lib-dist/components/terra/editor/docs/BlockContext.d.ts +7 -0
  58. package/lib-dist/components/terra/editor/docs/BlockContext.d.ts.map +1 -0
  59. package/lib-dist/components/terra/editor/docs/BlockContext.js +60 -0
  60. package/lib-dist/components/terra/editor/docs/BlockContext.js.map +1 -0
  61. package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.d.ts +12 -0
  62. package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.d.ts.map +1 -0
  63. package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js +66 -0
  64. package/lib-dist/components/terra/editor/docs/DocsAttachmentPicker.js.map +1 -0
  65. package/lib-dist/components/terra/editor/docs/TerraToolbar.d.ts +12 -0
  66. package/lib-dist/components/terra/editor/docs/TerraToolbar.d.ts.map +1 -0
  67. package/lib-dist/components/terra/editor/docs/TerraToolbar.js +169 -0
  68. package/lib-dist/components/terra/editor/docs/TerraToolbar.js.map +1 -0
  69. package/lib-dist/{terra → components/terra}/editor/docs/_Callout.d.ts +1 -1
  70. package/lib-dist/components/terra/editor/docs/_Callout.d.ts.map +1 -0
  71. package/lib-dist/{terra → components/terra}/editor/docs/_Callout.js +10 -6
  72. package/lib-dist/components/terra/editor/docs/_Callout.js.map +1 -0
  73. package/lib-dist/components/terra/editor/docs/_CodeBlock.d.ts.map +1 -0
  74. package/lib-dist/{terra → components/terra}/editor/docs/_CodeBlock.js +110 -44
  75. package/lib-dist/components/terra/editor/docs/_CodeBlock.js.map +1 -0
  76. package/lib-dist/{terra → components/terra}/editor/docs/_DocsCode.d.ts +1 -1
  77. package/lib-dist/components/terra/editor/docs/_DocsCode.d.ts.map +1 -0
  78. package/lib-dist/{terra → components/terra}/editor/docs/_DocsCode.js +44 -11
  79. package/lib-dist/components/terra/editor/docs/_DocsCode.js.map +1 -0
  80. package/lib-dist/{terra → components/terra}/editor/docs/_DocsImage.d.ts +1 -1
  81. package/lib-dist/components/terra/editor/docs/_DocsImage.d.ts.map +1 -0
  82. package/lib-dist/components/terra/editor/docs/_DocsImage.js +62 -0
  83. package/lib-dist/components/terra/editor/docs/_DocsImage.js.map +1 -0
  84. package/lib-dist/{terra → components/terra}/editor/docs/_Embed.d.ts +3 -1
  85. package/lib-dist/components/terra/editor/docs/_Embed.d.ts.map +1 -0
  86. package/lib-dist/components/terra/editor/docs/_Embed.js +73 -0
  87. package/lib-dist/components/terra/editor/docs/_Embed.js.map +1 -0
  88. package/lib-dist/{terra → components/terra}/editor/docs/_Math.d.ts +2 -2
  89. package/lib-dist/components/terra/editor/docs/_Math.d.ts.map +1 -0
  90. package/lib-dist/{terra → components/terra}/editor/docs/_Math.js +26 -14
  91. package/lib-dist/components/terra/editor/docs/_Math.js.map +1 -0
  92. package/lib-dist/{terra → components/terra}/editor/docs/_Nodes.d.ts +1 -1
  93. package/lib-dist/components/terra/editor/docs/_Nodes.d.ts.map +1 -0
  94. package/lib-dist/components/terra/editor/docs/_Nodes.js +62 -0
  95. package/lib-dist/components/terra/editor/docs/_Nodes.js.map +1 -0
  96. package/lib-dist/{terra → components/terra}/editor/docs/_Raw.d.ts +1 -1
  97. package/lib-dist/components/terra/editor/docs/_Raw.d.ts.map +1 -0
  98. package/lib-dist/{terra → components/terra}/editor/docs/_Raw.js +8 -3
  99. package/lib-dist/components/terra/editor/docs/_Raw.js.map +1 -0
  100. package/lib-dist/{terra → components/terra}/editor/docs/_Table.d.ts +1 -1
  101. package/lib-dist/components/terra/editor/docs/_Table.d.ts.map +1 -0
  102. package/lib-dist/components/terra/editor/docs/_Table.js +99 -0
  103. package/lib-dist/components/terra/editor/docs/_Table.js.map +1 -0
  104. package/lib-dist/{terra → components/terra}/editor/docs/_Tabs.d.ts +1 -1
  105. package/lib-dist/components/terra/editor/docs/_Tabs.d.ts.map +1 -0
  106. package/lib-dist/{terra → components/terra}/editor/docs/_Tabs.js +35 -14
  107. package/lib-dist/components/terra/editor/docs/_Tabs.js.map +1 -0
  108. package/lib-dist/{terra → components/terra}/editor/docs/_TsDocs.d.ts +1 -1
  109. package/lib-dist/components/terra/editor/docs/_TsDocs.d.ts.map +1 -0
  110. package/lib-dist/{terra → components/terra}/editor/docs/_TsDocs.js +15 -13
  111. package/lib-dist/components/terra/editor/docs/_TsDocs.js.map +1 -0
  112. package/lib-dist/{terra → components/terra}/editor/docs/_math_inline.d.ts +1 -1
  113. package/lib-dist/components/terra/editor/docs/_math_inline.d.ts.map +1 -0
  114. package/lib-dist/{terra → components/terra}/editor/docs/_math_inline.js +2 -2
  115. package/lib-dist/components/terra/editor/docs/_math_inline.js.map +1 -0
  116. package/lib-dist/{terra → components/terra}/editor/docs/heading.d.ts +1 -1
  117. package/lib-dist/components/terra/editor/docs/heading.d.ts.map +1 -0
  118. package/lib-dist/{terra → components/terra}/editor/docs/heading.js +8 -5
  119. package/lib-dist/components/terra/editor/docs/heading.js.map +1 -0
  120. package/lib-dist/components/terra/editor/docs/index.d.ts.map +1 -0
  121. package/lib-dist/components/terra/editor/docs/index.js.map +1 -0
  122. package/lib-dist/components/terra/editor/terra-content.styles.d.ts +3 -0
  123. package/lib-dist/components/terra/editor/terra-content.styles.d.ts.map +1 -0
  124. package/lib-dist/components/terra/editor/terra-content.styles.js +3 -0
  125. package/lib-dist/components/terra/editor/terra-content.styles.js.map +1 -0
  126. package/lib-dist/{terra → components/terra}/editor/types.d.ts +2 -2
  127. package/lib-dist/components/terra/editor/types.d.ts.map +1 -0
  128. package/lib-dist/{terra → components/terra}/editor/types.js +1 -1
  129. package/lib-dist/components/terra/editor/types.js.map +1 -0
  130. package/lib-dist/{terra → components/terra}/flow/Nodes.d.ts +3 -3
  131. package/lib-dist/components/terra/flow/Nodes.d.ts.map +1 -0
  132. package/lib-dist/{terra → components/terra}/flow/Nodes.js +211 -104
  133. package/lib-dist/components/terra/flow/Nodes.js.map +1 -0
  134. package/lib-dist/{terra → components/terra}/flow/_chrome.d.ts +9 -9
  135. package/lib-dist/components/terra/flow/_chrome.d.ts.map +1 -0
  136. package/lib-dist/{terra → components/terra}/flow/_chrome.js +325 -114
  137. package/lib-dist/components/terra/flow/_chrome.js.map +1 -0
  138. package/lib-dist/components/terra/flow/menuContext.d.ts.map +1 -0
  139. package/lib-dist/components/terra/flow/menuContext.js.map +1 -0
  140. package/lib-dist/{terra → components/terra}/pages/docs/_attachments.d.ts +1 -1
  141. package/lib-dist/components/terra/pages/docs/_attachments.d.ts.map +1 -0
  142. package/lib-dist/{terra → components/terra}/pages/docs/_attachments.js +371 -127
  143. package/lib-dist/components/terra/pages/docs/_attachments.js.map +1 -0
  144. package/lib-dist/components/terra/pages/docs/_blocks.d.ts.map +1 -0
  145. package/lib-dist/{terra → components/terra}/pages/docs/_blocks.js +39 -28
  146. package/lib-dist/components/terra/pages/docs/_blocks.js.map +1 -0
  147. package/lib-dist/{terra → components/terra}/pages/docs/_editable.d.ts +3 -3
  148. package/lib-dist/components/terra/pages/docs/_editable.d.ts.map +1 -0
  149. package/lib-dist/{terra → components/terra}/pages/docs/_editable.js +81 -43
  150. package/lib-dist/components/terra/pages/docs/_editable.js.map +1 -0
  151. package/lib-dist/{terra → components/terra}/pages/docs/_export-dialog.d.ts +1 -1
  152. package/lib-dist/components/terra/pages/docs/_export-dialog.d.ts.map +1 -0
  153. package/lib-dist/{terra → components/terra}/pages/docs/_export-dialog.js +13 -13
  154. package/lib-dist/components/terra/pages/docs/_export-dialog.js.map +1 -0
  155. package/lib-dist/components/terra/pages/docs/_icons.d.ts.map +1 -0
  156. package/lib-dist/components/terra/pages/docs/_icons.js.map +1 -0
  157. package/lib-dist/{terra → components/terra}/pages/docs/_main.d.ts +10 -7
  158. package/lib-dist/components/terra/pages/docs/_main.d.ts.map +1 -0
  159. package/lib-dist/components/terra/pages/docs/_main.js +710 -0
  160. package/lib-dist/components/terra/pages/docs/_main.js.map +1 -0
  161. package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.d.ts +10 -0
  162. package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.d.ts.map +1 -0
  163. package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js +597 -0
  164. package/lib-dist/components/terra/pages/docs/_manage-attachments-dialog.js.map +1 -0
  165. package/lib-dist/{terra → components/terra}/pages/docs/_sidebar.d.ts +3 -12
  166. package/lib-dist/components/terra/pages/docs/_sidebar.d.ts.map +1 -0
  167. package/lib-dist/components/terra/pages/docs/_sidebar.js +1437 -0
  168. package/lib-dist/components/terra/pages/docs/_sidebar.js.map +1 -0
  169. package/lib-dist/components/terra/pages/docs/_toc.d.ts +4 -0
  170. package/lib-dist/components/terra/pages/docs/_toc.d.ts.map +1 -0
  171. package/lib-dist/components/terra/pages/docs/_toc.js +212 -0
  172. package/lib-dist/components/terra/pages/docs/_toc.js.map +1 -0
  173. package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.d.ts +15 -0
  174. package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.d.ts.map +1 -0
  175. package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js +207 -0
  176. package/lib-dist/components/terra/pages/docs/_toolbar-find-replace.js.map +1 -0
  177. package/lib-dist/{terra → components/terra}/pages/docs/_toolbar.d.ts +4 -5
  178. package/lib-dist/components/terra/pages/docs/_toolbar.d.ts.map +1 -0
  179. package/lib-dist/{terra → components/terra}/pages/docs/_toolbar.js +312 -343
  180. package/lib-dist/components/terra/pages/docs/_toolbar.js.map +1 -0
  181. package/lib-dist/{terra → components/terra}/pages/docs/_tree.d.ts +4 -4
  182. package/lib-dist/components/terra/pages/docs/_tree.d.ts.map +1 -0
  183. package/lib-dist/{terra → components/terra}/pages/docs/_tree.js +219 -264
  184. package/lib-dist/components/terra/pages/docs/_tree.js.map +1 -0
  185. package/lib-dist/components/terra/pages/docs/use-block-nav.d.ts +5 -0
  186. package/lib-dist/components/terra/pages/docs/use-block-nav.d.ts.map +1 -0
  187. package/lib-dist/components/terra/pages/docs/use-block-nav.js +1306 -0
  188. package/lib-dist/components/terra/pages/docs/use-block-nav.js.map +1 -0
  189. package/lib-dist/components/terra/pages/docs/use-media-paste.d.ts +5 -0
  190. package/lib-dist/components/terra/pages/docs/use-media-paste.d.ts.map +1 -0
  191. package/lib-dist/components/terra/pages/docs/use-media-paste.js +391 -0
  192. package/lib-dist/components/terra/pages/docs/use-media-paste.js.map +1 -0
  193. package/lib-dist/components/terra/pages/docs/use-render-tripwire.d.ts +2 -0
  194. package/lib-dist/components/terra/pages/docs/use-render-tripwire.d.ts.map +1 -0
  195. package/lib-dist/components/terra/pages/docs/use-render-tripwire.js +25 -0
  196. package/lib-dist/components/terra/pages/docs/use-render-tripwire.js.map +1 -0
  197. package/lib-dist/{terra/runtime → components/terra}/ui.d.ts +2 -5
  198. package/lib-dist/components/terra/ui.d.ts.map +1 -0
  199. package/lib-dist/components/terra/ui.js +20 -0
  200. package/lib-dist/components/terra/ui.js.map +1 -0
  201. package/lib-dist/components/workspace-demo-fixture.d.ts +35 -0
  202. package/lib-dist/components/workspace-demo-fixture.d.ts.map +1 -0
  203. package/lib-dist/components/workspace-demo-fixture.js +820 -0
  204. package/lib-dist/components/workspace-demo-fixture.js.map +1 -0
  205. package/lib-dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
  206. package/lib-dist/fonts/KaTeX_AMS-Regular.woff +0 -0
  207. package/lib-dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  208. package/lib-dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  209. package/lib-dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  210. package/lib-dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  211. package/lib-dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  212. package/lib-dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  213. package/lib-dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  214. package/lib-dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  215. package/lib-dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  216. package/lib-dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  217. package/lib-dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  218. package/lib-dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  219. package/lib-dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  220. package/lib-dist/fonts/KaTeX_Main-Bold.ttf +0 -0
  221. package/lib-dist/fonts/KaTeX_Main-Bold.woff +0 -0
  222. package/lib-dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  223. package/lib-dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  224. package/lib-dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  225. package/lib-dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  226. package/lib-dist/fonts/KaTeX_Main-Italic.ttf +0 -0
  227. package/lib-dist/fonts/KaTeX_Main-Italic.woff +0 -0
  228. package/lib-dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  229. package/lib-dist/fonts/KaTeX_Main-Regular.ttf +0 -0
  230. package/lib-dist/fonts/KaTeX_Main-Regular.woff +0 -0
  231. package/lib-dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  232. package/lib-dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  233. package/lib-dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  234. package/lib-dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  235. package/lib-dist/fonts/KaTeX_Math-Italic.ttf +0 -0
  236. package/lib-dist/fonts/KaTeX_Math-Italic.woff +0 -0
  237. package/lib-dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  238. package/lib-dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  239. package/lib-dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  240. package/lib-dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  241. package/lib-dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  242. package/lib-dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  243. package/lib-dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  244. package/lib-dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  245. package/lib-dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  246. package/lib-dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  247. package/lib-dist/fonts/KaTeX_Script-Regular.ttf +0 -0
  248. package/lib-dist/fonts/KaTeX_Script-Regular.woff +0 -0
  249. package/lib-dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  250. package/lib-dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
  251. package/lib-dist/fonts/KaTeX_Size1-Regular.woff +0 -0
  252. package/lib-dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  253. package/lib-dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
  254. package/lib-dist/fonts/KaTeX_Size2-Regular.woff +0 -0
  255. package/lib-dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  256. package/lib-dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
  257. package/lib-dist/fonts/KaTeX_Size3-Regular.woff +0 -0
  258. package/lib-dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  259. package/lib-dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
  260. package/lib-dist/fonts/KaTeX_Size4-Regular.woff +0 -0
  261. package/lib-dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  262. package/lib-dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  263. package/lib-dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  264. package/lib-dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  265. package/lib-dist/lib/astro.d.ts +8 -0
  266. package/lib-dist/lib/astro.d.ts.map +1 -0
  267. package/lib-dist/lib/astro.js +27 -0
  268. package/lib-dist/lib/astro.js.map +1 -0
  269. package/lib-dist/{docs-catalog.d.ts → lib/docs-catalog.d.ts} +1 -1
  270. package/lib-dist/lib/docs-catalog.d.ts.map +1 -0
  271. package/lib-dist/lib/docs-catalog.js +75 -0
  272. package/lib-dist/lib/docs-catalog.js.map +1 -0
  273. package/lib-dist/lib/docs-theme.d.ts +7 -0
  274. package/lib-dist/lib/docs-theme.d.ts.map +1 -0
  275. package/lib-dist/lib/docs-theme.js +51 -0
  276. package/lib-dist/lib/docs-theme.js.map +1 -0
  277. package/lib-dist/lib/host-runtime.d.ts.map +1 -0
  278. package/lib-dist/{host-runtime.js → lib/host-runtime.js} +4 -2
  279. package/lib-dist/lib/host-runtime.js.map +1 -0
  280. package/lib-dist/{host.d.ts → lib/host.d.ts} +20 -0
  281. package/lib-dist/lib/host.d.ts.map +1 -0
  282. package/lib-dist/lib/host.js.map +1 -0
  283. package/lib-dist/lib/index.d.ts +34 -0
  284. package/lib-dist/lib/index.d.ts.map +1 -0
  285. package/lib-dist/lib/index.js +27 -0
  286. package/lib-dist/lib/index.js.map +1 -0
  287. package/lib-dist/{markdown-model.d.ts → lib/markdown-model.d.ts} +3 -3
  288. package/lib-dist/lib/markdown-model.d.ts.map +1 -0
  289. package/lib-dist/lib/markdown-model.js +2031 -0
  290. package/lib-dist/lib/markdown-model.js.map +1 -0
  291. package/lib-dist/lib/markdown.d.ts +3 -0
  292. package/lib-dist/lib/markdown.d.ts.map +1 -0
  293. package/lib-dist/lib/markdown.js +222 -0
  294. package/lib-dist/lib/markdown.js.map +1 -0
  295. package/lib-dist/{schema.d.ts → lib/schema.d.ts} +55 -23
  296. package/lib-dist/lib/schema.d.ts.map +1 -0
  297. package/lib-dist/{schema.js → lib/schema.js} +26 -18
  298. package/lib-dist/lib/schema.js.map +1 -0
  299. package/lib-dist/{terra/pages/docs/_custom.d.ts → lib/terra/custom-components.d.ts} +2 -2
  300. package/lib-dist/lib/terra/custom-components.d.ts.map +1 -0
  301. package/lib-dist/{terra/pages/docs/_custom.js → lib/terra/custom-components.js} +1 -1
  302. package/lib-dist/lib/terra/custom-components.js.map +1 -0
  303. package/lib-dist/lib/terra/docs/archive.d.ts +3 -0
  304. package/lib-dist/lib/terra/docs/archive.d.ts.map +1 -0
  305. package/lib-dist/lib/terra/docs/archive.js +654 -0
  306. package/lib-dist/lib/terra/docs/archive.js.map +1 -0
  307. package/lib-dist/lib/terra/docs/assets.d.ts +26 -0
  308. package/lib-dist/lib/terra/docs/assets.d.ts.map +1 -0
  309. package/lib-dist/lib/terra/docs/assets.js +74 -0
  310. package/lib-dist/lib/terra/docs/assets.js.map +1 -0
  311. package/lib-dist/lib/terra/docs/attachments.d.ts +4 -0
  312. package/lib-dist/lib/terra/docs/attachments.d.ts.map +1 -0
  313. package/lib-dist/lib/terra/docs/attachments.js +5 -0
  314. package/lib-dist/lib/terra/docs/attachments.js.map +1 -0
  315. package/lib-dist/lib/terra/docs/editor-dom.d.ts +50 -0
  316. package/lib-dist/lib/terra/docs/editor-dom.d.ts.map +1 -0
  317. package/lib-dist/lib/terra/docs/editor-dom.js +236 -0
  318. package/lib-dist/lib/terra/docs/editor-dom.js.map +1 -0
  319. package/lib-dist/lib/terra/docs/mutations.d.ts +10 -0
  320. package/lib-dist/lib/terra/docs/mutations.d.ts.map +1 -0
  321. package/lib-dist/lib/terra/docs/mutations.js +105 -0
  322. package/lib-dist/lib/terra/docs/mutations.js.map +1 -0
  323. package/lib-dist/lib/terra/docs/navigation.d.ts +6 -0
  324. package/lib-dist/lib/terra/docs/navigation.d.ts.map +1 -0
  325. package/lib-dist/lib/terra/docs/navigation.js +21 -0
  326. package/lib-dist/lib/terra/docs/navigation.js.map +1 -0
  327. package/lib-dist/lib/terra/docs/state.d.ts +186 -0
  328. package/lib-dist/lib/terra/docs/state.d.ts.map +1 -0
  329. package/lib-dist/lib/terra/docs/state.js +255 -0
  330. package/lib-dist/lib/terra/docs/state.js.map +1 -0
  331. package/lib-dist/lib/terra/docs/toolbar.d.ts +11 -0
  332. package/lib-dist/lib/terra/docs/toolbar.d.ts.map +1 -0
  333. package/lib-dist/lib/terra/docs/toolbar.js +41 -0
  334. package/lib-dist/lib/terra/docs/toolbar.js.map +1 -0
  335. package/lib-dist/lib/terra/docs/tree.d.ts +15 -0
  336. package/lib-dist/lib/terra/docs/tree.d.ts.map +1 -0
  337. package/lib-dist/lib/terra/docs/tree.js +61 -0
  338. package/lib-dist/lib/terra/docs/tree.js.map +1 -0
  339. package/lib-dist/{terra/pages/docs/_helpers.d.ts → lib/terra/docs/workspace.d.ts} +7 -6
  340. package/lib-dist/lib/terra/docs/workspace.d.ts.map +1 -0
  341. package/lib-dist/{terra/pages/docs/_helpers.js → lib/terra/docs/workspace.js} +39 -27
  342. package/lib-dist/lib/terra/docs/workspace.js.map +1 -0
  343. package/lib-dist/lib/terra/flow/_layout.d.ts.map +1 -0
  344. package/lib-dist/{terra → lib/terra}/flow/_layout.js +16 -6
  345. package/lib-dist/lib/terra/flow/_layout.js.map +1 -0
  346. package/lib-dist/lib/terra/flow/powerSource.d.ts.map +1 -0
  347. package/lib-dist/{terra → lib/terra}/flow/powerSource.js +10 -4
  348. package/lib-dist/lib/terra/flow/powerSource.js.map +1 -0
  349. package/lib-dist/{terra → lib/terra}/regex.mjs +11 -6
  350. package/lib-dist/lib/terra/runtime/action-proxy.d.ts +45 -0
  351. package/lib-dist/lib/terra/runtime/action-proxy.d.ts.map +1 -0
  352. package/lib-dist/{terra → lib/terra}/runtime/action-proxy.js +1 -1
  353. package/lib-dist/lib/terra/runtime/action-proxy.js.map +1 -0
  354. package/lib-dist/lib/terra/runtime/content/block-jsx.d.ts +23 -0
  355. package/lib-dist/lib/terra/runtime/content/block-jsx.d.ts.map +1 -0
  356. package/lib-dist/lib/terra/runtime/content/block-jsx.js +225 -0
  357. package/lib-dist/lib/terra/runtime/content/block-jsx.js.map +1 -0
  358. package/lib-dist/lib/terra/runtime/content/document-markdown.d.ts +41 -0
  359. package/lib-dist/lib/terra/runtime/content/document-markdown.d.ts.map +1 -0
  360. package/lib-dist/lib/terra/runtime/content/document-markdown.js +536 -0
  361. package/lib-dist/lib/terra/runtime/content/document-markdown.js.map +1 -0
  362. package/lib-dist/lib/terra/runtime/content/markdown.d.ts +109 -0
  363. package/lib-dist/lib/terra/runtime/content/markdown.d.ts.map +1 -0
  364. package/lib-dist/lib/terra/runtime/content/markdown.js +428 -0
  365. package/lib-dist/lib/terra/runtime/content/markdown.js.map +1 -0
  366. package/lib-dist/lib/terra/runtime/content.d.ts.map +1 -0
  367. package/lib-dist/{terra → lib/terra}/runtime/content.js +147 -62
  368. package/lib-dist/lib/terra/runtime/content.js.map +1 -0
  369. package/lib-dist/lib/terra/runtime/leaf.d.ts.map +1 -0
  370. package/lib-dist/{terra → lib/terra}/runtime/leaf.js +1 -1
  371. package/lib-dist/lib/terra/runtime/leaf.js.map +1 -0
  372. package/lib-dist/lib/terra/runtime/nodes.d.ts.map +1 -0
  373. package/lib-dist/{terra → lib/terra}/runtime/nodes.js +103 -31
  374. package/lib-dist/lib/terra/runtime/nodes.js.map +1 -0
  375. package/lib-dist/{terra → lib/terra}/runtime/runtime.d.ts +8 -2
  376. package/lib-dist/lib/terra/runtime/runtime.d.ts.map +1 -0
  377. package/lib-dist/lib/terra/runtime/runtime.js +86 -0
  378. package/lib-dist/lib/terra/runtime/runtime.js.map +1 -0
  379. package/lib-dist/lib/terra/runtime/shared.d.ts.map +1 -0
  380. package/lib-dist/{terra → lib/terra}/runtime/shared.js +56 -11
  381. package/lib-dist/lib/terra/runtime/shared.js.map +1 -0
  382. package/lib-dist/lib/terra/runtime/types.d.ts +529 -0
  383. package/lib-dist/lib/terra/runtime/types.d.ts.map +1 -0
  384. package/lib-dist/{terra → lib/terra}/runtime/types.js +28 -2
  385. package/lib-dist/lib/terra/runtime/types.js.map +1 -0
  386. package/lib-dist/lib/workspace-types.d.ts +29 -0
  387. package/lib-dist/lib/workspace-types.d.ts.map +1 -0
  388. package/lib-dist/lib/workspace-types.js +2 -0
  389. package/lib-dist/lib/workspace-types.js.map +1 -0
  390. package/lib-dist/style.css +237 -1
  391. package/package.json +34 -16
  392. package/src/components/NotFound.astro +6 -0
  393. package/src/components/NotFound.tsx +48 -0
  394. package/src/{SiteLayout.astro → components/SiteLayout.astro} +8 -4
  395. package/src/{navigation.tsx → components/navigation.tsx} +2 -1
  396. package/lib-dist/Docs.d.ts.map +0 -1
  397. package/lib-dist/Docs.js +0 -60
  398. package/lib-dist/Docs.js.map +0 -1
  399. package/lib-dist/LocalDocsWorkspace.d.ts.map +0 -1
  400. package/lib-dist/LocalDocsWorkspace.js.map +0 -1
  401. package/lib-dist/SiteLayout.d.ts +0 -30
  402. package/lib-dist/SiteLayout.d.ts.map +0 -1
  403. package/lib-dist/SiteLayout.js +0 -34
  404. package/lib-dist/SiteLayout.js.map +0 -1
  405. package/lib-dist/StaticWorkspace.d.ts.map +0 -1
  406. package/lib-dist/StaticWorkspace.js.map +0 -1
  407. package/lib-dist/_Toolbar.d.ts +0 -7
  408. package/lib-dist/_Toolbar.d.ts.map +0 -1
  409. package/lib-dist/_Toolbar.js +0 -85
  410. package/lib-dist/_Toolbar.js.map +0 -1
  411. package/lib-dist/blocks.d.ts.map +0 -1
  412. package/lib-dist/blocks.js.map +0 -1
  413. package/lib-dist/docs-catalog.d.ts.map +0 -1
  414. package/lib-dist/docs-catalog.js +0 -38
  415. package/lib-dist/docs-catalog.js.map +0 -1
  416. package/lib-dist/docs-style.css +0 -31
  417. package/lib-dist/fonts/README.md +0 -5
  418. package/lib-dist/host-runtime.d.ts.map +0 -1
  419. package/lib-dist/host-runtime.js.map +0 -1
  420. package/lib-dist/host.d.ts.map +0 -1
  421. package/lib-dist/host.js.map +0 -1
  422. package/lib-dist/index.d.ts +0 -35
  423. package/lib-dist/index.d.ts.map +0 -1
  424. package/lib-dist/index.js +0 -28
  425. package/lib-dist/index.js.map +0 -1
  426. package/lib-dist/markdown-model.d.ts.map +0 -1
  427. package/lib-dist/markdown-model.js +0 -181
  428. package/lib-dist/markdown-model.js.map +0 -1
  429. package/lib-dist/markdown.d.ts +0 -3
  430. package/lib-dist/markdown.d.ts.map +0 -1
  431. package/lib-dist/markdown.js +0 -83
  432. package/lib-dist/markdown.js.map +0 -1
  433. package/lib-dist/navigation.d.ts.map +0 -1
  434. package/lib-dist/navigation.js.map +0 -1
  435. package/lib-dist/schema.d.ts.map +0 -1
  436. package/lib-dist/schema.js.map +0 -1
  437. package/lib-dist/terra/Workspace.d.ts.map +0 -1
  438. package/lib-dist/terra/Workspace.js +0 -9
  439. package/lib-dist/terra/Workspace.js.map +0 -1
  440. package/lib-dist/terra/editor/TerraContentEditor.d.ts +0 -10
  441. package/lib-dist/terra/editor/TerraContentEditor.d.ts.map +0 -1
  442. package/lib-dist/terra/editor/TerraContentEditor.js +0 -47
  443. package/lib-dist/terra/editor/TerraContentEditor.js.map +0 -1
  444. package/lib-dist/terra/editor/_blocks.d.ts.map +0 -1
  445. package/lib-dist/terra/editor/_blocks.js +0 -110
  446. package/lib-dist/terra/editor/_blocks.js.map +0 -1
  447. package/lib-dist/terra/editor/docs/_Callout.d.ts.map +0 -1
  448. package/lib-dist/terra/editor/docs/_Callout.js.map +0 -1
  449. package/lib-dist/terra/editor/docs/_CodeBlock.d.ts.map +0 -1
  450. package/lib-dist/terra/editor/docs/_CodeBlock.js.map +0 -1
  451. package/lib-dist/terra/editor/docs/_DocsCode.d.ts.map +0 -1
  452. package/lib-dist/terra/editor/docs/_DocsCode.js.map +0 -1
  453. package/lib-dist/terra/editor/docs/_DocsImage.d.ts.map +0 -1
  454. package/lib-dist/terra/editor/docs/_DocsImage.js +0 -62
  455. package/lib-dist/terra/editor/docs/_DocsImage.js.map +0 -1
  456. package/lib-dist/terra/editor/docs/_Embed.d.ts.map +0 -1
  457. package/lib-dist/terra/editor/docs/_Embed.js +0 -27
  458. package/lib-dist/terra/editor/docs/_Embed.js.map +0 -1
  459. package/lib-dist/terra/editor/docs/_Math.d.ts.map +0 -1
  460. package/lib-dist/terra/editor/docs/_Math.js.map +0 -1
  461. package/lib-dist/terra/editor/docs/_Nodes.d.ts.map +0 -1
  462. package/lib-dist/terra/editor/docs/_Nodes.js +0 -52
  463. package/lib-dist/terra/editor/docs/_Nodes.js.map +0 -1
  464. package/lib-dist/terra/editor/docs/_Raw.d.ts.map +0 -1
  465. package/lib-dist/terra/editor/docs/_Raw.js.map +0 -1
  466. package/lib-dist/terra/editor/docs/_Table.d.ts.map +0 -1
  467. package/lib-dist/terra/editor/docs/_Table.js +0 -71
  468. package/lib-dist/terra/editor/docs/_Table.js.map +0 -1
  469. package/lib-dist/terra/editor/docs/_Tabs.d.ts.map +0 -1
  470. package/lib-dist/terra/editor/docs/_Tabs.js.map +0 -1
  471. package/lib-dist/terra/editor/docs/_TsDocs.d.ts.map +0 -1
  472. package/lib-dist/terra/editor/docs/_TsDocs.js.map +0 -1
  473. package/lib-dist/terra/editor/docs/_math_inline.d.ts.map +0 -1
  474. package/lib-dist/terra/editor/docs/_math_inline.js.map +0 -1
  475. package/lib-dist/terra/editor/docs/heading.d.ts.map +0 -1
  476. package/lib-dist/terra/editor/docs/heading.js.map +0 -1
  477. package/lib-dist/terra/editor/docs/index.d.ts.map +0 -1
  478. package/lib-dist/terra/editor/docs/index.js.map +0 -1
  479. package/lib-dist/terra/editor/types.d.ts.map +0 -1
  480. package/lib-dist/terra/editor/types.js.map +0 -1
  481. package/lib-dist/terra/flow/Nodes.d.ts.map +0 -1
  482. package/lib-dist/terra/flow/Nodes.js.map +0 -1
  483. package/lib-dist/terra/flow/_chrome.d.ts.map +0 -1
  484. package/lib-dist/terra/flow/_chrome.js.map +0 -1
  485. package/lib-dist/terra/flow/_layout.d.ts.map +0 -1
  486. package/lib-dist/terra/flow/_layout.js.map +0 -1
  487. package/lib-dist/terra/flow/menuContext.d.ts.map +0 -1
  488. package/lib-dist/terra/flow/menuContext.js.map +0 -1
  489. package/lib-dist/terra/flow/powerSource.d.ts.map +0 -1
  490. package/lib-dist/terra/flow/powerSource.js.map +0 -1
  491. package/lib-dist/terra/pages/docs/_attachments.d.ts.map +0 -1
  492. package/lib-dist/terra/pages/docs/_attachments.js.map +0 -1
  493. package/lib-dist/terra/pages/docs/_blocks.d.ts.map +0 -1
  494. package/lib-dist/terra/pages/docs/_blocks.js.map +0 -1
  495. package/lib-dist/terra/pages/docs/_custom.d.ts.map +0 -1
  496. package/lib-dist/terra/pages/docs/_custom.js.map +0 -1
  497. package/lib-dist/terra/pages/docs/_editable.d.ts.map +0 -1
  498. package/lib-dist/terra/pages/docs/_editable.js.map +0 -1
  499. package/lib-dist/terra/pages/docs/_export-dialog.d.ts.map +0 -1
  500. package/lib-dist/terra/pages/docs/_export-dialog.js.map +0 -1
  501. package/lib-dist/terra/pages/docs/_helpers.d.ts.map +0 -1
  502. package/lib-dist/terra/pages/docs/_helpers.js.map +0 -1
  503. package/lib-dist/terra/pages/docs/_icons.d.ts.map +0 -1
  504. package/lib-dist/terra/pages/docs/_icons.js.map +0 -1
  505. package/lib-dist/terra/pages/docs/_main.d.ts.map +0 -1
  506. package/lib-dist/terra/pages/docs/_main.js +0 -1959
  507. package/lib-dist/terra/pages/docs/_main.js.map +0 -1
  508. package/lib-dist/terra/pages/docs/_sidebar.d.ts.map +0 -1
  509. package/lib-dist/terra/pages/docs/_sidebar.js +0 -2450
  510. package/lib-dist/terra/pages/docs/_sidebar.js.map +0 -1
  511. package/lib-dist/terra/pages/docs/_toolbar.d.ts.map +0 -1
  512. package/lib-dist/terra/pages/docs/_toolbar.js.map +0 -1
  513. package/lib-dist/terra/pages/docs/_tree.d.ts.map +0 -1
  514. package/lib-dist/terra/pages/docs/_tree.js.map +0 -1
  515. package/lib-dist/terra/runtime/action-proxy.d.ts +0 -5
  516. package/lib-dist/terra/runtime/action-proxy.d.ts.map +0 -1
  517. package/lib-dist/terra/runtime/action-proxy.js.map +0 -1
  518. package/lib-dist/terra/runtime/content.d.ts.map +0 -1
  519. package/lib-dist/terra/runtime/content.js.map +0 -1
  520. package/lib-dist/terra/runtime/leaf.d.ts.map +0 -1
  521. package/lib-dist/terra/runtime/leaf.js.map +0 -1
  522. package/lib-dist/terra/runtime/nodes.d.ts.map +0 -1
  523. package/lib-dist/terra/runtime/nodes.js.map +0 -1
  524. package/lib-dist/terra/runtime/runtime.d.ts.map +0 -1
  525. package/lib-dist/terra/runtime/runtime.js +0 -50
  526. package/lib-dist/terra/runtime/runtime.js.map +0 -1
  527. package/lib-dist/terra/runtime/shared.d.ts.map +0 -1
  528. package/lib-dist/terra/runtime/shared.js.map +0 -1
  529. package/lib-dist/terra/runtime/types.d.ts +0 -266
  530. package/lib-dist/terra/runtime/types.d.ts.map +0 -1
  531. package/lib-dist/terra/runtime/types.js.map +0 -1
  532. package/lib-dist/terra/runtime/ui.d.ts.map +0 -1
  533. package/lib-dist/terra/runtime/ui.js +0 -16
  534. package/lib-dist/terra/runtime/ui.js.map +0 -1
  535. package/lib-dist/workspace.d.ts +0 -78
  536. package/lib-dist/workspace.d.ts.map +0 -1
  537. package/lib-dist/workspace.js +0 -151
  538. package/lib-dist/workspace.js.map +0 -1
  539. package/src/style.css +0 -733
  540. /package/lib-dist/{fonts → assets/fonts}/Avara-Bold.woff2 +0 -0
  541. /package/lib-dist/{fonts → assets/fonts}/Avara-BoldItalic.woff2 +0 -0
  542. /package/lib-dist/{fonts → assets/fonts}/OFL-1.1.txt +0 -0
  543. /package/lib-dist/{blocks.d.ts → components/blocks.d.ts} +0 -0
  544. /package/lib-dist/{navigation.js → components/navigation.js} +0 -0
  545. /package/lib-dist/{terra → components/terra}/editor/docs/_CodeBlock.d.ts +0 -0
  546. /package/lib-dist/{terra → components/terra}/editor/docs/index.d.ts +0 -0
  547. /package/lib-dist/{terra → components/terra}/editor/docs/index.js +0 -0
  548. /package/lib-dist/{terra → components/terra}/flow/menuContext.d.ts +0 -0
  549. /package/lib-dist/{terra → components/terra}/flow/menuContext.js +0 -0
  550. /package/lib-dist/{terra → components/terra}/pages/docs/_blocks.d.ts +0 -0
  551. /package/lib-dist/{terra → components/terra}/pages/docs/_icons.d.ts +0 -0
  552. /package/lib-dist/{terra → components/terra}/pages/docs/_icons.js +0 -0
  553. /package/lib-dist/{host-runtime.d.ts → lib/host-runtime.d.ts} +0 -0
  554. /package/lib-dist/{host.js → lib/host.js} +0 -0
  555. /package/lib-dist/{terra → lib/terra}/flow/_layout.d.ts +0 -0
  556. /package/lib-dist/{terra → lib/terra}/flow/powerSource.d.ts +0 -0
  557. /package/lib-dist/{terra → lib/terra}/runtime/content.d.ts +0 -0
  558. /package/lib-dist/{terra → lib/terra}/runtime/leaf.d.ts +0 -0
  559. /package/lib-dist/{terra → lib/terra}/runtime/nodes.d.ts +0 -0
  560. /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 { $attachmentFilter, $surfaceReady, $transition, clearTransition, sanitizeName, uploadAssetChunked, useAtom } from './_helpers.js';
12
- import { actions } from '../../runtime/action-proxy.js';
13
- import { cn, error as logError, errorLog, isRec, notify, warn } from '../../runtime/runtime.js';
14
- import { createElement, createElement as __terraQualityCreateElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';
15
- import { currLeafSrc } from '../../runtime/leaf.js';
16
- import { dirname, docsPath, isDocsPath } from '../../runtime/shared.js';
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 '../../regex.mjs';
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
24
  import { Button } from '@terra-symposium/styling/ui/terra-original';
22
- import { Card, CardDescription, CardHeader, CardTitle } from '@terra-symposium/styling/ui/terra-original';
25
+ import { Card, CardDescription, CardHeader, CardTitle, } from '@terra-symposium/styling/ui/terra-original';
23
26
  import { CodeBlock } from '../../editor/docs/_CodeBlock.js';
24
- import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@terra-symposium/styling/ui/terra-original';
25
- import { ErrorBoundary } from '../../runtime/ui.js';
26
- import { Empty } from '../../runtime/ui.js';
27
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@terra-symposium/styling/ui/terra-original';
28
+ import { ErrorBoundary } from '../../ui.js';
29
+ import { Empty } from '../../ui.js';
27
30
  import { Input } from '@terra-symposium/styling/ui/terra-original';
28
31
  import { Label } from '@terra-symposium/styling/ui/terra-original';
29
- import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@terra-symposium/styling/ui/terra-original';
32
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@terra-symposium/styling/ui/terra-original';
30
33
  import { Textarea } from '@terra-symposium/styling/ui/terra-original';
31
34
  import { TsDocsSelect } from './_blocks.js';
32
35
  // DATA
33
- import { ATTCH_TYPES } from './_helpers.js';
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) => /\.(?:csv|json|log|md|mdx|text|txt|xml|ya?ml)$/i.test(sis.name || sis.path.split('?')[0] || '');
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') || s.path.toLowerCase().split('?')[0].endsWith('.pdf') || s.isMd || s.type === 'document')
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 && ((val) => ATTCH_TYPES.includes(val))(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('http')) {
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({ error: err instanceof Error ? err : new Error('Attachment preview failed.'), fallback: 'Failed to load attachment preview.' });
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 => (s.id === tempId ? { ...s, name: `Uploading (${currChunk}/${totalChunks})...` } : 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 => (s.id === tempId ? { ...s, path: finalAsset.path || finalAsset.src || tempId, name: finalAsset.name || file.name, isMd: isMdFile, title: file.name } : 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({ error: _err instanceof Error ? _err : new Error('Failed to attach.'), fallback: `Failed to upload ${file.name}.` });
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({ pdfs: pdfFiles, others: validFiles.filter(f => !pdfFiles.includes(f)) });
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.split(TerraQualityRegex.REGEX_N_S_REGEX()).filter(u => (t === 'tsdocs' ? u.trim().length > 0 : u.startsWith('http') || isDocsPath(u) || u.startsWith('/tsdocs')));
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({ path: docId, url: u });
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 = { id: tmpId, path: u, name: `${title} Video`, isMd: false, title, type: 'youtube', sourceUrl: u };
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({ url: u });
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({ path: nPath, source: text, title, type: 'website', sourceUrl: u });
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 = { id: tmpId, path: nPath, name: nPath.split('/').pop() || '', isMd: true, title, type: 'website', sourceUrl: u, source: text };
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') ? u : u.startsWith('/') ? `${window.location.origin}${u}` : `${window.location.origin}${docsPath(`tsdocs/${u}`)}`;
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.split('/').filter(Boolean).pop()?.replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ') || 'TsDocs Reference').replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), c => c.toUpperCase()),
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 = { id: tmpId, path: fmtUrl, name: title, isMd: false, title, type: 'tsdocs', sourceUrl: fmtUrl };
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({ path: docId, url: u, type: aType });
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.split(TerraQualityRegex.REGEX_N_S_REGEX()).filter(u => u.startsWith('http') || isDocsPath(u) || u.startsWith('/tsdocs'));
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 = [...urls.filter(u => u.toLowerCase().split('?')[0].endsWith('.pdf')), ...urls.filter(u => u.toLowerCase().split('?')[0].endsWith('.json'))];
354
- const webUrls = urls.filter(u => !ytUrls.includes(u) && !refUrls.includes(u) && !docUrls.includes(u) && !imgUrls.includes(u));
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({ docPath: docId, attachmentKey: id, newName: nFilename });
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 => (s.path === renameDlg.path ? { ...s, path: renameDlg.path, name: renameDlg.name } : 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({ error: _err instanceof Error ? _err : new Error('Deletion failed'), fallback: 'Failed to delete some attachments.' });
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 || !!viewDlg || (renameDlg?.open ?? false) || (transferDlg?.open ?? false) || addDialogOpen;
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 ? e.target.closest('[data-docs-attachment-id]') : null)?.dataset.docsAttachmentId;
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 ? e.target.closest('[data-docs-attachments]') : null))
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: '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 => {
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: '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 => {
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: '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 => {
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({ ...v, isMd: true, content: latestContent(v.content) || 'No transcript text found.' });
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([...(e.metaKey || e.ctrlKey ? p : []), ...sisters.slice(Math.min(i1, i2), Math.max(i1, i2) + 1).map(s => s.path)])));
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 => (p.includes(v.path) ? p.filter(x => x !== v.path) : [...p, v.path]));
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({ ...v, isMd: true, content: latestContent(v.content) || 'No transcript text found.' });
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: 'truncate text-base', children: v.title || v.name }), _jsx(CardDescription, { className: 'truncate', children: v.sourceUrl || v.path })] }) }, v.id || v.path));
557
- }) })] }, 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", { role: 'menu', "data-docs-attachment-menu": true, className: 'fixed z-[120] min-w-32 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
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
- { icon: _jsx(CopyIcon, {}), label: `Copy ${sel.length} items`, onSelect: () => setTransferDlg({ open: true, action: 'copy', items: selItems }) },
560
- { icon: _jsx(PopOutIcon, {}), label: `Move ${sel.length} items`, onSelect: () => setTransferDlg({ open: true, action: 'cut', items: selItems }) },
561
- ...(selItems.every(s => s.path.toLowerCase().split('?')[0].endsWith('.pdf') || s.name.toLowerCase().endsWith('.pdf'))
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)) && !(s.path && itemKeys.has(s.path))),
575
- { id: tmpId, path: tmpId, name: 'Merging PDFs...', isMd: false, type: 'document' },
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({ path: item?.path || '' });
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 => (s.id === tmpId ? { ...s, name: 'Uploading Merged PDF...' } : 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 => (s.id === tmpId ? { ...s, name: `Uploading (${currChunk}/${totalChunks})...` } : 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 => (s.id === tmpId ? { ...s, path: fPath, name: fPath.split('/').pop() || mergedFile.name } : 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({ assets: false, path: i.path, type: 'doc' });
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({ docPath: docId, attachmentKey: i.id });
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
- { destructive: true, icon: _jsx(TrashIcon, {}), label: `Delete ${sel.length} items`, onSelect: () => void remove(selItems) },
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({ open: true, path: ctxAttachment.item.path, name: ctxAttachment.item.name, isMd: ctxAttachment.item.isMd || false, id: ctxAttachment.item.id });
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
- { icon: _jsx(CopyIcon, {}), label: 'Copy to...', onSelect: () => setTransferDlg({ open: true, action: 'copy', items: [ctxAttachment.item] }) },
649
- { icon: _jsx(PopOutIcon, {}), label: 'Move to...', onSelect: () => setTransferDlg({ open: true, action: 'cut', items: [ctxAttachment.item] }) },
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', { detail: { path: ctxAttachment.item.path, name: ctxAttachment.item.name } })),
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({ path: nPath, source: docData.source });
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({ error: _err instanceof Error ? _err : new Error('Failed to duplicate.'), fallback: 'Failed to duplicate.' });
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
- { destructive: true, onSelect: () => void remove([ctxAttachment.item]), icon: _jsx(TrashIcon, {}), label: 'Delete' },
705
- ]).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: () => {
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: '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: () => {
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 => [...p, { id: tmpId, path: tmpId, name: f.name, isMd: isMdFile, type: 'document' }]);
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
- [new File([(await mergedPdf.save()).buffer], 'Merged-Document.pdf', { type: 'application/pdf' }), ...mergePdfState.others].forEach((f, i) => {
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 => [...p, { id: tmpId, path: tmpId, name: f.name, isMd: isMdFile, type: 'document' }]);
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: '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' ? viewDlg.content : 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: () => {
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 : []).filter(isRec).map(d => ({ title: d.title, slug: d.slug, source: d.body })), null, 2),
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.split('?')[0]?.match(TerraQualityRegex.REGEX_A_Z0_9_I_REGEX());
791
- if (extMatch && !dlName.toLowerCase().endsWith(extMatch[0].toLowerCase()))
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' && !dlName.toLowerCase().endsWith('.pdf'))
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({ path: viewDlg.path });
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], { type: viewDlg.type === 'document' ? 'application/pdf' : 'application/octet-stream' }));
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: 'mr-2 size-4' }), " Download Asset"] }))] })) }), _jsx(DialogFooter, { children: _jsx(Button, { variant: 'ghost', onClick: () => {
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: '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 => {
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: '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: [
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: '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: () => {
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, { className: 'size-6 text-primary-11', 'aria-hidden': 'true' }), _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: () => {
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: 'mr-2 size-5' }), "Select Files to Upload"] })), _jsxs("div", { className: 'space-y-2', children: [_jsx(Label, { children: dialogMode === 'tsdocs' ? 'Select Reference' : !['youtube', 'website'].includes(dialogMode) ? 'Or Import via URL' : 'Import via URL' }), dialogMode === 'tsdocs' ? (_jsx(TsDocsSelect, { variant: 'inline', multiple: true, value: urlInput ? urlInput.split('\n').filter(Boolean) : [], onChange: (v) => {
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: 'shrink-0 border-t border-primary-6 pt-4', children: dialogMode === 'select' ? (_jsx(Button, { variant: 'ghost', onClick: () => {
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: 'ghost', onClick: () => {
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
  }