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
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type DefinitionNode from "../../models/chapter/DefinitionNode";
2
+ import type DefinitionNode from '../../models/chapter/DefinitionNode';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  node: DefinitionNode;
@@ -7,14 +7,11 @@ declare const __propDef: {
7
7
  events: {
8
8
  [evt: string]: CustomEvent<any>;
9
9
  };
10
- slots: {
11
- interactor: {};
12
- content: {};
13
- };
10
+ slots: {};
14
11
  };
15
- export declare type DefinitionProps = typeof __propDef.props;
16
- export declare type DefinitionEvents = typeof __propDef.events;
17
- export declare type DefinitionSlots = typeof __propDef.slots;
12
+ export type DefinitionProps = typeof __propDef.props;
13
+ export type DefinitionEvents = typeof __propDef.events;
14
+ export type DefinitionSlots = typeof __propDef.slots;
18
15
  export default class Definition extends SvelteComponentTyped<DefinitionProps, DefinitionEvents, DefinitionSlots> {
19
16
  }
20
17
  export {};
@@ -1,45 +1,52 @@
1
- <script>import renderPosition from './renderPosition';
2
- import { storage } from '../../models/Firebase';
3
- import Format from './Format.svelte';
4
- import { getCaret, getEdition, isEditable } from "../page/Contexts";
1
+ <svelte:options immutable={true} />
2
+
3
+ <script>import { storage } from '../../models/Firebase';
4
+ import { isEditable, getCaret, getBook, } from '../page/Contexts';
5
+ import Figure from './Figure.svelte';
6
+ import { getContext } from 'svelte';
5
7
  export let node;
6
- export let placeholder = undefined;
8
+ export let placeholder = '';
9
+ export let imageOnly = false;
7
10
  $: url = node.getURL();
8
- $: position = node.getPosition();
9
11
  $: description = node.getDescription();
10
- $: credit = node.getCredit();
11
- $: caption = node.getCaption();
12
12
  let caret = getCaret();
13
+ let book = getBook();
13
14
  let editable = isEditable();
14
- let edition = getEdition();
15
+ // Bookish editor should have passed down a way to set the active editor.
16
+ let claimCaret = getContext('claimeditor');
15
17
  let dragging = false;
16
18
  let dragFeedback = undefined;
17
19
  let imageError = false;
