bookish-press 0.4.232 → 0.5.1

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 (433) hide show
  1. package/{components → package/components}/Auth.svelte +11 -13
  2. package/{components → package/components}/Auth.svelte.d.ts +0 -0
  3. package/{components → package/components}/Authentication.d.ts +0 -0
  4. package/{components → package/components}/Authentication.js +0 -0
  5. package/{components → package/components}/BookPreview.svelte +13 -17
  6. package/{components → package/components}/BookPreview.svelte.d.ts +0 -0
  7. package/{components → package/components}/Link.svelte +2 -1
  8. package/{components → package/components}/Link.svelte.d.ts +1 -0
  9. package/{components → package/components}/app/BookList.svelte +0 -0
  10. package/{components → package/components}/app/BookList.svelte.d.ts +0 -0
  11. package/{components → package/components}/app/Button.svelte +5 -2
  12. package/{components → package/components}/app/Button.svelte.d.ts +0 -0
  13. package/{components → package/components}/app/Feedback.svelte +4 -9
  14. package/{components → package/components}/app/Feedback.svelte.d.ts +0 -0
  15. package/{components → package/components}/app/Head.svelte +4 -1
  16. package/{components → package/components}/app/Head.svelte.d.ts +6 -15
  17. package/{components → package/components}/app/Large.svelte +0 -0
  18. package/{components → package/components}/app/Large.svelte.d.ts +0 -0
  19. package/{components → package/components}/app/Lead.svelte +0 -0
  20. package/{components → package/components}/app/Lead.svelte.d.ts +0 -0
  21. package/package/components/app/Link.svelte +36 -0
  22. package/{components → package/components}/app/Link.svelte.d.ts +1 -0
  23. package/{components → package/components}/app/Options.svelte +0 -0
  24. package/{components → package/components}/app/Options.svelte.d.ts +0 -0
  25. package/{components → package/components}/app/Paragraph.svelte +1 -0
  26. package/{components → package/components}/app/Paragraph.svelte.d.ts +0 -0
  27. package/{components/app/Writing.svelte → package/components/app/Section.svelte} +0 -1
  28. package/package/components/app/Section.svelte.d.ts +27 -0
  29. package/{components → package/components}/app/Table.svelte +0 -0
  30. package/{components → package/components}/app/Table.svelte.d.ts +0 -0
  31. package/{components → package/components}/app/TextInput.svelte +2 -0
  32. package/{components → package/components}/app/TextInput.svelte.d.ts +0 -0
  33. package/{components → package/components}/chapter/Atom.svelte +1 -8
  34. package/{components → package/components}/chapter/Atom.svelte.d.ts +0 -0
  35. package/{components → package/components}/chapter/Block.svelte +3 -1
  36. package/{components → package/components}/chapter/Block.svelte.d.ts +0 -0
  37. package/{components → package/components}/chapter/Callout.svelte +0 -0
  38. package/{components → package/components}/chapter/Callout.svelte.d.ts +0 -0
  39. package/{components → package/components}/chapter/CaptionedCode.svelte +2 -2
  40. package/{components → package/components}/chapter/CaptionedCode.svelte.d.ts +0 -0
  41. package/{components → package/components}/chapter/ChapterBody.svelte +9 -16
  42. package/{components → package/components}/chapter/ChapterBody.svelte.d.ts +1 -0
  43. package/{components → package/components}/chapter/Citations.svelte +13 -11
  44. package/{components → package/components}/chapter/Citations.svelte.d.ts +0 -0
  45. package/{components → package/components}/chapter/Code.svelte +3 -2
  46. package/{components → package/components}/chapter/Code.svelte.d.ts +0 -0
  47. package/{components → package/components}/chapter/Comment.svelte +7 -13
  48. package/{components → package/components}/chapter/Comment.svelte.d.ts +0 -0
  49. package/{components → package/components}/chapter/Definition.svelte +8 -3
  50. package/{components → package/components}/chapter/Definition.svelte.d.ts +0 -0
  51. package/{components → package/components}/chapter/Embed.svelte +6 -5
  52. package/{components → package/components}/chapter/Embed.svelte.d.ts +1 -0
  53. package/{components → package/components}/chapter/ErrorMessage.svelte +0 -0
  54. package/{components → package/components}/chapter/ErrorMessage.svelte.d.ts +0 -0
  55. package/{components → package/components}/chapter/ExtendedPrism.d.ts +0 -0
  56. package/{components → package/components}/chapter/ExtendedPrism.js +0 -0
  57. package/{components → package/components}/chapter/Figure.svelte +8 -8
  58. package/{components → package/components}/chapter/Figure.svelte.d.ts +0 -0
  59. package/{components → package/components}/chapter/Footnote.svelte +13 -24
  60. package/{components → package/components}/chapter/Footnote.svelte.d.ts +0 -2
  61. package/{components → package/components}/chapter/Format.svelte +5 -4
  62. package/{components → package/components}/chapter/Format.svelte.d.ts +0 -0
  63. package/{components → package/components}/chapter/InlineCode.svelte +2 -2
  64. package/{components → package/components}/chapter/InlineCode.svelte.d.ts +0 -0
  65. package/{components → package/components}/chapter/Label.svelte +5 -7
  66. package/{components → package/components}/chapter/Label.svelte.d.ts +0 -0
  67. package/{components → package/components}/chapter/Link.svelte +8 -6
  68. package/{components → package/components}/chapter/Link.svelte.d.ts +0 -0
  69. package/{components → package/components}/chapter/List.svelte +5 -0
  70. package/{components → package/components}/chapter/List.svelte.d.ts +0 -0
  71. package/{components → package/components}/chapter/Marginal.svelte +30 -12
  72. package/{components → package/components}/chapter/Marginal.svelte.d.ts +0 -0
  73. package/{components → package/components}/chapter/Paragraph.svelte +23 -10
  74. package/{components → package/components}/chapter/Paragraph.svelte.d.ts +0 -0
  75. package/{components → package/components}/chapter/Positioned.svelte +0 -0
  76. package/{components → package/components}/chapter/Positioned.svelte.d.ts +0 -0
  77. package/{components → package/components}/chapter/Problem.svelte +0 -0
  78. package/{components → package/components}/chapter/Problem.svelte.d.ts +0 -0
  79. package/{components → package/components}/chapter/Python.svelte +0 -0
  80. package/{components → package/components}/chapter/Python.svelte.d.ts +0 -0
  81. package/{components → package/components}/chapter/Quote.svelte +20 -10
  82. package/{components → package/components}/chapter/Quote.svelte.d.ts +0 -0
  83. package/{components → package/components}/chapter/Rule.svelte +0 -0
  84. package/{components → package/components}/chapter/Rule.svelte.d.ts +0 -0
  85. package/{components → package/components}/chapter/Table.svelte +2 -2
  86. package/{components → package/components}/chapter/Table.svelte.d.ts +0 -0
  87. package/{components → package/components}/chapter/Text.svelte +2 -2
  88. package/{components → package/components}/chapter/Text.svelte.d.ts +0 -0
  89. package/package/components/controls/DarkToggle.svelte +38 -0
  90. package/package/components/controls/DarkToggle.svelte.d.ts +17 -0
  91. package/{components → package/components}/editor/BookishEditor.svelte +57 -32
  92. package/{components → package/components}/editor/BookishEditor.svelte.d.ts +4 -1
  93. package/{components → package/components}/editor/CalloutEditor.svelte +0 -0
  94. package/{components → package/components}/editor/CalloutEditor.svelte.d.ts +0 -0
  95. package/{components → package/components}/editor/CaptionedCodeEditor.svelte +0 -0
  96. package/{components → package/components}/editor/CaptionedCodeEditor.svelte.d.ts +0 -0
  97. package/{components → package/components}/editor/CaretContext.d.ts +0 -0
  98. package/{components → package/components}/editor/CaretContext.js +0 -0
  99. package/{components → package/components}/editor/CaretState.d.ts +0 -0
  100. package/{components → package/components}/editor/CaretState.js +0 -0
  101. package/{components → package/components}/editor/CaretUtilities.d.ts +0 -0
  102. package/{components → package/components}/editor/CaretUtilities.js +0 -0
  103. package/{components → package/components}/editor/CaretView.svelte +4 -2
  104. package/{components → package/components}/editor/CaretView.svelte.d.ts +1 -0
  105. package/{components → package/components}/editor/CitationsEditor.svelte +0 -0
  106. package/{components → package/components}/editor/CitationsEditor.svelte.d.ts +0 -0
  107. package/{components → package/components}/editor/Clipboard.d.ts +0 -0
  108. package/{components → package/components}/editor/Clipboard.js +0 -0
  109. package/{components → package/components}/editor/Command.d.ts +0 -0
  110. package/{components → package/components}/editor/Command.js +0 -0
  111. package/{components → package/components}/editor/Commands.d.ts +0 -0
  112. package/{components → package/components}/editor/Commands.js +0 -0
  113. package/package/components/editor/ConfirmButton.svelte +23 -0
  114. package/{components → package/components}/editor/ConfirmButton.svelte.d.ts +4 -3
  115. package/{components → package/components}/editor/DefinitionEditor.svelte +0 -0
  116. package/{components → package/components}/editor/DefinitionEditor.svelte.d.ts +0 -0
  117. package/{components → package/components}/editor/EmbedEditor.svelte +1 -1
  118. package/{components → package/components}/editor/EmbedEditor.svelte.d.ts +0 -0
  119. package/{components → package/components}/editor/Icon.svelte +0 -0
  120. package/{components → package/components}/editor/Icon.svelte.d.ts +0 -0
  121. package/{components → package/components}/editor/ImageChooser.svelte +0 -0
  122. package/{components → package/components}/editor/ImageChooser.svelte.d.ts +0 -0
  123. package/{components → package/components}/editor/InlineCodeEditor.svelte +0 -0
  124. package/{components → package/components}/editor/InlineCodeEditor.svelte.d.ts +0 -0
  125. package/{components → package/components}/editor/LabelEditor.svelte +0 -0
  126. package/{components → package/components}/editor/LabelEditor.svelte.d.ts +0 -0
  127. package/{components → package/components}/editor/LanguageEditor.svelte +0 -0
  128. package/{components → package/components}/editor/LanguageEditor.svelte.d.ts +0 -0
  129. package/{components → package/components}/editor/LinkEditor.svelte +4 -3
  130. package/{components → package/components}/editor/LinkEditor.svelte.d.ts +0 -0
  131. package/{components → package/components}/editor/Note.svelte +1 -0
  132. package/{components → package/components}/editor/Note.svelte.d.ts +0 -0
  133. package/package/components/editor/Permissions.svelte +93 -0
  134. package/package/components/editor/Permissions.svelte.d.ts +20 -0
  135. package/{components → package/components}/editor/PositionEditor.svelte +0 -0
  136. package/{components → package/components}/editor/PositionEditor.svelte.d.ts +0 -0
  137. package/{components → package/components}/editor/QuoteEditor.svelte +0 -0
  138. package/{components → package/components}/editor/QuoteEditor.svelte.d.ts +0 -0
  139. package/{components → package/components}/editor/Switch.svelte +0 -0
  140. package/{components → package/components}/editor/Switch.svelte.d.ts +0 -0
  141. package/{components → package/components}/editor/TableEditor.svelte +0 -0
  142. package/{components → package/components}/editor/TableEditor.svelte.d.ts +0 -0
  143. package/{components → package/components}/editor/TextEditor.svelte +2 -3
  144. package/{components → package/components}/editor/TextEditor.svelte.d.ts +0 -0
  145. package/{components → package/components}/editor/Toggle.svelte +0 -0
  146. package/{components → package/components}/editor/Toggle.svelte.d.ts +0 -0
  147. package/{components → package/components}/editor/Toolbar.svelte +8 -3
  148. package/{components → package/components}/editor/Toolbar.svelte.d.ts +0 -0
  149. package/{components → package/components}/editor/ToolbarGroup.svelte +0 -1
  150. package/{components → package/components}/editor/ToolbarGroup.svelte.d.ts +0 -0
  151. package/{components → package/components}/editor/ToolbarSpacer.svelte +0 -0
  152. package/{components → package/components}/editor/ToolbarSpacer.svelte.d.ts +0 -0
  153. package/{components → package/components}/editor/URLEditor.svelte +2 -0
  154. package/{components → package/components}/editor/URLEditor.svelte.d.ts +0 -0
  155. package/{components → package/components}/editor/UndoState.d.ts +0 -0
  156. package/{components → package/components}/editor/UndoState.js +0 -0
  157. package/{components → package/components}/editor/icons/annotate.svg +0 -0
  158. package/{components → package/components}/editor/icons/block.svg +0 -0
  159. package/{components → package/components}/editor/icons/bold.svg +0 -0
  160. package/{components → package/components}/editor/icons/bullets.svg +0 -0
  161. package/{components → package/components}/editor/icons/callout.svg +0 -0
  162. package/{components → package/components}/editor/icons/citation.svg +0 -0
  163. package/{components → package/components}/editor/icons/clear.svg +0 -0
  164. package/{components → package/components}/editor/icons/clipboard.svg +0 -0
  165. package/{components → package/components}/editor/icons/code.svg +0 -0
  166. package/{components → package/components}/editor/icons/columnafter.svg +0 -0
  167. package/{components → package/components}/editor/icons/columnbefore.svg +0 -0
  168. package/{components → package/components}/editor/icons/comment.svg +0 -0
  169. package/{components → package/components}/editor/icons/copy.svg +0 -0
  170. package/{components → package/components}/editor/icons/cut.svg +0 -0
  171. package/{components → package/components}/editor/icons/define.svg +0 -0
  172. package/{components → package/components}/editor/icons/deletecolumn.svg +0 -0
  173. package/{components → package/components}/editor/icons/deleterow.svg +0 -0
  174. package/{components → package/components}/editor/icons/footnote.svg +0 -0
  175. package/{components → package/components}/editor/icons/header1.svg +0 -0
  176. package/{components → package/components}/editor/icons/header2.svg +0 -0
  177. package/{components → package/components}/editor/icons/header3.svg +0 -0
  178. package/{components → package/components}/editor/icons/home.svg +0 -0
  179. package/{components → package/components}/editor/icons/indent.svg +0 -0
  180. package/{components → package/components}/editor/icons/italic.svg +0 -0
  181. package/{components → package/components}/editor/icons/label.svg +0 -0
  182. package/{components → package/components}/editor/icons/left.svg +0 -0
  183. package/{components → package/components}/editor/icons/level.svg +0 -0
  184. package/{components → package/components}/editor/icons/link.svg +0 -0
  185. package/{components → package/components}/editor/icons/list.svg +0 -0
  186. package/{components → package/components}/editor/icons/media.svg +0 -0
  187. package/{components → package/components}/editor/icons/middle.svg +0 -0
  188. package/{components → package/components}/editor/icons/numbers.svg +0 -0
  189. package/{components → package/components}/editor/icons/paragraph.svg +0 -0
  190. package/{components → package/components}/editor/icons/paste.svg +0 -0
  191. package/{components → package/components}/editor/icons/quote.svg +0 -0
  192. package/{components → package/components}/editor/icons/redo.svg +0 -0
  193. package/{components → package/components}/editor/icons/right.svg +0 -0
  194. package/{components → package/components}/editor/icons/rowabove.svg +0 -0
  195. package/{components → package/components}/editor/icons/rowbelow.svg +0 -0
  196. package/{components → package/components}/editor/icons/rule.svg +0 -0
  197. package/{components → package/components}/editor/icons/sub.svg +0 -0
  198. package/{components → package/components}/editor/icons/super.svg +0 -0
  199. package/{components → package/components}/editor/icons/table.svg +0 -0
  200. package/{components → package/components}/editor/icons/text.svg +0 -0
  201. package/{components → package/components}/editor/icons/time.svg +0 -0
  202. package/{components → package/components}/editor/icons/undo.svg +0 -0
  203. package/{components → package/components}/editor/icons/unindent.svg +0 -0
  204. package/{components → package/components}/editor/icons/unlink.svg +0 -0
  205. package/{components → package/components}/page/Acknowledgements.svelte +13 -11
  206. package/{components → package/components}/page/Acknowledgements.svelte.d.ts +0 -0
  207. package/package/components/page/Authors.svelte +86 -0
  208. package/{components → package/components}/page/Authors.svelte.d.ts +1 -0
  209. package/package/components/page/BookLoader.svelte +59 -0
  210. package/package/components/page/BookLoader.svelte.d.ts +16 -0
  211. package/{components → package/components}/page/BulkReferenceEditor.svelte +8 -8
  212. package/{components → package/components}/page/BulkReferenceEditor.svelte.d.ts +0 -0
  213. package/{components → package/components}/page/Chapter.svelte +69 -30
  214. package/{components → package/components}/page/Chapter.svelte.d.ts +0 -0
  215. package/{components → package/components}/page/ChapterContext.d.ts +0 -0
  216. package/{components → package/components}/page/ChapterContext.js +0 -0
  217. package/{components → package/components}/page/ChapterNumber.svelte +0 -0
  218. package/{components → package/components}/page/ChapterNumber.svelte.d.ts +0 -0
  219. package/{components → package/components}/page/ChapterTitle.svelte +0 -0
  220. package/{components → package/components}/page/ChapterTitle.svelte.d.ts +0 -0
  221. package/{components → package/components}/page/Contexts.d.ts +21 -5
  222. package/package/components/page/Contexts.js +144 -0
  223. package/{components → package/components}/page/DefinitionView.svelte +23 -14
  224. package/{components → package/components}/page/DefinitionView.svelte.d.ts +0 -0
  225. package/{components → package/components}/page/Description.svelte +12 -9
  226. package/{components → package/components}/page/Description.svelte.d.ts +0 -0
  227. package/{components → package/components}/page/Edition.svelte +9 -23
  228. package/{components → package/components}/page/Edition.svelte.d.ts +1 -2
  229. package/package/components/page/EditionLoader.svelte +99 -0
  230. package/package/components/page/EditionLoader.svelte.d.ts +18 -0
  231. package/package/components/page/Editions.svelte +109 -0
  232. package/{components → package/components}/page/Editions.svelte.d.ts +3 -1
  233. package/{components → package/components}/page/Glossary.svelte +13 -6
  234. package/{components → package/components}/page/Glossary.svelte.d.ts +0 -0
  235. package/{components → package/components}/page/Header.svelte +26 -21
  236. package/{components → package/components}/page/Header.svelte.d.ts +2 -0
  237. package/{components → package/components}/page/Index.svelte +14 -8
  238. package/{components → package/components}/page/Index.svelte.d.ts +0 -0
  239. package/{components → package/components}/page/Instructions.svelte +1 -2
  240. package/{components → package/components}/page/Instructions.svelte.d.ts +3 -1
  241. package/package/components/page/License.svelte +45 -0
  242. package/{components → package/components}/page/License.svelte.d.ts +0 -0
  243. package/{components → package/components}/page/Loading.svelte +0 -0
  244. package/{components → package/components}/page/Loading.svelte.d.ts +0 -0
  245. package/{components → package/components}/page/Media.svelte +40 -36
  246. package/{components → package/components}/page/Media.svelte.d.ts +0 -0
  247. package/package/components/page/MediaPreview.svelte +55 -0
  248. package/{components → package/components}/page/MediaPreview.svelte.d.ts +0 -0
  249. package/{components → package/components}/page/Muted.svelte +0 -0
  250. package/{components → package/components}/page/Muted.svelte.d.ts +0 -0
  251. package/{components → package/components}/page/Outline.svelte +69 -96
  252. package/{components → package/components}/page/Outline.svelte.d.ts +0 -0
  253. package/{components → package/components}/page/Page.svelte +4 -4
  254. package/{components → package/components}/page/Page.svelte.d.ts +0 -0
  255. package/{components → package/components}/page/PageHeader.svelte +5 -0
  256. package/{components → package/components}/page/PageHeader.svelte.d.ts +0 -0
  257. package/{components → package/components}/page/PageParagraph.svelte +0 -0
  258. package/{components → package/components}/page/PageParagraph.svelte.d.ts +0 -0
  259. package/{components → package/components}/page/PossibleChapter.svelte +0 -0
  260. package/{components → package/components}/page/PossibleChapter.svelte.d.ts +0 -0
  261. package/{components → package/components}/page/PossibleReference.svelte +2 -1
  262. package/{components → package/components}/page/PossibleReference.svelte.d.ts +1 -0
  263. package/{components → package/components}/page/Print.svelte +0 -0
  264. package/{components → package/components}/page/Print.svelte.d.ts +0 -0
  265. package/package/components/page/Publish.svelte +135 -0
  266. package/package/components/page/Publish.svelte.d.ts +14 -0
  267. package/{components → package/components}/page/Reference.svelte +54 -51
  268. package/{components → package/components}/page/Reference.svelte.d.ts +1 -0
  269. package/{components → package/components}/page/References.svelte +9 -4
  270. package/{components → package/components}/page/References.svelte.d.ts +0 -0
  271. package/{components → package/components}/page/Rows.svelte +0 -0
  272. package/{components → package/components}/page/Rows.svelte.d.ts +0 -0
  273. package/{components → package/components}/page/Search.svelte +27 -10
  274. package/{components → package/components}/page/Search.svelte.d.ts +0 -0
  275. package/package/components/page/Status.svelte +58 -0
  276. package/{components → package/components}/page/Status.svelte.d.ts +0 -0
  277. package/{components → package/components}/page/SubdomainEditor.svelte +5 -3
  278. package/{components → package/components}/page/SubdomainEditor.svelte.d.ts +0 -0
  279. package/{components → package/components}/page/TableOfContents.svelte +83 -37
  280. package/{components → package/components}/page/TableOfContents.svelte.d.ts +0 -0
  281. package/package/components/page/TableOfContentsImage.svelte +27 -0
  282. package/{components → package/components}/page/TableOfContentsImage.svelte.d.ts +1 -0
  283. package/{components → package/components}/page/TableOfContentsRow.svelte +11 -12
  284. package/{components → package/components}/page/TableOfContentsRow.svelte.d.ts +0 -0
  285. package/{components → package/components}/page/ThemeEditor.svelte +12 -10
  286. package/{components → package/components}/page/ThemeEditor.svelte.d.ts +0 -0
  287. package/{components → package/components}/page/ThemeEditorPreview.svelte +0 -0
  288. package/{components → package/components}/page/ThemeEditorPreview.svelte.d.ts +0 -0
  289. package/{components → package/components}/page/ThemeSetEditor.svelte +0 -0
  290. package/{components → package/components}/page/ThemeSetEditor.svelte.d.ts +0 -0
  291. package/{components → package/components}/page/ThemeVariableEditor.svelte +0 -0
  292. package/{components → package/components}/page/ThemeVariableEditor.svelte.d.ts +0 -0
  293. package/{components → package/components}/page/Title.svelte +0 -0
  294. package/{components → package/components}/page/Title.svelte.d.ts +0 -0
  295. package/{components → package/components}/page/Unknown.svelte +5 -2
  296. package/{components → package/components}/page/Unknown.svelte.d.ts +0 -0
  297. package/{components → package/components}/page/margins.d.ts +0 -0
  298. package/{components → package/components}/page/margins.js +0 -0
  299. package/{index.d.ts → package/index.d.ts} +3 -3
  300. package/{index.js → package/index.js} +3 -3
  301. package/package/models/CRUD.d.ts +28 -0
  302. package/package/models/CRUD.js +263 -0
  303. package/{models → package/models}/Firebase.d.ts +0 -0
  304. package/package/models/Firebase.js +36 -0
  305. package/{models → package/models}/book/Book.d.ts +23 -18
  306. package/package/models/book/Book.js +135 -0
  307. package/{models → package/models}/book/BookMedia.d.ts +1 -1
  308. package/{models → package/models}/book/BookMedia.js +9 -10
  309. package/{models → package/models}/book/BookSaveStatus.d.ts +0 -0
  310. package/{models → package/models}/book/BookSaveStatus.js +0 -0
  311. package/{models → package/models}/book/Chapter.d.ts +5 -1
  312. package/{models → package/models}/book/Chapter.js +24 -15
  313. package/{models → package/models}/book/ChapterID.d.ts +0 -0
  314. package/{models → package/models}/book/ChapterID.js +0 -0
  315. package/{models → package/models}/book/Definition.d.ts +0 -0
  316. package/{models → package/models}/book/Definition.js +0 -0
  317. package/{models → package/models}/book/Edition.d.ts +33 -7
  318. package/{models → package/models}/book/Edition.js +104 -32
  319. package/{models → package/models}/book/Reference.d.ts +0 -0
  320. package/{models → package/models}/book/Reference.js +0 -0
  321. package/{models → package/models}/book/Schema.d.ts +20 -15
  322. package/{models → package/models}/book/Schema.js +17 -16
  323. package/{models → package/models}/book/Theme.d.ts +0 -0
  324. package/{models → package/models}/book/Theme.js +7 -6
  325. package/{models → package/models}/book/ThemeColors.d.ts +0 -0
  326. package/{models → package/models}/book/ThemeColors.js +0 -0
  327. package/{models → package/models}/book/Words.d.ts +0 -0
  328. package/{models → package/models}/book/Words.js +0 -0
  329. package/{models → package/models}/chapter/AtomNode.d.ts +0 -0
  330. package/{models → package/models}/chapter/AtomNode.js +0 -0
  331. package/{models → package/models}/chapter/BlockNode.d.ts +0 -0
  332. package/{models → package/models}/chapter/BlockNode.js +0 -0
  333. package/{models → package/models}/chapter/BlocksNode.d.ts +0 -0
  334. package/{models → package/models}/chapter/BlocksNode.js +0 -0
  335. package/{models → package/models}/chapter/BlocksNode.test.d.ts +0 -0
  336. package/{models → package/models}/chapter/BlocksNode.test.js +0 -0
  337. package/{models → package/models}/chapter/Bookkeeping.d.ts +0 -0
  338. package/{models → package/models}/chapter/Bookkeeping.js +0 -0
  339. package/{models → package/models}/chapter/CalloutNode.d.ts +0 -0
  340. package/{models → package/models}/chapter/CalloutNode.js +0 -0
  341. package/{models → package/models}/chapter/Caret.d.ts +0 -0
  342. package/{models → package/models}/chapter/Caret.js +0 -0
  343. package/{models → package/models}/chapter/ChapterNode.d.ts +0 -0
  344. package/{models → package/models}/chapter/ChapterNode.js +0 -0
  345. package/{models → package/models}/chapter/CitationsNode.d.ts +0 -0
  346. package/{models → package/models}/chapter/CitationsNode.js +0 -0
  347. package/{models → package/models}/chapter/CodeNode.d.ts +0 -0
  348. package/{models → package/models}/chapter/CodeNode.js +0 -0
  349. package/{models → package/models}/chapter/CommentNode.d.ts +0 -0
  350. package/{models → package/models}/chapter/CommentNode.js +13 -3
  351. package/{models → package/models}/chapter/DefinitionNode.d.ts +0 -0
  352. package/{models → package/models}/chapter/DefinitionNode.js +0 -0
  353. package/{models → package/models}/chapter/Edit.d.ts +0 -0
  354. package/{models → package/models}/chapter/Edit.js +0 -0
  355. package/{models → package/models}/chapter/EmbedNode.d.ts +1 -0
  356. package/{models → package/models}/chapter/EmbedNode.js +6 -0
  357. package/{models → package/models}/chapter/ErrorNode.d.ts +0 -0
  358. package/{models → package/models}/chapter/ErrorNode.js +0 -0
  359. package/{models → package/models}/chapter/FootnoteNode.d.ts +0 -0
  360. package/{models → package/models}/chapter/FootnoteNode.js +0 -0
  361. package/{models → package/models}/chapter/FormatNode.d.ts +0 -0
  362. package/{models → package/models}/chapter/FormatNode.js +1 -6
  363. package/{models → package/models}/chapter/FormatNode.test.d.ts +0 -0
  364. package/{models → package/models}/chapter/FormatNode.test.js +0 -0
  365. package/{models → package/models}/chapter/InlineCodeNode.d.ts +0 -0
  366. package/{models → package/models}/chapter/InlineCodeNode.js +0 -0
  367. package/{models → package/models}/chapter/LabelNode.d.ts +0 -0
  368. package/{models → package/models}/chapter/LabelNode.js +0 -0
  369. package/{models → package/models}/chapter/LinkNode.d.ts +0 -0
  370. package/{models → package/models}/chapter/LinkNode.js +0 -0
  371. package/{models → package/models}/chapter/ListNode.d.ts +0 -0
  372. package/{models → package/models}/chapter/ListNode.js +0 -0
  373. package/{models → package/models}/chapter/ListNode.test.d.ts +0 -0
  374. package/{models → package/models}/chapter/ListNode.test.js +0 -0
  375. package/{models → package/models}/chapter/MetadataNode.d.ts +0 -0
  376. package/{models → package/models}/chapter/MetadataNode.js +0 -0
  377. package/{models → package/models}/chapter/Node.d.ts +0 -0
  378. package/{models → package/models}/chapter/Node.js +0 -0
  379. package/{models → package/models}/chapter/Node.test.d.ts +0 -0
  380. package/{models → package/models}/chapter/Node.test.js +0 -0
  381. package/{models → package/models}/chapter/ParagraphNode.d.ts +0 -0
  382. package/{models → package/models}/chapter/ParagraphNode.js +0 -0
  383. package/{models → package/models}/chapter/ParagraphNode.test.d.ts +0 -0
  384. package/{models → package/models}/chapter/ParagraphNode.test.js +0 -0
  385. package/{models → package/models}/chapter/Parser.d.ts +2 -2
  386. package/{models → package/models}/chapter/Parser.js +26 -24
  387. package/{models → package/models}/chapter/Parser.test.d.ts +0 -0
  388. package/{models → package/models}/chapter/Parser.test.js +0 -0
  389. package/{models → package/models}/chapter/Position.d.ts +0 -0
  390. package/{models → package/models}/chapter/Position.js +0 -0
  391. package/{models → package/models}/chapter/QuoteNode.d.ts +0 -0
  392. package/{models → package/models}/chapter/QuoteNode.js +0 -0
  393. package/{models → package/models}/chapter/RootNode.d.ts +0 -0
  394. package/{models → package/models}/chapter/RootNode.js +0 -0
  395. package/{models → package/models}/chapter/RuleNode.d.ts +0 -0
  396. package/{models → package/models}/chapter/RuleNode.js +0 -0
  397. package/{models → package/models}/chapter/TableNode.d.ts +0 -0
  398. package/{models → package/models}/chapter/TableNode.js +0 -0
  399. package/{models → package/models}/chapter/TableNode.test.d.ts +0 -0
  400. package/{models → package/models}/chapter/TableNode.test.js +0 -0
  401. package/{models → package/models}/chapter/TextNode.d.ts +0 -0
  402. package/{models → package/models}/chapter/TextNode.js +0 -0
  403. package/{models → package/models}/chapter/TextNode.test.d.ts +0 -0
  404. package/{models → package/models}/chapter/TextNode.test.js +0 -0
  405. package/package/util/dark.d.ts +2 -0
  406. package/package/util/dark.js +16 -0
  407. package/{util → package/util}/getSubdomain.d.ts +0 -0
  408. package/{util → package/util}/getSubdomain.js +0 -0
  409. package/{util → package/util}/isMobile.d.ts +0 -0
  410. package/{util → package/util}/isMobile.js +0 -0
  411. package/{util → package/util}/mineReference.d.ts +0 -0
  412. package/{util → package/util}/mineReference.js +0 -0
  413. package/{util → package/util}/scrollToEyeLevel.d.ts +0 -0
  414. package/{util → package/util}/scrollToEyeLevel.js +0 -0
  415. package/package.json +131 -267
  416. package/components/External.svelte +0 -4
  417. package/components/External.svelte.d.ts +0 -18
  418. package/components/app/Link.svelte +0 -24
  419. package/components/app/Writing.svelte.d.ts +0 -27
  420. package/components/editor/ConfirmButton.svelte +0 -49
  421. package/components/page/Authors.svelte +0 -82
  422. package/components/page/Contexts.js +0 -51
  423. package/components/page/Editions.svelte +0 -158
  424. package/components/page/License.svelte +0 -37
  425. package/components/page/MediaPreview.svelte +0 -29
  426. package/components/page/Status.svelte +0 -57
  427. package/components/page/TableOfContentsImage.svelte +0 -15
  428. package/models/CRUD.d.ts +0 -17
  429. package/models/CRUD.js +0 -207
  430. package/models/Firebase.js +0 -32
  431. package/models/book/Book.js +0 -142
  432. package/models/loadEdition.d.ts +0 -5
  433. package/models/loadEdition.js +0 -20
