bookish-press 0.4.47 → 0.4.48

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 +58 -62
  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 +5 -9
  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 +392 -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 +37 -52
  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 +41 -48
  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} +5 -109
  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
@@ -0,0 +1,48 @@
1
+ import AtomNode from './AtomNode';
2
+ import FormatNode from './FormatNode';
3
+ export default class CommentNode extends AtomNode {
4
+ constructor(comment) {
5
+ super(comment.withTextIfEmpty());
6
+ }
7
+ getType() {
8
+ return 'comment';
9
+ }
10
+ toText() {
11
+ return '';
12
+ }
13
+ toHTML() {
14
+ return `(${this.getMeta().toHTML()})`;
15
+ }
16
+ getDefaultCaret() {
17
+ return this.getMeta().getFirstCaret();
18
+ }
19
+ toBookdown(format) {
20
+ const previousText = format?.getPreviousTextOrAtom(this)?.toBookdown();
21
+ // Insert a space before the % if there isn't one before this.
22
+ return `${previousText?.endsWith(' ') ? '' : ' '}%${this.getMeta().toBookdown()}%`;
23
+ }
24
+ copy() {
25
+ return new CommentNode(this.getMeta().copy());
26
+ }
27
+ withChildReplaced(node, replacement) {
28
+ return node instanceof FormatNode &&
29
+ replacement instanceof FormatNode &&
30
+ node === this.getMeta()
31
+ ? new CommentNode(replacement)
32
+ : undefined;
33
+ }
34
+ getParentOf(node) {
35
+ return node === this.getMeta()
36
+ ? this
37
+ : this.getMeta().getParentOf(node);
38
+ }
39
+ withMeta(comment) {
40
+ return new CommentNode(comment);
41
+ }
42
+ withContentInRange(range) {
43
+ const newFormat = this.getMeta().withContentInRange(range);
44
+ if (newFormat === undefined)
45
+ return;
46
+ return this.withMeta(newFormat);
47
+ }
48
+ }
@@ -0,0 +1,12 @@
1
+ import MetadataNode from './MetadataNode';
2
+ import TextNode from './TextNode';
3
+ export default class DefinitionNode extends MetadataNode<string> {
4
+ constructor(phrase?: TextNode, glossaryID?: string);
5
+ getType(): string;
6
+ toText(): string;
7
+ toHTML(): string;
8
+ toBookdown(): string;
9
+ copy(): this;
10
+ withMeta(meta: string): MetadataNode<string>;
11
+ withText(text: TextNode): MetadataNode<string>;
12
+ }
@@ -1,34 +1,28 @@
1
1
  import MetadataNode from './MetadataNode';
2
2
  import TextNode from './TextNode';
