@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
@@ -9,48 +9,57 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
9
9
  IMPORTS
10
10
  //////////////////////////////////////////////////*/
11
11
  // API
12
- import { $attachmentFilter, clearTransition, codeViewOf, isDocBody, setTransition, toolbarFocusValue, useAtom } from './_helpers.js';
12
+ import { clearTransition, setTransition, useAtom } from '../../../../lib/terra/docs/state.js';
13
+ import { $attachmentFilter } from '../../../../lib/terra/docs/attachments.js';
14
+ import { codeViewOf } from '../../../../lib/terra/docs/editor-dom.js';
15
+ import { FindReplace } from './_toolbar-find-replace.js';
16
+ import { toolbarFocusValue } from '../../../../lib/terra/docs/toolbar.js';
17
+ import { isDocBody } from '../../../../lib/terra/runtime/types.js';
13
18
  import { $createHeadingNode } from '@lexical/rich-text';
14
19
  import { $createParagraphNode, $getNearestNodeFromDOMNode, $isElementNode } from 'lexical';
15
- import { actions } from '../../runtime/action-proxy.js';
16
- import { docsRootPath } from '../../runtime/shared.js';
17
- import { cn, notify } from '../../runtime/runtime.js';
18
- import { components as repoComponents } from './_custom.js';
19
- import { dirname, toPascal } from '../../runtime/shared.js';
20
+ import { actions } from '../../../../lib/terra/runtime/action-proxy.js';
21
+ import { docsRootPath } from '../../../../lib/terra/runtime/shared.js';
22
+ import { cn, notify } from '../../../../lib/terra/runtime/runtime.js';
23
+ import { components as repoComponents } from '../../../../lib/terra/custom-components.js';
24
+ import { dirname, toPascal } from '../../../../lib/terra/runtime/shared.js';
20
25
  import { redo, redoDepth, undo, undoDepth } from '@codemirror/commands';
21
- import { stringifyDocBody } from '../../runtime/content.js';
26
+ import { stringifyDocBody } from '../../../../lib/terra/runtime/content/document-markdown.js';
22
27
  import { toast } from 'sonner';
23
28
  import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
24
- import { getDocsHostAdapter } from '../../../host-runtime.js';
29
+ import { getDocsHostAdapter } from '../../../../lib/host-runtime.js';
25
30
  // COMPONENTS
26
- import * as TerraQualityRegex from '../../regex.mjs';
31
+ import * as TerraQualityRegex from '../../../../lib/terra/regex.mjs';
27
32
  import React from 'react';
28
33
  import { TextTooltip, TooltipProvider } from '@terra-symposium/styling/ui/terra-original';
29
- import { ArrowLeft as LeftArrowIcon, ArrowRight as RightArrowIcon, ArrowUpRight as PopOutIcon, ButtonCentered as FullWordIcon, CaretDown as CaretDownIcon, CharacterPatterns as ReplaceIcon, CharacterSentenceCase as CaseIcon, DataShare as ShareIcon, Image as ImageIcon, Link as LinkIcon, ListBulleted as BulletListIcon, ListNumbered as NumberListIcon, Paste as PasteIcon, Redo as RedoIcon, RepoSourceCode as ModuleIcon, Search as SearchIcon, Task as CheckListIcon, TextBold as BoldIcon, TextFont as TextFontIcon, TextItalic as ItalicIcon, TextStrikethrough as StrikethroughIcon, TextUnderline as UnderlineIcon, Undo as UndoIcon, } from '@carbon/icons-react';
34
+ import { ArrowUpRight as PopOutIcon, CaretDown as CaretDownIcon, DataShare as ShareIcon, Image as ImageIcon, Link as LinkIcon, ListBulleted as BulletListIcon, ListNumbered as NumberListIcon, Paste as PasteIcon, Redo as RedoIcon, RepoSourceCode as ModuleIcon, Search as SearchIcon, Task as CheckListIcon, TextBold as BoldIcon, TextFont as TextFontIcon, TextItalic as ItalicIcon, TextStrikethrough as StrikethroughIcon, TextUnderline as UnderlineIcon, Undo as UndoIcon, } from '@carbon/icons-react';
30
35
  import { Button as UiButton } from '@terra-symposium/styling/ui/terra-original';
31
36
  import { ButtonGroup } from '@terra-symposium/styling/ui/terra-original';
32
37
  import { CodeBlock } from '../../editor/docs/_CodeBlock.js';
33
- import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@terra-symposium/styling/ui/terra-original';
34
- import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from '@terra-symposium/styling/ui/terra-original';
35
- import { EditStateCtx } from './_helpers.js';
36
- import { ErrorBoundary } from '../../runtime/ui.js';
38
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@terra-symposium/styling/ui/terra-original';
39
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from '@terra-symposium/styling/ui/terra-original';
40
+ import { EditStateCtx } from '../../../../lib/terra/docs/state.js';
41
+ import { ErrorBoundary } from '../../ui.js';
37
42
  import { Input } from '@terra-symposium/styling/ui/terra-original';
38
43
  import { Label } from '@terra-symposium/styling/ui/terra-original';
39
- import { Popover, PopoverContent, PopoverTrigger } from '@terra-symposium/styling/ui/terra-original';
44
+ import { Popover, PopoverContent, PopoverTrigger, } from '@terra-symposium/styling/ui/terra-original';
40
45
  import { SearchEmpty } from '@terra-symposium/styling/ui/terra-original';
41
- import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from '@terra-symposium/styling/ui/terra-original';
42
- import { Textarea } from '@terra-symposium/styling/ui/terra-original';
43
- import { Toggle } from '@terra-symposium/styling/ui/terra-original';
46
+ import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, } from '@terra-symposium/styling/ui/terra-original';
44
47
  import { ToggleGroup, ToggleGroupItem } from '@terra-symposium/styling/ui/terra-original';
45
48
  // DATA
46
- import { ATTCH_TYPES } from './_helpers.js';
49
+ import { ATTCH_TYPES } from '../../../../lib/terra/docs/attachments.js';
47
50
  import { DOCS_BLOCK_ICONS } from './_icons.js';
48
- import { EMPTY_NODES } from '../../runtime/nodes.js';
51
+ import { EMPTY_NODES } from '../../../../lib/terra/runtime/nodes.js';
49
52
  /*//////////////////////////////////////////////////
50
53
  CONFIG
51
54
  //////////////////////////////////////////////////*/
52
55
  const FIND_WORD = String.raw `[\p{L}\p{N}_]`;
