bookish-press 0.4.1 → 0.4.3

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 (403) hide show
  1. package/README.md +3 -1
  2. package/components/Auth.svelte +27 -24
  3. package/components/Auth.svelte.d.ts +4 -4
  4. package/components/Authentication.d.ts +2 -2
  5. package/components/BookPreview.svelte +75 -59
  6. package/components/BookPreview.svelte.d.ts +5 -5
  7. package/components/External.svelte +1 -1
  8. package/components/External.svelte.d.ts +3 -3
  9. package/components/Link.svelte +49 -3
  10. package/components/Link.svelte.d.ts +3 -4
  11. package/components/app/BookList.svelte +19 -0
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/components/app/Button.svelte +49 -0
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/components/app/Feedback.svelte +47 -0
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/components/app/Head.svelte +15 -0
  18. package/components/app/Head.svelte.d.ts +18 -0
  19. package/components/app/Large.svelte +8 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/components/app/Lead.svelte +12 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/components/app/Link.svelte +24 -0
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/components/app/Options.svelte +24 -0
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/components/app/Paragraph.svelte +20 -0
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/components/app/Section.svelte +12 -0
  30. package/components/app/Section.svelte.d.ts +27 -0
  31. package/components/app/Table.svelte +32 -0
  32. package/components/app/Table.svelte.d.ts +27 -0
  33. package/components/app/TextInput.svelte +38 -0
  34. package/components/app/TextInput.svelte.d.ts +22 -0
  35. package/components/chapter/Atom.svelte +20 -6
  36. package/components/chapter/Atom.svelte.d.ts +3 -3
  37. package/components/chapter/Block.svelte +26 -21
  38. package/components/chapter/Block.svelte.d.ts +4 -4
  39. package/components/chapter/Callout.svelte +38 -7
  40. package/components/chapter/Callout.svelte.d.ts +4 -4
  41. package/components/chapter/CaptionedCode.svelte +67 -24
  42. package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
  43. package/components/chapter/ChapterBody.svelte +62 -9
  44. package/components/chapter/ChapterBody.svelte.d.ts +5 -4
  45. package/components/chapter/Citations.svelte +86 -20
  46. package/components/chapter/Citations.svelte.d.ts +4 -4
  47. package/components/chapter/Code.svelte +152 -21
  48. package/components/chapter/Code.svelte.d.ts +3 -3
  49. package/components/chapter/Comment.svelte +39 -17
  50. package/components/chapter/Comment.svelte.d.ts +3 -3
  51. package/components/chapter/Definition.svelte +52 -18
  52. package/components/chapter/Definition.svelte.d.ts +5 -8
  53. package/components/chapter/Embed.svelte +155 -67
  54. package/components/chapter/Embed.svelte.d.ts +6 -4
  55. package/components/chapter/ErrorMessage.svelte +7 -2
  56. package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/components/chapter/ExtendedPrism.js +69 -0
  59. package/components/chapter/Figure.svelte +90 -0
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/components/chapter/Footnote.svelte +75 -12
  62. package/components/chapter/Footnote.svelte.d.ts +4 -4
  63. package/components/chapter/Format.svelte +63 -38
  64. package/components/chapter/Format.svelte.d.ts +5 -4
  65. package/components/chapter/InlineCode.svelte +16 -6
  66. package/components/chapter/InlineCode.svelte.d.ts +4 -4
  67. package/components/chapter/Label.svelte +38 -9
  68. package/components/chapter/Label.svelte.d.ts +4 -4
  69. package/components/chapter/Link.svelte +24 -19
  70. package/components/chapter/Link.svelte.d.ts +4 -4
  71. package/components/chapter/List.svelte +75 -8
  72. package/components/chapter/List.svelte.d.ts +4 -4
  73. package/components/chapter/Marginal.svelte +169 -27
  74. package/components/chapter/Marginal.svelte.d.ts +6 -3
  75. package/components/chapter/Paragraph.svelte +79 -6
  76. package/components/chapter/Paragraph.svelte.d.ts +4 -4
  77. package/components/chapter/Positioned.svelte +33 -0
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/components/chapter/Problem.svelte +15 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +68 -21
  82. package/components/chapter/Python.svelte.d.ts +4 -4
  83. package/components/chapter/Quote.svelte +64 -11
  84. package/components/chapter/Quote.svelte.d.ts +4 -4
  85. package/components/chapter/Rule.svelte +12 -1
  86. package/components/chapter/Rule.svelte.d.ts +4 -4
  87. package/components/chapter/Table.svelte +36 -25
  88. package/components/chapter/Table.svelte.d.ts +4 -4
  89. package/components/chapter/Text.svelte +61 -36
  90. package/components/chapter/Text.svelte.d.ts +5 -4
  91. package/components/editor/BookishEditor.svelte +373 -244
  92. package/components/editor/BookishEditor.svelte.d.ts +9 -6
  93. package/components/editor/CalloutEditor.svelte +5 -5
  94. package/components/editor/CalloutEditor.svelte.d.ts +4 -4
  95. package/components/editor/CaptionedCodeEditor.svelte +16 -12
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
  97. package/components/editor/CaretContext.d.ts +48 -16
  98. package/components/editor/CaretState.d.ts +16 -44
  99. package/components/editor/CaretUtilities.d.ts +2 -2
  100. package/components/editor/CaretView.svelte +82 -0
  101. package/components/editor/CaretView.svelte.d.ts +25 -0
  102. package/components/editor/CitationsEditor.svelte +36 -25
  103. package/components/editor/CitationsEditor.svelte.d.ts +4 -4
  104. package/components/editor/Clipboard.d.ts +2 -2
  105. package/components/editor/Command.d.ts +13 -12
  106. package/components/editor/Commands.d.ts +1 -1
  107. package/components/editor/Commands.js +1114 -571
  108. package/components/editor/ConfirmButton.svelte +18 -12
  109. package/components/editor/ConfirmButton.svelte.d.ts +5 -4
  110. package/components/editor/DefinitionEditor.svelte +29 -21
  111. package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
  112. package/components/editor/EmbedEditor.svelte +93 -43
  113. package/components/editor/EmbedEditor.svelte.d.ts +3 -3
  114. package/components/editor/Icon.svelte +17 -0
  115. package/components/editor/Icon.svelte.d.ts +16 -0
  116. package/components/editor/ImageChooser.svelte +53 -34
  117. package/components/editor/ImageChooser.svelte.d.ts +3 -3
  118. package/components/editor/InlineCodeEditor.svelte +7 -4
  119. package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
  120. package/components/editor/LabelEditor.svelte +20 -11
  121. package/components/editor/LabelEditor.svelte.d.ts +4 -4
  122. package/components/editor/LanguageEditor.svelte +10 -7
  123. package/components/editor/LanguageEditor.svelte.d.ts +3 -3
  124. package/components/editor/LinkEditor.svelte +64 -39
  125. package/components/editor/LinkEditor.svelte.d.ts +4 -4
  126. package/components/editor/Note.svelte +4 -3
  127. package/components/editor/Note.svelte.d.ts +6 -2
  128. package/components/editor/Permissions.svelte +95 -0
  129. package/components/editor/Permissions.svelte.d.ts +20 -0
  130. package/components/editor/PositionEditor.svelte +9 -6
  131. package/components/editor/PositionEditor.svelte.d.ts +4 -4
  132. package/components/editor/QuoteEditor.svelte +7 -2
  133. package/components/editor/QuoteEditor.svelte.d.ts +4 -4
  134. package/components/editor/Switch.svelte +55 -28
  135. package/components/editor/Switch.svelte.d.ts +4 -4
  136. package/components/editor/TableEditor.svelte +10 -0
  137. package/components/editor/TableEditor.svelte.d.ts +17 -0
  138. package/components/editor/TextEditor.svelte +83 -45
  139. package/components/editor/TextEditor.svelte.d.ts +5 -4
  140. package/components/editor/Toggle.svelte +11 -8
  141. package/components/editor/Toggle.svelte.d.ts +4 -4
  142. package/components/editor/Toolbar.svelte +191 -144
  143. package/components/editor/Toolbar.svelte.d.ts +5 -8
  144. package/components/editor/ToolbarGroup.svelte +17 -23
  145. package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
  146. package/components/editor/ToolbarSpacer.svelte +8 -1
  147. package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
  148. package/components/editor/URLEditor.svelte +6 -8
  149. package/components/editor/URLEditor.svelte.d.ts +3 -3
  150. package/components/editor/UndoState.d.ts +3 -3
  151. package/components/editor/icons/annotate.svg +1 -0
  152. package/components/editor/icons/block.svg +1 -0
  153. package/components/editor/icons/bold.svg +1 -0
  154. package/components/editor/icons/bullets.svg +1 -0
  155. package/components/editor/icons/callout.svg +1 -0
  156. package/components/editor/icons/citation.svg +8 -0
  157. package/components/editor/icons/clear.svg +1 -0
  158. package/components/editor/icons/clipboard.svg +1 -0
  159. package/components/editor/icons/code.svg +1 -0
  160. package/components/editor/icons/columnafter.svg +1 -0
  161. package/components/editor/icons/columnbefore.svg +1 -0
  162. package/components/editor/icons/comment.svg +1 -0
  163. package/components/editor/icons/copy.svg +1 -0
  164. package/components/editor/icons/cut.svg +1 -0
  165. package/components/editor/icons/define.svg +7 -0
  166. package/components/editor/icons/deletecolumn.svg +1 -0
  167. package/components/editor/icons/deleterow.svg +1 -0
  168. package/components/editor/icons/footnote.svg +8 -0
  169. package/components/editor/icons/header1.svg +7 -0
  170. package/components/editor/icons/header2.svg +7 -0
  171. package/components/editor/icons/header3.svg +7 -0
  172. package/components/editor/icons/home.svg +1 -0
  173. package/components/editor/icons/indent.svg +1 -0
  174. package/components/editor/icons/italic.svg +1 -0
  175. package/components/editor/icons/label.svg +1 -0
  176. package/components/editor/icons/left.svg +1 -0
  177. package/components/editor/icons/level.svg +1 -0
  178. package/components/editor/icons/link.svg +1 -0
  179. package/components/editor/icons/list.svg +1 -0
  180. package/components/editor/icons/media.svg +1 -0
  181. package/components/editor/icons/middle.svg +1 -0
  182. package/components/editor/icons/numbers.svg +10 -0
  183. package/components/editor/icons/paragraph.svg +1 -0
  184. package/components/editor/icons/paste.svg +10 -0
  185. package/components/editor/icons/quote.svg +1 -0
  186. package/components/editor/icons/redo.svg +1 -0
  187. package/components/editor/icons/right.svg +1 -0
  188. package/components/editor/icons/rowabove.svg +1 -0
  189. package/components/editor/icons/rowbelow.svg +1 -0
  190. package/components/editor/icons/rule.svg +1 -0
  191. package/components/editor/icons/sub.svg +1 -0
  192. package/components/editor/icons/super.svg +1 -0
  193. package/components/editor/icons/table.svg +1 -0
  194. package/components/editor/icons/text.svg +1 -0
  195. package/components/editor/icons/time.svg +1 -0
  196. package/components/editor/icons/undo.svg +1 -0
  197. package/components/editor/icons/unindent.svg +1 -0
  198. package/components/editor/icons/unlink.svg +1 -0
  199. package/components/page/Acknowledgements.svelte +35 -24
  200. package/components/page/Acknowledgements.svelte.d.ts +4 -4
  201. package/components/page/Authors.svelte +34 -17
  202. package/components/page/Authors.svelte.d.ts +7 -6
  203. package/components/page/BookLoader.svelte +59 -0
  204. package/components/page/BookLoader.svelte.d.ts +16 -0
  205. package/components/page/BulkReferenceEditor.svelte +54 -23
  206. package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
  207. package/components/page/Chapter.svelte +234 -143
  208. package/components/page/Chapter.svelte.d.ts +3 -3
  209. package/components/page/ChapterContext.d.ts +4 -4
  210. package/components/page/ChapterNumber.svelte +9 -0
  211. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  212. package/components/page/ChapterTitle.svelte +16 -0
  213. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  214. package/components/page/Contexts.d.ts +42 -22
  215. package/components/page/Contexts.js +129 -17
  216. package/components/page/DefinitionView.svelte +129 -90
  217. package/components/page/DefinitionView.svelte.d.ts +3 -3
  218. package/components/page/Description.svelte +31 -19
  219. package/components/page/Description.svelte.d.ts +4 -4
  220. package/components/page/Edition.svelte +135 -81
  221. package/components/page/Edition.svelte.d.ts +5 -6
  222. package/components/page/EditionLoader.svelte +99 -0
  223. package/components/page/EditionLoader.svelte.d.ts +18 -0
  224. package/components/page/Editions.svelte +106 -0
  225. package/components/page/Editions.svelte.d.ts +14 -0
  226. package/components/page/Glossary.svelte +65 -49
  227. package/components/page/Glossary.svelte.d.ts +4 -4
  228. package/components/page/Header.svelte +143 -56
  229. package/components/page/Header.svelte.d.ts +8 -6
  230. package/components/page/Index.svelte +116 -80
  231. package/components/page/Index.svelte.d.ts +4 -4
  232. package/components/page/Instructions.svelte +18 -17
  233. package/components/page/Instructions.svelte.d.ts +6 -4
  234. package/components/page/License.svelte +39 -23
  235. package/components/page/License.svelte.d.ts +4 -4
  236. package/components/page/Loading.svelte +102 -12
  237. package/components/page/Loading.svelte.d.ts +6 -2
  238. package/components/page/Media.svelte +81 -53
  239. package/components/page/Media.svelte.d.ts +4 -4
  240. package/components/page/MediaPreview.svelte +26 -8
  241. package/components/page/MediaPreview.svelte.d.ts +3 -3
  242. package/components/page/Muted.svelte +10 -0
  243. package/components/page/Muted.svelte.d.ts +27 -0
  244. package/components/page/Outline.svelte +279 -59
  245. package/components/page/Outline.svelte.d.ts +3 -3
  246. package/components/page/Page.svelte +40 -9
  247. package/components/page/Page.svelte.d.ts +3 -3
  248. package/components/page/PageHeader.svelte +14 -0
  249. package/components/page/PageHeader.svelte.d.ts +18 -0
  250. package/components/page/PageParagraph.svelte +18 -0
  251. package/components/page/PageParagraph.svelte.d.ts +27 -0
  252. package/components/page/PossibleChapter.svelte +7 -7
  253. package/components/page/PossibleChapter.svelte.d.ts +4 -4
  254. package/components/page/PossibleReference.svelte +6 -11
  255. package/components/page/PossibleReference.svelte.d.ts +6 -7
  256. package/components/page/Print.svelte +27 -3
  257. package/components/page/Print.svelte.d.ts +4 -4
  258. package/components/page/Publish.svelte +134 -0
  259. package/components/page/Publish.svelte.d.ts +14 -0
  260. package/components/page/Reference.svelte +259 -117
  261. package/components/page/Reference.svelte.d.ts +5 -5
  262. package/components/page/References.svelte +45 -48
  263. package/components/page/References.svelte.d.ts +4 -4
  264. package/components/page/Rows.svelte +54 -0
  265. package/components/page/Rows.svelte.d.ts +27 -0
  266. package/components/page/Search.svelte +88 -63
  267. package/components/page/Search.svelte.d.ts +4 -4
  268. package/components/page/Status.svelte +46 -39
  269. package/components/page/Status.svelte.d.ts +4 -9
  270. package/components/page/SubdomainEditor.svelte +41 -27
  271. package/components/page/SubdomainEditor.svelte.d.ts +4 -4
  272. package/components/page/TableOfContents.svelte +264 -191
  273. package/components/page/TableOfContents.svelte.d.ts +4 -4
  274. package/components/page/TableOfContentsImage.svelte +8 -8
  275. package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
  276. package/components/page/TableOfContentsRow.svelte +97 -34
  277. package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
  278. package/components/page/ThemeEditor.svelte +177 -39
  279. package/components/page/ThemeEditor.svelte.d.ts +4 -4
  280. package/components/page/ThemeEditorPreview.svelte +35 -23
  281. package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
  282. package/components/page/ThemeSetEditor.svelte +15 -13
  283. package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
  284. package/components/page/ThemeVariableEditor.svelte +24 -15
  285. package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
  286. package/components/page/Title.svelte +12 -0
  287. package/components/page/Title.svelte.d.ts +27 -0
  288. package/components/page/Unknown.svelte +28 -21
  289. package/components/page/Unknown.svelte.d.ts +4 -4
  290. package/components/page/margins.js +50 -33
  291. package/index.d.ts +13 -0
  292. package/index.js +14 -0
  293. package/models/CRUD.d.ts +27 -0
  294. package/models/CRUD.js +262 -0
  295. package/models/Firebase.d.ts +1 -0
  296. package/models/Firebase.js +26 -16
  297. package/models/book/Book.d.ts +40 -39
  298. package/models/book/Book.js +121 -121
  299. package/models/book/BookMedia.d.ts +3 -3
  300. package/models/book/BookMedia.js +22 -16
  301. package/models/book/BookSaveStatus.d.ts +7 -0
  302. package/models/book/BookSaveStatus.js +8 -0
  303. package/models/book/Chapter.d.ts +50 -39
  304. package/models/book/Chapter.js +189 -198
  305. package/models/book/ChapterID.js +7 -7
  306. package/models/book/Definition.d.ts +1 -1
  307. package/models/book/Edition.d.ts +87 -61
  308. package/models/book/Edition.js +460 -309
  309. package/models/book/Reference.d.ts +24 -0
  310. package/models/book/Reference.js +78 -0
  311. package/models/book/Schema.d.ts +168 -0
  312. package/models/book/Schema.js +115 -0
  313. package/models/book/Theme.d.ts +44 -37
  314. package/models/book/Theme.js +452 -52
  315. package/models/book/ThemeColors.d.ts +1 -1
  316. package/models/book/Words.d.ts +2 -0
  317. package/models/book/Words.js +110 -0
  318. package/models/chapter/AtomNode.d.ts +4 -4
  319. package/models/chapter/AtomNode.js +20 -13
  320. package/models/chapter/BlockNode.d.ts +9 -10
  321. package/models/chapter/BlockNode.js +32 -13
  322. package/models/chapter/BlocksNode.d.ts +10 -10
  323. package/models/chapter/BlocksNode.js +315 -120
  324. package/models/chapter/BlocksNode.test.js +494 -228
  325. package/models/chapter/Bookkeeping.d.ts +1 -1
  326. package/models/chapter/CalloutNode.d.ts +3 -3
  327. package/models/chapter/CalloutNode.js +34 -12
  328. package/models/chapter/Caret.d.ts +9 -7
  329. package/models/chapter/Caret.js +11 -6
  330. package/models/chapter/ChapterNode.d.ts +11 -11
  331. package/models/chapter/ChapterNode.js +70 -33
  332. package/models/chapter/CitationsNode.d.ts +3 -3
  333. package/models/chapter/CitationsNode.js +31 -12
  334. package/models/chapter/CodeNode.d.ts +11 -6
  335. package/models/chapter/CodeNode.js +143 -34
  336. package/models/chapter/CommentNode.d.ts +5 -5
  337. package/models/chapter/CommentNode.js +29 -13
  338. package/models/chapter/DefinitionNode.d.ts +2 -2
  339. package/models/chapter/DefinitionNode.js +15 -7
  340. package/models/chapter/Edit.d.ts +3 -3
  341. package/models/chapter/EmbedNode.d.ts +9 -5
  342. package/models/chapter/EmbedNode.js +108 -35
  343. package/models/chapter/ErrorNode.d.ts +2 -2
  344. package/models/chapter/ErrorNode.js +34 -12
  345. package/models/chapter/FootnoteNode.d.ts +5 -5
  346. package/models/chapter/FootnoteNode.js +34 -16
  347. package/models/chapter/FormatNode.d.ts +10 -10
  348. package/models/chapter/FormatNode.js +237 -106
  349. package/models/chapter/FormatNode.test.js +87 -45
  350. package/models/chapter/InlineCodeNode.d.ts +2 -2
  351. package/models/chapter/InlineCodeNode.js +22 -9
  352. package/models/chapter/LabelNode.d.ts +4 -4
  353. package/models/chapter/LabelNode.js +31 -13
  354. package/models/chapter/LinkNode.d.ts +2 -2
  355. package/models/chapter/LinkNode.js +21 -9
  356. package/models/chapter/ListNode.d.ts +8 -8
  357. package/models/chapter/ListNode.js +99 -38
  358. package/models/chapter/ListNode.test.js +29 -24
  359. package/models/chapter/MetadataNode.d.ts +3 -3
  360. package/models/chapter/MetadataNode.js +13 -5
  361. package/models/chapter/Node.d.ts +5 -3
  362. package/models/chapter/Node.js +76 -29
  363. package/models/chapter/Node.test.js +20 -18
  364. package/models/chapter/ParagraphNode.d.ts +6 -6
  365. package/models/chapter/ParagraphNode.js +84 -29
  366. package/models/chapter/ParagraphNode.test.js +22 -13
  367. package/models/chapter/Parser.d.ts +27 -27
  368. package/models/chapter/Parser.js +220 -206
  369. package/models/chapter/Parser.test.js +16 -16
  370. package/models/chapter/Position.d.ts +1 -1
  371. package/models/chapter/QuoteNode.d.ts +6 -6
  372. package/models/chapter/QuoteNode.js +61 -23
  373. package/models/chapter/RootNode.d.ts +4 -4
  374. package/models/chapter/RuleNode.d.ts +2 -2
  375. package/models/chapter/RuleNode.js +31 -11
  376. package/models/chapter/TableNode.d.ts +8 -6
  377. package/models/chapter/TableNode.js +89 -34
  378. package/models/chapter/TableNode.test.js +22 -24
  379. package/models/chapter/TextNode.d.ts +6 -6
  380. package/models/chapter/TextNode.js +72 -32
  381. package/models/chapter/TextNode.test.js +4 -4
  382. package/package.json +108 -26
  383. package/util/getSubdomain.js +8 -6
  384. package/util/isMobile.js +1 -1
  385. package/util/mineReference.d.ts +3 -2
  386. package/util/mineReference.js +67 -29
  387. package/util/scrollToEyeLevel.js +6 -1
  388. package/components/chapter/renderPosition.d.ts +0 -3
  389. package/components/chapter/renderPosition.js +0 -4
  390. package/components/editor/ToolbarIcon.svelte +0 -22
  391. package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
  392. package/components/page/Alert.svelte +0 -11
  393. package/components/page/Alert.svelte.d.ts +0 -23
  394. package/components/page/Revisions.svelte +0 -124
  395. package/components/page/Revisions.svelte.d.ts +0 -14
  396. package/models/BookLoader.d.ts +0 -2
  397. package/models/BookLoader.js +0 -67
  398. package/models/Firestore.d.ts +0 -22
  399. package/models/Firestore.js +0 -194
  400. package/models/chapter/ReferenceNode.d.ts +0 -29
  401. package/models/chapter/ReferenceNode.js +0 -48
  402. package/models/loadEdition.d.ts +0 -5
  403. package/models/loadEdition.js +0 -16
