bookish-press 0.4.45 → 0.4.47

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/.env.example +8 -0
  2. package/.firebaserc +8 -0
  3. package/.prettierignore +8 -0
  4. package/.prettierrc.json +5 -0
  5. package/_update-notifier-last-checked +0 -0
  6. package/firebase.json +46 -0
  7. package/firestore.indexes.json +4 -0
  8. package/firestore.rules +59 -0
  9. package/functions/.eslintrc.js +28 -0
  10. package/functions/package-lock.json +12595 -0
  11. package/functions/package.json +43 -0
  12. package/functions/src/index.ts +345 -0
  13. package/functions/tsconfig.dev.json +3 -0
  14. package/functions/tsconfig.json +15 -0
  15. package/package.json +53 -270
  16. package/scripts/claims.cjs +99 -0
  17. package/src/app.d.ts +9 -0
  18. package/src/app.html +24 -0
  19. package/src/lib/components/Auth.svelte +65 -0
  20. package/{components/Authentication.d.ts → src/lib/components/Authentication.ts} +2 -0
  21. package/{components → src/lib/components}/BookPreview.svelte +27 -22
  22. package/{components → src/lib/components}/External.svelte +2 -1
  23. package/src/lib/components/Link.svelte +58 -0
  24. package/{components → src/lib/components}/app/BookList.svelte +6 -3
  25. package/{components → src/lib/components}/app/Button.svelte +5 -4
  26. package/{components → src/lib/components}/app/Feedback.svelte +11 -7
  27. package/{components → src/lib/components}/app/Head.svelte +2 -1
  28. package/{components → src/lib/components}/app/Large.svelte +0 -0
  29. package/{components → src/lib/components}/app/Lead.svelte +0 -0
  30. package/{components → src/lib/components}/app/Link.svelte +4 -3
  31. package/{components → src/lib/components}/app/Options.svelte +5 -4
  32. package/{components → src/lib/components}/app/Paragraph.svelte +2 -1
  33. package/{components → src/lib/components}/app/Section.svelte +0 -0
  34. package/{components → src/lib/components}/app/Table.svelte +0 -0
  35. package/{components → src/lib/components}/app/TextInput.svelte +12 -9
  36. package/{components → src/lib/components}/chapter/Atom.svelte +18 -12
  37. package/src/lib/components/chapter/Block.svelte +42 -0
  38. package/{components → src/lib/components}/chapter/Callout.svelte +6 -3
  39. package/{components → src/lib/components}/chapter/CaptionedCode.svelte +21 -13
  40. package/{components → src/lib/components}/chapter/ChapterBody.svelte +13 -9
  41. package/{components → src/lib/components}/chapter/Citations.svelte +34 -33
  42. package/{components → src/lib/components}/chapter/Code.svelte +63 -58
  43. package/{components → src/lib/components}/chapter/Comment.svelte +30 -18
  44. package/{components → src/lib/components}/chapter/Definition.svelte +23 -17
  45. package/{components → src/lib/components}/chapter/Embed.svelte +97 -77
  46. package/src/lib/components/chapter/ErrorMessage.svelte +12 -0
  47. package/{components → src/lib/components}/chapter/ExtendedPrism.js +0 -0
  48. package/{components → src/lib/components}/chapter/Figure.svelte +34 -26
  49. package/{components → src/lib/components}/chapter/Footnote.svelte +32 -20
  50. package/{components → src/lib/components}/chapter/Format.svelte +39 -34
  51. package/{components → src/lib/components}/chapter/InlineCode.svelte +9 -5
  52. package/{components → src/lib/components}/chapter/Label.svelte +23 -14
  53. package/{components → src/lib/components}/chapter/Link.svelte +27 -21
  54. package/{components → src/lib/components}/chapter/List.svelte +5 -3
  55. package/{components → src/lib/components}/chapter/Marginal.svelte +54 -41
  56. package/{components → src/lib/components}/chapter/Paragraph.svelte +25 -20
  57. package/{components → src/lib/components}/chapter/Positioned.svelte +4 -1
  58. package/{components → src/lib/components}/chapter/Problem.svelte +0 -0
  59. package/src/lib/components/chapter/Python.svelte +144 -0
  60. package/{components → src/lib/components}/chapter/Quote.svelte +9 -5
  61. package/{components → src/lib/components}/chapter/Rule.svelte +4 -1
  62. package/{components → src/lib/components}/chapter/Table.svelte +11 -7
  63. package/src/lib/components/chapter/Text.svelte +109 -0
  64. package/src/lib/components/editor/BookishEditor.svelte +1101 -0
  65. package/src/lib/components/editor/CalloutEditor.svelte +14 -0
  66. package/{components → src/lib/components}/editor/CaptionedCodeEditor.svelte +10 -6
  67. package/src/lib/components/editor/CaretContext.ts +55 -0
  68. package/{components/editor/CaretState.d.ts → src/lib/components/editor/CaretState.ts} +6 -7
  69. package/{components/editor/CaretUtilities.d.ts → src/lib/components/editor/CaretUtilities.ts} +1 -0
  70. package/{components → src/lib/components}/editor/CaretView.svelte +25 -20
  71. package/src/lib/components/editor/CitationsEditor.svelte +64 -0
  72. package/{components/editor/Clipboard.d.ts → src/lib/components/editor/Clipboard.ts} +2 -1
  73. package/{components/editor/Command.d.ts → src/lib/components/editor/Command.ts} +8 -2
  74. package/{components/editor/Commands.js → src/lib/components/editor/Commands.ts} +730 -315
  75. package/src/lib/components/editor/ConfirmButton.svelte +51 -0
  76. package/src/lib/components/editor/DefinitionEditor.svelte +44 -0
  77. package/src/lib/components/editor/EmbedEditor.svelte +152 -0
  78. package/{components → src/lib/components}/editor/Icon.svelte +2 -1
  79. package/{components → src/lib/components}/editor/ImageChooser.svelte +24 -19
  80. package/src/lib/components/editor/InlineCodeEditor.svelte +16 -0
  81. package/{components → src/lib/components}/editor/LabelEditor.svelte +14 -9
  82. package/{components → src/lib/components}/editor/LanguageEditor.svelte +8 -5
  83. package/src/lib/components/editor/LinkEditor.svelte +110 -0
  84. package/{components → src/lib/components}/editor/Note.svelte +0 -0
  85. package/{components → src/lib/components}/editor/Permissions.svelte +43 -36
  86. package/src/lib/components/editor/PositionEditor.svelte +21 -0
  87. package/src/lib/components/editor/QuoteEditor.svelte +14 -0
  88. package/{components → src/lib/components}/editor/Switch.svelte +14 -11
  89. package/src/lib/components/editor/TableEditor.svelte +14 -0
  90. package/{components → src/lib/components}/editor/TextEditor.svelte +101 -89
  91. package/src/lib/components/editor/Toggle.svelte +47 -0
  92. package/src/lib/components/editor/Toolbar.svelte +297 -0
  93. package/{components → src/lib/components}/editor/ToolbarGroup.svelte +5 -3
  94. package/{components → src/lib/components}/editor/ToolbarSpacer.svelte +0 -0
  95. package/src/lib/components/editor/URLEditor.svelte +15 -0
  96. package/{components/editor/UndoState.d.ts → src/lib/components/editor/UndoState.ts} +3 -2
  97. package/{components → src/lib/components}/editor/icons/annotate.svg +0 -0
  98. package/{components → src/lib/components}/editor/icons/block.svg +0 -0
  99. package/{components → src/lib/components}/editor/icons/bold.svg +0 -0
  100. package/{components → src/lib/components}/editor/icons/bullets.svg +0 -0
  101. package/{components → src/lib/components}/editor/icons/callout.svg +0 -0
  102. package/{components → src/lib/components}/editor/icons/citation.svg +0 -0
  103. package/{components → src/lib/components}/editor/icons/clear.svg +0 -0
  104. package/{components → src/lib/components}/editor/icons/clipboard.svg +0 -0
  105. package/{components → src/lib/components}/editor/icons/code.svg +0 -0
  106. package/{components → src/lib/components}/editor/icons/columnafter.svg +0 -0
  107. package/{components → src/lib/components}/editor/icons/columnbefore.svg +0 -0
  108. package/{components → src/lib/components}/editor/icons/comment.svg +0 -0
  109. package/{components → src/lib/components}/editor/icons/copy.svg +0 -0
  110. package/{components → src/lib/components}/editor/icons/cut.svg +0 -0
  111. package/{components → src/lib/components}/editor/icons/define.svg +0 -0
  112. package/{components → src/lib/components}/editor/icons/deletecolumn.svg +0 -0
  113. package/{components → src/lib/components}/editor/icons/deleterow.svg +0 -0
  114. package/{components → src/lib/components}/editor/icons/footnote.svg +0 -0
  115. package/{components → src/lib/components}/editor/icons/header1.svg +0 -0
  116. package/{components → src/lib/components}/editor/icons/header2.svg +0 -0
  117. package/{components → src/lib/components}/editor/icons/header3.svg +0 -0
  118. package/{components → src/lib/components}/editor/icons/home.svg +0 -0
  119. package/{components → src/lib/components}/editor/icons/indent.svg +0 -0
  120. package/{components → src/lib/components}/editor/icons/italic.svg +0 -0
  121. package/{components → src/lib/components}/editor/icons/label.svg +0 -0
  122. package/{components → src/lib/components}/editor/icons/left.svg +0 -0
  123. package/{components → src/lib/components}/editor/icons/level.svg +0 -0
  124. package/{components → src/lib/components}/editor/icons/link.svg +0 -0
  125. package/{components → src/lib/components}/editor/icons/list.svg +0 -0
  126. package/{components → src/lib/components}/editor/icons/media.svg +0 -0
  127. package/{components → src/lib/components}/editor/icons/middle.svg +0 -0
  128. package/{components → src/lib/components}/editor/icons/numbers.svg +0 -0
  129. package/{components → src/lib/components}/editor/icons/paragraph.svg +0 -0
  130. package/{components → src/lib/components}/editor/icons/paste.svg +0 -0
  131. package/{components → src/lib/components}/editor/icons/quote.svg +0 -0
  132. package/{components → src/lib/components}/editor/icons/redo.svg +0 -0
  133. package/{components → src/lib/components}/editor/icons/right.svg +0 -0
  134. package/{components → src/lib/components}/editor/icons/rowabove.svg +0 -0
  135. package/{components → src/lib/components}/editor/icons/rowbelow.svg +0 -0
  136. package/{components → src/lib/components}/editor/icons/rule.svg +0 -0
  137. package/{components → src/lib/components}/editor/icons/sub.svg +0 -0
  138. package/{components → src/lib/components}/editor/icons/super.svg +0 -0
  139. package/{components → src/lib/components}/editor/icons/table.svg +0 -0
  140. package/{components → src/lib/components}/editor/icons/text.svg +0 -0
  141. package/{components → src/lib/components}/editor/icons/time.svg +0 -0
  142. package/{components → src/lib/components}/editor/icons/undo.svg +0 -0
  143. package/{components → src/lib/components}/editor/icons/unindent.svg +0 -0
  144. package/{components → src/lib/components}/editor/icons/unlink.svg +0 -0
  145. package/{components → src/lib/components}/page/Acknowledgements.svelte +19 -10
  146. package/src/lib/components/page/Authors.svelte +92 -0
  147. package/src/lib/components/page/BookLoader.svelte +77 -0
  148. package/src/lib/components/page/BulkReferenceEditor.svelte +86 -0
  149. package/src/lib/components/page/Chapter.svelte +449 -0
  150. package/src/lib/components/page/ChapterContext.ts +13 -0
  151. package/{components → src/lib/components}/page/ChapterNumber.svelte +0 -0
  152. package/{components → src/lib/components}/page/ChapterTitle.svelte +4 -2
  153. package/src/lib/components/page/Contexts.ts +176 -0
  154. package/{components → src/lib/components}/page/DefinitionView.svelte +52 -37
  155. package/{components → src/lib/components}/page/Description.svelte +15 -7
  156. package/src/lib/components/page/Edition.svelte +189 -0
  157. package/src/lib/components/page/EditionLoader.svelte +123 -0
  158. package/{components → src/lib/components}/page/Editions.svelte +22 -18
  159. package/{components → src/lib/components}/page/Glossary.svelte +33 -28
  160. package/{components → src/lib/components}/page/Header.svelte +59 -52
  161. package/{components → src/lib/components}/page/Index.svelte +48 -41
  162. package/{components → src/lib/components}/page/Instructions.svelte +2 -1
  163. package/{components → src/lib/components}/page/License.svelte +17 -9
  164. package/{components → src/lib/components}/page/Loading.svelte +0 -0
  165. package/{components → src/lib/components}/page/Media.svelte +44 -27
  166. package/{components → src/lib/components}/page/MediaPreview.svelte +3 -2
  167. package/{components → src/lib/components}/page/Muted.svelte +0 -0
  168. package/{components → src/lib/components}/page/Outline.svelte +140 -110
  169. package/src/lib/components/page/Page.svelte +94 -0
  170. package/{components → src/lib/components}/page/PageHeader.svelte +2 -1
  171. package/{components → src/lib/components}/page/PageParagraph.svelte +0 -0
  172. package/src/lib/components/page/PossibleChapter.svelte +16 -0
  173. package/src/lib/components/page/PossibleReference.svelte +14 -0
  174. package/{components → src/lib/components}/page/Print.svelte +5 -3
  175. package/{components → src/lib/components}/page/Publish.svelte +59 -52
  176. package/{components → src/lib/components}/page/Reference.svelte +39 -30
  177. package/{components → src/lib/components}/page/References.svelte +18 -14
  178. package/{components → src/lib/components}/page/Rows.svelte +0 -0
  179. package/src/lib/components/page/Search.svelte +153 -0
  180. package/{components → src/lib/components}/page/Status.svelte +5 -3
  181. package/{components → src/lib/components}/page/SubdomainEditor.svelte +16 -13
  182. package/{components → src/lib/components}/page/TableOfContents.svelte +79 -68
  183. package/src/lib/components/page/TableOfContentsImage.svelte +22 -0
  184. package/{components → src/lib/components}/page/TableOfContentsRow.svelte +34 -24
  185. package/{components → src/lib/components}/page/ThemeEditor.svelte +44 -33
  186. package/{components → src/lib/components}/page/ThemeEditorPreview.svelte +21 -12
  187. package/src/lib/components/page/ThemeSetEditor.svelte +21 -0
  188. package/{components → src/lib/components}/page/ThemeVariableEditor.svelte +18 -14
  189. package/{components → src/lib/components}/page/Title.svelte +0 -0
  190. package/{components → src/lib/components}/page/Unknown.svelte +10 -8
  191. package/{components/page/margins.js → src/lib/components/page/margins.ts} +79 -46
  192. package/{index.js → src/lib/index.js} +0 -0
  193. package/src/lib/models/CRUD.ts +469 -0
  194. package/{models/Firebase.js → src/lib/models/Firebase.ts} +26 -16
  195. package/src/lib/models/book/Book.ts +283 -0
  196. package/src/lib/models/book/BookMedia.ts +182 -0
  197. package/src/lib/models/book/BookSaveStatus.ts +8 -0
  198. package/src/lib/models/book/Chapter.ts +462 -0
  199. package/{models/book/ChapterID.js → src/lib/models/book/ChapterID.ts} +1 -0
  200. package/src/lib/models/book/Definition.ts +2 -0
  201. package/src/lib/models/book/Edition.ts +1216 -0
  202. package/src/lib/models/book/Reference.ts +171 -0
  203. package/{models/book/Schema.js → src/lib/models/book/Schema.ts} +1 -0
  204. package/{models/book/Theme.js → src/lib/models/book/Theme.ts} +111 -6
  205. package/{models/book/ThemeColors.d.ts → src/lib/models/book/ThemeColors.ts} +6 -0
  206. package/{models/book/Words.js → src/lib/models/book/Words.ts} +1 -0
  207. package/{models/chapter/AtomNode.js → src/lib/models/chapter/AtomNode.ts} +30 -10
  208. package/{models/chapter/BlockNode.js → src/lib/models/chapter/BlockNode.ts} +80 -47
  209. package/src/lib/models/chapter/BlocksNode.test.ts +867 -0
  210. package/{models/chapter/BlocksNode.js → src/lib/models/chapter/BlocksNode.ts} +571 -359
  211. package/{models/chapter/Bookkeeping.d.ts → src/lib/models/chapter/Bookkeeping.ts} +0 -0
  212. package/src/lib/models/chapter/CalloutNode.ts +79 -0
  213. package/{models/chapter/Caret.js → src/lib/models/chapter/Caret.ts} +50 -26
  214. package/src/lib/models/chapter/ChapterNode.ts +169 -0
  215. package/{models/chapter/CitationsNode.js → src/lib/models/chapter/CitationsNode.ts} +17 -10
  216. package/{models/chapter/CodeNode.js → src/lib/models/chapter/CodeNode.ts} +125 -62
  217. package/src/lib/models/chapter/CommentNode.ts +61 -0
  218. package/{models/chapter/DefinitionNode.js → src/lib/models/chapter/DefinitionNode.ts} +14 -8
  219. package/src/lib/models/chapter/Edit.ts +6 -0
  220. package/src/lib/models/chapter/EmbedNode.ts +257 -0
  221. package/{models/chapter/ErrorNode.js → src/lib/models/chapter/ErrorNode.ts} +15 -8
  222. package/src/lib/models/chapter/FootnoteNode.ts +59 -0
  223. package/src/lib/models/chapter/FormatNode.test.ts +137 -0
  224. package/{models/chapter/FormatNode.js → src/lib/models/chapter/FormatNode.ts} +443 -262
  225. package/{models/chapter/InlineCodeNode.js → src/lib/models/chapter/InlineCodeNode.ts} +17 -9
  226. package/{models/chapter/LabelNode.js → src/lib/models/chapter/LabelNode.ts} +26 -10
  227. package/{models/chapter/LinkNode.js → src/lib/models/chapter/LinkNode.ts} +12 -7
  228. package/{models/chapter/ListNode.test.js → src/lib/models/chapter/ListNode.test.ts} +57 -20
  229. package/{models/chapter/ListNode.js → src/lib/models/chapter/ListNode.ts} +277 -200
  230. package/src/lib/models/chapter/MetadataNode.ts +44 -0
  231. package/{models → src/lib/models}/chapter/Node.test.js +0 -0
  232. package/{models/chapter/Node.js → src/lib/models/chapter/Node.ts} +155 -71
  233. package/src/lib/models/chapter/ParagraphNode.test.ts +54 -0
  234. package/{models/chapter/ParagraphNode.js → src/lib/models/chapter/ParagraphNode.ts} +95 -58
  235. package/{models/chapter/Parser.test.js → src/lib/models/chapter/Parser.test.ts} +7 -0
  236. package/{models/chapter/Parser.js → src/lib/models/chapter/Parser.ts} +369 -184
  237. package/{models/chapter/Position.d.ts → src/lib/models/chapter/Position.ts} +0 -0
  238. package/src/lib/models/chapter/QuoteNode.ts +135 -0
  239. package/{models/chapter/RootNode.d.ts → src/lib/models/chapter/RootNode.ts} +2 -0
  240. package/{models/chapter/RuleNode.js → src/lib/models/chapter/RuleNode.ts} +9 -6
  241. package/{models/chapter/TableNode.test.js → src/lib/models/chapter/TableNode.test.ts} +27 -10
  242. package/{models/chapter/TableNode.js → src/lib/models/chapter/TableNode.ts} +141 -82
  243. package/{models/chapter/TextNode.test.js → src/lib/models/chapter/TextNode.test.ts} +2 -0
  244. package/{models/chapter/TextNode.js → src/lib/models/chapter/TextNode.ts} +117 -65
  245. package/{util/getSubdomain.js → src/lib/util/getSubdomain.ts} +14 -8
  246. package/{util/isMobile.js → src/lib/util/isMobile.ts} +1 -0
  247. package/{util/mineReference.js → src/lib/util/mineReference.ts} +45 -25
  248. package/{util/scrollToEyeLevel.js → src/lib/util/scrollToEyeLevel.ts} +4 -2
  249. package/src/params/edition.ts +3 -0
  250. package/src/routes/+error.svelte +12 -0
  251. package/src/routes/+layout.svelte +241 -0
  252. package/src/routes/+page.svelte +43 -0
  253. package/src/routes/Footer.svelte +0 -0
  254. package/src/routes/Header.svelte +112 -0
  255. package/src/routes/[bookid]/+layout.svelte +5 -0
  256. package/src/routes/[bookid]/[[editionid=edition]]/+error.svelte +14 -0
  257. package/src/routes/[bookid]/[[editionid=edition]]/+layout.svelte +7 -0
  258. package/src/routes/[bookid]/[[editionid=edition]]/+page.svelte +5 -0
  259. package/src/routes/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +5 -0
  260. package/src/routes/[bookid]/[[editionid=edition]]/glossary/+page.svelte +5 -0
  261. package/src/routes/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +5 -0
  262. package/src/routes/[bookid]/[[editionid=edition]]/media/+page.svelte +5 -0
  263. package/src/routes/[bookid]/[[editionid=edition]]/print/+page.svelte +5 -0
  264. package/src/routes/[bookid]/[[editionid=edition]]/references/+page.svelte +5 -0
  265. package/src/routes/[bookid]/[[editionid=edition]]/search/+page.svelte +5 -0
  266. package/src/routes/[bookid]/editions/+page.svelte +20 -0
  267. package/src/routes/about/+page.svelte +102 -0
  268. package/src/routes/confirm/+page.svelte +62 -0
  269. package/src/routes/email/+page.svelte +99 -0
  270. package/src/routes/login/+page.svelte +66 -0
  271. package/src/routes/read/+page.svelte +38 -0
  272. package/src/routes/write/+error.svelte +10 -0
  273. package/src/routes/write/+layout.svelte +11 -0
  274. package/src/routes/write/+page.svelte +114 -0
  275. package/src/routes/write/[bookid]/+layout.svelte +5 -0
  276. package/src/routes/write/[bookid]/[[editionid=edition]]/+layout.svelte +7 -0
  277. package/src/routes/write/[bookid]/[[editionid=edition]]/+page.svelte +5 -0
  278. package/src/routes/write/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +5 -0
  279. package/src/routes/write/[bookid]/[[editionid=edition]]/glossary/+page.svelte +5 -0
  280. package/src/routes/write/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +5 -0
  281. package/src/routes/write/[bookid]/[[editionid=edition]]/media/+page.svelte +5 -0
  282. package/src/routes/write/[bookid]/[[editionid=edition]]/print/+page.svelte +5 -0
  283. package/src/routes/write/[bookid]/[[editionid=edition]]/references/+page.svelte +5 -0
  284. package/src/routes/write/[bookid]/[[editionid=edition]]/search/+page.svelte +5 -0
  285. package/src/routes/write/[bookid]/[[editionid=edition]]/theme/+page.svelte +5 -0
  286. package/src/routes/write/[bookid]/[[editionid=edition]]/unknown/+page.svelte +5 -0
  287. package/src/routes/write/[bookid]/editions/+page.svelte +20 -0
  288. package/src/vite-env.d.ts +1 -0
  289. package/static/icons/favicon.png +0 -0
  290. package/static/icons/icon.png +0 -0
  291. package/static/icons/ios-icon.png +0 -0
  292. package/storage.rules +9 -0
  293. package/svelte.config.js +19 -0
  294. package/tsconfig.json +18 -0
  295. package/tsconfig.node.json +9 -0
  296. package/vite.config.ts +8 -0
  297. package/vite.reader.config.ts +32 -0
  298. package/components/Auth.svelte +0 -55
  299. package/components/Auth.svelte.d.ts +0 -16
  300. package/components/Authentication.js +0 -1
  301. package/components/BookPreview.svelte.d.ts +0 -18
  302. package/components/External.svelte.d.ts +0 -18
  303. package/components/Link.svelte +0 -51
  304. package/components/Link.svelte.d.ts +0 -18
  305. package/components/app/BookList.svelte.d.ts +0 -18
  306. package/components/app/Button.svelte.d.ts +0 -22
  307. package/components/app/Feedback.svelte.d.ts +0 -18
  308. package/components/app/Head.svelte.d.ts +0 -18
  309. package/components/app/Large.svelte.d.ts +0 -27
  310. package/components/app/Lead.svelte.d.ts +0 -27
  311. package/components/app/Link.svelte.d.ts +0 -20
  312. package/components/app/Options.svelte.d.ts +0 -19
  313. package/components/app/Paragraph.svelte.d.ts +0 -18
  314. package/components/app/Section.svelte.d.ts +0 -27
  315. package/components/app/Table.svelte.d.ts +0 -27
  316. package/components/app/TextInput.svelte.d.ts +0 -22
  317. package/components/chapter/Atom.svelte.d.ts +0 -19
  318. package/components/chapter/Block.svelte +0 -37
  319. package/components/chapter/Block.svelte.d.ts +0 -17
  320. package/components/chapter/Callout.svelte.d.ts +0 -17
  321. package/components/chapter/CaptionedCode.svelte.d.ts +0 -17
  322. package/components/chapter/ChapterBody.svelte.d.ts +0 -19
  323. package/components/chapter/Citations.svelte.d.ts +0 -17
  324. package/components/chapter/Code.svelte.d.ts +0 -22
  325. package/components/chapter/Comment.svelte.d.ts +0 -17
  326. package/components/chapter/Definition.svelte.d.ts +0 -17
  327. package/components/chapter/Embed.svelte.d.ts +0 -20
  328. package/components/chapter/ErrorMessage.svelte +0 -9
  329. package/components/chapter/ErrorMessage.svelte.d.ts +0 -17
  330. package/components/chapter/ExtendedPrism.d.ts +0 -2
  331. package/components/chapter/Figure.svelte.d.ts +0 -24
  332. package/components/chapter/Footnote.svelte.d.ts +0 -19
  333. package/components/chapter/Format.svelte.d.ts +0 -19
  334. package/components/chapter/InlineCode.svelte.d.ts +0 -17
  335. package/components/chapter/Label.svelte.d.ts +0 -17
  336. package/components/chapter/Link.svelte.d.ts +0 -17
  337. package/components/chapter/List.svelte.d.ts +0 -17
  338. package/components/chapter/Marginal.svelte.d.ts +0 -22
  339. package/components/chapter/Paragraph.svelte.d.ts +0 -18
  340. package/components/chapter/Positioned.svelte.d.ts +0 -19
  341. package/components/chapter/Problem.svelte.d.ts +0 -27
  342. package/components/chapter/Python.svelte +0 -128
  343. package/components/chapter/Python.svelte.d.ts +0 -18
  344. package/components/chapter/Quote.svelte.d.ts +0 -17
  345. package/components/chapter/Rule.svelte.d.ts +0 -17
  346. package/components/chapter/Table.svelte.d.ts +0 -17
  347. package/components/chapter/Text.svelte +0 -87
  348. package/components/chapter/Text.svelte.d.ts +0 -18
  349. package/components/editor/BookishEditor.svelte +0 -884
  350. package/components/editor/BookishEditor.svelte.d.ts +0 -25
  351. package/components/editor/CalloutEditor.svelte +0 -10
  352. package/components/editor/CalloutEditor.svelte.d.ts +0 -17
  353. package/components/editor/CaptionedCodeEditor.svelte.d.ts +0 -17
  354. package/components/editor/CaretContext.d.ts +0 -50
  355. package/components/editor/CaretContext.js +0 -1
  356. package/components/editor/CaretState.js +0 -1
  357. package/components/editor/CaretUtilities.js +0 -1
  358. package/components/editor/CaretView.svelte.d.ts +0 -25
  359. package/components/editor/CitationsEditor.svelte +0 -53
  360. package/components/editor/CitationsEditor.svelte.d.ts +0 -17
  361. package/components/editor/Clipboard.js +0 -1
  362. package/components/editor/Command.js +0 -1
  363. package/components/editor/Commands.d.ts +0 -3
  364. package/components/editor/ConfirmButton.svelte +0 -49
  365. package/components/editor/ConfirmButton.svelte.d.ts +0 -19
  366. package/components/editor/DefinitionEditor.svelte +0 -36
  367. package/components/editor/DefinitionEditor.svelte.d.ts +0 -17
  368. package/components/editor/EmbedEditor.svelte +0 -137
  369. package/components/editor/EmbedEditor.svelte.d.ts +0 -17
  370. package/components/editor/Icon.svelte.d.ts +0 -16
  371. package/components/editor/ImageChooser.svelte.d.ts +0 -18
  372. package/components/editor/InlineCodeEditor.svelte +0 -12
  373. package/components/editor/InlineCodeEditor.svelte.d.ts +0 -17
  374. package/components/editor/LabelEditor.svelte.d.ts +0 -17
  375. package/components/editor/LanguageEditor.svelte.d.ts +0 -17
  376. package/components/editor/LinkEditor.svelte +0 -100
  377. package/components/editor/LinkEditor.svelte.d.ts +0 -17
  378. package/components/editor/Note.svelte.d.ts +0 -27
  379. package/components/editor/Permissions.svelte.d.ts +0 -20
  380. package/components/editor/PositionEditor.svelte +0 -17
  381. package/components/editor/PositionEditor.svelte.d.ts +0 -18
  382. package/components/editor/QuoteEditor.svelte +0 -10
  383. package/components/editor/QuoteEditor.svelte.d.ts +0 -17
  384. package/components/editor/Switch.svelte.d.ts +0 -20
  385. package/components/editor/TableEditor.svelte +0 -10
  386. package/components/editor/TableEditor.svelte.d.ts +0 -17
  387. package/components/editor/TextEditor.svelte.d.ts +0 -24
  388. package/components/editor/Toggle.svelte +0 -41
  389. package/components/editor/Toggle.svelte.d.ts +0 -19
  390. package/components/editor/Toolbar.svelte +0 -249
  391. package/components/editor/Toolbar.svelte.d.ts +0 -17
  392. package/components/editor/ToolbarGroup.svelte.d.ts +0 -18
  393. package/components/editor/ToolbarSpacer.svelte.d.ts +0 -23
  394. package/components/editor/URLEditor.svelte +0 -13
  395. package/components/editor/URLEditor.svelte.d.ts +0 -18
  396. package/components/editor/UndoState.js +0 -1
  397. package/components/page/Acknowledgements.svelte.d.ts +0 -14
  398. package/components/page/Authors.svelte +0 -85
  399. package/components/page/Authors.svelte.d.ts +0 -21
  400. package/components/page/BookLoader.svelte +0 -59
  401. package/components/page/BookLoader.svelte.d.ts +0 -16
  402. package/components/page/BulkReferenceEditor.svelte +0 -63
  403. package/components/page/BulkReferenceEditor.svelte.d.ts +0 -14
  404. package/components/page/Chapter.svelte +0 -392
  405. package/components/page/Chapter.svelte.d.ts +0 -18
  406. package/components/page/ChapterContext.d.ts +0 -10
  407. package/components/page/ChapterContext.js +0 -1
  408. package/components/page/ChapterNumber.svelte.d.ts +0 -27
  409. package/components/page/ChapterTitle.svelte.d.ts +0 -18
  410. package/components/page/Contexts.d.ts +0 -47
  411. package/components/page/Contexts.js +0 -133
  412. package/components/page/DefinitionView.svelte.d.ts +0 -18
  413. package/components/page/Description.svelte.d.ts +0 -14
  414. package/components/page/Edition.svelte +0 -161
  415. package/components/page/Edition.svelte.d.ts +0 -20
  416. package/components/page/EditionLoader.svelte +0 -99
  417. package/components/page/EditionLoader.svelte.d.ts +0 -18
  418. package/components/page/Editions.svelte.d.ts +0 -14
  419. package/components/page/Glossary.svelte.d.ts +0 -14
  420. package/components/page/Header.svelte.d.ts +0 -29
  421. package/components/page/Index.svelte.d.ts +0 -14
  422. package/components/page/Instructions.svelte.d.ts +0 -18
  423. package/components/page/License.svelte.d.ts +0 -14
  424. package/components/page/Loading.svelte.d.ts +0 -23
  425. package/components/page/Media.svelte.d.ts +0 -14
  426. package/components/page/MediaPreview.svelte.d.ts +0 -19
  427. package/components/page/Muted.svelte.d.ts +0 -27
  428. package/components/page/Outline.svelte.d.ts +0 -19
  429. package/components/page/Page.svelte +0 -84
  430. package/components/page/Page.svelte.d.ts +0 -19
  431. package/components/page/PageHeader.svelte.d.ts +0 -18
  432. package/components/page/PageParagraph.svelte.d.ts +0 -27
  433. package/components/page/PossibleChapter.svelte +0 -14
  434. package/components/page/PossibleChapter.svelte.d.ts +0 -14
  435. package/components/page/PossibleReference.svelte +0 -11
  436. package/components/page/PossibleReference.svelte.d.ts +0 -18
  437. package/components/page/Print.svelte.d.ts +0 -14
  438. package/components/page/Publish.svelte.d.ts +0 -14
  439. package/components/page/Reference.svelte.d.ts +0 -17
  440. package/components/page/References.svelte.d.ts +0 -14
  441. package/components/page/Rows.svelte.d.ts +0 -27
  442. package/components/page/Search.svelte +0 -133
  443. package/components/page/Search.svelte.d.ts +0 -14
  444. package/components/page/Status.svelte.d.ts +0 -14
  445. package/components/page/SubdomainEditor.svelte.d.ts +0 -14
  446. package/components/page/TableOfContents.svelte.d.ts +0 -14
  447. package/components/page/TableOfContentsImage.svelte +0 -18
  448. package/components/page/TableOfContentsImage.svelte.d.ts +0 -16
  449. package/components/page/TableOfContentsRow.svelte.d.ts +0 -24
  450. package/components/page/ThemeEditor.svelte.d.ts +0 -14
  451. package/components/page/ThemeEditorPreview.svelte.d.ts +0 -17
  452. package/components/page/ThemeSetEditor.svelte +0 -19
  453. package/components/page/ThemeSetEditor.svelte.d.ts +0 -18
  454. package/components/page/ThemeVariableEditor.svelte.d.ts +0 -18
  455. package/components/page/Title.svelte.d.ts +0 -27
  456. package/components/page/Unknown.svelte.d.ts +0 -16
  457. package/components/page/margins.d.ts +0 -2
  458. package/index.d.ts +0 -15
  459. package/models/CRUD.d.ts +0 -27
  460. package/models/CRUD.js +0 -262
  461. package/models/Firebase.d.ts +0 -5
  462. package/models/book/Book.d.ts +0 -61
  463. package/models/book/Book.js +0 -135
  464. package/models/book/BookMedia.d.ts +0 -23
  465. package/models/book/BookMedia.js +0 -108
  466. package/models/book/BookSaveStatus.d.ts +0 -7
  467. package/models/book/BookSaveStatus.js +0 -8
  468. package/models/book/Chapter.d.ts +0 -81
  469. package/models/book/Chapter.js +0 -212
  470. package/models/book/ChapterID.d.ts +0 -10
  471. package/models/book/Definition.d.ts +0 -6
  472. package/models/book/Definition.js +0 -1
  473. package/models/book/Edition.d.ts +0 -139
  474. package/models/book/Edition.js +0 -620
  475. package/models/book/Reference.d.ts +0 -24
  476. package/models/book/Reference.js +0 -78
  477. package/models/book/Schema.d.ts +0 -174
  478. package/models/book/Theme.d.ts +0 -113
  479. package/models/book/ThemeColors.js +0 -1
  480. package/models/book/Words.d.ts +0 -2
  481. package/models/chapter/AtomNode.d.ts +0 -18
  482. package/models/chapter/BlockNode.d.ts +0 -20
  483. package/models/chapter/BlocksNode.d.ts +0 -50
  484. package/models/chapter/BlocksNode.test.d.ts +0 -1
  485. package/models/chapter/BlocksNode.test.js +0 -568
  486. package/models/chapter/Bookkeeping.js +0 -1
  487. package/models/chapter/CalloutNode.d.ts +0 -17
  488. package/models/chapter/CalloutNode.js +0 -58
  489. package/models/chapter/Caret.d.ts +0 -23
  490. package/models/chapter/ChapterNode.d.ts +0 -34
  491. package/models/chapter/ChapterNode.js +0 -117
  492. package/models/chapter/CitationsNode.d.ts +0 -16
  493. package/models/chapter/CodeNode.d.ts +0 -35
  494. package/models/chapter/CommentNode.d.ts +0 -18
  495. package/models/chapter/CommentNode.js +0 -48
  496. package/models/chapter/DefinitionNode.d.ts +0 -12
  497. package/models/chapter/Edit.d.ts +0 -7
  498. package/models/chapter/Edit.js +0 -1
  499. package/models/chapter/EmbedNode.d.ts +0 -45
  500. package/models/chapter/EmbedNode.js +0 -168
  501. package/models/chapter/ErrorNode.d.ts +0 -17
  502. package/models/chapter/FootnoteNode.d.ts +0 -18
  503. package/models/chapter/FootnoteNode.js +0 -47
  504. package/models/chapter/FormatNode.d.ts +0 -60
  505. package/models/chapter/FormatNode.test.d.ts +0 -1
  506. package/models/chapter/FormatNode.test.js +0 -96
  507. package/models/chapter/InlineCodeNode.d.ts +0 -12
  508. package/models/chapter/LabelNode.d.ts +0 -17
  509. package/models/chapter/LinkNode.d.ts +0 -12
  510. package/models/chapter/ListNode.d.ts +0 -51
  511. package/models/chapter/ListNode.test.d.ts +0 -1
  512. package/models/chapter/MetadataNode.d.ts +0 -17
  513. package/models/chapter/MetadataNode.js +0 -32
  514. package/models/chapter/Node.d.ts +0 -38
  515. package/models/chapter/Node.test.d.ts +0 -1
  516. package/models/chapter/ParagraphNode.d.ts +0 -33
  517. package/models/chapter/ParagraphNode.test.d.ts +0 -1
  518. package/models/chapter/ParagraphNode.test.js +0 -30
  519. package/models/chapter/Parser.d.ts +0 -75
  520. package/models/chapter/Parser.test.d.ts +0 -1
  521. package/models/chapter/Position.js +0 -1
  522. package/models/chapter/QuoteNode.d.ts +0 -25
  523. package/models/chapter/QuoteNode.js +0 -99
  524. package/models/chapter/RootNode.js +0 -1
  525. package/models/chapter/RuleNode.d.ts +0 -15
  526. package/models/chapter/TableNode.d.ts +0 -37
  527. package/models/chapter/TableNode.test.d.ts +0 -1
  528. package/models/chapter/TextNode.d.ts +0 -36
  529. package/models/chapter/TextNode.test.d.ts +0 -1
  530. package/util/getSubdomain.d.ts +0 -3
  531. package/util/isMobile.d.ts +0 -2
  532. package/util/mineReference.d.ts +0 -4
  533. package/util/scrollToEyeLevel.d.ts +0 -2
