bookish-press 0.4.1 → 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 -75
  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
@@ -1,17 +1,20 @@
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 Instructions from './Instructions.svelte';
5
5
  import ChapterIDs from '../../models/book/ChapterID';
6
6
  import Format from '../chapter/Format.svelte';
7
- import MediaPreview from "./MediaPreview.svelte";
8
- import { onMount } from "svelte";
9
- import { getEdition, isEditable } from "./Contexts";
7
+ import MediaPreview from './MediaPreview.svelte';
8
+ import { onMount } from 'svelte';
9
+ import { getBook, getEdition, isEditable } from './Contexts';
10
+ import Button from '../app/Button.svelte';
11
+ import PageHeader from './PageHeader.svelte';
12
+ let book = getBook();
10
13
  let edition = getEdition();
11
14
  let editable = isEditable();
12
15
  let images = [];
13
- $: embeds = $edition.getEmbeds();
14
- $: media = $edition.getBook()?.getMedia();
16
+ $: embeds = $edition?.getEmbeds() ?? [];
17
+ $: media = $book?.getMedia();
15
18
  function updateImages(newImages) {
16
19
  images = newImages;
17
20
  }
@@ -20,57 +23,80 @@ onMount(() => {
20
23
  media?.notify(updateImages);
21
24
  return () => media?.stopNotifying(updateImages);
22
25
  });
23
- $: unused = images?.filter(image => embeds.find(embed => embed.getURL() === image.url) === undefined);
26
+ $: unused = images?.filter((image) => embeds.find((embed) => embed.getURL() === image.url) === undefined);
24
27
  </script>
25
28
 
