bookish-press 0.4.47 → 0.4.49

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 (533) hide show
  1. package/components/Auth.svelte +55 -0
  2. package/components/Auth.svelte.d.ts +16 -0
  3. package/{src/lib/components/Authentication.ts → components/Authentication.d.ts} +0 -2
  4. package/components/Authentication.js +1 -0
  5. package/{src/lib/components → components}/BookPreview.svelte +22 -27
  6. package/components/BookPreview.svelte.d.ts +18 -0
  7. package/{src/lib/components → components}/External.svelte +1 -2
  8. package/components/External.svelte.d.ts +18 -0
  9. package/components/Link.svelte +51 -0
  10. package/components/Link.svelte.d.ts +18 -0
  11. package/{src/lib/components → components}/app/BookList.svelte +3 -6
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/{src/lib/components → components}/app/Button.svelte +4 -5
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/{src/lib/components → components}/app/Feedback.svelte +7 -11
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/{src/lib/components → components}/app/Head.svelte +1 -2
  18. package/components/app/Head.svelte.d.ts +18 -0
  19. package/{src/lib/components → components}/app/Large.svelte +0 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/{src/lib/components → components}/app/Lead.svelte +0 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/{src/lib/components → components}/app/Link.svelte +3 -4
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/{src/lib/components → components}/app/Options.svelte +4 -5
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/{src/lib/components → components}/app/Paragraph.svelte +1 -2
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/{src/lib/components → components}/app/Section.svelte +0 -0
  30. package/components/app/Section.svelte.d.ts +27 -0
  31. package/{src/lib/components → components}/app/Table.svelte +0 -0
  32. package/components/app/Table.svelte.d.ts +27 -0
  33. package/{src/lib/components → components}/app/TextInput.svelte +9 -12
  34. package/components/app/TextInput.svelte.d.ts +22 -0
  35. package/{src/lib/components → components}/chapter/Atom.svelte +12 -18
  36. package/components/chapter/Atom.svelte.d.ts +19 -0
  37. package/components/chapter/Block.svelte +37 -0
  38. package/components/chapter/Block.svelte.d.ts +17 -0
  39. package/{src/lib/components → components}/chapter/Callout.svelte +3 -6
  40. package/components/chapter/Callout.svelte.d.ts +17 -0
  41. package/{src/lib/components → components}/chapter/CaptionedCode.svelte +13 -21
  42. package/components/chapter/CaptionedCode.svelte.d.ts +17 -0
  43. package/{src/lib/components → components}/chapter/ChapterBody.svelte +9 -13
  44. package/components/chapter/ChapterBody.svelte.d.ts +19 -0
  45. package/{src/lib/components → components}/chapter/Citations.svelte +33 -34
  46. package/components/chapter/Citations.svelte.d.ts +17 -0
  47. package/{src/lib/components → components}/chapter/Code.svelte +60 -64
  48. package/components/chapter/Code.svelte.d.ts +22 -0
  49. package/{src/lib/components → components}/chapter/Comment.svelte +18 -30
  50. package/components/chapter/Comment.svelte.d.ts +17 -0
  51. package/{src/lib/components → components}/chapter/Definition.svelte +17 -23
  52. package/components/chapter/Definition.svelte.d.ts +17 -0
  53. package/{src/lib/components → components}/chapter/Embed.svelte +77 -97
  54. package/components/chapter/Embed.svelte.d.ts +20 -0
  55. package/components/chapter/ErrorMessage.svelte +9 -0
  56. package/components/chapter/ErrorMessage.svelte.d.ts +17 -0
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/{src/lib/components → components}/chapter/ExtendedPrism.js +0 -0
  59. package/{src/lib/components → components}/chapter/Figure.svelte +26 -34
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/{src/lib/components → components}/chapter/Footnote.svelte +20 -32
  62. package/components/chapter/Footnote.svelte.d.ts +19 -0
  63. package/{src/lib/components → components}/chapter/Format.svelte +34 -39
  64. package/components/chapter/Format.svelte.d.ts +19 -0
  65. package/{src/lib/components → components}/chapter/InlineCode.svelte +5 -9
  66. package/components/chapter/InlineCode.svelte.d.ts +17 -0
  67. package/{src/lib/components → components}/chapter/Label.svelte +14 -23
  68. package/components/chapter/Label.svelte.d.ts +17 -0
  69. package/{src/lib/components → components}/chapter/Link.svelte +21 -27
  70. package/components/chapter/Link.svelte.d.ts +17 -0
  71. package/{src/lib/components → components}/chapter/List.svelte +3 -5
  72. package/components/chapter/List.svelte.d.ts +17 -0
  73. package/{src/lib/components → components}/chapter/Marginal.svelte +41 -54
  74. package/components/chapter/Marginal.svelte.d.ts +22 -0
  75. package/{src/lib/components → components}/chapter/Paragraph.svelte +20 -25
  76. package/components/chapter/Paragraph.svelte.d.ts +18 -0
  77. package/{src/lib/components → components}/chapter/Positioned.svelte +1 -4
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/{src/lib/components → components}/chapter/Problem.svelte +0 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +128 -0
  82. package/components/chapter/Python.svelte.d.ts +18 -0
  83. package/{src/lib/components → components}/chapter/Quote.svelte +19 -13
  84. package/components/chapter/Quote.svelte.d.ts +17 -0
  85. package/{src/lib/components → components}/chapter/Rule.svelte +1 -4
  86. package/components/chapter/Rule.svelte.d.ts +17 -0
  87. package/{src/lib/components → components}/chapter/Table.svelte +7 -11
  88. package/components/chapter/Table.svelte.d.ts +17 -0
  89. package/components/chapter/Text.svelte +87 -0
  90. package/components/chapter/Text.svelte.d.ts +18 -0
  91. package/components/editor/BookishEditor.svelte +884 -0
  92. package/components/editor/BookishEditor.svelte.d.ts +25 -0
  93. package/components/editor/CalloutEditor.svelte +10 -0
  94. package/components/editor/CalloutEditor.svelte.d.ts +17 -0
  95. package/{src/lib/components → components}/editor/CaptionedCodeEditor.svelte +6 -10
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +17 -0
  97. package/components/editor/CaretContext.d.ts +50 -0
  98. package/components/editor/CaretContext.js +1 -0
  99. package/{src/lib/components/editor/CaretState.ts → components/editor/CaretState.d.ts} +7 -6
  100. package/components/editor/CaretState.js +1 -0
  101. package/{src/lib/components/editor/CaretUtilities.ts → components/editor/CaretUtilities.d.ts} +0 -1
  102. package/components/editor/CaretUtilities.js +1 -0
  103. package/{src/lib/components → components}/editor/CaretView.svelte +20 -25
  104. package/components/editor/CaretView.svelte.d.ts +25 -0
  105. package/components/editor/CitationsEditor.svelte +53 -0
  106. package/components/editor/CitationsEditor.svelte.d.ts +17 -0
  107. package/{src/lib/components/editor/Clipboard.ts → components/editor/Clipboard.d.ts} +1 -2
  108. package/components/editor/Clipboard.js +1 -0
  109. package/{src/lib/components/editor/Command.ts → components/editor/Command.d.ts} +2 -8
  110. package/components/editor/Command.js +1 -0
  111. package/components/editor/Commands.d.ts +3 -0
  112. package/{src/lib/components/editor/Commands.ts → components/editor/Commands.js} +315 -730
  113. package/components/editor/ConfirmButton.svelte +49 -0
  114. package/components/editor/ConfirmButton.svelte.d.ts +19 -0
  115. package/components/editor/DefinitionEditor.svelte +36 -0
  116. package/components/editor/DefinitionEditor.svelte.d.ts +17 -0
  117. package/components/editor/EmbedEditor.svelte +137 -0
  118. package/components/editor/EmbedEditor.svelte.d.ts +17 -0
  119. package/{src/lib/components → components}/editor/Icon.svelte +1 -2
  120. package/components/editor/Icon.svelte.d.ts +16 -0
  121. package/{src/lib/components → components}/editor/ImageChooser.svelte +19 -24
  122. package/components/editor/ImageChooser.svelte.d.ts +18 -0
  123. package/components/editor/InlineCodeEditor.svelte +12 -0
  124. package/components/editor/InlineCodeEditor.svelte.d.ts +17 -0
  125. package/{src/lib/components → components}/editor/LabelEditor.svelte +9 -14
  126. package/components/editor/LabelEditor.svelte.d.ts +17 -0
  127. package/{src/lib/components → components}/editor/LanguageEditor.svelte +5 -8
  128. package/components/editor/LanguageEditor.svelte.d.ts +17 -0
  129. package/components/editor/LinkEditor.svelte +100 -0
  130. package/components/editor/LinkEditor.svelte.d.ts +17 -0
  131. package/{src/lib/components → components}/editor/Note.svelte +0 -0
  132. package/components/editor/Note.svelte.d.ts +27 -0
  133. package/{src/lib/components → components}/editor/Permissions.svelte +36 -43
  134. package/components/editor/Permissions.svelte.d.ts +20 -0
  135. package/components/editor/PositionEditor.svelte +17 -0
  136. package/components/editor/PositionEditor.svelte.d.ts +18 -0
  137. package/components/editor/QuoteEditor.svelte +10 -0
  138. package/components/editor/QuoteEditor.svelte.d.ts +17 -0
  139. package/{src/lib/components → components}/editor/Switch.svelte +11 -14
  140. package/components/editor/Switch.svelte.d.ts +20 -0
  141. package/components/editor/TableEditor.svelte +10 -0
  142. package/components/editor/TableEditor.svelte.d.ts +17 -0
  143. package/{src/lib/components → components}/editor/TextEditor.svelte +89 -101
  144. package/components/editor/TextEditor.svelte.d.ts +24 -0
  145. package/components/editor/Toggle.svelte +41 -0
  146. package/components/editor/Toggle.svelte.d.ts +19 -0
  147. package/components/editor/Toolbar.svelte +249 -0
  148. package/components/editor/Toolbar.svelte.d.ts +17 -0
  149. package/{src/lib/components → components}/editor/ToolbarGroup.svelte +3 -5
  150. package/components/editor/ToolbarGroup.svelte.d.ts +18 -0
  151. package/{src/lib/components → components}/editor/ToolbarSpacer.svelte +0 -0
  152. package/components/editor/ToolbarSpacer.svelte.d.ts +23 -0
  153. package/components/editor/URLEditor.svelte +13 -0
  154. package/components/editor/URLEditor.svelte.d.ts +18 -0
  155. package/{src/lib/components/editor/UndoState.ts → components/editor/UndoState.d.ts} +2 -3
  156. package/components/editor/UndoState.js +1 -0
  157. package/{src/lib/components → components}/editor/icons/annotate.svg +0 -0
  158. package/{src/lib/components → components}/editor/icons/block.svg +0 -0
  159. package/{src/lib/components → components}/editor/icons/bold.svg +0 -0
  160. package/{src/lib/components → components}/editor/icons/bullets.svg +0 -0
  161. package/{src/lib/components → components}/editor/icons/callout.svg +0 -0
  162. package/{src/lib/components → components}/editor/icons/citation.svg +0 -0
  163. package/{src/lib/components → components}/editor/icons/clear.svg +0 -0
  164. package/{src/lib/components → components}/editor/icons/clipboard.svg +0 -0
  165. package/{src/lib/components → components}/editor/icons/code.svg +0 -0
  166. package/{src/lib/components → components}/editor/icons/columnafter.svg +0 -0
  167. package/{src/lib/components → components}/editor/icons/columnbefore.svg +0 -0
  168. package/{src/lib/components → components}/editor/icons/comment.svg +0 -0
  169. package/{src/lib/components → components}/editor/icons/copy.svg +0 -0
  170. package/{src/lib/components → components}/editor/icons/cut.svg +0 -0
  171. package/{src/lib/components → components}/editor/icons/define.svg +0 -0
  172. package/{src/lib/components → components}/editor/icons/deletecolumn.svg +0 -0
  173. package/{src/lib/components → components}/editor/icons/deleterow.svg +0 -0
  174. package/{src/lib/components → components}/editor/icons/footnote.svg +0 -0
  175. package/{src/lib/components → components}/editor/icons/header1.svg +0 -0
  176. package/{src/lib/components → components}/editor/icons/header2.svg +0 -0
  177. package/{src/lib/components → components}/editor/icons/header3.svg +0 -0
  178. package/{src/lib/components → components}/editor/icons/home.svg +0 -0
  179. package/{src/lib/components → components}/editor/icons/indent.svg +0 -0
  180. package/{src/lib/components → components}/editor/icons/italic.svg +0 -0
  181. package/{src/lib/components → components}/editor/icons/label.svg +0 -0
  182. package/{src/lib/components → components}/editor/icons/left.svg +0 -0
  183. package/{src/lib/components → components}/editor/icons/level.svg +0 -0
  184. package/{src/lib/components → components}/editor/icons/link.svg +0 -0
  185. package/{src/lib/components → components}/editor/icons/list.svg +0 -0
  186. package/{src/lib/components → components}/editor/icons/media.svg +0 -0
  187. package/{src/lib/components → components}/editor/icons/middle.svg +0 -0
  188. package/{src/lib/components → components}/editor/icons/numbers.svg +0 -0
  189. package/{src/lib/components → components}/editor/icons/paragraph.svg +0 -0
  190. package/{src/lib/components → components}/editor/icons/paste.svg +0 -0
  191. package/{src/lib/components → components}/editor/icons/quote.svg +0 -0
  192. package/{src/lib/components → components}/editor/icons/redo.svg +0 -0
  193. package/{src/lib/components → components}/editor/icons/right.svg +0 -0
  194. package/{src/lib/components → components}/editor/icons/rowabove.svg +0 -0
  195. package/{src/lib/components → components}/editor/icons/rowbelow.svg +0 -0
  196. package/{src/lib/components → components}/editor/icons/rule.svg +0 -0
  197. package/{src/lib/components → components}/editor/icons/sub.svg +0 -0
  198. package/{src/lib/components → components}/editor/icons/super.svg +0 -0
  199. package/{src/lib/components → components}/editor/icons/table.svg +0 -0
  200. package/{src/lib/components → components}/editor/icons/text.svg +0 -0
  201. package/{src/lib/components → components}/editor/icons/time.svg +0 -0
  202. package/{src/lib/components → components}/editor/icons/undo.svg +0 -0
  203. package/{src/lib/components → components}/editor/icons/unindent.svg +0 -0
  204. package/{src/lib/components → components}/editor/icons/unlink.svg +0 -0
  205. package/{src/lib/components → components}/page/Acknowledgements.svelte +10 -19
  206. package/components/page/Acknowledgements.svelte.d.ts +14 -0
  207. package/components/page/Authors.svelte +85 -0
  208. package/components/page/Authors.svelte.d.ts +21 -0
  209. package/components/page/BookLoader.svelte +59 -0
  210. package/components/page/BookLoader.svelte.d.ts +16 -0
  211. package/components/page/BulkReferenceEditor.svelte +63 -0
  212. package/components/page/BulkReferenceEditor.svelte.d.ts +14 -0
  213. package/components/page/Chapter.svelte +393 -0
  214. package/components/page/Chapter.svelte.d.ts +18 -0
  215. package/components/page/ChapterContext.d.ts +10 -0
  216. package/components/page/ChapterContext.js +1 -0
  217. package/{src/lib/components → components}/page/ChapterNumber.svelte +0 -0
  218. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  219. package/{src/lib/components → components}/page/ChapterTitle.svelte +2 -4
  220. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  221. package/components/page/Contexts.d.ts +47 -0
  222. package/components/page/Contexts.js +133 -0
  223. package/{src/lib/components → components}/page/DefinitionView.svelte +38 -53
  224. package/components/page/DefinitionView.svelte.d.ts +18 -0
  225. package/{src/lib/components → components}/page/Description.svelte +7 -15
  226. package/components/page/Description.svelte.d.ts +14 -0
  227. package/components/page/Edition.svelte +161 -0
  228. package/components/page/Edition.svelte.d.ts +20 -0
  229. package/components/page/EditionLoader.svelte +99 -0
  230. package/components/page/EditionLoader.svelte.d.ts +18 -0
  231. package/{src/lib/components → components}/page/Editions.svelte +18 -22
  232. package/components/page/Editions.svelte.d.ts +14 -0
  233. package/{src/lib/components → components}/page/Glossary.svelte +28 -33
  234. package/components/page/Glossary.svelte.d.ts +14 -0
  235. package/{src/lib/components → components}/page/Header.svelte +52 -59
  236. package/components/page/Header.svelte.d.ts +29 -0
  237. package/{src/lib/components → components}/page/Index.svelte +47 -50
  238. package/components/page/Index.svelte.d.ts +14 -0
  239. package/{src/lib/components → components}/page/Instructions.svelte +1 -2
  240. package/components/page/Instructions.svelte.d.ts +18 -0
  241. package/{src/lib/components → components}/page/License.svelte +9 -17
  242. package/components/page/License.svelte.d.ts +14 -0
  243. package/{src/lib/components → components}/page/Loading.svelte +0 -0
  244. package/components/page/Loading.svelte.d.ts +23 -0
  245. package/{src/lib/components → components}/page/Media.svelte +27 -44
  246. package/components/page/Media.svelte.d.ts +14 -0
  247. package/{src/lib/components → components}/page/MediaPreview.svelte +2 -3
  248. package/components/page/MediaPreview.svelte.d.ts +19 -0
  249. package/{src/lib/components → components}/page/Muted.svelte +0 -0
  250. package/components/page/Muted.svelte.d.ts +27 -0
  251. package/{src/lib/components → components}/page/Outline.svelte +110 -140
  252. package/components/page/Outline.svelte.d.ts +19 -0
  253. package/components/page/Page.svelte +84 -0
  254. package/components/page/Page.svelte.d.ts +19 -0
  255. package/{src/lib/components → components}/page/PageHeader.svelte +1 -2
  256. package/components/page/PageHeader.svelte.d.ts +18 -0
  257. package/{src/lib/components → components}/page/PageParagraph.svelte +0 -0
  258. package/components/page/PageParagraph.svelte.d.ts +27 -0
  259. package/components/page/PossibleChapter.svelte +14 -0
  260. package/components/page/PossibleChapter.svelte.d.ts +14 -0
  261. package/components/page/PossibleReference.svelte +11 -0
  262. package/components/page/PossibleReference.svelte.d.ts +18 -0
  263. package/{src/lib/components → components}/page/Print.svelte +3 -5
  264. package/components/page/Print.svelte.d.ts +14 -0
  265. package/{src/lib/components → components}/page/Publish.svelte +52 -59
  266. package/components/page/Publish.svelte.d.ts +14 -0
  267. package/{src/lib/components → components}/page/Reference.svelte +30 -39
  268. package/components/page/Reference.svelte.d.ts +17 -0
  269. package/{src/lib/components → components}/page/References.svelte +14 -18
  270. package/components/page/References.svelte.d.ts +14 -0
  271. package/{src/lib/components → components}/page/Rows.svelte +0 -0
  272. package/components/page/Rows.svelte.d.ts +27 -0
  273. package/components/page/Search.svelte +133 -0
  274. package/components/page/Search.svelte.d.ts +14 -0
  275. package/{src/lib/components → components}/page/Status.svelte +3 -5
  276. package/components/page/Status.svelte.d.ts +14 -0
  277. package/{src/lib/components → components}/page/SubdomainEditor.svelte +13 -16
  278. package/components/page/SubdomainEditor.svelte.d.ts +14 -0
  279. package/{src/lib/components → components}/page/TableOfContents.svelte +68 -79
  280. package/components/page/TableOfContents.svelte.d.ts +14 -0
  281. package/components/page/TableOfContentsImage.svelte +18 -0
  282. package/components/page/TableOfContentsImage.svelte.d.ts +16 -0
  283. package/{src/lib/components → components}/page/TableOfContentsRow.svelte +24 -34
  284. package/components/page/TableOfContentsRow.svelte.d.ts +24 -0
  285. package/{src/lib/components → components}/page/ThemeEditor.svelte +33 -44
  286. package/components/page/ThemeEditor.svelte.d.ts +14 -0
  287. package/{src/lib/components → components}/page/ThemeEditorPreview.svelte +12 -21
  288. package/components/page/ThemeEditorPreview.svelte.d.ts +17 -0
  289. package/components/page/ThemeSetEditor.svelte +19 -0
  290. package/components/page/ThemeSetEditor.svelte.d.ts +18 -0
  291. package/{src/lib/components → components}/page/ThemeVariableEditor.svelte +14 -18
  292. package/components/page/ThemeVariableEditor.svelte.d.ts +18 -0
  293. package/{src/lib/components → components}/page/Title.svelte +0 -0
  294. package/components/page/Title.svelte.d.ts +27 -0
  295. package/{src/lib/components → components}/page/Unknown.svelte +8 -10
  296. package/components/page/Unknown.svelte.d.ts +16 -0
  297. package/components/page/margins.d.ts +2 -0
  298. package/{src/lib/components/page/margins.ts → components/page/margins.js} +46 -79
  299. package/index.d.ts +15 -0
  300. package/{src/lib/index.js → index.js} +0 -0
  301. package/models/CRUD.d.ts +27 -0
  302. package/models/CRUD.js +262 -0
  303. package/models/Firebase.d.ts +5 -0
  304. package/{src/lib/models/Firebase.ts → models/Firebase.js} +16 -26
  305. package/models/book/Book.d.ts +61 -0
  306. package/models/book/Book.js +135 -0
  307. package/models/book/BookMedia.d.ts +23 -0
  308. package/models/book/BookMedia.js +108 -0
  309. package/models/book/BookSaveStatus.d.ts +7 -0
  310. package/models/book/BookSaveStatus.js +8 -0
  311. package/models/book/Chapter.d.ts +81 -0
  312. package/models/book/Chapter.js +212 -0
  313. package/models/book/ChapterID.d.ts +10 -0
  314. package/{src/lib/models/book/ChapterID.ts → models/book/ChapterID.js} +0 -1
  315. package/models/book/Definition.d.ts +6 -0
  316. package/models/book/Definition.js +1 -0
  317. package/models/book/Edition.d.ts +139 -0
  318. package/models/book/Edition.js +620 -0
  319. package/models/book/Reference.d.ts +24 -0
  320. package/models/book/Reference.js +78 -0
  321. package/models/book/Schema.d.ts +174 -0
  322. package/{src/lib/models/book/Schema.ts → models/book/Schema.js} +0 -1
  323. package/models/book/Theme.d.ts +113 -0
  324. package/{src/lib/models/book/Theme.ts → models/book/Theme.js} +6 -110
  325. package/{src/lib/models/book/ThemeColors.ts → models/book/ThemeColors.d.ts} +0 -6
  326. package/models/book/ThemeColors.js +1 -0
  327. package/models/book/Words.d.ts +2 -0
  328. package/{src/lib/models/book/Words.ts → models/book/Words.js} +0 -1
  329. package/models/chapter/AtomNode.d.ts +18 -0
  330. package/{src/lib/models/chapter/AtomNode.ts → models/chapter/AtomNode.js} +10 -30
  331. package/models/chapter/BlockNode.d.ts +20 -0
  332. package/{src/lib/models/chapter/BlockNode.ts → models/chapter/BlockNode.js} +47 -80
  333. package/models/chapter/BlocksNode.d.ts +50 -0
  334. package/{src/lib/models/chapter/BlocksNode.ts → models/chapter/BlocksNode.js} +359 -571
  335. package/models/chapter/BlocksNode.test.d.ts +1 -0
  336. package/models/chapter/BlocksNode.test.js +568 -0
  337. package/{src/lib/models/chapter/Bookkeeping.ts → models/chapter/Bookkeeping.d.ts} +0 -0
  338. package/models/chapter/Bookkeeping.js +1 -0
  339. package/models/chapter/CalloutNode.d.ts +17 -0
  340. package/models/chapter/CalloutNode.js +58 -0
  341. package/models/chapter/Caret.d.ts +23 -0
  342. package/{src/lib/models/chapter/Caret.ts → models/chapter/Caret.js} +26 -50
  343. package/models/chapter/ChapterNode.d.ts +34 -0
  344. package/models/chapter/ChapterNode.js +117 -0
  345. package/models/chapter/CitationsNode.d.ts +16 -0
  346. package/{src/lib/models/chapter/CitationsNode.ts → models/chapter/CitationsNode.js} +10 -17
  347. package/models/chapter/CodeNode.d.ts +35 -0
  348. package/{src/lib/models/chapter/CodeNode.ts → models/chapter/CodeNode.js} +62 -125
  349. package/models/chapter/CommentNode.d.ts +18 -0
  350. package/models/chapter/CommentNode.js +48 -0
  351. package/models/chapter/DefinitionNode.d.ts +12 -0
  352. package/{src/lib/models/chapter/DefinitionNode.ts → models/chapter/DefinitionNode.js} +8 -14
  353. package/models/chapter/Edit.d.ts +7 -0
  354. package/models/chapter/Edit.js +1 -0
  355. package/models/chapter/EmbedNode.d.ts +45 -0
  356. package/models/chapter/EmbedNode.js +168 -0
  357. package/models/chapter/ErrorNode.d.ts +17 -0
  358. package/{src/lib/models/chapter/ErrorNode.ts → models/chapter/ErrorNode.js} +8 -15
  359. package/models/chapter/FootnoteNode.d.ts +18 -0
  360. package/models/chapter/FootnoteNode.js +47 -0
  361. package/models/chapter/FormatNode.d.ts +60 -0
  362. package/{src/lib/models/chapter/FormatNode.ts → models/chapter/FormatNode.js} +262 -443
  363. package/models/chapter/FormatNode.test.d.ts +1 -0
  364. package/models/chapter/FormatNode.test.js +96 -0
  365. package/models/chapter/InlineCodeNode.d.ts +12 -0
  366. package/{src/lib/models/chapter/InlineCodeNode.ts → models/chapter/InlineCodeNode.js} +9 -17
  367. package/models/chapter/LabelNode.d.ts +17 -0
  368. package/{src/lib/models/chapter/LabelNode.ts → models/chapter/LabelNode.js} +10 -26
  369. package/models/chapter/LinkNode.d.ts +12 -0
  370. package/{src/lib/models/chapter/LinkNode.ts → models/chapter/LinkNode.js} +7 -12
  371. package/models/chapter/ListNode.d.ts +51 -0
  372. package/{src/lib/models/chapter/ListNode.ts → models/chapter/ListNode.js} +200 -277
  373. package/models/chapter/ListNode.test.d.ts +1 -0
  374. package/{src/lib/models/chapter/ListNode.test.ts → models/chapter/ListNode.test.js} +20 -57
  375. package/models/chapter/MetadataNode.d.ts +17 -0
  376. package/models/chapter/MetadataNode.js +32 -0
  377. package/models/chapter/Node.d.ts +38 -0
  378. package/{src/lib/models/chapter/Node.ts → models/chapter/Node.js} +71 -155
  379. package/models/chapter/Node.test.d.ts +1 -0
  380. package/{src/lib/models → models}/chapter/Node.test.js +0 -0
  381. package/models/chapter/ParagraphNode.d.ts +33 -0
  382. package/{src/lib/models/chapter/ParagraphNode.ts → models/chapter/ParagraphNode.js} +58 -95
  383. package/models/chapter/ParagraphNode.test.d.ts +1 -0
  384. package/models/chapter/ParagraphNode.test.js +30 -0
  385. package/models/chapter/Parser.d.ts +75 -0
  386. package/{src/lib/models/chapter/Parser.ts → models/chapter/Parser.js} +184 -369
  387. package/models/chapter/Parser.test.d.ts +1 -0
  388. package/{src/lib/models/chapter/Parser.test.ts → models/chapter/Parser.test.js} +0 -7
  389. package/{src/lib/models/chapter/Position.ts → models/chapter/Position.d.ts} +0 -0
  390. package/models/chapter/Position.js +1 -0
  391. package/models/chapter/QuoteNode.d.ts +25 -0
  392. package/models/chapter/QuoteNode.js +99 -0
  393. package/{src/lib/models/chapter/RootNode.ts → models/chapter/RootNode.d.ts} +0 -2
  394. package/models/chapter/RootNode.js +1 -0
  395. package/models/chapter/RuleNode.d.ts +15 -0
  396. package/{src/lib/models/chapter/RuleNode.ts → models/chapter/RuleNode.js} +6 -9
  397. package/models/chapter/TableNode.d.ts +37 -0
  398. package/{src/lib/models/chapter/TableNode.ts → models/chapter/TableNode.js} +82 -141
  399. package/models/chapter/TableNode.test.d.ts +1 -0
  400. package/{src/lib/models/chapter/TableNode.test.ts → models/chapter/TableNode.test.js} +10 -27
  401. package/models/chapter/TextNode.d.ts +36 -0
  402. package/{src/lib/models/chapter/TextNode.ts → models/chapter/TextNode.js} +65 -117
  403. package/models/chapter/TextNode.test.d.ts +1 -0
  404. package/{src/lib/models/chapter/TextNode.test.ts → models/chapter/TextNode.test.js} +0 -2
  405. package/package.json +270 -53
  406. package/util/getSubdomain.d.ts +3 -0
  407. package/{src/lib/util/getSubdomain.ts → util/getSubdomain.js} +8 -14
  408. package/util/isMobile.d.ts +2 -0
  409. package/{src/lib/util/isMobile.ts → util/isMobile.js} +0 -1
  410. package/util/mineReference.d.ts +4 -0
  411. package/{src/lib/util/mineReference.ts → util/mineReference.js} +25 -45
  412. package/util/scrollToEyeLevel.d.ts +2 -0
  413. package/{src/lib/util/scrollToEyeLevel.ts → util/scrollToEyeLevel.js} +2 -4
  414. package/.env.example +0 -8
  415. package/.firebaserc +0 -8
  416. package/.prettierignore +0 -8
  417. package/.prettierrc.json +0 -5
  418. package/_update-notifier-last-checked +0 -0
  419. package/firebase.json +0 -46
  420. package/firestore.indexes.json +0 -4
  421. package/firestore.rules +0 -59
  422. package/functions/.eslintrc.js +0 -28
  423. package/functions/package-lock.json +0 -12595
  424. package/functions/package.json +0 -43
  425. package/functions/src/index.ts +0 -345
  426. package/functions/tsconfig.dev.json +0 -3
  427. package/functions/tsconfig.json +0 -15
  428. package/scripts/claims.cjs +0 -99
  429. package/src/app.d.ts +0 -9
  430. package/src/app.html +0 -24
  431. package/src/lib/components/Auth.svelte +0 -65
  432. package/src/lib/components/Link.svelte +0 -58
  433. package/src/lib/components/chapter/Block.svelte +0 -42
  434. package/src/lib/components/chapter/ErrorMessage.svelte +0 -12
  435. package/src/lib/components/chapter/Python.svelte +0 -144
  436. package/src/lib/components/chapter/Text.svelte +0 -109
  437. package/src/lib/components/editor/BookishEditor.svelte +0 -1101
  438. package/src/lib/components/editor/CalloutEditor.svelte +0 -14
  439. package/src/lib/components/editor/CaretContext.ts +0 -55
  440. package/src/lib/components/editor/CitationsEditor.svelte +0 -64
  441. package/src/lib/components/editor/ConfirmButton.svelte +0 -51
  442. package/src/lib/components/editor/DefinitionEditor.svelte +0 -44
  443. package/src/lib/components/editor/EmbedEditor.svelte +0 -152
  444. package/src/lib/components/editor/InlineCodeEditor.svelte +0 -16
  445. package/src/lib/components/editor/LinkEditor.svelte +0 -110
  446. package/src/lib/components/editor/PositionEditor.svelte +0 -21
  447. package/src/lib/components/editor/QuoteEditor.svelte +0 -14
  448. package/src/lib/components/editor/TableEditor.svelte +0 -14
  449. package/src/lib/components/editor/Toggle.svelte +0 -47
  450. package/src/lib/components/editor/Toolbar.svelte +0 -297
  451. package/src/lib/components/editor/URLEditor.svelte +0 -15
  452. package/src/lib/components/page/Authors.svelte +0 -92
  453. package/src/lib/components/page/BookLoader.svelte +0 -77
  454. package/src/lib/components/page/BulkReferenceEditor.svelte +0 -86
  455. package/src/lib/components/page/Chapter.svelte +0 -449
  456. package/src/lib/components/page/ChapterContext.ts +0 -13
  457. package/src/lib/components/page/Contexts.ts +0 -176
  458. package/src/lib/components/page/Edition.svelte +0 -189
  459. package/src/lib/components/page/EditionLoader.svelte +0 -123
  460. package/src/lib/components/page/Page.svelte +0 -94
  461. package/src/lib/components/page/PossibleChapter.svelte +0 -16
  462. package/src/lib/components/page/PossibleReference.svelte +0 -14
  463. package/src/lib/components/page/Search.svelte +0 -153
  464. package/src/lib/components/page/TableOfContentsImage.svelte +0 -22
  465. package/src/lib/components/page/ThemeSetEditor.svelte +0 -21
  466. package/src/lib/models/CRUD.ts +0 -469
  467. package/src/lib/models/book/Book.ts +0 -283
  468. package/src/lib/models/book/BookMedia.ts +0 -182
  469. package/src/lib/models/book/BookSaveStatus.ts +0 -8
  470. package/src/lib/models/book/Chapter.ts +0 -462
  471. package/src/lib/models/book/Definition.ts +0 -2
  472. package/src/lib/models/book/Edition.ts +0 -1216
  473. package/src/lib/models/book/Reference.ts +0 -171
  474. package/src/lib/models/chapter/BlocksNode.test.ts +0 -867
  475. package/src/lib/models/chapter/CalloutNode.ts +0 -79
  476. package/src/lib/models/chapter/ChapterNode.ts +0 -169
  477. package/src/lib/models/chapter/CommentNode.ts +0 -61
  478. package/src/lib/models/chapter/Edit.ts +0 -6
  479. package/src/lib/models/chapter/EmbedNode.ts +0 -257
  480. package/src/lib/models/chapter/FootnoteNode.ts +0 -59
  481. package/src/lib/models/chapter/FormatNode.test.ts +0 -137
  482. package/src/lib/models/chapter/MetadataNode.ts +0 -44
  483. package/src/lib/models/chapter/ParagraphNode.test.ts +0 -54
  484. package/src/lib/models/chapter/QuoteNode.ts +0 -135
  485. package/src/params/edition.ts +0 -3
  486. package/src/routes/+error.svelte +0 -12
  487. package/src/routes/+layout.svelte +0 -241
  488. package/src/routes/+page.svelte +0 -43
  489. package/src/routes/Footer.svelte +0 -0
  490. package/src/routes/Header.svelte +0 -112
  491. package/src/routes/[bookid]/+layout.svelte +0 -5
  492. package/src/routes/[bookid]/[[editionid=edition]]/+error.svelte +0 -14
  493. package/src/routes/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  494. package/src/routes/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  495. package/src/routes/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  496. package/src/routes/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  497. package/src/routes/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  498. package/src/routes/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  499. package/src/routes/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  500. package/src/routes/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  501. package/src/routes/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  502. package/src/routes/[bookid]/editions/+page.svelte +0 -20
  503. package/src/routes/about/+page.svelte +0 -102
  504. package/src/routes/confirm/+page.svelte +0 -62
  505. package/src/routes/email/+page.svelte +0 -99
  506. package/src/routes/login/+page.svelte +0 -66
  507. package/src/routes/read/+page.svelte +0 -38
  508. package/src/routes/write/+error.svelte +0 -10
  509. package/src/routes/write/+layout.svelte +0 -11
  510. package/src/routes/write/+page.svelte +0 -114
  511. package/src/routes/write/[bookid]/+layout.svelte +0 -5
  512. package/src/routes/write/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  513. package/src/routes/write/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  514. package/src/routes/write/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  515. package/src/routes/write/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  516. package/src/routes/write/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  517. package/src/routes/write/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  518. package/src/routes/write/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  519. package/src/routes/write/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  520. package/src/routes/write/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  521. package/src/routes/write/[bookid]/[[editionid=edition]]/theme/+page.svelte +0 -5
  522. package/src/routes/write/[bookid]/[[editionid=edition]]/unknown/+page.svelte +0 -5
  523. package/src/routes/write/[bookid]/editions/+page.svelte +0 -20
  524. package/src/vite-env.d.ts +0 -1
  525. package/static/icons/favicon.png +0 -0
  526. package/static/icons/icon.png +0 -0
  527. package/static/icons/ios-icon.png +0 -0
  528. package/storage.rules +0 -9
  529. package/svelte.config.js +0 -19
  530. package/tsconfig.json +0 -18
  531. package/tsconfig.node.json +0 -9
  532. package/vite.config.ts +0 -8
  533. package/vite.reader.config.ts +0 -32