@@ -1,23 +1,35 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import Atom from './Atom.svelte';
4
- import Marginal from './Marginal.svelte';
5
- import Format from './Format.svelte';
6
- import { getChapter, isChapterEditable, getCaret, getEdition, } from '../page/Contexts';
7
- import { afterUpdate } from 'svelte';
8
- import Icon from '../editor/Icon.svelte';
9
- import CommentIcon from '../editor/icons/comment.svg?raw';
10
- export let node;
11
- let chapter = getChapter();
12
- let edition = getEdition();
13
- let editable = isChapterEditable();
14
- let caret = getCaret();
15
- $: chapterNode =
16
- $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
17
- $: focused =
18
- $caret && $caret.range && node.contains($caret.range.start.node);
19
- // Position the marginals on every render.
20
- afterUpdate(() => $chapter?.layoutMarginals());
3
+ <script lang="ts">
4
+ import type CommentNode from '$lib/models/chapter/CommentNode';
5
+ import Atom from './Atom.svelte';
6
+ import Marginal from './Marginal.svelte';
7
+ import Format from './Format.svelte';
8
+ import {
9
+ getChapter,
10
+ isChapterEditable,
11
+ getCaret,
12
+ getEdition,
13
+ } from '$lib/components/page/Contexts';
14
+ import { afterUpdate } from 'svelte';
15
+ import Icon from '../editor/Icon.svelte';
16
+ import CommentIcon from '../editor/icons/comment.svg?raw';
17
+
18
+ export let node: CommentNode;
19
+
20
+ let chapter = getChapter();
21
+ let edition = getEdition();
22
+ let editable = isChapterEditable();
23
+
24
+ let caret = getCaret();
25
+
26
+ $: chapterNode =
27
+ $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
28
+ $: focused =
29
+ $caret && $caret.range && node.contains($caret.range.start.node);
30
+
31
+ // Position the marginals on every render.
32
+ afterUpdate(() => $chapter?.layoutMarginals());
21
33
  </script>
