bookish-press 0.4.47 → 0.4.48

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 (533) hide show
  1. package/components/Auth.svelte +55 -0
  2. package/components/Auth.svelte.d.ts +16 -0
  3. package/{src/lib/components/Authentication.ts → components/Authentication.d.ts} +0 -2
  4. package/components/Authentication.js +1 -0
  5. package/{src/lib/components → components}/BookPreview.svelte +22 -27
  6. package/components/BookPreview.svelte.d.ts +18 -0
  7. package/{src/lib/components → components}/External.svelte +1 -2
  8. package/components/External.svelte.d.ts +18 -0
  9. package/components/Link.svelte +51 -0
  10. package/components/Link.svelte.d.ts +18 -0
  11. package/{src/lib/components → components}/app/BookList.svelte +3 -6
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/{src/lib/components → components}/app/Button.svelte +4 -5
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/{src/lib/components → components}/app/Feedback.svelte +7 -11
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/{src/lib/components → components}/app/Head.svelte +1 -2
  18. package/components/app/Head.svelte.d.ts +18 -0
  19. package/{src/lib/components → components}/app/Large.svelte +0 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/{src/lib/components → components}/app/Lead.svelte +0 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/{src/lib/components → components}/app/Link.svelte +3 -4
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/{src/lib/components → components}/app/Options.svelte +4 -5
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/{src/lib/components → components}/app/Paragraph.svelte +1 -2
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/{src/lib/components → components}/app/Section.svelte +0 -0
  30. package/components/app/Section.svelte.d.ts +27 -0
  31. package/{src/lib/components → components}/app/Table.svelte +0 -0
  32. package/components/app/Table.svelte.d.ts +27 -0
  33. package/{src/lib/components → components}/app/TextInput.svelte +9 -12
  34. package/components/app/TextInput.svelte.d.ts +22 -0
  35. package/{src/lib/components → components}/chapter/Atom.svelte +12 -18
  36. package/components/chapter/Atom.svelte.d.ts +19 -0
  37. package/components/chapter/Block.svelte +37 -0
  38. package/components/chapter/Block.svelte.d.ts +17 -0
  39. package/{src/lib/components → components}/chapter/Callout.svelte +3 -6
  40. package/components/chapter/Callout.svelte.d.ts +17 -0
  41. package/{src/lib/components → components}/chapter/CaptionedCode.svelte +13 -21
  42. package/components/chapter/CaptionedCode.svelte.d.ts +17 -0
  43. package/{src/lib/components → components}/chapter/ChapterBody.svelte +9 -13
  44. package/components/chapter/ChapterBody.svelte.d.ts +19 -0
  45. package/{src/lib/components → components}/chapter/Citations.svelte +33 -34
  46. package/components/chapter/Citations.svelte.d.ts +17 -0
  47. package/{src/lib/components → components}/chapter/Code.svelte +58 -62
  48. package/components/chapter/Code.svelte.d.ts +22 -0
  49. package/{src/lib/components → components}/chapter/Comment.svelte +18 -30
  50. package/components/chapter/Comment.svelte.d.ts +17 -0
  51. package/{src/lib/components → components}/chapter/Definition.svelte +17 -23
  52. package/components/chapter/Definition.svelte.d.ts +17 -0
  53. package/{src/lib/components → components}/chapter/Embed.svelte +77 -97
  54. package/components/chapter/Embed.svelte.d.ts +20 -0
  55. package/components/chapter/ErrorMessage.svelte +9 -0
  56. package/components/chapter/ErrorMessage.svelte.d.ts +17 -0
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/{src/lib/components → components}/chapter/ExtendedPrism.js +0 -0
  59. package/{src/lib/components → components}/chapter/Figure.svelte +26 -34
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/{src/lib/components → components}/chapter/Footnote.svelte +20 -32
  62. package/components/chapter/Footnote.svelte.d.ts +19 -0
  63. package/{src/lib/components → components}/chapter/Format.svelte +34 -39
  64. package/components/chapter/Format.svelte.d.ts +19 -0
  65. package/{src/lib/components → components}/chapter/InlineCode.svelte +5 -9
  66. package/components/chapter/InlineCode.svelte.d.ts +17 -0
  67. package/{src/lib/components → components}/chapter/Label.svelte +14 -23
  68. package/components/chapter/Label.svelte.d.ts +17 -0
  69. package/{src/lib/components → components}/chapter/Link.svelte +21 -27
  70. package/components/chapter/Link.svelte.d.ts +17 -0
  71. package/{src/lib/components → components}/chapter/List.svelte +3 -5
  72. package/components/chapter/List.svelte.d.ts +17 -0
  73. package/{src/lib/components → components}/chapter/Marginal.svelte +41 -54
  74. package/components/chapter/Marginal.svelte.d.ts +22 -0
  75. package/{src/lib/components → components}/chapter/Paragraph.svelte +20 -25
  76. package/components/chapter/Paragraph.svelte.d.ts +18 -0
  77. package/{src/lib/components → components}/chapter/Positioned.svelte +1 -4
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/{src/lib/components → components}/chapter/Problem.svelte +0 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +128 -0
  82. package/components/chapter/Python.svelte.d.ts +18 -0
  83. package/{src/lib/components → components}/chapter/Quote.svelte +5 -9
  84. package/components/chapter/Quote.svelte.d.ts +17 -0
  85. package/{src/lib/components → components}/chapter/Rule.svelte +1 -4
  86. package/components/chapter/Rule.svelte.d.ts +17 -0
  87. package/{src/lib/components → components}/chapter/Table.svelte +7 -11
  88. package/components/chapter/Table.svelte.d.ts +17 -0
  89. package/components/chapter/Text.svelte +87 -0
  90. package/components/chapter/Text.svelte.d.ts +18 -0
  91. package/components/editor/BookishEditor.svelte +884 -0
  92. package/components/editor/BookishEditor.svelte.d.ts +25 -0
  93. package/components/editor/CalloutEditor.svelte +10 -0
  94. package/components/editor/CalloutEditor.svelte.d.ts +17 -0
  95. package/{src/lib/components → components}/editor/CaptionedCodeEditor.svelte +6 -10
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +17 -0
  97. package/components/editor/CaretContext.d.ts +50 -0
  98. package/components/editor/CaretContext.js +1 -0
  99. package/{src/lib/components/editor/CaretState.ts → components/editor/CaretState.d.ts} +7 -6
  100. package/components/editor/CaretState.js +1 -0
  101. package/{src/lib/components/editor/CaretUtilities.ts → components/editor/CaretUtilities.d.ts} +0 -1
  102. package/components/editor/CaretUtilities.js +1 -0
  103. package/{src/lib/components → components}/editor/CaretView.svelte +20 -25
  104. package/components/editor/CaretView.svelte.d.ts +25 -0
  105. package/components/editor/CitationsEditor.svelte +53 -0
  106. package/components/editor/CitationsEditor.svelte.d.ts +17 -0
  107. package/{src/lib/components/editor/Clipboard.ts → components/editor/Clipboard.d.ts} +1 -2
  108. package/components/editor/Clipboard.js +1 -0
  109. package/{src/lib/components/editor/Command.ts → components/editor/Command.d.ts} +2 -8
  110. package/components/editor/Command.js +1 -0
  111. package/components/editor/Commands.d.ts +3 -0
  112. package/{src/lib/components/editor/Commands.ts → components/editor/Commands.js} +315 -730
  113. package/components/editor/ConfirmButton.svelte +49 -0
  114. package/components/editor/ConfirmButton.svelte.d.ts +19 -0
  115. package/components/editor/DefinitionEditor.svelte +36 -0
  116. package/components/editor/DefinitionEditor.svelte.d.ts +17 -0
  117. package/components/editor/EmbedEditor.svelte +137 -0
  118. package/components/editor/EmbedEditor.svelte.d.ts +17 -0
  119. package/{src/lib/components → components}/editor/Icon.svelte +1 -2
  120. package/components/editor/Icon.svelte.d.ts +16 -0
  121. package/{src/lib/components → components}/editor/ImageChooser.svelte +19 -24
  122. package/components/editor/ImageChooser.svelte.d.ts +18 -0
  123. package/components/editor/InlineCodeEditor.svelte +12 -0
  124. package/components/editor/InlineCodeEditor.svelte.d.ts +17 -0
  125. package/{src/lib/components → components}/editor/LabelEditor.svelte +9 -14
  126. package/components/editor/LabelEditor.svelte.d.ts +17 -0
  127. package/{src/lib/components → components}/editor/LanguageEditor.svelte +5 -8
  128. package/components/editor/LanguageEditor.svelte.d.ts +17 -0
  129. package/components/editor/LinkEditor.svelte +100 -0
  130. package/components/editor/LinkEditor.svelte.d.ts +17 -0
  131. package/{src/lib/components → components}/editor/Note.svelte +0 -0
  132. package/components/editor/Note.svelte.d.ts +27 -0
  133. package/{src/lib/components → components}/editor/Permissions.svelte +36 -43
  134. package/components/editor/Permissions.svelte.d.ts +20 -0
  135. package/components/editor/PositionEditor.svelte +17 -0
  136. package/components/editor/PositionEditor.svelte.d.ts +18 -0
  137. package/components/editor/QuoteEditor.svelte +10 -0
  138. package/components/editor/QuoteEditor.svelte.d.ts +17 -0
  139. package/{src/lib/components → components}/editor/Switch.svelte +11 -14
  140. package/components/editor/Switch.svelte.d.ts +20 -0
  141. package/components/editor/TableEditor.svelte +10 -0
  142. package/components/editor/TableEditor.svelte.d.ts +17 -0
  143. package/{src/lib/components → components}/editor/TextEditor.svelte +89 -101
  144. package/components/editor/TextEditor.svelte.d.ts +24 -0
  145. package/components/editor/Toggle.svelte +41 -0
  146. package/components/editor/Toggle.svelte.d.ts +19 -0
  147. package/components/editor/Toolbar.svelte +249 -0
  148. package/components/editor/Toolbar.svelte.d.ts +17 -0
  149. package/{src/lib/components → components}/editor/ToolbarGroup.svelte +3 -5
  150. package/components/editor/ToolbarGroup.svelte.d.ts +18 -0
  151. package/{src/lib/components → components}/editor/ToolbarSpacer.svelte +0 -0
  152. package/components/editor/ToolbarSpacer.svelte.d.ts +23 -0
  153. package/components/editor/URLEditor.svelte +13 -0
  154. package/components/editor/URLEditor.svelte.d.ts +18 -0
  155. package/{src/lib/components/editor/UndoState.ts → components/editor/UndoState.d.ts} +2 -3
  156. package/components/editor/UndoState.js +1 -0
  157. package/{src/lib/components → components}/editor/icons/annotate.svg +0 -0
  158. package/{src/lib/components → components}/editor/icons/block.svg +0 -0
  159. package/{src/lib/components → components}/editor/icons/bold.svg +0 -0
  160. package/{src/lib/components → components}/editor/icons/bullets.svg +0 -0
  161. package/{src/lib/components → components}/editor/icons/callout.svg +0 -0
  162. package/{src/lib/components → components}/editor/icons/citation.svg +0 -0
  163. package/{src/lib/components → components}/editor/icons/clear.svg +0 -0
  164. package/{src/lib/components → components}/editor/icons/clipboard.svg +0 -0
  165. package/{src/lib/components → components}/editor/icons/code.svg +0 -0
  166. package/{src/lib/components → components}/editor/icons/columnafter.svg +0 -0
  167. package/{src/lib/components → components}/editor/icons/columnbefore.svg +0 -0
  168. package/{src/lib/components → components}/editor/icons/comment.svg +0 -0
  169. package/{src/lib/components → components}/editor/icons/copy.svg +0 -0
  170. package/{src/lib/components → components}/editor/icons/cut.svg +0 -0
  171. package/{src/lib/components → components}/editor/icons/define.svg +0 -0
  172. package/{src/lib/components → components}/editor/icons/deletecolumn.svg +0 -0
  173. package/{src/lib/components → components}/editor/icons/deleterow.svg +0 -0
  174. package/{src/lib/components → components}/editor/icons/footnote.svg +0 -0
  175. package/{src/lib/components → components}/editor/icons/header1.svg +0 -0
  176. package/{src/lib/components → components}/editor/icons/header2.svg +0 -0
  177. package/{src/lib/components → components}/editor/icons/header3.svg +0 -0
  178. package/{src/lib/components → components}/editor/icons/home.svg +0 -0
  179. package/{src/lib/components → components}/editor/icons/indent.svg +0 -0
  180. package/{src/lib/components → components}/editor/icons/italic.svg +0 -0
  181. package/{src/lib/components → components}/editor/icons/label.svg +0 -0
  182. package/{src/lib/components → components}/editor/icons/left.svg +0 -0
  183. package/{src/lib/components → components}/editor/icons/level.svg +0 -0
  184. package/{src/lib/components → components}/editor/icons/link.svg +0 -0
  185. package/{src/lib/components → components}/editor/icons/list.svg +0 -0
  186. package/{src/lib/components → components}/editor/icons/media.svg +0 -0
  187. package/{src/lib/components → components}/editor/icons/middle.svg +0 -0
  188. package/{src/lib/components → components}/editor/icons/numbers.svg +0 -0
  189. package/{src/lib/components → components}/editor/icons/paragraph.svg +0 -0
  190. package/{src/lib/components → components}/editor/icons/paste.svg +0 -0
  191. package/{src/lib/components → components}/editor/icons/quote.svg +0 -0
  192. package/{src/lib/components → components}/editor/icons/redo.svg +0 -0
  193. package/{src/lib/components → components}/editor/icons/right.svg +0 -0
  194. package/{src/lib/components → components}/editor/icons/rowabove.svg +0 -0
  195. package/{src/lib/components → components}/editor/icons/rowbelow.svg +0 -0
  196. package/{src/lib/components → components}/editor/icons/rule.svg +0 -0
  197. package/{src/lib/components → components}/editor/icons/sub.svg +0 -0
  198. package/{src/lib/components → components}/editor/icons/super.svg +0 -0
  199. package/{src/lib/components → components}/editor/icons/table.svg +0 -0
  200. package/{src/lib/components → components}/editor/icons/text.svg +0 -0
  201. package/{src/lib/components → components}/editor/icons/time.svg +0 -0
  202. package/{src/lib/components → components}/editor/icons/undo.svg +0 -0
  203. package/{src/lib/components → components}/editor/icons/unindent.svg +0 -0
  204. package/{src/lib/components → components}/editor/icons/unlink.svg +0 -0
  205. package/{src/lib/components → components}/page/Acknowledgements.svelte +10 -19
  206. package/components/page/Acknowledgements.svelte.d.ts +14 -0
  207. package/components/page/Authors.svelte +85 -0
  208. package/components/page/Authors.svelte.d.ts +21 -0
  209. package/components/page/BookLoader.svelte +59 -0
  210. package/components/page/BookLoader.svelte.d.ts +16 -0
  211. package/components/page/BulkReferenceEditor.svelte +63 -0
  212. package/components/page/BulkReferenceEditor.svelte.d.ts +14 -0
  213. package/components/page/Chapter.svelte +392 -0
  214. package/components/page/Chapter.svelte.d.ts +18 -0
  215. package/components/page/ChapterContext.d.ts +10 -0
  216. package/components/page/ChapterContext.js +1 -0
  217. package/{src/lib/components → components}/page/ChapterNumber.svelte +0 -0
  218. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  219. package/{src/lib/components → components}/page/ChapterTitle.svelte +2 -4
  220. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  221. package/components/page/Contexts.d.ts +47 -0
  222. package/components/page/Contexts.js +133 -0
  223. package/{src/lib/components → components}/page/DefinitionView.svelte +37 -52
  224. package/components/page/DefinitionView.svelte.d.ts +18 -0
  225. package/{src/lib/components → components}/page/Description.svelte +7 -15
  226. package/components/page/Description.svelte.d.ts +14 -0
  227. package/components/page/Edition.svelte +161 -0
  228. package/components/page/Edition.svelte.d.ts +20 -0
  229. package/components/page/EditionLoader.svelte +99 -0
  230. package/components/page/EditionLoader.svelte.d.ts +18 -0
  231. package/{src/lib/components → components}/page/Editions.svelte +18 -22
  232. package/components/page/Editions.svelte.d.ts +14 -0
  233. package/{src/lib/components → components}/page/Glossary.svelte +28 -33
  234. package/components/page/Glossary.svelte.d.ts +14 -0
  235. package/{src/lib/components → components}/page/Header.svelte +52 -59
  236. package/components/page/Header.svelte.d.ts +29 -0
  237. package/{src/lib/components → components}/page/Index.svelte +41 -48
  238. package/components/page/Index.svelte.d.ts +14 -0
  239. package/{src/lib/components → components}/page/Instructions.svelte +1 -2
  240. package/components/page/Instructions.svelte.d.ts +18 -0
  241. package/{src/lib/components → components}/page/License.svelte +9 -17
  242. package/components/page/License.svelte.d.ts +14 -0
  243. package/{src/lib/components → components}/page/Loading.svelte +0 -0
  244. package/components/page/Loading.svelte.d.ts +23 -0
  245. package/{src/lib/components → components}/page/Media.svelte +27 -44
  246. package/components/page/Media.svelte.d.ts +14 -0
  247. package/{src/lib/components → components}/page/MediaPreview.svelte +2 -3
  248. package/components/page/MediaPreview.svelte.d.ts +19 -0
  249. package/{src/lib/components → components}/page/Muted.svelte +0 -0
  250. package/components/page/Muted.svelte.d.ts +27 -0
  251. package/{src/lib/components → components}/page/Outline.svelte +110 -140
  252. package/components/page/Outline.svelte.d.ts +19 -0
  253. package/components/page/Page.svelte +84 -0
  254. package/components/page/Page.svelte.d.ts +19 -0
  255. package/{src/lib/components → components}/page/PageHeader.svelte +1 -2
  256. package/components/page/PageHeader.svelte.d.ts +18 -0
  257. package/{src/lib/components → components}/page/PageParagraph.svelte +0 -0
  258. package/components/page/PageParagraph.svelte.d.ts +27 -0
  259. package/components/page/PossibleChapter.svelte +14 -0
  260. package/components/page/PossibleChapter.svelte.d.ts +14 -0
  261. package/components/page/PossibleReference.svelte +11 -0
  262. package/components/page/PossibleReference.svelte.d.ts +18 -0
  263. package/{src/lib/components → components}/page/Print.svelte +3 -5
  264. package/components/page/Print.svelte.d.ts +14 -0
  265. package/{src/lib/components → components}/page/Publish.svelte +52 -59
  266. package/components/page/Publish.svelte.d.ts +14 -0
  267. package/{src/lib/components → components}/page/Reference.svelte +30 -39
  268. package/components/page/Reference.svelte.d.ts +17 -0
  269. package/{src/lib/components → components}/page/References.svelte +14 -18
  270. package/components/page/References.svelte.d.ts +14 -0
  271. package/{src/lib/components → components}/page/Rows.svelte +0 -0
  272. package/components/page/Rows.svelte.d.ts +27 -0
  273. package/components/page/Search.svelte +133 -0
  274. package/components/page/Search.svelte.d.ts +14 -0
  275. package/{src/lib/components → components}/page/Status.svelte +3 -5
  276. package/components/page/Status.svelte.d.ts +14 -0
  277. package/{src/lib/components → components}/page/SubdomainEditor.svelte +13 -16
  278. package/components/page/SubdomainEditor.svelte.d.ts +14 -0
  279. package/{src/lib/components → components}/page/TableOfContents.svelte +68 -79
  280. package/components/page/TableOfContents.svelte.d.ts +14 -0
  281. package/components/page/TableOfContentsImage.svelte +18 -0
  282. package/components/page/TableOfContentsImage.svelte.d.ts +16 -0
  283. package/{src/lib/components → components}/page/TableOfContentsRow.svelte +24 -34
  284. package/components/page/TableOfContentsRow.svelte.d.ts +24 -0
  285. package/{src/lib/components → components}/page/ThemeEditor.svelte +33 -44
  286. package/components/page/ThemeEditor.svelte.d.ts +14 -0
  287. package/{src/lib/components → components}/page/ThemeEditorPreview.svelte +12 -21
  288. package/components/page/ThemeEditorPreview.svelte.d.ts +17 -0
  289. package/components/page/ThemeSetEditor.svelte +19 -0
  290. package/components/page/ThemeSetEditor.svelte.d.ts +18 -0
  291. package/{src/lib/components → components}/page/ThemeVariableEditor.svelte +14 -18
  292. package/components/page/ThemeVariableEditor.svelte.d.ts +18 -0
  293. package/{src/lib/components → components}/page/Title.svelte +0 -0
  294. package/components/page/Title.svelte.d.ts +27 -0
  295. package/{src/lib/components → components}/page/Unknown.svelte +8 -10
  296. package/components/page/Unknown.svelte.d.ts +16 -0
  297. package/components/page/margins.d.ts +2 -0
  298. package/{src/lib/components/page/margins.ts → components/page/margins.js} +46 -79
  299. package/index.d.ts +15 -0
  300. package/{src/lib/index.js → index.js} +0 -0
  301. package/models/CRUD.d.ts +27 -0
  302. package/models/CRUD.js +262 -0
  303. package/models/Firebase.d.ts +5 -0
  304. package/{src/lib/models/Firebase.ts → models/Firebase.js} +16 -26
  305. package/models/book/Book.d.ts +61 -0
  306. package/models/book/Book.js +135 -0
  307. package/models/book/BookMedia.d.ts +23 -0
  308. package/models/book/BookMedia.js +108 -0
  309. package/models/book/BookSaveStatus.d.ts +7 -0
  310. package/models/book/BookSaveStatus.js +8 -0
  311. package/models/book/Chapter.d.ts +81 -0
  312. package/models/book/Chapter.js +212 -0
  313. package/models/book/ChapterID.d.ts +10 -0
  314. package/{src/lib/models/book/ChapterID.ts → models/book/ChapterID.js} +0 -1
  315. package/models/book/Definition.d.ts +6 -0
  316. package/models/book/Definition.js +1 -0
  317. package/models/book/Edition.d.ts +139 -0
  318. package/models/book/Edition.js +620 -0
  319. package/models/book/Reference.d.ts +24 -0
  320. package/models/book/Reference.js +78 -0
  321. package/models/book/Schema.d.ts +174 -0
  322. package/{src/lib/models/book/Schema.ts → models/book/Schema.js} +0 -1
  323. package/models/book/Theme.d.ts +113 -0
  324. package/{src/lib/models/book/Theme.ts → models/book/Theme.js} +5 -109
  325. package/{src/lib/models/book/ThemeColors.ts → models/book/ThemeColors.d.ts} +0 -6
  326. package/models/book/ThemeColors.js +1 -0
  327. package/models/book/Words.d.ts +2 -0
  328. package/{src/lib/models/book/Words.ts → models/book/Words.js} +0 -1
  329. package/models/chapter/AtomNode.d.ts +18 -0
  330. package/{src/lib/models/chapter/AtomNode.ts → models/chapter/AtomNode.js} +10 -30
  331. package/models/chapter/BlockNode.d.ts +20 -0
  332. package/{src/lib/models/chapter/BlockNode.ts → models/chapter/BlockNode.js} +47 -80
  333. package/models/chapter/BlocksNode.d.ts +50 -0
  334. package/{src/lib/models/chapter/BlocksNode.ts → models/chapter/BlocksNode.js} +359 -571
  335. package/models/chapter/BlocksNode.test.d.ts +1 -0
  336. package/models/chapter/BlocksNode.test.js +568 -0
  337. package/{src/lib/models/chapter/Bookkeeping.ts → models/chapter/Bookkeeping.d.ts} +0 -0
  338. package/models/chapter/Bookkeeping.js +1 -0
  339. package/models/chapter/CalloutNode.d.ts +17 -0
  340. package/models/chapter/CalloutNode.js +58 -0
  341. package/models/chapter/Caret.d.ts +23 -0
  342. package/{src/lib/models/chapter/Caret.ts → models/chapter/Caret.js} +26 -50
  343. package/models/chapter/ChapterNode.d.ts +34 -0
  344. package/models/chapter/ChapterNode.js +117 -0
  345. package/models/chapter/CitationsNode.d.ts +16 -0
  346. package/{src/lib/models/chapter/CitationsNode.ts → models/chapter/CitationsNode.js} +10 -17
  347. package/models/chapter/CodeNode.d.ts +35 -0
  348. package/{src/lib/models/chapter/CodeNode.ts → models/chapter/CodeNode.js} +62 -125
  349. package/models/chapter/CommentNode.d.ts +18 -0
  350. package/models/chapter/CommentNode.js +48 -0
  351. package/models/chapter/DefinitionNode.d.ts +12 -0
  352. package/{src/lib/models/chapter/DefinitionNode.ts → models/chapter/DefinitionNode.js} +8 -14
  353. package/models/chapter/Edit.d.ts +7 -0
  354. package/models/chapter/Edit.js +1 -0
  355. package/models/chapter/EmbedNode.d.ts +45 -0
  356. package/models/chapter/EmbedNode.js +168 -0
  357. package/models/chapter/ErrorNode.d.ts +17 -0
  358. package/{src/lib/models/chapter/ErrorNode.ts → models/chapter/ErrorNode.js} +8 -15
  359. package/models/chapter/FootnoteNode.d.ts +18 -0
  360. package/models/chapter/FootnoteNode.js +47 -0
  361. package/models/chapter/FormatNode.d.ts +60 -0
  362. package/{src/lib/models/chapter/FormatNode.ts → models/chapter/FormatNode.js} +262 -443
  363. package/models/chapter/FormatNode.test.d.ts +1 -0
  364. package/models/chapter/FormatNode.test.js +96 -0
  365. package/models/chapter/InlineCodeNode.d.ts +12 -0
  366. package/{src/lib/models/chapter/InlineCodeNode.ts → models/chapter/InlineCodeNode.js} +9 -17
  367. package/models/chapter/LabelNode.d.ts +17 -0
  368. package/{src/lib/models/chapter/LabelNode.ts → models/chapter/LabelNode.js} +10 -26
  369. package/models/chapter/LinkNode.d.ts +12 -0
  370. package/{src/lib/models/chapter/LinkNode.ts → models/chapter/LinkNode.js} +7 -12
  371. package/models/chapter/ListNode.d.ts +51 -0
  372. package/{src/lib/models/chapter/ListNode.ts → models/chapter/ListNode.js} +200 -277
  373. package/models/chapter/ListNode.test.d.ts +1 -0
  374. package/{src/lib/models/chapter/ListNode.test.ts → models/chapter/ListNode.test.js} +20 -57
  375. package/models/chapter/MetadataNode.d.ts +17 -0
  376. package/models/chapter/MetadataNode.js +32 -0
  377. package/models/chapter/Node.d.ts +38 -0
  378. package/{src/lib/models/chapter/Node.ts → models/chapter/Node.js} +71 -155
  379. package/models/chapter/Node.test.d.ts +1 -0
  380. package/{src/lib/models → models}/chapter/Node.test.js +0 -0
  381. package/models/chapter/ParagraphNode.d.ts +33 -0
  382. package/{src/lib/models/chapter/ParagraphNode.ts → models/chapter/ParagraphNode.js} +58 -95
  383. package/models/chapter/ParagraphNode.test.d.ts +1 -0
  384. package/models/chapter/ParagraphNode.test.js +30 -0
  385. package/models/chapter/Parser.d.ts +75 -0
  386. package/{src/lib/models/chapter/Parser.ts → models/chapter/Parser.js} +184 -369
  387. package/models/chapter/Parser.test.d.ts +1 -0
  388. package/{src/lib/models/chapter/Parser.test.ts → models/chapter/Parser.test.js} +0 -7
  389. package/{src/lib/models/chapter/Position.ts → models/chapter/Position.d.ts} +0 -0
  390. package/models/chapter/Position.js +1 -0
  391. package/models/chapter/QuoteNode.d.ts +25 -0
  392. package/models/chapter/QuoteNode.js +99 -0
  393. package/{src/lib/models/chapter/RootNode.ts → models/chapter/RootNode.d.ts} +0 -2
  394. package/models/chapter/RootNode.js +1 -0
  395. package/models/chapter/RuleNode.d.ts +15 -0
  396. package/{src/lib/models/chapter/RuleNode.ts → models/chapter/RuleNode.js} +6 -9
  397. package/models/chapter/TableNode.d.ts +37 -0
  398. package/{src/lib/models/chapter/TableNode.ts → models/chapter/TableNode.js} +82 -141
  399. package/models/chapter/TableNode.test.d.ts +1 -0
  400. package/{src/lib/models/chapter/TableNode.test.ts → models/chapter/TableNode.test.js} +10 -27
  401. package/models/chapter/TextNode.d.ts +36 -0
  402. package/{src/lib/models/chapter/TextNode.ts → models/chapter/TextNode.js} +65 -117
  403. package/models/chapter/TextNode.test.d.ts +1 -0
  404. package/{src/lib/models/chapter/TextNode.test.ts → models/chapter/TextNode.test.js} +0 -2
  405. package/package.json +270 -53
  406. package/util/getSubdomain.d.ts +3 -0
  407. package/{src/lib/util/getSubdomain.ts → util/getSubdomain.js} +8 -14
  408. package/util/isMobile.d.ts +2 -0
  409. package/{src/lib/util/isMobile.ts → util/isMobile.js} +0 -1
  410. package/util/mineReference.d.ts +4 -0
  411. package/{src/lib/util/mineReference.ts → util/mineReference.js} +25 -45
  412. package/util/scrollToEyeLevel.d.ts +2 -0
  413. package/{src/lib/util/scrollToEyeLevel.ts → util/scrollToEyeLevel.js} +2 -4
  414. package/.env.example +0 -8
  415. package/.firebaserc +0 -8
  416. package/.prettierignore +0 -8
  417. package/.prettierrc.json +0 -5
  418. package/_update-notifier-last-checked +0 -0
  419. package/firebase.json +0 -46
  420. package/firestore.indexes.json +0 -4
  421. package/firestore.rules +0 -59
  422. package/functions/.eslintrc.js +0 -28
  423. package/functions/package-lock.json +0 -12595
  424. package/functions/package.json +0 -43
  425. package/functions/src/index.ts +0 -345
  426. package/functions/tsconfig.dev.json +0 -3
  427. package/functions/tsconfig.json +0 -15
  428. package/scripts/claims.cjs +0 -99
  429. package/src/app.d.ts +0 -9
  430. package/src/app.html +0 -24
  431. package/src/lib/components/Auth.svelte +0 -65
  432. package/src/lib/components/Link.svelte +0 -58
  433. package/src/lib/components/chapter/Block.svelte +0 -42
  434. package/src/lib/components/chapter/ErrorMessage.svelte +0 -12
  435. package/src/lib/components/chapter/Python.svelte +0 -144
  436. package/src/lib/components/chapter/Text.svelte +0 -109
  437. package/src/lib/components/editor/BookishEditor.svelte +0 -1101
  438. package/src/lib/components/editor/CalloutEditor.svelte +0 -14
  439. package/src/lib/components/editor/CaretContext.ts +0 -55
  440. package/src/lib/components/editor/CitationsEditor.svelte +0 -64
  441. package/src/lib/components/editor/ConfirmButton.svelte +0 -51
  442. package/src/lib/components/editor/DefinitionEditor.svelte +0 -44
  443. package/src/lib/components/editor/EmbedEditor.svelte +0 -152
  444. package/src/lib/components/editor/InlineCodeEditor.svelte +0 -16
  445. package/src/lib/components/editor/LinkEditor.svelte +0 -110
  446. package/src/lib/components/editor/PositionEditor.svelte +0 -21
  447. package/src/lib/components/editor/QuoteEditor.svelte +0 -14
  448. package/src/lib/components/editor/TableEditor.svelte +0 -14
  449. package/src/lib/components/editor/Toggle.svelte +0 -47
  450. package/src/lib/components/editor/Toolbar.svelte +0 -297
  451. package/src/lib/components/editor/URLEditor.svelte +0 -15
  452. package/src/lib/components/page/Authors.svelte +0 -92
  453. package/src/lib/components/page/BookLoader.svelte +0 -77
  454. package/src/lib/components/page/BulkReferenceEditor.svelte +0 -86
  455. package/src/lib/components/page/Chapter.svelte +0 -449
  456. package/src/lib/components/page/ChapterContext.ts +0 -13
  457. package/src/lib/components/page/Contexts.ts +0 -176
  458. package/src/lib/components/page/Edition.svelte +0 -189
  459. package/src/lib/components/page/EditionLoader.svelte +0 -123
  460. package/src/lib/components/page/Page.svelte +0 -94
  461. package/src/lib/components/page/PossibleChapter.svelte +0 -16
  462. package/src/lib/components/page/PossibleReference.svelte +0 -14
  463. package/src/lib/components/page/Search.svelte +0 -153
  464. package/src/lib/components/page/TableOfContentsImage.svelte +0 -22
  465. package/src/lib/components/page/ThemeSetEditor.svelte +0 -21
  466. package/src/lib/models/CRUD.ts +0 -469
  467. package/src/lib/models/book/Book.ts +0 -283
  468. package/src/lib/models/book/BookMedia.ts +0 -182
  469. package/src/lib/models/book/BookSaveStatus.ts +0 -8
  470. package/src/lib/models/book/Chapter.ts +0 -462
  471. package/src/lib/models/book/Definition.ts +0 -2
  472. package/src/lib/models/book/Edition.ts +0 -1216
  473. package/src/lib/models/book/Reference.ts +0 -171
  474. package/src/lib/models/chapter/BlocksNode.test.ts +0 -867
  475. package/src/lib/models/chapter/CalloutNode.ts +0 -79
  476. package/src/lib/models/chapter/ChapterNode.ts +0 -169
  477. package/src/lib/models/chapter/CommentNode.ts +0 -61
  478. package/src/lib/models/chapter/Edit.ts +0 -6
  479. package/src/lib/models/chapter/EmbedNode.ts +0 -257
  480. package/src/lib/models/chapter/FootnoteNode.ts +0 -59
  481. package/src/lib/models/chapter/FormatNode.test.ts +0 -137
  482. package/src/lib/models/chapter/MetadataNode.ts +0 -44
  483. package/src/lib/models/chapter/ParagraphNode.test.ts +0 -54
  484. package/src/lib/models/chapter/QuoteNode.ts +0 -135
  485. package/src/params/edition.ts +0 -3
  486. package/src/routes/+error.svelte +0 -12
  487. package/src/routes/+layout.svelte +0 -241
  488. package/src/routes/+page.svelte +0 -43
  489. package/src/routes/Footer.svelte +0 -0
  490. package/src/routes/Header.svelte +0 -112
  491. package/src/routes/[bookid]/+layout.svelte +0 -5
  492. package/src/routes/[bookid]/[[editionid=edition]]/+error.svelte +0 -14
  493. package/src/routes/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  494. package/src/routes/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  495. package/src/routes/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  496. package/src/routes/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  497. package/src/routes/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  498. package/src/routes/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  499. package/src/routes/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  500. package/src/routes/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  501. package/src/routes/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  502. package/src/routes/[bookid]/editions/+page.svelte +0 -20
  503. package/src/routes/about/+page.svelte +0 -102
  504. package/src/routes/confirm/+page.svelte +0 -62
  505. package/src/routes/email/+page.svelte +0 -99
  506. package/src/routes/login/+page.svelte +0 -66
  507. package/src/routes/read/+page.svelte +0 -38
  508. package/src/routes/write/+error.svelte +0 -10
  509. package/src/routes/write/+layout.svelte +0 -11
  510. package/src/routes/write/+page.svelte +0 -114
  511. package/src/routes/write/[bookid]/+layout.svelte +0 -5
  512. package/src/routes/write/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  513. package/src/routes/write/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  514. package/src/routes/write/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  515. package/src/routes/write/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  516. package/src/routes/write/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  517. package/src/routes/write/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  518. package/src/routes/write/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  519. package/src/routes/write/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  520. package/src/routes/write/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  521. package/src/routes/write/[bookid]/[[editionid=edition]]/theme/+page.svelte +0 -5
  522. package/src/routes/write/[bookid]/[[editionid=edition]]/unknown/+page.svelte +0 -5
  523. package/src/routes/write/[bookid]/editions/+page.svelte +0 -20
  524. package/src/vite-env.d.ts +0 -1
  525. package/static/icons/favicon.png +0 -0
  526. package/static/icons/icon.png +0 -0
  527. package/static/icons/ios-icon.png +0 -0
  528. package/storage.rules +0 -9
  529. package/svelte.config.js +0 -19
  530. package/tsconfig.json +0 -18
  531. package/tsconfig.node.json +0 -9
  532. package/vite.config.ts +0 -8
  533. package/vite.reader.config.ts +0 -32
