bookish-press 0.4.0 → 0.4.16

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 (394) hide show
  1. package/README.md +3 -1
  2. package/components/Auth.svelte +19 -14
  3. package/components/Auth.svelte.d.ts +4 -4
  4. package/components/Authentication.d.ts +2 -2
  5. package/components/BookPreview.svelte +77 -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 +45 -0
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/components/app/Head.svelte +12 -0
  18. package/components/app/Head.svelte.d.ts +27 -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 +19 -0
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/components/app/Table.svelte +32 -0
  30. package/components/app/Table.svelte.d.ts +27 -0
  31. package/components/app/TextInput.svelte +37 -0
  32. package/components/app/TextInput.svelte.d.ts +22 -0
  33. package/components/app/Writing.svelte +13 -0
  34. package/components/app/Writing.svelte.d.ts +27 -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 +23 -20
  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 +66 -23
  42. package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
  43. package/components/chapter/ChapterBody.svelte +61 -9
  44. package/components/chapter/ChapterBody.svelte.d.ts +4 -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 +38 -16
  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 +154 -66
  54. package/components/chapter/Embed.svelte.d.ts +5 -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 +60 -37
  64. package/components/chapter/Format.svelte.d.ts +4 -4
  65. package/components/chapter/InlineCode.svelte +15 -5
  66. package/components/chapter/InlineCode.svelte.d.ts +4 -4
  67. package/components/chapter/Label.svelte +37 -8
  68. package/components/chapter/Label.svelte.d.ts +4 -4
  69. package/components/chapter/Link.svelte +23 -18
  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 +74 -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 +343 -237
  92. package/components/editor/BookishEditor.svelte.d.ts +5 -5
  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 +80 -0
  101. package/components/editor/CaretView.svelte.d.ts +24 -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 +3 -3
  127. package/components/editor/Note.svelte.d.ts +6 -2
  128. package/components/editor/PositionEditor.svelte +9 -6
  129. package/components/editor/PositionEditor.svelte.d.ts +4 -4
  130. package/components/editor/QuoteEditor.svelte +7 -2
  131. package/components/editor/QuoteEditor.svelte.d.ts +4 -4
  132. package/components/editor/Switch.svelte +55 -28
  133. package/components/editor/Switch.svelte.d.ts +4 -4
  134. package/components/editor/TableEditor.svelte +10 -0
  135. package/components/editor/TableEditor.svelte.d.ts +17 -0
  136. package/components/editor/TextEditor.svelte +83 -45
  137. package/components/editor/TextEditor.svelte.d.ts +5 -4
  138. package/components/editor/Toggle.svelte +11 -8
  139. package/components/editor/Toggle.svelte.d.ts +4 -4
  140. package/components/editor/Toolbar.svelte +192 -144
  141. package/components/editor/Toolbar.svelte.d.ts +5 -8
  142. package/components/editor/ToolbarGroup.svelte +18 -23
  143. package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
  144. package/components/editor/ToolbarSpacer.svelte +8 -1
  145. package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
  146. package/components/editor/URLEditor.svelte +6 -8
  147. package/components/editor/URLEditor.svelte.d.ts +3 -3
  148. package/components/editor/UndoState.d.ts +3 -3
  149. package/components/editor/icons/annotate.svg +1 -0
  150. package/components/editor/icons/block.svg +1 -0
  151. package/components/editor/icons/bold.svg +1 -0
  152. package/components/editor/icons/bullets.svg +1 -0
  153. package/components/editor/icons/callout.svg +1 -0
  154. package/components/editor/icons/citation.svg +8 -0
  155. package/components/editor/icons/clear.svg +1 -0
  156. package/components/editor/icons/clipboard.svg +1 -0
  157. package/components/editor/icons/code.svg +1 -0
  158. package/components/editor/icons/columnafter.svg +1 -0
  159. package/components/editor/icons/columnbefore.svg +1 -0
  160. package/components/editor/icons/comment.svg +1 -0
  161. package/components/editor/icons/copy.svg +1 -0
  162. package/components/editor/icons/cut.svg +1 -0
  163. package/components/editor/icons/define.svg +7 -0
  164. package/components/editor/icons/deletecolumn.svg +1 -0
  165. package/components/editor/icons/deleterow.svg +1 -0
  166. package/components/editor/icons/footnote.svg +8 -0
  167. package/components/editor/icons/header1.svg +7 -0
  168. package/components/editor/icons/header2.svg +7 -0
  169. package/components/editor/icons/header3.svg +7 -0
  170. package/components/editor/icons/home.svg +1 -0
  171. package/components/editor/icons/indent.svg +1 -0
  172. package/components/editor/icons/italic.svg +1 -0
  173. package/components/editor/icons/label.svg +1 -0
  174. package/components/editor/icons/left.svg +1 -0
  175. package/components/editor/icons/level.svg +1 -0
  176. package/components/editor/icons/link.svg +1 -0
  177. package/components/editor/icons/list.svg +1 -0
  178. package/components/editor/icons/media.svg +1 -0
  179. package/components/editor/icons/middle.svg +1 -0
  180. package/components/editor/icons/numbers.svg +10 -0
  181. package/components/editor/icons/paragraph.svg +1 -0
  182. package/components/editor/icons/paste.svg +10 -0
  183. package/components/editor/icons/quote.svg +1 -0
  184. package/components/editor/icons/redo.svg +1 -0
  185. package/components/editor/icons/right.svg +1 -0
  186. package/components/editor/icons/rowabove.svg +1 -0
  187. package/components/editor/icons/rowbelow.svg +1 -0
  188. package/components/editor/icons/rule.svg +1 -0
  189. package/components/editor/icons/sub.svg +1 -0
  190. package/components/editor/icons/super.svg +1 -0
  191. package/components/editor/icons/table.svg +1 -0
  192. package/components/editor/icons/text.svg +1 -0
  193. package/components/editor/icons/time.svg +1 -0
  194. package/components/editor/icons/undo.svg +1 -0
  195. package/components/editor/icons/unindent.svg +1 -0
  196. package/components/editor/icons/unlink.svg +1 -0
  197. package/components/page/Acknowledgements.svelte +31 -22
  198. package/components/page/Acknowledgements.svelte.d.ts +4 -4
  199. package/components/page/Authors.svelte +34 -14
  200. package/components/page/Authors.svelte.d.ts +6 -6
  201. package/components/page/BulkReferenceEditor.svelte +53 -22
  202. package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
  203. package/components/page/Chapter.svelte +196 -141
  204. package/components/page/Chapter.svelte.d.ts +3 -3
  205. package/components/page/ChapterContext.d.ts +4 -4
  206. package/components/page/ChapterNumber.svelte +9 -0
  207. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  208. package/components/page/ChapterTitle.svelte +16 -0
  209. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  210. package/components/page/Contexts.d.ts +31 -20
  211. package/components/page/Contexts.js +47 -17
  212. package/components/page/DefinitionView.svelte +115 -86
  213. package/components/page/DefinitionView.svelte.d.ts +3 -3
  214. package/components/page/Description.svelte +27 -18
  215. package/components/page/Description.svelte.d.ts +4 -4
  216. package/components/page/Edition.svelte +127 -74
  217. package/components/page/Edition.svelte.d.ts +4 -4
  218. package/components/page/Editions.svelte +144 -0
  219. package/components/page/Editions.svelte.d.ts +14 -0
  220. package/components/page/Glossary.svelte +57 -48
  221. package/components/page/Glossary.svelte.d.ts +4 -4
  222. package/components/page/Header.svelte +129 -44
  223. package/components/page/Header.svelte.d.ts +6 -6
  224. package/components/page/Index.svelte +114 -80
  225. package/components/page/Index.svelte.d.ts +4 -4
  226. package/components/page/Instructions.svelte +18 -16
  227. package/components/page/Instructions.svelte.d.ts +4 -4
  228. package/components/page/License.svelte +29 -21
  229. package/components/page/License.svelte.d.ts +4 -4
  230. package/components/page/Loading.svelte +102 -12
  231. package/components/page/Loading.svelte.d.ts +6 -2
  232. package/components/page/Media.svelte +77 -51
  233. package/components/page/Media.svelte.d.ts +4 -4
  234. package/components/page/MediaPreview.svelte +26 -8
  235. package/components/page/MediaPreview.svelte.d.ts +3 -3
  236. package/components/page/Muted.svelte +10 -0
  237. package/components/page/Muted.svelte.d.ts +27 -0
  238. package/components/page/Outline.svelte +279 -59
  239. package/components/page/Outline.svelte.d.ts +3 -3
  240. package/components/page/Page.svelte +40 -9
  241. package/components/page/Page.svelte.d.ts +3 -3
  242. package/components/page/PageHeader.svelte +14 -0
  243. package/components/page/PageHeader.svelte.d.ts +18 -0
  244. package/components/page/PageParagraph.svelte +18 -0
  245. package/components/page/PageParagraph.svelte.d.ts +27 -0
  246. package/components/page/PossibleChapter.svelte +7 -7
  247. package/components/page/PossibleChapter.svelte.d.ts +4 -4
  248. package/components/page/PossibleReference.svelte +6 -11
  249. package/components/page/PossibleReference.svelte.d.ts +6 -7
  250. package/components/page/Print.svelte +27 -3
  251. package/components/page/Print.svelte.d.ts +4 -4
  252. package/components/page/Reference.svelte +256 -113
  253. package/components/page/Reference.svelte.d.ts +5 -5
  254. package/components/page/References.svelte +39 -47
  255. package/components/page/References.svelte.d.ts +4 -4
  256. package/components/page/Rows.svelte +54 -0
  257. package/components/page/Rows.svelte.d.ts +27 -0
  258. package/components/page/Search.svelte +86 -63
  259. package/components/page/Search.svelte.d.ts +4 -4
  260. package/components/page/Status.svelte +43 -35
  261. package/components/page/Status.svelte.d.ts +4 -9
  262. package/components/page/SubdomainEditor.svelte +40 -27
  263. package/components/page/SubdomainEditor.svelte.d.ts +4 -4
  264. package/components/page/TableOfContents.svelte +225 -190
  265. package/components/page/TableOfContents.svelte.d.ts +4 -4
  266. package/components/page/TableOfContentsImage.svelte +8 -8
  267. package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
  268. package/components/page/TableOfContentsRow.svelte +96 -33
  269. package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
  270. package/components/page/ThemeEditor.svelte +174 -39
  271. package/components/page/ThemeEditor.svelte.d.ts +4 -4
  272. package/components/page/ThemeEditorPreview.svelte +35 -23
  273. package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
  274. package/components/page/ThemeSetEditor.svelte +15 -13
  275. package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
  276. package/components/page/ThemeVariableEditor.svelte +24 -15
  277. package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
  278. package/components/page/Title.svelte +12 -0
  279. package/components/page/Title.svelte.d.ts +27 -0
  280. package/components/page/Unknown.svelte +25 -21
  281. package/components/page/Unknown.svelte.d.ts +4 -4
  282. package/components/page/margins.js +50 -33
  283. package/index.d.ts +14 -0
  284. package/index.js +14 -0
  285. package/models/CRUD.d.ts +17 -0
  286. package/models/CRUD.js +194 -0
  287. package/models/Firebase.js +17 -15
  288. package/models/book/Book.d.ts +24 -28
  289. package/models/book/Book.js +120 -113
  290. package/models/book/BookMedia.d.ts +3 -3
  291. package/models/book/BookMedia.js +22 -16
  292. package/models/book/BookSaveStatus.d.ts +7 -0
  293. package/models/book/BookSaveStatus.js +8 -0
  294. package/models/book/Chapter.d.ts +46 -39
  295. package/models/book/Chapter.js +180 -198
  296. package/models/book/ChapterID.js +7 -7
  297. package/models/book/Definition.d.ts +1 -1
  298. package/models/book/Edition.d.ts +62 -60
  299. package/models/book/Edition.js +385 -303
  300. package/models/book/Reference.d.ts +24 -0
  301. package/models/book/Reference.js +78 -0
  302. package/models/book/Schema.d.ts +169 -0
  303. package/models/book/Schema.js +114 -0
  304. package/models/book/Theme.d.ts +44 -37
  305. package/models/book/Theme.js +452 -52
  306. package/models/book/ThemeColors.d.ts +1 -1
  307. package/models/book/Words.d.ts +2 -0
  308. package/models/book/Words.js +110 -0
  309. package/models/chapter/AtomNode.d.ts +4 -4
  310. package/models/chapter/AtomNode.js +20 -13
  311. package/models/chapter/BlockNode.d.ts +9 -10
  312. package/models/chapter/BlockNode.js +32 -13
  313. package/models/chapter/BlocksNode.d.ts +10 -10
  314. package/models/chapter/BlocksNode.js +315 -120
  315. package/models/chapter/BlocksNode.test.js +494 -228
  316. package/models/chapter/Bookkeeping.d.ts +1 -1
  317. package/models/chapter/CalloutNode.d.ts +3 -3
  318. package/models/chapter/CalloutNode.js +34 -12
  319. package/models/chapter/Caret.d.ts +9 -7
  320. package/models/chapter/Caret.js +11 -6
  321. package/models/chapter/ChapterNode.d.ts +11 -11
  322. package/models/chapter/ChapterNode.js +70 -33
  323. package/models/chapter/CitationsNode.d.ts +3 -3
  324. package/models/chapter/CitationsNode.js +31 -12
  325. package/models/chapter/CodeNode.d.ts +11 -6
  326. package/models/chapter/CodeNode.js +143 -34
  327. package/models/chapter/CommentNode.d.ts +5 -5
  328. package/models/chapter/CommentNode.js +29 -13
  329. package/models/chapter/DefinitionNode.d.ts +2 -2
  330. package/models/chapter/DefinitionNode.js +15 -7
  331. package/models/chapter/Edit.d.ts +3 -3
  332. package/models/chapter/EmbedNode.d.ts +9 -5
  333. package/models/chapter/EmbedNode.js +108 -35
  334. package/models/chapter/ErrorNode.d.ts +2 -2
  335. package/models/chapter/ErrorNode.js +34 -12
  336. package/models/chapter/FootnoteNode.d.ts +5 -5
  337. package/models/chapter/FootnoteNode.js +34 -16
  338. package/models/chapter/FormatNode.d.ts +10 -10
  339. package/models/chapter/FormatNode.js +237 -106
  340. package/models/chapter/FormatNode.test.js +87 -45
  341. package/models/chapter/InlineCodeNode.d.ts +2 -2
  342. package/models/chapter/InlineCodeNode.js +22 -9
  343. package/models/chapter/LabelNode.d.ts +4 -4
  344. package/models/chapter/LabelNode.js +31 -13
  345. package/models/chapter/LinkNode.d.ts +2 -2
  346. package/models/chapter/LinkNode.js +21 -9
  347. package/models/chapter/ListNode.d.ts +8 -8
  348. package/models/chapter/ListNode.js +99 -38
  349. package/models/chapter/ListNode.test.js +29 -24
  350. package/models/chapter/MetadataNode.d.ts +3 -3
  351. package/models/chapter/MetadataNode.js +13 -5
  352. package/models/chapter/Node.d.ts +5 -3
  353. package/models/chapter/Node.js +76 -29
  354. package/models/chapter/Node.test.js +20 -18
  355. package/models/chapter/ParagraphNode.d.ts +6 -6
  356. package/models/chapter/ParagraphNode.js +84 -29
  357. package/models/chapter/ParagraphNode.test.js +22 -13
  358. package/models/chapter/Parser.d.ts +25 -25
  359. package/models/chapter/Parser.js +201 -189
  360. package/models/chapter/Parser.test.js +16 -16
  361. package/models/chapter/Position.d.ts +1 -1
  362. package/models/chapter/QuoteNode.d.ts +6 -6
  363. package/models/chapter/QuoteNode.js +61 -23
  364. package/models/chapter/RootNode.d.ts +4 -4
  365. package/models/chapter/RuleNode.d.ts +2 -2
  366. package/models/chapter/RuleNode.js +31 -11
  367. package/models/chapter/TableNode.d.ts +8 -6
  368. package/models/chapter/TableNode.js +89 -34
  369. package/models/chapter/TableNode.test.js +22 -24
  370. package/models/chapter/TextNode.d.ts +6 -6
  371. package/models/chapter/TextNode.js +72 -32
  372. package/models/chapter/TextNode.test.js +4 -4
  373. package/models/loadEdition.d.ts +1 -1
  374. package/models/loadEdition.js +10 -6
  375. package/package.json +104 -25
  376. package/util/getSubdomain.js +8 -6
  377. package/util/isMobile.js +1 -1
  378. package/util/mineReference.d.ts +3 -2
  379. package/util/mineReference.js +67 -29
  380. package/util/scrollToEyeLevel.js +6 -1
  381. package/components/chapter/renderPosition.d.ts +0 -3
  382. package/components/chapter/renderPosition.js +0 -4
  383. package/components/editor/ToolbarIcon.svelte +0 -22
  384. package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
  385. package/components/page/Alert.svelte +0 -11
  386. package/components/page/Alert.svelte.d.ts +0 -23
  387. package/components/page/Revisions.svelte +0 -124
  388. package/components/page/Revisions.svelte.d.ts +0 -14
  389. package/models/BookLoader.d.ts +0 -2
  390. package/models/BookLoader.js +0 -67
  391. package/models/Firestore.d.ts +0 -22
  392. package/models/Firestore.js +0 -194
  393. package/models/chapter/ReferenceNode.d.ts +0 -29
  394. package/models/chapter/ReferenceNode.js +0 -48