22
34
 
23
35
  <Atom {node}>
@@ -1,22 +1,28 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import Parser from '../../models/chapter/Parser';
4
- import Text from './Text.svelte';
5
- import Format from './Format.svelte';
6
- import Marginal from './Marginal.svelte';
7
- import Problem from './Problem.svelte';
8
- import { getChapter, getEdition } from '../page/Contexts';
9
- import { afterUpdate } from 'svelte';
10
- export let node;
11
- let edition = getEdition();
12
- let chapter = getChapter();
13
- // Find the definition.
14
- $: glossaryID = node.getMeta();
15
- $: phrase = node.getText();
16
- $: glossary = $edition?.getGlossary() ?? {};
17
- $: entry = glossary[glossaryID];
18
- // Position the marginals on every render.
19
- afterUpdate(() => $chapter?.layoutMarginals());
3
+ <script lang="ts">
4
+ import Parser from '$lib/models/chapter/Parser';
5
+ import type DefinitionNode from '$lib/models/chapter/DefinitionNode';
6
+ import Text from './Text.svelte';
7
+ import Format from './Format.svelte';
8
+ import Marginal from './Marginal.svelte';
9
+ import Problem from './Problem.svelte';
10
+ import { getChapter, getEdition } from '../page/Contexts';
11
+ import { afterUpdate } from 'svelte';
12
+
13
+ export let node: DefinitionNode;
14
+
15
+ let edition = getEdition();
16
+ let chapter = getChapter();
17
+
18
+ // Find the definition.
19
+ $: glossaryID = node.getMeta();
20
+ $: phrase = node.getText();
21
+ $: glossary = $edition?.getGlossary() ?? {};
22
+ $: entry = glossary[glossaryID];
23
+
24
+ // Position the marginals on every render.
25
+ afterUpdate(() => $chapter?.layoutMarginals());
20
26
  </script>