@@ -1,14 +0,0 @@
1
- <script lang="ts">
2
- import type CalloutNode from '$lib/models/chapter/CalloutNode';
3
- import PositionEditor from './PositionEditor.svelte';
4
- import { getCaret } from '$lib/components/page/Contexts';
5
-
6
- export let callout: CalloutNode;
7
-
8
- let caret = getCaret();
9
- </script>
10
-
11
- <PositionEditor
12
- value={callout.getPosition()}
13
- edit={(position) => $caret?.edit(callout, callout.withPosition(position))}
14
- />
@@ -1,55 +0,0 @@
1
- import type Caret from '$lib/models/chapter/Caret';
2
- import type { CaretRange } from '$lib/models/chapter/Caret';
3
- import type ParagraphNode from '$lib/models/chapter/ParagraphNode';
4
- import type AtomNode from '$lib/models/chapter/AtomNode';
5
- import type FormatNode from '$lib/models/chapter/FormatNode';
6
- import type BlocksNode from '$lib/models/chapter/BlocksNode';
7
- import type ListNode from '$lib/models/chapter/ListNode';
8
- import type TableNode from '$lib/models/chapter/TableNode';
9
- import type MetadataNode from '$lib/models/chapter/MetadataNode';
10
- import type RootNode from '$lib/models/chapter/RootNode';
11
- import type Edit from '$lib/models/chapter/Edit';
12
- import type CodeNode from '$lib/models/chapter/CodeNode';
13
- import type BlockNode from '$lib/models/chapter/BlockNode';
14
- import type Clipboard from './Clipboard';
15
- import type UndoState from './UndoState';
16
- import type Node from '$lib/models/chapter/Node';
17
-
18
- export type PasteContent = { plain: string | undefined };
19
-
20
- type CaretContext = {
21
- chapter: boolean;
22
- range: CaretRange;
23
- start: Caret;
24
- end: Caret;
25
- isSelection: boolean;
26
- root: RootNode;
27
- blocks: BlocksNode | undefined;
28
- paragraph: ParagraphNode | undefined;
29
- block: BlockNode | undefined;
30
- includesList: boolean;
31
- code: CodeNode | undefined;
32
- list: ListNode | undefined;
33
- table: TableNode | undefined;
34
- format: FormatNode | undefined;
35
- atom: AtomNode<any> | undefined;
36
- meta: MetadataNode<any> | undefined;
37
- startIsText: boolean;
38
- endIsText: boolean;
39
- startIsTextOrAtom: boolean;
40
- endIsTextOrAtom: boolean;
41
- atParagraphStart: boolean;
42
- undoStack: UndoState[];
43
- undoPosition: number;
44
- undo: () => Edit;
45
- redo: () => Edit;
46
- clipboard: Clipboard;
47
- handleCopy: (node: Node) => void;
48
- handlePaste: (
49
- context: CaretContext,
50
- text: PasteContent | Node,
51
- save: boolean
52
- ) => Edit;
53
- };
54
-
55
- export default CaretContext;
@@ -1,64 +0,0 @@
1
- <script lang="ts">
2
- import type CitationsNode from '$lib/models/chapter/CitationsNode';
3
- import Note from './Note.svelte';
4
- import Options from '../app/Options.svelte';
5
- import Button from '../app/Button.svelte';
6
- import { getCaret, getEdition } from '$lib/components/page/Contexts';
7
-
8
- export let citations: CitationsNode;
9
-
10
- let caret = getCaret();
11
- let edition = getEdition();
12
-
13
- let value = '';
14
-
15
- function handleSelection(selection: string) {
16
- if (selection.length > 0)
17
- update(new Set([...citations.getMeta(), selection]));
18
- }
19
-
20
- function removeSelection(citationID: string) {
21
- let ids = new Set(citations.getMeta());
22
- ids.delete(citationID);
23
- update(ids);
24
- }
25
-
26
- function update(set: Set<string>) {
27
- $caret?.edit(citations, citations.withMeta(Array.from(set)));
28
- }
29
-
30
- $: uncited =
31
- $edition === undefined
32
- ? []
33
- : Object.keys($edition.getReferences())
34
- .filter(
35
- (citationID) => !citations.getMeta().includes(citationID)
36
- )
37
- .sort();
38
- let options: [string, string][] = [];
39
- $: {
40
- options = [];
41
- options.push([
42
- uncited.length > 0 ? 'Choose references' : 'No uncited references',
43
- '',
44
- ]);
45
- for (const citationID of uncited)
46
- options.push([citationID, citationID]);
47
- }
48
- </script>
49
-
50
- <Options
51
- {options}
52
- bind:value
53
- changed={handleSelection}
54
- label="choose citations"
55
- />
56
- {#each citations.getMeta() as citationID}
57
- {citationID}
58
- <Button
59
- tooltip="Remove citation"
60
- command={() => removeSelection(citationID)}>&times; citation</Button
61
- >
62
- {:else}
63
- <Note>&mdash;</Note>
64
- {/each}
@@ -1,51 +0,0 @@
1
- <script lang="ts">
2
- import { onMount } from 'svelte';
3
- import Button from '../app/Button.svelte';
4
-
5
- export let commandLabel: string;
6
- export let tooltip: string;
7
- export let confirmLabel: string;
8
- export let command: () => Promise<void> | void;
9
-
10
- let confirming = false;
11
- let executing = false;
12
- let timeoutID: NodeJS.Timer | undefined = undefined;
13
- let isMounted = false;
14
-
15
- onMount(() => {
16
- isMounted = true;
17
- return () => (isMounted = false);
18
- });
19
-
20
- function execute() {
21
- if (!confirming && !executing) {
22
- confirming = true;
23
- timeoutID = setTimeout(() => {
24
- if (isMounted) confirming = false;
25
- }, 2000);
26
- } else if (confirming) {
27
- command()?.finally(() => {
28
- if (isMounted) {
29
- if (timeoutID) clearTimeout(timeoutID);
30
- confirming = false;
31
- executing = false;
32
- }
33
- });
34
- }
35
- }
36
- </script>
37
-
38
- <Button
39
- disabled={executing}
40
- {tooltip}
41
- command={execute}
42
- class={confirming ? 'bookish-editor-confirm' : ''}
43
- >
44
- {confirming ? confirmLabel : commandLabel}
45
- </Button>
46
-
47
- <style>
48
- :global(bookish-editor-confirm) {
49
- animation: failure 100ms infinite;
50
- }
51
- </style>
@@ -1,44 +0,0 @@
1
- <script lang="ts">
2
- import type DefinitionNode from '$lib/models/chapter/DefinitionNode';
3
- import Options from '../app/Options.svelte';
4
- import Note from './Note.svelte';
5
- import { getCaret, getEdition } from '$lib/components/page/Contexts';
6
-
7
- export let definition: DefinitionNode;
8
-
9
- let caret = getCaret();
10
- let edition = getEdition();
11
- $: glossary = $edition?.getGlossary();
12
-
13
- function handleChange(glossaryID: string) {
14
- $caret?.edit(definition, definition.withMeta(glossaryID));
15
- }
16
-
17
- // Sort the glossary entries by phrase
18
- $: entries =
19
- glossary === undefined
20
- ? undefined
21
- : Object.entries(glossary)
22
- .map(([key, value]) => {
23
- return { glossaryID: key, phrase: value.phrase };
24
- })
25
- .sort((a, b) =>
26
- a && b ? a.phrase.localeCompare(b.phrase) : 0
27
- );
28
- </script>
29
-
30
- {#if entries !== undefined && glossary !== undefined}
31
- {#if entries.length === 0}
32
- <Note>No glossary entries to add</Note>
33
- {:else}
34
- <Options
35
- options={entries.map((entry) => [entry.phrase, entry.glossaryID])}
36
- value={definition.getMeta()}
37
- changed={handleChange}
38
- label="choose definition"
39
- />
40
- {#if !(definition.getMeta() in glossary)}
41
- <Note>Choose a glossary entry.</Note>
42
- {/if}
43
- {/if}
44
- {/if}
@@ -1,152 +0,0 @@
1
- <script lang="ts">
2
- import PositionEditor from './PositionEditor.svelte';
3
- import EmbedNode from '$lib/models/chapter/EmbedNode';
4
- import TextEditor from './TextEditor.svelte';
5
- import { storage } from '$lib/models/Firebase';
6
- import type { Image } from '$lib/models/book/BookMedia';
7
- import ToolbarSpacer from './ToolbarSpacer.svelte';
8
- import ImageChooser from './ImageChooser.svelte';
9
- import URLEditor from './URLEditor.svelte';
10
- import Note from './Note.svelte';
11
- import { getBook, getCaret } from '$lib/components/page/Contexts';
12
-
13
- export let embed: EmbedNode;
14
-
15
- let caret = getCaret();
16
- let upload: undefined | number | string = undefined;
17
-
18
- $: description = embed.getDescription();
19
- let book = getBook();
20
-
21
- function isValidURL(url: string): string | undefined {
22
- // Is it a valid URL?
23
- try {
24
- let test = new URL(url);
25
- if (test.protocol === 'http:' || test.protocol === 'https:') return;
26
- } catch (_) {}
27
- return "URL doesn't seem valid";
28
- }
29
-
30
- function handleImageChange(event: Event) {
31
- if ($book === undefined) return;
32
- if ($caret === undefined) return;
33
-
34
- const target = event.target as HTMLInputElement;
35
- const file = target.files === null ? undefined : target.files[0];
36
- const media = $book.getMedia();
37
-
38
- if (file === undefined) return;
39
- if (storage === undefined) return;
40
- if (media === undefined) return;
41
-
42
- media.upload(
43
- file,
44
- (progress: number) => (upload = `${progress}% done`),
45
- (error: string) => (upload = error),
46
- (url: string, thumbnail: string) => {
47
- // Upload completed successfully, now we can get the download URL
48
- $caret?.edit(
49
- embed,
50
- embed.withURLs(url, thumbnail).withDescription('')
51
- );
52
- upload = undefined;
53
- }
54
- );
55
- }
56
-
57
- function handleImageSelection(image: Image) {
58
- // Toggle the embed
59
- $caret?.edit(
60
- embed,
61
- embed.getURL() === image.url
62
- ? embed.withURL('').withDescription('')
63
- : embed.withURL(image.url)
64
- );
65
- }
66
- </script>
67
-
68
- {#if $caret?.root instanceof EmbedNode}
69
- <ToolbarSpacer />
70
- {:else}
71
- Position <PositionEditor
72
- value={embed.getPosition()}
73
- edit={(position) => $caret?.edit(embed, embed.withPosition(position))}
74
- />
75
- {/if}
76
- <label class="file-upload" tabIndex="0">
77
- <input
78
- type="file"
79
- on:input={handleImageChange}
80
- accept=".jpg,.jpeg,.png,.gif,image/jpeg,image/png,image/gif"
81
- />
82
- Upload
83
- </label>
84
- <ToolbarSpacer />
85
- {#if !embed.isHosted()}
86
- <URLEditor
87
- url={embed.getURL()}
88
- validator={isValidURL}
89
- edit={(url) => {
90
- const revisedEmbed = embed.withURL(url);
91
- const revisedURL = revisedEmbed.getURL();
92
- $caret?.edit(embed, revisedEmbed);
93
- return revisedURL;
94
- }}
95
- />
96
- {:else}
97
- <Note>(Hosted)</Note>
98
- {/if}
99
- <ToolbarSpacer />
100
- <TextEditor
101
- text={description}
102
- label={'Image description'}
103
- placeholder={'description'}
104
- valid={(alt) =>
105
- alt.length === 0 ? 'Image description required' : undefined}
106
- save={(alt) => {
107
- $caret?.edit(embed, embed.withDescription(alt));
108
- }}
109
- width={20}
110
- clip={true}
111
- />
112
- <ToolbarSpacer />
113
- {#if upload}
114
- {upload}
115
- {/if}
116
- <ImageChooser select={handleImageSelection} selection={embed.getURL()} />
117
-
118
- <style>
119
- .file-upload {
120
- background-color: var(--app-chrome-background);
121
- padding: var(--app-chrome-padding);
122
- border-radius: var(--app-chrome-roundedness);
123
- border: none;
124
- }
125
-
126
- .file-upload:hover {
127
- background-color: var(--app-interactive-color);
128
- color: var(--app-font-color-inverted);
129
- cursor: pointer;
130
- }
131
-
132
- .file-upload input:disabled {
133
- opacity: 0.3;
134
- cursor: auto;
135
- }
136
-
137
- .file-upload {
138
- font-family: var(--bookish-app-font);
139
- font-size: var(--app-chrome-font-size);
140
- }
141
-
142
- .file-upload input[type='file'] {
143
- display: none;
144
- }
145
-
146
- .file-upload:focus-within {
147
- position: relative;
148
- z-index: 2;
149
- outline: var(--app-chrome-border-size) solid
150
- var(--app-interactive-color);
151
- }
152
- </style>
@@ -1,16 +0,0 @@
1
- <script lang="ts">
2
- import type InlineCodeNode from '$lib/models/chapter/InlineCodeNode';
3
- import LanguageEditor from './LanguageEditor.svelte';
4
- import { getCaret } from '$lib/components/page/Contexts';
5
-
6
- export let code: InlineCodeNode;
7
-
8
- let caret = getCaret();
9
- </script>
10
-
11
- <span>
12
- <LanguageEditor
13
- language={code.getMeta()}
14
- edit={(lang) => $caret?.edit(code, code.withMeta(lang))}
15
- />
16
- </span>
@@ -1,110 +0,0 @@
1
- <script lang="ts">
2
- import type LinkNode from '$lib/models/chapter/LinkNode';
3
- import URLEditor from './URLEditor.svelte';
4
- import { getChapter, getEdition } from '../page/Contexts';
5
- import Icon from './Icon.svelte';
6
- import Button from '../app/Button.svelte';
7
- import UnlinkIcon from './icons/unlink.svg?raw';
8
- import Options from '../app/Options.svelte';
9
- import { getCaret } from '$lib/components/page/Contexts';
10
-
11
- export let link: LinkNode;
12
-
13
- let caret = getCaret();
14
- let edition = getEdition();
15
-
16
- let chapter = getChapter();
17
-
18
- $: url = link.getMeta();
19
-
20
- function saveEdit(value: string) {
21
- $caret?.edit(link, link.withMeta(value));
22
- }
23
-
24
- function isValidURL(url: string) {
25
- // Is it a valid URL?
26
- try {
27
- let test = new URL(url);
28
- if (test.protocol === 'http:' || test.protocol === 'https:')
29
- return true;
30
- } catch (_) {}
31
- return false;
32
- }
33
-
34
- function validate(urlOrChapter: string): string | undefined {
35
- if (urlOrChapter.length === 0) return "link URL can't be empty";
36
- if ($edition === undefined) return;
37
-
38
- if (isValidURL(urlOrChapter)) return;
39
-
40
- // If not, is it a valid chapterID?
41
- if ($edition.hasChapter(urlOrChapter)) return;
42
-
43
- // If not, is it a valid chapterID:label?
44
- const [chapterID, labelID] = urlOrChapter.split(':');
45
- if (chapterID === undefined || labelID === undefined) return;
46
-
47
- // The chapter ID is optional; if it's missing, it refers to this chapter.
48
- const correspondingChapter =
49
- chapterID === '' && $chapter
50
- ? $chapter.chapter.getAST($edition)
51
- : $edition?.getChapter(chapterID)?.getAST($edition);
52
- if (correspondingChapter === undefined)
53
- return 'Not a valid URL or chapter.';
54
-
55
- if (!correspondingChapter.hasLabel(labelID))
56
- return 'Not a valid chapter label.';
57
- }
58
-
59
- let options: [string, string][] = [];
60
- $: {
61
- options = [];
62
- // Add an empty option.
63
- options.push(['External link', url.startsWith('http') ? url : '']);
64
- // Add an option for each chapter and it's labels.
65
- if ($edition) {
66
- for (const chap of $edition?.getChapters() ?? []) {
67
- options.push([`Chapter: ${chap.getTitle()}`, chap.getID()]);
68
- for (const label of chap.getAST($edition)?.getLabels() ?? [])
69
- options.push([
70
- chap.getTitle() + ': ' + label.getMeta(),
71
- `${chap.getID()}:${label.getMeta()}`,
72
- ]);
73
- }
74
- }
75
- }
76
- </script>
77
-
78
- <span>
79
- <Button
80
- tooltip="remove link"
81
- command={() => {
82
- if ($caret?.context?.format) {
83
- const newFormat = $caret.context.format.withSegmentReplaced(
84
- link,
85
- link.getText()
86
- );
87
- if (newFormat) $caret.edit($caret.context.format, newFormat);
88
- }
89
- }}
90
- >
91
- <Icon icon={UnlinkIcon} />
92
- </Button>
93
- <Options
94
- {options}
95
- changed={(value) => {
96
- saveEdit(value);
97
- url = value;
98
- }}
99
- value={url}
100
- label="link type"
101
- />
102
- <URLEditor
103
- {url}
104
- validator={validate}
105
- edit={(url) => {
106
- saveEdit(url);
107
- return undefined;
108
- }}
109
- />
110
- </span>
@@ -1,21 +0,0 @@
1
- <script lang="ts">
2
- import type Position from '$lib/models/chapter/Position';
3
- import Switch from './Switch.svelte';
4
- import LeftIcon from './icons/left.svg?raw';
5
- import MiddleIcon from './icons/middle.svg?raw';
6
- import RightIcon from './icons/right.svg?raw';
7
-
8
- export let value: string;
9
- export let edit: (newValue: Position) => void;
10
-
11
- function editAsString(newValue: string) {
12
- edit(newValue as Position);
13
- }
14
- </script>
15
-
16
- <Switch
17
- options={['<', '|', '>']}
18
- icons={{ '<': LeftIcon, '|': MiddleIcon, '>': RightIcon }}
19
- {value}
20
- edit={editAsString}
21
- />
@@ -1,14 +0,0 @@
1
- <script lang="ts">
2
- import type QuoteNode from '$lib/models/chapter/QuoteNode';
3
- import { getCaret } from '$lib/components/page/Contexts';
4
- import PositionEditor from './PositionEditor.svelte';
5
-
6
- export let quote: QuoteNode;
7
-
8
- let caret = getCaret();
9
- </script>
10
-
11
- <PositionEditor
12
- value={quote.getPosition()}
13
- edit={(position) => $caret?.edit(quote, quote.withPosition(position))}
14
- />
@@ -1,14 +0,0 @@
1
- <script lang="ts">
2
- import type TableNode from '$lib/models/chapter/TableNode';
3
- import { getCaret } from '$lib/components/page/Contexts';
4
- import PositionEditor from './PositionEditor.svelte';
5
-
6
- export let table: TableNode;
7
-
8
- let caret = getCaret();
9
- </script>
10
-
11
- <PositionEditor
12
- value={table.getPosition()}
13
- edit={(position) => $caret?.edit(table, table.withPosition(position))}
14
- />
@@ -1,47 +0,0 @@
1
- <script lang="ts">
2
- enum Status {
3
- Viewing,
4
- Saving,
5
- Error,
6
- }
7
-
8
- export let on: boolean;
9
- export let save: (set: boolean) => Promise<void> | void;
10
-
11
- let saving = Status.Viewing;
12
-
13
- function toggle() {
14
- saving = Status.Saving;
15
-
16
- const promise = save(!on);
17
-
18
- if (promise === undefined) {
19
- saving = Status.Viewing;
20
- return;
21
- }
22
-
23
- promise
24
- .then(() => (saving = Status.Viewing))
25
- .catch(() => (saving = Status.Error));
26
- }
27
- </script>
28
-
29
- <div
30
- class={`bookish-app-interactive ${
31
- saving === Status.Saving ? ' bookish-text-editor-saving' : ''
32
- } ${saving === Status.Error ? ' bookish-text-editor-error' : ''}`}
33
- tabIndex="0"
34
- role="switch"
35
- aria-checked={on}
36
- on:keydown={(event) =>
37
- event.key === 'Enter' || event.key === 'Space' ? toggle() : undefined}
38
- on:click={toggle}
39
- >
40
- <slot />
41
- </div>
42
-
43
- <style>
44
- .bookish-app-interactive {
45
- cursor: pointer;
46
- }
47
- </style>