@@ -0,0 +1,144 @@
1
+ <script>import Parser from '../../models/chapter/Parser';
2
+ import { createNewEdition, publishEdition } from '../../models/CRUD';
3
+ import Format from '../chapter/Format.svelte';
4
+ import BookishEditor from '../editor/BookishEditor.svelte';
5
+ import Switch from '../editor/Switch.svelte';
6
+ import Instructions from './Instructions.svelte';
7
+ import Note from '../editor/Note.svelte';
8
+ import { getBook, getEdition, isEditable } from './Contexts';
9
+ import Button from '../app/Button.svelte';
10
+ import Link from '../Link.svelte';
11
+ import PageHeader from './PageHeader.svelte';
12
+ import Rows from './Rows.svelte';
13
+ let edition = getEdition();
14
+ let editable = isEditable();
15
+ let book = getBook();
16
+ // Book revisions
17
+ $: bookRevisions = $book?.getRevisions();
18
+ // Copy the current draft to create a new draft.
19
+ function handlePublish(index, published) {
20
+ if ($book === undefined)
21
+ return;
22
+ book.set($book.asPublished(published, index));
23
+ }
24
+ async function handleDraftEdition() {
25
+ if ($book === undefined)
26
+ return;
27
+ book.set(await createNewEdition($book));
28
+ }
29
+ </script>
30
+
31
+ {#if $edition}
32
+ {#if $book && bookRevisions}
33
+ <PageHeader id="revisions"
34
+ >Editions {#if editable}<Button
35
+ tooltip="Create a new edition"
36
+ command={handleDraftEdition}>+</Button
37
+ >{/if}</PageHeader
38
+ >
39
+ <Instructions>
40
+ Each book has one or more editions, allowing you to track revisions
41
+ and ensure previous versions remain available. When you're ready to
42
+ revise, make a new edition, then publish it when you're done. The
43
+ edition with a * is the default edition readers will see, unless
44
+ they explicitly choose to view a previous edition.
45
+ </Instructions>
46
+ <Rows>
47
+ {#each bookRevisions as revision, index (revision.ref)}
48
+ {@const editionNumber =
49
+ bookRevisions === undefined
50
+ ? -1
51
+ : bookRevisions.length - index}
52
+ {@const editionLabel =
53
+ editionNumber +
54
+ (editionNumber === 1
55
+ ? 'st'
56
+ : editionNumber === 2
57
+ ? 'nd'
58
+ : editionNumber === 3
59
+ ? 'rd'
60
+ : 'th')}
61
+ {@const viewing = revision.ref.id === $edition.getRef()?.id}
62
+
63
+ {#if $book && (editable || revision.published)}
64
+ <tr>
65
+ <td>
66
+ {#if viewing}
67
+ <strong class="viewing">{editionLabel}</strong>
68
+ {:else}
69
+ <Link
70
+ to={`/write/${$book.ref.id}/${
71
+ bookRevisions.length - index
72
+ }`}>{editionLabel}</Link
73
+ >
74
+ {/if}
75
+ <Note
76
+ >{new Date(revision.time).toLocaleDateString(
77
+ 'en-us'
78
+ )}</Note
79
+ >
80
+ </td>
81
+ <td>
82
+ {#if editable}
83
+ <BookishEditor
84
+ ast={Parser.parseFormat(
85
+ undefined,
86
+ revision.summary
87
+ ).withTextIfEmpty()}
88
+ save={(newSummary) =>
89
+ $book
90
+ ? book.set(
91
+ $book.withEditionSummary(
92
+ newSummary.toBookdown(),
93
+ index
94
+ )
95
+ )
96
+ : undefined}
97
+ chapter={false}
98
+ component={Format}
99
+ placeholder="Summarize this edition's changes."
100
+ />
101
+ {:else if revision.summary === ''}
102
+ <em>No summary of changes</em>
103
+ {:else}
104
+ {revision.summary}
105
+ {/if}
106
+ </td>
107
+ <td style="whitespace: nowrap">
108
+ {#if editable}
109
+ <Switch
110
+ options={['hidden', 'published']}
111
+ enabled={revision.published ||
112
+ revision.summary !== ''}
113
+ value={revision.published
114
+ ? 'published'
115
+ : 'hidden'}
116
+ edit={(published) =>
117
+ handlePublish(
118
+ index,
119
+ published === 'published'
120
+ )}
121
+ />
122
+ {/if}
123
+ </td>
124
+ </tr>
125
+ {/if}
126
+ {/each}
127
+ </Rows>
128
+ {/if}
129
+ {/if}
130
+
131
+ <style>
132
+ .viewing {
133
+ border-bottom: var(--app-chrome-border-size) solid
134
+ var(--app-border-color);
135
+ }
136
+
137
+ td:first-child {
138
+ width: 5%;
139
+ }
140
+
141
+ td:last-child {
142
+ width: 30%;
143
+ }
144
+ </style>
@@ -0,0 +1,14 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type EditionsProps = typeof __propDef.props;
10
+ export type EditionsEvents = typeof __propDef.events;
11
+ export type EditionsSlots = typeof __propDef.slots;
12
+ export default class Editions extends SvelteComponentTyped<EditionsProps, EditionsEvents, EditionsSlots> {
13
+ }
14
+ export {};
@@ -1,61 +1,70 @@
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
4
  import ChapterIDs from '../../models/book/ChapterID';
5
- import DefinitionView from "./DefinitionView.svelte";
6
- import { getEdition, isEditable } from "./Contexts";
7
- import Instructions from "./Instructions.svelte";
5
+ import DefinitionView from './DefinitionView.svelte';
6
+ import { getEdition, isEditable } from './Contexts';
7
+ import Instructions from './Instructions.svelte';
8
+ import Button from '../app/Button.svelte';
9
+ import Rows from './Rows.svelte';
8
10
  let edition = getEdition();
9
11
  let editable = isEditable();
10
- $: glossary = $edition.getGlossary();
12
+ $: glossary = $edition?.getGlossary() ?? {};
11
13
  // Sort by canonical phrases
12
- $: keys = glossary === undefined || Object.keys(glossary).length === 0 ? null : Object.keys(glossary).sort((a, b) => glossary[a].phrase.localeCompare(glossary[b].phrase));
14
+ $: keys =
15
+ $edition === undefined
16
+ ? []
17
+ : glossary === undefined || Object.keys(glossary).length === 0
18
+ ? null
19
+ : Object.keys(glossary).sort((a, b) => glossary[a].phrase.localeCompare(glossary[b].phrase));
13
20
  function addEmptyDefinition() {
21
+ if ($edition === undefined)
22
+ return;
14
23
  // Generate an ID.
15
- const letters = "abcdefghijklmnopqrstuvwxyz".split("");
16
- let id = "";
24
+ const letters = 'abcdefghijklmnopqrstuvwxyz'.split('');
25
+ let id = '';
17
26
  while (id.length < 4 || $edition.hasDefinition(id))
18
27
  id = id + letters[Math.round(Math.random() * 26)];
19
- $edition.addDefinition(id, "", "", []);
28
+ edition.set($edition.withDefinition(id, '', '', []));
20
29
  }
21
30
  </script>
22
31
 
23
- <Page title={`${$edition.getTitle()} - Glossary`}>
24
- <Header
25
- label="Glossary title"
26
- getImage={() => $edition.getImage(ChapterIDs.GlossaryID)}
27
- setImage={(embed) => $edition.setImage(ChapterIDs.GlossaryID, embed)}
28
- header="Glossary"
29
- tags={$edition.getTags()}
30
- >
31
- <Outline
32
- slot="outline"
33
- previous={$edition.getPreviousChapterID(ChapterIDs.GlossaryID)}
34
- next={$edition.getNextChapterID(ChapterIDs.GlossaryID)}
35
- />
36
- </Header>
37
- {#if editable }
38
- <Instructions>
39
- Add definitions and then link to them in a chapter's text.
40
- </Instructions>
41
- <p><button on:click={addEmptyDefinition}>+</button></p>
42
- {/if}
43
- {#if keys === null }
44
- <p>This book has no glossary.</p>
45
- {:else}
46
- <div>
47
- <br/>
48
- <div class="bookish-table">
49
- <table>
50
- <colgroup>
51
- <col style="width: 40%" />
52
- <col style="width: 60%" />
53
- </colgroup>
54
- <tbody>
55
- {#each keys as id }<DefinitionView id={id} definition={glossary[id]} />{/each}
56
- </tbody>
57
- </table>
58
- </div>
59
- </div>
60
- {/if}
61
- </Page>
32
+ {#if $edition}
33
+ <Page title={`${$edition.getTitle()} - Glossary`}>
34
+ <Header
35
+ label="Glossary title"
36
+ getImage={() => $edition?.getImage(ChapterIDs.GlossaryID) ?? null}
37
+ setImage={(embed) =>
38
+ $edition
39
+ ? edition.set(
40
+ $edition.withImage(ChapterIDs.GlossaryID, embed)
41
+ )
42
+ : undefined}
43
+ header="Glossary"
44
+ tags={$edition.getTags()}
45
+ >
46
+ <Outline
47
+ slot="outline"
48
+ previous={$edition.getPreviousChapterID(ChapterIDs.GlossaryID)}
49
+ next={$edition.getNextChapterID(ChapterIDs.GlossaryID)}
50
+ />
51
+ </Header>
52
+ {#if editable}
53
+ <Instructions>
54
+ Add definitions and then link to them in a chapter's text.
55
+ </Instructions>
56
+ <Button tooltip="Add a glossary entry" command={addEmptyDefinition}
57
+ >+ definition</Button
58
+ >
59
+ {/if}
60
+ {#if keys === null}
61
+ <p>This book has no glossary.</p>
62
+ {:else}
63
+ <dl>
64
+ {#each keys as id (id)}
65
+ <DefinitionView {id} definition={glossary[id]} />
66
+ {/each}
67
+ </dl>
68
+ {/if}
69
+ </Page>
70
+ {/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 GlossaryProps = typeof __propDef.props;
10
- export declare type GlossaryEvents = typeof __propDef.events;
11
- export declare type GlossarySlots = typeof __propDef.slots;
9
+ export type GlossaryProps = typeof __propDef.props;
10
+ export type GlossaryEvents = typeof __propDef.events;
11
+ export type GlossarySlots = typeof __propDef.slots;
12
12
  export default class Glossary extends SvelteComponentTyped<GlossaryProps, GlossaryEvents, GlossarySlots> {
13
13
  }
14
14
  export {};
@@ -1,11 +1,13 @@
1
1
  <script>import EmbedNode from '../../models/chapter/EmbedNode';
2
- import Parser from "../../models/chapter/Parser";
2
+ import Parser from '../../models/chapter/Parser';
3
3
  import Embed from '../chapter/Embed.svelte';
4
4
  import ErrorMessage from '../chapter/ErrorMessage.svelte';
5
5
  import BookishEditor from '../editor/BookishEditor.svelte';
6
+ import Title from './Title.svelte';
6
7
  import { onMount } from 'svelte';
7
8
  import TextEditor from '../editor/TextEditor.svelte';
8
9
  import { getEdition, isEditable } from './Contexts';
10
+ import Button from '../app/Button.svelte';
9
11
  export let label;
10
12
  export let header;
11
13
  export let subtitle = undefined;
@@ -15,22 +17,24 @@ export let getImage;
15
17
  export let setImage;
16
18
  export let save = null;
17
19
  let title = null;
18
- let reminder = null;
20
+ let showReminder = true;
19
21
  let edition = getEdition();
20
22
  let editable = isEditable();
21
23
  function updateScrollReminder() {
22
- if (title && reminder) {
23
- // If the bottom of the window is below the top of the title, hide the reminder.
24
- if (window.scrollY + window.innerHeight > title.getBoundingClientRect().top + window.scrollY)
25
- reminder.classList.add("bookish-past-title");
26
- else
27
- reminder.classList.remove("bookish-past-title");
28
- }
24
+ // If the bottom of the window is below the top of the title, hide the reminder.
25
+ if (title)
26
+ showReminder =
27
+ window.scrollY + window.innerHeight <=
28
+ title.getBoundingClientRect().top + window.scrollY;
29
+ }
30
+ function addCover() {
31
+ if (setImage)
32
+ setImage('|||||');
33
+ }
34
+ function removeCover() {
35
+ if (setImage)
36
+ setImage(null);
29
37
  }
30
- function addCover() { if (setImage)
31
- setImage("|||||"); }
32
- function removeCover() { if (setImage)
33
- setImage(null); }
34
38
  // When the title becomes visible or hidden, update the scroll reminder.
35
39
  onMount(() => {
36
40
  const intersectionObserver = new IntersectionObserver(() => updateScrollReminder());
@@ -38,8 +42,10 @@ onMount(() => {
38
42
  intersectionObserver.observe(title);
39
43
  updateScrollReminder();
40
44
  // Stop observing when unmounted.
41
- return () => { if (title)
42
- intersectionObserver.unobserve(title); };
45
+ return () => {
46
+ if (title)
47
+ intersectionObserver.unobserve(title);
48
+ };
43
49
  });
44
50
  // Get the embed, update when getImage function prop changes.
45
51
  let embedNode = undefined;
@@ -49,57 +55,136 @@ $: {
49
55
  }
50
56
  </script>
51
57
 
52
- <div class="bookish-chapter-header">
53
- {#if embedNode }
58
+ <header class="bookish-chapter-header">
59
+ {#if embedNode}
54
60
  <div class="bookish-figure-full">
55
61
  {#if edition && editable && embedNode instanceof EmbedNode}
56
- <BookishEditor
57
- ast={embedNode}
58
- save={node => setImage ? setImage(node.toBookdown()) : undefined }
62
+ <BookishEditor
63
+ ast={embedNode}
64
+ save={(node) =>
65
+ setImage ? setImage(node.toBookdown()) : undefined}
59
66
  chapter={false}
60
67
  component={Embed}
61
68
  placeholder=""
62
69
  />
63
- {:else if embedNode instanceof EmbedNode }
64
- <Embed node={embedNode}/>
70
+ {:else if embedNode instanceof EmbedNode}
71
+ <Embed node={embedNode} />
65
72
  {:else}
66
73
  <ErrorMessage node={embedNode} />
67
74
  {/if}
68
- {#if !print }<div bind:this={reminder} class="bookish-scroll-reminder"></div>{/if}
75
+ {#if !print && showReminder}
76
+ <div class="bookish-scroll-reminder" />
77
+ {/if}
69
78
  </div>
70
79
  {:else}
71
80
  <!-- Add a bit of space to account for the lack of an image. -->
72
81
  <p>&nbsp;</p>
73
82
  {/if}
74
83
  {#if !print}
75
- <slot name="outline"></slot>
84
+ <slot name="outline" />
76
85
  {/if}
77
- {#if editable }
78
- {#if embedNode === undefined }
79
- <button on:click={addCover}>+ cover image</button>
86
+ {#if editable}
87
+ {#if embedNode === undefined}
88
+ <Button tooltip="add cover image to page" command={addCover}
89
+ >+ cover image</Button
90
+ >
80
91
  {:else}
81
- <button on:click={removeCover}>x cover image</button>
92
+ <Button tooltip="remove cover image from page" command={removeCover}
93
+ >- cover image</Button
94
+ >
82
95
  {/if}
83
96
  {/if}
84
- <div class="bookish-chapter-header-text">
85
- <slot name="before"></slot>
86
- <h1 bind:this={title} class="bookish-title">
87
- {#if editable && save }
88
- <TextEditor
89
- label={label}
90
- startText={header + (subtitle ? ": " + subtitle : "")}
97
+ <div bind:this={title} class="bookish-chapter-header-text">
98
+ <slot name="before" />
99
+ <Title>
100
+ {#if editable && save}
101
+ <TextEditor
102
+ {label}
103
+ text={header + (subtitle ? ': ' + subtitle : '')}
91
104
  placeholder="Title"
92
- valid={text => text.length === 0 ? "Titles have to be at least one character long." : undefined }
93
- save={save}
105
+ valid={(text) =>
106
+ text.length === 0
107
+ ? 'Titles have to be at least one character long.'
108
+ : undefined}
109
+ {save}
94
110
  />
95
111
  {:else}
96
- { header }
97
- {#if subtitle }<div class="bookish-subtitle">{subtitle}</div>{/if}
112
+ {header}
113
+ {#if subtitle}<div class="bookish-subtitle">{subtitle}</div
114
+ >{/if}
98
115
  {/if}
99
- </h1>
100
- <slot name="after"></slot>
101
- {#if tags }
102
- <div>{#each tags as tag}<span class="bookish-tag">{tag}</span>{/each}</div>
116
+ </Title>
117
+ <slot name="after" />
118
+ {#if tags}
119
+ <div
120
+ >{#each tags as tag}<span class="bookish-tag">{tag}</span
121
+ >{/each}</div
122
+ >
103
123
  {/if}
104
124
  </div>
105
- </div>
125
+ </header>
126
+
127
+ <style>
128
+ .bookish-subtitle {
129
+ font-size: var(--bookish-header-1-font-size);
130
+ font-weight: normal;
131
+ font-style: italic;
132
+ margin-top: 0; /* Shouldn't have any space below title */
133
+ margin-bottom: calc(var(--bookish-title-font-size) * 0.5);
134
+ line-height: var(--bookish-header-line-height);
135
+ }
136
+
137
+ .bookish-figure-full {
138
+ left: 50%;
139
+ margin-left: -50vw;
140
+ margin-right: -50vw;
141
+ margin-bottom: 3em;
142
+ max-width: 100vw;
143
+ position: relative;
144
+ right: 50%;
145
+ width: 100vw;
146
+ }
147
+
148
+ .bookish-figure-full :global(.bookish-figure) {
149
+ /* No margin above full figures, which tend to come first in a page. */
150
+ margin-top: 0;
151
+ }
152
+
153
+ .bookish-scroll-reminder {
154
+ position: fixed;
155
+ bottom: 4em;
156
+ left: 50%;
157
+ animation: bookish-bounce 3s infinite;
158
+ animation-timing-function: ease;
159
+ width: 0;
160
+ height: 0;
161
+ margin-left: -1rem;
162
+ border-left: 1rem solid transparent;
163
+ border-right: 1rem solid transparent;
164
+ border-top: 1rem solid white;
165
+ mix-blend-mode: difference;
166
+ }
167
+
168
+ @keyframes bookish-bounce {
169
+ 0% {
170
+ bottom: 4em;
171
+ }
172
+ 50% {
173
+ bottom: 5em;
174
+ }
175
+ 100% {
176
+ bottom: 4em;
177
+ }
178
+ }
179
+
180
+ .bookish-tag {
181
+ font-size: var(--bookish-small-font-size);
182
+ display: inline-block;
183
+ padding: var(--bookish-inline-padding)
184
+ calc(2 * var(--bookish-inline-padding));
185
+ border-radius: var(--bookish-roundedness);
186
+ background-color: var(--bookish-border-color-light);
187
+ font-weight: bold;
188
+ text-transform: uppercase;
189
+ }
190
+ </style>
@@ -6,9 +6,9 @@ declare const __propDef: {
6
6
  subtitle?: string | undefined;
7
7
  print?: boolean | undefined;
8
8
  tags?: string[] | undefined;
9
- getImage: (() => string | null);
10
- setImage: (embed: string | null) => Promise<void> | undefined;
11
- save?: ((text: string) => Promise<void> | undefined) | null | undefined;
9
+ getImage: () => string | null;
10
+ setImage: (embed: string | null) => Promise<void> | void;
11
+ save?: ((text: string) => Promise<void> | void) | null | undefined;
12
12
  };
13
13
  events: {
14
14
  [evt: string]: CustomEvent<any>;
@@ -19,9 +19,9 @@ declare const __propDef: {
19
19
  after: {};
20
20
  };
21
21
  };
22
- export declare type HeaderProps = typeof __propDef.props;
23
- export declare type HeaderEvents = typeof __propDef.events;
24
- export declare type HeaderSlots = typeof __propDef.slots;
22
+ export type HeaderProps = typeof __propDef.props;
23
+ export type HeaderEvents = typeof __propDef.events;
24
+ export type HeaderSlots = typeof __propDef.slots;
25
25
  export default class Header extends SvelteComponentTyped<HeaderProps, HeaderEvents, HeaderSlots> {
26
26
  }
27
27
  export {};