20
+ $: if (node)
21
+ imageError = false;
18
22
  function handleDrop(event) {
19
23
  event.preventDefault();
20
24
  if (event.dataTransfer?.items) {
21
25
  // Get the files and convert them to file opens, then filter by allowed file extensions
22
26
  const imageFiles = [...event.dataTransfer.items]
23
- .filter(item => item.kind === 'file')
24
- .map(item => item.getAsFile())
25
- .filter(file => file !== null && /.*\.(jpg|jpeg|png)/i.test(file.name));
27
+ .filter((item) => item.kind === 'file')
28
+ .map((item) => item.getAsFile())
29
+ .filter((file) => file !== null && /.*\.(jpg|jpeg|png)/i.test(file.name));
26
30
  if (imageFiles.length === 0)
27
- dragFeedback = "Only JPEG or PNG images are allowed.";
31
+ dragFeedback = 'Only JPEG or PNG images are allowed.';
28
32
  else if (imageFiles.length > 1)
29
- dragFeedback = "Only one image at a time please!";
33
+ dragFeedback = 'Only one image at a time please!';
30
34
  else {
31
- dragFeedback = "Uploading…";
35
+ dragFeedback = 'Uploading…';
32
36
  const file = imageFiles[0];
33
- const media = $edition.getBook()?.getMedia();
37
+ const media = $book?.getMedia();
34
38
  if (file === null)
35
39
  return;
36
40
  if (storage === undefined)
37
41
  return;
38
42
  if (media === undefined)
39
43
  return;
40
- media.upload(file, (progress) => dragFeedback = `${progress}% done`, (error) => { dragFeedback = error; dragging = false; }, (url, thumbnails) => {
44
+ media.upload(file, (progress) => (dragFeedback = `${progress}% done`), (error) => {
45
+ dragFeedback = error;
46
+ dragging = false;
47
+ }, (url, thumbnails) => {
41
48
  // Upload completed successfully, now we can get the download URL
42
- $caret?.edit(node, node.withURLs(url, thumbnails).withDescription(""));
49
+ $caret?.edit(node, node.withURLs(url, thumbnails).withDescription(''));
43
50
  dragging = false;
44
51
  dragFeedback = undefined;
45
52
  });
@@ -49,7 +56,10 @@ function handleDrop(event) {
49
56
  function handleDrag(event) {
50
57
  event?.preventDefault();
51
58
  dragging = true;
52
- dragFeedback = "Drop to upload…";
59
+ dragFeedback = 'Drop to upload…';
60
+ // If we have a way to claim the caret, claim it, since we want to be able to make an edit with the active caret.
61
+ if (claimCaret)
62
+ claimCaret();
53
63
  }
54
64
  function handleDragLeave(event) {
55
65
  if (event.target !== event.currentTarget)
@@ -64,59 +74,137 @@ function handleLoad() {
64
74
  function handleError() {
65
75
  imageError = true;
66
76
  }
77
+ function handleClick() {
78
+ if (claimCaret)
79
+ claimCaret();
80
+ }
67
81
  </script>
68
82
 
69
- <div class={"bookish-figure " + renderPosition(position)} data-nodeid={node.nodeID}>
70
- {#if url.trim().length === 0 }
71
- {#if editable }
72
- <div
73
- class={`bookish-figure-unspecified ${dragging ? "bookish-figure-dragging" : ""}`}
74
- on:drop|preventDefault={handleDrop}
75
- on:dragover={handleDrag}
76
- on:dragleave={handleDragLeave}
77
- >{
78
- dragFeedback !== undefined ? dragFeedback :
79
- placeholder !== undefined ? placeholder :
80
- "Click or drag to choose or upload an image, or enter an image or video URL."
81
- }
82
- </div>
83
- {:else}
84
- <div class="bookish-figure-unspecified">No image or video specified</div>
85
- {/if}
86
- {:else}
87
- {#if url.includes("https://www.youtube.com") ||
88
- url.includes("https://youtu.be") ||
89
- url.includes("https://www.tiktok.com") ||
90
- url.includes("vimeo.com") }
91
- <div class="bookish-figure-embed">
92
- <iframe
83
+ {#if imageError}
84
+ <p class="bookish-figure-unspecified"
85
+ >{editable
86
+ ? 'Unable to load image. Is the URL correct? Are you offline?'
87
+ : 'Unable to load image'}</p
88
+ >
89
+ {:else}
90
+ <Figure
91
+ {node}
92
+ caption={imageOnly ? undefined : node.getCaption()}
93
+ credit={imageOnly ? undefined : node.getCredit()}
94
+ >
95
+ {#if url.trim().length === 0}
96
+ {#if editable}
97
+ <p
98
+ class={`bookish-figure-unspecified ${
99
+ dragging ? 'bookish-figure-dragging' : ''
100
+ }`}
101
+ on:click|preventDefault={handleClick}
102
+ tabIndex="0"
103
+ on:keydown={(event) =>
104
+ event.key === ' ' || event.key === 'Enter'
105
+ ? handleClick()
106
+ : undefined}
107
+ on:drop|preventDefault={handleDrop}
108
+ on:dragover={handleDrag}
109
+ on:dragleave={handleDragLeave}
110
+ >{dragFeedback !== undefined
111
+ ? dragFeedback
112
+ : placeholder.length > 0
113
+ ? placeholder
114
+ : 'Click or drag to choose or upload an image, or enter an image or video URL.'}
115
+ </p>
116
+ {:else}
117
+ <p class="bookish-figure-unspecified">Missing image or video</p>
118
+ {/if}
119
+ {:else if url.includes('https://www.youtube.com') || url.includes('https://youtu.be') || url.includes('https://www.tiktok.com') || url.includes('vimeo.com')}
120
+ <article class="bookish-figure-embed">
121
+ <iframe
93
122
  class="bookish-figure-frame"
94
- title="Embedded video content from streaming service"
95
- src={url}
96
- frameBorder="0"
97
- allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
98
- allowFullScreen>
99
- </iframe>
100
- </div>
123
+ title={description}
124
+ src={url}
125
+ frameBorder="0"
126
+ allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
127
+ allowFullScreen
128
+ />
129
+ </article>
101
130
  {:else}
102
- <img
103
- class={"bookish-figure-image"}
104
- src={url.startsWith("http") ? url : "images/" + url}
105
- srcset={node.hasSmallURL() ? `${node.getSmallURL()} 320w, ${url} 1024w` : undefined }
106
- sizes={node.hasSmallURL() ? "(min-width: 1024px) 1024px, 320px" : undefined }
131
+ <img
132
+ class={'bookish-figure-image'}
133
+ src={url.startsWith('http') ? url : 'images/' + url}
134
+ srcset={node.hasSmallURL()
135
+ ? `${node.getSmallURL()} 320w, ${url} 1024w`
136
+ : undefined}
137
+ sizes={node.hasSmallURL()
138
+ ? '(min-width: 1024px) 1024px, 320px'
139
+ : undefined}
107
140
  alt={description}
108
141
  on:load={handleLoad}
109
142
  on:error={handleError}
110
143
  />
111
144
  {/if}
112
- {/if}
113
- <div class="bookish-figure-caption">
114
- <div class="bookish-figure-credit">
115
- <Format node={credit} placeholder="credit" />
116
- </div>
117
- <Format node={caption} placeholder="caption" />
118
- </div>
119
- {#if imageError }
120
- <div class="bookish-figure-unspecified">{ editable ? "Unable to load image. Is the URL correct? Are you offline?" : "Unable to load image" }</div>
121
- {/if}
122
- </div>
145
+ </Figure>
146
+ {/if}
147
+
148
+ <style>
149
+ .bookish-figure {
150
+ margin-top: var(--bookish-paragraph-spacing);
151
+ margin-bottom: var(--bookish-paragraph-spacing);
152
+ width: 100%;
153
+ }
154
+
155
+ .bookish-figure-image {
156
+ border-radius: var(--bookish-roundedness);
157
+ max-width: 100%;
158
+ width: 100%;
159
+ height: auto;
160
+ margin-bottom: 0;
161
+ }
162
+
163
+ :global(.dark) .bookish-figure-image {
164
+ filter: brightness(50%);
165
+ }
166
+
167
+ .bookish-figure-embed {
168
+ position: relative;
169
+ display: block;
170
+ width: 100%;
171
+ padding: 0;
172
+ overflow: hidden;
173
+ border-radius: var(--bookish-roundedness);
174
+ }
175
+
176
+ .bookish-figure-embed::before {
177
+ /* Make the embed 16:9 */
178
+ padding-top: 56.25%;
179
+ display: block;
180
+ content: '';
181
+ }
182
+
183
+ .bookish-figure-unspecified {
184
+ width: 100%;
185
+ height: 8em;
186
+ font-family: var(--app-font);
187
+ background-color: var(--app-chrome-background);
188
+ color: var(--app-chrome-color);
189
+ display: flex;
190
+ flex-direction: column;
191
+ justify-content: center;
192
+ align-items: center;
193
+ }
194
+
195
+ .bookish-figure-dragging {
196
+ background-color: var(--app-interactive-color);
197
+ color: var(--app-font-color-inverted);
198
+ }
199
+
200
+ .bookish-figure-frame {
201
+ /* Fill the container */
202
+ position: absolute;
203
+ top: 0;
204
+ bottom: 0;
205
+ left: 0;
206
+ width: 100%;
207
+ height: 100%;
208
+ border: 0;
209
+ }
210
+ </style>
@@ -1,18 +1,19 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type EmbedNode from "../../models/chapter/EmbedNode";
2
+ import type EmbedNode from '../../models/chapter/EmbedNode';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  node: EmbedNode;
6
6
  placeholder?: string | undefined;
7
+ imageOnly?: boolean | undefined;
7
8
  };
8
9
  events: {
9
10
  [evt: string]: CustomEvent<any>;
10
11
  };
11
12
  slots: {};
12
13
  };
13
- export declare type EmbedProps = typeof __propDef.props;
14
- export declare type EmbedEvents = typeof __propDef.events;
15
- export declare type EmbedSlots = typeof __propDef.slots;
14
+ export type EmbedProps = typeof __propDef.props;
15
+ export type EmbedEvents = typeof __propDef.events;
16
+ export type EmbedSlots = typeof __propDef.slots;
16
17
  export default class Embed extends SvelteComponentTyped<EmbedProps, EmbedEvents, EmbedSlots> {
17
18
  }
18
19
  export {};
@@ -1,4 +1,9 @@
1
- <script>export let node;
1
+ <svelte:options immutable={true} />
2
+
3
+ <script>import Problem from './Problem.svelte';
4
+ export let node;
2
5
  </script>
3
6
 
4
- <span class="bookish-error" data-nodeid={node.nodeID}>Error: {node.getError()}</span>
7
+ <Problem
8
+ ><span data-nodeid={node.nodeID}>Error: {node.getError()}</span></Problem
9
+ >
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type ErrorNode from "../../models/chapter/ErrorNode";
2
+ import type ErrorNode from '../../models/chapter/ErrorNode';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  node: ErrorNode;
@@ -9,9 +9,9 @@ declare const __propDef: {
9
9
  };
10
10
  slots: {};
11
11
  };
12
- export declare type ErrorMessageProps = typeof __propDef.props;
13
- export declare type ErrorMessageEvents = typeof __propDef.events;
14
- export declare type ErrorMessageSlots = typeof __propDef.slots;
12
+ export type ErrorMessageProps = typeof __propDef.props;
13
+ export type ErrorMessageEvents = typeof __propDef.events;
14
+ export type ErrorMessageSlots = typeof __propDef.slots;
15
15
  export default class ErrorMessage extends SvelteComponentTyped<ErrorMessageProps, ErrorMessageEvents, ErrorMessageSlots> {
16
16
  }
17
17
  export {};
@@ -0,0 +1,2 @@
1
+ export default Prism;
2
+ import Prism from "prismjs";
@@ -0,0 +1,69 @@
1
+ import Prism from 'prismjs';
2
+
3
+ Prism.languages['python'] = {
4
+ comment: {
5
+ pattern: /(^|[^\\])#.*/,
6
+ lookbehind: true,
7
+ greedy: true,
8
+ },
9
+ 'string-interpolation': {
10
+ pattern:
11
+ /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
12
+ greedy: true,
13
+ inside: {
14
+ interpolation: {
15
+ // "{" <expression> <optional "!s", "!r", or "!a"> <optional ":" format specifier> "}"
16
+ pattern:
17
+ /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,
18
+ lookbehind: true,
19
+ inside: {
20
+ 'format-spec': {
21
+ pattern: /(:)[^:(){}]+(?=\}$)/,
22
+ lookbehind: true,
23
+ },
24
+ 'conversion-option': {
25
+ pattern: /![sra](?=[:}]$)/,
26
+ alias: 'punctuation',
27
+ },
28
+ rest: undefined,
29
+ },
30
+ },
31
+ string: /[\s\S]+/,
32
+ },
33
+ },
34
+ 'triple-quoted-string': {
35
+ pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,
36
+ greedy: true,
37
+ alias: 'string',
38
+ },
39
+ string: {
40
+ pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
41
+ greedy: true,
42
+ },
43
+ function: {
44
+ pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
45
+ lookbehind: true,
46
+ },
47
+ 'class-name': {
48
+ pattern: /(\bclass\s+)\w+/i,
49
+ lookbehind: true,
50
+ },
51
+ decorator: {
52
+ pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m,
53
+ lookbehind: true,
54
+ alias: ['annotation', 'punctuation'],
55
+ inside: {
56
+ punctuation: /\./,
57
+ },
58
+ },
59
+ keyword:
60
+ /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
61
+ builtin:
62
+ /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
63
+ boolean: /\b(?:False|None|True)\b/,
64
+ number: /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,
65
+ operator: /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
66
+ punctuation: /[{}[\];(),.:]/,
67
+ };
68
+
69
+ export default Prism;
@@ -0,0 +1,90 @@
1
+ <svelte:options immutable={true} />
2
+
3
+ <script>import Format from './Format.svelte';
4
+ import Positioned from './Positioned.svelte';
5
+ import { getCaret, isEditable } from '../page/Contexts';
6
+ export let node;
7
+ export let caption;
8
+ export let credit = undefined;
9
+ let editable = isEditable();
10
+ let caret = getCaret();
11
+ $: selected = $caret?.range?.start.node === node;
12
+ function focusFigure() {
13
+ if (!editable || $caret === undefined)
14
+ return;
15
+ // if (node instanceof EmbedNode) {
16
+ // return $caret.setCaret({
17
+ // start: { node, index: 0 },
18
+ // end: { node, index: 0 },
19
+ // });
20
+ // } else {
21
+ const firstCaret = node.getFirstCaret();
22
+ if (firstCaret)
23
+ $caret.setCaret({
24
+ start: firstCaret,
25
+ end: firstCaret,
26
+ });
27
+ // }
28
+ }
29
+ </script>
30
+
31
+ <Positioned position={node.getPosition()}>
32
+ <figure class="bookish-figure" data-nodeid={node.nodeID}>
33
+ <div
34
+ class:selected
35
+ on:mousedown={focusFigure}
36
+ on:keydown={(event) =>
37
+ event.key === ' ' || event.key === 'Enter'
38
+ ? focusFigure()
39
+ : null}
40
+ >
41
+ <slot />
42
+ </div>
43
+ {#if caption !== undefined}
44
+ <figcaption class="bookish-figure-caption">
45
+ {#if caption}
46
+ <Format node={caption} placeholder="caption" />
47
+ {/if}
48
+ {#if credit}
49
+ <aside class="bookish-figure-credit">
50
+ <Format node={credit} placeholder="credit" />
51
+ </aside>
52
+ {/if}
53
+ </figcaption>
54
+ {/if}
55
+ </figure>
56
+ </Positioned>
57
+
58
+ <style>
59
+ figure {
60
+ margin: 0;
61
+ margin-block-start: 0;
62
+ margin-block-end: 0;
63
+ margin-inline-start: 0;
64
+ margin-inline-end: 0;
65
+ }
66
+
67
+ .selected {
68
+ filter: opacity(50%);
69
+ }
70
+
71
+ .bookish-figure-caption {
72
+ text-align: center;
73
+ position: relative;
74
+ color: var(--bookish-muted-color);
75
+ line-height: var(--bookish-paragraph-line-height-tight);
76
+ font-size: var(--bookish-block-font-size);
77
+ margin-top: var(--bookish-block-padding);
78
+ margin-bottom: var(--bookish-block-padding);
79
+ }
80
+
81
+ .bookish-figure-credit {
82
+ display: block;
83
+ position: absolute;
84
+ top: -1em;
85
+ right: 0;
86
+ text-align: right;
87
+ font-style: italic;
88
+ font-size: var(--bookish-small-font-size);
89
+ }
90
+ </style>
@@ -0,0 +1,24 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ import type TableNode from '../../models/chapter/TableNode';
3
+ import type EmbedNode from '../../models/chapter/EmbedNode';
4
+ import type CodeNode from '../../models/chapter/CodeNode';
5
+ import type FormatNode from '../../models/chapter/FormatNode';
6
+ declare const __propDef: {
7
+ props: {
8
+ node: TableNode | EmbedNode | CodeNode;
9
+ caption: FormatNode | undefined;
10
+ credit?: FormatNode | undefined;
11
+ };
12
+ events: {
13
+ [evt: string]: CustomEvent<any>;
14
+ };
15
+ slots: {
16
+ default: {};
17
+ };
18
+ };
19
+ export type FigureProps = typeof __propDef.props;
20
+ export type FigureEvents = typeof __propDef.events;
21
+ export type FigureSlots = typeof __propDef.slots;
22
+ export default class Figure extends SvelteComponentTyped<FigureProps, FigureEvents, FigureSlots> {
23
+ }
24
+ export {};
@@ -1,31 +1,54 @@
1
+ <svelte:options immutable={true} />
2
+
1
3
  <script>import Atom from './Atom.svelte';
2
4
  import Marginal from './Marginal.svelte';
3
5
  import Format from './Format.svelte';
4
- import { getCaret, getChapter, getEdition } from "../page/Contexts";
5
- import { afterUpdate } from "svelte";
6
+ import { getChapter, getEdition, getCaret, } from '../page/Contexts';
7
+ import { afterUpdate } from 'svelte';
6
8
  export let node;
7
9
  $: content = node.getMeta();
8
10
  let caret = getCaret();
9
11
  let chapter = getChapter();
10
12
  let edition = getEdition();
11
13
  // What footnote number is this?
12
- $: chapterNode = $chapter?.chapter?.getAST();
13
- $: number = chapterNode?.getFootnotes().indexOf(node);
14
- $: letter = number === undefined ? undefined : $edition.getFootnoteSymbol(number);
15
- $: focused = chapterNode && $caret && $caret.range && $caret.range.start.node.hasAncestor(chapterNode, node);
14
+ $: ast =
15
+ $edition && $chapter ? $chapter.chapter.getAST($edition) : undefined;
16
+ $: number = ast?.getFootnotes().indexOf(node);
17
+ $: letter =
18
+ number === undefined ? undefined : $edition?.getFootnoteSymbol(number);
19
+ $: focused =
20
+ ast &&
21
+ $caret &&
22
+ $caret.range &&
23
+ $caret.range.start.node.hasAncestor(ast, node);
16
24
  // Position the marginals on every render.
17
25
  afterUpdate(() => $chapter?.layoutMarginals());
18
26
  </script>
19
27
 
20
- <Atom node={node}>
28
+ <Atom {node}>
21
29
  <span class={`bookish-footnote-link`} data-nodeid={node.nodeID}>
22
- <Marginal id={"footnote-" + number}>
23
- <sup slot="interactor" class="bookish-footnote-symbol">{letter}</sup>
30
+ <Marginal
31
+ {node}
32
+ id={'footnote-' + number}
33
+ label="footnote, press escape to edit"
34
+ >
35
+ <sup slot="interactor" class="bookish-footnote-symbol">{letter}</sup
36
+ >
24
37
  <!-- We prevent default on the span to prevent mouse events from bubbling up to the footnote symbol. This is key for two reasons:
25
38
  1) clicks on the footnote select the footnote atom node itself
26
39
  2) we want to be able to click on footnote text and we can't do that if the footnote sets the caret to the atom after clicks. -->
27
- <span slot="content" class={`bookish-footnote ${focused ? "bookish-footnote-focused" : ""}`} on:mousedown|preventDefault>
28
- <sup class="bookish-footnote-symbol">{letter}</sup><Format node={content} placeholder="footnote"/></span>
40
+ <span
41
+ slot="content"
42
+ class={`bookish-footnote ${
43
+ focused ? 'bookish-footnote-focused' : ''
44
+ }`}
45
+ on:mousedown|preventDefault
46
+ >
47
+ <sup class="bookish-footnote-symbol">{letter}</sup><Format
48
+ node={content}
49
+ placeholder="footnote"
50
+ /></span
51
+ >
29
52
  </Marginal>
30
53
  </span>
31
54
  </Atom>
@@ -34,4 +57,44 @@ afterUpdate(() => $chapter?.layoutMarginals());
34
57
  .bookish-footnote-focused {
35
58
  outline: 2px solid var(--bookish-highlight-color);
36
59
  }
37
- </style>
60
+
61
+ .bookish-footnote {
62
+ font-family: var(--bookish-paragraph-font-family);
63
+ font-size: var(--bookish-small-font-size);
64
+ font-style: normal;
65
+ color: var(--bookish-paragraph-color);
66
+ font-weight: 300;
67
+ font-size: var(--bookish-small-font-size);
68
+ line-height: 1.5em;
69
+ }
70
+
71
+ .bookish-footnote-symbol {
72
+ font-family: var(--bookish-paragraph-font-family);
73
+ font-weight: normal;
74
+ color: var(--bookish-link-color);
75
+ position: relative;
76
+ }
77
+
78
+ /* This enables us to layout the numbers and letters in a neat right-aligned floating grid. */
79
+ .bookish-footnote {
80
+ position: relative;
81
+ }
82
+
83
+ .bookish-footnote {
84
+ display: block;
85
+ line-height: var(--bookish-paragraph-line-height-tight);
86
+ margin-left: 1rem;
87
+ margin-bottom: 1rem;
88
+ text-align: left;
89
+ }
90
+
91
+ .bookish-footnote .bookish-footnote-symbol {
92
+ display: block;
93
+ float: left;
94
+ margin-top: -0.5em;
95
+ position: absolute;
96
+ left: -1.75em;
97
+ text-align: right;
98
+ width: 1.5em; /* Just enough space for 2 digits, a bit of a hack */
99
+ }
100
+ </style>