@@ -1,58 +1,55 @@
1
- <script>import Header from "./Header.svelte";
1
+ <script>import Header from './Header.svelte';
2
2
  import Outline from './Outline.svelte';
3
3
  import Page from './Page.svelte';
4
- import Parser from "../../models/chapter/Parser";
5
- import ConfirmButton from '../editor/ConfirmButton.svelte';
6
4
  import ChapterIDs from '../../models/book/ChapterID';
7
- import BulkReferenceEditor from "./BulkReferenceEditor.svelte";
8
- import PossibleReference from "./PossibleReference.svelte";
9
- import { getEdition, isEditable } from "./Contexts";
5
+ import BulkReferenceEditor from './BulkReferenceEditor.svelte';
6
+ import PossibleReference from './PossibleReference.svelte';
7
+ import { getUser, getEdition, isEditionEditable } from './Contexts';
8
+ let auth = getUser();
10
9
  let edition = getEdition();
11
- let editable = isEditable();
12
- $: references = $edition.hasReferences() ? $edition.getReferences() : null;
10
+ let editable = isEditionEditable();
11
+ $: references = $edition?.hasReferences() ? $edition.getReferences() : null;
13
12
  // Otherwise, map references to a list with letter headers.
14
13
  if (references !== null) {
15
14
  }