@@ -1,68 +1,50 @@
1
- import type Node from './Node';
2
1
  import AtomNode from './AtomNode';
3
2
  import TextNode from './TextNode';
4
3
  import FormatNode from './FormatNode';
5
- import type EmbedNode from './EmbedNode';
6
-
7
- export type SelectableNode = TextNode | AtomNode<any> | EmbedNode;
8
- type Caret = { node: SelectableNode; index: number };
9
- export default Caret;
10
-
11
- export type CaretRange = { start: Caret; end: Caret };
12
- export type IndexRange = { start: number; end: number };
13
-
14
- export function getTextAndAtomNodes(node: Node): (AtomNode<any> | TextNode)[] {
4
+ export function getTextAndAtomNodes(node) {
15
5
  return node
16
6
  .getNodes()
17
- .filter((n) => n instanceof TextNode || n instanceof AtomNode) as (
18
- | AtomNode<any>
19
- | TextNode
20
- )[];
7
+ .filter((n) => n instanceof TextNode || n instanceof AtomNode);
21
8
  }
22
-
23
- function getFormatRoots(node: Node): FormatNode[] {
24
- const roots: FormatNode[] = [];
9
+ function getFormatRoots(node) {
10
+ const roots = [];
25
11
  node.traverse((node, parents) => {
26
- if (
27
- node instanceof FormatNode &&
12
+ if (node instanceof FormatNode &&
28
13
  parents.length > 0 &&
29
- !(parents[parents.length - 1] instanceof FormatNode)
30
- )
14
+ !(parents[parents.length - 1] instanceof FormatNode))
31
15
  roots.push(node);
32
16
  });
33
17
  return roots;
34
18
  }
35
-
36
- export function caretToIndex(node: Node, caret: Caret): number | undefined {
37
- let roots: Node[] = getFormatRoots(node);
38
- if (roots.length === 0) roots = [node];
39
-
19
+ export function caretToIndex(node, caret) {
20
+ let roots = getFormatRoots(node);
21
+ if (roots.length === 0)
22
+ roots = [node];
40
23
  let currentIndex = 0;
41
24
  for (let n = 0; n < roots.length; n++) {
42
25
  const nodes = getTextAndAtomNodes(roots[n]);
43
26
  for (let i = 0; i < nodes.length; i++) {
44
27
  const t = nodes[i];
45
- if (t !== caret.node) currentIndex += t.getCaretPositionCount();
46
- else return currentIndex + caret.index;
28
+ if (t !== caret.node)
29
+ currentIndex += t.getCaretPositionCount();
30
+ else
31
+ return currentIndex + caret.index;
47
32
  }
48
33
  // Include one for the root.
49
34
  currentIndex++;
50
35
  }
51
36
  }
52
-
53
- export function indexToCaret(node: Node, index: number): Caret | undefined {
54
- let roots: Node[] = getFormatRoots(node);
55
- if (roots.length === 0) roots = [node];
56
-
37
+ export function indexToCaret(node, index) {
38
+ let roots = getFormatRoots(node);
39
+ if (roots.length === 0)
40
+ roots = [node];
57
41
  let currentIndex = 0;
58
42
  for (let n = 0; n < roots.length; n++) {
59
43
  const nodes = getTextAndAtomNodes(roots[n]);
60
44
  for (let i = 0; i < nodes.length; i++) {
61
45
  const t = nodes[i];
62
- if (
63
- index >= currentIndex &&
64
- index <= currentIndex + t.getCaretPositionCount()
65
- ) {
46
+ if (index >= currentIndex &&
47
+ index <= currentIndex + t.getCaretPositionCount()) {
66
48
  // Prefer empty nodes to enable zero width formats.
67
49
  if (i < nodes.length - 1) {
68
50
  const next = nodes[i + 1];
@@ -76,23 +58,17 @@ export function indexToCaret(node: Node, index: number): Caret | undefined {
76
58
  currentIndex++;
77
59
  }
78
60
  }
79
-
80
- export function caretRangeToIndexRange(
81
- node: Node,
82
- range: CaretRange
83
- ): IndexRange | undefined {
61
+ export function caretRangeToIndexRange(node, range) {
84
62
  const startIndex = caretToIndex(node, range.start);
85
63
  const endIndex = caretToIndex(node, range.end);
86
- if (startIndex === undefined || endIndex === undefined) return;
64
+ if (startIndex === undefined || endIndex === undefined)
65
+ return;
87
66
  return { start: startIndex, end: endIndex };
88
67
  }
89
-
90
- export function indexRangeToCaretRange(
91
- node: Node,
92
- range: IndexRange
93
- ): CaretRange | undefined {
68
+ export function indexRangeToCaretRange(node, range) {
94
69
  const start = indexToCaret(node, range.start);
95
70
  const end = indexToCaret(node, range.end);
96
- if (start === undefined || end === undefined) return;
71
+ if (start === undefined || end === undefined)
72
+ return;
97
73
  return { start: start, end: end };
98
74
  }
@@ -0,0 +1,34 @@
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
+ export default class ChapterNode extends BlocksNode {
13
+ #private;
14
+ constructor(blocks: BlockNode[], metadata?: Bookkeeping);
15
+ getType(): string;
16
+ getChapter(): this;
17
+ create(blocks: BlockNode[]): BlocksNode;
18
+ getErrors(): ErrorNode[];
19
+ getCitations(): Set<string>;
20
+ getFootnotes(): FootnoteNode[];
21
+ getHeaders(): ParagraphNode[];
22
+ getEmbeds(): EmbedNode[];
23
+ getComments(): CommentNode[];
24
+ getLabels(): LabelNode[];
25
+ hasLabel(labelID: string): boolean;
26
+ getCitationNumber(citationID: string): number | null;
27
+ toText(): string;
28
+ toBookdown(): string;
29
+ getNextTextOrAtom(node: TextNode | AtomNode<any>): TextNode | AtomNode<any> | undefined;
30
+ getPreviousTextOrAtom(node: TextNode | AtomNode<any>): TextNode | AtomNode<any> | undefined;
31
+ getChildren(): BlockNode[];
32
+ withChildReplaced(node: BlockNode, replacement: BlockNode | undefined): this | undefined;
33
+ copy(): this;
34
+ }
@@ -0,0 +1,117 @@
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
+ export default class ChapterNode extends BlocksNode {
10
+ #metadata;
11
+ constructor(blocks, metadata) {
12
+ super(blocks);
13
+ // Content extracted during parsing.
14
+ this.#metadata = metadata === undefined ? { symbols: {} } : metadata;
15
+ }
16
+ getType() {
17
+ return 'chapter';
18
+ }
19
+ getChapter() {
20
+ return this;
21
+ }
22
+ create(blocks) {
23
+ return new ChapterNode(blocks, this.#metadata);
24
+ }
25
+ getErrors() {
26
+ return this.getNodes().filter((n) => n instanceof ErrorNode);
27
+ }
28
+ getCitations() {
29
+ const citations = new Set();
30
+ this.getNodes().filter((n) => n instanceof CitationsNode).forEach((cites) => cites.getMeta().forEach((citationID) => citations.add(citationID)));
31
+ return citations;
32
+ }
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
+ }
45
+ getLabels() {
46
+ return this.getNodes().filter((n) => n instanceof LabelNode);
47
+ }
48
+ hasLabel(labelID) {
49
+ return (this.getLabels().find((label) => label.getMeta() === labelID) !==
50
+ undefined);
51
+ }
52
+ getCitationNumber(citationID) {
53
+ const index = Array.from(this.getCitations())
54
+ .sort()
55
+ .indexOf(citationID);
56
+ return index < 0 ? null : index + 1;
57
+ }
58
+ toText() {
59
+ return this.getBlocks()
60
+ .map((block) => block.toText())
61
+ .join(' ');
62
+ }
63
+ toBookdown() {
64
+ // Render the symbols then all the blocks
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'));
72
+ }
73
+ getNextTextOrAtom(node) {
74
+ // Otherwise, find the next text node after this one.
75
+ const nodes = this.getTextAndAtomNodes();
76
+ const index = nodes.indexOf(node);
77
+ return index === undefined
78
+ ? undefined
79
+ : index < nodes.length - 1
80
+ ? nodes[index + 1]
81
+ : undefined;
82
+ }
83
+ getPreviousTextOrAtom(node) {
84
+ // Otherwise, find the next text node after this one.
85
+ const nodes = this.getTextAndAtomNodes();
86
+ const index = nodes.indexOf(node);
87
+ return index === undefined
88
+ ? undefined
89
+ : index > 0
90
+ ? nodes[index - 1]
91
+ : undefined;
92
+ }
93
+ getChildren() {
94
+ return this.getBlocks();
95
+ }
96
+ withChildReplaced(node, replacement) {
97
+ const index = this.getBlocks().indexOf(node);
98
+ /// If we couldn't find the requested node, don't change anything.
99
+ if (index < 0)
100
+ return undefined;
101
+ // Make a new blocks node, assigning and re-parenting the replacement.
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
+ ];
112
+ return new ChapterNode(blocks, this.#metadata);
113
+ }
114
+ copy() {
115
+ return new ChapterNode(this.getBlocks().map((b) => b.copy()), this.#metadata);
116
+ }
117
+ }
@@ -0,0 +1,16 @@
1
+ import AtomNode from './AtomNode';
2
+ import type Caret from './Caret';
3
+ import type Node from './Node';
4
+ export default class CitationsNode extends AtomNode<string[]> {
5
+ constructor(citations: string[]);
6
+ getType(): string;
7
+ getDefaultCaret(): Caret;
8
+ toText(): string;
9
+ toBookdown(): string;
10
+ toHTML(): string;
11
+ getParentOf(): Node | undefined;
12
+ copy(): this;
13
+ withMeta(citations: string[]): CitationsNode;
14
+ withChildReplaced(): undefined;
15
+ withContentInRange(): this | undefined;
16
+ }
@@ -1,43 +1,36 @@
1
1
  import AtomNode from './AtomNode';
2
- import type Caret from './Caret';
3
- import type Node from './Node';
4
-
5
- export default class CitationsNode extends AtomNode<string[]> {
6
- constructor(citations: string[]) {
2
+ export default class CitationsNode extends AtomNode {
3
+ constructor(citations) {
7
4
  super(citations);
8
5
  }
9
-
10
6
  getType() {
11
7
  return 'citations';
12
8
  }
13
- getDefaultCaret(): Caret {
9
+ getDefaultCaret() {
14
10
  return { node: this, index: 0 };
15
11
  }
16
- toText(): string {
12
+ toText() {
17
13
  return '';
18
14
  }
19
- toBookdown(): string {
15
+ toBookdown() {
20
16
  return `<${this.getMeta().join(',')}>`;
21
17
  }
22
- toHTML(): string {
18
+ toHTML() {
23
19
  return `(${this.getMeta().join(',')})`;
24
20
  }
25
-
26
- getParentOf(): Node | undefined {
21
+ getParentOf() {
27
22
  return undefined;
28
23
  }
29
-
30
24
  copy() {
31
- return new CitationsNode([...this.getMeta()]) as this;
25
+ return new CitationsNode([...this.getMeta()]);
32
26
  }
33
-
34
- withMeta(citations: string[]) {
27
+ withMeta(citations) {
35
28
  return new CitationsNode(citations);
36
29
  }
37
30
  withChildReplaced() {
38
31
  return undefined;
39
32
  }
40
- withContentInRange(): this | undefined {
33
+ withContentInRange() {
41
34
  return this.copy();
42
35
  }
43
36
  }
@@ -0,0 +1,35 @@
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';
9
+ export default class CodeNode extends BlockNode {
10
+ #private;
11
+ constructor(code: TextNode, language: string, position: Position, caption?: FormatNode);
12
+ getType(): string;
13
+ getCodeNode(): TextNode;
14
+ getCode(): string;
15
+ getCaption(): FormatNode;
16
+ getPosition(): Position;
17
+ getLanguage(): string;
18
+ isExecutable(): boolean;
19
+ getFormats(): FormatNode[];
20
+ toText(): string;
21
+ toHTML(): string;
22
+ toBookdown(): string;
23
+ getChildren(): (FormatNode | TextNode)[];
24
+ copy(): this;
25
+ getParentOf(node: Node): Node | undefined;
26
+ withChildReplaced(node: Node, replacement: Node | undefined): this | undefined;
27
+ withPosition(position: Position): CodeNode;
28
+ withLanguage(language: string): CodeNode;
29
+ withExecutable(executable: boolean): CodeNode;
30
+ withCaption(caption: FormatNode): CodeNode;
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;
35
+ }
@@ -1,29 +1,15 @@
1
- import type Node from './Node';
2
- import type Position from './Position';
3
- import FormatNode, { type Format } from './FormatNode';
1
+ import FormatNode, {} from './FormatNode';
4
2
  import TextNode from './TextNode';
5
3
  import BlockNode from './BlockNode';
6
- import type { CaretRange } from './Caret';
7
- import type Edit from './Edit';
8
- import type Caret from './Caret';
9
-
10
4
  export default class CodeNode extends BlockNode {
11
- readonly #code: TextNode;
12
- readonly #caption: FormatNode;
13
- readonly #position: Position;
14
- readonly #language: string;
15
- readonly #executable: boolean;
16
-
17
- constructor(
18
- code: TextNode,
19
- language: string,
20
- position: Position,
21
- caption?: FormatNode
22
- ) {
5
+ #code;
6
+ #caption;
7
+ #position;
8
+ #language;
9
+ #executable;
10
+ constructor(code, language, position, caption) {
23
11
  super();
24
-
25
12
  const executable = language.charAt(language.length - 1) === '!';
26
-
27
13
  this.#code = code;
28
14
  this.#position = position;
29
15
  this.#language = executable ? language.slice(0, -1) : language;
@@ -33,11 +19,9 @@ export default class CodeNode extends BlockNode {
33
19
  ? new FormatNode('', [new TextNode()])
34
20
  : caption.withTextIfEmpty();
35
21
  }
36
-
37
22
  getType() {
38
23
  return 'code';
39
24
  }
40
-
41
25
  getCodeNode() {
42
26
  return this.#code;
43
27
  }
@@ -59,132 +43,82 @@ export default class CodeNode extends BlockNode {
59
43
  getFormats() {
60
44
  return [this.#caption];
61
45
  }
62
-
63
46
  toText() {
64
47
  return '';
65
48
  }
66
- toHTML(): string {
49
+ toHTML() {
67
50
  return `<pre><code>${this.#code.toHTML()}</code><pre><center>${this.#caption.toHTML()}</center>`;
68
51
  }
69
-
70
- toBookdown(): string {
52
+ toBookdown() {
71
53
  // Remember to escape any back ticks.
72
- return (
73
- '`' +
54
+ return ('`' +
74
55
  (this.#language !== 'plaintext' ? this.#language : '') +
75
56
  (this.#executable ? '!' : '') +
76
57
  '\n' +
77
58
  this.#code.getText().replace(/`/g, '\\`') +
78
59
  '\n`' +
79
60
  (this.#position !== '|' ? this.#position : '') +
80
- this.#caption.toBookdown()
81
- );
61
+ this.#caption.toBookdown());
82
62
  }
83
-
84
63
  getChildren() {
85
64
  return [this.#code, this.#caption];
86
65
  }
87
-
88
66
  copy() {
89
- return new CodeNode(
90
- this.#code.copy(),
91
- this.#language,
92
- this.#position,
93
- this.#caption.copy()
94
- ) as this;
95
- }
96
-
97
- getParentOf(node: Node): Node | undefined {
67
+ return new CodeNode(this.#code.copy(), this.#language, this.#position, this.#caption.copy());
68
+ }
69
+ getParentOf(node) {
98
70
  return node == this.#code || node === this.#caption
99
71
  ? this
100
72
  : this.#caption.getParentOf(node);
101
73
  }
102
-
103
- withChildReplaced(node: Node, replacement: Node | undefined) {
104
- const newCode =
105
- node === this.#code && replacement instanceof TextNode
106
- ? replacement
107
- : undefined;
108
- const newCaption =
109
- node === this.#caption &&
74
+ withChildReplaced(node, replacement) {
75
+ const newCode = node === this.#code && replacement instanceof TextNode
76
+ ? replacement
77
+ : undefined;
78
+ const newCaption = node === this.#caption &&
110
79
  (replacement instanceof FormatNode || replacement === undefined)
111
- ? replacement
112
- : undefined;
80
+ ? replacement
81
+ : undefined;
113
82
  return newCode || newCaption
114
- ? (new CodeNode(
115
- newCode ? newCode : this.#code,
116
- this.#language,
117
- this.#position,
118
- newCaption ? newCaption : this.#caption
119
- ) as this)
83
+ ? new CodeNode(newCode ? newCode : this.#code, this.#language, this.#position, newCaption ? newCaption : this.#caption)
120
84
  : undefined;
121
85
  }
122
-
123
- withPosition(position: Position) {
124
- return new CodeNode(
125
- this.#code,
126
- this.#language,
127
- position,
128
- this.#caption
129
- );
130
- }
131
- withLanguage(language: string) {
132
- return new CodeNode(
133
- this.#code,
134
- language,
135
- this.#position,
136
- this.#caption
137
- );
138
- }
139
- withExecutable(executable: boolean) {
140
- return new CodeNode(
141
- this.#code,
142
- executable ? this.#language + '!' : this.#language,
143
- this.#position,
144
- this.#caption
145
- );
146
- }
147
- withCaption(caption: FormatNode) {
148
- return new CodeNode(
149
- this.#code,
150
- this.#language,
151
- this.#position,
152
- caption
153
- );
154
- }
155
-
156
- withContentInRange(range: CaretRange): this | undefined {
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
+ }
98
+ withContentInRange(range) {
157
99
  if (!this.contains(range.start.node) && !this.contains(range.end.node))
158
100
  return this.copy();
159
101
  const newCode = this.#caption.contains(range.start.node)
160
102
  ? new TextNode()
161
103
  : this.#code.withContentInRange(range);
162
- const newCaption =
163
- range.end.node === this.#code
164
- ? new FormatNode('', [new TextNode()])
165
- : this.#caption.withContentInRange(range);
166
- if (newCode === undefined || newCaption === undefined) return;
167
- return new CodeNode(
168
- newCode,
169
- this.#language,
170
- this.#position,
171
- newCaption
172
- ) as this;
173
- }
174
-
104
+ const newCaption = range.end.node === this.#code
105
+ ? new FormatNode('', [new TextNode()])
106
+ : this.#caption.withContentInRange(range);
107
+ if (newCode === undefined || newCaption === undefined)
108
+ return;
109
+ return new CodeNode(newCode, this.#language, this.#position, newCaption);
110
+ }
175
111
  /** Overrides super, special casing TextNode, since super only handles formats. */
176
- withRangeFormatted(range: CaretRange, format: Format | undefined): Edit {
177
- let editedNode: Node | undefined = this;
178
-
112
+ withRangeFormatted(range, format) {
113
+ let editedNode = this;
179
114
  // First, handle the caption, if necessary.
180
115
  let captionEdit = super.withRangeFormatted(range, format);
181
-
182
116
  // If we're asking for format, skip it, code can't be formatted. Just return the caption edit.
183
- if (format !== undefined) return captionEdit;
184
-
117
+ if (format !== undefined)
118
+ return captionEdit;
185
119
  // Grab the new CodeNode if the caption was edited.
186
- if (captionEdit) editedNode = captionEdit.root as this;
187
-
120
+ if (captionEdit)
121
+ editedNode = captionEdit.root;
188
122
  // Next, see if part of the range included this text node.
189
123
  const sortedRange = this.sortRange(range);
190
124
  const containsStart = sortedRange.start.node === this.#code;
@@ -199,9 +133,11 @@ export default class CodeNode extends BlockNode {
199
133
  : this.#code.getLength(),
200
134
  },
201
135
  });
202
- if (revisedCode === undefined) return;
136
+ if (revisedCode === undefined)
137
+ return;
203
138
  editedNode = editedNode.withChildReplaced(this.#code, revisedCode);
204
- if (editedNode === undefined) return;
139
+ if (editedNode === undefined)
140
+ return;
205
141
  const revisedCaret = {
206
142
  node: revisedCode,
207
143
  index: sortedRange.start.index,
@@ -210,26 +146,27 @@ export default class CodeNode extends BlockNode {
210
146
  root: editedNode,
211
147
  range: { start: revisedCaret, end: revisedCaret },
212
148
  };
213
- } else {
149
+ }
150
+ else {
214
151
  return captionEdit;
215
152
  }
216
153
  }
217
-
218
- withNodeInserted(caret: Caret, node: Node): Edit {
154
+ withNodeInserted(caret, node) {
219
155
  // Only insert if the caret is in the code node.
220
- if (caret.node !== this.#code) return undefined;
221
-
156
+ if (caret.node !== this.#code)
157
+ return undefined;
222
158
  // Convert the node to text, then insert it at the position.
223
159
  const text = node
224
160
  .getNodes()
225
- .filter((n): n is TextNode => n instanceof TextNode)
161
+ .filter((n) => n instanceof TextNode)
226
162
  .map((t) => t.getText())
227
163
  .join('');
228
-
229
164
  const newCode = this.#code.withCharacterAt(text, caret.index);
230
- if (newCode === undefined) return undefined;
165
+ if (newCode === undefined)
166
+ return undefined;
231
167
  const newNode = this.withChildReplaced(this.#code, newCode);
232
- if (newNode === undefined) return;
168
+ if (newNode === undefined)
169
+ return;
233
170
  const newCaret = { node: newCode, index: caret.index + text.length };
234
171
  return { root: newNode, range: { start: newCaret, end: newCaret } };
235
172
  }
@@ -0,0 +1,18 @@
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
+ export default class CommentNode extends AtomNode<FormatNode> {
7
+ constructor(comment: FormatNode);
8
+ getType(): string;
9
+ toText(): string;
10
+ toHTML(): string;
11
+ getDefaultCaret(): Caret | undefined;
12
+ toBookdown(format?: FormatNode): string;
13
+ copy(): this;
14
+ withChildReplaced(node: Node, replacement: Node | undefined): this | undefined;
15
+ getParentOf(node: Node): Node | undefined;
16
+ withMeta(comment: FormatNode): CommentNode;
17
+ withContentInRange(range: CaretRange): this | undefined;
18
+ }