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,27 +1,37 @@
1
- <script>import TableOfContentsImage from './TableOfContentsImage.svelte';
2
- import Toggle from '../editor/Toggle.svelte';
3
- import ConfirmButton from '../editor/ConfirmButton.svelte';
4
- import { getBase, getEdition, isEditionEditable, setChapter, } from './Contexts';
5
- import Muted from './Muted.svelte';
6
- import ChapterNumber from './ChapterNumber.svelte';
7
- import Button from '../app/Button.svelte';
8
- import ChapterTitle from './ChapterTitle.svelte';
9
- export let chapterID;
10
- export let chapter = undefined;
11
- export let title;
12
- export let number = undefined;
13
- export let forthcoming = false;
14
- let edition = getEdition();
15
- let base = getBase();
16
- let editable = isEditionEditable();
17
- function moveUp() {
18
- if ($edition && chapter)
19
- edition.set($edition.withMovedChapter(chapter.getID(), -1));
20
- }
21
- function moveDown() {
22
- if ($edition && chapter)
23
- edition.set($edition.withMovedChapter(chapter.getID(), 1));
24
- }
1
+ <script lang="ts">
2
+ import TableOfContentsImage from './TableOfContentsImage.svelte';
3
+ import type Chapter from '$lib/models/book/Chapter';
4
+ import Toggle from '$lib/components/editor/Toggle.svelte';
5
+ import ConfirmButton from '$lib/components/editor/ConfirmButton.svelte';
6
+ import {
7
+ getBase,
8
+ getEdition,
9
+ isEditionEditable,
10
+ setChapter,
11
+ } from './Contexts';
12
+ import Muted from './Muted.svelte';
13
+ import ChapterNumber from './ChapterNumber.svelte';
14
+ import Button from '../app/Button.svelte';
15
+ import ChapterTitle from './ChapterTitle.svelte';
16
+
17
+ export let chapterID: string;
18
+ export let chapter: Chapter | undefined = undefined;
19
+ export let title: string;
20
+ export let number: number | undefined = undefined;
21
+ export let forthcoming: boolean = false;
22
+
23
+ let edition = getEdition();
24
+ let base = getBase();
25
+ let editable = isEditionEditable();
26
+
27
+ function moveUp() {
28
+ if ($edition && chapter)
29
+ edition.set($edition.withMovedChapter(chapter.getID(), -1));
30
+ }
31
+ function moveDown() {
32
+ if ($edition && chapter)
33
+ edition.set($edition.withMovedChapter(chapter.getID(), 1));
34
+ }
25
35
  </script>
26
36
 
27
37
  <tr class="toc-row" class:forthcoming>
