bookish-press 0.4.1 → 0.4.16

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 (394) hide show
  1. package/README.md +3 -1
  2. package/components/Auth.svelte +19 -14
  3. package/components/Auth.svelte.d.ts +4 -4
  4. package/components/Authentication.d.ts +2 -2
  5. package/components/BookPreview.svelte +77 -59
  6. package/components/BookPreview.svelte.d.ts +5 -5
  7. package/components/External.svelte +1 -1
  8. package/components/External.svelte.d.ts +3 -3
  9. package/components/Link.svelte +49 -3
  10. package/components/Link.svelte.d.ts +3 -4
  11. package/components/app/BookList.svelte +19 -0
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/components/app/Button.svelte +49 -0
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/components/app/Feedback.svelte +45 -0
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/components/app/Head.svelte +12 -0
  18. package/components/app/Head.svelte.d.ts +27 -0
  19. package/components/app/Large.svelte +8 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/components/app/Lead.svelte +12 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/components/app/Link.svelte +24 -0
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/components/app/Options.svelte +24 -0
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/components/app/Paragraph.svelte +19 -0
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/components/app/Table.svelte +32 -0
  30. package/components/app/Table.svelte.d.ts +27 -0
  31. package/components/app/TextInput.svelte +37 -0
  32. package/components/app/TextInput.svelte.d.ts +22 -0
  33. package/components/app/Writing.svelte +13 -0
  34. package/components/app/Writing.svelte.d.ts +27 -0
  35. package/components/chapter/Atom.svelte +20 -6
  36. package/components/chapter/Atom.svelte.d.ts +3 -3
  37. package/components/chapter/Block.svelte +23 -20
  38. package/components/chapter/Block.svelte.d.ts +4 -4
  39. package/components/chapter/Callout.svelte +38 -7
  40. package/components/chapter/Callout.svelte.d.ts +4 -4
  41. package/components/chapter/CaptionedCode.svelte +66 -23
  42. package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
  43. package/components/chapter/ChapterBody.svelte +61 -9
  44. package/components/chapter/ChapterBody.svelte.d.ts +4 -4
  45. package/components/chapter/Citations.svelte +86 -20
  46. package/components/chapter/Citations.svelte.d.ts +4 -4
  47. package/components/chapter/Code.svelte +152 -21
  48. package/components/chapter/Code.svelte.d.ts +3 -3
  49. package/components/chapter/Comment.svelte +38 -16
  50. package/components/chapter/Comment.svelte.d.ts +3 -3
  51. package/components/chapter/Definition.svelte +52 -18
  52. package/components/chapter/Definition.svelte.d.ts +5 -8
  53. package/components/chapter/Embed.svelte +154 -66
  54. package/components/chapter/Embed.svelte.d.ts +5 -4
  55. package/components/chapter/ErrorMessage.svelte +7 -2
  56. package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/components/chapter/ExtendedPrism.js +69 -0
  59. package/components/chapter/Figure.svelte +90 -0
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/components/chapter/Footnote.svelte +75 -12
  62. package/components/chapter/Footnote.svelte.d.ts +4 -4
  63. package/components/chapter/Format.svelte +60 -37
  64. package/components/chapter/Format.svelte.d.ts +4 -4
  65. package/components/chapter/InlineCode.svelte +15 -5
  66. package/components/chapter/InlineCode.svelte.d.ts +4 -4
  67. package/components/chapter/Label.svelte +37 -8
  68. package/components/chapter/Label.svelte.d.ts +4 -4
  69. package/components/chapter/Link.svelte +23 -18
  70. package/components/chapter/Link.svelte.d.ts +4 -4
  71. package/components/chapter/List.svelte +75 -8
  72. package/components/chapter/List.svelte.d.ts +4 -4
  73. package/components/chapter/Marginal.svelte +169 -27
  74. package/components/chapter/Marginal.svelte.d.ts +6 -3
  75. package/components/chapter/Paragraph.svelte +74 -6
  76. package/components/chapter/Paragraph.svelte.d.ts +4 -4
  77. package/components/chapter/Positioned.svelte +33 -0
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/components/chapter/Problem.svelte +15 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +68 -21
  82. package/components/chapter/Python.svelte.d.ts +4 -4
  83. package/components/chapter/Quote.svelte +64 -11
  84. package/components/chapter/Quote.svelte.d.ts +4 -4
  85. package/components/chapter/Rule.svelte +12 -1
  86. package/components/chapter/Rule.svelte.d.ts +4 -4
  87. package/components/chapter/Table.svelte +36 -25
  88. package/components/chapter/Table.svelte.d.ts +4 -4
  89. package/components/chapter/Text.svelte +61 -36
  90. package/components/chapter/Text.svelte.d.ts +5 -4
  91. package/components/editor/BookishEditor.svelte +343 -237
  92. package/components/editor/BookishEditor.svelte.d.ts +5 -5
  93. package/components/editor/CalloutEditor.svelte +5 -5
  94. package/components/editor/CalloutEditor.svelte.d.ts +4 -4
  95. package/components/editor/CaptionedCodeEditor.svelte +16 -12
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
  97. package/components/editor/CaretContext.d.ts +48 -16
  98. package/components/editor/CaretState.d.ts +16 -44
  99. package/components/editor/CaretUtilities.d.ts +2 -2
  100. package/components/editor/CaretView.svelte +80 -0
  101. package/components/editor/CaretView.svelte.d.ts +24 -0
  102. package/components/editor/CitationsEditor.svelte +36 -25
  103. package/components/editor/CitationsEditor.svelte.d.ts +4 -4
  104. package/components/editor/Clipboard.d.ts +2 -2
  105. package/components/editor/Command.d.ts +13 -12
  106. package/components/editor/Commands.d.ts +1 -1
  107. package/components/editor/Commands.js +1114 -571
  108. package/components/editor/ConfirmButton.svelte +18 -12
  109. package/components/editor/ConfirmButton.svelte.d.ts +5 -4
  110. package/components/editor/DefinitionEditor.svelte +29 -21
  111. package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
  112. package/components/editor/EmbedEditor.svelte +93 -43
  113. package/components/editor/EmbedEditor.svelte.d.ts +3 -3
  114. package/components/editor/Icon.svelte +17 -0
  115. package/components/editor/Icon.svelte.d.ts +16 -0
  116. package/components/editor/ImageChooser.svelte +53 -34
  117. package/components/editor/ImageChooser.svelte.d.ts +3 -3
  118. package/components/editor/InlineCodeEditor.svelte +7 -4
  119. package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
  120. package/components/editor/LabelEditor.svelte +20 -11
  121. package/components/editor/LabelEditor.svelte.d.ts +4 -4
  122. package/components/editor/LanguageEditor.svelte +10 -7
  123. package/components/editor/LanguageEditor.svelte.d.ts +3 -3
  124. package/components/editor/LinkEditor.svelte +64 -39
  125. package/components/editor/LinkEditor.svelte.d.ts +4 -4
  126. package/components/editor/Note.svelte +3 -3
  127. package/components/editor/Note.svelte.d.ts +6 -2
  128. package/components/editor/PositionEditor.svelte +9 -6
  129. package/components/editor/PositionEditor.svelte.d.ts +4 -4
  130. package/components/editor/QuoteEditor.svelte +7 -2
  131. package/components/editor/QuoteEditor.svelte.d.ts +4 -4
  132. package/components/editor/Switch.svelte +55 -28
  133. package/components/editor/Switch.svelte.d.ts +4 -4
  134. package/components/editor/TableEditor.svelte +10 -0
  135. package/components/editor/TableEditor.svelte.d.ts +17 -0
  136. package/components/editor/TextEditor.svelte +83 -45
  137. package/components/editor/TextEditor.svelte.d.ts +5 -4
  138. package/components/editor/Toggle.svelte +11 -8
  139. package/components/editor/Toggle.svelte.d.ts +4 -4
  140. package/components/editor/Toolbar.svelte +192 -144
  141. package/components/editor/Toolbar.svelte.d.ts +5 -8
  142. package/components/editor/ToolbarGroup.svelte +18 -23
  143. package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
  144. package/components/editor/ToolbarSpacer.svelte +8 -1
  145. package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
  146. package/components/editor/URLEditor.svelte +6 -8
  147. package/components/editor/URLEditor.svelte.d.ts +3 -3
  148. package/components/editor/UndoState.d.ts +3 -3
  149. package/components/editor/icons/annotate.svg +1 -0
  150. package/components/editor/icons/block.svg +1 -0
  151. package/components/editor/icons/bold.svg +1 -0
  152. package/components/editor/icons/bullets.svg +1 -0
  153. package/components/editor/icons/callout.svg +1 -0
  154. package/components/editor/icons/citation.svg +8 -0
  155. package/components/editor/icons/clear.svg +1 -0
  156. package/components/editor/icons/clipboard.svg +1 -0
  157. package/components/editor/icons/code.svg +1 -0
  158. package/components/editor/icons/columnafter.svg +1 -0
  159. package/components/editor/icons/columnbefore.svg +1 -0
  160. package/components/editor/icons/comment.svg +1 -0
  161. package/components/editor/icons/copy.svg +1 -0
  162. package/components/editor/icons/cut.svg +1 -0
  163. package/components/editor/icons/define.svg +7 -0
  164. package/components/editor/icons/deletecolumn.svg +1 -0
  165. package/components/editor/icons/deleterow.svg +1 -0
  166. package/components/editor/icons/footnote.svg +8 -0
  167. package/components/editor/icons/header1.svg +7 -0
  168. package/components/editor/icons/header2.svg +7 -0
  169. package/components/editor/icons/header3.svg +7 -0
  170. package/components/editor/icons/home.svg +1 -0
  171. package/components/editor/icons/indent.svg +1 -0
  172. package/components/editor/icons/italic.svg +1 -0
  173. package/components/editor/icons/label.svg +1 -0
  174. package/components/editor/icons/left.svg +1 -0
  175. package/components/editor/icons/level.svg +1 -0
  176. package/components/editor/icons/link.svg +1 -0
  177. package/components/editor/icons/list.svg +1 -0
  178. package/components/editor/icons/media.svg +1 -0
  179. package/components/editor/icons/middle.svg +1 -0
  180. package/components/editor/icons/numbers.svg +10 -0
  181. package/components/editor/icons/paragraph.svg +1 -0
  182. package/components/editor/icons/paste.svg +10 -0
  183. package/components/editor/icons/quote.svg +1 -0
  184. package/components/editor/icons/redo.svg +1 -0
  185. package/components/editor/icons/right.svg +1 -0
  186. package/components/editor/icons/rowabove.svg +1 -0
  187. package/components/editor/icons/rowbelow.svg +1 -0
  188. package/components/editor/icons/rule.svg +1 -0
  189. package/components/editor/icons/sub.svg +1 -0
  190. package/components/editor/icons/super.svg +1 -0
  191. package/components/editor/icons/table.svg +1 -0
  192. package/components/editor/icons/text.svg +1 -0
  193. package/components/editor/icons/time.svg +1 -0
  194. package/components/editor/icons/undo.svg +1 -0
  195. package/components/editor/icons/unindent.svg +1 -0
  196. package/components/editor/icons/unlink.svg +1 -0
  197. package/components/page/Acknowledgements.svelte +31 -22
  198. package/components/page/Acknowledgements.svelte.d.ts +4 -4
  199. package/components/page/Authors.svelte +34 -14
  200. package/components/page/Authors.svelte.d.ts +6 -6
  201. package/components/page/BulkReferenceEditor.svelte +53 -22
  202. package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
  203. package/components/page/Chapter.svelte +196 -141
  204. package/components/page/Chapter.svelte.d.ts +3 -3
  205. package/components/page/ChapterContext.d.ts +4 -4
  206. package/components/page/ChapterNumber.svelte +9 -0
  207. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  208. package/components/page/ChapterTitle.svelte +16 -0
  209. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  210. package/components/page/Contexts.d.ts +31 -20
  211. package/components/page/Contexts.js +47 -17
  212. package/components/page/DefinitionView.svelte +115 -86
  213. package/components/page/DefinitionView.svelte.d.ts +3 -3
  214. package/components/page/Description.svelte +27 -18
  215. package/components/page/Description.svelte.d.ts +4 -4
  216. package/components/page/Edition.svelte +127 -75
  217. package/components/page/Edition.svelte.d.ts +4 -4
  218. package/components/page/Editions.svelte +144 -0
  219. package/components/page/Editions.svelte.d.ts +14 -0
  220. package/components/page/Glossary.svelte +57 -48
  221. package/components/page/Glossary.svelte.d.ts +4 -4
  222. package/components/page/Header.svelte +129 -44
  223. package/components/page/Header.svelte.d.ts +6 -6
  224. package/components/page/Index.svelte +114 -80
  225. package/components/page/Index.svelte.d.ts +4 -4
  226. package/components/page/Instructions.svelte +18 -16
  227. package/components/page/Instructions.svelte.d.ts +4 -4
  228. package/components/page/License.svelte +29 -21
  229. package/components/page/License.svelte.d.ts +4 -4
  230. package/components/page/Loading.svelte +102 -12
  231. package/components/page/Loading.svelte.d.ts +6 -2
  232. package/components/page/Media.svelte +77 -51
  233. package/components/page/Media.svelte.d.ts +4 -4
  234. package/components/page/MediaPreview.svelte +26 -8
  235. package/components/page/MediaPreview.svelte.d.ts +3 -3
  236. package/components/page/Muted.svelte +10 -0
  237. package/components/page/Muted.svelte.d.ts +27 -0
  238. package/components/page/Outline.svelte +279 -59
  239. package/components/page/Outline.svelte.d.ts +3 -3
  240. package/components/page/Page.svelte +40 -9
  241. package/components/page/Page.svelte.d.ts +3 -3
  242. package/components/page/PageHeader.svelte +14 -0
  243. package/components/page/PageHeader.svelte.d.ts +18 -0
  244. package/components/page/PageParagraph.svelte +18 -0
  245. package/components/page/PageParagraph.svelte.d.ts +27 -0
  246. package/components/page/PossibleChapter.svelte +7 -7
  247. package/components/page/PossibleChapter.svelte.d.ts +4 -4
  248. package/components/page/PossibleReference.svelte +6 -11
  249. package/components/page/PossibleReference.svelte.d.ts +6 -7
  250. package/components/page/Print.svelte +27 -3
  251. package/components/page/Print.svelte.d.ts +4 -4
  252. package/components/page/Reference.svelte +256 -113
  253. package/components/page/Reference.svelte.d.ts +5 -5
  254. package/components/page/References.svelte +39 -47
  255. package/components/page/References.svelte.d.ts +4 -4
  256. package/components/page/Rows.svelte +54 -0
  257. package/components/page/Rows.svelte.d.ts +27 -0
  258. package/components/page/Search.svelte +86 -63
  259. package/components/page/Search.svelte.d.ts +4 -4
  260. package/components/page/Status.svelte +43 -35
  261. package/components/page/Status.svelte.d.ts +4 -9
  262. package/components/page/SubdomainEditor.svelte +40 -27
  263. package/components/page/SubdomainEditor.svelte.d.ts +4 -4
  264. package/components/page/TableOfContents.svelte +225 -190
  265. package/components/page/TableOfContents.svelte.d.ts +4 -4
  266. package/components/page/TableOfContentsImage.svelte +8 -8
  267. package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
  268. package/components/page/TableOfContentsRow.svelte +96 -33
  269. package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
  270. package/components/page/ThemeEditor.svelte +174 -39
  271. package/components/page/ThemeEditor.svelte.d.ts +4 -4
  272. package/components/page/ThemeEditorPreview.svelte +35 -23
  273. package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
  274. package/components/page/ThemeSetEditor.svelte +15 -13
  275. package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
  276. package/components/page/ThemeVariableEditor.svelte +24 -15
  277. package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
  278. package/components/page/Title.svelte +12 -0
  279. package/components/page/Title.svelte.d.ts +27 -0
  280. package/components/page/Unknown.svelte +25 -21
  281. package/components/page/Unknown.svelte.d.ts +4 -4
  282. package/components/page/margins.js +50 -33
  283. package/index.d.ts +14 -0
  284. package/index.js +14 -0
  285. package/models/CRUD.d.ts +17 -0
  286. package/models/CRUD.js +194 -0
  287. package/models/Firebase.js +17 -15
  288. package/models/book/Book.d.ts +24 -28
  289. package/models/book/Book.js +120 -113
  290. package/models/book/BookMedia.d.ts +3 -3
  291. package/models/book/BookMedia.js +22 -16
  292. package/models/book/BookSaveStatus.d.ts +7 -0
  293. package/models/book/BookSaveStatus.js +8 -0
  294. package/models/book/Chapter.d.ts +46 -39
  295. package/models/book/Chapter.js +180 -198
  296. package/models/book/ChapterID.js +7 -7
  297. package/models/book/Definition.d.ts +1 -1
  298. package/models/book/Edition.d.ts +62 -60
  299. package/models/book/Edition.js +385 -303
  300. package/models/book/Reference.d.ts +24 -0
  301. package/models/book/Reference.js +78 -0
  302. package/models/book/Schema.d.ts +169 -0
  303. package/models/book/Schema.js +114 -0
  304. package/models/book/Theme.d.ts +44 -37
  305. package/models/book/Theme.js +452 -52
  306. package/models/book/ThemeColors.d.ts +1 -1
  307. package/models/book/Words.d.ts +2 -0
  308. package/models/book/Words.js +110 -0
  309. package/models/chapter/AtomNode.d.ts +4 -4
  310. package/models/chapter/AtomNode.js +20 -13
  311. package/models/chapter/BlockNode.d.ts +9 -10
  312. package/models/chapter/BlockNode.js +32 -13
  313. package/models/chapter/BlocksNode.d.ts +10 -10
  314. package/models/chapter/BlocksNode.js +315 -120
  315. package/models/chapter/BlocksNode.test.js +494 -228
  316. package/models/chapter/Bookkeeping.d.ts +1 -1
  317. package/models/chapter/CalloutNode.d.ts +3 -3
  318. package/models/chapter/CalloutNode.js +34 -12
  319. package/models/chapter/Caret.d.ts +9 -7
  320. package/models/chapter/Caret.js +11 -6
  321. package/models/chapter/ChapterNode.d.ts +11 -11
  322. package/models/chapter/ChapterNode.js +70 -33
  323. package/models/chapter/CitationsNode.d.ts +3 -3
  324. package/models/chapter/CitationsNode.js +31 -12
  325. package/models/chapter/CodeNode.d.ts +11 -6
  326. package/models/chapter/CodeNode.js +143 -34
  327. package/models/chapter/CommentNode.d.ts +5 -5
  328. package/models/chapter/CommentNode.js +29 -13
  329. package/models/chapter/DefinitionNode.d.ts +2 -2
  330. package/models/chapter/DefinitionNode.js +15 -7
  331. package/models/chapter/Edit.d.ts +3 -3
  332. package/models/chapter/EmbedNode.d.ts +9 -5
  333. package/models/chapter/EmbedNode.js +108 -35
  334. package/models/chapter/ErrorNode.d.ts +2 -2
  335. package/models/chapter/ErrorNode.js +34 -12
  336. package/models/chapter/FootnoteNode.d.ts +5 -5
  337. package/models/chapter/FootnoteNode.js +34 -16
  338. package/models/chapter/FormatNode.d.ts +10 -10
  339. package/models/chapter/FormatNode.js +237 -106
  340. package/models/chapter/FormatNode.test.js +87 -45
  341. package/models/chapter/InlineCodeNode.d.ts +2 -2
  342. package/models/chapter/InlineCodeNode.js +22 -9
  343. package/models/chapter/LabelNode.d.ts +4 -4
  344. package/models/chapter/LabelNode.js +31 -13
  345. package/models/chapter/LinkNode.d.ts +2 -2
  346. package/models/chapter/LinkNode.js +21 -9
  347. package/models/chapter/ListNode.d.ts +8 -8
  348. package/models/chapter/ListNode.js +99 -38
  349. package/models/chapter/ListNode.test.js +29 -24
  350. package/models/chapter/MetadataNode.d.ts +3 -3
  351. package/models/chapter/MetadataNode.js +13 -5
  352. package/models/chapter/Node.d.ts +5 -3
  353. package/models/chapter/Node.js +76 -29
  354. package/models/chapter/Node.test.js +20 -18
  355. package/models/chapter/ParagraphNode.d.ts +6 -6
  356. package/models/chapter/ParagraphNode.js +84 -29
  357. package/models/chapter/ParagraphNode.test.js +22 -13
  358. package/models/chapter/Parser.d.ts +25 -25
  359. package/models/chapter/Parser.js +201 -189
  360. package/models/chapter/Parser.test.js +16 -16
  361. package/models/chapter/Position.d.ts +1 -1
  362. package/models/chapter/QuoteNode.d.ts +6 -6
  363. package/models/chapter/QuoteNode.js +61 -23
  364. package/models/chapter/RootNode.d.ts +4 -4
  365. package/models/chapter/RuleNode.d.ts +2 -2
  366. package/models/chapter/RuleNode.js +31 -11
  367. package/models/chapter/TableNode.d.ts +8 -6
  368. package/models/chapter/TableNode.js +89 -34
  369. package/models/chapter/TableNode.test.js +22 -24
  370. package/models/chapter/TextNode.d.ts +6 -6
  371. package/models/chapter/TextNode.js +72 -32
  372. package/models/chapter/TextNode.test.js +4 -4
  373. package/models/loadEdition.d.ts +1 -1
  374. package/models/loadEdition.js +10 -6
  375. package/package.json +104 -25
  376. package/util/getSubdomain.js +8 -6
  377. package/util/isMobile.js +1 -1
  378. package/util/mineReference.d.ts +3 -2
  379. package/util/mineReference.js +67 -29
  380. package/util/scrollToEyeLevel.js +6 -1
  381. package/components/chapter/renderPosition.d.ts +0 -3
  382. package/components/chapter/renderPosition.js +0 -4
  383. package/components/editor/ToolbarIcon.svelte +0 -22
  384. package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
  385. package/components/page/Alert.svelte +0 -11
  386. package/components/page/Alert.svelte.d.ts +0 -23
  387. package/components/page/Revisions.svelte +0 -124
  388. package/components/page/Revisions.svelte.d.ts +0 -14
  389. package/models/BookLoader.d.ts +0 -2
  390. package/models/BookLoader.js +0 -67
  391. package/models/Firestore.d.ts +0 -22
  392. package/models/Firestore.js +0 -194
  393. package/models/chapter/ReferenceNode.d.ts +0 -29
  394. package/models/chapter/ReferenceNode.js +0 -48