16
15
  </script>
17
16
 
18
- <Page title={`${$edition.getTitle()} - References`}>
19
- <Header
20
- label="References title"
21
- getImage={() => $edition.getImage(ChapterIDs.ReferencesID)}
22
- setImage={(embed) => $edition.setImage(ChapterIDs.ReferencesID, embed)}
23
- header="References"
24
- tags={$edition.getTags()}
25
- >
26
- <Outline
27
- slot="outline"
28
- previous={$edition.getPreviousChapterID(ChapterIDs.ReferencesID)}
29
- next={$edition.getNextChapterID(ChapterIDs.ReferencesID)}
30
- />
31
- </Header>
32
- {#if editable }<BulkReferenceEditor />{/if}
33
- {#if references !== null }
34
- <p><em>Sorted by last name of first author.</em></p>
17
+ {#if $edition}
18
+ <Page title={`${$edition.getTitle()} - References`}>
19
+ <Header
20
+ editable={isEditionEditable() ||
21
+ ($auth !== undefined &&
22
+ $auth.user !== null &&
23
+ $edition.isChapterEditor($auth.user.uid))}
24
+ label="References title"
25
+ id="references"
26
+ getImage={() => $edition?.getImage(ChapterIDs.ReferencesID) ?? null}
27
+ setImage={(embed) =>
28
+ $edition
29
+ ? edition.set(
30
+ $edition.withImage(ChapterIDs.ReferencesID, embed)
31
+ )
32
+ : undefined}
33
+ header="References"
34
+ tags={$edition.getTags()}
35
+ >
36
+ <Outline
37
+ slot="outline"
38
+ previous={$edition.getPreviousChapterID(
39
+ ChapterIDs.ReferencesID
40
+ )}
41
+ next={$edition.getNextChapterID(ChapterIDs.ReferencesID)}
42
+ />
43
+ </Header>
44
+ {#if editable}<BulkReferenceEditor />{/if}
45
+ {#if references !== null}
46
+ <p><em>Sorted by last name of first author.</em></p>
35
47
 
36
- {#each Object.keys(references).sort() as citationID }
37
- {@const ref = Parser.parseReference(citationID, references === null ? "" : references[citationID], $edition) }
38
- <!-- {#if letter === undefined || citationID.charAt(0) !== letter) {
39
- letter = citationID.charAt(0);
40
- renderedReferences.push(<h2 key={"letter-" + letter} className="bookish-header" id={"references-" + letter}>{letter.toUpperCase()}</h2>);
41
- } -->
42
-
43
- <p>
44
- <PossibleReference node={ref} />
45
- {#if editable}
46
- <ConfirmButton
47
- commandLabel="x"
48
- confirmLabel="Confirm"
49
- command={() => $edition.removeReference(citationID)}
50
- />
51
- {/if}
52
- </p>
53
- {/each}
54
-
55
- {:else}
56
- <p>This book has no references.</p>
57
- {/if}
58
- </Page>
48
+ {#each Object.keys(references).sort() as citationID (citationID)}
49
+ <PossibleReference node={references[citationID]} />
50
+ {/each}
51
+ {:else}
52
+ <p>This book has no references.</p>
53
+ {/if}
54
+ </Page>
55
+ {/if}
@@ -1,14 +1,14 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
- props: {};
3
+ props: Record<string, never>;
4
4
  events: {
5
5
  [evt: string]: CustomEvent<any>;
6
6
  };
7
7
  slots: {};
8
8
  };
9
- export declare type ReferencesProps = typeof __propDef.props;
10
- export declare type ReferencesEvents = typeof __propDef.events;
11
- export declare type ReferencesSlots = typeof __propDef.slots;
9
+ export type ReferencesProps = typeof __propDef.props;
10
+ export type ReferencesEvents = typeof __propDef.events;
11
+ export type ReferencesSlots = typeof __propDef.slots;
12
12
  export default class References extends SvelteComponentTyped<ReferencesProps, ReferencesEvents, ReferencesSlots> {
13
13
  }
14
14
  export {};
@@ -0,0 +1,54 @@
1
+ <div class="table">
2
+ <table>
3
+ <tbody>
4
+ <slot />
5
+ </tbody>
6
+ </table>
7
+ </div>
8
+
9
+ <style>
10
+ .table {
11
+ width: 100%;
12
+ overflow-x: auto;
13
+ line-height: var(--bookish-paragraph-line-height-tight);
14
+ border-collapse: collapse;
15
+ clear: both;
16
+ border-radius: var(--bookish-roundedness);
17
+ border-spacing: 0;
18
+ }
19
+
20
+ table {
21
+ width: 100%;
22
+ border-collapse: collapse;
23
+ }
24
+
25
+ table :global(tr:first-child th) {
26
+ font-weight: bold;
27
+ border: 0;
28
+ border-bottom: 1px solid var(--bookish-border-color);
29
+ }
30
+
31
+ table :global(tr:nth-child(even)) {
32
+ background-color: var(--bookish-block-background-color);
33
+ }
34
+
35
+ table :global(tr:last-child td:first-child) {
36
+ border-bottom-left-radius: var(--bookish-roundedness);
37
+ }
38
+
39
+ table :global(tr:last-child td:last-child) {
40
+ border-bottom-right-radius: var(--bookish-roundedness);
41
+ }
42
+
43
+ table :global(tr:first-child td:first-child) {
44
+ border-top-left-radius: var(--bookish-roundedness);
45
+ }
46
+ table :global(tr:first-child td:last-child) {
47
+ border-top-right-radius: var(--bookish-roundedness);
48
+ }
49
+
50
+ .table :global(td),
51
+ .table :global(th) {
52
+ padding: var(--bookish-block-padding);
53
+ }
54
+ </style>
@@ -0,0 +1,27 @@
1
+ /** @typedef {typeof __propDef.props} RowsProps */
2
+ /** @typedef {typeof __propDef.events} RowsEvents */
3
+ /** @typedef {typeof __propDef.slots} RowsSlots */
4
+ export default class Rows extends SvelteComponentTyped<{
5
+ [x: string]: never;
6
+ }, {
7
+ [evt: string]: CustomEvent<any>;
8
+ }, {
9
+ default: {};
10
+ }> {
11
+ }
12
+ export type RowsProps = typeof __propDef.props;
13
+ export type RowsEvents = typeof __propDef.events;
14
+ export type RowsSlots = typeof __propDef.slots;
15
+ import { SvelteComponentTyped } from "svelte";
16
+ declare const __propDef: {
17
+ props: {
18
+ [x: string]: never;
19
+ };
20
+ events: {
21
+ [evt: string]: CustomEvent<any>;
22
+ };
23
+ slots: {
24
+ default: {};
25
+ };
26
+ };
27
+ export {};
@@ -1,33 +1,27 @@
1
- <script>import Header from "./Header.svelte";
1
+ <script>import Header from './Header.svelte';
2
2
  import Outline from './Outline.svelte';
3
3
  import Page from './Page.svelte';
4
- import Link from "../Link.svelte";
4
+ import Link from '../Link.svelte';
5
5
  import Chapter from '../../models/book/Chapter';
6
6
  import ChapterIDs from '../../models/book/ChapterID';
7
- import { onMount } from "svelte";
8
- import { getBase, getEdition } from "./Contexts";
7
+ import { getBase, getEdition, isEditionEditable } from './Contexts';
8
+ import TextInput from '../app/TextInput.svelte';
9
+ import ChapterTitle from './ChapterTitle.svelte';
10
+ import ChapterNumber from './ChapterNumber.svelte';
11
+ import PageHeader from './PageHeader.svelte';
9
12
  let edition = getEdition();
10
13
  let base = getBase();
11
- let query = "";
12
- let input = null;
13
- // Focus the query box when loaded
14
- onMount(() => { if (input)
15
- input.focus(); });
16
- // Don't allow spaces
17
- function handleKeyDown(event) {
18
- if (event.key === " ") {
19
- event.preventDefault();
20
- }
21
- }
14
+ let query = '';
22
15
  let results = [];
23
16
  $: {
24
17
  // Reset the results
25
18
  results = [];
26
19
  const lowerQuery = query.toLowerCase();
20
+ query = query.trim();
27
21
  // Go through all the chapter indexes and find matches.
28
- if (query.length > 2)
29
- for (const chapter of $edition.getChapters()) {
30
- let index = chapter.getIndex();
22
+ if ($edition && query.length > 2)
23
+ for (const chapter of $edition?.getChapters() ?? []) {
24
+ let index = chapter.getIndex($edition);
31
25
  // No index yet? Skip this chapter.
32
26
  if (index) {
33
27
  // Build a DOM to render matches.
@@ -47,12 +41,15 @@ $: {
47
41
  results.push(chapter);
48
42
  chapterMatches.forEach((match, index) => {
49
43
  // Only highlight the part of the word that matches.
50
- const start = match.match.toLowerCase().indexOf(lowerQuery);
44
+ const start = match.match
45
+ .toLowerCase()
46
+ .indexOf(lowerQuery);
51
47
  results.push({
52
- link: `${base}/${chapter.getChapterID()}?word=${match.match.toLowerCase()}&number=${index}`,
53
- left: match.left + match.match.substring(0, start),
48
+ link: `${$base}${chapter.getID()}?word=${match.match.toLowerCase()}&number=${index}`,
49
+ left: match.left +
50
+ match.match.substring(0, start),
54
51
  match: match.match.substring(start, start + query.length),
55
- right: match.match.substring(start + query.length) + match.right
52
+ right: match.match.substring(start + query.length) + match.right,
56
53
  });
57
54
  });
58
55
  }
@@ -61,48 +58,76 @@ $: {
61
58
  }
62
59
  </script>
63
60
 
64
- <Page title={`${$edition.getTitle()} - Search`}>
65
- <Header
66
- label="Search title"
67
- getImage={() => $edition.getImage(ChapterIDs.SearchID)}
68
- setImage={(embed) => $edition.setImage(ChapterIDs.SearchID, embed)}
69
- header="Search"
70
- tags={$edition.getTags()}
71
- >
72
- <Outline
73
- slot="outline"
74
- previous={$edition.getPreviousChapterID(ChapterIDs.SearchID)}
75
- next={$edition.getNextChapterID(ChapterIDs.SearchID)}
76
- />
77
- </Header>
61
+ {#if $edition}
62
+ <Page title={`${$edition.getTitle()} - Search`}>
63
+ <Header
64
+ editable={isEditionEditable()}
65
+ label="Search title"
66
+ getImage={() => $edition?.getImage(ChapterIDs.SearchID) ?? null}
67
+ setImage={(embed) =>
68
+ $edition
69
+ ? edition.set(
70
+ $edition.withImage(ChapterIDs.SearchID, embed)
71
+ )
72
+ : undefined}
73
+ header="Search"
74
+ id="search"
75
+ tags={$edition.getTags()}
76
+ >
77
+ <Outline
78
+ slot="outline"
79
+ previous={$edition.getPreviousChapterID(ChapterIDs.SearchID)}
80
+ next={$edition.getNextChapterID(ChapterIDs.SearchID)}
81
+ />
82
+ </Header>
78
83
 
79
- <p>Type a word—just a single word—and we'll show its occurrences in this book:</p>
84
+ <p>
85
+ Type a word—just a single word—and we'll show its occurrences in
86
+ this book:
87
+ </p>
80
88
 
81
- <p>
82
- <input
83
- type="text"
84
- name="query"
85
- placeholder={"search for a word"}
86
- on:keydown={handleKeyDown}
87
- bind:this={input}
88
- bind:value={query}
89
- />
90
- </p>
89
+ <p>
90
+ <TextInput
91
+ type="text"
92
+ placeholder={'search for a word'}
93
+ disabled={false}
94
+ bind:text={query}
95
+ />
96
+ </p>
91
97
 
92
- {#if query !== "" }
93
- {#if query.length < 3 }
94
- <p>Keep typing...</p>
95
- {:else if results.length === 0 }
96
- <p>No occurrence of <em>{query}</em>.</p>
97
- {:else}
98
- <p>Found {results.filter(result => !(result instanceof Chapter)).length} occurrences of <em>{query}</em>...</p>
99
- {#each results as result }
100
- {#if result instanceof Chapter }
101
- <h2 class="bookish-header" id={"header-" + result.getChapterID()}>Chapter{#if $edition.getChapterNumber(result.getChapterID()) !== undefined}&nbsp;{$edition.getChapterNumber(result.getChapterID())}{/if} - {result.getTitle()}</h2>
102
- {:else}
103
- <p><Link to={result.link}>...{result.left}<span class="bookish-content-highlight">{result.match}</span>{result.right}...</Link></p>
104
- {/if}
105
- {/each}
98
+ {#if query.trim() !== ''}
99
+ {#if query.trim().length < 3}
100
+ <p>Keep typing...</p>
101
+ {:else if results.length === 0}
102
+ <p>No occurrence of <em>{query}</em>.</p>
103
+ {:else}
104
+ <p
105
+ >Found {results.filter(
106
+ (result) => !(result instanceof Chapter)
107
+ ).length} occurrences of <em>{query}</em>...</p
108
+ >
109
+ {#each results as result}
110
+ {#if result instanceof Chapter}
111
+ <PageHeader id={'header-' + result.getID()}
112
+ ><ChapterNumber
113
+ >Chapter{#if $edition.getChapterNumber(result.getID()) !== undefined}&nbsp;{$edition.getChapterNumber(
114
+ result.getID()
115
+ )}{/if}</ChapterNumber
116
+ > - <ChapterTitle>{result.getTitle()}</ChapterTitle
117
+ ></PageHeader
118
+ >
119
+ {:else}
120
+ <p
121
+ ><Link to={result.link}
122
+ >...{result.left}<span
123
+ class="bookish-content-highlight"
124
+ >{result.match}</span
125
+ >{result.right}...</Link
126
+ ></p
127
+ >
128
+ {/if}
129
+ {/each}
130
+ {/if}
106
131
  {/if}
107
- {/if}
108
- </Page>
132
+ </Page>
133
+ {/if}
@@ -1,14 +1,14 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
- props: {};
3
+ props: Record<string, never>;
4
4
  events: {
5
5
  [evt: string]: CustomEvent<any>;
6
6
  };
7
7
  slots: {};
8
8
  };
9
- export declare type SearchProps = typeof __propDef.props;
10
- export declare type SearchEvents = typeof __propDef.events;
11
- export declare type SearchSlots = typeof __propDef.slots;
9
+ export type SearchProps = typeof __propDef.props;
10
+ export type SearchEvents = typeof __propDef.events;
11
+ export type SearchSlots = typeof __propDef.slots;
12
12
  export default class Search extends SvelteComponentTyped<SearchProps, SearchEvents, SearchSlots> {
13
13
  }
14
14
  export {};
@@ -1,49 +1,56 @@
1
- <script>import { BookSaveStatus } from "../../models/book/Edition";
2
- import { onMount } from "svelte";
3
- export let book;
4
- export let edition;
5
- let status = BookSaveStatus.Saved;
6
- function handleBookChange(newStatus) {
7
- status = newStatus;
8
- }
9
- // Listen to book and chapter changes.
10
- onMount(() => {
11
- book?.addListener(status => handleBookChange(status));
12
- edition.addListener((status) => handleBookChange(status));
13
- return () => {
14
- book?.removeListener(handleBookChange);
15
- edition.removeListener(handleBookChange);
16
- };
17
- });
1
+ <script>import BookSaveStatus from '../../models/book/BookSaveStatus';
2
+ import { getStatus } from './Contexts';
3
+ let status = getStatus();
18
4
  </script>
19
5
 
20
- <div class={`bookish-editor-status ${status === BookSaveStatus.Saving ? "bookish-editor-status-saving" : status === BookSaveStatus.Error ? "bookish-editor-status-error" : ""}`}>
21
- {
22
- status === BookSaveStatus.Changed ? "\u270E Editing" :
23
- status === BookSaveStatus.Saving ? "\u2026 Saving" :
24
- status === BookSaveStatus.Saved ? "\u2713 Saved" :
25
- status === BookSaveStatus.Error ? "\u2715 Couldn't save." :
26
- ""
27
- }
28
- </div>
6
+ <span
7
+ class={`status ${
8
+ $status === BookSaveStatus.Saving
9
+ ? 'saving'
10
+ : $status === BookSaveStatus.Error
11
+ ? 'error'
12
+ : ''
13
+ }`}
14
+ >
15
+ {$status === BookSaveStatus.Changed
16
+ ? '\u270E Editing'
17
+ : $status === BookSaveStatus.Saving
18
+ ? '\u2026 Saving'
19
+ : $status === BookSaveStatus.Saved
20
+ ? '\u2713 Saved'
21
+ : $status === BookSaveStatus.Error
22
+ ? '\u2715 Not saved'
23
+ : ''}
24
+ </span>
29
25
 
30
26
  <style>
31
- .bookish-editor-status {
32
- position: fixed;
33
- top: var(--bookish-app-chrome-spacing);
34
- right: var(--bookish-app-chrome-spacing);
35
- z-index: 3;
36
- color: var(--bookish-muted-color);
37
- font-family: var(--bookish-header-font-family);
38
- font-size: var(--bookish-small-font-size);
27
+ .status {
28
+ color: var(--app-font-color-inverted);
29
+ font-family: var(--app-font);
30
+ white-space: nowrap;
31
+ background-color: var(--app-interactive-color);
32
+ padding: calc(var(--app-chrome-padding) / 2);
33
+ border-radius: var(--app-chrome-roundedness);
39
34
  }
40
35
 
41
- .bookish-editor-status-error {
42
- color: var(--bookish-app-error-color);
36
+ .error {
37
+ background-color: var(--app-error-color);
43
38
  animation: failure 100ms infinite;
44
39
  }
45
40
 
46
- .bookish-editor-status-saving {
47
- animation: waiting 100ms infinite;
41
+ .saving {
42
+ animation: waiting 1s infinite;
43
+ }
44
+
45
+ @keyframes waiting {
46
+ 0% {
47
+ transform: rotate(-3deg);
48
+ }
49
+ 50% {
50
+ transform: rotate(3deg);
51
+ }
52
+ 100% {
53
+ transform: rotate(-3deg);
54
+ }
48
55
  }
49
- </style>
56
+ </style>
@@ -1,19 +1,14 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type Book from "../../models/book/Book";
3
- import type Edition from "../../models/book/Edition";
4
2
  declare const __propDef: {
5
- props: {
6
- book: Book | undefined;
7
- edition: Edition;
8
- };
3
+ props: Record<string, never>;
9
4
  events: {
10
5
  [evt: string]: CustomEvent<any>;
11
6
  };
12
7
  slots: {};
13
8
  };
14
- export declare type StatusProps = typeof __propDef.props;
15
- export declare type StatusEvents = typeof __propDef.events;
16
- export declare type StatusSlots = typeof __propDef.slots;
9
+ export type StatusProps = typeof __propDef.props;
10
+ export type StatusEvents = typeof __propDef.events;
11
+ export type StatusSlots = typeof __propDef.slots;
17
12
  export default class Status extends SvelteComponentTyped<StatusProps, StatusEvents, StatusSlots> {
18
13
  }
19
14
  export {};
@@ -1,30 +1,44 @@
1
- <script>import TextEditor from "../editor/TextEditor.svelte";
2
- import { subdomainIsAvailable } from "../../models/Firestore";
3
- import { getBook } from "./Contexts";
1
+ <script>import TextEditor from '../editor/TextEditor.svelte';
2
+ import { isSubdomainAvailable } from '../../models/CRUD';
3
+ import { getBook } from './Contexts';
4
+ import Muted from './Muted.svelte';
4
5
  let book = getBook();
5
- const invalidNames = ["email", "login", "confirm", "read", "write"];
6
+ const invalidNames = [
7
+ 'email',
8
+ 'login',
9
+ 'confirm',
10
+ 'about',
11
+ 'read',
12
+ 'write',
13
+ ];
6
14
  </script>
7
15
 
8
- <span class="bookish-muted">
9
- <TextEditor
10
- startText={book.getSubdomain() ?? ""}
11
- label="Book domain editor"
12
- save={
13
- // Save the new domain
14
- async domain => {
15
- const available = await subdomainIsAvailable(domain, book);
16
- if(available)
17
- book.setSubdomain(domain);
18
- else throw Error("Domain isn't available");
19
- }
20
- }
21
- placeholder="URL name"
22
- valid={newDomain =>
23
- // If not the empty string, must be a valid URL subdomain, and none of the existing routes.
24
- invalidNames.includes(newDomain) || (newDomain.length > 0 && !/^[A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?$/.test(newDomain)) ? `Book domains must be fewer than 63 characters, made of symbols a-z, A-Z, and 0-9, and not one of ${invalidNames.join(", ")}.` :
25
- undefined
26
- }
27
- saveOnExit={true}
28
- />
29
- <br/>
30
- </span>
16
+ {#if $book}
17
+ <Muted>
18
+ <TextEditor
19
+ text={$book.getSubdomain() ?? ''}
20
+ label="Book domain editor"
21
+ save={// Save the new domain
22
+ async (domain) => {
23
+ if ($book) {
24
+ const available = await isSubdomainAvailable(domain, $book);
25
+ if (available) book.set($book.withSubdomain(domain));
26
+ else throw Error("Domain isn't available");
27
+ }
28
+ }}
29
+ placeholder="book id"
30
+ valid={(newDomain) =>
31
+ // If not the empty string, must be a valid URL subdomain, and none of the existing routes.
32
+ invalidNames.includes(newDomain) ||
33
+ (newDomain.length > 0 &&
34
+ !/^[A-Za-z0-9](?:[A-Za-z0-9\-]{0,61}[A-Za-z0-9])?$/.test(
35
+ newDomain
36
+ ))
37
+ ? `Book IDs must be fewer than 63 characters, made of symbols a-z, A-Z, and 0-9, and not one of ${invalidNames.join(
38
+ ', '
39
+ )}.`
40
+ : undefined}
41
+ saveOnExit={true}
42
+ />
43
+ </Muted>
44
+ {/if}
@@ -1,14 +1,14 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
- props: {};
3
+ props: Record<string, never>;
4
4
  events: {
5
5
  [evt: string]: CustomEvent<any>;
6
6
  };
7
7
  slots: {};
8
8
  };
9
- export declare type SubdomainEditorProps = typeof __propDef.props;
10
- export declare type SubdomainEditorEvents = typeof __propDef.events;
11
- export declare type SubdomainEditorSlots = typeof __propDef.slots;
9
+ export type SubdomainEditorProps = typeof __propDef.props;
10
+ export type SubdomainEditorEvents = typeof __propDef.events;
11
+ export type SubdomainEditorSlots = typeof __propDef.slots;
12
12
  export default class SubdomainEditor extends SvelteComponentTyped<SubdomainEditorProps, SubdomainEditorEvents, SubdomainEditorSlots> {
13
13
  }
14
14
  export {};