@@ -1,36 +1,47 @@
1
- <script>import Header from './Header.svelte';
2
- import Outline from './Outline.svelte';
3
- import Page from './Page.svelte';
4
- import { BookishTheme, CriticalTheme, HumanTheme, SeriousTheme, SketchyTheme, TechTheme, } from '../../models/book/Theme';
5
- import ConfirmButton from '../editor/ConfirmButton.svelte';
6
- import Instructions from './Instructions.svelte';
7
- import ThemeSetEditor from './ThemeSetEditor.svelte';
8
- import ThemeEditorPreview from './ThemeEditorPreview.svelte';
9
- import { getEdition, isEditionEditable } from './Contexts';
10
- import TextEditor from '../editor/TextEditor.svelte';
11
- import Button from '../app/Button.svelte';
12
- import Switch from '../editor/Switch.svelte';
13
- import Link from '../app/Link.svelte';
14
- import Rows from './Rows.svelte';
15
- const themes = {
16
- Bookish: BookishTheme,
17
- Serious: SeriousTheme,
18
- Tech: TechTheme,
19
- Human: HumanTheme,
20
- Sketchy: SketchyTheme,
21
- Critical: CriticalTheme,
22
- };
23
- let editable = isEditionEditable();
24
- let edition = getEdition();
25
- $: theme = $edition ? $edition.getTheme() : null;
26
- $: isDefault =
27
- theme === null || Object.values(themes).includes(theme);
28
- function getEmptyGroup(group) {
29
- const empty = {};
30
- for (const key in Object.keys(group))
31
- empty[key] = '';
32
- return empty;
33
- }
1
+ <script lang="ts">
2
+ import Header from './Header.svelte';
3
+ import Outline from './Outline.svelte';
4
+ import Page from './Page.svelte';
5
+ import {
6
+ BookishTheme,
7
+ CriticalTheme,
8
+ HumanTheme,
9
+ SeriousTheme,
10
+ SketchyTheme,
11
+ TechTheme,
12
+ } from '$lib/models/book/Theme';
13
+ import ConfirmButton from '$lib/components/editor/ConfirmButton.svelte';
14
+ import Instructions from './Instructions.svelte';
15
+ import ThemeSetEditor from './ThemeSetEditor.svelte';
16
+ import ThemeEditorPreview from './ThemeEditorPreview.svelte';
17
+ import { getEdition, isEditionEditable } from './Contexts';
18
+ import TextEditor from '../editor/TextEditor.svelte';
19
+ import type Theme from '$lib/models/book/Theme';
20
+ import Button from '../app/Button.svelte';
21
+ import Switch from '../editor/Switch.svelte';
22
+ import Link from '../app/Link.svelte';
23
+ import Rows from './Rows.svelte';
24
+
25
+ const themes: Record<string, Theme> = {
26
+ Bookish: BookishTheme,
27
+ Serious: SeriousTheme,
28
+ Tech: TechTheme,
29
+ Human: HumanTheme,
30
+ Sketchy: SketchyTheme,
31
+ Critical: CriticalTheme,
32
+ };
33
+
34
+ let editable = isEditionEditable();
35
+ let edition = getEdition();
36
+ $: theme = $edition ? $edition.getTheme() : null;
37
+ $: isDefault =
38
+ theme === null || Object.values(themes).includes(theme as Theme);
39
+
40
+ function getEmptyGroup(group: Record<string, string>) {
41
+ const empty: Record<string, string> = {};
42
+ for (const key in Object.keys(group)) empty[key] = '';
43
+ return empty;
44
+ }
34
45
  </script>
35
46
 