@@ -3,17 +3,15 @@
3
3
  <script>import Atom from './Atom.svelte';
4
4
  import Marginal from './Marginal.svelte';
5
5
  import Format from './Format.svelte';
6
- import { getChapter, isEditable, getCaret, getEdition, } from '../page/Contexts';
6
+ import { getChapter, isChapterEditable, getCaret, getEdition, getRoot, } from '../page/Contexts';
7
7
  import { afterUpdate } from 'svelte';
8
8
  import Icon from '../editor/Icon.svelte';
9
9
  import CommentIcon from '../editor/icons/comment.svg?raw';
10
10
  export let node;
11
11
  let chapter = getChapter();
12
- let edition = getEdition();
13
- let editable = isEditable();
12
+ let editable = isChapterEditable();
13
+ let root = getRoot();
14
14
  let caret = getCaret();
15
- $: chapterNode =
16
- $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
17
15
  $: focused =
18
16
  $caret && $caret.range && node.contains($caret.range.start.node);
19
17
  // Position the marginals on every render.
@@ -25,9 +23,7 @@ afterUpdate(() => $chapter?.layoutMarginals());
25
23
  <Marginal
26
24
  {node}
27
25
  id={'comment-' +
28
- (chapterNode === undefined
29
- ? '?'
30
- : chapterNode.getComments().indexOf(node))}
26
+ ($root === undefined ? '?' : $root.getComments().indexOf(node))}
31
27
  label="comment, escape to edit"