53
- const BLIND_REGEX = [/<[^>]+>/gu, /^[\t ]*(?:#{1,6}|>+|[-+*]|\d+\.)[\t ]*/gmu, /:::[^\n]*|===|\|\|\|/gu, /[`*_~[\]()]/gu, /\s+/gu];
56
+ const BLIND_REGEX = [
57
+ /<[^>]+>/gu,
58
+ /^[\t ]*(?:#{1,6}|>+|[-+*]|\d+\.)[\t ]*/gmu,
59
+ /:::[^\n]*|===|\|\|\|/gu,
60
+ /[`*_~[\]()]/gu,
61
+ /\s+/gu,
62
+ ];
54
63
  const ICON_CLASS = 'size-4 text-primary-11';
55
64
  const SECONDARY_TEXT_CLASS = 'text-xs text-primary-11';
56
65
  const MENU_GAP_CLASS = 'gap-2';
@@ -149,7 +158,7 @@ COMPONENTS
149
158
  //////////////////////////////////////////////////*/
150
159
  const Button = React.forwardRef(function Button({ children: c, className: v, disabled: d, lbl: l, shortcut: s, onClick: o, onMouseDown: r, active: a, ...p }, x) {
151
160
  void a;
152
- return (_jsx(TextTooltip, { content: s ? `${l} (${s})` : l, side: 'top', align: 'center', delayDuration: 400, children: _jsx(UiButton, { ref: x, variant: 'ghost', size: 'xs', "aria-label": l, disabled: d, onClick: o, onMouseDown: r, className: cn('inline-flex h-6 !p-0.5 shadow-none', v), ...p, children: c }) }));
161
+ return (_jsx(TextTooltip, { content: s ? `${l} (${s})` : l, side: "top", align: "center", delayDuration: 400, children: _jsx(UiButton, { ref: x, variant: "ghost", size: "xs", "aria-label": l, disabled: d, onClick: o, onMouseDown: r, className: cn('inline-flex h-6 !p-0.5 shadow-none', v), ...p, children: c }) }));
153
162
  });
154
163
  Button.displayName = 'Button';
155
164
  /**
@@ -165,13 +174,16 @@ Button.displayName = 'Button';
165
174
  */
166
175
  function Mode({ mode, onModeChange, disabled, editable, size = 'xs', }) {
167
176
  void editable;
168
- return (_jsxs(Select, { size: size, disabled: disabled, value: mode, onValueChange: v => {
177
+ return (_jsxs(Select, { size: size, disabled: disabled, value: mode, onValueChange: (v) => {
169
178
  const n = (v || 'view');
170
179
  if (mode === n)
171
180
  return;
172
181
  setTransition(`to-${n}`);
173
182
  onModeChange(n);
174
- }, children: [_jsx(SelectTrigger, { className: 'w-[150px]', "aria-label": 'Mode', children: _jsx(SelectValue, { placeholder: 'Mode' }) }), _jsx(SelectContent, { align: 'start', children: (editable ? ['view', 'edit', 'attachments'] : ['view', 'attachments']).map(o => _jsx(SelectItem, { value: o, children: o[0].toUpperCase() + o.slice(1) }, o)) })] }));
183
+ }, children: [_jsx(SelectTrigger, { "aria-label": "Mode",
184
+ // Match the original full-row selector in View/Edit. Attachments adds
185
+ // its type filters beside this control, so only that mode sizes to fit.
186
+ className: mode === 'attachments' ? 'w-fit' : undefined, children: _jsx(SelectValue, { placeholder: "Mode" }) }), _jsx(SelectContent, { align: 'start', children: (editable ? ['view', 'edit', 'attachments'] : ['view', 'attachments']).map(o => _jsx(SelectItem, { value: o, children: o[0].toUpperCase() + o.slice(1) }, o)) })] }));
175
187
  }
176
188
  /**
177
189
  * Renders Docs-specific controls beside a content editor toolbar.
@@ -184,17 +196,17 @@ function Mode({ mode, onModeChange, disabled, editable, size = 'xs', }) {
184
196
  * @return The mode, history, save, or version actions supported by the active Docs editor toolbar.
185
197
  */
186
198
  const TOOLBAR_COMPONENTS = {
187
- DocsToolbarActions({ activeMode: aMode, editable, size = 'xs', toolbar }) {
199
+ DocsToolbarActions({ activeMode, editable, size = 'xs', toolbar, }) {
188
200
  const edit = useContext(EditStateCtx);
189
201
  const [versions, setVersions] = useState([]);
190
202
  const [historyOpen, setHistoryOpen] = useState(false);
191
203
  const [selectedVersionId, setSelectedVersionId] = useState('');
192
- const ready = !!toolbar;
193
- const selectedVersion = versions.find(v => v.savedAt === selectedVersionId);
204
+ const historyEnabled = getDocsHostAdapter()?.capabilities.history !== false;
205
+ const selectedVersion = versions.find((version) => version.savedAt === selectedVersionId);
194
206
  const preview = useMemo(() => parseVerBody(selectedVersion), [selectedVersion]);
195
207
  useEffect(() => {
196
208
  let live = true;
197
- if (!editable || !toolbar?.path || !historyOpen) {
209
+ if (!editable || !historyEnabled || !toolbar?.path || !historyOpen) {
198
210
  setVersions([]);
199
211
  return;
200
212
  }
@@ -216,65 +228,71 @@ const TOOLBAR_COMPONENTS = {
216
228
  if (live && Array.isArray(data))
217
229
  setVersions(data);
218
230
  }
219
- catch (err) {
220
- console.error('[Toolbar:versions] load-failed', { path, error: err });
221
- toast.error(err instanceof Error ? err.message : 'Failed to load doc versions.');
231
+ catch (error) {
232
+ console.error('[Toolbar:versions] load-failed', { path, error });
233
+ toast.error(error instanceof Error ? error.message : 'Failed to load doc versions.');
222
234
  }
223
235
  })();
224
236
  return () => {
225
237
  live = false;
226
238
  };
227
- }, [editable, historyOpen, toolbar?.path]);
239
+ }, [editable, historyEnabled, historyOpen, toolbar?.path]);
228
240
  useEffect(() => {
229
241
  if (historyOpen && !selectedVersionId && versions[0])
230
242
  setSelectedVersionId(versions[0].savedAt);
231
243
  }, [historyOpen, selectedVersionId, versions]);
232
- const save = async (e) => {
233
- e.preventDefault();
244
+ const save = async (event) => {
245
+ event.preventDefault();
234
246
  if (!toolbar?.save)
235
247
  return;
236
248
  try {
237
- await toolbar.save();
249
+ await Promise.resolve(toolbar.save());
238
250
  }
239
- catch (err) {
240
- console.error('[Docs:save] failed', err);
241
- toast.error(err instanceof Error ? err.message : 'Unable to save document.');
251
+ catch (error) {
252
+ console.error('[Docs:save] failed', error);
253
+ toast.error(error instanceof Error ? error.message : 'Unable to save document.');
242
254
  }
243
255
  };
244
256
  useEffect(() => {
245
- if (aMode === 'view')
257
+ if (activeMode === 'view')
246
258
  return;
247
- const onKeyDown = (e) => {
248
- if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 's')
249
- void save(e);
259
+ const onKeyDown = (event) => {
260
+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 's')
261
+ void save(event);
250
262
  };
251
263
  document.addEventListener('keydown', onKeyDown);
252
- return () => {
253
- document.removeEventListener('keydown', onKeyDown);
254
- };
255
- }, [aMode, toolbar]);
264
+ return () => document.removeEventListener('keydown', onKeyDown);
265
+ }, [activeMode, toolbar]);
256
266
  if (!editable)
257
267
  return null;
258
- return (_jsx(TooltipProvider, { children: _jsxs("div", { className: 'flex items-center gap-1', "data-docs-toolbar-actions": true, children: [_jsx(Mode, { editable: editable, mode: aMode, size: size, disabled: !ready, onModeChange: m => {
268
+ return (_jsx(TooltipProvider, { children: _jsxs("div", { className: "flex items-center gap-1", "data-docs-toolbar-actions": true, children: [_jsx(Mode, { editable: editable, mode: activeMode, size: size, disabled: !toolbar, onModeChange: (mode) => {
259
269
  if (!toolbar)
260
270
  return;
261
- toolbar.setMode(m).catch(e => {
262
- console.error('[Toolbar:mode] change-failed', { error: e, mode: m });
263
- toast.error(e instanceof Error ? e.message : 'Failed to change mode.');
271
+ void toolbar.setMode(mode).catch((error) => {
272
+ console.error('[Toolbar:mode] change-failed', { mode, error });
273
+ toast.error(error instanceof Error ? error.message : 'Failed to change mode.');
264
274
  clearTransition();
265
275
  });
266
- } }), aMode !== 'view' && aMode !== 'attachments' && (_jsx(_Fragment, { children: _jsxs(ButtonGroup, { children: [_jsx(TextTooltip, { content: 'Save (\u2318S)', side: 'top', align: 'center', delayDuration: 400, children: _jsx(UiButton, { size: size, disabled: !ready || !(toolbar?.dirty ?? false), loading: (toolbar?.busy ?? null) === 'saving', onMouseDown: preserveSel, onClick: e => void save(e), children: "Save" }) }), _jsx(TextTooltip, { content: 'Version History', side: 'top', align: 'center', delayDuration: 400, children: _jsx(UiButton, { size: size, className: 'px-0.5', disabled: !ready, "aria-label": 'Version History', onMouseDown: preserveSel, onClick: () => {
267
- if (versions.length > 0 && !selectedVersionId)
268
- setSelectedVersionId(versions[0].savedAt);
269
- setHistoryOpen(true);
270
- }, children: _jsx(CaretDownIcon, {}) }) }), _jsx(Dialog, { open: historyOpen, onOpenChange: setHistoryOpen, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Version History" }), _jsx(DialogDescription, { className: 'sr-only', children: "Select a version to preview and restore." }), _jsxs(Select, { value: selectedVersionId, onValueChange: setSelectedVersionId, children: [_jsx(SelectTrigger, { className: 'h-14', "aria-label": 'Select a version', children: _jsx(SelectValue, { placeholder: 'Select a version' }) }), _jsx(SelectContent, { children: versions.map(v => (_jsx(SelectItem, { value: v.savedAt, children: _jsxs("span", { className: 'flex flex-col text-left', children: [_jsxs("span", { children: [v.title, " (", new Date(v.savedAt).toLocaleString(), ")"] }), _jsx("span", { className: SECONDARY_TEXT_CLASS, children: v.description })] }) }, v.savedAt))) })] })] }), _jsx("div", { className: 'min-h-0 flex-1 overflow-y-auto', children: _jsx(CodeBlock, { tone: 'view', language: 'mdx', docsSource: true, code: preview.markdown.trim() || ' ' }) }), _jsxs(DialogFooter, { children: [_jsx(UiButton, { variant: 'ghost', onClick: () => setHistoryOpen(false), children: "Cancel" }), _jsx(UiButton, { disabled: !selectedVersion, onClick: () => {
271
- if (!edit || !selectedVersionId)
272
- return;
273
- edit.update?.({ content: preview.body, description: selectedVersion?.description || '', source: preview.markdown, title: selectedVersion?.title || '' });
274
- (edit.setCode ?? edit.setSrc)?.(preview.markdown);
275
- setHistoryOpen(false);
276
- notify({ error: null, fallback: 'Restored version to local draft. Save to apply.' });
277
- }, children: "Restore" })] })] }) })] }) }))] }) }));
276
+ } }), activeMode === 'edit' && (_jsxs(ButtonGroup, { children: [_jsx(TextTooltip, { content: "Save (\u2318S)", side: "top", align: "center", delayDuration: 400, children: _jsx(UiButton, { size: size, disabled: !toolbar || !toolbar.dirty, loading: toolbar?.busy === 'saving', onMouseDown: preserveSel, onClick: (event) => void save(event), children: "Save" }) }), historyEnabled && (_jsx(TextTooltip, { content: "Version History", side: "top", align: "center", delayDuration: 400, children: _jsx(UiButton, { size: size, className: "px-0.5", disabled: !toolbar, "aria-label": "Version History", onMouseDown: preserveSel, onClick: () => {
277
+ if (versions.length > 0 && !selectedVersionId)
278
+ setSelectedVersionId(versions[0].savedAt);
279
+ setHistoryOpen(true);
280
+ }, children: _jsx(CaretDownIcon, {}) }) })), _jsx(Dialog, { open: historyOpen, onOpenChange: setHistoryOpen, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Version History" }), _jsx(DialogDescription, { className: "sr-only", children: "Select a version to preview and restore." }), _jsxs(Select, { value: selectedVersionId, onValueChange: setSelectedVersionId, children: [_jsx(SelectTrigger, { className: "h-14", "aria-label": "Select a version", children: _jsx(SelectValue, { placeholder: "Select a version" }) }), _jsx(SelectContent, { children: versions.map((version) => (_jsx(SelectItem, { value: version.savedAt, children: _jsxs("span", { className: "flex flex-col text-left", children: [_jsxs("span", { children: [version.title, " (", new Date(version.savedAt).toLocaleString(), ")"] }), _jsx("span", { className: SECONDARY_TEXT_CLASS, children: version.description })] }) }, version.savedAt))) })] })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: _jsx(CodeBlock, { tone: "view", language: "mdx", docsSource: true, code: preview.markdown.trim() || ' ' }) }), _jsxs(DialogFooter, { children: [_jsx(UiButton, { variant: "ghost", onClick: () => setHistoryOpen(false), children: "Cancel" }), _jsx(UiButton, { disabled: !selectedVersion, onClick: () => {
281
+ if (!edit || !selectedVersionId)
282
+ return;
283
+ edit.update({
284
+ content: preview.body,
285
+ description: selectedVersion?.description || '',
286
+ source: preview.markdown,
287
+ title: selectedVersion?.title || '',
288
+ });
289
+ (edit.setCode ?? edit.setSrc)?.(preview.markdown);
290
+ setHistoryOpen(false);
291
+ notify({
292
+ error: null,
293
+ fallback: 'Restored version to local draft. Save to apply.',
294
+ });
295
+ }, children: "Restore" })] })] }) })] }))] }) }));
278
296
  },
279
297
  /**
280
298
  * Undo and Redo control group dynamically checking CodeMirror depth levels.
@@ -286,9 +304,12 @@ const TOOLBAR_COMPONENTS = {
286
304
  *
287
305
  * @return {JSX.Element} The paired undo/redo button group.
288
306
  */
289
- Undo({ onMouseDown, disabled, adapter }) {
307
+ Undo({ onMouseDown, disabled, adapter, }) {
290
308
  // STATES
291
- const [state, setState] = useState({ redo: false, undo: false });
309
+ const [state, setState] = useState({
310
+ redo: false,
311
+ undo: false,
312
+ });
292
313
  // INIT
293
314
  useEffect(() => {
294
315
  let frame = 0;
@@ -297,8 +318,10 @@ const TOOLBAR_COMPONENTS = {
297
318
  */
298
319
  const sync = () => {
299
320
  const view = codeViewOf();
300
- const n = view ? { redo: redoDepth(view.state) > 0, undo: undoDepth(view.state) > 0 } : { redo: false, undo: false };
301
- setState(c => (c.undo === n.undo && c.redo === n.redo ? c : n));
321
+ const n = view
322
+ ? { redo: redoDepth(view.state) > 0, undo: undoDepth(view.state) > 0 }
323
+ : { redo: false, undo: false };
324
+ setState((c) => (c.undo === n.undo && c.redo === n.redo ? c : n));
302
325
  };
303
326
  sync();
304
327
  /**
@@ -308,21 +331,33 @@ const TOOLBAR_COMPONENTS = {
308
331
  cancelAnimationFrame(frame);
309
332
  frame = requestAnimationFrame(sync);
310
333
  };
311
- ['focusin', 'keyup', 'mouseup'].forEach(e => {
334
+ ['focusin', 'keyup', 'mouseup'].forEach((e) => {
312
335
  document.addEventListener(e, refresh, true);
313
336
  });
314
337
  return () => {
315
338
  cancelAnimationFrame(frame);
316
- ['focusin', 'keyup', 'mouseup'].forEach(e => {
339
+ ['focusin', 'keyup', 'mouseup'].forEach((e) => {
317
340
  document.removeEventListener(e, refresh, true);
318
341
  });
319
342
  };
320
343
  }, []);
321
344
  // RENDER
322
345
  return (_jsx(ButtonGroup, { children: [
323
- { lbl: 'Undo', canFire: adapter?.undoable ?? state.undo, action: adapter?.undo ?? undo, icon: UndoIcon, shortcut: '⌘Z' },
324
- { lbl: 'Redo', canFire: adapter?.redoable ?? state.redo, action: adapter?.redo ?? redo, icon: RedoIcon, shortcut: '⌘Y' },
325
- ].map(b => (_jsx(Button, { lbl: b.lbl, shortcut: b.shortcut, disabled: disabled || !b.canFire, onMouseDown: onMouseDown, onClick: () => {
346
+ {
347
+ lbl: 'Undo',
348
+ canFire: adapter?.undoable ?? state.undo,
349
+ action: adapter?.undo ?? undo,
350
+ icon: UndoIcon,
351
+ shortcut: '⌘Z',
352
+ },
353
+ {
354
+ lbl: 'Redo',
355
+ canFire: adapter?.redoable ?? state.redo,
356
+ action: adapter?.redo ?? redo,
357
+ icon: RedoIcon,
358
+ shortcut: '⌘Y',
359
+ },
360
+ ].map((b) => (_jsx(Button, { lbl: b.lbl, shortcut: b.shortcut, disabled: disabled || !b.canFire, onMouseDown: onMouseDown, onClick: () => {
326
361
  if (adapter) {
327
362
  if (b.lbl === 'Undo')
328
363
  adapter.undo?.();
@@ -337,180 +372,6 @@ const TOOLBAR_COMPONENTS = {
337
372
  view.focus();
338
373
  }, children: _jsx(b.icon, {}) }, b.lbl))) }));
339
374
  },
340
- /**
341
- * Complex Popover enabling blind/case-sensitive searches and sequential replacement inside active viewports.
342
- *
343
- * @param props - Active editing mode and toolbar state used to find text and apply replacements in the current editor.
344
- * @param {ToolbarMode} props.mode - The active interface mode determining search limits.
345
- * @param {ToolbarState | null} props.toolbar - System toolbar state reference to execute replacements.
346
- *
347
- * @return {JSX.Element | null} The Find and Replace popover or null in view mode.
348
- */
349
- FindReplace({ mode, toolbar }) {
350
- // STATES
351
- const ref = useRef(null);
352
- const [cfg, setCfg] = useState({ blind: false, case: false, find: '', full: false, open: false, replace: '' });
353
- const [idx, setIdx] = useState(0);
354
- const [content, setContent] = useState('');
355
- // INIT
356
- useEffect(() => {
357
- if (!cfg.open || !toolbar)
358
- return;
359
- let a = true;
360
- void toolbar.readSearchText().then(r => {
361
- if (a)
362
- setContent(r || '');
363
- });
364
- return () => {
365
- a = false;
366
- };
367
- }, [cfg.open, cfg.find, toolbar]);
368
- // PROCESS
369
- const searchable = useMemo(() => {
370
- return cfg.blind ? BLIND_REGEX.reduce((a, r) => a.replace(r, ''), content) : content;
371
- }, [cfg.blind, content]);
372
- const matcher = useMemo(() => {
373
- if (!cfg.find)
374
- return null;
375
- const v = cfg.blind ? BLIND_REGEX.reduce((a, r) => a.replace(r, ''), cfg.find) : cfg.find;
376
- if (!v)
377
- return null;
378
- const body = v.replace(TerraQualityRegex.REGEX_G_REGEX_9(), '\\$&');
379
- return new RegExp(cfg.full ? `(?<!${FIND_WORD})${body}(?!${FIND_WORD})` : body, `${cfg.case ? 'g' : 'gi'}u`);
380
- }, [cfg]);
381
- const matches = useMemo(() => (matcher && searchable ? Array.from(searchable.matchAll(matcher), m => m.index ?? 0) : []), [matcher, searchable]);
382
- const jsonBlocked = looksLikeJsonBlob(cfg.find) || looksLikeJsonBlob(cfg.replace);
383
- // HELPERS
384
- /**
385
- * Handles focus find.
386
- */
387
- const focusFind = () => {
388
- requestAnimationFrame(() => {
389
- ref.current?.focus();
390
- ref.current?.select();
391
- });
392
- };
393
- /**
394
- * Handles open sel.
395
- */
396
- const openSel = () => {
397
- setCfg(((selectedText) => (prev) => ({ ...prev, find: selectedText || prev.find, open: true }))(window.getSelection()?.toString().replace(/\r\n?/gu, '\n') ?? ''));
398
- focusFind();
399
- };
400
- /**
401
- * Handles navigate.
402
- *
403
- * @param backward - Whether navigation should move toward the previous item.
404
- */
405
- const navigate = (backward = false) => {
406
- const browser = window;
407
- const finder = typeof browser.find === 'function' ? browser.find.bind(browser) : null;
408
- if (cfg.find && !cfg.blind && matches.length)
409
- setIdx(p => (p + (backward ? -1 : 1) + matches.length) % matches.length);
410
- if (cfg.find && !cfg.blind && finder) {
411
- finder(cfg.find, cfg.case, backward, true, false, true, cfg.full);
412
- requestAnimationFrame(() => {
413
- const sel = window.getSelection();
414
- if (!sel || !sel.rangeCount)
415
- return;
416
- let rect = sel.getRangeAt(0).getBoundingClientRect();
417
- if (rect.width === 0 && rect.height === 0) {
418
- const codemirrorSel = document.querySelector('.docs-code-block .cm-selectionBackground, .docs-code-block .cm-search-match');
419
- if (codemirrorSel)
420
- rect = codemirrorSel.getBoundingClientRect();
421
- }
422
- if (rect.width === 0 && rect.height === 0)
423
- return;
424
- const toolbarEl = document.querySelector('[data-docs-toolbar-frame]');
425
- const top = toolbarEl ? toolbarEl.getBoundingClientRect().bottom : 60;
426
- if (rect.top < top + 40) {
427
- window.scrollBy({ top: rect.top - top - 60, behavior: 'auto' });
428
- }
429
- else if (rect.bottom > window.innerHeight - 40) {
430
- window.scrollBy({ top: rect.bottom - window.innerHeight + 60, behavior: 'auto' });
431
- }
432
- });
433
- }
434
- };
435
- // INIT
436
- useEffect(() => {
437
- if (cfg.open)
438
- focusFind();
439
- }, [cfg.open]);
440
- useEffect(() => {
441
- setIdx(0);
442
- }, [cfg.find]);
443
- useEffect(() => {
444
- if (!matches.length) {
445
- setIdx(0);
446
- return;
447
- }
448
- setIdx(p => Math.min(p, matches.length - 1));
449
- }, [matches.length]);
450
- useEffect(() => {
451
- if (mode === 'view')
452
- return;
453
- /**
454
- * Handles on key down.
455
- *
456
- * @param e - Pointer event received from the toolbar control.
457
- */
458
- const onKeyDown = (e) => {
459
- if ((e.metaKey || e.ctrlKey) && e.key?.toLowerCase() === 'f') {
460
- e.preventDefault();
461
- openSel();
462
- return;
463
- }
464
- if (cfg.open && e.key === 'Enter') {
465
- e.preventDefault();
466
- navigate(e.shiftKey);
467
- }
468
- };
469
- document.addEventListener('keydown', onKeyDown, true);
470
- return () => {
471
- document.removeEventListener('keydown', onKeyDown, true);
472
- };
473
- }, [cfg, mode]);
474
- // RENDER
475
- // validation
476
- if (mode === 'view')
477
- return null;
478
- // component
479
- return (_jsxs(Popover, { open: cfg.open, onOpenChange: o => {
480
- setCfg(p => ({ ...p, open: o }));
481
- }, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(UiButton, { size: 'xs', variant: 'ghost', onMouseDown: e => {
482
- e.preventDefault();
483
- }, onClick: openSel, children: [_jsx(SearchIcon, {}), " Find"] }) }), _jsxs(PopoverContent, { align: 'end', className: 'w-80 space-y-2', children: [[
484
- { title: 'Find', val: cfg.find, key: 'find', ref, placeholder: 'Search text' },
485
- { title: 'Replace', val: cfg.replace, key: 'replace', placeholder: 'Replace' },
486
- ].map(f => (_jsxs("div", { className: 'space-y-1', children: [_jsx(Label, { children: f.title }), _jsx(Textarea, { ref: 'ref' in f ? f.ref : undefined, value: f.val, onChange: e => {
487
- const inputChange = { field: f.key, value: e.currentTarget?.value ?? '' };
488
- setCfg(p => ({ ...p, [inputChange.field]: inputChange.value }));
489
- }, placeholder: f.placeholder, rows: Math.max(2, f.val.split('\n').length), onKeyDown: e => {
490
- if (e.key === 'Enter') {
491
- e.preventDefault();
492
- navigate(e.shiftKey);
493
- }
494
- } })] }, f.title))), _jsxs("div", { className: 'flex items-center justify-between text-xs text-primary-11', children: [_jsxs("span", { children: [" ", cfg.find && (matches.length ? `Result ${idx + 1}/${matches.length}` : 'No matches')] }), cfg.blind && _jsx("span", { children: "Text only" })] }), _jsxs("div", { className: 'flex flex-wrap gap-2', children: [[
495
- { icon: _jsx(LeftArrowIcon, {}), backward: true, lbl: 'Previous match' },
496
- { icon: _jsx(RightArrowIcon, {}), backward: false, lbl: 'Next match' },
497
- ].map(b => (_jsx(UiButton, { size: 'xs', variant: 'tonal', disabled: !cfg.find || cfg.blind, onClick: () => {
498
- navigate(b.backward);
499
- }, "aria-label": b.lbl, title: b.lbl, children: b.icon }, String(b.backward)))), [
500
- { key: 'case', title: 'Case sensitive', content: _jsx(CaseIcon, {}) },
501
- { key: 'full', title: 'Full words', content: _jsx(FullWordIcon, {}) },
502
- { key: 'blind', title: 'Markdown blind', content: 'Blind' },
503
- ].map(t => (_jsx(Toggle, { size: 'xs', variant: 'tonal', "aria-label": t.title, title: t.title, pressed: cfg[t.key], onPressedChange: v => {
504
- setCfg(p => ({ ...p, [t.key]: v }));
505
- }, children: t.content }, t.key))), _jsx(UiButton, { size: 'xs', disabled: !matches.length || !toolbar || toolbar.busy === 'saving' || cfg.blind || jsonBlocked, onClick: () => {
506
- if (jsonBlocked) {
507
- toast.error('Paste markdown, not JSON, into find or replace.');
508
- return;
509
- }
510
- if (matcher && toolbar)
511
- toolbar.applySearchText(content.replace(matcher, cfg.replace));
512
- }, "aria-label": 'Replace', title: 'Replace', children: _jsx(ReplaceIcon, {}) }), jsonBlocked && _jsx("span", { className: 'text-red-11 text-xs', children: "JSON input blocked" })] })] })] }));
513
- },
514
375
  /**
515
376
  * Dropdown dialog facilitating attachment uploads or selecting document attachments natively bound to the leaf.
516
377
  *
@@ -544,7 +405,7 @@ const TOOLBAR_COMPONENTS = {
544
405
  name: typeof a.name === 'string' ? a.name : a.path.split('/').pop() || 'attachment',
545
406
  })));
546
407
  })
547
- .catch(e => {
408
+ .catch((e) => {
548
409
  console.error('[Toolbar:attachments] load-failed', { path: ctx, error: e });
549
410
  toast.error(e instanceof Error ? e.message : 'Failed to load attachments.');
550
411
  });
@@ -565,9 +426,9 @@ const TOOLBAR_COMPONENTS = {
565
426
  submit: async () => {
566
427
  if (!cfg.attachment || cfg.attachment === 'none' || !insert)
567
428
  return;
568
- setCfg(p => ({ ...p, busy: true }));
429
+ setCfg((p) => ({ ...p, busy: true }));
569
430
  try {
570
- const att = atts.find(a => a.path === cfg.attachment);
431
+ const att = atts.find((a) => a.path === cfg.attachment);
571
432
  if (!att)
572
433
  throw new Error('Attachment not found');
573
434
  const lbl = att.name
@@ -575,7 +436,8 @@ const TOOLBAR_COMPONENTS = {
575
436
  .pop()
576
437
  ?.split('.')[0]
577
438
  ?.replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ')
578
- .replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), c => c.toUpperCase()) || 'attachment';
439
+ .replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), (c) => c.toUpperCase()) ||
440
+ 'attachment';
579
441
  const c = (att.path.startsWith('http') ? att.path : att.name).replace(TerraQualityRegex.REGEX_G_REGEX(), '%20');
580
442
  let fmt = '';
581
443
  if (insertMode === 'link')
@@ -590,19 +452,19 @@ const TOOLBAR_COMPONENTS = {
590
452
  uploaderActions.reset();
591
453
  }
592
454
  catch {
593
- setCfg(p => ({ ...p, busy: false }));
455
+ setCfg((p) => ({ ...p, busy: false }));
594
456
  }
595
457
  },
596
458
  };
597
459
  // RENDER
598
- return (_jsxs(Popover, { open: cfg.open, onOpenChange: o => {
460
+ return (_jsxs(Popover, { open: cfg.open, onOpenChange: (o) => {
599
461
  if (!o)
600
462
  uploaderActions.reset();
601
463
  else
602
- setCfg(p => ({ ...p, open: o }));
603
- }, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { disabled: disabled, lbl: 'Insert attachment', onMouseDown: onMouseDown, children: _jsx(Icon, {}) }) }), _jsxs(PopoverContent, { align: 'start', className: 'w-80 space-y-4', children: [_jsxs("div", { className: FIELD_GAP_CLASS, children: [_jsx(Label, { className: SECONDARY_TEXT_CLASS, children: "Document Attachments" }), _jsxs(Select, { value: cfg.attachment, onValueChange: p => {
604
- setCfg(v => ({ ...v, attachment: p }));
605
- }, children: [_jsx(SelectTrigger, { "aria-label": 'Document Attachment', children: _jsx(SelectValue, { placeholder: 'Select an attachment' }) }), _jsx(SelectContent, { children: atts.length === 0 ? (_jsx(SelectItem, { value: 'none', disabled: true, children: "No attachments found" })) : (atts.map(a => (_jsx(SelectItem, { value: a.path, children: a.name }, a.path)))) })] })] }), _jsxs("div", { className: FIELD_GAP_CLASS, children: [_jsx(Label, { children: "Format" }), _jsx(ToggleGroup, { type: 'single', value: insertMode, onValueChange: v => v && setInsertMode(v), className: 'justify-start', children: [['embed', 'Visual Embed'], ['link', 'Text Link']].map(([v, l]) => (_jsx(ToggleGroupItem, { value: v, size: 'sm', className: 'h-7 px-3 text-xs', children: l }, v))) })] }), _jsx(UiButton, { className: 'w-full', disabled: !cfg.attachment || cfg.attachment === 'none' || cfg.busy, loading: cfg.busy, onClick: () => void uploaderActions.submit(), children: "Insert" })] })] }));
464
+ setCfg((p) => ({ ...p, open: o }));
465
+ }, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { disabled: disabled, lbl: 'Insert attachment', onMouseDown: onMouseDown, children: _jsx(Icon, {}) }) }), _jsxs(PopoverContent, { align: "start", className: "w-80 space-y-4", children: [_jsxs("div", { className: FIELD_GAP_CLASS, children: [_jsx(Label, { className: SECONDARY_TEXT_CLASS, children: "Document Attachments" }), _jsxs(Select, { value: cfg.attachment, onValueChange: (p) => {
466
+ setCfg((v) => ({ ...v, attachment: p }));
467
+ }, children: [_jsx(SelectTrigger, { "aria-label": "Document Attachment", children: _jsx(SelectValue, { placeholder: "Select an attachment" }) }), _jsx(SelectContent, { children: atts.length === 0 ? (_jsx(SelectItem, { value: 'none', disabled: true, children: "No attachments found" })) : (atts.map(a => (_jsx(SelectItem, { value: a.path, children: a.name }, a.path)))) })] })] }), _jsxs("div", { className: FIELD_GAP_CLASS, children: [_jsx(Label, { children: "Format" }), _jsx(ToggleGroup, { type: 'single', value: insertMode, onValueChange: v => v && setInsertMode(v), className: 'justify-start', children: [['embed', 'Visual Embed'], ['link', 'Text Link']].map(([v, l]) => (_jsx(ToggleGroupItem, { value: v, size: 'sm', className: 'h-7 px-3 text-xs', children: l }, v))) })] }), _jsx(UiButton, { className: "w-full", disabled: !cfg.attachment || cfg.attachment === 'none' || cfg.busy, loading: cfg.busy, onClick: () => void uploaderActions.submit(), children: "Insert" })] })] }));
606
468
  },
607
469
  /**
608
470
  * Recursive structural map converting component tree branches into native interactive dropdown triggers natively.
@@ -615,11 +477,13 @@ const TOOLBAR_COMPONENTS = {
615
477
  *
616
478
  * @return {JSX.Element} React rendered menu node explicitly containing nested branches cleanly.
617
479
  */
618
- GlobalComponentMenuNode({ name, tree, onCopy }) {
619
- return (_jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { className: 'capitalize', children: name.replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ') }), _jsxs(DropdownMenuSubContent, { children: [tree.components.map(c => (_jsx(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: e => {
480
+ GlobalComponentMenuNode({ name, tree, onCopy, }) {
481
+ return (_jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { className: "capitalize", children: name.replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ') }), _jsxs(DropdownMenuSubContent, { children: [tree.components.map((c) => (_jsx(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: (e) => {
620
482
  e.preventDefault();
621
483
  onCopy?.(c);
622
- }, children: c.displayLabel.replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ').replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), c => c.toUpperCase()) }, `${c.path}:${c.name}`))), Object.entries(tree.folders).map(([f, s]) => (_jsx(TOOLBAR_COMPONENTS.GlobalComponentMenuNode, { name: f, tree: s, onCopy: onCopy }, f)))] })] }));
484
+ }, children: c.displayLabel
485
+ .replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ')
486
+ .replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), (c) => c.toUpperCase()) }, `${c.path}:${c.name}`))), Object.entries(tree.folders).map(([f, s]) => (_jsx(TOOLBAR_COMPONENTS.GlobalComponentMenuNode, { name: f, tree: s, onCopy: onCopy }, f)))] })] }));
623
487
  },
624
488
  /**
625
489
  * Complex unified insertion menu tracking local sister references alongside globally configured repo components.
@@ -640,14 +504,21 @@ const TOOLBAR_COMPONENTS = {
640
504
  Custom({ onInsert, onInsertMd, onMouseDown, disabled, ctx, }) {
641
505
  // STATES
642
506
  const [sis, setSis] = useState([]);
643
- const [search, setSearch] = useState({ open: false, query: '', tree: [], busy: false });
507
+ const [search, setSearch] = useState({
508
+ open: false,
509
+ query: '',
510
+ tree: [],
511
+ busy: false,
512
+ });
644
513
  const savedSel = useRef(null);
645
514
  const copyLock = useRef(null);
646
515
  // 1. FETCH LOCAL FILES (Allows ALL leaves as valid attachments)
647
516
  useEffect(() => {
648
517
  if (!ctx)
649
518
  return;
650
- const dir = dirname(TerraQualityRegex.REGEX_INDEX_MD_MDX_I_REGEX_2().test(ctx.split('/').pop() || '') ? dirname(ctx) : ctx);
519
+ const dir = dirname(TerraQualityRegex.REGEX_INDEX_MD_MDX_I_REGEX_2().test(ctx.split('/').pop() || '')
520
+ ? dirname(ctx)
521
+ : ctx);
651
522
  actions.read.doc
652
523
  .list({ type: 'folderEntries', path: dir })
653
524
  .then(({ data: d }) => {
@@ -655,7 +526,7 @@ const TOOLBAR_COMPONENTS = {
655
526
  if (Array.isArray(d))
656
527
  setSis(d.filter((p) => p !== ctx && dirname(p) === dir && /\.(md|mdx|astro|tsx)$/i.test(p.split('/').pop() || '')).map((p) => ({ path: p, name: p.split('/').pop() || '' })));
657
528
  })
658
- .catch(e => {
529
+ .catch((e) => {
659
530
  console.error('[Toolbar:insert.load-failed]', { path: dir, error: e });
660
531
  toast.error(e instanceof Error ? e.message : 'Failed to load insert targets.');
661
532
  });
@@ -664,8 +535,8 @@ const TOOLBAR_COMPONENTS = {
664
535
  const componentTree = useMemo(() => {
665
536
  const root = { components: [], folders: {} };
666
537
  const counts = new Map();
667
- repoComponents.forEach(c => counts.set(c.path, (counts.get(c.path) ?? 0) + 1));
668
- repoComponents.forEach(c => {
538
+ repoComponents.forEach((c) => counts.set(c.path, (counts.get(c.path) ?? 0) + 1));
539
+ repoComponents.forEach((c) => {
669
540
  const parts = c.path.split('/_custom/');
670
541
  if (parts.length <= 1) {
671
542
  root.components.push({ ...c, displayLabel: c.name });
@@ -676,7 +547,7 @@ const TOOLBAR_COMPONENTS = {
676
547
  if (file !== 'index' && (counts.get(c.path) ?? 0) > 1)
677
548
  segs.push(file);
678
549
  let cur = root;
679
- segs.forEach(s => {
550
+ segs.forEach((s) => {
680
551
  cur = cur.folders[s] ??= { components: [], folders: {} };
681
552
  });
682
553
  // prettier-ignore
@@ -730,17 +601,23 @@ const TOOLBAR_COMPONENTS = {
730
601
  return;
731
602
  let a = true;
732
603
  if (search.tree.length === 0) {
733
- setSearch(s => ({ ...s, busy: true }));
604
+ setSearch((s) => ({ ...s, busy: true }));
734
605
  actions.read.doc
735
606
  .list({ type: 'nav', pathname: docsRootPath() })
736
607
  .then(({ data: d }) => {
737
608
  if (a)
738
- setSearch(s => ({ ...s, tree: Array.isArray(d) ? d.filter((n) => Boolean(n && typeof n === 'object' && 'type' in n)) : [], busy: false }));
609
+ setSearch((s) => ({
610
+ ...s,
611
+ tree: Array.isArray(d)
612
+ ? d.filter((n) => Boolean(n && typeof n === 'object' && 'type' in n))
613
+ : [],
614
+ busy: false,
615
+ }));
739
616
  })
740
- .catch(_err => {
617
+ .catch((_err) => {
741
618
  console.error(`[Toolbar:Embed] Failed to fetch document tree:`, _err);
742
619
  if (a)
743
- setSearch(s => ({ ...s, busy: false }));
620
+ setSearch((s) => ({ ...s, busy: false }));
744
621
  });
745
622
  }
746
623
  return () => {
@@ -754,7 +631,9 @@ const TOOLBAR_COMPONENTS = {
754
631
  // contains the same node referenced from multiple locations.
755
632
  const seen = new Set();
756
633
  const lowerQuery = search.query.trim().toLowerCase();
757
- const searchFrames = [{ nodes: search.tree, index: 0, path: '' }];
634
+ const searchFrames = [
635
+ { nodes: search.tree, index: 0, path: '' },
636
+ ];
758
637
  while (searchFrames.length) {
759
638
  const frame = searchFrames[searchFrames.length - 1];
760
639
  if (!frame)
@@ -778,7 +657,11 @@ const TOOLBAR_COMPONENTS = {
778
657
  }
779
658
  }
780
659
  else if (n.type === 'branch' && n.children) {
781
- searchFrames.push({ nodes: n.children, index: 0, path: frame.path ? `${frame.path} / ${currTitle}` : currTitle });
660
+ searchFrames.push({
661
+ nodes: n.children,
662
+ index: 0,
663
+ path: frame.path ? `${frame.path} / ${currTitle}` : currTitle,
664
+ });
782
665
  }
783
666
  }
784
667
  return leaves;
@@ -794,18 +677,24 @@ const TOOLBAR_COMPONENTS = {
794
677
  let finalPath = tgtPath;
795
678
  let leafId = tgtPath;
796
679
  // 1. Close Modal immediately to prevent multiple submissions
797
- setSearch(s => ({ ...s, open: false, busy: true }));
680
+ setSearch((s) => ({ ...s, open: false, busy: true }));
798
681
  setTransition('p');
799
682
  try {
800
683
  if (isNew) {
801
684
  // scope the new document natively UNDER the current document's path.
802
685
  // this ensures string-based `verifyWrite` auth checks pass by matching the prefix of the inherited warrant.
803
686
  const basePath = ctx ? ctx.replace(TerraQualityRegex.REGEX_PATTERN_REGEX_2(), '') : '';
804
- const sName = search.query.trim() ? search.query.replace(TerraQualityRegex.REGEX_A_Z0_9_GI_REGEX_2(), '-').toLowerCase() : 'untitled';
805
- const nId = basePath ? `${basePath}/${sName}-${Date.now()}.mdx` : `${sName}-${Date.now()}.mdx`;
687
+ const sName = search.query.trim()
688
+ ? search.query.replace(TerraQualityRegex.REGEX_A_Z0_9_GI_REGEX_2(), '-').toLowerCase()
689
+ : 'untitled';
690
+ const nId = basePath
691
+ ? `${basePath}/${sName}-${Date.now()}.mdx`
692
+ : `${sName}-${Date.now()}.mdx`;
806
693
  finalPath = nId;
807
694
  // create the page purely as a stand-alone document without anchoring to the group
808
- const writeRes = await actions.write.doc.editor({ path: nId, title: search.query, source: 'This page is empty.' }).catch(_err => ({ data: null, error: _err }));
695
+ const writeRes = await actions.write.doc
696
+ .editor({ path: nId, title: search.query, source: 'This page is empty.' })
697
+ .catch((_err) => ({ data: null, error: _err }));
809
698
  if (writeRes.error) {
810
699
  console.error(`[Toolbar:Embed] write.doc.editor action failed:`, writeRes.error);
811
700
  throw writeRes.error;
@@ -814,19 +703,25 @@ const TOOLBAR_COMPONENTS = {
814
703
  }
815
704
  // map leaf explicitly to the editor's attachment array unconditionally
816
705
  if (ctx) {
817
- const attRes = await actions.write.attachment.docRef({ path: ctx, refId: finalPath, title: search.query || 'Embedded Page' }).catch(_err => {
706
+ const attRes = await actions.write.attachment
707
+ .docRef({ path: ctx, refId: finalPath, title: search.query || 'Embedded Page' })
708
+ .catch((_err) => {
818
709
  console.error(`[Toolbar:Embed] write.attachment.docRef action failed:`, _err);
819
710
  return { data: null, error: _err };
820
711
  });
821
712
  if (attRes && attRes.data) {
822
713
  // Resolves the exact Sanity UUID returned to map directly into the React AST parameter
823
714
  const attachment = {
824
- leafId: typeof attRes.data === 'object' && 'refId' in attRes.data && typeof attRes.data.refId === 'string' ? attRes.data.refId : leafId,
715
+ leafId: typeof attRes.data === 'object' &&
716
+ 'refId' in attRes.data &&
717
+ typeof attRes.data.refId === 'string'
718
+ ? attRes.data.refId
719
+ : leafId,
825
720
  sister: { path: finalPath, name: finalPath.split('/').pop() || finalPath },
826
721
  };
827
722
  leafId = attachment.leafId;
828
- setSis(p => {
829
- if (!p.some(s => s.path === finalPath))
723
+ setSis((p) => {
724
+ if (!p.some((s) => s.path === finalPath))
830
725
  return [...p, attachment.sister];
831
726
  return p;
832
727
  });
@@ -834,10 +729,10 @@ const TOOLBAR_COMPONENTS = {
834
729
  }
835
730
  // delay AST injection to allow Sanity CDN replica propagation to finish
836
731
  if (isNew || ctx)
837
- await new Promise(r => setTimeout(r, 1500));
732
+ await new Promise((r) => setTimeout(r, 1500));
838
733
  clearTransition();
839
734
  // 2. Yield to event loop to allow DOM reconciliation
840
- await new Promise(r => setTimeout(r, 200));
735
+ await new Promise((r) => setTimeout(r, 200));
841
736
  // 3. Force focus back into the active editor securely
842
737
  const aEditor = document.querySelector('[contenteditable="true"], .cm-content');
843
738
  if (aEditor) {
@@ -862,8 +757,8 @@ const TOOLBAR_COMPONENTS = {
862
757
  }
863
758
  }
864
759
  // clean up busy state and search query now that injection is ready
865
- setSearch(s => ({ ...s, query: '', busy: false }));
866
- await new Promise(r => requestAnimationFrame(r));
760
+ setSearch((s) => ({ ...s, query: '', busy: false }));
761
+ await new Promise((r) => requestAnimationFrame(r));
867
762
  // 4. Inject purely as AST text (bypassing the import statement injection)
868
763
  // This mirrors how globally configured components like <Nodes /> and <DocsMath /> are inserted.
869
764
  if (onInsertMd) {
@@ -880,8 +775,11 @@ const TOOLBAR_COMPONENTS = {
880
775
  catch (_err) {
881
776
  clearTransition();
882
777
  console.error(`[Toolbar:Embed] Critical pipeline failure during leaf embed process:`, _err);
883
- notify({ error: _err instanceof Error ? _err : new Error('Embed failed'), fallback: 'Failed to embed leaf.' });
884
- setSearch(s => ({ ...s, query: '', busy: false }));
778
+ notify({
779
+ error: _err instanceof Error ? _err : new Error('Embed failed'),
780
+ fallback: 'Failed to embed leaf.',
781
+ });
782
+ setSearch((s) => ({ ...s, query: '', busy: false }));
885
783
  }
886
784
  };
887
785
  // 6. LOCAL MENUS
@@ -913,21 +811,23 @@ const TOOLBAR_COMPONENTS = {
913
811
  },
914
812
  ],
915
813
  };
916
- return (_jsxs(_Fragment, { children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { disabled: disabled, lbl: 'Insert component', onMouseDown: onMouseDown, children: _jsx(DOCS_BLOCK_ICONS.code, {}) }) }), _jsxs(DropdownMenuContent, { align: 'start', className: MENU_WIDTH_CLASS, children: [_jsxs(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: e => {
814
+ return (_jsxs(_Fragment, { children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { disabled: disabled, lbl: "Insert component", onMouseDown: onMouseDown, children: _jsx(DOCS_BLOCK_ICONS.code, {}) }) }), _jsxs(DropdownMenuContent, { align: "start", className: MENU_WIDTH_CLASS, children: [_jsxs(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: (e) => {
917
815
  e.preventDefault();
918
816
  const sel = window.getSelection();
919
817
  if (sel && sel.rangeCount > 0)
920
818
  savedSel.current = sel.getRangeAt(0).cloneRange();
921
- setSearch(s => ({ ...s, open: true }));
922
- }, className: MENU_GAP_CLASS, children: [_jsx(PopOutIcon, { className: ICON_CLASS }), " Embed Page"] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuSub, { children: [_jsxs(DropdownMenuSubTrigger, { className: MENU_GAP_CLASS, children: [_jsx(ModuleIcon, { className: ICON_CLASS }), " Modules"] }), _jsxs(DropdownMenuSubContent, { className: MENU_WIDTH_CLASS, children: [menuGroups.globalComponents.map(c => (_jsx(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: e => {
819
+ setSearch((s) => ({ ...s, open: true }));
820
+ }, className: MENU_GAP_CLASS, children: [_jsx(PopOutIcon, { className: ICON_CLASS }), " Embed Page"] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuSub, { children: [_jsxs(DropdownMenuSubTrigger, { className: MENU_GAP_CLASS, children: [_jsx(ModuleIcon, { className: ICON_CLASS }), " Modules"] }), _jsxs(DropdownMenuSubContent, { className: MENU_WIDTH_CLASS, children: [menuGroups.globalComponents.map((c) => (_jsx(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: (e) => {
923
821
  e.preventDefault();
924
822
  void copyComponent(c);
925
- }, children: c.displayLabel.replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ').replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), c => c.toUpperCase()) }, c.path))), Object.entries(menuGroups.globalFolders).map(([f, s]) => (_jsx(TOOLBAR_COMPONENTS.GlobalComponentMenuNode, { name: f, tree: s, onCopy: copyComponent }, f)))] })] }), menuGroups.local.map(m => (_jsx(React.Fragment, { children: _jsxs(DropdownMenuSub, { children: [_jsxs(DropdownMenuSubTrigger, { disabled: !m.items.length, className: MENU_GAP_CLASS, children: [m.icon, " ", m.label] }), _jsx(DropdownMenuSubContent, { children: m.items.map(s => (_jsx(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: e => {
823
+ }, children: c.displayLabel
824
+ .replace(TerraQualityRegex.REGEX_G_REGEX_7(), ' ')
825
+ .replace(TerraQualityRegex.REGEX_B_W_G_REGEX(), (c) => c.toUpperCase()) }, c.path))), Object.entries(menuGroups.globalFolders).map(([f, s]) => (_jsx(TOOLBAR_COMPONENTS.GlobalComponentMenuNode, { name: f, tree: s, onCopy: copyComponent }, f)))] })] }), menuGroups.local.map((m) => (_jsx(React.Fragment, { children: _jsxs(DropdownMenuSub, { children: [_jsxs(DropdownMenuSubTrigger, { disabled: !m.items.length, className: MENU_GAP_CLASS, children: [m.icon, " ", m.label] }), _jsx(DropdownMenuSubContent, { children: m.items.map((s) => (_jsx(DropdownMenuItem, { onMouseDown: preserveSel, onSelect: (e) => {
926
826
  e.preventDefault();
927
827
  m.onSelect(s);
928
- }, children: s.name }, s.path))) })] }) }, m.label)))] })] }), _jsx(Dialog, { open: search.open, onOpenChange: o => {
929
- setSearch(s => ({ ...s, open: o }));
930
- }, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Embed Document" }), _jsx(DialogDescription, { className: 'sr-only', children: "Browse the document tree or search to embed a page." })] }), _jsxs("div", { className: 'space-y-4 pt-2', children: [_jsx(Input, { icon: _jsx(SearchIcon, { className: ICON_CLASS }), autoFocus: true, placeholder: 'Search or type to create...', value: search.query, onChange: e => { setSearch(s => ({ ...s, query: e.target.value })); } }), _jsxs("div", { className: 'flex max-h-64 min-h-24 flex-col gap-1 overflow-y-auto pr-2', children: [search.busy && search.tree.length === 0 && _jsx("p", { className: 'py-4 text-center text-sm text-primary-11', children: "Loading..." }), search.query.trim() && (_jsxs(UiButton, { variant: 'outline', className: 'mb-2 flex-col items-start gap-y-0 border-dashed py-6', onClick: () => void embed('', true), disabled: search.busy, children: [_jsx("span", { className: 'text-sm font-medium', children: search.busy ? 'Creating...' : `Create "${search.query}"` }), _jsx("span", { className: SECONDARY_TEXT_CLASS, children: "Create page and embed as attachment" })] })), search.query.trim() && !search.busy && filteredLeaves.length === 0 && _jsx(SearchEmpty, { query: search.query }), filteredLeaves.map(l => (_jsxs(UiButton, { variant: 'ghost', className: 'flex-col items-start gap-y-0 py-6', onClick: () => embed(l.path), children: [_jsx("span", { className: 'text-sm font-medium capitalize', children: l.title }), _jsxs("span", { className: SECONDARY_TEXT_CLASS, children: [l.breadcrumb ? `${l.breadcrumb} / ` : '', l.title] })] }, l.path)))] })] })] }) })] }));
828
+ }, children: s.name }, s.path))) })] }) }, m.label)))] })] }), _jsx(Dialog, { open: search.open, onOpenChange: (o) => {
829
+ setSearch((s) => ({ ...s, open: o }));
830
+ }, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Embed Document" }), _jsx(DialogDescription, { className: "sr-only", children: "Browse the document tree or search to embed a page." })] }), _jsxs("div", { className: 'space-y-4 pt-2', children: [_jsx(Input, { icon: _jsx(SearchIcon, { className: ICON_CLASS }), autoFocus: true, placeholder: 'Search or type to create...', value: search.query, onChange: e => { setSearch(s => ({ ...s, query: e.target.value })); } }), _jsxs("div", { className: 'flex max-h-64 min-h-24 flex-col gap-1 overflow-y-auto pr-2', children: [search.busy && search.tree.length === 0 && _jsx("p", { className: 'py-4 text-center text-sm text-primary-11', children: "Loading..." }), search.query.trim() && (_jsxs(UiButton, { variant: 'outline', className: 'mb-2 flex-col items-start gap-y-0 border-dashed py-6', onClick: () => void embed('', true), disabled: search.busy, children: [_jsx("span", { className: 'text-sm font-medium', children: search.busy ? 'Creating...' : `Create "${search.query}"` }), _jsx("span", { className: SECONDARY_TEXT_CLASS, children: "Create page and embed as attachment" })] })), search.query.trim() && !search.busy && filteredLeaves.length === 0 && _jsx(SearchEmpty, { query: search.query }), filteredLeaves.map(l => (_jsxs(UiButton, { variant: 'ghost', className: 'flex-col items-start gap-y-0 py-6', onClick: () => embed(l.path), children: [_jsx("span", { className: 'text-sm font-medium capitalize', children: l.title }), _jsxs("span", { className: SECONDARY_TEXT_CLASS, children: [l.breadcrumb ? `${l.breadcrumb} / ` : '', l.title] })] }, l.path)))] })] })] }) })] }));
931
831
  },
932
832
  /**
933
833
  * Dropdown control for quickly converting a block or inserting a supported block template.
@@ -963,9 +863,9 @@ const TOOLBAR_COMPONENTS = {
963
863
  const sel = window.getSelection();
964
864
  const blockCursor = document.querySelector('[data-docs-block-cursor="true"]');
965
865
  if (blockCursor && sel?.anchorNode && !blockCursor.contains(sel.anchorNode)) {
966
- const blockVal = toolbarFocusValue(blockCursor, opts.map(o => o.value));
866
+ const blockVal = toolbarFocusValue(blockCursor, opts.map((o) => o.value));
967
867
  if (blockVal) {
968
- setVal(c => (c === blockVal ? c : blockVal));
868
+ setVal((c) => (c === blockVal ? c : blockVal));
969
869
  return;
970
870
  }
971
871
  }
@@ -978,13 +878,15 @@ const TOOLBAR_COMPONENTS = {
978
878
  const textBlock = el?.closest('h1, h2, h3, h4, h5, h6, p');
979
879
  if (textBlock)
980
880
  savedBlock.current = textBlock;
981
- else if (el?.closest('td, th')?.closest('[data-docs-editor-block="DocsTable"], [data-terra-block="table"]'))
881
+ else if (el
882
+ ?.closest('td, th')
883
+ ?.closest('[data-docs-editor-block="DocsTable"], [data-terra-block="table"]'))
982
884
  savedBlock.current = null;
983
885
  const blockVal = el
984
- ? toolbarFocusValue(el, opts.map(o => o.value))
886
+ ? toolbarFocusValue(el, opts.map((o) => o.value))
985
887
  : null;
986
888
  if (blockVal) {
987
- setVal(c => (c === blockVal ? c : blockVal));
889
+ setVal((c) => (c === blockVal ? c : blockVal));
988
890
  return;
989
891
  }
990
892
  }
@@ -1001,7 +903,7 @@ const TOOLBAR_COMPONENTS = {
1001
903
  n = 'h4';
1002
904
  else if (TerraQualityRegex.REGEX_S_REGEX_4().test(text))
1003
905
  n = 'h2';
1004
- setVal(c => (c === n ? c : n));
906
+ setVal((c) => (c === n ? c : n));
1005
907
  };
1006
908
  sync();
1007
909
  /**
@@ -1024,21 +926,21 @@ const TOOLBAR_COMPONENTS = {
1024
926
  ? decorator.querySelector('[data-docs-editor-block], .docs-math-wrapper, [data-math-code], [data-docs-view-root="true"]')
1025
927
  : null;
1026
928
  const blockVal = block
1027
- ? toolbarFocusValue(block, opts.map(o => o.value))
929
+ ? toolbarFocusValue(block, opts.map((o) => o.value))
1028
930
  : null;
1029
931
  if (!blockVal)
1030
932
  return;
1031
933
  savedBlock.current = null;
1032
- setVal(c => (c === blockVal ? c : blockVal));
934
+ setVal((c) => (c === blockVal ? c : blockVal));
1033
935
  };
1034
- ['focusin', 'keyup', 'mouseup', 'selectionchange'].forEach(e => {
936
+ ['focusin', 'keyup', 'mouseup', 'selectionchange'].forEach((e) => {
1035
937
  document.addEventListener(e, refresh, true);
1036
938
  });
1037
939
  document.addEventListener('docs:block-select', onBlockSelect);
1038
940
  document.addEventListener('docs:block-selected', onBlockSelect);
1039
941
  return () => {
1040
942
  cancelAnimationFrame(frame);
1041
- ['focusin', 'keyup', 'mouseup', 'selectionchange'].forEach(e => {
943
+ ['focusin', 'keyup', 'mouseup', 'selectionchange'].forEach((e) => {
1042
944
  document.removeEventListener(e, refresh, true);
1043
945
  });
1044
946
  document.removeEventListener('docs:block-select', onBlockSelect);
@@ -1046,13 +948,15 @@ const TOOLBAR_COMPONENTS = {
1046
948
  };
1047
949
  }, [disabled, toolbar]);
1048
950
  // RENDER
1049
- return (_jsxs(Select, { disabled: disabled || !toolbar, value: val, onValueChange: v => {
1050
- const item = opts.find(i => i.value === v);
951
+ return (_jsxs(Select, { disabled: disabled || !toolbar, value: val, onValueChange: (v) => {
952
+ const item = opts.find((i) => i.value === v);
1051
953
  if (!item)
1052
954
  return;
1053
955
  if (item.group === 'type') {
1054
956
  if (json) {
1055
- window.dispatchEvent(new CustomEvent('docs:json-command', { detail: { type: 'style', style: v === 'p' ? 'normal' : v } }));
957
+ window.dispatchEvent(new CustomEvent('docs:json-command', {
958
+ detail: { type: 'style', style: v === 'p' ? 'normal' : v },
959
+ }));
1056
960
  setVal(v);
1057
961
  return;
1058
962
  }
@@ -1066,7 +970,7 @@ const TOOLBAR_COMPONENTS = {
1066
970
  const { head } = view.state.selection.main;
1067
971
  const line = view.state.doc.lineAt(head);
1068
972
  const text = line.text;
1069
- let n = 'Text';
973
+ let n;
1070
974
  let prefix = '';
1071
975
  if (v === 'h2') {
1072
976
  prefix = '## ';
@@ -1083,7 +987,10 @@ const TOOLBAR_COMPONENTS = {
1083
987
  else
1084
988
  n = text.replace(/^#{1,6}\s+/, '').trimStart() || 'Text';
1085
989
  const replacementStr = `${prefix}${n}`;
1086
- view.dispatch({ changes: { from: line.from, to: line.to, insert: replacementStr }, selection: { anchor: line.from + replacementStr.length } });
990
+ view.dispatch({
991
+ changes: { from: line.from, to: line.to, insert: replacementStr },
992
+ selection: { anchor: line.from + replacementStr.length },
993
+ });
1087
994
  view.focus();
1088
995
  setVal(v);
1089
996
  return;
@@ -1105,7 +1012,7 @@ const TOOLBAR_COMPONENTS = {
1105
1012
  else if (v === 'h2' || v === 'h3' || v === 'h4')
1106
1013
  replacementNode = $createHeadingNode(v);
1107
1014
  if (replacementNode) {
1108
- blockNode.getChildren().forEach(c => {
1015
+ blockNode.getChildren().forEach((c) => {
1109
1016
  replacementNode.append(c);
1110
1017
  });
1111
1018
  blockNode.replace(replacementNode);
@@ -1128,8 +1035,8 @@ const TOOLBAR_COMPONENTS = {
1128
1035
  return;
1129
1036
  }
1130
1037
  item.onSelect();
1131
- }, size: 'xs', children: [_jsx(SelectTrigger, { "aria-label": 'Block type', className: 'w-40', onMouseDown: preserveSel, children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { align: 'start', children: [_jsxs(SelectGroup, { children: [_jsx(SelectLabel, { children: "Block Type" }), opts.filter(o => o.group === 'type').map(({ value: v, label: l, icon: i }) => (_jsx(SelectItem, { value: v, icon: React.createElement(i, { className: ICON_CLASS }), children: l }, v)))] }), _jsx(SelectSeparator, {}), _jsxs(SelectGroup, { children: [_jsx(SelectLabel, { children: "Insert Block" }), opts
1132
- .filter(o => o.group === 'insert')
1038
+ }, size: "xs", children: [_jsx(SelectTrigger, { "aria-label": "Block type", className: "w-40", onMouseDown: preserveSel, children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { align: "start", children: [_jsxs(SelectGroup, { children: [_jsx(SelectLabel, { children: "Block Type" }), opts.filter(o => o.group === 'type').map(({ value: v, label: l, icon: i }) => (_jsx(SelectItem, { value: v, icon: React.createElement(i, { className: ICON_CLASS }), children: l }, v)))] }), _jsx(SelectSeparator, {}), _jsxs(SelectGroup, { children: [_jsx(SelectLabel, { children: "Insert Block" }), opts
1039
+ .filter((o) => o.group === 'insert')
1133
1040
  .map(({ value: v, label: l, icon: i }) => (_jsx(SelectItem, { value: v, icon: React.createElement(i, { className: ICON_CLASS }), children: l }, v)))] })] })] }));
1134
1041
  },
1135
1042
  /**
@@ -1148,7 +1055,10 @@ const TOOLBAR_COMPONENTS = {
1148
1055
  */
1149
1056
  Toolbar({ activeMode: aMode, editable, toolbar, blocks, adapter, docs = true, }) {
1150
1057
  // STATES
1151
- const toolbarCtx = { edit: useContext(EditStateCtx), attachmentFilter: useAtom($attachmentFilter) };
1058
+ const toolbarCtx = {
1059
+ edit: useContext(EditStateCtx),
1060
+ attachmentFilter: useAtom($attachmentFilter),
1061
+ };
1152
1062
  const mode = aMode ?? 'view';
1153
1063
  const [vers, setVers] = useState([]);
1154
1064
  const [verDialogOpen, setVerDialogOpen] = useState(false);
@@ -1166,7 +1076,11 @@ const TOOLBAR_COMPONENTS = {
1166
1076
  return;
1167
1077
  const { from, to } = view.state.selection.main;
1168
1078
  codeLength.current = view.state.doc.length;
1169
- codeSel.current = { code: { from: Math.min(from, to), to: Math.max(from, to) }, dom: null, visible: true };
1079
+ codeSel.current = {
1080
+ code: { from: Math.min(from, to), to: Math.max(from, to) },
1081
+ dom: null,
1082
+ visible: true,
1083
+ };
1170
1084
  codeAtEnd.current = false;
1171
1085
  };
1172
1086
  document.addEventListener('selectionchange', sync);
@@ -1245,7 +1159,7 @@ const TOOLBAR_COMPONENTS = {
1245
1159
  }
1246
1160
  }
1247
1161
  : undefined;
1248
- const selVer = vers.find(v => v.savedAt === selVerId);
1162
+ const selVer = vers.find((v) => v.savedAt === selVerId);
1249
1163
  useEffect(() => {
1250
1164
  if (verDialogOpen && !selVerId && vers[0])
1251
1165
  setSelVerId(vers[0].savedAt);
@@ -1282,7 +1196,12 @@ const TOOLBAR_COMPONENTS = {
1282
1196
  sourceTail: previewPack.markdown.slice(-120),
1283
1197
  }));
1284
1198
  if (toolbarCtx.edit.update)
1285
- toolbarCtx.edit.update({ content: previewPack.body, title: selVer?.title || '', description: selVer?.description || '', source: previewPack.markdown });
1199
+ toolbarCtx.edit.update({
1200
+ content: previewPack.body,
1201
+ title: selVer?.title || '',
1202
+ description: selVer?.description || '',
1203
+ source: previewPack.markdown,
1204
+ });
1286
1205
  const setCode = toolbarCtx.edit.setCode ?? toolbarCtx.edit.setSrc;
1287
1206
  if (setCode)
1288
1207
  setCode(previewPack.markdown);
@@ -1308,7 +1227,11 @@ const TOOLBAR_COMPONENTS = {
1308
1227
  * @param _type - Sanity field type associated with the value.
1309
1228
  * @param value - Field value being normalized for the toolbar.
1310
1229
  */
1311
- const jsonBlock = (_type, val) => ({ _key: crypto.randomUUID(), _type, ...val });
1230
+ const jsonBlock = (_type, val) => ({
1231
+ _key: crypto.randomUUID(),
1232
+ _type,
1233
+ ...val,
1234
+ });
1312
1235
  // SELECTION HANDLER
1313
1236
  /**
1314
1237
  * Safe sel.
@@ -1391,13 +1314,23 @@ const TOOLBAR_COMPONENTS = {
1391
1314
  */
1392
1315
  const insertionActions = {
1393
1316
  insertLocalCode: () => {
1394
- if (jsonCmd({ type: 'insert', block: jsonBlock('code', { language: 'text', value: 'Code...' }) }))
1317
+ if (jsonCmd({
1318
+ type: 'insert',
1319
+ block: jsonBlock('code', { language: 'text', value: 'Code...' }),
1320
+ }))
1395
1321
  return;
1396
1322
  insert?.(`\n\n<Code language="text">\n{\`\nCode...\n\`}\n</Code>\n\n`);
1397
1323
  },
1398
1324
  insertCode: (src, endpoint = '') => {
1399
- const code = src === 'received' ? `\n\n<Code language="json" source=${JSON.stringify(endpoint)} />\n\n` : '\n\n<Code language="text">\n{`\nCode...\n`}\n</Code>\n\n';
1400
- if (jsonCmd({ type: 'insert', block: jsonBlock('code', src === 'received' ? { language: 'json', source: endpoint, value: '' } : { language: 'text', value: 'Code...' }) }))
1325
+ const code = src === 'received'
1326
+ ? `\n\n<Code language="json" source=${JSON.stringify(endpoint)} />\n\n`
1327
+ : '\n\n<Code language="text">\n{`\nCode...\n`}\n</Code>\n\n';
1328
+ if (jsonCmd({
1329
+ type: 'insert',
1330
+ block: jsonBlock('code', src === 'received'
1331
+ ? { language: 'json', source: endpoint, value: '' }
1332
+ : { language: 'text', value: 'Code...' }),
1333
+ }))
1401
1334
  return;
1402
1335
  if (insert) {
1403
1336
  const srcLength = codeLength.current;
@@ -1408,7 +1341,9 @@ const TOOLBAR_COMPONENTS = {
1408
1341
  }
1409
1342
  const curr = toolbarCtx.edit?.code ?? toolbarCtx.edit?.source ?? '';
1410
1343
  const sel = codeSel.current?.code;
1411
- const range = codeAtEnd.current || !sel ? { from: curr.length, to: curr.length } : { from: Math.min(sel.from, curr.length), to: Math.min(sel.to, curr.length) };
1344
+ const range = codeAtEnd.current || !sel
1345
+ ? { from: curr.length, to: curr.length }
1346
+ : { from: Math.min(sel.from, curr.length), to: Math.min(sel.to, curr.length) };
1412
1347
  const n = `${curr.slice(0, range.from)}${code}${curr.slice(range.to)}`;
1413
1348
  toolbarCtx.edit?.update({ source: n });
1414
1349
  toolbarCtx.edit?.setCode(n);
@@ -1419,8 +1354,14 @@ const TOOLBAR_COMPONENTS = {
1419
1354
  }
1420
1355
  const view = codeViewOf();
1421
1356
  if (view) {
1422
- const range = codeAtEnd.current ? { from: view.state.doc.length, to: view.state.doc.length } : (codeSel.current?.code ?? view.state.selection.main);
1423
- view.dispatch({ changes: { from: range.from, insert: code, to: range.to }, scrollIntoView: true, selection: { anchor: range.from + code.length } });
1357
+ const range = codeAtEnd.current
1358
+ ? { from: view.state.doc.length, to: view.state.doc.length }
1359
+ : (codeSel.current?.code ?? view.state.selection.main);
1360
+ view.dispatch({
1361
+ changes: { from: range.from, insert: code, to: range.to },
1362
+ scrollIntoView: true,
1363
+ selection: { anchor: range.from + code.length },
1364
+ });
1424
1365
  view.focus();
1425
1366
  codeAtEnd.current = false;
1426
1367
  codeSel.current = null;
@@ -1462,78 +1403,106 @@ const TOOLBAR_COMPONENTS = {
1462
1403
  };
1463
1404
  }, [mode, onSave]);
1464
1405
  // RENDER
1465
- return (_jsx(ErrorBoundary, { name: 'Toolbar', children: _jsxs("div", { className: 'docs-toolbar-scroll not-prose pointer-events-auto sticky top-10 isolate z-50 -mx-3 -mt-5 mb-5 w-[calc(100%+1.5rem)] max-w-[calc(100%+1.5rem)] overflow-visible text-primary-12 print:hidden', "data-docs-toolbar-frame": true, "data-docs-toolbar-scroll": true, children: [_jsx("div", { "aria-hidden": 'true', className: 'docs-toolbar-backdrop pointer-events-none absolute -inset-x-4 -bottom-12 -top-16 z-0' }), _jsx("div", { className: 'relative z-10 rounded-lg border border-primary-6 bg-primary-3', children: _jsx(TooltipProvider, { children: _jsx("div", { className: 'mdxeditor-toolbar not-prose relative z-10 box-border flex w-full min-w-0 flex-wrap items-center justify-between gap-1.5 gap-x-3 px-2 py-1 text-primary-12 print:hidden', "data-docs-main-toolbar": true, children: mode === 'view' ? (docs && (_jsx(Mode, { editable: editable, mode: mode, disabled: !ready, onModeChange: v => {
1406
+ return (_jsx(ErrorBoundary, { name: "Toolbar", children: _jsxs("div", { className: "docs-toolbar-scroll not-prose pointer-events-auto sticky top-10 isolate z-50 -mx-3 -mt-5 mb-5 w-[calc(100%+1.5rem)] max-w-[calc(100%+1.5rem)] overflow-visible text-primary-12 print:hidden", "data-docs-toolbar-frame": true, "data-docs-toolbar-scroll": true, "data-can-edit": editable ? 'true' : 'false', children: [_jsx("div", { "aria-hidden": "true", className: "docs-toolbar-backdrop pointer-events-none absolute -inset-x-4 -bottom-12 -top-16 z-0" }), _jsx("div", { className: "relative z-10 rounded-lg border border-primary-6 bg-primary-3", children: _jsx(TooltipProvider, { children: _jsx("div", { className: "mdxeditor-toolbar not-prose relative z-10 box-border flex w-full min-w-0 flex-wrap items-center justify-between gap-1.5 gap-x-3 px-2 py-1 text-primary-12 print:hidden", "data-docs-main-toolbar": true, children: mode === 'view' ? (docs && (_jsx(Mode, { editable: editable, mode: mode, disabled: !ready, onModeChange: (v) => {
1466
1407
  if (!toolbar)
1467
1408
  return;
1468
- toolbar.setMode(v).catch(e => {
1409
+ toolbar.setMode(v).catch((e) => {
1469
1410
  console.error('[Toolbar:mode] change-failed', { mode: v, error: e });
1470
1411
  toast.error(e instanceof Error ? e.message : 'Failed to change mode.');
1471
1412
  clearTransition();
1472
1413
  });
1473
1414
  } }))) : mode === 'attachments' ? (
1474
1415
  // ATTACHMENT FILTERS
1475
- _jsxs(_Fragment, { children: [docs && (_jsx(Mode, { editable: editable, mode: mode, disabled: !ready, onModeChange: v => {
1416
+ _jsxs(_Fragment, { children: [docs && (_jsx(Mode, { editable: editable, mode: mode, disabled: !ready, onModeChange: (v) => {
1476
1417
  if (!toolbar)
1477
1418
  return;
1478
- toolbar.setMode(v).catch(e => {
1419
+ toolbar.setMode(v).catch((e) => {
1479
1420
  console.error('[Toolbar:mode] change-failed', { mode: v, error: e });
1480
1421
  toast.error(e instanceof Error ? e.message : 'Failed to change mode.');
1481
1422
  clearTransition();
1482
1423
  });
1483
- } })), _jsx(ToggleGroup, { type: 'multiple', value: [...toolbarCtx.attachmentFilter], onValueChange: v => {
1424
+ } })), _jsx(ToggleGroup, { type: "multiple", value: [...toolbarCtx.attachmentFilter], onValueChange: (v) => {
1484
1425
  if (v)
1485
1426
  $attachmentFilter.set(v);
1486
- }, className: 'ml-auto max-w-full flex-wrap justify-end', children: ATTCH_TYPES.map(f => (_jsx(ToggleGroupItem, { value: f, size: 'sm', className: 'h-6 px-2 text-xs capitalize', onMouseDown: preserveSel, children: f }, f))) })] })) : (_jsxs(_Fragment, { children: [_jsxs(ButtonGroup, { children: [_jsx(TOOLBAR_COMPONENTS.BlockType, { disabled: !ready, toolbar: toolbar, adapter: adapter, options: toolbarOpts.blocks, json: mode === 'edit' }), toolbarOpts.formats
1427
+ }, className: "ml-auto max-w-full flex-wrap justify-end", children: ATTCH_TYPES.map((f) => (_jsx(ToggleGroupItem, { value: f, size: "sm", className: "h-6 px-2 text-xs capitalize", onMouseDown: preserveSel, children: f }, f))) })] })) : (_jsxs(_Fragment, { children: [_jsxs(ButtonGroup, { children: [_jsx(TOOLBAR_COMPONENTS.BlockType, { disabled: !ready, toolbar: toolbar, adapter: adapter, options: toolbarOpts.blocks, json: mode === 'edit' }), toolbarOpts.formats
1487
1428
  .map(({ key: k, lbl: l, icon: i, shortcut: s, format: f }) => ({
1488
1429
  key: k,
1489
1430
  lbl: l,
1490
1431
  icon: i,
1491
1432
  shortcut: s,
1492
- onClick: () => jsonCmd({ type: 'decorator', decorator: k === 'strikethrough' ? 'strike-through' : k }) ||
1493
- (adapter?.format ? adapter.format(k === 'strikethrough' ? 'strike' : k) : insert?.(f(sSel('text', true)))),
1433
+ onClick: () => jsonCmd({
1434
+ type: 'decorator',
1435
+ decorator: k === 'strikethrough' ? 'strike-through' : k,
1436
+ }) ||
1437
+ (adapter?.format
1438
+ ? adapter.format(k === 'strikethrough'
1439
+ ? 'strike'
1440
+ : k)
1441
+ : insert?.(f(sSel('text', true)))),
1494
1442
  }))
1495
- .map(({ key: k, lbl: l, icon: i, shortcut: s, onClick: o }) => (_jsx(Button, { lbl: l, shortcut: s, disabled: !ready, onMouseDown: preserveSel, onClick: o, children: React.createElement(i) }, k))), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { lbl: 'Insert list', disabled: !ready, onMouseDown: preserveSel, children: _jsx(BulletListIcon, {}) }) }), _jsx(DropdownMenuContent, { align: 'start', children: [
1496
- { key: 'bullet', lbl: 'Bulleted list', icon: BulletListIcon, prefix: '\n- ', fallback: 'Item' },
1497
- { key: 'number', lbl: 'Numbered list', icon: NumberListIcon, prefix: '\n1. ', fallback: 'Item' },
1498
- { key: 'check', lbl: 'Checklist', icon: CheckListIcon, prefix: '\n- [ ] ', fallback: 'Task' },
1443
+ .map(({ key: k, lbl: l, icon: i, shortcut: s, onClick: o }) => (_jsx(Button, { lbl: l, shortcut: s, disabled: !ready, onMouseDown: preserveSel, onClick: o, children: React.createElement(i) }, k))), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { lbl: "Insert list", disabled: !ready, onMouseDown: preserveSel, children: _jsx(BulletListIcon, {}) }) }), _jsx(DropdownMenuContent, { align: "start", children: [
1444
+ {
1445
+ key: 'bullet',
1446
+ lbl: 'Bulleted list',
1447
+ icon: BulletListIcon,
1448
+ prefix: '\n- ',
1449
+ fallback: 'Item',
1450
+ },
1451
+ {
1452
+ key: 'number',
1453
+ lbl: 'Numbered list',
1454
+ icon: NumberListIcon,
1455
+ prefix: '\n1. ',
1456
+ fallback: 'Item',
1457
+ },
1458
+ {
1459
+ key: 'check',
1460
+ lbl: 'Checklist',
1461
+ icon: CheckListIcon,
1462
+ prefix: '\n- [ ] ',
1463
+ fallback: 'Task',
1464
+ },
1499
1465
  ]
1500
1466
  .map(({ key: k, lbl: l, icon: i, prefix: p, fallback: f }) => ({
1501
1467
  key: k,
1502
1468
  lbl: l,
1503
1469
  icon: i,
1504
1470
  onClick: () => jsonCmd({ type: 'list', list: k === 'check' ? 'bullet' : k }) ||
1505
- (adapter?.toggleList ? adapter.toggleList(k) : toolbar?.toggleList ? toolbar.toggleList(k) : insert?.(`${p}${sSel(f)}\n`)),
1471
+ (adapter?.toggleList
1472
+ ? adapter.toggleList(k)
1473
+ : toolbar?.toggleList
1474
+ ? toolbar.toggleList(k)
1475
+ : insert?.(`${p}${sSel(f)}\n`)),
1506
1476
  }))
1507
1477
  .map(({ key: k, lbl: l, icon: i, onClick: o }) => (_jsxs(DropdownMenuItem, { disabled: !ready, onSelect: () => {
1508
1478
  if (o)
1509
1479
  o();
1510
- }, className: MENU_GAP_CLASS, children: [React.createElement(i, { className: ICON_CLASS }), _jsx("span", { children: l })] }, k))) })] })] }), _jsxs("div", { className: 'flex items-center gap-1', children: [docs && (_jsx(Mode, { editable: editable, mode: mode, disabled: !ready, onModeChange: v => {
1480
+ }, className: MENU_GAP_CLASS, children: [React.createElement(i, { className: ICON_CLASS }), _jsx("span", { children: l })] }, k))) })] })] }), _jsxs("div", { className: "flex items-center gap-1", children: [docs && (_jsx(Mode, { editable: editable, mode: mode, disabled: !ready, onModeChange: (v) => {
1511
1481
  if (!editable || !toolbar)
1512
1482
  return;
1513
- toolbar.setMode(v).catch(e => {
1483
+ toolbar.setMode(v).catch((e) => {
1514
1484
  console.error('[Toolbar:mode] change-failed', { mode: v, error: e });
1515
1485
  toast.error(e instanceof Error ? e.message : 'Failed to change mode.');
1516
1486
  clearTransition();
1517
1487
  });
1518
- } })), _jsx(TextTooltip, { content: 'Find (\u2318F)', side: 'top', align: 'center', delayDuration: 400, children: docs && _jsx(TOOLBAR_COMPONENTS.FindReplace, { mode: mode, toolbar: toolbar }) }), _jsx(TOOLBAR_COMPONENTS.Undo, { onMouseDown: preserveSel, disabled: !ready, adapter: adapter }), docs && (_jsxs(_Fragment, { children: [_jsx(UiButton, { size: 'xs', variant: 'tonal', disabled: !ready || !dirty || saving !== null || (toolbar?.optimistic ?? false), onMouseDown: e => {
1488
+ } })), _jsx(TextTooltip, { content: "Find (\u2318F)", side: "top", align: "center", delayDuration: 400, children: docs && _jsx(FindReplace, { mode: mode, toolbar: toolbar }) }), _jsx(TOOLBAR_COMPONENTS.Undo, { onMouseDown: preserveSel, disabled: !ready, adapter: adapter }), docs && (_jsxs(_Fragment, { children: [_jsx(UiButton, { size: "xs", variant: "tonal", disabled: !ready || !dirty || saving !== null || (toolbar?.optimistic ?? false), onMouseDown: (e) => {
1519
1489
  e.preventDefault();
1520
- }, onClick: e => void toolbarActions.discard?.(e), children: "Discard" }), _jsxs(ButtonGroup, { children: [_jsx(TextTooltip, { content: 'Save (\u2318S)', side: 'top', align: 'center', delayDuration: 400, children: _jsx(UiButton, { size: 'xs', disabled: !ready || !dirty, loading: saving === 'saving', onMouseDown: e => {
1490
+ }, onClick: (e) => void toolbarActions.discard?.(e), children: "Discard" }), _jsxs(ButtonGroup, { children: [_jsx(TextTooltip, { content: "Save (\u2318S)", side: "top", align: "center", delayDuration: 400, children: _jsx(UiButton, { size: "xs", disabled: !ready || !dirty, loading: saving === 'saving', onMouseDown: (e) => {
1521
1491
  e.preventDefault();
1522
- }, onClick: e => void onSave?.(e), children: "Save" }) }), _jsx(TextTooltip, { content: 'Version History', side: 'top', align: 'center', delayDuration: 400, children: _jsx(UiButton, { size: 'xs', className: 'px-0.5', disabled: !ready, "aria-label": 'Version History', onMouseDown: e => {
1492
+ }, onClick: (e) => void onSave?.(e), children: "Save" }) }), _jsx(TextTooltip, { content: "Version History", side: "top", align: "center", delayDuration: 400, children: _jsx(UiButton, { size: "xs", className: "px-0.5", disabled: !ready, "aria-label": "Version History", onMouseDown: (e) => {
1523
1493
  e.preventDefault();
1524
1494
  }, onClick: () => {
1525
1495
  if (vers.length > 0 && !selVerId)
1526
1496
  setSelVerId(vers[0].savedAt);
1527
1497
  setVerDialogOpen(true);
1528
- }, children: _jsx(CaretDownIcon, {}) }) }), _jsx(Dialog, { open: verDialogOpen, onOpenChange: setVerDialogOpen, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Version History" }), _jsx(DialogDescription, { className: 'sr-only', children: "Select a version to preview and restore." }), _jsxs(Select, { value: selVerId, onValueChange: setSelVerId, children: [_jsx(SelectTrigger, { className: 'h-14', "aria-label": 'Select a version...', children: _jsx(SelectValue, { placeholder: 'Select a version...' }) }), _jsx(SelectContent, { children: vers.map(v => (_jsx(SelectItem, { value: v.savedAt, children: _jsxs("span", { className: 'flex flex-col text-left', children: [_jsxs("span", { children: [v.title, " (", new Date(v.savedAt).toLocaleString(), ")"] }), _jsx("span", { className: SECONDARY_TEXT_CLASS, children: v.description })] }) }, v.savedAt))) })] })] }), _jsx("div", { className: 'min-h-0 flex-1 overflow-y-auto', children: _jsx(CodeBlock, { tone: 'view', language: 'mdx', docsSource: true, code: previewPack.markdown.trim() || ' ' }) }), _jsxs(DialogFooter, { children: [_jsx(UiButton, { variant: 'ghost', onClick: () => { setVerDialogOpen(false); }, children: "Cancel" }), _jsx(UiButton, { disabled: !selVer, onClick: toolbarActions.restorePreview, children: "Restore" })] })] }) })] }), docs && publishDraft && (_jsx(UiButton, { size: 'xs', disabled: !ready || saving === 'saving', onMouseDown: e => e.preventDefault(), onClick: () => void publish(), children: "Publish" }))] }))] }), _jsxs("div", { className: 'flex items-center gap-0.5', children: [_jsx(TOOLBAR_COMPONENTS.Uploader, { icon: ImageIcon, insert: insert, onMouseDown: preserveSel, disabled: !ready, ctx: toolbar?.path }), _jsx(TOOLBAR_COMPONENTS.Custom, { onInsert: (_statement, v) => insert?.(v, true), onInsertMd: insert, onMouseDown: preserveSel, disabled: !ready, ctx: toolbar?.path })] }), _jsx(Dialog, { open: endpointOpen, onOpenChange: o => {
1498
+ }, children: _jsx(CaretDownIcon, {}) }) }), _jsx(Dialog, { open: verDialogOpen, onOpenChange: setVerDialogOpen, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Version History" }), _jsx(DialogDescription, { className: "sr-only", children: "Select a version to preview and restore." }), _jsxs(Select, { value: selVerId, onValueChange: setSelVerId, children: [_jsx(SelectTrigger, { className: "h-14", "aria-label": "Select a version...", children: _jsx(SelectValue, { placeholder: "Select a version..." }) }), _jsx(SelectContent, { children: vers.map((v) => (_jsx(SelectItem, { value: v.savedAt, children: _jsxs("span", { className: "flex flex-col text-left", children: [_jsxs("span", { children: [v.title, " (", new Date(v.savedAt).toLocaleString(), ")"] }), _jsx("span", { className: SECONDARY_TEXT_CLASS, children: v.description })] }) }, v.savedAt))) })] })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: _jsx(CodeBlock, { tone: "view", language: "mdx", docsSource: true, code: previewPack.markdown.trim() || ' ' }) }), _jsxs(DialogFooter, { children: [_jsx(UiButton, { variant: 'ghost', onClick: () => { setVerDialogOpen(false); }, children: "Cancel" }), _jsx(UiButton, { disabled: !selVer, onClick: toolbarActions.restorePreview, children: "Restore" })] })] }) })] }), docs && publishDraft && (_jsx(UiButton, { size: "xs", disabled: !ready || saving === 'saving', onMouseDown: (e) => e.preventDefault(), onClick: () => void publish(), children: "Publish" }))] }))] }), _jsxs("div", { className: "flex items-center gap-0.5", children: [_jsx(TOOLBAR_COMPONENTS.Uploader, { icon: ImageIcon, insert: insert, onMouseDown: preserveSel, disabled: !ready, ctx: toolbar?.path }), _jsx(TOOLBAR_COMPONENTS.Custom, { onInsert: (_statement, v) => insert?.(v, true), onInsertMd: insert, onMouseDown: preserveSel, disabled: !ready, ctx: toolbar?.path })] }), _jsx(Dialog, { open: endpointOpen, onOpenChange: (o) => {
1529
1499
  setEndpointOpen(o);
1530
1500
  if (!o)
1531
1501
  setEndpoint('');
1532
- }, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Receive value" }), _jsx(DialogDescription, { className: 'sr-only', children: "Enter an API endpoint to receive code value into the editor." })] }), _jsx(Label, { htmlFor: 'docs-received-code-endpoint', children: "API endpoint" }), _jsx(Input, { id: 'docs-received-code-endpoint', value: endpoint, onChange: e => {
1502
+ }, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Receive value" }), _jsx(DialogDescription, { className: "sr-only", children: "Enter an API endpoint to receive code value into the editor." })] }), _jsx(Label, { htmlFor: "docs-received-code-endpoint", children: "API endpoint" }), _jsx(Input, { id: "docs-received-code-endpoint", value: endpoint, onChange: (e) => {
1533
1503
  setEndpoint(e.target.value);
1534
- }, placeholder: '/api/docs?action=testimonials' }), _jsxs("div", { className: 'flex justify-end gap-2', children: [_jsx(UiButton, { variant: 'outline', onClick: () => { setEndpointOpen(false); }, children: "Cancel" }), _jsx(UiButton, { disabled: !endpoint.trim(), onClick: insertionActions.receiveCode, children: "Receive value" })] })] }) })] })) }) }) })] }) }));
1504
+ }, placeholder: "/api/docs?action=testimonials" }), _jsxs("div", { className: 'flex justify-end gap-2', children: [_jsx(UiButton, { variant: 'outline', onClick: () => { setEndpointOpen(false); }, children: "Cancel" }), _jsx(UiButton, { disabled: !endpoint.trim(), onClick: insertionActions.receiveCode, children: "Receive value" })] })] }) })] })) }) }) })] }) }));
1535
1505
  },
1536
1506
  };
1537
- export const { DocsToolbarActions } = TOOLBAR_COMPONENTS;
1538
- export const { Toolbar } = TOOLBAR_COMPONENTS;
1507
+ export const { DocsToolbarActions, Toolbar } = TOOLBAR_COMPONENTS;
1539
1508
  //# sourceMappingURL=_toolbar.js.map