36
47
  {#if theme && $edition}
@@ -1,16 +1,24 @@
1
- <script>import ChapterBody from '../chapter/ChapterBody.svelte';
2
- import Parser from '../../models/chapter/Parser';
3
- import { getDarkMode } from './Contexts';
4
- export let theme;
5
- let position;
6
- let darkMode = getDarkMode();
7
- $: backgroundColor =
8
- theme === null
9
- ? null
10
- : $darkMode
1
+ <script lang="ts">
2
+ import type Theme from '$lib/models/book/Theme';
3
+ import ChapterBody from '$lib/components/chapter/ChapterBody.svelte';
4
+ import Parser from '$lib/models/chapter/Parser';
5
+ import { getDarkMode } from './Contexts';
6
+
7
+ export let theme: Theme | null;
8
+
9
+ let position: number;
10
+
11
+ let darkMode = getDarkMode();
12
+ $: backgroundColor =
13
+ theme === null
14
+ ? null
15
+ : $darkMode
11
16
  ? theme.dark?.backgroundColor
12
17
  : theme.light?.backgroundColor;
13
- $: preview = Parser.parseChapter(undefined, `# Header 1
18
+
19
+ $: preview = Parser.parseChapter(
20
+ undefined,
21
+ `# Header 1
14
22
  ## Header 2
15
23
  ### Header 3
16
24
 
@@ -18,7 +26,8 @@ $: preview = Parser.parseChapter(undefined, `# Header 1
18
26
 
19
27
  * How does it look?
20
28
  * Would you change anything?
21
- `);
29
+ `
30
+ );
22
31
  </script>
23
32
 
24
33
  <aside
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import PageHeader from './PageHeader.svelte';
3
+ import Rows from './Rows.svelte';
4
+ import ThemeVariableEditor from './ThemeVariableEditor.svelte';
5
+
6
+ export let header: string;
7
+ export let group: string;
8
+ export let properties: Record<string, string>;
9
+ </script>
10
+
11
+ <PageHeader>{header}</PageHeader>
12
+
13
+ <Rows>
14
+ {#each Object.keys(properties).sort() as property}
15
+ <ThemeVariableEditor
16
+ {group}
17
+ name={property}
18
+ value={properties[property]}
19
+ />
20
+ {/each}
21
+ </Rows>
@@ -1,17 +1,21 @@
1
- <script>import TextEditor from '../editor/TextEditor.svelte';
2
- import { getEdition } from './Contexts';
3
- const placeholders = {
4
- light: 'CSS color',
5
- dark: 'CSS color',
6
- fonts: 'CSS font name',
7
- sizes: 'CSS font size',
8
- weights: 'CSS font weights',
9
- spacing: 'CSS length',
10
- };
11
- export let group;
12
- export let name;
13
- export let value;
14
- let edition = getEdition();
1
+ <script lang="ts">
2
+ import TextEditor from '$lib/components/editor/TextEditor.svelte';
3
+ import { getEdition } from './Contexts';
4
+
5
+ const placeholders: Record<string, string> = {
6
+ light: 'CSS color',
7
+ dark: 'CSS color',
8
+ fonts: 'CSS font name',
9
+ sizes: 'CSS font size',
10
+ weights: 'CSS font weights',
11
+ spacing: 'CSS length',
12
+ };
13
+
14
+ export let group: string;
15
+ export let name: string;
16
+ export let value: string;
17
+
18
+ let edition = getEdition();
15
19
  </script>
16
20
 
17
21
  <tr>
@@ -1,11 +1,13 @@
1
- <script>import Header from './Header.svelte';
2
- import Outline from './Outline.svelte';
3
- import Page from './Page.svelte';
4
- import Instructions from './Instructions.svelte';
5
- import ChapterIDs from '../../models/book/ChapterID';
6
- import { getEdition, isEditionEditable } from './Contexts';
7
- let editable = isEditionEditable();
8
- let edition = getEdition();
1
+ <script lang="ts">
2
+ import Header from './Header.svelte';
3
+ import Outline from './Outline.svelte';
4
+ import Page from './Page.svelte';
5
+ import Instructions from './Instructions.svelte';
6
+ import ChapterIDs from '$lib/models/book/ChapterID';
7
+ import { getEdition, isEditionEditable } from './Contexts';
8
+
9
+ let editable = isEditionEditable();
10
+ let edition = getEdition();
9
11
  </script>
10
12
 
11
13
  {#if $edition}
@@ -2,46 +2,56 @@
2
2
  // This operates on the DOM directly, as scroll position isn't easily managed in React.
3
3
  export function hideOutlineIfObscured() {
4
4
  // Get the outline's bounds.
5
- let outline = document.getElementsByClassName('outline')[0];
5
+ let outline = document.getElementsByClassName('outline')[0] as HTMLElement;
6
+
6
7
  // If there's no outline, don't bother.
7
- if (!outline)
8
- return;
8
+ if (!outline) return;
9
+
9
10
  // Set a threshold for hiding
10
11
  let threshold = 100;
12
+
11
13
  // If the outline isn't affixed to the footer
12
14
  if (window.getComputedStyle(outline).getPropertyValue('left') !== '0px') {
13
15
  let outlineRect = outline.getBoundingClientRect();
14
- let overlapRect = undefined;
16
+ let overlapRect: DOMRect | undefined = undefined;
17
+
15
18
  // Find the bottom-most left inset marginal within threshold of the outline.
16
- Array.from(document.getElementsByClassName('inset-left')).forEach((el) => {
17
- let insetRect = el.getBoundingClientRect();
18
- if (!(outlineRect.bottom < insetRect.top - threshold ||
19
- outlineRect.top > insetRect.bottom + threshold))
20
- overlapRect = insetRect;
21
- });
19
+ Array.from(document.getElementsByClassName('inset-left')).forEach(
20
+ (el) => {
21
+ let insetRect: DOMRect = el.getBoundingClientRect();
22
+ if (
23
+ !(
24
+ outlineRect.bottom < insetRect.top - threshold ||
25
+ outlineRect.top > insetRect.bottom + threshold
26
+ )
27
+ )
28
+ overlapRect = insetRect;
29
+ }
30
+ );
31
+
22
32
  // If it overlaps, reduce opacity by the proportion of the vertical distance between two rectangles and the height of the marginal.
23
33
  if (overlapRect) {
24
- let overlap = overlapRect;
25
- let distance = outlineRect.bottom < overlap.top
26
- ? threshold
27
- : outlineRect.bottom < overlap.top + threshold
34
+ let overlap: DOMRect = overlapRect;
35
+ let distance =
36
+ outlineRect.bottom < overlap.top
37
+ ? threshold
38
+ : outlineRect.bottom < overlap.top + threshold
28
39
  ? threshold - (outlineRect.bottom - overlap.top)
29
40
  : outlineRect.top > overlap.bottom - threshold
30
- ? threshold - (overlap.bottom - outlineRect.top)
31
- : outlineRect.top > overlap.bottom
32
- ? threshold
33
- : 0;
41
+ ? threshold - (overlap.bottom - outlineRect.top)
42
+ : outlineRect.top > overlap.bottom
43
+ ? threshold
44
+ : 0;
34
45
  let proportion = distance / threshold;
35
46
  outline.style.opacity = '' + proportion * proportion;
36
47
  }
37
48
  // Otherwise, remove the dimming.
38
- else
39
- outline.style.removeProperty('opacity');
49
+ else outline.style.removeProperty('opacity');
40
50
  }
41
51
  // If it is, it's always visible.
42
- else
43
- outline.style.removeProperty('opacity');
52
+ else outline.style.removeProperty('opacity');
44
53
  }
54
+
45
55
  // After each render of the chapter, we need to adjust the layout of marginals, which by default are floating from
46
56
  // their little spans within the body of the text.
47
57
  //
@@ -54,45 +64,60 @@ export function hideOutlineIfObscured() {
54
64
  // fixed in a fixed position.
55
65
  export function layoutMarginals() {
56
66
  // Get the chapter DOM node, so we can calculate margins.
57
- let chapter = document.getElementsByClassName('bookish-chapter-body')[0];
67
+ let chapter = document.getElementsByClassName(
68
+ 'bookish-chapter-body'
69
+ )[0] as HTMLElement;
70
+
58
71
  // If there's no chapter rendered yet, stop.
59
- if (chapter === undefined)
60
- return;
61
- let book = document.getElementsByClassName('bookish')[0];
72
+ if (chapter === undefined) return;
73
+
74
+ let book = document.getElementsByClassName('bookish')[0] as HTMLElement;
75
+
62
76
  // This is the grid line we'll aline all marginals too horizontally.
63
77
  let margin = chapter.getBoundingClientRect().width;
78
+
64
79
  // This will track the current leading bottom edge for laying out marginals.
65
- let currentBottom = null;
80
+ let currentBottom: number | null = null;
81
+
66
82
  // Are there any marginal right inset images that might overlap?
67
83
  let rightInsets = document.getElementsByClassName('inset-right');
84
+
68
85
  const marginals = document.getElementsByClassName('bookish-marginal');
86
+
69
87
  // Layout all of the marginals vertically to prevent overlaps.
70
- Array.from(marginals).forEach((element) => {
71
- const el = element;
72
- if (el === null)
73
- return;
74
- if (window.getComputedStyle(el).getPropertyValue('position') !== 'fixed') {
88
+ Array.from(marginals).forEach((element: Element) => {
89
+ const el = element as HTMLElement;
90
+
91
+ if (el === null) return;
92
+
93
+ if (
94
+ window.getComputedStyle(el).getPropertyValue('position') !== 'fixed'
95
+ ) {
75
96
  if (el.parentElement) {
76
- let containingMarginal = el.parentElement.closest('.bookish-marginal');
97
+ let containingMarginal =
98
+ el.parentElement.closest('.bookish-marginal');
99
+
77
100
  // Get the bounds of this marginal so we know it's size.
78
101
  let elementBounds = el.getBoundingClientRect();
102
+
79
103
  // Get the bounds of this marginal's parent so we know it's vertical position.
80
104
  let parentBounds = el.parentElement.getBoundingClientRect();
81
- let parentTop = parentBounds.top +
105
+ let parentTop =
106
+ parentBounds.top +
82
107
  window.scrollY -
83
108
  (book.getBoundingClientRect().top + window.scrollY);
109
+
84
110
  // If it's inside a marginal, position it below the marginal.
85
111
  if (containingMarginal !== null && currentBottom) {
86
112
  el.style.left = '0';
87
113
  el.style.top =
88
114
  '' +
89
- (currentBottom -
90
- (containingMarginal.getBoundingClientRect().top +
91
- window.scrollY)) +
92
- 'px';
115
+ (currentBottom -
116
+ (containingMarginal.getBoundingClientRect().top +
117
+ window.scrollY)) +
118
+ 'px';
93
119
  currentBottom = currentBottom + elementBounds.height;
94
- }
95
- else {
120
+ } else {
96
121
  // If we don't have a bottom yet, or the current above is above the parent's top,
97
122
  // then set the current bottom to the bottom of the parent.
98
123
  if (currentBottom === null || currentBottom < parentTop) {
@@ -104,6 +129,7 @@ export function layoutMarginals() {
104
129
  el.style.top = currentBottom + 'px';
105
130
  currentBottom = currentBottom + elementBounds.height;
106
131
  }
132
+
107
133
  // If there are any right insets, do any intersect with this marginal?
108
134
  // If so, move the marginal below them.
109
135
  if (rightInsets.length > 0) {
@@ -112,18 +138,24 @@ export function layoutMarginals() {
112
138
  let insetBounds = inset.getBoundingClientRect();
113
139
  let insetTop = insetBounds.top + window.scrollY;
114
140
  let insetBottom = insetTop + insetBounds.height;
115
- let elementTop = el.getBoundingClientRect().top + window.scrollY;
116
- let elementBottom = elementTop + elementBounds.height;
141
+ let elementTop =
142
+ el.getBoundingClientRect().top + window.scrollY;
143
+ let elementBottom =
144
+ elementTop + elementBounds.height;
145
+
117
146
  // If they overlap...
118
147
  if (currentBottom !== null) {
119
- if ((elementTop <= insetTop &&
120
- elementBottom >= insetTop) ||
148
+ if (
149
+ (elementTop <= insetTop &&
150
+ elementBottom >= insetTop) ||
121
151
  (elementTop <= insetBottom &&
122
152
  elementBottom >= insetBottom) ||
123
153
  (elementTop >= insetTop &&
124
- elementBottom <= insetBottom)) {
154
+ elementBottom <= insetBottom)
155
+ ) {
125
156
  // Calculate the new position based on the preferred position, minus the element's height (which was added above), plus the overlap between the inset and the marginal.
126
- let newTop = currentBottom -
157
+ let newTop =
158
+ currentBottom -
127
159
  elementBounds.height +
128
160
  (insetBottom - elementTop);
129
161
  // Reposition the marginal.
@@ -135,6 +167,7 @@ export function layoutMarginals() {
135
167
  }
136
168
  });
137
169
  }
170
+
138
171
  // Reposition the marginal horizontally.
139
172
  el.style.left = 'calc(2rem + ' + margin + 'px)';
140
173
  }
File without changes