21
27
 
22
28
  <!-- Error if there's no corresponding entry. -->
@@ -1,84 +1,104 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import { storage } from '../../models/Firebase';
4
- import { getCaret, getBook, getBase } from '../page/Contexts';
5
- import Figure from './Figure.svelte';
6
- import { getContext } from 'svelte';
7
- export let node;
8
- export let editable = false;
9
- export let placeholder = '';
10
- export let imageOnly = false;
11
- $: url = node.getURL();
12
- $: description = node.getDescription();
13
- let caret = getCaret();
14
- let book = getBook();
15
- let base = getBase();
16
- // Bookish editor should have passed down a way to set the active editor.
17
- let claimCaret = getContext('claimeditor');
18
- let dragging = false;
19
- let dragFeedback = undefined;
20
- let imageError = false;
21
- $: if (node)
22
- imageError = false;
23
- function handleDrop(event) {
24
- event.preventDefault();
25
- if (event.dataTransfer?.items) {
26
- // Get the files and convert them to file opens, then filter by allowed file extensions
27
- const imageFiles = [...event.dataTransfer.items]
28
- .filter((item) => item.kind === 'file')
29
- .map((item) => item.getAsFile())
30
- .filter((file) => file !== null && /.*\.(jpg|jpeg|png)/i.test(file.name));
31
- if (imageFiles.length === 0)
32
- dragFeedback = 'Only JPEG or PNG images are allowed.';
33
- else if (imageFiles.length > 1)
34
- dragFeedback = 'Only one image at a time please!';
35
- else {
36
- dragFeedback = 'Uploading…';
37
- const file = imageFiles[0];
38
- const media = $book?.getMedia();
39
- if (file === null)
40
- return;
41
- if (storage === undefined)
42
- return;
43
- if (media === undefined)
44
- return;
45
- media.upload(file, (progress) => (dragFeedback = `${progress}% done`), (error) => {
46
- dragFeedback = error;
47
- dragging = false;
48
- }, (url, thumbnails) => {
49
- // Upload completed successfully, now we can get the download URL
50
- $caret?.edit(node, node.withURLs(url, thumbnails).withDescription(''));
51
- dragging = false;
52
- dragFeedback = undefined;
53
- });
3
+ <script lang="ts">
4
+ import type EmbedNode from '$lib/models/chapter/EmbedNode';
5
+ import { storage } from '$lib/models/Firebase';
6
+ import { getCaret, getBook, getBase } from '$lib/components/page/Contexts';
7
+ import Figure from './Figure.svelte';
8
+ import { getContext } from 'svelte';
9
+
10
+ export let node: EmbedNode;
11
+ export let editable: boolean = false;
12
+ export let placeholder: string = '';
13
+ export let imageOnly: boolean = false;
14
+
15
+ $: url = node.getURL();
16
+ $: description = node.getDescription();
17
+
18
+ let caret = getCaret();
19
+ let book = getBook();
20
+ let base = getBase();
21
+
22
+ // Bookish editor should have passed down a way to set the active editor.
23
+ let claimCaret = getContext<Function>('claimeditor');
24
+
25
+ let dragging = false;
26
+ let dragFeedback: undefined | string = undefined;
27
+ let imageError = false;
28
+ $: if (node) imageError = false;
29
+
30
+ function handleDrop(event: DragEvent) {
31
+ event.preventDefault();
32
+ if (event.dataTransfer?.items) {
33
+ // Get the files and convert them to file opens, then filter by allowed file extensions
34
+ const imageFiles = [...event.dataTransfer.items]
35
+ .filter((item) => item.kind === 'file')
36
+ .map((item) => item.getAsFile())
37
+ .filter(
38
+ (file) =>
39
+ file !== null && /.*\.(jpg|jpeg|png)/i.test(file.name)
40
+ );
41
+ if (imageFiles.length === 0)
42
+ dragFeedback = 'Only JPEG or PNG images are allowed.';
43
+ else if (imageFiles.length > 1)
44
+ dragFeedback = 'Only one image at a time please!';
45
+ else {
46
+ dragFeedback = 'Uploading…';
47
+
48
+ const file = imageFiles[0];
49
+ const media = $book?.getMedia();
50
+
51
+ if (file === null) return;
52
+ if (storage === undefined) return;
53
+ if (media === undefined) return;
54
+
55
+ media.upload(
56
+ file,
57
+ (progress: number) => (dragFeedback = `${progress}% done`),
58
+ (error: string) => {
59
+ dragFeedback = error;
60
+ dragging = false;
61
+ },
62
+ (url: string, thumbnails: string) => {
63
+ // Upload completed successfully, now we can get the download URL
64
+ $caret?.edit(
65
+ node,
66
+ node.withURLs(url, thumbnails).withDescription('')
67
+ );
68
+ dragging = false;
69
+ dragFeedback = undefined;
70
+ }
71
+ );
72
+ }
54
73
  }
55
74
  }
56
- }
57
- function handleDrag(event) {
58
- event?.preventDefault();
59
- dragging = true;
60
- dragFeedback = 'Drop to upload…';
61
- // If we have a way to claim the caret, claim it, since we want to be able to make an edit with the active caret.
62
- if (claimCaret)
63
- claimCaret();
64
- }
65
- function handleDragLeave(event) {
66
- if (event.target !== event.currentTarget)
67
- return;
68
- event?.preventDefault();
69
- dragging = false;
70
- dragFeedback = undefined;
71
- }
72
- function handleLoad() {
73
- imageError = false;
74
- }
75
- function handleError() {
76
- imageError = true;
77
- }
78
- function handleClick() {
79
- if (claimCaret)
80
- claimCaret();
81
- }
75
+
76
+ function handleDrag(event: DragEvent) {
77
+ event?.preventDefault();
78
+ dragging = true;
79
+ dragFeedback = 'Drop to upload…';
80
+ // If we have a way to claim the caret, claim it, since we want to be able to make an edit with the active caret.
81
+ if (claimCaret) claimCaret();
82
+ }
83
+
84
+ function handleDragLeave(event: DragEvent) {
85
+ if (event.target !== event.currentTarget) return;
86
+ event?.preventDefault();
87
+ dragging = false;
88
+ dragFeedback = undefined;
89
+ }
90
+
91
+ function handleLoad() {
92
+ imageError = false;
93
+ }
94
+
95
+ function handleError() {
96
+ imageError = true;
97
+ }
98
+
99
+ function handleClick() {
100
+ if (claimCaret) claimCaret();
101
+ }
82
102
  </script>
83
103
 
84
104
  {#if imageError}
@@ -0,0 +1,12 @@
1
+ <svelte:options immutable={true} />
2
+
3
+ <script lang="ts">
4
+ import type ErrorNode from '$lib/models/chapter/ErrorNode';
5
+ import Problem from './Problem.svelte';
6
+
7
+ export let node: ErrorNode;
8
+ </script>
9
+
10
+ <Problem
11
+ ><span data-nodeid={node.nodeID}>Error: {node.getError()}</span></Problem
12
+ >
@@ -1,31 +1,39 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import Format from './Format.svelte';
4
- import Positioned from './Positioned.svelte';
5
- import { getCaret, isChapterEditable } from '../page/Contexts';
6
- export let node;
7
- export let caption;
8
- export let credit = undefined;
9
- let editable = isChapterEditable();
10
- let caret = getCaret();
11
- $: selected = $caret?.range?.start.node === node;
12
- function focusFigure() {
13
- if (!editable || $caret === undefined)
14
- return;
15
- // if (node instanceof EmbedNode) {
16
- // return $caret.setCaret({
17
- // start: { node, index: 0 },
18
- // end: { node, index: 0 },
19
- // });
20
- // } else {
21
- const firstCaret = node.getFirstCaret();
22
- if (firstCaret)
23
- $caret.setCaret({
24
- start: firstCaret,
25
- end: firstCaret,
26
- });
27
- // }
28
- }
3
+ <script lang="ts">
4
+ import type TableNode from '$lib/models/chapter/TableNode';
5
+ import type EmbedNode from '$lib/models/chapter/EmbedNode';
6
+ import Format from './Format.svelte';
7
+ import type CodeNode from '$lib/models/chapter/CodeNode';
8
+ import type FormatNode from '$lib/models/chapter/FormatNode';
9
+ import Positioned from './Positioned.svelte';
10
+ import { getCaret, isChapterEditable } from '../page/Contexts';
11
+
12
+ export let node: TableNode | EmbedNode | CodeNode;
13
+ export let caption: FormatNode | undefined;
14
+ export let credit: FormatNode | undefined = undefined;
15
+
16
+ let editable = isChapterEditable();
17
+ let caret = getCaret();
18
+
19
+ $: selected = $caret?.range?.start.node === node;
20
+
21
+ function focusFigure() {
22
+ if (!editable || $caret === undefined) return;
23
+ // if (node instanceof EmbedNode) {
24
+ // return $caret.setCaret({
25
+ // start: { node, index: 0 },
26
+ // end: { node, index: 0 },
27
+ // });
28
+ // } else {
29
+ const firstCaret = node.getFirstCaret();
30
+ if (firstCaret)
31
+ $caret.setCaret({
32
+ start: firstCaret,
33
+ end: firstCaret,
34
+ });
35
+ // }
36
+ }
29
37
  </script>
30
38
 
31
39
  <Positioned position={node.getPosition()}>
@@ -1,28 +1,40 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import Atom from './Atom.svelte';
4
- import Marginal from './Marginal.svelte';
5
- import Format from './Format.svelte';
6
- import { getChapter, getEdition, getCaret, } from '../page/Contexts';
7
- import { afterUpdate } from 'svelte';
8
- export let node;
9
- $: content = node.getMeta();
10
- let caret = getCaret();
11
- let chapter = getChapter();
12
- let edition = getEdition();
13
- // What footnote number is this?
14
- $: ast =
15
- $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
16
- $: number = ast?.getFootnotes().indexOf(node);
17
- $: letter =
18
- number === undefined ? undefined : $edition?.getFootnoteSymbol(number);
19
- $: focused =
20
- ast &&
3
+ <script lang="ts">
4
+ import type FootnoteNode from '$lib/models/chapter/FootnoteNode';
5
+ import Atom from '$lib/components/chapter/Atom.svelte';
6
+ import Marginal from '$lib/components/chapter/Marginal.svelte';
7
+ import Format from './Format.svelte';
8
+ import {
9
+ getChapter,
10
+ getEdition,
11
+ getCaret,
12
+ } from '$lib/components/page/Contexts';
13
+ import { afterUpdate } from 'svelte';
14
+
15
+ export let node: FootnoteNode;
16
+
17
+ $: content = node.getMeta();
18
+ let caret = getCaret();
19
+
20
+ let chapter = getChapter();
21
+ let edition = getEdition();
22
+
23
+ // What footnote number is this?
24
+ $: ast =
25
+ $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
26
+ $: number = ast?.getFootnotes().indexOf(node);
27
+ $: letter =
28
+ number === undefined ? undefined : $edition?.getFootnoteSymbol(number);
29
+
30
+ $: focused =
31
+ ast &&
21
32
  $caret &&
22
33
  $caret.range &&
23
34
  $caret.range.start.node.hasAncestor(ast, node);
24
- // Position the marginals on every render.
25
- afterUpdate(() => $chapter?.layoutMarginals());
35
+
36
+ // Position the marginals on every render.
37
+ afterUpdate(() => $chapter?.layoutMarginals());
26
38
  </script>
27
39
 
28
40
  <Atom {node}>
@@ -1,41 +1,46 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import FormatNode from '../../models/chapter/FormatNode';
4
- import CitationsNode from '../../models/chapter/CitationsNode';
5
- import CommentNode from '../../models/chapter/CommentNode';
6
- import DefinitionNode from '../../models/chapter/DefinitionNode';
7
- import FootnoteNode from '../../models/chapter/FootnoteNode';
8
- import InlineCodeNode from '../../models/chapter/InlineCodeNode';
9
- import LabelNode from '../../models/chapter/LabelNode';
10
- import LinkNode from '../../models/chapter/LinkNode';
11
- import TextNode from '../../models/chapter/TextNode';
12
- import Problem from './Problem.svelte';
13
- import Citations from './Citations.svelte';
14
- import Definition from './Definition.svelte';
15
- import Footnote from './Footnote.svelte';
16
- import InlineCode from './InlineCode.svelte';
17
- import Label from './Label.svelte';
18
- import Link from './Link.svelte';
19
- import Comment from './Comment.svelte';
20
- import Text from './Text.svelte';
21
- import Format from './Format.svelte';
22
- import { isChapterEditable } from '../page/Contexts';
23
- export let node;
24
- export let editable = false;
25
- export let placeholder = undefined;
26
- $: format = node.getFormat();
27
- $: tag =
28
- format === '*'
29
- ? 'strong'
30
- : format === '_'
3
+ <script lang="ts">
4
+ import FormatNode from '$lib/models/chapter/FormatNode';
5
+ import CitationsNode from '$lib/models/chapter/CitationsNode';
6
+ import CommentNode from '$lib/models/chapter/CommentNode';
7
+ import DefinitionNode from '$lib/models/chapter/DefinitionNode';
8
+ import FootnoteNode from '$lib/models/chapter/FootnoteNode';
9
+ import InlineCodeNode from '$lib/models/chapter/InlineCodeNode';
10
+ import LabelNode from '$lib/models/chapter/LabelNode';
11
+ import LinkNode from '$lib/models/chapter/LinkNode';
12
+ import TextNode from '$lib/models/chapter/TextNode';
13
+ import Problem from './Problem.svelte';
14
+
15
+ import Citations from './Citations.svelte';
16
+ import Definition from './Definition.svelte';
17
+ import Footnote from './Footnote.svelte';
18
+ import InlineCode from './InlineCode.svelte';
19
+ import Label from './Label.svelte';
20
+ import Link from './Link.svelte';
21
+ import Comment from './Comment.svelte';
22
+ import Text from './Text.svelte';
23
+ import Format from './Format.svelte';
24
+ import { isChapterEditable } from '../page/Contexts';
25
+
26
+ export let node: FormatNode;
27
+ export let editable: boolean = false;
28
+ export let placeholder: string | undefined = undefined;
29
+
30
+ $: format = node.getFormat();
31
+ $: tag =
32
+ format === '*'
33
+ ? 'strong'
34
+ : format === '_'
31
35
  ? 'em'
32
36
  : format === '^'
33
- ? 'sup'
34
- : format === 'v'
35
- ? 'sub'
36
- : 'span';
37
- $: showPlaceholder =
38
- node.isEmptyText() &&
37
+ ? 'sup'
38
+ : format === 'v'
39
+ ? 'sub'
40
+ : 'span';
41
+
42
+ $: showPlaceholder =
43
+ node.isEmptyText() &&
39
44
  placeholder !== undefined &&
40
45
  (editable || isChapterEditable());
41
46
  </script>
@@ -1,10 +1,14 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import { isChapterEditable } from '../page/Contexts';
4
- import Code from './Code.svelte';
5
- import Text from './Text.svelte';
6
- export let node;
7
- let editable = isChapterEditable();
3
+ <script lang="ts">
4
+ import type InlineCodeNode from '$lib/models/chapter/InlineCodeNode';
5
+ import { isChapterEditable } from '../page/Contexts';
6
+ import Code from './Code.svelte';
7
+ import Text from './Text.svelte';
8
+
9
+ export let node: InlineCodeNode;
10
+
11
+ let editable = isChapterEditable();
8
12
  </script>
9
13
 
10
14
  {#if editable}
@@ -1,19 +1,28 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import Atom from './Atom.svelte';
4
- import { getChapter, getEdition, isChapterEditable, } from '../page/Contexts';
5
- import Problem from './Problem.svelte';
6
- export let node;
7
- let editable = isChapterEditable();
8
- let chapter = getChapter();
9
- let edition = getEdition();
10
- $: ast =
11
- $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
12
- $: duplicate =
13
- ast === undefined
14
- ? false
15
- : ast.getLabels().filter((l) => l.getMeta() === node.getMeta())
16
- .length > 1;
3
+ <script lang="ts">
4
+ import type LabelNode from '$lib/models/chapter/LabelNode';
5
+ import Atom from '$lib/components/chapter/Atom.svelte';
6
+ import {
7
+ getChapter,
8
+ getEdition,
9
+ isChapterEditable,
10
+ } from '../page/Contexts';
11
+ import Problem from './Problem.svelte';
12
+
13
+ export let node: LabelNode;
14
+
15
+ let editable = isChapterEditable();
16
+ let chapter = getChapter();
17
+ let edition = getEdition();
18
+
19
+ $: ast =
20
+ $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
21
+ $: duplicate =
22
+ ast === undefined
23
+ ? false
24
+ : ast.getLabels().filter((l) => l.getMeta() === node.getMeta())
25
+ .length > 1;
17
26
  </script>
18
27
 
19
28
  <Atom {node}>
@@ -1,28 +1,34 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import { getBase, getEdition, isChapterEditable } from '../page/Contexts';
4
- import Text from './Text.svelte';
5
- import Problem from './Problem.svelte';
6
- export let node;
7
- let base = getBase();
8
- let editable = isChapterEditable();
9
- let edition = getEdition();
10
- $: url = node.getMeta();
11
- $: content = node.getText();
12
- function isInvalidChapterLink() {
13
- // If it's internal, validate it.
14
- if (!url.startsWith('http')) {
15
- // Pull out any labels and just get the chapter name.
16
- let chapter = url;
17
- if (url.indexOf(':') >= 0) {
18
- let parts = chapter.split(':');
19
- chapter = parts[0];
3
+ <script lang="ts">
4
+ import type LinkNode from '$lib/models/chapter/LinkNode';
5
+ import { getBase, getEdition, isChapterEditable } from '../page/Contexts';
6
+ import Text from './Text.svelte';
7
+ import Problem from './Problem.svelte';
8
+
9
+ export let node: LinkNode;
10
+
11
+ let base = getBase();
12
+ let editable = isChapterEditable();
13
+ let edition = getEdition();
14
+
15
+ $: url = node.getMeta();
16
+ $: content = node.getText();
17
+
18
+ function isInvalidChapterLink() {
19
+ // If it's internal, validate it.
20
+ if (!url.startsWith('http')) {
21
+ // Pull out any labels and just get the chapter name.
22
+ let chapter = url;
23
+ if (url.indexOf(':') >= 0) {
24
+ let parts = chapter.split(':');
25
+ chapter = parts[0];
26
+ }
27
+
28
+ if (chapter !== '' && !$edition?.hasChapter(chapter)) return true;
20
29
  }
21
- if (chapter !== '' && !$edition?.hasChapter(chapter))
22
- return true;
30
+ return false;
23
31
  }
24
- return false;
25
- }
26
32
  </script>
27
33
 
28
34
  {#if editable}