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,79 +0,0 @@
1
- import BlocksNode from './BlocksNode';
2
- import type BlockNode from './BlockNode';
3
- import type Position from './Position';
4
-
5
- export default class CalloutNode extends BlocksNode {
6
- readonly #position: Position;
7
-
8
- constructor(elements: BlockNode[], position: Position = '|') {
9
- super(elements);
10
- this.#position = position;
11
- }
12
-
13
- getType() {
14
- return 'callout';
15
- }
16
-
17
- getPosition() {
18
- return this.#position;
19
- }
20
-
21
- toText(): string {
22
- return this.getBlocks()
23
- .map((element) => element.toText())
24
- .join(' ');
25
- }
26
-
27
- toHTML(): string {
28
- return `<hr/>${super.toHTML()}<hr/>`;
29
- }
30
-
31
- toBookdown(): string {
32
- return (
33
- '=\n' +
34
- this.getBlocks()
35
- .map((element) => element.toBookdown())
36
- .join('\n\n') +
37
- '\n=' +
38
- (this.#position !== '|' ? this.#position : '')
39
- );
40
- }
41
-
42
- getChildren() {
43
- return this.getBlocks();
44
- }
45
-
46
- copy() {
47
- return new CalloutNode(
48
- this.getBlocks().map((e) => e.copy()),
49
- this.#position
50
- ) as this;
51
- }
52
-
53
- withPosition(position: Position): CalloutNode {
54
- return new CalloutNode(this.getBlocks(), position);
55
- }
56
-
57
- withChildReplaced(node: BlockNode, replacement: BlockNode | undefined) {
58
- const index = this.getBlocks().indexOf(node);
59
- if (index < 0) return;
60
-
61
- const blocks =
62
- replacement === undefined
63
- ? [
64
- ...this.getBlocks().slice(0, index),
65
- ...this.getBlocks().slice(index + 1),
66
- ]
67
- : [
68
- ...this.getBlocks().slice(0, index),
69
- replacement,
70
- ...this.getBlocks().slice(index + 1),
71
- ];
72
-
73
- return new CalloutNode(blocks, this.#position) as this;
74
- }
75
-
76
- create(blocks: BlockNode[]): CalloutNode {
77
- return new CalloutNode(blocks, this.#position);
78
- }
79
- }
@@ -1,169 +0,0 @@
1
- import type Bookkeeping from './Bookkeeping';
2
- import type BlockNode from './BlockNode';
3
- import ErrorNode from './ErrorNode';
4
- import type TextNode from './TextNode';
5
- import FootnoteNode from './FootnoteNode';
6
- import EmbedNode from './EmbedNode';
7
- import ParagraphNode from './ParagraphNode';
8
- import type AtomNode from './AtomNode';
9
- import CitationsNode from './CitationsNode';
10
- import LabelNode from './LabelNode';
11
- import CommentNode from './CommentNode';
12
- import BlocksNode from './BlocksNode';
13
-
14
- export default class ChapterNode extends BlocksNode {
15
- #metadata: Bookkeeping;
16
-
17
- constructor(blocks: BlockNode[], metadata?: Bookkeeping) {
18
- super(blocks);
19
-
20
- // Content extracted during parsing.
21
- this.#metadata = metadata === undefined ? { symbols: {} } : metadata;
22
- }
23
-
24
- getType() {
25
- return 'chapter';
26
- }
27
- getChapter() {
28
- return this;
29
- }
30
-
31
- create(blocks: BlockNode[]): BlocksNode {
32
- return new ChapterNode(blocks, this.#metadata);
33
- }
34
-
35
- getErrors(): ErrorNode[] {
36
- return this.getNodes().filter(
37
- (n) => n instanceof ErrorNode
38
- ) as ErrorNode[];
39
- }
40
- getCitations(): Set<string> {
41
- const citations = new Set<string>();
42
- (
43
- this.getNodes().filter(
44
- (n) => n instanceof CitationsNode
45
- ) as CitationsNode[]
46
- ).forEach((cites) =>
47
- cites.getMeta().forEach((citationID) => citations.add(citationID))
48
- );
49
- return citations;
50
- }
51
- getFootnotes(): FootnoteNode[] {
52
- return this.getNodes().filter(
53
- (n) => n instanceof FootnoteNode
54
- ) as FootnoteNode[];
55
- }
56
- getHeaders(): ParagraphNode[] {
57
- return this.getNodes().filter(
58
- (n) => n instanceof ParagraphNode && n.getLevel() > 0
59
- ) as ParagraphNode[];
60
- }
61
- getEmbeds(): EmbedNode[] {
62
- return this.getNodes().filter(
63
- (n) => n instanceof EmbedNode
64
- ) as EmbedNode[];
65
- }
66
- getComments(): CommentNode[] {
67
- return this.getNodes().filter(
68
- (n) => n instanceof CommentNode
69
- ) as CommentNode[];
70
- }
71
-
72
- getLabels(): LabelNode[] {
73
- return this.getNodes().filter(
74
- (n) => n instanceof LabelNode
75
- ) as LabelNode[];
76
- }
77
-
78
- hasLabel(labelID: string) {
79
- return (
80
- this.getLabels().find((label) => label.getMeta() === labelID) !==
81
- undefined
82
- );
83
- }
84
-
85
- getCitationNumber(citationID: string) {
86
- const index = Array.from(this.getCitations())
87
- .sort()
88
- .indexOf(citationID);
89
- return index < 0 ? null : index + 1;
90
- }
91
-
92
- toText(): string {
93
- return this.getBlocks()
94
- .map((block) => block.toText())
95
- .join(' ');
96
- }
97
-
98
- toBookdown(): string {
99
- // Render the symbols then all the blocks
100
- return (
101
- Object.keys(this.#metadata.symbols)
102
- .sort()
103
- .map((name) => `@${name}: ${this.#metadata.symbols[name]}\n\n`)
104
- .join('') +
105
- this.getBlocks()
106
- .map((b) => b.toBookdown())
107
- .join('\n\n')
108
- );
109
- }
110
-
111
- getNextTextOrAtom(
112
- node: TextNode | AtomNode<any>
113
- ): TextNode | AtomNode<any> | undefined {
114
- // Otherwise, find the next text node after this one.
115
- const nodes = this.getTextAndAtomNodes();
116
- const index = nodes.indexOf(node);
117
- return index === undefined
118
- ? undefined
119
- : index < nodes.length - 1
120
- ? nodes[index + 1]
121
- : undefined;
122
- }
123
-
124
- getPreviousTextOrAtom(
125
- node: TextNode | AtomNode<any>
126
- ): TextNode | AtomNode<any> | undefined {
127
- // Otherwise, find the next text node after this one.
128
- const nodes = this.getTextAndAtomNodes();
129
- const index = nodes.indexOf(node);
130
- return index === undefined
131
- ? undefined
132
- : index > 0
133
- ? nodes[index - 1]
134
- : undefined;
135
- }
136
-
137
- getChildren() {
138
- return this.getBlocks();
139
- }
140
-
141
- withChildReplaced(node: BlockNode, replacement: BlockNode | undefined) {
142
- const index = this.getBlocks().indexOf(node);
143
-
144
- /// If we couldn't find the requested node, don't change anything.
145
- if (index < 0) return undefined;
146
-
147
- // Make a new blocks node, assigning and re-parenting the replacement.
148
- const blocks =
149
- replacement === undefined
150
- ? [
151
- ...this.getBlocks().slice(0, index),
152
- ...this.getBlocks().slice(index + 1),
153
- ]
154
- : [
155
- ...this.getBlocks().slice(0, index),
156
- replacement,
157
- ...this.getBlocks().slice(index + 1),
158
- ];
159
-
160
- return new ChapterNode(blocks, this.#metadata) as this;
161
- }
162
-
163
- copy() {
164
- return new ChapterNode(
165
- this.getBlocks().map((b) => b.copy()),
166
- this.#metadata
167
- ) as this;
168
- }
169
- }
@@ -1,61 +0,0 @@
1
- import AtomNode from './AtomNode';
2
- import type Caret from './Caret';
3
- import type { CaretRange } from './Caret';
4
- import FormatNode from './FormatNode';
5
- import type Node from './Node';
6
-
7
- export default class CommentNode extends AtomNode<FormatNode> {
8
- constructor(comment: FormatNode) {
9
- super(comment.withTextIfEmpty());
10
- }
11
-
12
- getType() {
13
- return 'comment';
14
- }
15
- toText(): string {
16
- return '';
17
- }
18
- toHTML(): string {
19
- return `(${this.getMeta().toHTML()})`;
20
- }
21
-
22
- getDefaultCaret(): Caret | undefined {
23
- return this.getMeta().getFirstCaret();
24
- }
25
-
26
- toBookdown(format?: FormatNode): string {
27
- const previousText = format?.getPreviousTextOrAtom(this)?.toBookdown();
28
- // Insert a space before the % if there isn't one before this.
29
- return `${
30
- previousText?.endsWith(' ') ? '' : ' '
31
- }%${this.getMeta().toBookdown()}%`;
32
- }
33
-
34
- copy() {
35
- return new CommentNode(this.getMeta().copy()) as this;
36
- }
37
-
38
- withChildReplaced(node: Node, replacement: Node | undefined) {
39
- return node instanceof FormatNode &&
40
- replacement instanceof FormatNode &&
41
- node === this.getMeta()
42
- ? (new CommentNode(replacement) as this)
43
- : undefined;
44
- }
45
-
46
- getParentOf(node: Node): Node | undefined {
47
- return node === this.getMeta()
48
- ? this
49
- : this.getMeta().getParentOf(node);
50
- }
51
-
52
- withMeta(comment: FormatNode) {
53
- return new CommentNode(comment);
54
- }
55
-
56
- withContentInRange(range: CaretRange): this | undefined {
57
- const newFormat = this.getMeta().withContentInRange(range);
58
- if (newFormat === undefined) return;
59
- return this.withMeta(newFormat) as this;
60
- }
61
- }
@@ -1,6 +0,0 @@
1
- import type { CaretRange } from './Caret';
2
- import type Node from './Node';
3
-
4
- // Edits can either result in no change (represented by undefined) or a new root node and a selection in it.
5
- type Edit = undefined | { root: Node; range: CaretRange };
6
- export default Edit;
@@ -1,257 +0,0 @@
1
- import type Node from './Node';
2
- import type Position from './Position';
3
- import FormatNode from './FormatNode';
4
- import TextNode from './TextNode';
5
- import BlockNode from './BlockNode';
6
- import type { CaretRange } from './Caret';
7
- import type RootNode from './RootNode';
8
- import type Caret from './Caret';
9
-
10
- // This is what we use to encode URLs in the URL field of the embed node.
11
- const URL_SEPARATOR = '*';
12
-
13
- export default class EmbedNode extends BlockNode {
14
- /**
15
- * 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.
16
- * These are used for responsive rendering and to limit bandwidth usage. Any image URLs after the second are ignored.
17
- */
18
- readonly #urls: string;
19
- readonly #description: string;
20
- readonly #caption: FormatNode;
21
- readonly #credit: FormatNode;
22
- readonly #position: Position;
23
-
24
- constructor(
25
- url: string,
26
- description: string,
27
- caption?: FormatNode,
28
- credit?: FormatNode,
29
- position: Position = '|'
30
- ) {
31
- super();
32
-
33
- this.#urls = url;
34
- this.#description = description;
35
- this.#caption =
36
- caption === undefined
37
- ? new FormatNode('', [new TextNode()])
38
- : caption.withTextIfEmpty();
39
- this.#credit =
40
- credit == undefined
41
- ? new FormatNode('', [new TextNode()])
42
- : credit.withTextIfEmpty();
43
- this.#position = position;
44
- }
45
-
46
- getType() {
47
- return 'embed';
48
- }
49
-
50
- isVideo() {
51
- return (
52
- this.#urls.includes('https://www.youtube.com') ||
53
- this.#urls.includes('https://youtu.be') ||
54
- this.#urls.includes('https://www.tiktok.com') ||
55
- this.#urls.includes('vimeo.com')
56
- );
57
- }
58
- getURL() {
59
- return this.#urls.split(URL_SEPARATOR)[0];
60
- }
61
- getSmallURL() {
62
- return this.isLocal()
63
- ? 'images/small/' + this.getURL()
64
- : this.hasSmallURL()
65
- ? this.#urls.split(URL_SEPARATOR)[1]
66
- : this.getURL();
67
- }
68
- hasSmallURL() {
69
- return (
70
- this.#urls.split(URL_SEPARATOR).length > 1 &&
71
- this.#urls.split(URL_SEPARATOR)[1].trim().length > 0
72
- );
73
- }
74
- isHosted() {
75
- return this.#urls.includes('bookish');
76
- }
77
- isLocal() {
78
- return this.#urls.length > 0 && !this.#urls.startsWith('http');
79
- }
80
- getDescription() {
81
- return this.#description;
82
- }
83
- getCaption() {
84
- return this.#caption;
85
- }
86
- getCredit() {
87
- return this.#credit;
88
- }
89
- getPosition() {
90
- return this.#position;
91
- }
92
- getFormats() {
93
- return [this.#caption, this.#credit];
94
- }
95
- getChildren() {
96
- return [this.#caption, this.#credit];
97
- }
98
- getParentOf(node: Node): Node | undefined {
99
- if (node === this.#caption || node === this.#credit) return this;
100
- const captionParent = this.#caption.getParentOf(node);
101
- if (captionParent) return captionParent;
102
- const creditParent = this.#credit.getParentOf(node);
103
- if (creditParent) return creditParent;
104
- }
105
-
106
- toText(): string {
107
- return this.#caption.toText();
108
- }
109
- toHTML(): string {
110
- return `<img src="${this.getURL()}" alt="${this.getDescription()}" />`;
111
- }
112
- toBookdown(): string {
113
- return `|${this.#urls}|${
114
- this.#description
115
- }|${this.#caption.toBookdown()}|${this.#credit.toBookdown()}|`;
116
- }
117
- toJSON() {
118
- return {
119
- url: this.#urls,
120
- alt: this.#description,
121
- caption: this.#caption.toText(),
122
- credit: this.#credit.toText(),
123
- };
124
- }
125
-
126
- copy() {
127
- return new EmbedNode(
128
- this.#urls,
129
- this.#description,
130
- this.#caption.copy(),
131
- this.#credit.copy(),
132
- this.#position
133
- ) as this;
134
- }
135
-
136
- withChildReplaced(node: Node, replacement: Node | undefined) {
137
- const newCaption =
138
- node === this.#caption &&
139
- (replacement === undefined || replacement instanceof FormatNode)
140
- ? replacement
141
- : this.#caption;
142
- const newCredit =
143
- node === this.#credit &&
144
- (replacement === undefined || replacement instanceof FormatNode)
145
- ? replacement
146
- : this.#credit;
147
- return newCaption || newCredit
148
- ? (new EmbedNode(
149
- this.#urls,
150
- this.#description,
151
- newCaption,
152
- newCredit,
153
- this.#position
154
- ) as this)
155
- : undefined;
156
- }
157
-
158
- withURL(url: string) {
159
- // If the URL is a YouTube URL, convert to an embed URL, since a raw YouTube URL is never valid for embedding.
160
- if (url.includes('www.youtube.com/watch?v='))
161
- url = url.replace('/watch?v=', '/embed/');
162
-
163
- return new EmbedNode(
164
- url,
165
- this.#description,
166
- this.#caption,
167
- this.#credit,
168
- this.#position
169
- );
170
- }
171
- withURLs(url: string, thumbnail: string) {
172
- return new EmbedNode(
173
- url + URL_SEPARATOR + thumbnail,
174
- this.#description,
175
- this.#caption,
176
- this.#credit,
177
- this.#position
178
- );
179
- }
180
- withDescription(description: string) {
181
- return new EmbedNode(
182
- this.#urls,
183
- description,
184
- this.#caption,
185
- this.#credit,
186
- this.#position
187
- );
188
- }
189
- withCaption(caption: FormatNode) {
190
- return new EmbedNode(
191
- this.#urls,
192
- this.#description,
193
- caption,
194
- this.#credit,
195
- this.#position
196
- );
197
- }
198
- withCredit(credit: FormatNode) {
199
- return new EmbedNode(
200
- this.#urls,
201
- this.#description,
202
- this.#caption,
203
- credit,
204
- this.#position
205
- );
206
- }
207
- withPosition(position: Position) {
208
- return new EmbedNode(
209
- this.#urls,
210
- this.#description,
211
- this.#caption,
212
- this.#credit,
213
- position
214
- );
215
- }
216
-
217
- withContentInRange(range: CaretRange): this | undefined {
218
- if (!this.contains(range.start.node) && !this.contains(range.end.node))
219
- return this.copy();
220
- const newCredit =
221
- this.#credit.contains(range.end.node) ||
222
- this.#credit.contains(range.start.node)
223
- ? this.#credit.withContentInRange(range)
224
- : new FormatNode('', [new TextNode()]);
225
- const newCaption =
226
- this.#caption.contains(range.start.node) ||
227
- this.#caption.contains(range.end.node)
228
- ? this.#caption.withContentInRange(range)
229
- : new FormatNode('', [new TextNode()]);
230
- if (newCaption === undefined || newCredit === undefined) return;
231
-
232
- return new EmbedNode(
233
- this.#urls,
234
- this.#description,
235
- newCaption,
236
- newCredit,
237
- this.#position
238
- ) as this;
239
- }
240
-
241
- nextWord(): Caret {
242
- return this.#caption.getFirstCaret() as Caret;
243
- }
244
-
245
- previousWord(root: RootNode): Caret {
246
- const previous = root.getPreviousTextOrAtom(
247
- this.#caption.getFirstTextNode()
248
- );
249
- return previous
250
- ? {
251
- node: previous,
252
- index:
253
- previous instanceof TextNode ? previous.getLength() : 0,
254
- }
255
- : { node: this, index: 0 };
256
- }
257
- }
@@ -1,59 +0,0 @@
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
- import TextNode from './TextNode';
7
-
8
- export default class FootnoteNode extends AtomNode<FormatNode> {
9
- constructor(content?: FormatNode) {
10
- super(
11
- content === undefined
12
- ? new FormatNode('', [new TextNode()])
13
- : content.withTextIfEmpty()
14
- );
15
- }
16
-
17
- getType() {
18
- return 'footnote';
19
- }
20
- getDefaultCaret(): Caret | undefined {
21
- return this.getMeta().getFirstCaret();
22
- }
23
-
24
- toText(): string {
25
- return this.getMeta().toText();
26
- }
27
- toBookdown(): string {
28
- return `{${this.getMeta().toBookdown()}}`;
29
- }
30
- toHTML(): string {
31
- return `(${this.getMeta().toHTML()})`;
32
- }
33
-
34
- copy() {
35
- return new FootnoteNode(this.getMeta().copy()) as this;
36
- }
37
-
38
- getParentOf(node: Node): Node | undefined {
39
- return node === this.getMeta()
40
- ? this
41
- : this.getMeta().getParentOf(node);
42
- }
43
-
44
- withChildReplaced(node: FormatNode, replacement: FormatNode | undefined) {
45
- return node === this.getMeta() && replacement !== undefined
46
- ? (new FootnoteNode(replacement) as this)
47
- : undefined;
48
- }
49
-
50
- withMeta(footnote: FormatNode) {
51
- return new FootnoteNode(footnote);
52
- }
53
-
54
- withContentInRange(range: CaretRange): this | undefined {
55
- const newFormat = this.getMeta().withContentInRange(range);
56
- if (newFormat === undefined) return;
57
- return this.withMeta(newFormat) as this;
58
- }
59
- }