26
- <Page title={`${$edition.getTitle()} - Media`}>
27
- <Header
28
- label="Media title"
29
- getImage={() => $edition.getImage(ChapterIDs.MediaID)}
30
- setImage={(embed) => $edition.setImage(ChapterIDs.MediaID, embed)}
31
- header="Media"
32
- tags={$edition.getTags()}
33
- >
34
- <Outline
35
- slot="outline"
36
- previous={$edition.getPreviousChapterID(ChapterIDs.MediaID)}
37
- next={$edition.getNextChapterID(ChapterIDs.MediaID)}
38
- />
39
- </Header>
40
- <Instructions>
41
- This page shows readers an index of the media in the book.
42
- Writers can use this page to manage any images that are linked or uploaded for this book.
43
- Note: images are shared between all editions, so if you delete one not used in this edition,
44
- it might be used in others.
45
- </Instructions>
46
-
47
- {#if embeds.length === 0}
48
- <p>No images or videos appear in the book.</p>
49
- {:else}
50
- <p>These are the images and videos in the book:</p>
51
- {/if}
52
- {#each embeds as embed }
53
- <MediaPreview
54
- url={embed.getSmallURL()}
55
- alt={embed.getDescription()}
29
+ {#if $edition}
30
+ <Page title={`${$edition.getTitle()} - Media`}>
31
+ <Header
32
+ label="Media title"
33
+ getImage={() => $edition?.getImage(ChapterIDs.MediaID) ?? null}
34
+ setImage={(embed) =>
35
+ $edition
36
+ ? edition.set($edition.withImage(ChapterIDs.MediaID, embed))
37
+ : undefined}
38
+ header="Media"
39
+ tags={$edition.getTags()}
56
40
  >
57
- <span>{editable ? (images && images.find(i => i.url === embed.getURL()) === undefined) ? "linked" : "uploaded" : null }{embed.getCredit().isEmptyText() ? null : " • "}<Format node={embed.getCredit()}/></span>
58
- </MediaPreview>
59
- {/each}
60
- {#if editable !== undefined && unused !== undefined && unused.length > 0 }
61
- <h2>Unused</h2>
41
+ <Outline
42
+ slot="outline"
43
+ previous={$edition.getPreviousChapterID(ChapterIDs.MediaID)}
44
+ next={$edition.getNextChapterID(ChapterIDs.MediaID)}
45
+ />
46
+ </Header>
62
47
  <Instructions>
63
- These images are uploaded to this book, but not used.
64
- Delete them if you don't need them.
65
- Note, however, that these images may be used in other editions of this book.
48
+ This page shows readers an index of the media in the book. Writers
49
+ can use this page to manage any images that are linked or uploaded
50
+ for this book. Note: images are shared between all editions, so if
51
+ you delete one not used in this edition, it might be used in others.
66
52
  </Instructions>
67
- {#each unused as image }
53
+
54
+ {#if embeds.length === 0}
55
+ <p>No images or videos appear in the book.</p>
56
+ {:else}
57
+ <p>These are the images and videos in the book:</p>
58
+ {/if}
59
+ {#each embeds as embed}
68
60
  <MediaPreview
69
- url={image.url}
70
- alt={""}
61
+ url={embed.getSmallURL()}
62
+ alt={embed.getDescription() === ''
63
+ ? 'no description, image not used'
64
+ : embed.getDescription()}
71
65
  >
72
- <span>uploaded <button on:click={() => media?.remove(image).then(images => updateImages(images))}>x</button></span>
66
+ <span
67
+ >{#if editable}{images &&
68
+ images.find((i) => i.url === embed.getURL()) ===
69
+ undefined
70
+ ? 'linked'
71
+ : 'uploaded'}{embed.getCredit().isEmptyText()
72
+ ? ''
73
+ : ' • '}{/if}<Format
74
+ node={embed.getCredit()}
75
+ /></span
76
+ >
73
77
  </MediaPreview>
74
78
  {/each}
75
- {/if}
76
- </Page>
79
+ {#if editable && unused !== undefined && unused.length > 0}
80
+ <PageHeader id="unused">Unused</PageHeader>
81
+ <Instructions>
82
+ These images are uploaded to this book, but not used. Delete
83
+ them if you don't need them. Note, however, that these images
84
+ may be used in other editions of this book.
85
+ </Instructions>
86
+ {#each unused as image}
87
+ <MediaPreview url={image.url} alt={''}>
88
+ <span
89
+ >uploaded <Button
90
+ tooltip="delete this unused image"
91
+ command={() =>
92
+ media
93
+ ?.remove(image)
94
+ .then((images) => updateImages(images))}
95
+ >- image</Button
96
+ ></span
97
+ >
98
+ </MediaPreview>
99
+ {/each}
100
+ {/if}
101
+ </Page>
102
+ {/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 MediaProps = typeof __propDef.props;
10
- export declare type MediaEvents = typeof __propDef.events;
11
- export declare type MediaSlots = typeof __propDef.slots;
9
+ export type MediaProps = typeof __propDef.props;
10
+ export type MediaEvents = typeof __propDef.events;
11
+ export type MediaSlots = typeof __propDef.slots;
12
12
  export default class Media extends SvelteComponentTyped<MediaProps, MediaEvents, MediaSlots> {
13
13
  }
14
14
  export {};
@@ -1,11 +1,29 @@
1
1
  <script>export let url;
2
2
  export let alt;
3
3
  </script>
4
-
5
- <span class={"bookish-figure-preview"}>
6
- <img
7
- src={url}
8
- alt={alt}
9
- />
10
- <div class="bookish-figure-credit"><slot></slot></div>
11
- </span>
4
+
5
+ <figure class={'media-preview'}>
6
+ <img src={url} {alt} />
7
+ <figcaption class="credit"><slot /></figcaption>
8
+ </figure>
9
+
10
+ <style>
11
+ .media-preview {
12
+ display: inline-block;
13
+ width: 10rem;
14
+ margin: 1em;
15
+ vertical-align: bottom;
16
+ }
17
+
18
+ .media-preview img {
19
+ width: 100%;
20
+ height: auto;
21
+ }
22
+
23
+ .credit {
24
+ display: block;
25
+ text-align: right;
26
+ font-style: italic;
27
+ font-size: var(--bookish-small-font-size);
28
+ }
29
+ </style>
@@ -11,9 +11,9 @@ declare const __propDef: {
11
11
  default: {};
12
12
  };
13
13
  };
14
- export declare type MediaPreviewProps = typeof __propDef.props;
15
- export declare type MediaPreviewEvents = typeof __propDef.events;
16
- export declare type MediaPreviewSlots = typeof __propDef.slots;
14
+ export type MediaPreviewProps = typeof __propDef.props;
15
+ export type MediaPreviewEvents = typeof __propDef.events;
16
+ export type MediaPreviewSlots = typeof __propDef.slots;
17
17
  export default class MediaPreview extends SvelteComponentTyped<MediaPreviewProps, MediaPreviewEvents, MediaPreviewSlots> {
18
18
  }
19
19
  export {};
@@ -0,0 +1,10 @@
1
+ <span class="muted"><slot /></span>
2
+
3
+ <style>
4
+ /* TYPOGRAPHY */
5
+ .muted {
6
+ color: var(--bookish-muted-color);
7
+ font-weight: normal;
8
+ font-size: var(--bookish-block-font-size);
9
+ }
10
+ </style>
@@ -0,0 +1,27 @@
1
+ /** @typedef {typeof __propDef.props} MutedProps */
2
+ /** @typedef {typeof __propDef.events} MutedEvents */
3
+ /** @typedef {typeof __propDef.slots} MutedSlots */
4
+ export default class Muted extends SvelteComponentTyped<{
5
+ [x: string]: never;
6
+ }, {
7
+ [evt: string]: CustomEvent<any>;
8
+ }, {
9
+ default: {};
10
+ }> {
11
+ }
12
+ export type MutedProps = typeof __propDef.props;
13
+ export type MutedEvents = typeof __propDef.events;
14
+ export type MutedSlots = 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 {};
@@ -34,35 +34,37 @@ function layout() {
34
34
  function updateHeaders() {
35
35
  // When the outline updates (due to the page its on updating), generate a unique string for the current header outline.
36
36
  // If it's different from the last rendered state, refresh.
37
- headers = Array.from(document.getElementsByClassName("bookish-header"));
38
- let newHeaderString = headers.reduce((sum, el) => sum + el.outerHTML, "");
37
+ headers = Array.from(document.getElementsByClassName('page-header'));
38
+ let newHeaderString = headers.reduce((sum, el) => sum + el.outerHTML, '');
39
39
  // If the headers change, update the outline.
40
40
  if (headerString !== newHeaderString)
41
41
  headerString = newHeaderString;
42
42
  }
43
- function getHighlightThreshold() { return window.innerHeight / 3; }
43
+ function getHighlightThreshold() {
44
+ return window.innerHeight / 3;
45
+ }
44
46
  function position() {
45
47
  // Left align the floating outline with the left margin of the chapter
46
48
  // and the top of the title, unless we're past it.
47
- let title = document.getElementsByClassName("bookish-chapter-header-text")[0];
49
+ let title = document.getElementsByClassName('bookish-chapter-header-text')[0];
48
50
  // If we found them both...
49
51
  if (outline && title) {
50
52
  // If so, remove the inline position so the footer CSS applies.
51
53
  if (isMobile()) {
52
- outline.style.removeProperty("margin-top");
54
+ outline.style.removeProperty('margin-top');
53
55
  }
54
56
  // If not, set the position of the outline.
55
57
  else {
56
58
  let titleY = title.getBoundingClientRect().top + window.scrollY;
57
59
  // If the title is off screen, anchor it to the top of the window. (CSS is set to do this).
58
60
  if (titleY - 50 < window.scrollY) {
59
- outline.classList.add("bookish-outline-fixed-left");
60
- outline.classList.remove("bookish-outline-title-left");
61
+ outline.classList.add('outline-fixed-left');
62
+ outline.classList.remove('outline-title-left');
61
63
  }
62
64
  // Otherwise, anchor it to the title position.
63
65
  else {
64
- outline.classList.remove("bookish-outline-fixed-left");
65
- outline.classList.add("bookish-outline-title-left");
66
+ outline.classList.remove('outline-fixed-left');
67
+ outline.classList.add('outline-title-left');
66
68
  }
67
69
  // Tell any listeners about the repositioning.
68
70
  if (listener)
@@ -75,9 +77,11 @@ function highlight() {
75
77
  const threshold = getHighlightThreshold();
76
78
  // Find the header that we're past so we can update the outline.
77
79
  let indexOfNearestHeaderAbove = -1; // -1 represents the title
78
- Array.from(document.getElementsByClassName("bookish-header")).forEach((header, index) => {
80
+ Array.from(document.getElementsByClassName('bookish-header')).forEach((header, index) => {
79
81
  // Is this a header we care about?
80
- if (header.tagName === "H1" || header.tagName === "H2" || header.tagName === "H3") {
82
+ if (header.tagName === 'H1' ||
83
+ header.tagName === 'H2' ||
84
+ header.tagName === 'H3') {
81
85
  let rect = header.getBoundingClientRect();
82
86
  let headerTop = rect.y + top - rect.height;
83
87
  // Are we past this header?
@@ -91,83 +95,299 @@ function highlight() {
91
95
  onMount(() => {
92
96
  window.addEventListener('resize', layout);
93
97
  window.addEventListener('scroll', layout);
94
- // This is a bit hacky: we update the headers on every selection change so we
98
+ // This is a bit hacky: we update the headers on every selection change so we
95
99
  // can detect any header changes during editing. This isn't necessary during
96
100
  // reading, and is only necessary when a header is created, updated, or removed,
97
101
  // but we don't have a precise mechanism to listen to chapter changes, so we do this instead.
98
- document.addEventListener("selectionchange", updateHeaders);
102
+ document.addEventListener('selectionchange', updateHeaders);
99
103
  // Position outline after first render.
100
104
  layout();
101
105
  // Stop listening!
102
106
  return () => {
103
107
  window.removeEventListener('scroll', layout);
104
108
  window.removeEventListener('resize', layout);
105
- document.removeEventListener("selectionchange", updateHeaders);
109
+ document.removeEventListener('selectionchange', updateHeaders);
106
110
  };
107
111
  });
108
- let previousLabel = "\u25C0\uFE0E";
109
- let nextLabel = "\u25B6\uFE0E";
110
- let expandLabel = "\u2630";
111
- let lightLabel = "\u263C";
112
- let darkLabel = "\u263E";
112
+ let previousLabel = '\u25C0\uFE0E';
113
+ let nextLabel = '\u25B6\uFE0E';
114
+ let expandLabel = '\u2630';
115
+ let lightLabel = '\u263C';
116
+ let darkLabel = '\u263E';
113
117
  </script>
114
118
 
115
- <div
119
+ <nav
116
120
  bind:this={outline}
117
- class={"bookish-outline " + (!expanded || collapse ? "bookish-outline-collapsed": "bookish-outline-expanded")}
121
+ class={'outline ' +
122
+ (!expanded || collapse ? 'outline-collapsed' : 'outline-expanded')}
118
123
  >
119
- <!-- Dark mode toggle -->
120
- <div
121
- class="bookish-outline-reading-mode"
122
- role="button"
123
- aria-label={$dark === true ? "Switch to light mode" : "Switch to dark mode"}
124
- tabIndex=0
125
- on:click={toggleReadingMode}
126
- on:keydown={event => {
127
- if(event.key === "Enter" || event.key === " ") {
128
- toggleReadingMode();
129
- event.stopPropagation();
130
- }
131
- }}
132
- >
133
- {$dark ? darkLabel : lightLabel}
134
- </div>
135
124
  <!-- Visual cue of expandability, only visible in footer mode. -->
136
- <div
137
- class={"bookish-outline-collapse-cue" + (headers.length === 0 ? " bookish-outline-collapse-cue-disabled" : "") }
138
- role="button"
139
- aria-label={expanded ? "Collapse navigation menu" : "Expand navigation menu"}
140
- tabIndex=0
141
- on:click={headers.length > 0 ? toggleExpanded : undefined }
142
- on:keydown={event => {
143
- if(event.key === "Enter" || event.key === " ")
144
- toggleExpanded()
125
+ <div
126
+ class={'outline-collapse-cue' +
127
+ (headers.length === 0 ? ' outline-collapse-cue-disabled' : '')}
128
+ role="button"
129
+ aria-label={expanded
130
+ ? 'Collapse navigation menu'
131
+ : 'Expand navigation menu'}
132
+ tabIndex="0"
133
+ on:click={headers.length > 0 ? toggleExpanded : undefined}
134
+ on:keydown={(event) => {
135
+ if (event.key === 'Enter' || event.key === ' ') toggleExpanded();
145
136
  }}
146
137
  >
147
- { expandLabel }
138
+ {expandLabel}
148
139
  </div>
149
- <div class="bookish-outline-headers">
150
-
140
+ <div class="outline-headers">
151
141
  <!-- Book navigation links -->
152
- <div class="bookish-outline-header-nav">
153
- {#if previous !== null}<Link to={base + "/" + previous}>{previousLabel}</Link>{:else}<span class="bookish-outline-header-nav-disabled">{previousLabel}</span>{/if}
142
+ <div class="outline-header-nav">
143
+ {#if previous !== null}<Link to={$base + previous}
144
+ >{previousLabel}</Link
145
+ >{:else}<span class="outline-header-nav-disabled"
146
+ >{previousLabel}</span
147
+ >{/if}
154
148
  &nbsp;&middot;&nbsp;
155
- <Link to={base + "/"}>Home</Link>
149
+ <Link to={$base}>Home</Link>
156
150
  &nbsp;&middot;&nbsp;
157
- {#if next !== null}<Link to={base + "/" + next}>{nextLabel}</Link>{:else}<span class="bookish-outline-header-nav-disabled">{nextLabel}</span>{/if}
151
+ {#if next !== null}<Link to={$base + next}>{nextLabel}</Link
152
+ >{:else}<span class="outline-header-nav-disabled"
153
+ >{nextLabel}</span
154
+ >{/if}
158
155
  </div>
159
156
  <!-- Scan through the headers and add a properly formatted link for each. -->
160
- {#each headers as header, index }
157
+ {#each headers as header, index}
161
158
  <!-- Assumes that all headers have an H1, H2, etc. tag. -->
162
- {@const level = Number.parseInt(header.tagName.charAt(1)) }
159
+ {@const level = Number.parseInt(header.tagName.charAt(1))}
163
160
  <!-- Only h1, h2, and h3 headers... -->
164
- {#if level <= 3 }
165
- <Link to={"#" + header.id}>
166
- <div class={"bookish-outline-header bookish-outline-header-level-" + (level - 1) + (headerIndex === index ? " bookish-outline-header-active" : "")}>
161
+ {#if level <= 3}
162
+ <Link to={'#' + header.id}>
163
+ <div
164
+ class={'outline-header outline-header-level-' +
165
+ (level - 1) +
166
+ (headerIndex === index
167
+ ? ' outline-header-active'
168
+ : '')}
169
+ >
167
170
  {header.textContent}
168
171
  </div>
169
172
  </Link>
170
173
  {/if}
171
174
  {/each}
172
175
  </div>
173
- </div>
176
+ <!-- Dark mode toggle -->
177
+ <div
178
+ class="outline-reading-mode"
179
+ role="button"
180
+ aria-label={$dark === true
181
+ ? 'Switch to light mode'
182
+ : 'Switch to dark mode'}
183
+ tabIndex="0"
184
+ on:click={toggleReadingMode}
185
+ on:keydown={(event) => {
186
+ if (event.key === 'Enter' || event.key === ' ') {
187
+ toggleReadingMode();
188
+ event.stopPropagation();
189
+ }
190
+ }}
191
+ >
192
+ {$dark ? darkLabel : lightLabel}
193
+ </div>
194
+ </nav>
195
+
196
+ <style>
197
+ .outline {
198
+ font-family: var(--bookish-header-font-family);
199
+ font-weight: normal;
200
+ font-size: var(--bookish-paragraph-font-size);
201
+ color: var(--bookish-muted-color);
202
+ --outline-width: 12em;
203
+ --outline-padding: 1em;
204
+ --outline-offset: calc(
205
+ -1 * (var(--outline-width) + 3 * var(--outline-padding))
206
+ );
207
+ }
208
+
209
+ .outline-header-nav {
210
+ display: inline-block;
211
+ width: 100%;
212
+ padding-bottom: var(--outline-padding);
213
+ }
214
+
215
+ .outline-header {
216
+ display: block;
217
+ line-height: var(--bookish-paragraph-line-height-tight);
218
+ text-indent: 0;
219
+ padding-left: 1rem;
220
+ padding-right: 1rem;
221
+ margin-bottom: 0.75rem;
222
+ }
223
+
224
+ .outline-header-level-0 {
225
+ font-size: 1rem;
226
+ }
227
+
228
+ .outline-header-level-1 {
229
+ font-size: 0.9rem;
230
+ }
231
+
232
+ .outline-header-level-2 {
233
+ font-size: 0.8rem;
234
+ font-style: italic;
235
+ margin-left: 1em;
236
+ }
237
+
238
+ :global(a .outline-header),
239
+ :global(.outline-header-nav a) {
240
+ color: var(--bookish-muted-color);
241
+ }
242
+
243
+ :global(a .outline-header-active),
244
+ :global(a:hover .outline-header) {
245
+ color: var(--bookish-paragraph-color);
246
+ }
247
+
248
+ .outline-header-nav-disabled {
249
+ opacity: 0.3;
250
+ }
251
+
252
+ :global(.outline a:hover) {
253
+ text-decoration: none;
254
+ }
255
+
256
+ /* Only apply this on devices with hover abilities. */
257
+ @media (hover: hover) {
258
+ :global(.outline a:hover) {
259
+ color: var(--bookish-paragraph-color);
260
+ }
261
+ }
262
+
263
+ :global(a .outline-header-active) {
264
+ color: var(--bookish-paragraph-color);
265
+ }
266
+
267
+ .outline-reading-mode {
268
+ transition: transform 0.2s ease-in;
269
+ }
270
+
271
+ .outline-reading-mode:hover {
272
+ cursor: pointer;
273
+ transform: scale(1.25, 1.25);
274
+ color: var(--bookish-paragraph-color);
275
+ }
276
+
277
+ /* Mobile */
278
+ @media screen and (max-width: 1200px) {
279
+ .outline {
280
+ position: fixed;
281
+ top: 100%; /* Put it all the way off screen on the bottom, then let JS translate */
282
+ left: 0;
283
+ right: 0;
284
+ width: 100%;
285
+ z-index: 2; /* Put it above content when it's a sheet in the footer */
286
+ border-top: 1px solid var(--bookish-border-color-light);
287
+ text-align: left;
288
+ transition: transform 0.2s ease-in;
289
+ background-color: var(--bookish-background-color);
290
+ box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.25);
291
+ backdrop-filter: blur(10px);
292
+ -webkit-backdrop-filter: blur(10px);
293
+ /* Cap height at window size. If the content is too tall, scroll it. */
294
+ max-height: 100%;
295
+ overflow-y: scroll;
296
+ }
297
+
298
+ /* Make a little centered box to store the outline to preserve its left aligned structure, while making it easier to click. */
299
+ .outline-headers {
300
+ width: 20em;
301
+ margin: auto;
302
+ }
303
+
304
+ .outline-header-nav {
305
+ text-align: center;
306
+ padding-top: 0.5em; /* Add some spacing when in the footer */
307
+ padding-bottom: 0.5em;
308
+ text-indent: 0 !important; /* Override header default */
309
+ font-size: 1.25rem !important;
310
+ }
311
+
312
+ .outline-reading-mode {
313
+ position: absolute;
314
+ top: 0.5em;
315
+ left: 0;
316
+ font-size: 1em;
317
+ display: inline-block;
318
+ padding-left: 1em;
319
+ padding-right: 1em;
320
+ }
321
+
322
+ .outline-collapse-cue {
323
+ position: absolute;
324
+ top: 0.5em;
325
+ right: 0;
326
+ font-size: 1em;
327
+ display: inline-block;
328
+ padding-left: 1em;
329
+ padding-right: 1em;
330
+ transition: transform 0.2s ease-in;
331
+ }
332
+
333
+ .outline-collapse-cue:hover {
334
+ cursor: pointer;
335
+ transform: scale(1.25, 1.25);
336
+ color: var(--bookish-paragraph-color);
337
+ }
338
+
339
+ .outline-collapse-cue-disabled {
340
+ display: none;
341
+ }
342
+
343
+ .outline-expanded .outline-collapse-cue {
344
+ transform: rotate(90deg);
345
+ }
346
+
347
+ .outline.outline-expanded {
348
+ transform: translateY(-100%);
349
+ }
350
+
351
+ .outline.outline-collapsed {
352
+ transform: translateY(-3rem);
353
+ }
354
+ }
355
+
356
+ /* Desktop */
357
+ @media screen and (min-width: 1200px) {
358
+ .outline {
359
+ width: var(--outline-width);
360
+ z-index: 0; /* Put it below everything when it's in the margin. */
361
+ border-right: 1px solid var(--bookish-border-color-light);
362
+ padding: var(--outline-padding);
363
+ background-color: var(--bookish-background-color);
364
+ margin-right: var(--outline-padding);
365
+ }
366
+
367
+ /* When the outline is fixed to the left, it's translated by it's width (with some padding). */
368
+ /* It's left position is set outline.js. This class is set by outline.js. */
369
+ .outline.outline-fixed-left {
370
+ position: fixed;
371
+ display: inline-block;
372
+ top: 50px;
373
+ transform: translateX(var(--outline-offset));
374
+ }
375
+
376
+ /* When the outline is fixed to title, it's positioned absolutely relative to the book container. */
377
+ /* We set a margin appropriate for it's width above. This class is set in Outline.tsx. */
378
+ .outline.outline-title-left {
379
+ position: absolute;
380
+ margin-left: var(--outline-offset);
381
+ }
382
+
383
+ .outline-collapse-cue {
384
+ display: none;
385
+ }
386
+
387
+ .outline-reading-mode {
388
+ position: absolute;
389
+ top: calc(var(--outline-padding));
390
+ right: calc(var(--outline-padding));
391
+ }
392
+ }
393
+ </style>