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,137 +0,0 @@
1
- import { test, expect } from 'vitest';
2
- import FormatNode from './FormatNode';
3
- import TextNode from './TextNode';
4
-
5
- test('Bold first two characters', () => {
6
- const text = new TextNode('Hello');
7
- const format = new FormatNode('', [text]);
8
- expect(
9
- format
10
- .withFormat(
11
- {
12
- start: { node: text, index: 0 },
13
- end: { node: text, index: 2 },
14
- },
15
- '*'
16
- )
17
- ?.toBookdown()
18
- ).toBe('*He*llo');
19
- });
20
-
21
- test('Unbold word', () => {
22
- const text = new TextNode('Hello');
23
- const format = new FormatNode('', [new FormatNode('*', [text])]);
24
- expect(
25
- format
26
- .withFormat(
27
- {
28
- start: { node: text, index: 0 },
29
- end: { node: text, index: 5 },
30
- },
31
- ''
32
- )
33
- ?.toBookdown()
34
- ).toBe('Hello');
35
- });
36
-
37
- test('Bold single caret position', () => {
38
- const text = new TextNode('Hello');
39
- const format = new FormatNode('', [text]);
40
- expect(
41
- format
42
- .withFormat(
43
- {
44
- start: { node: text, index: 2 },
45
- end: { node: text, index: 2 },
46
- },
47
- '*'
48
- )
49
- ?.toBookdown()
50
- ).toBe('He**llo');
51
- });
52
-
53
- test('Delete first two characters', () => {
54
- const text = new TextNode('Hello');
55
- const format = new FormatNode('', [text]);
56
- expect(
57
- format
58
- .withoutRange({
59
- start: { node: text, index: 0 },
60
- end: { node: text, index: 2 },
61
- })
62
- ?.toBookdown()
63
- ).toBe('llo');
64
- });
65
-
66
- test('Delete characters crossing format boundary', () => {
67
- const text = new TextNode('He');
68
- const bolded = new TextNode('ll');
69
- const format = new FormatNode('', [
70
- text,
71
- new FormatNode('*', [bolded]),
72
- new TextNode('o'),
73
- ]);
74
- expect(
75
- format
76
- .withoutRange({
77
- start: { node: text, index: 1 },
78
- end: { node: bolded, index: 1 },
79
- })
80
- ?.toBookdown()
81
- ).toBe('H*l*o');
82
- });
83
-
84
- test('Split', () => {
85
- const text = new TextNode('This is my paragraph. It is two sentences.');
86
- const indexAfterPeriod = text.getText().indexOf('.') + 1;
87
- const caret = { node: text, index: indexAfterPeriod };
88
- const format = new FormatNode('', [text]);
89
- expect(
90
- format
91
- .split(caret)
92
- ?.map((t) => t.toBookdown())
93
- .join('THEN')
94
- ).toBe('This is my paragraph.THEN It is two sentences.');
95
- });
96
-
97
- test('Backspace/delete', () => {
98
- const first = new TextNode('Hello, my name is ');
99
- const second = new TextNode('Amy');
100
- const third = new TextNode('.');
101
- const format = new FormatNode('', [
102
- first,
103
- new FormatNode('*', [second]),
104
- third,
105
- ]);
106
-
107
- expect(
108
- format
109
- .withoutCharacter({ node: first, index: 5 }, false)
110
- ?.root.toBookdown()
111
- ).toBe('Hell, my name is *Amy*.');
112
- expect(
113
- format
114
- .withoutCharacter({ node: first, index: 5 }, true)
115
- ?.root.toBookdown()
116
- ).toBe('Hello my name is *Amy*.');
117
- expect(
118
- format
119
- .withoutCharacter({ node: second, index: 0 }, false)
120
- ?.root.toBookdown()
121
- ).toBe('Hello, my name is*Amy*.');
122
- expect(
123
- format
124
- .withoutCharacter({ node: second, index: 0 }, true)
125
- ?.root.toBookdown()
126
- ).toBe('Hello, my name is *my*.');
127
- expect(
128
- format
129
- .withoutCharacter({ node: first, index: 0 }, false)
130
- ?.root.toBookdown()
131
- ).toBeUndefined();
132
- expect(
133
- format
134
- .withoutCharacter({ node: third, index: 1 }, true)
135
- ?.root.toBookdown()
136
- ).toBeUndefined();
137
- });
@@ -1,44 +0,0 @@
1
- import type { CaretRange } from './Caret';
2
- import Node from './Node';
3
- import type TextNode from './TextNode';
4
-
5
- export default abstract class MetadataNode<MetaType> extends Node {
6
- readonly #text: TextNode;
7
- readonly #meta: MetaType;
8
-
9
- constructor(text: TextNode, meta: MetaType) {
10
- super();
11
- this.#text = text;
12
- this.#meta = meta;
13
- }
14
-
15
- getMeta() {
16
- return this.#meta;
17
- }
18
- getText() {
19
- return this.#text;
20
- }
21
-
22
- abstract withMeta(meta: MetaType): MetadataNode<MetaType>;
23
- abstract withText(text: TextNode): MetadataNode<MetaType>;
24
- abstract toText(): string;
25
- abstract toBookdown(): string;
26
-
27
- getChildren() {
28
- return [this.#text];
29
- }
30
- getParentOf(node: Node): Node | undefined {
31
- return this.#text === node ? this : undefined;
32
- }
33
-
34
- withChildReplaced(node: TextNode, replacement: TextNode | undefined) {
35
- if (this.#text === node && replacement !== undefined)
36
- return this.withText(replacement) as this;
37
- }
38
-
39
- withContentInRange(range: CaretRange): this | undefined {
40
- const selectedText = this.#text.withContentInRange(range);
41
- if (selectedText === undefined) return undefined;
42
- return this.withText(selectedText) as this;
43
- }
44
- }
@@ -1,54 +0,0 @@
1
- import { test, expect } from 'vitest';
2
-
3
- import FootnoteNode from './FootnoteNode';
4
- import FormatNode from './FormatNode';
5
- import ParagraphNode from './ParagraphNode';
6
- import TextNode from './TextNode';
7
-
8
- const firstText = new TextNode(
9
- 'This is the first paragraph. What do you think of it?'
10
- );
11
- const lastText = new TextNode(
12
- "This is the second paragraph. I think it's redundant."
13
- );
14
- const combinedText = new TextNode(firstText.getText() + lastText.getText());
15
- const footnote = new FootnoteNode(
16
- new FormatNode('', [new TextNode('Side note!')])
17
- );
18
- const firstParagraph = new ParagraphNode(
19
- 0,
20
- new FormatNode('', [firstText, footnote])
21
- );
22
- const lastParagraph = new ParagraphNode(0, new FormatNode('', [lastText]));
23
- const combinedParagraph = new ParagraphNode(
24
- 0,
25
- new FormatNode('', [combinedText, footnote])
26
- );
27
-
28
- test('Combine/split', () => {
29
- expect(
30
- firstParagraph.withParagraphAppended(lastParagraph).toBookdown()
31
- ).toBe(
32
- `${firstText.getText()}${footnote.toBookdown()}${lastText.getText()}`
33
- );
34
-
35
- const split = combinedParagraph.split({
36
- node: combinedText,
37
- index: combinedText.getText().indexOf('.') + 1,
38
- });
39
- expect(split).not.toBeUndefined();
40
- if (split) {
41
- expect(split[0].toBookdown()).toBe(
42
- firstText
43
- .getText()
44
- .substring(0, firstText.getText().indexOf('.') + 1)
45
- );
46
- expect(split[1].toBookdown()).toBe(
47
- firstText
48
- .getText()
49
- .substring(firstText.getText().indexOf('.') + 1) +
50
- lastText.getText() +
51
- footnote.toBookdown()
52
- );
53
- }
54
- });
@@ -1,135 +0,0 @@
1
- import type Node from './Node';
2
- import BlockNode from './BlockNode';
3
- import type Position from './Position';
4
- import FormatNode from './FormatNode';
5
- import BlocksNode from './BlocksNode';
6
- import TextNode from './TextNode';
7
- import type { CaretRange } from './Caret';
8
-
9
- export default class QuoteNode extends BlocksNode {
10
- readonly #credit: FormatNode;
11
- readonly #position: Position;
12
-
13
- constructor(
14
- elements: BlockNode[],
15
- credit?: FormatNode,
16
- position: Position = '|'
17
- ) {
18
- super(elements);
19
-
20
- this.#position = position;
21
- this.#credit =
22
- credit === undefined
23
- ? new FormatNode('', [new TextNode()])
24
- : credit.withTextIfEmpty();
25
- }
26
-
27
- getType() {
28
- return 'quote';
29
- }
30
-
31
- getCredit() {
32
- return this.#credit;
33
- }
34
- getPosition() {
35
- return this.#position;
36
- }
37
-
38
- getFormats() {
39
- return [this.#credit];
40
- }
41
-
42
- toText(): string {
43
- return (
44
- this.getBlocks()
45
- .map((element) => element.toText())
46
- .join(' ') + (this.#credit ? ' ' + this.#credit.toText() : '')
47
- );
48
- }
49
-
50
- toBookdown(): string {
51
- return `"\n${this.getBlocks()
52
- .map((element) => element.toBookdown())
53
- .join('\n\n')}\n"${this.#position === '|' ? '' : this.#position}${
54
- this.#credit ? this.#credit.toBookdown() : ''
55
- }`;
56
- }
57
- toHTML() {
58
- return `"${super.toHTML()}"<center>${this.#credit.toHTML()}</center>`;
59
- }
60
-
61
- getChildren(): Node[] {
62
- return [...this.getBlocks(), this.#credit];
63
- }
64
-
65
- getParentOf(node: Node): Node | undefined {
66
- if (node === this.#credit) return this;
67
- const creditParent = this.#credit.getParentOf(node);
68
- if (creditParent !== undefined) return creditParent;
69
- return super.getParentOf(node);
70
- }
71
-
72
- copy() {
73
- return new QuoteNode(this.getBlocks().map((b) => b.copy())) as this;
74
- }
75
- create(blocks: BlockNode[]): BlocksNode {
76
- return new QuoteNode(blocks, this.#credit, this.#position);
77
- }
78
-
79
- withChildReplaced(
80
- node: BlockNode | FormatNode,
81
- replacement: BlockNode | FormatNode | undefined
82
- ) {
83
- // Replace the credit.
84
- if (
85
- this.#credit === node &&
86
- (replacement instanceof FormatNode || replacement === undefined)
87
- )
88
- return new QuoteNode(
89
- this.getBlocks(),
90
- replacement,
91
- this.#position
92
- ) as this;
93
-
94
- // Replace a block.
95
- if (replacement !== undefined && !(replacement instanceof BlockNode))
96
- return;
97
- const index = this.getBlocks().indexOf(node as BlockNode);
98
- if (index < 0) return;
99
-
100
- // Make a new blocks node, assigning and re-parenting the replacement.
101
- const blocks =
102
- replacement === undefined
103
- ? [
104
- ...this.getBlocks().slice(0, index),
105
- ...this.getBlocks().slice(index + 1),
106
- ]
107
- : [
108
- ...this.getBlocks().slice(0, index),
109
- replacement,
110
- ...this.getBlocks().slice(index + 1),
111
- ];
112
-
113
- return new QuoteNode(blocks, this.#credit, this.#position) as this;
114
- }
115
-
116
- withCredit(credit: FormatNode | undefined): QuoteNode {
117
- return new QuoteNode(this.getBlocks(), credit, this.#position);
118
- }
119
- withPosition(position: Position): QuoteNode {
120
- return new QuoteNode(this.getBlocks(), this.#credit, position);
121
- }
122
-
123
- withContentInRange(range: CaretRange): this | undefined {
124
- // First get the blocks in range.
125
- const newQuote = super.withContentInRange(range);
126
- if (newQuote === undefined) return;
127
-
128
- const newCredit =
129
- this.getBlocks().find((b) => b.contains(range.end.node)) !==
130
- undefined
131
- ? new FormatNode('', [new TextNode()])
132
- : this.#credit.withContentInRange(range);
133
- return newQuote.withNodeReplaced(this.#credit, newCredit) as this;
134
- }
135
- }
@@ -1,3 +0,0 @@
1
- export function match(param: string) {
2
- return /^\d+$/.test(param);
3
- }
@@ -1,12 +0,0 @@
1
- <script lang="ts">
2
- import Feedback from '$lib/components/app/Feedback.svelte';
3
- import Lead from '$lib/components/app/Lead.svelte';
4
- import Link from '$lib/components/app/Link.svelte';
5
- import Large from '../lib/components/app/Large.svelte';
6
- </script>
7
-
8
- <Lead><Large>Oops</Large>.</Lead>
9
-
10
- <Feedback error>
11
- This page doesn't exist. Want to go <Link to="/">home</Link>?
12
- </Feedback>
@@ -1,241 +0,0 @@
1
- <script lang="ts">
2
- import Footer from './Footer.svelte';
3
- import Header from './Header.svelte';
4
- import Auth from '$lib/components/Auth.svelte';
5
- import { writable, type Writable } from 'svelte/store';
6
- import { setContext } from 'svelte';
7
- import {
8
- CARET,
9
- BOOK,
10
- EDITION,
11
- STATUS,
12
- type EditionStore,
13
- type StatusStore,
14
- type ChapterText,
15
- CHAPTERTEXT,
16
- } from '$lib/components/page/Contexts';
17
- import type Book from '$lib/models/book/Book';
18
- import type Edition from '../lib/models/book/Edition';
19
- import type CaretState from '../lib/components/editor/CaretState';
20
- import BookSaveStatus from '../lib/models/book/BookSaveStatus';
21
- import { updateBook, updateEdition } from '../lib/models/CRUD';
22
- import { page } from '$app/stores';
23
-
24
- // A global store context for the focused editor, used to display toolbar.
25
- let caret = writable<CaretState | undefined>(undefined);
26
- setContext(CARET, caret);
27
-
28
- // A global store for the current book. It's at the root so the header can do breadcrumbs.
29
- let book = writable<Book | undefined>(undefined);
30
- setContext<Writable<Book | undefined>>(BOOK, book);
31
-
32
- // A global store for the current edition. It's at the root so the header can do breadcrumbs.
33
- let edition = writable<Edition>(undefined);
34
- setContext<EditionStore>(EDITION, edition);
35
-
36
- // A global store for the current chapter text. It's at the root so the header can do breadcrumbs.
37
- let chapterText = writable<ChapterText | undefined>(undefined);
38
- setContext<Writable<ChapterText | undefined>>(CHAPTERTEXT, chapterText);
39
-
40
- // A global store for save feedback.
41
- let status = writable<BookSaveStatus>(BookSaveStatus.Saved);
42
- setContext<StatusStore>(STATUS, status);
43
-
44
- let bookTimer: NodeJS.Timeout | undefined = undefined;
45
- let editionTimer: NodeJS.Timeout | undefined = undefined;
46
- function debounce(timer: NodeJS.Timeout | undefined, fun: Function) {
47
- clearTimeout(timer);
48
- return setTimeout(() => {
49
- fun();
50
- }, 250);
51
- }
52
-
53
- /** Save whatever edition is stored. */
54
- let previousSavedEdition: Edition | undefined = undefined;
55
- /**
56
- * Note whether the update was due to us storing the revised edition from the
57
- * database so that we don't get in an infinite loop of saving.
58
- */
59
- let reflection = false;
60
- async function saveEdition() {
61
- if (reflection) {
62
- reflection = false;
63
- return;
64
- }
65
-
66
- const previousDocID = previousSavedEdition?.getEditionRef()?.id;
67
- const newDocID = $edition.getEditionRef()?.id;
68
-
69
- if (
70
- ($book && $edition && previousDocID === undefined) ||
71
- (newDocID !== undefined &&
72
- previousDocID !== undefined &&
73
- newDocID === previousDocID)
74
- ) {
75
- status.set(BookSaveStatus.Saving);
76
- try {
77
- // Set the edition after we save it, since things like chapter refs can change for new chapters.
78
- reflection = true;
79
- // Get the chapter refs from the updated edition
80
- const newChapterRefs = await updateEdition(
81
- previousSavedEdition,
82
- $edition
83
- );
84
-
85
- // If we succeeded, update all of the chapters with the new chapter references, if there are any.
86
- let revisedEdition = $edition;
87
- for (const [id, ref] of newChapterRefs) {
88
- const chap = revisedEdition.chapters.find(
89
- (chapter) => chapter.id === id
90
- );
91
- if (chap && chap.ref === undefined) {
92
- revisedEdition = revisedEdition.withRevisedChapter(
93
- chap,
94
- chap.withRef(ref)
95
- );
96
- }
97
- }
98
- // Update the current edition.
99
- edition.set(revisedEdition);
100
-
101
- status.set(BookSaveStatus.Saved);
102
- } catch (error) {
103
- console.error(error);
104
- status.set(BookSaveStatus.Error);
105
- } finally {
106
- previousSavedEdition = $edition;
107
- }
108
- }
109
- }
110
-
111
- async function saveBook() {
112
- if ($book) {
113
- status.set(BookSaveStatus.Saving);
114
- try {
115
- updateBook($book);
116
- status.set(BookSaveStatus.Saved);
117
- } catch (error) {
118
- console.log(error);
119
- status.set(BookSaveStatus.Error);
120
- }
121
- }
122
- }
123
-
124
- function scheduleSave() {
125
- // If this is the latest edition, update the book's metadata to reflect the changes.
126
- if (
127
- $book &&
128
- $edition.isLatestEdition($book) &&
129
- previousSavedEdition &&
130
- previousSavedEdition.getEditionRef()?.id ===
131
- $edition.getEditionRef()?.id &&
132
- (previousSavedEdition.getTitle() !== $edition.getTitle() ||
133
- previousSavedEdition.getImage('cover') !==
134
- $edition.getImage('cover') ||
135
- previousSavedEdition.getAuthors().join() !==
136
- $edition.getAuthors().join() ||
137
- previousSavedEdition.getDescription() !==
138
- $edition.getDescription())
139
- ) {
140
- book.set(
141
- $book
142
- .withTitle($edition.getTitle())
143
- .withCover($edition.getImage('cover') ?? null)
144
- .withAuthors($edition.getAuthors())
145
- .withDescription($edition.getDescription())
146
- );
147
- }
148
-
149
- if (!reflection) status.set(BookSaveStatus.Changed);
150
- editionTimer = debounce(editionTimer, saveEdition);
151
- }
152
-
153
- // When the edition changes, update the book and debounce a save.
154
- $: {
155
- if ($edition) scheduleSave();
156
- }
157
-
158
- // When the book changes, debounce a save.
159
- $: {
160
- if ($book) {
161
- status.set(BookSaveStatus.Changed);
162
- bookTimer = debounce(bookTimer, saveBook);
163
- }
164
- }
165
- </script>
166
-
167
- <div class="bookish-app">
168
- <Auth>
169
- {#if $page.route.id !== null && !$page.route.id.startsWith('/[bookid]/[[editionid=edition]]')}
170
- <Header />
171
- {/if}
172
- <slot />
173
- <Footer />
174
- </Auth>
175
- </div>
176
-
177
- <style>
178
- /* Custom fonts for app */
179
- @import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;700&display=swap');
180
-
181
- :global(.bookish-app) {
182
- /* Define some UI defaults not used in the Bookish theme. */
183
- --app-font: 'Outfit', sans-serif;
184
- --app-line-height: 1.7;
185
- --app-font-size: 16pt;
186
- --app-text-spacing: 2rem;
187
-
188
- --app-interactive-color: #1b499c;
189
- --app-background-color: white;
190
- --app-font-color: black;
191
- --app-border-color: #444444;
192
- --app-font-color-inverted: #ffffff;
193
- --app-muted-color: #aaaaaa;
194
- --app-error-color: rgb(191, 15, 15);
195
-
196
- --app-chrome-background: rgb(244, 244, 244);
197
- --app-chrome-font-size: 12pt;
198
- --app-chrome-padding: 0.5em;
199
- --app-chrome-border-size: 3px;
200
- --app-chrome-roundedness: 5px;
201
- }
202
-
203
- :global(.dark .bookish-app) {
204
- --app-interactive-color: #1455ce;
205
- --app-background-color: #050505;
206
- --app-font-color: white;
207
- --app-border-color: #353535;
208
- --app-font-color-inverted: #000000;
209
- --app-muted-color: #a9a9a9;
210
- --app-error-color: rgb(80, 8, 8);
211
- --app-chrome-background: rgb(46, 46, 46);
212
- }
213
-
214
- .bookish-app {
215
- display: flex;
216
- flex-direction: column;
217
- align-items: center;
218
- font-weight: 300;
219
- color: var(--app-font-color);
220
- font-family: var(--app-font);
221
- font-size: 14pt;
222
- background-color: var(--app-background-color);
223
- }
224
-
225
- :global(.firebase-emulator-warning) {
226
- opacity: 0.05;
227
- pointer-events: none;
228
- }
229
-
230
- @keyframes -global-failure {
231
- 0% {
232
- transform: translate(-2px, 0px);
233
- }
234
- 50% {
235
- transform: translate(0px, 0px);
236
- }
237
- 100% {
238
- transform: translate(2px, 0px);
239
- }
240
- }
241
- </style>
@@ -1,43 +0,0 @@
1
- <script lang="ts">
2
- import Section from '$lib/components/app/Section.svelte';
3
- import Paragraph from '$lib/components/app/Paragraph.svelte';
4
- import Lead from '$lib/components/app/Lead.svelte';
5
- import Link from '$lib/components/app/Link.svelte';
6
- import Large from '$lib/components/app/Large.svelte';
7
- import Head from '$lib/components/app/Head.svelte';
8
- </script>
9
-
10
- <Section>
11
- <Lead
12
- ><Large>Bookish</Large> is a (beta) platform for writing simple, beautiful,
13
- accessible online books.</Lead
14
- >
15
-
16
- <Head>Simple</Head>
17
- <Paragraph>
18
- Print is full gatekeeping and other digital platforms have complex
19
- tools. Bookish strives to be a Google Docs for books: the workflow is as
20
- simple as write and share.
21
- </Paragraph>
22
-
23
- <Head>Beautiful</Head>
24
- <Paragraph>
25
- Typography matters. Print books can be beautiful, but are complex to
26
- make. E-books can be easier to make, but are often typographically
27
- messy. Bookish strives for a happy medium, making digital content
28
- typographicaaly beautiful.
29
- </Paragraph>
30
-
31
- <Head>Accessible</Head>
32
- <Paragraph>
33
- Most platforms produce books that are incompatible with screen readers,
34
- excluding readers who are blind, low vision, dyslexic, or otherwise
35
- prefer to have text spoken. Bookish strives to be readable in any web
36
- browser, with sight or sound.
37
- </Paragraph>
38
-
39
- <Paragraph>
40
- <Link to="/about">Learn more</Link>
41
- about the platform.
42
- </Paragraph>
43
- </Section>
File without changes