@@ -1,4 +1,4 @@
1
- declare type Bookkeeping = {
1
+ type Bookkeeping = {
2
2
  symbols: Record<string, string>;
3
3
  };
4
4
  export default Bookkeeping;
@@ -1,6 +1,6 @@
1
- import BlocksNode from "./BlocksNode";
2
- import type BlockNode from "./BlockNode";
3
- import type Position from "./Position";
1
+ import BlocksNode from './BlocksNode';
2
+ import type BlockNode from './BlockNode';
3
+ import type Position from './Position';
4
4
  export default class CalloutNode extends BlocksNode {
5
5
  #private;
6
6
  constructor(elements: BlockNode[], position?: Position);
@@ -1,33 +1,55 @@
1
- import BlocksNode from "./BlocksNode";
1
+ import BlocksNode from './BlocksNode';
2
2
  export default class CalloutNode extends BlocksNode {
3
3
  #position;
4
- constructor(elements, position = "|") {
4
+ constructor(elements, position = '|') {
5
5
  super(elements);
6
6
  this.#position = position;
7
7
  }
8
- getType() { return "callout"; }
9
- getPosition() { return this.#position; }
8
+ getType() {
9
+ return 'callout';
10
+ }
11
+ getPosition() {
12
+ return this.#position;
13
+ }
10
14
  toText() {
11
- return this.getBlocks().map(element => element.toText()).join(" ");
15
+ return this.getBlocks()
16
+ .map((element) => element.toText())
17
+ .join(' ');
12
18
  }
13
19
  toHTML() {
14
20
  return `<hr/>${super.toHTML()}<hr/>`;
15
21
  }
16
22
  toBookdown() {
17
- return "=\n" + this.getBlocks().map(element => element.toBookdown()).join("\n\n") + "\n=" + (this.#position !== "|" ? this.#position : "");
23
+ return ('=\n' +
24
+ this.getBlocks()
25
+ .map((element) => element.toBookdown())
26
+ .join('\n\n') +
27
+ '\n=' +
28
+ (this.#position !== '|' ? this.#position : ''));
29
+ }
30
+ getChildren() {
31
+ return this.getBlocks();
18
32
  }
19
- getChildren() { return this.getBlocks(); }
20
33
  copy() {
21
- return new CalloutNode(this.getBlocks().map(e => e.copy()), this.#position);
34
+ return new CalloutNode(this.getBlocks().map((e) => e.copy()), this.#position);
35
+ }
36
+ withPosition(position) {
37
+ return new CalloutNode(this.getBlocks(), position);
22
38
  }
23
- withPosition(position) { return new CalloutNode(this.getBlocks(), position); }
24
39
  withChildReplaced(node, replacement) {
25
40
  const index = this.getBlocks().indexOf(node);
26
41
  if (index < 0)
27
42
  return;
28
- const blocks = replacement === undefined ?
29
- [...this.getBlocks().slice(0, index), ...this.getBlocks().slice(index + 1)] :
30
- [...this.getBlocks().slice(0, index), replacement, ...this.getBlocks().slice(index + 1)];
43
+ const blocks = replacement === undefined
44
+ ? [
45
+ ...this.getBlocks().slice(0, index),
46
+ ...this.getBlocks().slice(index + 1),
47
+ ]
48
+ : [
49
+ ...this.getBlocks().slice(0, index),
50
+ replacement,
51
+ ...this.getBlocks().slice(index + 1),
52
+ ];
31
53
  return new CalloutNode(blocks, this.#position);
32
54
  }
33
55
  create(blocks) {
@@ -1,16 +1,18 @@
1
- import type Node from "./Node";
2
- import AtomNode from "./AtomNode";
3
- import TextNode from "./TextNode";
4
- declare type Caret = {
5
- node: TextNode | AtomNode<any>;
1
+ import type Node from './Node';
2
+ import AtomNode from './AtomNode';
3
+ import TextNode from './TextNode';
4
+ import type EmbedNode from './EmbedNode';
5
+ export type SelectableNode = TextNode | AtomNode<any> | EmbedNode;
6
+ type Caret = {
7
+ node: SelectableNode;
6
8
  index: number;
7
9
  };
8
10
  export default Caret;
9
- export declare type CaretRange = {
11
+ export type CaretRange = {
10
12
  start: Caret;
11
13
  end: Caret;
12
14
  };
13
- export declare type IndexRange = {
15
+ export type IndexRange = {
14
16
  start: number;
15
17
  end: number;
16
18
  };
@@ -1,13 +1,17 @@
1
- import AtomNode from "./AtomNode";
2
- import TextNode from "./TextNode";
3
- import FormatNode from "./FormatNode";
1
+ import AtomNode from './AtomNode';
2
+ import TextNode from './TextNode';
3
+ import FormatNode from './FormatNode';
4
4
  export function getTextAndAtomNodes(node) {
5
- return node.getNodes().filter(n => n instanceof TextNode || n instanceof AtomNode);
5
+ return node
6
+ .getNodes()
7
+ .filter((n) => n instanceof TextNode || n instanceof AtomNode);
6
8
  }
7
9
  function getFormatRoots(node) {
8
10
  const roots = [];
9
11
  node.traverse((node, parents) => {
10
- if (node instanceof FormatNode && parents.length > 0 && !(parents[parents.length - 1] instanceof FormatNode))
12
+ if (node instanceof FormatNode &&
13
+ parents.length > 0 &&
14
+ !(parents[parents.length - 1] instanceof FormatNode))
11
15
  roots.push(node);
12
16
  });
13
17
  return roots;
@@ -39,7 +43,8 @@ export function indexToCaret(node, index) {
39
43
  const nodes = getTextAndAtomNodes(roots[n]);
40
44
  for (let i = 0; i < nodes.length; i++) {
41
45
  const t = nodes[i];
42
- if (index >= currentIndex && index <= currentIndex + t.getCaretPositionCount()) {
46
+ if (index >= currentIndex &&
47
+ index <= currentIndex + t.getCaretPositionCount()) {
43
48
  // Prefer empty nodes to enable zero width formats.
44
49
  if (i < nodes.length - 1) {
45
50
  const next = nodes[i + 1];
@@ -1,14 +1,14 @@
1
- import type Bookkeeping from "./Bookkeeping";
2
- import type BlockNode from "./BlockNode";
3
- import ErrorNode from "./ErrorNode";
4
- import type TextNode from "./TextNode";
5
- import FootnoteNode from "./FootnoteNode";
6
- import EmbedNode from "./EmbedNode";
7
- import ParagraphNode from "./ParagraphNode";
8
- import type AtomNode from "./AtomNode";
9
- import LabelNode from "./LabelNode";
10
- import CommentNode from "./CommentNode";
11
- import BlocksNode from "./BlocksNode";
1
+ import type Bookkeeping from './Bookkeeping';
2
+ import type BlockNode from './BlockNode';
3
+ import ErrorNode from './ErrorNode';
4
+ import type TextNode from './TextNode';
5
+ import FootnoteNode from './FootnoteNode';
6
+ import EmbedNode from './EmbedNode';
7
+ import ParagraphNode from './ParagraphNode';
8
+ import type AtomNode from './AtomNode';
9
+ import LabelNode from './LabelNode';
10
+ import CommentNode from './CommentNode';
11
+ import BlocksNode from './BlocksNode';
12
12
  export default class ChapterNode extends BlocksNode {
13
13
  #private;
14
14
  constructor(blocks: BlockNode[], metadata?: Bookkeeping);
@@ -1,11 +1,11 @@
1
- import ErrorNode from "./ErrorNode";
2
- import FootnoteNode from "./FootnoteNode";
3
- import EmbedNode from "./EmbedNode";
4
- import ParagraphNode from "./ParagraphNode";
5
- import CitationsNode from "./CitationsNode";
6
- import LabelNode from "./LabelNode";
7
- import CommentNode from "./CommentNode";
8
- import BlocksNode from "./BlocksNode";
1
+ import ErrorNode from './ErrorNode';
2
+ import FootnoteNode from './FootnoteNode';
3
+ import EmbedNode from './EmbedNode';
4
+ import ParagraphNode from './ParagraphNode';
5
+ import CitationsNode from './CitationsNode';
6
+ import LabelNode from './LabelNode';
7
+ import CommentNode from './CommentNode';
8
+ import BlocksNode from './BlocksNode';
9
9
  export default class ChapterNode extends BlocksNode {
10
10
  #metadata;
11
11
  constructor(blocks, metadata) {
@@ -13,68 +13,105 @@ export default class ChapterNode extends BlocksNode {
13
13
  // Content extracted during parsing.
14
14
  this.#metadata = metadata === undefined ? { symbols: {} } : metadata;
15
15
  }
16
- getType() { return "chapter"; }
17
- getChapter() { return this; }
16
+ getType() {
17
+ return 'chapter';
18
+ }
19
+ getChapter() {
20
+ return this;
21
+ }
18
22
  create(blocks) {
19
23
  return new ChapterNode(blocks, this.#metadata);
20
24
  }
21
- getErrors() { return this.getNodes().filter(n => n instanceof ErrorNode); }
25
+ getErrors() {
26
+ return this.getNodes().filter((n) => n instanceof ErrorNode);
27
+ }
22
28
  getCitations() {
23
29
  const citations = new Set();
24
- this.getNodes().filter(n => n instanceof CitationsNode).forEach(cites => cites.getMeta().forEach(citationID => citations.add(citationID)));
30
+ this.getNodes().filter((n) => n instanceof CitationsNode).forEach((cites) => cites.getMeta().forEach((citationID) => citations.add(citationID)));
25
31
  return citations;
26
32
  }
27
- getFootnotes() { return this.getNodes().filter(n => n instanceof FootnoteNode); }
28
- getHeaders() { return this.getNodes().filter(n => n instanceof ParagraphNode && n.getLevel() > 0); }
29
- getEmbeds() { return this.getNodes().filter(n => n instanceof EmbedNode); }
30
- getComments() { return this.getNodes().filter(n => n instanceof CommentNode); }
33
+ getFootnotes() {
34
+ return this.getNodes().filter((n) => n instanceof FootnoteNode);
35
+ }
36
+ getHeaders() {
37
+ return this.getNodes().filter((n) => n instanceof ParagraphNode && n.getLevel() > 0);
38
+ }
39
+ getEmbeds() {
40
+ return this.getNodes().filter((n) => n instanceof EmbedNode);
41
+ }
42
+ getComments() {
43
+ return this.getNodes().filter((n) => n instanceof CommentNode);
44
+ }
31
45
  getLabels() {
32
- return this.getNodes().filter(n => n instanceof LabelNode);
46
+ return this.getNodes().filter((n) => n instanceof LabelNode);
33
47
  }
34
48
  hasLabel(labelID) {
35
- return this.getLabels().find(label => label.getMeta() === labelID) !== undefined;
49
+ return (this.getLabels().find((label) => label.getMeta() === labelID) !==
50
+ undefined);
36
51
  }
37
52
  getCitationNumber(citationID) {
38
- const index = Array.from(this.getCitations()).sort().indexOf(citationID);
53
+ const index = Array.from(this.getCitations())
54
+ .sort()
55
+ .indexOf(citationID);
39
56
  return index < 0 ? null : index + 1;
40
57
  }
41
58
  toText() {
42
- return this.getBlocks().map(block => block.toText()).join(" ");
59
+ return this.getBlocks()
60
+ .map((block) => block.toText())
61
+ .join(' ');
43
62
  }
44
63
  toBookdown() {
45
64
  // Render the symbols then all the blocks
46
- return Object.keys(this.#metadata.symbols).sort().map(name => `@${name}: ${this.#metadata.symbols[name]}\n\n`).join("") +
47
- this.getBlocks().map(b => b.toBookdown()).join("\n\n");
65
+ return (Object.keys(this.#metadata.symbols)
66
+ .sort()
67
+ .map((name) => `@${name}: ${this.#metadata.symbols[name]}\n\n`)
68
+ .join('') +
69
+ this.getBlocks()
70
+ .map((b) => b.toBookdown())
71
+ .join('\n\n'));
48
72
  }
49
73
  getNextTextOrAtom(node) {
50
74
  // Otherwise, find the next text node after this one.
51
75
  const nodes = this.getTextAndAtomNodes();
52
76
  const index = nodes.indexOf(node);
53
- return index === undefined ? undefined :
54
- index < nodes.length - 1 ? nodes[index + 1] :
55
- undefined;
77
+ return index === undefined
78
+ ? undefined
79
+ : index < nodes.length - 1
80
+ ? nodes[index + 1]
81
+ : undefined;
56
82
  }
57
83
  getPreviousTextOrAtom(node) {
58
84
  // Otherwise, find the next text node after this one.
59
85
  const nodes = this.getTextAndAtomNodes();
60
86
  const index = nodes.indexOf(node);
61
- return index === undefined ? undefined :
62
- index > 0 ? nodes[index - 1] :
63
- undefined;
87
+ return index === undefined
88
+ ? undefined
89
+ : index > 0
90
+ ? nodes[index - 1]
91
+ : undefined;
92
+ }
93
+ getChildren() {
94
+ return this.getBlocks();
64
95
  }
65
- getChildren() { return this.getBlocks(); }
66
96
  withChildReplaced(node, replacement) {
67
97
  const index = this.getBlocks().indexOf(node);
68
98
  /// If we couldn't find the requested node, don't change anything.
69
99
  if (index < 0)
70
100
  return undefined;
71
101
  // Make a new blocks node, assigning and re-parenting the replacement.
72
- const blocks = replacement === undefined ?
73
- [...this.getBlocks().slice(0, index), ...this.getBlocks().slice(index + 1)] :
74
- [...this.getBlocks().slice(0, index), replacement, ...this.getBlocks().slice(index + 1)];
102
+ const blocks = replacement === undefined
103
+ ? [
104
+ ...this.getBlocks().slice(0, index),
105
+ ...this.getBlocks().slice(index + 1),
106
+ ]
107
+ : [
108
+ ...this.getBlocks().slice(0, index),
109
+ replacement,
110
+ ...this.getBlocks().slice(index + 1),
111
+ ];
75
112
  return new ChapterNode(blocks, this.#metadata);
76
113
  }
77
114
  copy() {
78
- return new ChapterNode(this.getBlocks().map(b => b.copy()), this.#metadata);
115
+ return new ChapterNode(this.getBlocks().map((b) => b.copy()), this.#metadata);
79
116
  }
80
117
  }
@@ -1,6 +1,6 @@
1
- import AtomNode from "./AtomNode";
2
- import type Caret from "./Caret";
3
- import type Node from "./Node";
1
+ import AtomNode from './AtomNode';
2
+ import type Caret from './Caret';
3
+ import type Node from './Node';
4
4
  export default class CitationsNode extends AtomNode<string[]> {
5
5
  constructor(citations: string[]);
6
6
  getType(): string;
@@ -1,17 +1,36 @@
1
- import AtomNode from "./AtomNode";
1
+ import AtomNode from './AtomNode';
2
2
  export default class CitationsNode extends AtomNode {
3
3
  constructor(citations) {
4
4
  super(citations);
5
5
  }
6
- getType() { return "citations"; }
7
- getDefaultCaret() { return { node: this, index: 0 }; }
8
- ;
9
- toText() { return ""; }
10
- toBookdown() { return `<${this.getMeta().join(",")}>`; }
11
- toHTML() { return `(${this.getMeta().join(",")})`; }
12
- getParentOf() { return undefined; }
13
- copy() { return new CitationsNode([...this.getMeta()]); }
14
- withMeta(citations) { return new CitationsNode(citations); }
15
- withChildReplaced() { return undefined; }
16
- withContentInRange() { return this.copy(); }
6
+ getType() {
7
+ return 'citations';
8
+ }
9
+ getDefaultCaret() {
10
+ return { node: this, index: 0 };
11
+ }
12
+ toText() {
13
+ return '';
14
+ }
15
+ toBookdown() {
16
+ return `<${this.getMeta().join(',')}>`;
17
+ }
18
+ toHTML() {
19
+ return `(${this.getMeta().join(',')})`;
20
+ }
21
+ getParentOf() {
22
+ return undefined;
23
+ }
24
+ copy() {
25
+ return new CitationsNode([...this.getMeta()]);
26
+ }
27
+ withMeta(citations) {
28
+ return new CitationsNode(citations);
29
+ }
30
+ withChildReplaced() {
31
+ return undefined;
32
+ }
33
+ withContentInRange() {
34
+ return this.copy();
35
+ }
17
36
  }
@@ -1,9 +1,11 @@
1
- import type Node from "./Node";
2
- import type Position from "./Position";
3
- import FormatNode from "./FormatNode";
4
- import TextNode from "./TextNode";
5
- import BlockNode from "./BlockNode";
6
- import type { CaretRange } from "./Caret";
1
+ import type Node from './Node';
2
+ import type Position from './Position';
3
+ import FormatNode, { type Format } from './FormatNode';
4
+ import TextNode from './TextNode';
5
+ import BlockNode from './BlockNode';
6
+ import type { CaretRange } from './Caret';
7
+ import type Edit from './Edit';
8
+ import type Caret from './Caret';
7
9
  export default class CodeNode extends BlockNode {
8
10
  #private;
9
11
  constructor(code: TextNode, language: string, position: Position, caption?: FormatNode);
@@ -27,4 +29,7 @@ export default class CodeNode extends BlockNode {
27
29
  withExecutable(executable: boolean): CodeNode;
28
30
  withCaption(caption: FormatNode): CodeNode;
29
31
  withContentInRange(range: CaretRange): this | undefined;
32
+ /** Overrides super, special casing TextNode, since super only handles formats. */
33
+ withRangeFormatted(range: CaretRange, format: Format | undefined): Edit;
34
+ withNodeInserted(caret: Caret, node: Node): Edit;
30
35
  }
@@ -1,6 +1,6 @@
1
- import FormatNode from "./FormatNode";
2
- import TextNode from "./TextNode";
3
- import BlockNode from "./BlockNode";
1
+ import FormatNode, {} from './FormatNode';
2
+ import TextNode from './TextNode';
3
+ import BlockNode from './BlockNode';
4
4
  export default class CodeNode extends BlockNode {
5
5
  #code;
6
6
  #caption;
@@ -9,56 +9,165 @@ export default class CodeNode extends BlockNode {
9
9
  #executable;
10
10
  constructor(code, language, position, caption) {
11
11
  super();
12
- const executable = language.charAt(language.length - 1) === "!";
12
+ const executable = language.charAt(language.length - 1) === '!';
13
13
  this.#code = code;
14
14
  this.#position = position;
15
15
  this.#language = executable ? language.slice(0, -1) : language;
16
16
  this.#executable = executable;
17
- this.#caption = caption === undefined ? new FormatNode("", [new TextNode()]) : caption.withTextIfEmpty();
18
- }
19
- getType() { return "code"; }
20
- getCodeNode() { return this.#code; }
21
- getCode() { return this.#code.getText(); }
22
- getCaption() { return this.#caption; }
23
- getPosition() { return this.#position; }
24
- getLanguage() { return this.#language; }
25
- isExecutable() { return this.#executable; }
26
- getFormats() { return [this.#caption]; }
27
- toText() { return ""; }
28
- toHTML() { return `<pre><code>${this.#code.toHTML()}</code><pre><center>${this.#caption.toHTML()}</center>`; }
17
+ this.#caption =
18
+ caption === undefined
19
+ ? new FormatNode('', [new TextNode()])
20
+ : caption.withTextIfEmpty();
21
+ }
22
+ getType() {
23
+ return 'code';
24
+ }
25
+ getCodeNode() {
26
+ return this.#code;
27
+ }
28
+ getCode() {
29
+ return this.#code.getText();
30
+ }
31
+ getCaption() {
32
+ return this.#caption;
33
+ }
34
+ getPosition() {
35
+ return this.#position;
36
+ }
37
+ getLanguage() {
38
+ return this.#language;
39
+ }
40
+ isExecutable() {
41
+ return this.#executable;
42
+ }
43
+ getFormats() {
44
+ return [this.#caption];
45
+ }
46
+ toText() {
47
+ return '';
48
+ }
49
+ toHTML() {
50
+ return `<pre><code>${this.#code.toHTML()}</code><pre><center>${this.#caption.toHTML()}</center>`;
51
+ }
29
52
  toBookdown() {
30
53
  // Remember to escape any back ticks.
31
- return "`" +
32
- (this.#language !== "plaintext" ? this.#language : "") +
33
- "\n" +
54
+ return ('`' +
55
+ (this.#language !== 'plaintext' ? this.#language : '') +
56
+ (this.#executable ? '!' : '') +
57
+ '\n' +
34
58
  this.#code.getText().replace(/`/g, '\\`') +
35
- "\n`" +
36
- (this.#position !== "|" ? this.#position : "") +
37
- this.#caption.toBookdown();
59
+ '\n`' +
60
+ (this.#position !== '|' ? this.#position : '') +
61
+ this.#caption.toBookdown());
62
+ }
63
+ getChildren() {
64
+ return [this.#code, this.#caption];
38
65
  }
39
- getChildren() { return [this.#code, this.#caption]; }
40
66
  copy() {
41
67
  return new CodeNode(this.#code.copy(), this.#language, this.#position, this.#caption.copy());
42
68
  }
43
69
  getParentOf(node) {
44
- return node == this.#code || node === this.#caption ? this : this.#caption.getParentOf(node);
70
+ return node == this.#code || node === this.#caption
71
+ ? this
72
+ : this.#caption.getParentOf(node);
45
73
  }
46
74
  withChildReplaced(node, replacement) {
47
- const newCode = node === this.#code && replacement instanceof TextNode ? replacement : undefined;
48
- const newCaption = node === this.#caption && (replacement instanceof FormatNode || replacement === undefined) ? replacement : undefined;
49
- return newCode || newCaption ? new CodeNode(newCode ? newCode : this.#code, this.#language, this.#position, newCaption ? newCaption : this.#caption) : undefined;
50
- }
51
- withPosition(position) { return new CodeNode(this.#code, this.#language, position, this.#caption); }
52
- withLanguage(language) { return new CodeNode(this.#code, language, this.#position, this.#caption); }
53
- withExecutable(executable) { return new CodeNode(this.#code, executable ? this.#language + "!" : this.#language, this.#position, this.#caption); }
54
- withCaption(caption) { return new CodeNode(this.#code, this.#language, this.#position, caption); }
75
+ const newCode = node === this.#code && replacement instanceof TextNode
76
+ ? replacement
77
+ : undefined;
78
+ const newCaption = node === this.#caption &&
79
+ (replacement instanceof FormatNode || replacement === undefined)
80
+ ? replacement
81
+ : undefined;
82
+ return newCode || newCaption
83
+ ? new CodeNode(newCode ? newCode : this.#code, this.#language, this.#position, newCaption ? newCaption : this.#caption)
84
+ : undefined;
85
+ }
86
+ withPosition(position) {
87
+ return new CodeNode(this.#code, this.#language, position, this.#caption);
88
+ }
89
+ withLanguage(language) {
90
+ return new CodeNode(this.#code, language, this.#position, this.#caption);
91
+ }
92
+ withExecutable(executable) {
93
+ return new CodeNode(this.#code, executable ? this.#language + '!' : this.#language, this.#position, this.#caption);
94
+ }
95
+ withCaption(caption) {
96
+ return new CodeNode(this.#code, this.#language, this.#position, caption);
97
+ }
55
98
  withContentInRange(range) {
56
99
  if (!this.contains(range.start.node) && !this.contains(range.end.node))
57
100
  return this.copy();
58
- const newCode = this.#caption.contains(range.start.node) ? new TextNode() : this.#code.withContentInRange(range);
59
- const newCaption = range.end.node === this.#code ? new FormatNode("", [new TextNode()]) : this.#caption.withContentInRange(range);
101
+ const newCode = this.#caption.contains(range.start.node)
102
+ ? new TextNode()
103
+ : this.#code.withContentInRange(range);
104
+ const newCaption = range.end.node === this.#code
105
+ ? new FormatNode('', [new TextNode()])
106
+ : this.#caption.withContentInRange(range);
60
107
  if (newCode === undefined || newCaption === undefined)
61
108
  return;
62
109
  return new CodeNode(newCode, this.#language, this.#position, newCaption);
63
110
  }
111
+ /** Overrides super, special casing TextNode, since super only handles formats. */
112
+ withRangeFormatted(range, format) {
113
+ let editedNode = this;
114
+ // First, handle the caption, if necessary.
115
+ let captionEdit = super.withRangeFormatted(range, format);
116
+ // If we're asking for format, skip it, code can't be formatted. Just return the caption edit.
117
+ if (format !== undefined)
118
+ return captionEdit;
119
+ // Grab the new CodeNode if the caption was edited.
120
+ if (captionEdit)
121
+ editedNode = captionEdit.root;
122
+ // Next, see if part of the range included this text node.
123
+ const sortedRange = this.sortRange(range);
124
+ const containsStart = sortedRange.start.node === this.#code;
125
+ const containsEnd = sortedRange.end.node === this.#code;
126
+ if (containsStart) {
127
+ const revisedCode = this.#code.withoutRange({
128
+ start: { node: this.#code, index: sortedRange.start.index },
129
+ end: {
130
+ node: this.#code,
131
+ index: containsEnd
132
+ ? sortedRange.end.index
133
+ : this.#code.getLength(),
134
+ },
135
+ });
136
+ if (revisedCode === undefined)
137
+ return;
138
+ editedNode = editedNode.withChildReplaced(this.#code, revisedCode);
139
+ if (editedNode === undefined)
140
+ return;
141
+ const revisedCaret = {
142
+ node: revisedCode,
143
+ index: sortedRange.start.index,
144
+ };
145
+ return {
146
+ root: editedNode,
147
+ range: { start: revisedCaret, end: revisedCaret },
148
+ };
149
+ }
150
+ else {
151
+ return captionEdit;
152
+ }
153
+ }
154
+ withNodeInserted(caret, node) {
155
+ // Only insert if the caret is in the code node.
156
+ if (caret.node !== this.#code)
157
+ return undefined;
158
+ // Convert the node to text, then insert it at the position.
159
+ const text = node
160
+ .getNodes()
161
+ .filter((n) => n instanceof TextNode)
162
+ .map((t) => t.getText())
163
+ .join('');
164
+ const newCode = this.#code.withCharacterAt(text, caret.index);
165
+ if (newCode === undefined)
166
+ return undefined;
167
+ const newNode = this.withChildReplaced(this.#code, newCode);
168
+ if (newNode === undefined)
169
+ return;
170
+ const newCaret = { node: newCode, index: caret.index + text.length };
171
+ return { root: newNode, range: { start: newCaret, end: newCaret } };
172
+ }
64
173
  }
@@ -1,8 +1,8 @@
1
- import AtomNode from "./AtomNode";
2
- import type Caret from "./Caret";
3
- import type { CaretRange } from "./Caret";
4
- import FormatNode from "./FormatNode";
5
- import type Node from "./Node";
1
+ import AtomNode from './AtomNode';
2
+ import type Caret from './Caret';
3
+ import type { CaretRange } from './Caret';
4
+ import FormatNode from './FormatNode';
5
+ import type Node from './Node';
6
6
  export default class CommentNode extends AtomNode<FormatNode> {
7
7
  constructor(comment: FormatNode);
8
8
  getType(): string;