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
@@ -1,867 +0,0 @@
1
- import { test, expect } from 'vitest';
2
-
3
- import CalloutNode from './CalloutNode';
4
- import ChapterNode from './ChapterNode';
5
- import CodeNode from './CodeNode';
6
- import EmbedNode from './EmbedNode';
7
- import FootnoteNode from './FootnoteNode';
8
- import FormatNode from './FormatNode';
9
- import ListNode from './ListNode';
10
- import ParagraphNode from './ParagraphNode';
11
- import Parser from './Parser';
12
- import QuoteNode from './QuoteNode';
13
- import RuleNode from './RuleNode';
14
- import TableNode from './TableNode';
15
- import TextNode from './TextNode';
16
-
17
- const firstText = 'First paragraph.';
18
- const firstTextNode = new TextNode(firstText);
19
- const firstFormat = new FormatNode('', [firstTextNode]);
20
- const firstParagraph = new ParagraphNode(0, firstFormat);
21
- const lastText = 'Last paragraph.';
22
- const lastTextNode = new TextNode(lastText);
23
- const lastFormat = new FormatNode('', [lastTextNode]);
24
- const lastParagraph = new ParagraphNode(0, lastFormat);
25
-
26
- const footnoteText = new TextNode('This is my footnote.');
27
- const footnote = new FootnoteNode(new FormatNode('', [footnoteText]));
28
-
29
- const paragraphChapter = new ChapterNode([firstParagraph, lastParagraph]);
30
-
31
- const numberedList = new ListNode([firstFormat, lastFormat], true);
32
- const bulletedList = new ListNode(
33
- [firstFormat.copy(), lastFormat.copy()],
34
- false
35
- );
36
-
37
- const beforeBold = new TextNode('I am a ');
38
- const bold = new TextNode('bold');
39
- const afterBold = new TextNode(' word.');
40
- const boldChapter = new ChapterNode([
41
- new ParagraphNode(
42
- 0,
43
- new FormatNode('', [beforeBold, new FormatNode('*', [bold]), afterBold])
44
- ),
45
- ]);
46
-
47
- const itemOneTextNode = new TextNode('one');
48
- const itemOneFormat = new FormatNode('', [itemOneTextNode]);
49
- const itemTwoTextNode = new TextNode('two');
50
- const itemTwoFormat = new FormatNode('', [itemTwoTextNode]);
51
-
52
- const paragraphListChapter = new ChapterNode([
53
- firstParagraph,
54
- new ListNode([itemOneFormat, itemTwoFormat], true),
55
- lastParagraph,
56
- ]);
57
-
58
- test('Insert a block', () => {
59
- expect(
60
- paragraphChapter
61
- .withBlockInserted(firstParagraph, new RuleNode(), true)
62
- ?.toBookdown()
63
- ).toBe(`-\n\n${firstText}\n\n${lastText}`);
64
- expect(
65
- paragraphChapter
66
- .withBlockInserted(firstParagraph, new RuleNode(), false)
67
- ?.toBookdown()
68
- ).toBe(`${firstText}\n\n-\n\n${lastText}`);
69
- expect(
70
- paragraphChapter
71
- .withBlockInserted(lastParagraph, new RuleNode(), false)
72
- ?.toBookdown()
73
- ).toBe(`${firstText}\n\n${lastText}\n\n-`);
74
- });
75
-
76
- test('Remove a block', () => {
77
- expect(paragraphChapter.withoutBlock(firstParagraph)?.toBookdown()).toBe(
78
- lastText
79
- );
80
- });
81
-
82
- test('Remove all blocks', () => {
83
- expect(
84
- paragraphChapter
85
- .withoutRange({
86
- start: { node: firstTextNode, index: 0 },
87
- end: { node: lastTextNode, index: lastText.length },
88
- })
89
- ?.root.toBookdown()
90
- ).toBe('');
91
- });
92
-
93
- test('Merge adjascent lists', () => {
94
- expect(new ChapterNode([numberedList, bulletedList]).toBookdown()).toBe(
95
- `1. ${firstText}\n2. ${lastText}\n\n* ${firstText}\n* ${lastText}`
96
- );
97
- expect(new ChapterNode([numberedList, numberedList]).toBookdown()).toBe(
98
- `1. ${firstText}\n2. ${lastText}\n3. ${firstText}\n4. ${lastText}`
99
- );
100
- expect(new ChapterNode([bulletedList, bulletedList]).toBookdown()).toBe(
101
- `* ${firstText}\n* ${lastText}\n* ${firstText}\n* ${lastText}`
102
- );
103
- });
104
-
105
- test('Delete across start of paragraph/list boundary', () => {
106
- expect(
107
- paragraphListChapter
108
- .withoutRange({
109
- start: { node: firstTextNode, index: 1 },
110
- end: { node: itemOneTextNode, index: 1 },
111
- })
112
- ?.root.toBookdown()
113
- ).toBe('F\n\nne\n\n1. two\n\nLast paragraph.');
114
- });
115
-
116
- test('Delete across end of paragraph/list boundary', () => {
117
- expect(
118
- paragraphListChapter
119
- .withoutRange({
120
- start: { node: itemOneTextNode, index: 1 },
121
- end: { node: lastTextNode, index: 1 },
122
- })
123
- ?.root.toBookdown()
124
- ).toBe('First paragraph.\n\n1. o\n\nast paragraph.');
125
- });
126
-
127
- test('Format range', () => {
128
- // Bold part of a paragraph.
129
- expect(
130
- paragraphChapter
131
- .withRangeFormatted(
132
- {
133
- start: { node: firstTextNode, index: 6 },
134
- end: { node: firstTextNode, index: 10 },
135
- },
136
- '*'
137
- )
138
- ?.root.toBookdown()
139
- ).toBe(`First *para*graph.\n\n${lastText}`);
140
-
141
- // Remove part of a paragraph.
142
- expect(
143
- paragraphChapter
144
- .withRangeFormatted(
145
- {
146
- start: { node: firstTextNode, index: 6 },
147
- end: { node: firstTextNode, index: 10 },
148
- },
149
- undefined
150
- )
151
- ?.root.toBookdown()
152
- ).toBe(`First graph.\n\n${lastText}`);
153
-
154
- // Unbold the bold part of a paragraph with the selection outside the bold.
155
- expect(
156
- boldChapter
157
- .withRangeFormatted(
158
- {
159
- start: { node: beforeBold, index: beforeBold.getLength() },
160
- end: { node: afterBold, index: 0 },
161
- },
162
- ''
163
- )
164
- ?.root.toBookdown()
165
- ).toBe(`I am a bold word.`);
166
-
167
- // Unbold the bold part of a paragraph with the selection inside the bold.
168
- expect(
169
- boldChapter
170
- .withRangeFormatted(
171
- {
172
- start: { node: bold, index: 0 },
173
- end: { node: bold, index: bold.getLength() },
174
- },
175
- ''
176
- )
177
- ?.root.toBookdown()
178
- ).toBe(`I am a bold word.`);
179
-
180
- // Expand the bold part of a paragraph.
181
- expect(
182
- boldChapter
183
- .withRangeFormatted(
184
- {
185
- start: {
186
- node: beforeBold,
187
- index: beforeBold.getLength() - 2,
188
- },
189
- end: { node: afterBold, index: 0 },
190
- },
191
- '*'
192
- )
193
- ?.root.toBookdown()
194
- ).toBe(`I am *a bold* word.`);
195
-
196
- // Delete across a paragraph boundary.
197
- expect(
198
- paragraphChapter
199
- .withoutRange({
200
- start: { node: firstTextNode, index: 6 },
201
- end: { node: lastTextNode, index: 5 },
202
- })
203
- ?.root.toBookdown()
204
- ).toBe(`First paragraph.`);
205
-
206
- // Bold across a paragraph boundary.
207
- expect(
208
- paragraphChapter
209
- .withRangeFormatted(
210
- {
211
- start: { node: firstTextNode, index: 6 },
212
- end: { node: lastTextNode, index: 4 },
213
- },
214
- '*'
215
- )
216
- ?.root.toBookdown()
217
- ).toBe(`First *paragraph.*\n\n*Last* paragraph.`);
218
- });
219
-
220
- test('Split selection', () => {
221
- const caret = { node: firstTextNode, index: 5 };
222
- const chapter = new ChapterNode([firstParagraph]);
223
-
224
- // Split a paragraph
225
- const split = chapter.withSelectionSplit({ start: caret, end: caret });
226
- expect(split?.root.toBookdown()).toBe('First\n\n paragraph.');
227
- expect(split?.range.start.node.toBookdown()).toBe(' paragraph.');
228
- expect(split?.range.start.index).toBe(0);
229
-
230
- // Delete a selection and then split
231
- const selectSplit = chapter.withSelectionSplit({
232
- start: { node: firstTextNode, index: 5 },
233
- end: { node: firstTextNode, index: 10 },
234
- });
235
- expect(selectSplit?.root.toBookdown()).toBe('First\n\ngraph.');
236
-
237
- // Split at the beginning
238
- const startCaret = { node: firstTextNode, index: 0 };
239
- const startSplit = chapter.withSelectionSplit({
240
- start: startCaret,
241
- end: startCaret,
242
- });
243
- expect(startSplit?.root.toBookdown()).toBe(`\n\n${firstText}`);
244
-
245
- // Split at the end
246
- const endCaret = { node: firstTextNode, index: 16 };
247
- const endSplit = chapter.withSelectionSplit({
248
- start: endCaret,
249
- end: endCaret,
250
- });
251
- expect(endSplit?.root.toBookdown()).toBe(`${firstText}\n\n`);
252
- });
253
-
254
- test('Without atom', () => {
255
- const chapterAtomEnd = new ChapterNode([
256
- new ParagraphNode(0, new FormatNode('', [firstFormat, footnote])),
257
- ]);
258
- expect(chapterAtomEnd.withoutAtom(footnote)?.root.toBookdown()).toBe(
259
- `${firstText}`
260
- );
261
-
262
- const chapterAtomBegin = new ChapterNode([
263
- new ParagraphNode(0, new FormatNode('', [footnote, firstFormat])),
264
- ]);
265
- expect(chapterAtomBegin.withoutAtom(footnote)?.root.toBookdown()).toBe(
266
- `${firstText}`
267
- );
268
-
269
- const chapterAtomMiddle = new ChapterNode([
270
- new ParagraphNode(
271
- 0,
272
- new FormatNode('', [firstFormat, footnote, lastFormat])
273
- ),
274
- ]);
275
- expect(chapterAtomMiddle.withoutAtom(footnote)?.root.toBookdown()).toBe(
276
- `${firstText}${lastText}`
277
- );
278
- });
279
-
280
- test('Insert atom', () => {
281
- const endOfFirst = {
282
- node: firstTextNode,
283
- index: firstTextNode.getLength(),
284
- };
285
-
286
- // Insert empty footnote
287
- expect(
288
- paragraphChapter
289
- .withSegmentAtSelection(
290
- { start: endOfFirst, end: endOfFirst },
291
- (text) =>
292
- new FootnoteNode(new FormatNode('', [new TextNode(text)]))
293
- )
294
- ?.root.toBookdown()
295
- ).toBe(`${firstText}{}\n\n${lastText}`);
296
-
297
- // Convert selection to footnote
298
- expect(
299
- paragraphChapter
300
- .withSegmentAtSelection(
301
- {
302
- start: { node: firstTextNode, index: 6 },
303
- end: { node: firstTextNode, index: 15 },
304
- },
305
- (text) =>
306
- new FootnoteNode(new FormatNode('', [new TextNode(text)]))
307
- )
308
- ?.root.toBookdown()
309
- ).toBe(`First {paragraph}.\n\n${lastText}`);
310
- });
311
-
312
- test('Convert paragraphs to lists', () => {
313
- // Convert a single paragraph to a list item.
314
- expect(
315
- paragraphChapter
316
- .withParagraphsAsLists(
317
- {
318
- start: { node: firstTextNode, index: 0 },
319
- end: { node: firstTextNode, index: 0 },
320
- },
321
- false
322
- )
323
- ?.toBookdown()
324
- ).toBe(`* ${firstText}\n\n${lastText}`);
325
-
326
- // Convert two paragraphs to a single list
327
- expect(
328
- paragraphChapter
329
- .withParagraphsAsLists(
330
- {
331
- start: { node: firstTextNode, index: 0 },
332
- end: { node: lastTextNode, index: 0 },
333
- },
334
- true
335
- )
336
- ?.toBookdown()
337
- ).toBe(`1. ${firstText}\n2. ${lastText}`);
338
-
339
- // Convert paragraphs that span a blocks boundary to separate lists.
340
- expect(
341
- new ChapterNode([firstParagraph, new CalloutNode([lastParagraph])])
342
- .withParagraphsAsLists(
343
- {
344
- start: { node: firstTextNode, index: 0 },
345
- end: { node: lastTextNode, index: 0 },
346
- },
347
- true
348
- )
349
- ?.toBookdown()
350
- ).toBe(`1. ${firstText}\n\n=\n1. ${lastText}\n=`);
351
-
352
- // Convert non-paragraphs to lists
353
- expect(
354
- new ChapterNode([numberedList]).withParagraphsAsLists(
355
- {
356
- start: { node: firstTextNode, index: 0 },
357
- end: { node: lastTextNode, index: 0 },
358
- },
359
- true
360
- )
361
- ).toBeUndefined();
362
- });
363
-
364
- test('Convert lists to paragraphs', () => {
365
- // Convert lists to paragraphs
366
- expect(
367
- new ChapterNode([numberedList])
368
- .withListsAsParagraphs({
369
- start: { node: firstTextNode, index: 0 },
370
- end: { node: firstTextNode, index: 5 },
371
- })
372
- ?.toBookdown()
373
- ).toBe(`${firstText}\n\n${lastText}`);
374
-
375
- // Convert both items to paragraphs.
376
- expect(
377
- new ChapterNode([numberedList])
378
- .withListsAsParagraphs({
379
- start: { node: firstTextNode, index: 0 },
380
- end: { node: lastTextNode, index: 5 },
381
- })
382
- ?.toBookdown()
383
- ).toBe(`${firstText}\n\n${lastText}`);
384
-
385
- // Convert non-list to paragraphs.
386
- expect(
387
- paragraphChapter
388
- .withListsAsParagraphs({
389
- start: { node: firstTextNode, index: 0 },
390
- end: { node: lastTextNode, index: 5 },
391
- })
392
- ?.toBookdown()
393
- ).toBeUndefined();
394
-
395
- // Convert two contiguous lists to paragraphs.
396
- expect(
397
- new ChapterNode([numberedList, bulletedList])
398
- .withListsAsParagraphs({
399
- start: { node: firstTextNode, index: 0 },
400
- end: {
401
- node: bulletedList
402
- .getFirstItem()
403
- ?.getFirstTextNode() as TextNode,
404
- index: 0,
405
- },
406
- })
407
- ?.toBookdown()
408
- ).toBe(`${firstText}\n\n${lastText}\n\n${firstText}\n\n${lastText}`);
409
-
410
- // Convert two non-contiguous lists to paragraphs.
411
- expect(
412
- new ChapterNode([
413
- numberedList,
414
- new ParagraphNode(
415
- 0,
416
- new FormatNode('', [new TextNode('Intruder!')])
417
- ),
418
- bulletedList,
419
- ])
420
- .withListsAsParagraphs({
421
- start: { node: firstTextNode, index: 0 },
422
- end: {
423
- node: bulletedList
424
- .getFirstItem()
425
- ?.getFirstTextNode() as TextNode,
426
- index: 0,
427
- },
428
- })
429
- ?.toBookdown()
430
- ).toBe(
431
- `${firstText}\n\n${lastText}\n\nIntruder!\n\n${firstText}\n\n${lastText}`
432
- );
433
-
434
- // Convert various subparts of a nested list into paragraphs.
435
- const oneText = new TextNode('one');
436
- const twoText = new TextNode('two');
437
- const threeText = new TextNode('three');
438
- const fourText = new TextNode('four');
439
- const list = new ListNode(
440
- [
441
- new FormatNode('', [oneText]),
442
- new ListNode(
443
- [
444
- new FormatNode('', [twoText]),
445
- new FormatNode('', [threeText]),
446
- ],
447
- true
448
- ),
449
- new FormatNode('', [fourText]),
450
- ],
451
- true
452
- );
453
-
454
- expect(
455
- new ChapterNode([list])
456
- .withListsAsParagraphs({
457
- start: { node: oneText, index: 0 },
458
- end: { node: fourText, index: 0 },
459
- })
460
- ?.toBookdown()
461
- ).toBe(
462
- `${oneText.getText()}\n\n${twoText.getText()}\n\n${threeText.getText()}\n\n${fourText.getText()}`
463
- );
464
-
465
- expect(
466
- new ChapterNode([list])
467
- .withListsAsParagraphs({
468
- start: { node: oneText, index: 0 },
469
- end: { node: twoText, index: 0 },
470
- })
471
- ?.toBookdown()
472
- ).toBe(
473
- `${oneText.getText()}\n\n${twoText.getText()}\n\n${threeText.getText()}\n\n${fourText.getText()}`
474
- );
475
-
476
- expect(
477
- new ChapterNode([list])
478
- .withListsAsParagraphs({
479
- start: { node: twoText, index: 0 },
480
- end: { node: threeText, index: 0 },
481
- })
482
- ?.toBookdown()
483
- ).toBe(
484
- `${oneText.getText()}\n\n${twoText.getText()}\n\n${threeText.getText()}\n\n${fourText.getText()}`
485
- );
486
- });
487
-
488
- test('Indent/unindent list items', () => {
489
- expect(
490
- new ChapterNode([numberedList])
491
- .withListsIndented(
492
- {
493
- start: { node: firstTextNode, index: 0 },
494
- end: { node: firstTextNode, index: 0 },
495
- },
496
- true
497
- )
498
- ?.toBookdown()
499
- ).toBe('1.. First paragraph.\n2. Last paragraph.');
500
-
501
- const indented = new ChapterNode([numberedList]).withListsIndented(
502
- {
503
- start: { node: firstTextNode, index: 0 },
504
- end: { node: lastTextNode, index: 0 },
505
- },
506
- true
507
- );
508
- expect(indented?.toBookdown()).toBe(
509
- '1.. First paragraph.\n2.. Last paragraph.'
510
- );
511
-
512
- expect(
513
- indented
514
- ?.withListsIndented(
515
- {
516
- start: { node: firstTextNode, index: 0 },
517
- end: { node: lastTextNode, index: 0 },
518
- },
519
- false
520
- )
521
- ?.toBookdown()
522
- ).toBe('1. First paragraph.\n2. Last paragraph.');
523
- });
524
-
525
- test('Style lists', () => {
526
- expect(
527
- new ChapterNode([numberedList])
528
- .withListAsStyle(numberedList, false)
529
- ?.toBookdown()
530
- ).toBe(`* ${firstText}\n* ${lastText}`);
531
- });
532
-
533
- test('Backspace/delete', () => {
534
- const chapter = new ChapterNode([firstParagraph, lastParagraph]);
535
-
536
- expect(
537
- chapter
538
- .withoutAdjacentContent({ node: lastTextNode, index: 1 }, true)
539
- ?.root.toBookdown()
540
- ).toBe(`${firstText}\n\nLst paragraph.`);
541
- expect(
542
- chapter
543
- .withoutAdjacentContent({ node: lastTextNode, index: 1 }, false)
544
- ?.root.toBookdown()
545
- ).toBe(`${firstText}\n\nast paragraph.`);
546
- expect(
547
- chapter
548
- .withoutAdjacentContent({ node: lastTextNode, index: 0 }, false)
549
- ?.root.toBookdown()
550
- ).toBe(`${firstText}${lastText}`);
551
- expect(
552
- chapter
553
- .withoutAdjacentContent(
554
- { node: firstTextNode, index: firstTextNode.getLength() },
555
- true
556
- )
557
- ?.root.toBookdown()
558
- ).toBe(`${firstText}${lastText}`);
559
- expect(
560
- chapter
561
- .withoutAdjacentContent({ node: firstTextNode, index: 0 }, false)
562
- ?.root.toBookdown()
563
- ).toBeUndefined();
564
-
565
- const beforeText = new TextNode('Before');
566
- const beforeParagraph = new ParagraphNode(
567
- 0,
568
- new FormatNode('', [beforeText])
569
- );
570
- const afterText = new TextNode('After');
571
- const afterParagraph = new ParagraphNode(
572
- 0,
573
- new FormatNode('', [afterText])
574
- );
575
- const listChapter = new ChapterNode([
576
- beforeParagraph,
577
- numberedList,
578
- afterParagraph,
579
- ]);
580
-
581
- // Do nothing when backspacing at the beginning of a list.
582
- expect(
583
- listChapter
584
- .withoutAdjacentContent({ node: firstTextNode, index: 0 }, false)
585
- ?.root.toBookdown()
586
- ).toBeUndefined();
587
- // Delete a character in a list
588
- expect(
589
- listChapter
590
- .withoutAdjacentContent({ node: firstTextNode, index: 0 }, true)
591
- ?.root.toBookdown()
592
- ).toBe(`Before\n\n1. irst paragraph.\n2. ${lastText}\n\nAfter`);
593
- // Can't forward delete into a list
594
- expect(
595
- listChapter
596
- .withoutAdjacentContent(
597
- { node: beforeText, index: beforeText.getLength() },
598
- true
599
- )
600
- ?.root.toBookdown()
601
- ).toBe(`Before${firstText}\n\n1. ${lastText}\n\nAfter`);
602
-
603
- // Backspace a paragraph into the last list item
604
- expect(
605
- listChapter
606
- .withoutAdjacentContent({ node: afterText, index: 0 }, false)
607
- ?.root.toBookdown()
608
- ).toBe(`Before\n\n1. ${firstText}\n2. ${lastText}After`);
609
-
610
- // Select two list items for deletion.
611
- expect(
612
- listChapter
613
- .withoutRange({
614
- start: { node: firstTextNode, index: 0 },
615
- end: { node: lastTextNode, index: 5 },
616
- })
617
- ?.root.toBookdown()
618
- ).toBe(`Before\n\n1. paragraph.\n\nAfter`);
619
-
620
- // Backspace over a block
621
- const quoteChapter = new ChapterNode([new QuoteNode([]), firstParagraph]);
622
- expect(
623
- quoteChapter
624
- .withoutAdjacentContent({ node: firstTextNode, index: 0 }, false)
625
- ?.root.toBookdown()
626
- ).toBe(`${firstText}`);
627
- });
628
-
629
- test('Copy/paste', () => {
630
- // Build a document with everything.
631
- const sentence1 = new TextNode('Hello, I am a sentence.');
632
- const paragraph1 = new ParagraphNode(0, new FormatNode('', [sentence1]));
633
-
634
- const sentence2 = new TextNode('Hello, I am another sentence.');
635
- const boldSentence3 = new TextNode(' Can you believe my size?');
636
- const paragraph2 = new ParagraphNode(
637
- 0,
638
- new FormatNode('', [sentence2, new FormatNode('*', [boldSentence3])])
639
- );
640
-
641
- const sentence3 = new TextNode('Lonely last.');
642
- const paragraph3 = new ParagraphNode(0, new FormatNode('', [sentence3]));
643
-
644
- const imageCaption = new TextNode('no image');
645
- const imageCredit = new TextNode('Amy');
646
- const image = new EmbedNode(
647
- 'nope',
648
- 'nothing',
649
- new FormatNode('', [imageCaption]),
650
- new FormatNode('', [imageCredit])
651
- );
652
-
653
- const js = new TextNode('let a = 1;');
654
- const code = new CodeNode(
655
- js,
656
- 'js',
657
- '|',
658
- new FormatNode('', [new TextNode('assignment')])
659
- );
660
-
661
- const item1 = new TextNode('one');
662
- const item1a = new TextNode('one a');
663
- const item2 = new TextNode('two');
664
- const item3 = new TextNode('three');
665
- const list = new ListNode(
666
- [
667
- new FormatNode('', [item1]),
668
- new ListNode([new FormatNode('', [item1a])], true),
669
- new FormatNode('', [item2]),
670
- new FormatNode('', [item3]),
671
- ],
672
- true
673
- );
674
-
675
- const afterList = new TextNode('Post-list');
676
- const afterListParagraph = new ParagraphNode(
677
- 0,
678
- new FormatNode('', [afterList])
679
- );
680
-
681
- const cellr1c1 = new TextNode('a');
682
- const cellr1c2 = new TextNode('b');
683
- const cellr1c3 = new TextNode('c');
684
- const cellr2c1 = new TextNode('d');
685
- const cellr2c2 = new TextNode('e');
686
- const cellr2c3 = new TextNode('f');
687
- const cellr3c1 = new TextNode('g');
688
- const cellr3c2 = new TextNode('h');
689
- const cellr3c3 = new TextNode('i');
690
- const table = new TableNode([
691
- [
692
- new FormatNode('', [cellr1c1]),
693
- new FormatNode('', [cellr1c2]),
694
- new FormatNode('', [cellr1c3]),
695
- ],
696
- [
697
- new FormatNode('', [cellr2c1]),
698
- new FormatNode('', [cellr2c2]),
699
- new FormatNode('', [cellr2c3]),
700
- ],
701
- [
702
- new FormatNode('', [cellr3c1]),
703
- new FormatNode('', [cellr3c2]),
704
- new FormatNode('', [cellr3c3]),
705
- ],
706
- ]);
707
-
708
- const calloutOne = new TextNode('one');
709
- const calloutTwo = new TextNode('two');
710
- const calloutThree = new TextNode('three');
711
- const callout = new CalloutNode([
712
- new ParagraphNode(0, new FormatNode('', [calloutOne])),
713
- new ParagraphNode(0, new FormatNode('', [calloutTwo])),
714
- new ParagraphNode(0, new FormatNode('', [calloutThree])),
715
- ]);
716
-
717
- const quoteOne = new TextNode("I'm tired");
718
- const quoteCredit = new TextNode('Boomy');
719
- const quote = new QuoteNode(
720
- [new ParagraphNode(0, new FormatNode('', [quoteOne]))],
721
- new FormatNode('', [quoteCredit])
722
- );
723
-
724
- const chapter = new ChapterNode([
725
- paragraph1,
726
- paragraph2,
727
- paragraph3,
728
- image,
729
- code,
730
- list,
731
- afterListParagraph,
732
- table,
733
- callout,
734
- quote,
735
- ]);
736
-
737
- const partialSegment = chapter.copyRange({
738
- start: { node: sentence1, index: 12 },
739
- end: { node: sentence1, index: 22 },
740
- });
741
- const reversedPartialSegment = chapter.copyRange({
742
- start: { node: sentence1, index: 22 },
743
- end: { node: sentence1, index: 12 },
744
- });
745
- const consecutivePartialParagraphs = chapter.copyRange({
746
- start: { node: sentence1, index: 12 },
747
- end: { node: sentence2, index: 5 },
748
- });
749
- const threeParagraphs = chapter.copyRange({
750
- start: { node: sentence1, index: sentence1.getLength() - 1 },
751
- end: { node: sentence3, index: 6 },
752
- });
753
-
754
- // Paragraphs
755
- expect(partialSegment?.toBookdown()).toBe('a sentence');
756
- expect(reversedPartialSegment?.toBookdown()).toBe('a sentence');
757
- expect(consecutivePartialParagraphs?.toBookdown()).toBe(
758
- 'a sentence.\n\nHello'
759
- );
760
- expect(threeParagraphs?.toBookdown()).toBe(
761
- `.\n\n${sentence2.toBookdown()}*${boldSentence3.toBookdown()}*\n\nLonely`
762
- );
763
-
764
- const partialImageCaption = chapter.copyRange({
765
- start: { node: imageCaption, index: 3 },
766
- end: { node: imageCaption, index: 8 },
767
- });
768
- const partialImageCredit = chapter.copyRange({
769
- start: { node: imageCredit, index: 2 },
770
- end: { node: imageCredit, index: 3 },
771
- });
772
- const imageCaptionAndCredit = chapter.copyRange({
773
- start: { node: imageCaption, index: 3 },
774
- end: { node: imageCredit, index: 1 },
775
- });
776
- const paragraphAndImage = chapter.copyRange({
777
- start: { node: sentence3, index: 7 },
778
- end: { node: imageCaption, index: 2 },
779
- });
780
-
781
- // Images
782
- expect(partialImageCaption?.toBookdown()).toBe(`image`);
783
- expect(partialImageCredit?.toBookdown()).toBe(`y`);
784
- expect(imageCaptionAndCredit?.toBookdown()).toBe(`|nope|nothing|image|A|`);
785
- expect(paragraphAndImage?.toBookdown()).toBe(`last.\n\n|nope|nothing|no||`);
786
-
787
- const imageAndCode = chapter.copyRange({
788
- start: { node: imageCredit, index: 0 },
789
- end: { node: js, index: 3 },
790
- });
791
-
792
- // Code
793
- expect(imageAndCode?.toBookdown()).toBe(
794
- `|nope|nothing||Amy|\n\n\`js\nlet\n\``
795
- );
796
-
797
- const partialList = chapter.copyRange({
798
- start: { node: item1a, index: 4 },
799
- end: { node: item2, index: 1 },
800
- });
801
- const partialListAndParagraph = chapter.copyRange({
802
- start: { node: item2, index: 0 },
803
- end: { node: afterList, index: 4 },
804
- });
805
-
806
- // Lists
807
- expect(partialList?.toBookdown()).toBe(`1.. a\n2. t`);
808
- expect(partialListAndParagraph?.toBookdown()).toBe(
809
- `1. two\n2. three\n\nPost`
810
- );
811
-
812
- // Tables
813
- const partialTable = chapter.copyRange({
814
- start: { node: cellr2c2, index: 0 },
815
- end: { node: cellr3c2, index: 1 },
816
- });
817
- const partialTableAndParagraph = chapter.copyRange({
818
- start: { node: afterList, index: 0 },
819
- end: { node: cellr1c2, index: 1 },
820
- });
821
-
822
- expect(partialTable?.toBookdown()).toBe(`,|e|f\n,g|h|\n`);
823
- expect(partialTableAndParagraph?.toBookdown()).toBe(`Post-list\n\n,a|b|\n`);
824
-
825
- // Callouts
826
- const partialCallout = chapter.copyRange({
827
- start: { node: calloutOne, index: 0 },
828
- end: { node: calloutTwo, index: 1 },
829
- });
830
- const partialTableAndCallout = chapter.copyRange({
831
- start: { node: cellr3c3, index: 0 },
832
- end: { node: calloutTwo, index: 3 },
833
- });
834
-
835
- expect(partialCallout?.toBookdown()).toBe(`=\none\n\nt\n=`);
836
- expect(partialTableAndCallout?.toBookdown()).toBe(
837
- `,||i\n\n\n=\none\n\ntwo\n=`
838
- );
839
-
840
- // Quote
841
- const partialCalloutAndQuote = chapter.copyRange({
842
- start: { node: calloutThree, index: 0 },
843
- end: { node: quoteOne, index: 9 },
844
- });
845
-
846
- expect(partialCalloutAndQuote?.toBookdown()).toBe(
847
- `=\nthree\n=\n\n"\nI'm tired\n"`
848
- );
849
- });
850
-
851
- test.each([
852
- ['Hi.\n\nI am paragraphs.', '<p>Hi.</p><p>I am paragraphs.</p>'],
853
- [
854
- '* I am one\n\n* I am two\n\n* I am three',
855
- '<ul><li>I am one</li><li>I am two</li><li>I am three</li></ul>',
856
- ],
857
- [
858
- '1. I am one\n\n2. I am two\n\n3. I am three',
859
- '<ol><li>I am one</li><li>I am two</li><li>I am three</li></ol>',
860
- ],
861
- [
862
- '|image.jpg|A picture|A caption|A credit|',
863
- '<img src="image.jpg" alt="A picture" />',
864
- ],
865
- ])('%s to HTML', (input: string, output: string) => {
866
- expect(Parser.parseChapter(undefined, input).toHTML()).toBe(output);
867
- });