32
28
  >
33
29
  <span slot="interactor" class="bookish-comment-symbol">
@@ -35,9 +31,7 @@ afterUpdate(() => $chapter?.layoutMarginals());
35
31
  </span>
36
32
  <span
37
33
  slot="content"
38
- class={`bookish-app-comment ${
39
- focused ? 'bookish-app-comment-focused' : ''
40
- }`}
34
+ class={`comment ${focused ? 'comment-focused' : ''}`}
41
35
  >
42
36
  <Format node={node.getMeta()} placeholder="comment" />
43
37
  </span>
@@ -46,7 +40,7 @@ afterUpdate(() => $chapter?.layoutMarginals());
46
40
  </Atom>
47
41
 
48
42
  <style>
49
- .bookish-app-comment {
43
+ .comment {
50
44
  background: var(--app-chrome-background);
51
45
  border: var(--app-chrome-border-size) solid var(--app-border-color);
52
46
  border-radius: 0 var(--app-chrome-padding) var(--app-chrome-padding)
@@ -57,7 +51,7 @@ afterUpdate(() => $chapter?.layoutMarginals());
57
51
  line-height: 1.5em;
58
52
  }
59
53
 
60
- .bookish-app-comment-focused,
54
+ .comment-focused,
61
55
  .bookish-footnote-focused {
62
56
  outline: 2px solid var(--bookish-highlight-color);
63
57
  }
@@ -5,9 +5,10 @@ import Text from './Text.svelte';
5
5
  import Format from './Format.svelte';
6
6
  import Marginal from './Marginal.svelte';
7
7
  import Problem from './Problem.svelte';
8
- import { getChapter, getEdition } from '../page/Contexts';
8
+ import { getChapter, getEdition, isChapterEditable, } from '../page/Contexts';
9
9
  import { afterUpdate } from 'svelte';
10
10
  export let node;
11
+ let editable = isChapterEditable();
11
12
  let edition = getEdition();
12
13
  let chapter = getChapter();
13
14
  // Find the definition.
@@ -24,13 +25,17 @@ afterUpdate(() => $chapter?.layoutMarginals());
24
25
  <Marginal
25
26
  {node}
26
27
  id={'glossary-' + glossaryID}
27
- label="definition: {entry.phrase}"
28
+ label={entry ? `definition: ${entry.phrase}` : 'undefined phrase'}
28
29
  >
29
30
  <Text slot="interactor" node={phrase} /><span
30
31
  slot="content"
31
32
  class="bookish-definition-entry"
32
33
  >{#if entry === undefined}<Problem
33
- >Unknown glossary entry "{glossaryID}"</Problem
34
+ >{#if editable}{glossaryID.length === 0
35
+ ? 'choose a definition'
36
+ : `unknown glossary ID ${glossaryID}`}{:else}<em
37
+ >missing definition</em
38
+ >{/if}</Problem
34
39
  >{:else}<strong class="bookish-definition-entry-phrase"
35
40
  >{entry.phrase}</strong
36
41
  >: <Format
@@ -1,17 +1,18 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
3
  <script>import { storage } from '../../models/Firebase';
4
- import { isEditable, getCaret, getBook, } from '../page/Contexts';
4
+ import { getCaret, getBook, getBase } from '../page/Contexts';
5
5
  import Figure from './Figure.svelte';
6
6
  import { getContext } from 'svelte';
7
7
  export let node;
8
+ export let editable = false;
8
9
  export let placeholder = '';
9
10
  export let imageOnly = false;
10
11
  $: url = node.getURL();
11
12
  $: description = node.getDescription();
12
13
  let caret = getCaret();
13
14
  let book = getBook();
14
- let editable = isEditable();
15
+ let base = getBase();
15
16
  // Bookish editor should have passed down a way to set the active editor.
16
17
  let claimCaret = getContext('claimeditor');
17
18
  let dragging = false;
@@ -114,9 +115,9 @@ function handleClick() {
114
115
  : 'Click or drag to choose or upload an image, or enter an image or video URL.'}
115
116
  </p>
116
117
  {:else}
117
- <p class="bookish-figure-unspecified">Missing image or video</p>
118
+ <p class="bookish-figure-unspecified">No image or video</p>
118
119
  {/if}
119
- {:else if url.includes('https://www.youtube.com') || url.includes('https://youtu.be') || url.includes('https://www.tiktok.com') || url.includes('vimeo.com')}
120
+ {:else if node.isVideo()}
120
121
  <article class="bookish-figure-embed">
121
122
  <iframe
122
123
  class="bookish-figure-frame"
@@ -130,7 +131,7 @@ function handleClick() {
130
131
  {:else}
131
132
  <img
132
133
  class={'bookish-figure-image'}
133
- src={url.startsWith('http') ? url : 'images/' + url}
134
+ src={url.startsWith('http') ? url : `${$base}/images/${url}`}
134
135
  srcset={node.hasSmallURL()
135
136
  ? `${node.getSmallURL()} 320w, ${url} 1024w`
136
137
  : undefined}
@@ -3,6 +3,7 @@ import type EmbedNode from '../../models/chapter/EmbedNode';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  node: EmbedNode;
6
+ editable?: boolean | undefined;
6
7
  placeholder?: string | undefined;
7
8
  imageOnly?: boolean | undefined;
8
9
  };
@@ -2,11 +2,11 @@
2
2
 
3
3
  <script>import Format from './Format.svelte';
4
4
  import Positioned from './Positioned.svelte';
5
- import { getCaret, isEditable } from '../page/Contexts';
5
+ import { getCaret, isChapterEditable } from '../page/Contexts';
6
6
  export let node;
7
7
  export let caption;
8
8
  export let credit = undefined;
9
- let editable = isEditable();
9
+ let editable = isChapterEditable();
10
10
  let caret = getCaret();
11
11
  $: selected = $caret?.range?.start.node === node;
12
12
  function focusFigure() {
@@ -41,12 +41,12 @@ function focusFigure() {
41
41
  <slot />
42
42
  </div>
43
43
  {#if caption !== undefined}
44
- <figcaption class="bookish-figure-caption">
44
+ <figcaption class="caption">
45
45
  {#if caption}
46
46
  <Format node={caption} placeholder="caption" />
47
47
  {/if}
48
48
  {#if credit}
49
- <aside class="bookish-figure-credit">
49
+ <aside class="credit">
50
50
  <Format node={credit} placeholder="credit" />
51
51
  </aside>
52
52
  {/if}
@@ -68,7 +68,7 @@ function focusFigure() {
68
68
  filter: opacity(50%);
69
69
  }
70
70
 
71
- .bookish-figure-caption {
71
+ .caption {
72
72
  text-align: center;
73
73
  position: relative;
74
74
  color: var(--bookish-muted-color);
@@ -78,11 +78,11 @@ function focusFigure() {
78
78
  margin-bottom: var(--bookish-block-padding);
79
79
  }
80
80
 
81
- .bookish-figure-credit {
81
+ .credit {
82
82
  display: block;
83
83
  position: absolute;
84
- top: -1em;
85
- right: 0;
84
+ top: calc(-1.2 * var(--bookish-block-padding));
85
+ right: var(--bookish-block-padding);
86
86
  text-align: right;
87
87
  font-style: italic;
88
88
  font-size: var(--bookish-small-font-size);
@@ -3,24 +3,22 @@
3
3
  <script>import Atom from './Atom.svelte';
4
4
  import Marginal from './Marginal.svelte';
5
5
  import Format from './Format.svelte';
6
- import { getChapter, getEdition, getCaret, } from '../page/Contexts';
6
+ import { getChapter, getEdition, getCaret, getRoot, } from '../page/Contexts';
7
7
  import { afterUpdate } from 'svelte';
8
8
  export let node;
9
9
  $: content = node.getMeta();
10
10
  let caret = getCaret();
11
11
  let chapter = getChapter();
12
12
  let edition = getEdition();
13
+ let root = getRoot();
13
14
  // What footnote number is this?
14
- $: ast =
15
- $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
16
- $: number = ast?.getFootnotes().indexOf(node);
15
+ $: number = $root.getFootnotes().indexOf(node);
17
16
  $: letter =
18
17
  number === undefined ? undefined : $edition?.getFootnoteSymbol(number);
19
18
  $: focused =
20
- ast &&
21
- $caret &&
19
+ $caret &&
22
20
  $caret.range &&
23
- $caret.range.start.node.hasAncestor(ast, node);
21
+ $caret.range.start.node.hasAncestor($root, node);
24
22
  // Position the marginals on every render.
25
23
  afterUpdate(() => $chapter?.layoutMarginals());
26
24
  </script>
@@ -32,17 +30,16 @@ afterUpdate(() => $chapter?.layoutMarginals());
32
30
  id={'footnote-' + number}
33
31
  label="footnote, press escape to edit"
34
32
  >
35
- <sup slot="interactor" class="bookish-footnote-symbol">{letter}</sup
36
- >
37
33
  <!-- We prevent default on the span to prevent mouse events from bubbling up to the footnote symbol. This is key for two reasons:
38
34
  1) clicks on the footnote select the footnote atom node itself
39
35
  2) we want to be able to click on footnote text and we can't do that if the footnote sets the caret to the atom after clicks. -->
36
+ <sup slot="interactor" class="bookish-footnote-symbol">{letter}</sup
37
+ >
40
38
  <span
41
39
  slot="content"
42
40
  class={`bookish-footnote ${
43
41
  focused ? 'bookish-footnote-focused' : ''
44
42
  }`}
45
- on:mousedown|preventDefault
46
43
  >
47
44
  <sup class="bookish-footnote-symbol">{letter}</sup><Format
48
45
  node={content}
@@ -54,6 +51,10 @@ afterUpdate(() => $chapter?.layoutMarginals());
54
51
  </Atom>
55
52
 
56
53
  <style>
54
+ sup {
55
+ line-height: 0;
56
+ }
57
+
57
58
  .bookish-footnote-focused {
58
59
  outline: 2px solid var(--bookish-highlight-color);
59
60
  }
@@ -65,7 +66,7 @@ afterUpdate(() => $chapter?.layoutMarginals());
65
66
  color: var(--bookish-paragraph-color);
66
67
  font-weight: 300;
67
68
  font-size: var(--bookish-small-font-size);
68
- line-height: 1.5em;
69
+ /* line-height: 1.5em; */
69
70
  }
70
71
 
71
72
  .bookish-footnote-symbol {
@@ -75,26 +76,14 @@ afterUpdate(() => $chapter?.layoutMarginals());
75
76
  position: relative;
76
77
  }
77
78
 
78
- /* This enables us to layout the numbers and letters in a neat right-aligned floating grid. */
79
- .bookish-footnote {
80
- position: relative;
81
- }
82
-
83
79
  .bookish-footnote {
84
80
  display: block;
85
81
  line-height: var(--bookish-paragraph-line-height-tight);
86
- margin-left: 1rem;
87
- margin-bottom: 1rem;
88
- text-align: left;
89
82
  }
90
83
 
91
84
  .bookish-footnote .bookish-footnote-symbol {
92
85
  display: block;
93
86
  float: left;
94
- margin-top: -0.5em;
95
- position: absolute;
96
- left: -1.75em;
97
- text-align: right;
98
- width: 1.5em; /* Just enough space for 2 digits, a bit of a hack */
87
+ margin-left: -1em;
99
88
  }
100
89
  </style>
@@ -5,8 +5,6 @@ declare const __propDef: {
5
5
  node: FootnoteNode;
6
6
  };
7
7
  events: {
8
- mousedown: MouseEvent;
9
- } & {
10
8
  [evt: string]: CustomEvent<any>;
11
9
  };
12
10
  slots: {};
@@ -19,10 +19,9 @@ import Link from './Link.svelte';
19
19
  import Comment from './Comment.svelte';
20
20
  import Text from './Text.svelte';
21
21
  import Format from './Format.svelte';
22
- import { isEditable } from '../page/Contexts';
22
+ import { isChapterEditable, isEditionEditable } from '../page/Contexts';
23
23
  export let node;
24
24
  export let placeholder = undefined;
25
- let editable = isEditable();
26
25
  $: format = node.getFormat();
27
26
  $: tag =
28
27
  format === '*'
@@ -35,7 +34,9 @@ $: tag =
35
34
  ? 'sub'
36
35
  : 'span';
37
36
  $: showPlaceholder =
38
- node.isEmptyText() && placeholder !== undefined && editable;
37
+ node.isEmptyText() &&
38
+ placeholder !== undefined &&
39
+ (isChapterEditable() || isEditionEditable());
39
40
  </script>
40
41
 
41
42
  <svelte:element
@@ -46,7 +47,7 @@ $: showPlaceholder =
46
47
  {#each node.getSegments() as segment (segment.nodeID)}
47
48
  {#if segment instanceof TextNode}<Text
48
49
  node={segment}
49
- placeholder={node.getSegments().length === 1
50
+ placeholder={showPlaceholder && node.getSegments().length === 1
50
51
  ? placeholder
51
52
  : undefined}
52
53
  />
@@ -1,10 +1,10 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import { isEditable } from '../page/Contexts';
3
+ <script>import { isChapterEditable } from '../page/Contexts';
4
4
  import Code from './Code.svelte';
5
5
  import Text from './Text.svelte';
6
6
  export let node;
7
- let editable = isEditable();
7
+ let editable = isChapterEditable();
8
8
  </script>
9
9
 
10
10
  {#if editable}
@@ -1,18 +1,16 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
3
  <script>import Atom from './Atom.svelte';
4
- import { getChapter, getEdition, isEditable } from '../page/Contexts';
4
+ import { getChapter, getRoot, isChapterEditable } from '../page/Contexts';
5
5
  import Problem from './Problem.svelte';
6
6
  export let node;
7
- let editable = isEditable();
7
+ let editable = isChapterEditable();
8
8
  let chapter = getChapter();
9
- let edition = getEdition();
10
- $: ast =
11
- $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
9
+ let root = getRoot();
12
10
  $: duplicate =
13
- ast === undefined
11
+ $root === undefined
14
12
  ? false
15
- : ast.getLabels().filter((l) => l.getMeta() === node.getMeta())
13
+ : $root.getLabels().filter((l) => l.getMeta() === node.getMeta())
16
14
  .length > 1;
17
15
  </script>
18
16
 
@@ -1,11 +1,11 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
- <script>import { getBase, getEdition, isEditable } from '../page/Contexts';
3
+ <script>import { getBase, getEdition, isChapterEditable } from '../page/Contexts';
4
4
  import Text from './Text.svelte';
5
5
  import Problem from './Problem.svelte';
6
6
  export let node;
7
7
  let base = getBase();
8
- let editable = isEditable();
8
+ let editable = isChapterEditable();
9
9
  let edition = getEdition();
10
10
  $: url = node.getMeta();
11
11
  $: content = node.getText();
@@ -35,20 +35,22 @@ function isInvalidChapterLink() {
35
35
  <a href={url} target="_blank" rel="noreferrer"><Text node={content} /></a>
36
36
  <!-- If's a chapter link with a label -->
37
37
  {:else if url.indexOf(':') >= 0}
38
- <!-- If the chapter isn't specified, set to the current chapter's id. -->
39
38
  {#if url.split(':')[0] === ''}
39
+ <!-- If the chapter isn't specified, assume this chapter. -->
40
40
  <a href={'#' + url.split(':')[1]}><Text node={content} /></a>
41
41
  {:else}
42
- <a href={'/' + url.split(':')[0] + '#' + url.split(':')[1]}
42
+ <!-- If it is specified, include the base relative chapter ID and the label -->
43
+ <a href={`${$base}/${url.split(':')[0]}#${url.split(':')[1]}`}
43
44
  ><Text node={content} /></a
44
45
  >
45
46
  {/if}
46
- <!-- If this is internal link, make a route link to the chapter. -->
47
47
  {:else}
48
- <a href={$base + '/' + url}><Text node={content} /></a>
48
+ <!-- If this is internal link, make a route link to the chapter. -->
49
+ <a href={`${$base}/${url}`}><Text node={content} /></a>
49
50
  {/if}
50
51
 
51
52
  <style>
53
+ a,
52
54
  .bookish-editor-link {
53
55
  color: var(--bookish-link-color);
54
56
  font-weight: var(--bookish-link-font-weight);
@@ -19,6 +19,11 @@ export let node;
19
19
  </svelte:element>
20
20
 
21
21
  <style>
22
+ ol,
23
+ ul {
24
+ line-height: var(--bookish-paragraph-line-height-tight);
25
+ }
26
+
22
27
  ol {
23
28
  list-style: none;
24
29
  counter-reset: item;
@@ -2,13 +2,14 @@
2
2
 
3
3
  <script>import { isMobile, watchMobile } from '../../util/isMobile';
4
4
  import { onMount } from 'svelte';
5
- import { getCaret, getChapter, isEditable, } from '../page/Contexts';
5
+ import { getCaret, getChapter, isChapterEditable, } from '../page/Contexts';
6
+ import AtomNode from '../../models/chapter/AtomNode';
6
7
  export let node;
7
8
  export let id;
8
9
  export let label;
9
10
  let hovered = false;
10
11
  let chapter = getChapter();
11
- $: editable = isEditable();
12
+ $: editable = isChapterEditable();
12
13
  let caret = getCaret();
13
14
  // If there's no marginal selected or this is different from the current selection, this is hidden.
14
15
  $: selectedMarginal = $chapter?.marginal;
@@ -20,9 +21,23 @@ $: isHidden = editable
20
21
  .some((ancestor) => ancestor === node))
21
22
  : // If not editable, it's hidden if it's not selected.
22
23
  $selectedMarginal !== id;
23
- function toggle() {
24
- if (editable)
25
- return;
24
+ function toggle(event, interactor) {
25
+ if (editable) {
26
+ if (interactor) {
27
+ if (editable && $caret && node instanceof AtomNode) {
28
+ // Select this so that the view stays focused.
29
+ $caret.setCaret({
30
+ start: { node, index: 0 },
31
+ end: { node, index: 0 },
32
+ });
33
+ if (event) {
34
+ event.stopPropagation();
35
+ event.preventDefault();
36
+ }
37
+ }
38
+ return;
39
+ }
40
+ }
26
41
  if ($chapter) {
27
42
  if (isMobile() && isHidden)
28
43
  $chapter.marginal.set(id);
@@ -39,8 +54,8 @@ function handleExit() {
39
54
  }
40
55
  onMount(() => {
41
56
  const mediaWatch = watchMobile();
42
- mediaWatch.addEventListener('change', toggle);
43
- return () => mediaWatch.removeEventListener('change', toggle);
57
+ mediaWatch.addEventListener('change', () => toggle(undefined, false));
58
+ return () => mediaWatch.removeEventListener('change', () => toggle(undefined, false));
44
59
  });
45
60
  </script>
46
61
 
@@ -51,10 +66,11 @@ onMount(() => {
51
66
  editable ? '' : 'interactive'
52
67
  }`}
53
68
  aria-label={label}
54
- tabIndex="0"
55
- on:mousedown={toggle}
69
+ on:mousedown={(event) => toggle(event, true)}
56
70
  on:keydown={(event) =>
57
- event.key === 'Enter' || event.key === ' ' ? toggle() : undefined}
71
+ event.key === 'Enter' || event.key === ' '
72
+ ? toggle(undefined, true)
73
+ : undefined}
58
74
  on:mouseenter={handleEnter}
59
75
  on:mouseleave={handleExit}><slot name="interactor" /></span
60
76
  ><span
@@ -62,9 +78,11 @@ onMount(() => {
62
78
  (isHidden ? ' bookish-marginal-hidden' : '') +
63
79
  (hovered ? ' bookish-marginal-hovered' : '')}
64
80
  tabIndex={editable ? null : 0}
65
- on:mousedown={toggle}
81
+ on:mousedown={() => toggle(undefined, false)}
66
82
  on:keydown={(event) =>
67
- event.key === 'Enter' || event.key === ' ' ? toggle() : undefined}
83
+ event.key === 'Enter' || event.key === ' '
84
+ ? toggle(undefined, false)
85
+ : undefined}
68
86
  on:mouseenter={handleEnter}
69
87
  on:mouseleave={handleExit}
70
88
  >
@@ -1,24 +1,21 @@
1
1
  <svelte:options immutable={true} />
2
2
 
3
3
  <script>import Format from './Format.svelte';
4
- import { getChapter, getEdition } from '../page/Contexts';
4
+ import { getChapter, getEdition, getRoot } from '../page/Contexts';
5
5
  export let node;
6
6
  export let placeholder = undefined;
7
7
  $: level = node.getLevel();
8
- $: chapter = getChapter();
9
- $: edition = getEdition();
8
+ let chapter = getChapter();
9
+ let edition = getEdition();
10
+ let root = getRoot();
10
11
  $: id =
11
- node.getLevel() === 0 ||
12
- $chapter === undefined ||
13
- $edition === undefined
12
+ node.getLevel() === 0 || $edition === undefined
14
13
  ? undefined
15
- : 'header-' +
16
- ($chapter.chapter.getAST($edition)?.getHeaders().indexOf(node) ??
17
- '');
14
+ : 'header-' + ($root.getHeaders().indexOf(node) ?? '');
18
15
  $: classes =
19
16
  node.getLevel() === 0
20
17
  ? undefined
21
- : 'bookish-header' +
18
+ : 'page-header' +
22
19
  ($chapter && $chapter.highlightedID === id
23
20
  ? ' bookish-content-highlight'
24
21
  : '');
@@ -56,6 +53,22 @@ $: classes =
56
53
  min-height: var(--bookish-paragraph-line-height);
57
54
  }
58
55
 
56
+ /* This implements a drop cap in the first letter of the first text in the first format of the first paragraph of a chapter (but only chapters). */
57
+ :global(.chapter-content) p:first-of-type:not(.placeholder)::first-letter {
58
+ padding: 0 0.25rem;
59
+ margin: 0 0.25rem 0 0;
60
+ font-size: 4rem;
61
+ font-weight: 700;
62
+ float: left;
63
+ line-height: 1;
64
+ color: var(--bookish-paragraph-color);
65
+ }
66
+
67
+ .placeholder {
68
+ color: var(--bookish-muted-color);
69
+ font-style: italic;
70
+ }
71
+
59
72
  h2,
60
73
  h3,
61
74
  h4,