3
-
4
- export default class DefinitionNode extends MetadataNode<string> {
5
- constructor(phrase?: TextNode, glossaryID: string = '') {
3
+ export default class DefinitionNode extends MetadataNode {
4
+ constructor(phrase, glossaryID = '') {
6
5
  super(phrase === undefined ? new TextNode() : phrase, glossaryID);
7
6
  }
8
-
9
7
  getType() {
10
8
  return 'definition';
11
9
  }
12
-
13
- toText(): string {
10
+ toText() {
14
11
  return this.getText().toText();
15
12
  }
16
- toHTML(): string {
13
+ toHTML() {
17
14
  return `${this.getText().toHTML()}`;
18
15
  }
19
-
20
- toBookdown(): string {
16
+ toBookdown() {
21
17
  return `~${this.getText().toBookdown()}~${this.getMeta()}`;
22
18
  }
23
-
24
19
  copy() {
25
- return new DefinitionNode(this.getText(), this.getMeta()) as this;
20
+ return new DefinitionNode(this.getText(), this.getMeta());
26
21
  }
27
-
28
- withMeta(meta: string): MetadataNode<string> {
22
+ withMeta(meta) {
29
23
  return new DefinitionNode(this.getText(), meta);
30
24
  }
31
- withText(text: TextNode): MetadataNode<string> {
25
+ withText(text) {
32
26
  return new DefinitionNode(text, this.getMeta());
33
27
  }
34
28
  }
@@ -0,0 +1,7 @@
1
+ import type { CaretRange } from './Caret';
2
+ import type Node from './Node';
3
+ type Edit = undefined | {
4
+ root: Node;
5
+ range: CaretRange;
6
+ };
7
+ export default Edit;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
1
+ import type Node from './Node';
2
+ import type Position from './Position';
3
+ import FormatNode from './FormatNode';
4
+ import BlockNode from './BlockNode';
5
+ import type { CaretRange } from './Caret';
6
+ import type RootNode from './RootNode';
7
+ import type Caret from './Caret';
8
+ export default class EmbedNode extends BlockNode {
9
+ #private;
10
+ constructor(url: string, description: string, caption?: FormatNode, credit?: FormatNode, position?: Position);
11
+ getType(): string;
12
+ isVideo(): boolean;
13
+ getURL(): string;
14
+ getSmallURL(): string;
15
+ hasSmallURL(): boolean;
16
+ isHosted(): boolean;
17
+ isLocal(): boolean;
18
+ getDescription(): string;
19
+ getCaption(): FormatNode;
20
+ getCredit(): FormatNode;
21
+ getPosition(): Position;
22
+ getFormats(): FormatNode[];
23
+ getChildren(): FormatNode[];
24
+ getParentOf(node: Node): Node | undefined;
25
+ toText(): string;
26
+ toHTML(): string;
27
+ toBookdown(): string;
28
+ toJSON(): {
29
+ url: string;
30
+ alt: string;
31
+ caption: string;
32
+ credit: string;
33
+ };
34
+ copy(): this;
35
+ withChildReplaced(node: Node, replacement: Node | undefined): this | undefined;
36
+ withURL(url: string): EmbedNode;
37
+ withURLs(url: string, thumbnail: string): EmbedNode;
38
+ withDescription(description: string): EmbedNode;
39
+ withCaption(caption: FormatNode): EmbedNode;
40
+ withCredit(credit: FormatNode): EmbedNode;
41
+ withPosition(position: Position): EmbedNode;
42
+ withContentInRange(range: CaretRange): this | undefined;
43
+ nextWord(): Caret;
44
+ previousWord(root: RootNode): Caret;
45
+ }
@@ -0,0 +1,168 @@
1
+ import FormatNode from './FormatNode';
2
+ import TextNode from './TextNode';
3
+ import BlockNode from './BlockNode';
4
+ // This is what we use to encode URLs in the URL field of the embed node.
5
+ const URL_SEPARATOR = '*';
6
+ export default class EmbedNode extends BlockNode {
7
+ /**
8
+ * The URL is actually a list of up to two URLs. The first is a full-size image URL, the second is a smaller image.
9
+ * These are used for responsive rendering and to limit bandwidth usage. Any image URLs after the second are ignored.
10
+ */
11
+ #urls;
12
+ #description;
13
+ #caption;
14
+ #credit;
15
+ #position;
16
+ constructor(url, description, caption, credit, position = '|') {
17
+ super();
18
+ this.#urls = url;
19
+ this.#description = description;
20
+ this.#caption =
21
+ caption === undefined
22
+ ? new FormatNode('', [new TextNode()])
23
+ : caption.withTextIfEmpty();
24
+ this.#credit =
25
+ credit == undefined
26
+ ? new FormatNode('', [new TextNode()])
27
+ : credit.withTextIfEmpty();
28
+ this.#position = position;
29
+ }
30
+ getType() {
31
+ return 'embed';
32
+ }
33
+ isVideo() {
34
+ return (this.#urls.includes('https://www.youtube.com') ||
35
+ this.#urls.includes('https://youtu.be') ||
36
+ this.#urls.includes('https://www.tiktok.com') ||
37
+ this.#urls.includes('vimeo.com'));
38
+ }
39
+ getURL() {
40
+ return this.#urls.split(URL_SEPARATOR)[0];
41
+ }
42
+ getSmallURL() {
43
+ return this.isLocal()
44
+ ? 'images/small/' + this.getURL()
45
+ : this.hasSmallURL()
46
+ ? this.#urls.split(URL_SEPARATOR)[1]
47
+ : this.getURL();
48
+ }
49
+ hasSmallURL() {
50
+ return (this.#urls.split(URL_SEPARATOR).length > 1 &&
51
+ this.#urls.split(URL_SEPARATOR)[1].trim().length > 0);
52
+ }
53
+ isHosted() {
54
+ return this.#urls.includes('bookish');
55
+ }
56
+ isLocal() {
57
+ return this.#urls.length > 0 && !this.#urls.startsWith('http');
58
+ }
59
+ getDescription() {
60
+ return this.#description;
61
+ }
62
+ getCaption() {
63
+ return this.#caption;
64
+ }
65
+ getCredit() {
66
+ return this.#credit;
67
+ }
68
+ getPosition() {
69
+ return this.#position;
70
+ }
71
+ getFormats() {
72
+ return [this.#caption, this.#credit];
73
+ }
74
+ getChildren() {
75
+ return [this.#caption, this.#credit];
76
+ }
77
+ getParentOf(node) {
78
+ if (node === this.#caption || node === this.#credit)
79
+ return this;
80
+ const captionParent = this.#caption.getParentOf(node);
81
+ if (captionParent)
82
+ return captionParent;
83
+ const creditParent = this.#credit.getParentOf(node);
84
+ if (creditParent)
85
+ return creditParent;
86
+ }
87
+ toText() {
88
+ return this.#caption.toText();
89
+ }
90
+ toHTML() {
91
+ return `<img src="${this.getURL()}" alt="${this.getDescription()}" />`;
92
+ }
93
+ toBookdown() {
94
+ return `|${this.#urls}|${this.#description}|${this.#caption.toBookdown()}|${this.#credit.toBookdown()}|`;
95
+ }
96
+ toJSON() {
97
+ return {
98
+ url: this.#urls,
99
+ alt: this.#description,
100
+ caption: this.#caption.toText(),
101
+ credit: this.#credit.toText(),
102
+ };
103
+ }
104
+ copy() {
105
+ return new EmbedNode(this.#urls, this.#description, this.#caption.copy(), this.#credit.copy(), this.#position);
106
+ }
107
+ withChildReplaced(node, replacement) {
108
+ const newCaption = node === this.#caption &&
109
+ (replacement === undefined || replacement instanceof FormatNode)
110
+ ? replacement
111
+ : this.#caption;
112
+ const newCredit = node === this.#credit &&
113
+ (replacement === undefined || replacement instanceof FormatNode)
114
+ ? replacement
115
+ : this.#credit;
116
+ return newCaption || newCredit
117
+ ? new EmbedNode(this.#urls, this.#description, newCaption, newCredit, this.#position)
118
+ : undefined;
119
+ }
120
+ withURL(url) {
121
+ // If the URL is a YouTube URL, convert to an embed URL, since a raw YouTube URL is never valid for embedding.
122
+ if (url.includes('www.youtube.com/watch?v='))
123
+ url = url.replace('/watch?v=', '/embed/');
124
+ return new EmbedNode(url, this.#description, this.#caption, this.#credit, this.#position);
125
+ }
126
+ withURLs(url, thumbnail) {
127
+ return new EmbedNode(url + URL_SEPARATOR + thumbnail, this.#description, this.#caption, this.#credit, this.#position);
128
+ }
129
+ withDescription(description) {
130
+ return new EmbedNode(this.#urls, description, this.#caption, this.#credit, this.#position);
131
+ }
132
+ withCaption(caption) {
133
+ return new EmbedNode(this.#urls, this.#description, caption, this.#credit, this.#position);
134
+ }
135
+ withCredit(credit) {
136
+ return new EmbedNode(this.#urls, this.#description, this.#caption, credit, this.#position);
137
+ }
138
+ withPosition(position) {
139
+ return new EmbedNode(this.#urls, this.#description, this.#caption, this.#credit, position);
140
+ }
141
+ withContentInRange(range) {
142
+ if (!this.contains(range.start.node) && !this.contains(range.end.node))
143
+ return this.copy();
144
+ const newCredit = this.#credit.contains(range.end.node) ||
145
+ this.#credit.contains(range.start.node)
146
+ ? this.#credit.withContentInRange(range)
147
+ : new FormatNode('', [new TextNode()]);
148
+ const newCaption = this.#caption.contains(range.start.node) ||
149
+ this.#caption.contains(range.end.node)
150
+ ? this.#caption.withContentInRange(range)
151
+ : new FormatNode('', [new TextNode()]);
152
+ if (newCaption === undefined || newCredit === undefined)
153
+ return;
154
+ return new EmbedNode(this.#urls, this.#description, newCaption, newCredit, this.#position);
155
+ }
156
+ nextWord() {
157
+ return this.#caption.getFirstCaret();
158
+ }
159
+ previousWord(root) {
160
+ const previous = root.getPreviousTextOrAtom(this.#caption.getFirstTextNode());
161
+ return previous
162
+ ? {
163
+ node: previous,
164
+ index: previous instanceof TextNode ? previous.getLength() : 0,
165
+ }
166
+ : { node: this, index: 0 };
167
+ }
168
+ }
@@ -0,0 +1,17 @@
1
+ import BlockNode from './BlockNode';
2
+ import type Node from './Node';
3
+ export default class ErrorNode extends BlockNode {
4
+ #private;
5
+ constructor(text: string | undefined, error: string);
6
+ getType(): string;
7
+ getError(): string;
8
+ getFormats(): never[];
9
+ toText(): string;
10
+ toBookdown(): string;
11
+ toHTML(): string;
12
+ getChildren(): never[];
13
+ getParentOf(): Node | undefined;
14
+ copy(): this;
15
+ withChildReplaced(): undefined;
16
+ withContentInRange(): this | undefined;
17
+ }
@@ -1,15 +1,12 @@
1
1
  import BlockNode from './BlockNode';
2
- import type Node from './Node';
3
-
4
2
  export default class ErrorNode extends BlockNode {
5
- #text: string | undefined;
6
- #error: string;
7
- constructor(text: string | undefined, error: string) {
3
+ #text;
4
+ #error;
5
+ constructor(text, error) {
8
6
  super();
9
7
  this.#text = text;
10
8
  this.#error = error;
11
9
  }
12
-
13
10
  getType() {
14
11
  return 'error';
15
12
  }
@@ -19,32 +16,28 @@ export default class ErrorNode extends BlockNode {
19
16
  getFormats() {
20
17
  return [];
21
18
  }
22
-
23
- toText(): string {
19
+ toText() {
24
20
  return '';
25
21
  }
26
- toBookdown(): string {
22
+ toBookdown() {
27
23
  return this.#text ?? '';
28
24
  }
29
25
  toHTML() {
30
26
  return this.#text ?? '';
31
27
  }
32
-
33
28
  getChildren() {
34
29
  return [];
35
30
  }
36
- getParentOf(): Node | undefined {
31
+ getParentOf() {
37
32
  return undefined;
38
33
  }
39
-
40
34
  copy() {
41
- return new ErrorNode(this.#text, this.#error) as this;
35
+ return new ErrorNode(this.#text, this.#error);
42
36
  }
43
-
44
37
  withChildReplaced() {
45
38
  return undefined;
46
39
  }
47
- withContentInRange(): this | undefined {
40
+ withContentInRange() {
48
41
  return this.copy();
49
42
  }
50
43
  }
@@ -0,0 +1,18 @@
1
+ import FormatNode from './FormatNode';
2
+ import AtomNode from './AtomNode';
3
+ import type Node from './Node';
4
+ import type Caret from './Caret';
5
+ import type { CaretRange } from './Caret';
6
+ export default class FootnoteNode extends AtomNode<FormatNode> {
7
+ constructor(content?: FormatNode);
8
+ getType(): string;
9
+ getDefaultCaret(): Caret | undefined;
10
+ toText(): string;
11
+ toBookdown(): string;
12
+ toHTML(): string;
13
+ copy(): this;
14
+ getParentOf(node: Node): Node | undefined;
15
+ withChildReplaced(node: FormatNode, replacement: FormatNode | undefined): this | undefined;
16
+ withMeta(footnote: FormatNode): FootnoteNode;
17
+ withContentInRange(range: CaretRange): this | undefined;
18
+ }
@@ -0,0 +1,47 @@
1
+ import FormatNode from './FormatNode';
2
+ import AtomNode from './AtomNode';
3
+ import TextNode from './TextNode';
4
+ export default class FootnoteNode extends AtomNode {
5
+ constructor(content) {
6
+ super(content === undefined
7
+ ? new FormatNode('', [new TextNode()])
8
+ : content.withTextIfEmpty());
9
+ }
10
+ getType() {
11
+ return 'footnote';
12
+ }
13
+ getDefaultCaret() {
14
+ return this.getMeta().getFirstCaret();
15
+ }
16
+ toText() {
17
+ return this.getMeta().toText();
18
+ }
19
+ toBookdown() {
20
+ return `{${this.getMeta().toBookdown()}}`;
21
+ }
22
+ toHTML() {
23
+ return `(${this.getMeta().toHTML()})`;
24
+ }
25
+ copy() {
26
+ return new FootnoteNode(this.getMeta().copy());
27
+ }
28
+ getParentOf(node) {
29
+ return node === this.getMeta()
30
+ ? this
31
+ : this.getMeta().getParentOf(node);
32
+ }
33
+ withChildReplaced(node, replacement) {
34
+ return node === this.getMeta() && replacement !== undefined
35
+ ? new FootnoteNode(replacement)
36
+ : undefined;
37
+ }
38
+ withMeta(footnote) {
39
+ return new FootnoteNode(footnote);
40
+ }
41
+ withContentInRange(range) {
42
+ const newFormat = this.getMeta().withContentInRange(range);
43
+ if (newFormat === undefined)
44
+ return;
45
+ return this.withMeta(newFormat);
46
+ }
47
+ }
@@ -0,0 +1,60 @@
1
+ import Node from './Node';
2
+ import type ErrorNode from './ErrorNode';
3
+ import TextNode from './TextNode';
4
+ import type Caret from './Caret';
5
+ import { type CaretRange } from './Caret';
6
+ import MetadataNode from './MetadataNode';
7
+ import AtomNode from './AtomNode';
8
+ import type Edit from './Edit';
9
+ export type Format = '' | '*' | '_' | '^' | 'v';
10
+ export type FormatNodeSegmentType = FormatNode | TextNode | ErrorNode | MetadataNode<any> | AtomNode<any>;
11
+ export default class FormatNode extends Node {
12
+ #private;
13
+ constructor(format: Format, segments: FormatNodeSegmentType[]);
14
+ getType(): string;
15
+ getFormat(): Format;
16
+ getSegments(): FormatNodeSegmentType[];
17
+ isEmpty(): boolean;
18
+ isEmptyText(): boolean;
19
+ getLength(): number;
20
+ getParentOf(node: Node): Node | undefined;
21
+ toText(): string;
22
+ toHTML(): string;
23
+ toBookdown(): string;
24
+ getChildren(): FormatNodeSegmentType[];
25
+ getFirstTextNode(): TextNode;
26
+ getLastTextNode(): TextNode;
27
+ copy(): this;
28
+ getTextNodes(): TextNode[];
29
+ getTextAndAtomNodes(): (TextNode | AtomNode<any>)[];
30
+ getAdjacentTextOrAtom(node: TextNode | AtomNode<any>, next: boolean): TextNode | AtomNode<any> | undefined;
31
+ getNextTextOrAtom(node: TextNode | AtomNode<any>): TextNode | AtomNode<any> | undefined;
32
+ getPreviousTextOrAtom(node: TextNode | AtomNode<any>): TextNode | AtomNode<any> | undefined;
33
+ getAdjacentCaret(caret: Caret, next: boolean): Caret | undefined;
34
+ getFirstCaret(): Caret | undefined;
35
+ getLastCaret(): Caret | undefined;
36
+ getSelection(): CaretRange;
37
+ getIndexOfTextNode(node: TextNode): number | undefined;
38
+ getSelectedText(range: CaretRange): string | undefined;
39
+ withTextIfEmpty(): FormatNode;
40
+ withSegmentPrepended(segment: FormatNodeSegmentType): FormatNode;
41
+ withSegmentAppended(segment: FormatNodeSegmentType): FormatNode;
42
+ withSegmentReplaced(segment: FormatNodeSegmentType, replacement: FormatNodeSegmentType): this | undefined;
43
+ withoutSegment(segment: FormatNodeSegmentType): this | undefined;
44
+ withChildReplaced(node: FormatNodeSegmentType, replacement: FormatNodeSegmentType | undefined): this;
45
+ split(caret: Caret): [FormatNode, FormatNode] | undefined;
46
+ withoutRange(range: CaretRange): FormatNode | undefined;
47
+ withFormat(range: CaretRange, format: Format | undefined): FormatNode | undefined;
48
+ withRangeFormatted(range: CaretRange, format: Format | undefined): Edit;
49
+ getFormats(root: Node): Format[];
50
+ withSegmentAt(segment: FormatNodeSegmentType, caret: Caret): FormatNode | undefined;
51
+ withSegmentAtSelection(range: CaretRange, nodeCreator: (text: string) => FormatNodeSegmentType): Edit;
52
+ withoutContentBefore(caret: Caret): FormatNode | undefined;
53
+ withoutContentAfter(caret: Caret): FormatNode | undefined;
54
+ withContentAt(caret: Caret, before: boolean): FormatNode | undefined;
55
+ withContentInRange(range: CaretRange): this | undefined;
56
+ withSegmentsAppended(format: FormatNode): FormatNode;
57
+ withoutAdjacentContent(caret: Caret, next: boolean): Edit | undefined;
58
+ withoutCharacter(caret: Caret, next: boolean): Edit | undefined;
59
+ withNodeInserted(caret: Caret, node: Node): Edit;
60
+ }