bookish-press 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/README.md +3 -1
  2. package/components/Auth.svelte +27 -24
  3. package/components/Auth.svelte.d.ts +4 -4
  4. package/components/Authentication.d.ts +2 -2
  5. package/components/BookPreview.svelte +75 -59
  6. package/components/BookPreview.svelte.d.ts +5 -5
  7. package/components/External.svelte +1 -1
  8. package/components/External.svelte.d.ts +3 -3
  9. package/components/Link.svelte +49 -3
  10. package/components/Link.svelte.d.ts +3 -4
  11. package/components/app/BookList.svelte +19 -0
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/components/app/Button.svelte +49 -0
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/components/app/Feedback.svelte +47 -0
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/components/app/Head.svelte +15 -0
  18. package/components/app/Head.svelte.d.ts +18 -0
  19. package/components/app/Large.svelte +8 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/components/app/Lead.svelte +12 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/components/app/Link.svelte +24 -0
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/components/app/Options.svelte +24 -0
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/components/app/Paragraph.svelte +20 -0
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/components/app/Section.svelte +12 -0
  30. package/components/app/Section.svelte.d.ts +27 -0
  31. package/components/app/Table.svelte +32 -0
  32. package/components/app/Table.svelte.d.ts +27 -0
  33. package/components/app/TextInput.svelte +38 -0
  34. package/components/app/TextInput.svelte.d.ts +22 -0
  35. package/components/chapter/Atom.svelte +20 -6
  36. package/components/chapter/Atom.svelte.d.ts +3 -3
  37. package/components/chapter/Block.svelte +26 -21
  38. package/components/chapter/Block.svelte.d.ts +4 -4
  39. package/components/chapter/Callout.svelte +38 -7
  40. package/components/chapter/Callout.svelte.d.ts +4 -4
  41. package/components/chapter/CaptionedCode.svelte +67 -24
  42. package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
  43. package/components/chapter/ChapterBody.svelte +62 -9
  44. package/components/chapter/ChapterBody.svelte.d.ts +5 -4
  45. package/components/chapter/Citations.svelte +86 -20
  46. package/components/chapter/Citations.svelte.d.ts +4 -4
  47. package/components/chapter/Code.svelte +152 -21
  48. package/components/chapter/Code.svelte.d.ts +3 -3
  49. package/components/chapter/Comment.svelte +39 -17
  50. package/components/chapter/Comment.svelte.d.ts +3 -3
  51. package/components/chapter/Definition.svelte +52 -18
  52. package/components/chapter/Definition.svelte.d.ts +5 -8
  53. package/components/chapter/Embed.svelte +155 -67
  54. package/components/chapter/Embed.svelte.d.ts +6 -4
  55. package/components/chapter/ErrorMessage.svelte +7 -2
  56. package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/components/chapter/ExtendedPrism.js +69 -0
  59. package/components/chapter/Figure.svelte +90 -0
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/components/chapter/Footnote.svelte +75 -12
  62. package/components/chapter/Footnote.svelte.d.ts +4 -4
  63. package/components/chapter/Format.svelte +63 -38
  64. package/components/chapter/Format.svelte.d.ts +5 -4
  65. package/components/chapter/InlineCode.svelte +16 -6
  66. package/components/chapter/InlineCode.svelte.d.ts +4 -4
  67. package/components/chapter/Label.svelte +38 -9
  68. package/components/chapter/Label.svelte.d.ts +4 -4
  69. package/components/chapter/Link.svelte +24 -19
  70. package/components/chapter/Link.svelte.d.ts +4 -4
  71. package/components/chapter/List.svelte +75 -8
  72. package/components/chapter/List.svelte.d.ts +4 -4
  73. package/components/chapter/Marginal.svelte +169 -27
  74. package/components/chapter/Marginal.svelte.d.ts +6 -3
  75. package/components/chapter/Paragraph.svelte +79 -6
  76. package/components/chapter/Paragraph.svelte.d.ts +4 -4
  77. package/components/chapter/Positioned.svelte +33 -0
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/components/chapter/Problem.svelte +15 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +68 -21
  82. package/components/chapter/Python.svelte.d.ts +4 -4
  83. package/components/chapter/Quote.svelte +64 -11
  84. package/components/chapter/Quote.svelte.d.ts +4 -4
  85. package/components/chapter/Rule.svelte +12 -1
  86. package/components/chapter/Rule.svelte.d.ts +4 -4
  87. package/components/chapter/Table.svelte +36 -25
  88. package/components/chapter/Table.svelte.d.ts +4 -4
  89. package/components/chapter/Text.svelte +61 -36
  90. package/components/chapter/Text.svelte.d.ts +5 -4
  91. package/components/editor/BookishEditor.svelte +373 -244
  92. package/components/editor/BookishEditor.svelte.d.ts +9 -6
  93. package/components/editor/CalloutEditor.svelte +5 -5
  94. package/components/editor/CalloutEditor.svelte.d.ts +4 -4
  95. package/components/editor/CaptionedCodeEditor.svelte +16 -12
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
  97. package/components/editor/CaretContext.d.ts +48 -16
  98. package/components/editor/CaretState.d.ts +16 -44
  99. package/components/editor/CaretUtilities.d.ts +2 -2
  100. package/components/editor/CaretView.svelte +82 -0
  101. package/components/editor/CaretView.svelte.d.ts +25 -0
  102. package/components/editor/CitationsEditor.svelte +36 -25
  103. package/components/editor/CitationsEditor.svelte.d.ts +4 -4
  104. package/components/editor/Clipboard.d.ts +2 -2
  105. package/components/editor/Command.d.ts +13 -12
  106. package/components/editor/Commands.d.ts +1 -1
  107. package/components/editor/Commands.js +1114 -571
  108. package/components/editor/ConfirmButton.svelte +18 -12
  109. package/components/editor/ConfirmButton.svelte.d.ts +5 -4
  110. package/components/editor/DefinitionEditor.svelte +29 -21
  111. package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
  112. package/components/editor/EmbedEditor.svelte +93 -43
  113. package/components/editor/EmbedEditor.svelte.d.ts +3 -3
  114. package/components/editor/Icon.svelte +17 -0
  115. package/components/editor/Icon.svelte.d.ts +16 -0
  116. package/components/editor/ImageChooser.svelte +53 -34
  117. package/components/editor/ImageChooser.svelte.d.ts +3 -3
  118. package/components/editor/InlineCodeEditor.svelte +7 -4
  119. package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
  120. package/components/editor/LabelEditor.svelte +20 -11
  121. package/components/editor/LabelEditor.svelte.d.ts +4 -4
  122. package/components/editor/LanguageEditor.svelte +10 -7
  123. package/components/editor/LanguageEditor.svelte.d.ts +3 -3
  124. package/components/editor/LinkEditor.svelte +64 -39
  125. package/components/editor/LinkEditor.svelte.d.ts +4 -4
  126. package/components/editor/Note.svelte +4 -3
  127. package/components/editor/Note.svelte.d.ts +6 -2
  128. package/components/editor/Permissions.svelte +95 -0
  129. package/components/editor/Permissions.svelte.d.ts +20 -0
  130. package/components/editor/PositionEditor.svelte +9 -6
  131. package/components/editor/PositionEditor.svelte.d.ts +4 -4
  132. package/components/editor/QuoteEditor.svelte +7 -2
  133. package/components/editor/QuoteEditor.svelte.d.ts +4 -4
  134. package/components/editor/Switch.svelte +55 -28
  135. package/components/editor/Switch.svelte.d.ts +4 -4
  136. package/components/editor/TableEditor.svelte +10 -0
  137. package/components/editor/TableEditor.svelte.d.ts +17 -0
  138. package/components/editor/TextEditor.svelte +83 -45
  139. package/components/editor/TextEditor.svelte.d.ts +5 -4
  140. package/components/editor/Toggle.svelte +11 -8
  141. package/components/editor/Toggle.svelte.d.ts +4 -4
  142. package/components/editor/Toolbar.svelte +191 -144
  143. package/components/editor/Toolbar.svelte.d.ts +5 -8
  144. package/components/editor/ToolbarGroup.svelte +17 -23
  145. package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
  146. package/components/editor/ToolbarSpacer.svelte +8 -1
  147. package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
  148. package/components/editor/URLEditor.svelte +6 -8
  149. package/components/editor/URLEditor.svelte.d.ts +3 -3
  150. package/components/editor/UndoState.d.ts +3 -3
  151. package/components/editor/icons/annotate.svg +1 -0
  152. package/components/editor/icons/block.svg +1 -0
  153. package/components/editor/icons/bold.svg +1 -0
  154. package/components/editor/icons/bullets.svg +1 -0
  155. package/components/editor/icons/callout.svg +1 -0
  156. package/components/editor/icons/citation.svg +8 -0
  157. package/components/editor/icons/clear.svg +1 -0
  158. package/components/editor/icons/clipboard.svg +1 -0
  159. package/components/editor/icons/code.svg +1 -0
  160. package/components/editor/icons/columnafter.svg +1 -0
  161. package/components/editor/icons/columnbefore.svg +1 -0
  162. package/components/editor/icons/comment.svg +1 -0
  163. package/components/editor/icons/copy.svg +1 -0
  164. package/components/editor/icons/cut.svg +1 -0
  165. package/components/editor/icons/define.svg +7 -0
  166. package/components/editor/icons/deletecolumn.svg +1 -0
  167. package/components/editor/icons/deleterow.svg +1 -0
  168. package/components/editor/icons/footnote.svg +8 -0
  169. package/components/editor/icons/header1.svg +7 -0
  170. package/components/editor/icons/header2.svg +7 -0
  171. package/components/editor/icons/header3.svg +7 -0
  172. package/components/editor/icons/home.svg +1 -0
  173. package/components/editor/icons/indent.svg +1 -0
  174. package/components/editor/icons/italic.svg +1 -0
  175. package/components/editor/icons/label.svg +1 -0
  176. package/components/editor/icons/left.svg +1 -0
  177. package/components/editor/icons/level.svg +1 -0
  178. package/components/editor/icons/link.svg +1 -0
  179. package/components/editor/icons/list.svg +1 -0
  180. package/components/editor/icons/media.svg +1 -0
  181. package/components/editor/icons/middle.svg +1 -0
  182. package/components/editor/icons/numbers.svg +10 -0
  183. package/components/editor/icons/paragraph.svg +1 -0
  184. package/components/editor/icons/paste.svg +10 -0
  185. package/components/editor/icons/quote.svg +1 -0
  186. package/components/editor/icons/redo.svg +1 -0
  187. package/components/editor/icons/right.svg +1 -0
  188. package/components/editor/icons/rowabove.svg +1 -0
  189. package/components/editor/icons/rowbelow.svg +1 -0
  190. package/components/editor/icons/rule.svg +1 -0
  191. package/components/editor/icons/sub.svg +1 -0
  192. package/components/editor/icons/super.svg +1 -0
  193. package/components/editor/icons/table.svg +1 -0
  194. package/components/editor/icons/text.svg +1 -0
  195. package/components/editor/icons/time.svg +1 -0
  196. package/components/editor/icons/undo.svg +1 -0
  197. package/components/editor/icons/unindent.svg +1 -0
  198. package/components/editor/icons/unlink.svg +1 -0
  199. package/components/page/Acknowledgements.svelte +35 -24
  200. package/components/page/Acknowledgements.svelte.d.ts +4 -4
  201. package/components/page/Authors.svelte +34 -17
  202. package/components/page/Authors.svelte.d.ts +7 -6
  203. package/components/page/BookLoader.svelte +59 -0
  204. package/components/page/BookLoader.svelte.d.ts +16 -0
  205. package/components/page/BulkReferenceEditor.svelte +54 -23
  206. package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
  207. package/components/page/Chapter.svelte +234 -143
  208. package/components/page/Chapter.svelte.d.ts +3 -3
  209. package/components/page/ChapterContext.d.ts +4 -4
  210. package/components/page/ChapterNumber.svelte +9 -0
  211. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  212. package/components/page/ChapterTitle.svelte +16 -0
  213. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  214. package/components/page/Contexts.d.ts +42 -22
  215. package/components/page/Contexts.js +129 -17
  216. package/components/page/DefinitionView.svelte +129 -90
  217. package/components/page/DefinitionView.svelte.d.ts +3 -3
  218. package/components/page/Description.svelte +31 -19
  219. package/components/page/Description.svelte.d.ts +4 -4
  220. package/components/page/Edition.svelte +135 -81
  221. package/components/page/Edition.svelte.d.ts +5 -6
  222. package/components/page/EditionLoader.svelte +99 -0
  223. package/components/page/EditionLoader.svelte.d.ts +18 -0
  224. package/components/page/Editions.svelte +106 -0
  225. package/components/page/Editions.svelte.d.ts +14 -0
  226. package/components/page/Glossary.svelte +65 -49
  227. package/components/page/Glossary.svelte.d.ts +4 -4
  228. package/components/page/Header.svelte +143 -56
  229. package/components/page/Header.svelte.d.ts +8 -6
  230. package/components/page/Index.svelte +116 -80
  231. package/components/page/Index.svelte.d.ts +4 -4
  232. package/components/page/Instructions.svelte +18 -17
  233. package/components/page/Instructions.svelte.d.ts +6 -4
  234. package/components/page/License.svelte +39 -23
  235. package/components/page/License.svelte.d.ts +4 -4
  236. package/components/page/Loading.svelte +102 -12
  237. package/components/page/Loading.svelte.d.ts +6 -2
  238. package/components/page/Media.svelte +81 -53
  239. package/components/page/Media.svelte.d.ts +4 -4
  240. package/components/page/MediaPreview.svelte +26 -8
  241. package/components/page/MediaPreview.svelte.d.ts +3 -3
  242. package/components/page/Muted.svelte +10 -0
  243. package/components/page/Muted.svelte.d.ts +27 -0
  244. package/components/page/Outline.svelte +279 -59
  245. package/components/page/Outline.svelte.d.ts +3 -3
  246. package/components/page/Page.svelte +40 -9
  247. package/components/page/Page.svelte.d.ts +3 -3
  248. package/components/page/PageHeader.svelte +14 -0
  249. package/components/page/PageHeader.svelte.d.ts +18 -0
  250. package/components/page/PageParagraph.svelte +18 -0
  251. package/components/page/PageParagraph.svelte.d.ts +27 -0
  252. package/components/page/PossibleChapter.svelte +7 -7
  253. package/components/page/PossibleChapter.svelte.d.ts +4 -4
  254. package/components/page/PossibleReference.svelte +6 -11
  255. package/components/page/PossibleReference.svelte.d.ts +6 -7
  256. package/components/page/Print.svelte +27 -3
  257. package/components/page/Print.svelte.d.ts +4 -4
  258. package/components/page/Publish.svelte +134 -0
  259. package/components/page/Publish.svelte.d.ts +14 -0
  260. package/components/page/Reference.svelte +259 -117
  261. package/components/page/Reference.svelte.d.ts +5 -5
  262. package/components/page/References.svelte +45 -48
  263. package/components/page/References.svelte.d.ts +4 -4
  264. package/components/page/Rows.svelte +54 -0
  265. package/components/page/Rows.svelte.d.ts +27 -0
  266. package/components/page/Search.svelte +88 -63
  267. package/components/page/Search.svelte.d.ts +4 -4
  268. package/components/page/Status.svelte +46 -39
  269. package/components/page/Status.svelte.d.ts +4 -9
  270. package/components/page/SubdomainEditor.svelte +41 -27
  271. package/components/page/SubdomainEditor.svelte.d.ts +4 -4
  272. package/components/page/TableOfContents.svelte +264 -191
  273. package/components/page/TableOfContents.svelte.d.ts +4 -4
  274. package/components/page/TableOfContentsImage.svelte +8 -8
  275. package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
  276. package/components/page/TableOfContentsRow.svelte +97 -34
  277. package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
  278. package/components/page/ThemeEditor.svelte +177 -39
  279. package/components/page/ThemeEditor.svelte.d.ts +4 -4
  280. package/components/page/ThemeEditorPreview.svelte +35 -23
  281. package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
  282. package/components/page/ThemeSetEditor.svelte +15 -13
  283. package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
  284. package/components/page/ThemeVariableEditor.svelte +24 -15
  285. package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
  286. package/components/page/Title.svelte +12 -0
  287. package/components/page/Title.svelte.d.ts +27 -0
  288. package/components/page/Unknown.svelte +28 -21
  289. package/components/page/Unknown.svelte.d.ts +4 -4
  290. package/components/page/margins.js +50 -33
  291. package/index.d.ts +13 -0
  292. package/index.js +14 -0
  293. package/models/CRUD.d.ts +27 -0
  294. package/models/CRUD.js +262 -0
  295. package/models/Firebase.d.ts +1 -0
  296. package/models/Firebase.js +26 -16
  297. package/models/book/Book.d.ts +40 -39
  298. package/models/book/Book.js +121 -121
  299. package/models/book/BookMedia.d.ts +3 -3
  300. package/models/book/BookMedia.js +22 -16
  301. package/models/book/BookSaveStatus.d.ts +7 -0
  302. package/models/book/BookSaveStatus.js +8 -0
  303. package/models/book/Chapter.d.ts +50 -39
  304. package/models/book/Chapter.js +189 -198
  305. package/models/book/ChapterID.js +7 -7
  306. package/models/book/Definition.d.ts +1 -1
  307. package/models/book/Edition.d.ts +87 -61
  308. package/models/book/Edition.js +460 -309
  309. package/models/book/Reference.d.ts +24 -0
  310. package/models/book/Reference.js +78 -0
  311. package/models/book/Schema.d.ts +168 -0
  312. package/models/book/Schema.js +115 -0
  313. package/models/book/Theme.d.ts +44 -37
  314. package/models/book/Theme.js +452 -52
  315. package/models/book/ThemeColors.d.ts +1 -1
  316. package/models/book/Words.d.ts +2 -0
  317. package/models/book/Words.js +110 -0
  318. package/models/chapter/AtomNode.d.ts +4 -4
  319. package/models/chapter/AtomNode.js +20 -13
  320. package/models/chapter/BlockNode.d.ts +9 -10
  321. package/models/chapter/BlockNode.js +32 -13
  322. package/models/chapter/BlocksNode.d.ts +10 -10
  323. package/models/chapter/BlocksNode.js +315 -120
  324. package/models/chapter/BlocksNode.test.js +494 -228
  325. package/models/chapter/Bookkeeping.d.ts +1 -1
  326. package/models/chapter/CalloutNode.d.ts +3 -3
  327. package/models/chapter/CalloutNode.js +34 -12
  328. package/models/chapter/Caret.d.ts +9 -7
  329. package/models/chapter/Caret.js +11 -6
  330. package/models/chapter/ChapterNode.d.ts +11 -11
  331. package/models/chapter/ChapterNode.js +70 -33
  332. package/models/chapter/CitationsNode.d.ts +3 -3
  333. package/models/chapter/CitationsNode.js +31 -12
  334. package/models/chapter/CodeNode.d.ts +11 -6
  335. package/models/chapter/CodeNode.js +143 -34
  336. package/models/chapter/CommentNode.d.ts +5 -5
  337. package/models/chapter/CommentNode.js +29 -13
  338. package/models/chapter/DefinitionNode.d.ts +2 -2
  339. package/models/chapter/DefinitionNode.js +15 -7
  340. package/models/chapter/Edit.d.ts +3 -3
  341. package/models/chapter/EmbedNode.d.ts +9 -5
  342. package/models/chapter/EmbedNode.js +108 -35
  343. package/models/chapter/ErrorNode.d.ts +2 -2
  344. package/models/chapter/ErrorNode.js +34 -12
  345. package/models/chapter/FootnoteNode.d.ts +5 -5
  346. package/models/chapter/FootnoteNode.js +34 -16
  347. package/models/chapter/FormatNode.d.ts +10 -10
  348. package/models/chapter/FormatNode.js +237 -106
  349. package/models/chapter/FormatNode.test.js +87 -45
  350. package/models/chapter/InlineCodeNode.d.ts +2 -2
  351. package/models/chapter/InlineCodeNode.js +22 -9
  352. package/models/chapter/LabelNode.d.ts +4 -4
  353. package/models/chapter/LabelNode.js +31 -13
  354. package/models/chapter/LinkNode.d.ts +2 -2
  355. package/models/chapter/LinkNode.js +21 -9
  356. package/models/chapter/ListNode.d.ts +8 -8
  357. package/models/chapter/ListNode.js +99 -38
  358. package/models/chapter/ListNode.test.js +29 -24
  359. package/models/chapter/MetadataNode.d.ts +3 -3
  360. package/models/chapter/MetadataNode.js +13 -5
  361. package/models/chapter/Node.d.ts +5 -3
  362. package/models/chapter/Node.js +76 -29
  363. package/models/chapter/Node.test.js +20 -18
  364. package/models/chapter/ParagraphNode.d.ts +6 -6
  365. package/models/chapter/ParagraphNode.js +84 -29
  366. package/models/chapter/ParagraphNode.test.js +22 -13
  367. package/models/chapter/Parser.d.ts +27 -27
  368. package/models/chapter/Parser.js +220 -206
  369. package/models/chapter/Parser.test.js +16 -16
  370. package/models/chapter/Position.d.ts +1 -1
  371. package/models/chapter/QuoteNode.d.ts +6 -6
  372. package/models/chapter/QuoteNode.js +61 -23
  373. package/models/chapter/RootNode.d.ts +4 -4
  374. package/models/chapter/RuleNode.d.ts +2 -2
  375. package/models/chapter/RuleNode.js +31 -11
  376. package/models/chapter/TableNode.d.ts +8 -6
  377. package/models/chapter/TableNode.js +89 -34
  378. package/models/chapter/TableNode.test.js +22 -24
  379. package/models/chapter/TextNode.d.ts +6 -6
  380. package/models/chapter/TextNode.js +72 -32
  381. package/models/chapter/TextNode.test.js +4 -4
  382. package/package.json +108 -26
  383. package/util/getSubdomain.js +8 -6
  384. package/util/isMobile.js +1 -1
  385. package/util/mineReference.d.ts +3 -2
  386. package/util/mineReference.js +67 -29
  387. package/util/scrollToEyeLevel.js +6 -1
  388. package/components/chapter/renderPosition.d.ts +0 -3
  389. package/components/chapter/renderPosition.js +0 -4
  390. package/components/editor/ToolbarIcon.svelte +0 -22
  391. package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
  392. package/components/page/Alert.svelte +0 -11
  393. package/components/page/Alert.svelte.d.ts +0 -23
  394. package/components/page/Revisions.svelte +0 -124
  395. package/components/page/Revisions.svelte.d.ts +0 -14
  396. package/models/BookLoader.d.ts +0 -2
  397. package/models/BookLoader.js +0 -67
  398. package/models/Firestore.d.ts +0 -22
  399. package/models/Firestore.js +0 -194
  400. package/models/chapter/ReferenceNode.d.ts +0 -29
  401. package/models/chapter/ReferenceNode.js +0 -48
  402. package/models/loadEdition.d.ts +0 -5
  403. package/models/loadEdition.js +0 -16
@@ -1,21 +1,37 @@
1
- import FormatNode from "./FormatNode";
2
- import Node from "./Node";
3
- import AtomNode from "./AtomNode";
4
- import BlocksNode from "./BlocksNode";
1
+ import FormatNode from './FormatNode';
2
+ import Node from './Node';
3
+ import AtomNode from './AtomNode';
4
+ import BlocksNode from './BlocksNode';
5
5
  export default class TextNode extends Node {
6
6
  #text;
7
- constructor(text = "") {
7
+ constructor(text = '') {
8
8
  super();
9
9
  this.#text = text;
10
10
  }
11
- getType() { return "text"; }
12
- getText() { return this.#text; }
13
- getLength() { return this.#text.length; }
14
- getCaretPositionCount() { return this.#text.length; }
15
- getParentOf() { return undefined; }
16
- getFirstCaret() { return { node: this, index: 0 }; }
17
- getLastCaret() { return { node: this, index: this.#text.length }; }
18
- toText() { return this.#text; }
11
+ getType() {
12
+ return 'text';
13
+ }
14
+ getText() {
15
+ return this.#text;
16
+ }
17
+ getLength() {
18
+ return this.#text.length;
19
+ }
20
+ getCaretPositionCount() {
21
+ return this.#text.length;
22
+ }
23
+ getParentOf() {
24
+ return undefined;
25
+ }
26
+ getFirstCaret() {
27
+ return { node: this, index: 0 };
28
+ }
29
+ getLastCaret() {
30
+ return { node: this, index: this.#text.length };
31
+ }
32
+ toText() {
33
+ return this.#text;
34
+ }
19
35
  toBookdown() {
20
36
  // Escape all characters with special meaning inside content nodes: _*`<^{~\[@% and :'s with no space after
21
37
  return this.#text
@@ -34,17 +50,27 @@ export default class TextNode extends Node {
34
50
  }
35
51
  toHTML() {
36
52
  return this.#text
37
- .replace("<", "&lt;")
38
- .replace(">", "&gt;")
39
- .replace("&", "&amp;")
40
- .replace('"', "&quot;")
41
- .replace("'", "&#39;");
42
- }
43
- getChildren() { return []; }
44
- copy() { return new TextNode(this.#text); }
45
- isItalic(root) { return this.getAncestors(root).filter(p => p instanceof FormatNode && p.getFormat() === "_").length > 0; }
46
- isBold(root) { return this.getAncestors(root).filter(p => p instanceof FormatNode && p.getFormat() === "*").length > 0; }
47
- isEmpty() { return this.getLength() === 0; }
53
+ .replace('<', '&lt;')
54
+ .replace('>', '&gt;')
55
+ .replace('&', '&amp;')
56
+ .replace('"', '&quot;')
57
+ .replace("'", '&#39;');
58
+ }
59
+ getChildren() {
60
+ return [];
61
+ }
62
+ copy() {
63
+ return new TextNode(this.#text);
64
+ }
65
+ isItalic(root) {
66
+ return (this.getAncestors(root).filter((p) => p instanceof FormatNode && p.getFormat() === '_').length > 0);
67
+ }
68
+ isBold(root) {
69
+ return (this.getAncestors(root).filter((p) => p instanceof FormatNode && p.getFormat() === '*').length > 0);
70
+ }
71
+ isEmpty() {
72
+ return this.getLength() === 0;
73
+ }
48
74
  getFormat(root) {
49
75
  return this.getClosestParentOfType(root, FormatNode);
50
76
  }
@@ -52,17 +78,19 @@ export default class TextNode extends Node {
52
78
  // The format root is the highest format in the tree that contains this text.
53
79
  // There is one exception to this, however: formats inside atom nodes shouldn't traverse
54
80
  // past the atom node, since should be isolated from edits outside the atom.
55
- const atom = this.getClosestParentMatching(root, p => p instanceof AtomNode);
81
+ const atom = this.getClosestParentMatching(root, (p) => p instanceof AtomNode);
56
82
  if (atom && atom.getMeta() instanceof FormatNode)
57
83
  return atom.getMeta();
58
84
  // If this isn't in an atom, just return the highest format this is in.
59
- return this.getFarthestParentMatching(root, p => p instanceof FormatNode);
85
+ return this.getFarthestParentMatching(root, (p) => p instanceof FormatNode);
60
86
  }
61
87
  getBlocks(root) {
62
88
  return this.getClosestParentOfType(root, BlocksNode);
63
89
  }
64
90
  getNextCaret(index) {
65
- return index < this.#text.length ? { node: this, index: index + 1 } : undefined;
91
+ return index < this.#text.length
92
+ ? { node: this, index: index + 1 }
93
+ : undefined;
66
94
  }
67
95
  getPreviousCaret(index) {
68
96
  return index > 0 ? { node: this, index: index - 1 } : undefined;
@@ -77,7 +105,8 @@ export default class TextNode extends Node {
77
105
  while (i < this.getLength() && this.#text.charAt(i).match(/\w/))
78
106
  i++;
79
107
  // If we found one in this node, return it.
80
- if (i < this.getLength() || (i === this.getLength() && this.#text.charAt(i - 1).match(/\w/)))
108
+ if (i < this.getLength() ||
109
+ (i === this.getLength() && this.#text.charAt(i - 1).match(/\w/)))
81
110
  return { node: this, index: i };
82
111
  // Otherwise, find the next text node's next word boundary.
83
112
  const format = this.getFormatRoot(root);
@@ -85,7 +114,9 @@ export default class TextNode extends Node {
85
114
  const nextNode = root.getNextTextOrAtom(this);
86
115
  const nextWord = nextNode?.nextWord(root);
87
116
  // If there isn't one, just go to the end of this.
88
- if (formatTextNodes && nextNode && this === formatTextNodes[formatTextNodes.length - 1])
117
+ if (formatTextNodes &&
118
+ nextNode &&
119
+ this === formatTextNodes[formatTextNodes.length - 1])
89
120
  return { node: nextNode, index: 0 };
90
121
  else if (nextWord === undefined)
91
122
  return { node: this, index: this.#text.length };
@@ -111,13 +142,20 @@ export default class TextNode extends Node {
111
142
  const previousWord = previousNode?.previousWord(root);
112
143
  // If there isn't one, just go to the end of this.
113
144
  if (formatTextNodes && previousNode && this === formatTextNodes[0])
114
- return { node: previousNode, index: previousNode instanceof TextNode ? previousNode.getLength() : 0 };
145
+ return {
146
+ node: previousNode,
147
+ index: previousNode instanceof TextNode
148
+ ? previousNode.getLength()
149
+ : 0,
150
+ };
115
151
  else if (previousWord === undefined)
116
152
  return { node: this, index: 0 };
117
153
  else
118
154
  return previousWord;
119
155
  }
120
- withChildReplaced() { return undefined; }
156
+ withChildReplaced() {
157
+ return undefined;
158
+ }
121
159
  withCharacterAt(char, index) {
122
160
  if (index < 0 || index > this.#text.length)
123
161
  return undefined;
@@ -126,7 +164,9 @@ export default class TextNode extends Node {
126
164
  withoutRange(range) {
127
165
  if (range.start.node !== this && range.end.node !== this)
128
166
  return;
129
- return new TextNode(this.#text.substring(0, range.start.index) + this.#text.substring(range.end.index));
167
+ const min = Math.max(0, Math.min(range.start.index, range.end.index));
168
+ const max = Math.min(this.#text.length, Math.max(range.start.index, range.end.index));
169
+ return new TextNode(this.#text.substring(0, min) + this.#text.substring(max));
130
170
  }
131
171
  withContentInRange(range) {
132
172
  const includesStart = range.start.node === this;
@@ -1,6 +1,6 @@
1
1
  import { test, expect } from 'vitest';
2
- import TextNode from "./TextNode";
3
- test("Insert character", () => {
4
- const text = new TextNode("Hello");
5
- expect(text.withCharacterAt("!", 5)?.toBookdown()).toBe("Hello!");
2
+ import TextNode from './TextNode';
3
+ test('Insert character', () => {
4
+ const text = new TextNode('Hello');
5
+ expect(text.withCharacterAt('!', 5)?.toBookdown()).toBe('Hello!');
6
6
  });
package/package.json CHANGED
@@ -1,35 +1,38 @@
1
1
  {
2
2
  "name": "bookish-press",
3
3
  "private": false,
4
- "version": "0.4.001",
4
+ "version": "0.4.3",
5
5
  "type": "module",
6
6
  "description": "A platform for reading and writing readable, accessible, beautiful online books.",
7
7
  "license": "MIT",
8
8
  "repository": "https://github.com/amyjko/bookish.git",
9
9
  "devDependencies": {
10
- "@sveltejs/adapter-auto": "next",
11
- "@sveltejs/kit": "next",
12
- "@sveltejs/adapter-static": "^1.0.0-next.48",
13
- "@sveltejs/package": "^1.0.0-next.5",
10
+ "@sveltejs/adapter-static": "^1.0.5",
11
+ "@sveltejs/kit": "^1.3.2",
12
+ "@sveltejs/package": "^1.0.2",
13
+ "@types/prismjs": "^1.26.0",
14
14
  "@types/smoothscroll-polyfill": "^0.3.1",
15
- "@types/uuid": "^8.3.4",
16
- "svelte": "^3.44.0",
17
- "svelte-check": "^2.7.1",
18
- "svelte-preprocess": "^4.10.6",
19
- "tslib": "^2.3.1",
20
- "typescript": "^4.7.4",
21
- "vite": "^3.1.0",
22
- "vitest": "^0.23.4"
15
+ "@types/uuid": "^9.0.0",
16
+ "prettier": "^2.8.3",
17
+ "prettier-plugin-svelte": "^2.9.0",
18
+ "svelte-check": "^3.0.3",
19
+ "svelte-preprocess": "^5.0.1",
20
+ "tslib": "^2.5.0",
21
+ "typescript": "^4.9.4",
22
+ "vite": "^4.0.4",
23
+ "vitest": "^0.28.3"
23
24
  },
24
25
  "dependencies": {
25
- "ajv": "^8.8.2",
26
+ "ajv": "^8.12.0",
26
27
  "ajv-formats": "^2.1.1",
27
- "firebase": "^9.9.4",
28
- "firebase-functions": "^3.24.1",
29
- "highlight.js": "11.1.0",
28
+ "firebase": "latest",
29
+ "firebase-functions": "^4.2.0",
30
+ "prismjs": "^1.29.0",
30
31
  "smoothscroll-polyfill": "^0.4.4",
32
+ "svelte": "^3.55.1",
31
33
  "uuid": "^9.0.0"
32
34
  },
35
+ "types": "./src/lib/index.d.ts",
33
36
  "exports": {
34
37
  "./package.json": "./package.json",
35
38
  "./components/Auth.svelte": "./components/Auth.svelte",
@@ -37,6 +40,18 @@
37
40
  "./components/BookPreview.svelte": "./components/BookPreview.svelte",
38
41
  "./components/External.svelte": "./components/External.svelte",
39
42
  "./components/Link.svelte": "./components/Link.svelte",
43
+ "./components/app/BookList.svelte": "./components/app/BookList.svelte",
44
+ "./components/app/Button.svelte": "./components/app/Button.svelte",
45
+ "./components/app/Feedback.svelte": "./components/app/Feedback.svelte",
46
+ "./components/app/Head.svelte": "./components/app/Head.svelte",
47
+ "./components/app/Large.svelte": "./components/app/Large.svelte",
48
+ "./components/app/Lead.svelte": "./components/app/Lead.svelte",
49
+ "./components/app/Link.svelte": "./components/app/Link.svelte",
50
+ "./components/app/Options.svelte": "./components/app/Options.svelte",
51
+ "./components/app/Paragraph.svelte": "./components/app/Paragraph.svelte",
52
+ "./components/app/Section.svelte": "./components/app/Section.svelte",
53
+ "./components/app/Table.svelte": "./components/app/Table.svelte",
54
+ "./components/app/TextInput.svelte": "./components/app/TextInput.svelte",
40
55
  "./components/chapter/Atom.svelte": "./components/chapter/Atom.svelte",
41
56
  "./components/chapter/Block.svelte": "./components/chapter/Block.svelte",
42
57
  "./components/chapter/Callout.svelte": "./components/chapter/Callout.svelte",
@@ -48,6 +63,8 @@
48
63
  "./components/chapter/Definition.svelte": "./components/chapter/Definition.svelte",
49
64
  "./components/chapter/Embed.svelte": "./components/chapter/Embed.svelte",
50
65
  "./components/chapter/ErrorMessage.svelte": "./components/chapter/ErrorMessage.svelte",
66
+ "./components/chapter/ExtendedPrism": "./components/chapter/ExtendedPrism.js",
67
+ "./components/chapter/Figure.svelte": "./components/chapter/Figure.svelte",
51
68
  "./components/chapter/Footnote.svelte": "./components/chapter/Footnote.svelte",
52
69
  "./components/chapter/Format.svelte": "./components/chapter/Format.svelte",
53
70
  "./components/chapter/InlineCode.svelte": "./components/chapter/InlineCode.svelte",
@@ -56,18 +73,21 @@
56
73
  "./components/chapter/List.svelte": "./components/chapter/List.svelte",
57
74
  "./components/chapter/Marginal.svelte": "./components/chapter/Marginal.svelte",
58
75
  "./components/chapter/Paragraph.svelte": "./components/chapter/Paragraph.svelte",
76
+ "./components/chapter/Positioned.svelte": "./components/chapter/Positioned.svelte",
77
+ "./components/chapter/Problem.svelte": "./components/chapter/Problem.svelte",
59
78
  "./components/chapter/Python.svelte": "./components/chapter/Python.svelte",
60
79
  "./components/chapter/Quote.svelte": "./components/chapter/Quote.svelte",
61
80
  "./components/chapter/Rule.svelte": "./components/chapter/Rule.svelte",
62
81
  "./components/chapter/Table.svelte": "./components/chapter/Table.svelte",
63
82
  "./components/chapter/Text.svelte": "./components/chapter/Text.svelte",
64
- "./components/chapter/renderPosition": "./components/chapter/renderPosition.js",
83
+ "./components/editor/.DS_Store": "./components/editor/.DS_Store",
65
84
  "./components/editor/BookishEditor.svelte": "./components/editor/BookishEditor.svelte",
66
85
  "./components/editor/CalloutEditor.svelte": "./components/editor/CalloutEditor.svelte",
67
86
  "./components/editor/CaptionedCodeEditor.svelte": "./components/editor/CaptionedCodeEditor.svelte",
68
87
  "./components/editor/CaretContext": "./components/editor/CaretContext.js",
69
88
  "./components/editor/CaretState": "./components/editor/CaretState.js",
70
89
  "./components/editor/CaretUtilities": "./components/editor/CaretUtilities.js",
90
+ "./components/editor/CaretView.svelte": "./components/editor/CaretView.svelte",
71
91
  "./components/editor/CitationsEditor.svelte": "./components/editor/CitationsEditor.svelte",
72
92
  "./components/editor/Clipboard": "./components/editor/Clipboard.js",
73
93
  "./components/editor/Command": "./components/editor/Command.js",
@@ -75,33 +95,87 @@
75
95
  "./components/editor/ConfirmButton.svelte": "./components/editor/ConfirmButton.svelte",
76
96
  "./components/editor/DefinitionEditor.svelte": "./components/editor/DefinitionEditor.svelte",
77
97
  "./components/editor/EmbedEditor.svelte": "./components/editor/EmbedEditor.svelte",
98
+ "./components/editor/Icon.svelte": "./components/editor/Icon.svelte",
78
99
  "./components/editor/ImageChooser.svelte": "./components/editor/ImageChooser.svelte",
79
100
  "./components/editor/InlineCodeEditor.svelte": "./components/editor/InlineCodeEditor.svelte",
80
101
  "./components/editor/LabelEditor.svelte": "./components/editor/LabelEditor.svelte",
81
102
  "./components/editor/LanguageEditor.svelte": "./components/editor/LanguageEditor.svelte",
82
103
  "./components/editor/LinkEditor.svelte": "./components/editor/LinkEditor.svelte",
83
104
  "./components/editor/Note.svelte": "./components/editor/Note.svelte",
105
+ "./components/editor/Permissions.svelte": "./components/editor/Permissions.svelte",
84
106
  "./components/editor/PositionEditor.svelte": "./components/editor/PositionEditor.svelte",
85
107
  "./components/editor/QuoteEditor.svelte": "./components/editor/QuoteEditor.svelte",
86
108
  "./components/editor/Switch.svelte": "./components/editor/Switch.svelte",
109
+ "./components/editor/TableEditor.svelte": "./components/editor/TableEditor.svelte",
87
110
  "./components/editor/TextEditor.svelte": "./components/editor/TextEditor.svelte",
88
111
  "./components/editor/Toggle.svelte": "./components/editor/Toggle.svelte",
89
112
  "./components/editor/Toolbar.svelte": "./components/editor/Toolbar.svelte",
90
113
  "./components/editor/ToolbarGroup.svelte": "./components/editor/ToolbarGroup.svelte",
91
- "./components/editor/ToolbarIcon.svelte": "./components/editor/ToolbarIcon.svelte",
92
114
  "./components/editor/ToolbarSpacer.svelte": "./components/editor/ToolbarSpacer.svelte",
93
115
  "./components/editor/URLEditor.svelte": "./components/editor/URLEditor.svelte",
94
116
  "./components/editor/UndoState": "./components/editor/UndoState.js",
117
+ "./components/editor/icons/annotate.svg": "./components/editor/icons/annotate.svg",
118
+ "./components/editor/icons/block.svg": "./components/editor/icons/block.svg",
119
+ "./components/editor/icons/bold.svg": "./components/editor/icons/bold.svg",
120
+ "./components/editor/icons/bullets.svg": "./components/editor/icons/bullets.svg",
121
+ "./components/editor/icons/callout.svg": "./components/editor/icons/callout.svg",
122
+ "./components/editor/icons/citation.svg": "./components/editor/icons/citation.svg",
123
+ "./components/editor/icons/clear.svg": "./components/editor/icons/clear.svg",
124
+ "./components/editor/icons/clipboard.svg": "./components/editor/icons/clipboard.svg",
125
+ "./components/editor/icons/code.svg": "./components/editor/icons/code.svg",
126
+ "./components/editor/icons/columnafter.svg": "./components/editor/icons/columnafter.svg",
127
+ "./components/editor/icons/columnbefore.svg": "./components/editor/icons/columnbefore.svg",
128
+ "./components/editor/icons/comment.svg": "./components/editor/icons/comment.svg",
129
+ "./components/editor/icons/copy.svg": "./components/editor/icons/copy.svg",
130
+ "./components/editor/icons/cut.svg": "./components/editor/icons/cut.svg",
131
+ "./components/editor/icons/define.svg": "./components/editor/icons/define.svg",
132
+ "./components/editor/icons/deletecolumn.svg": "./components/editor/icons/deletecolumn.svg",
133
+ "./components/editor/icons/deleterow.svg": "./components/editor/icons/deleterow.svg",
134
+ "./components/editor/icons/footnote.svg": "./components/editor/icons/footnote.svg",
135
+ "./components/editor/icons/header1.svg": "./components/editor/icons/header1.svg",
136
+ "./components/editor/icons/header2.svg": "./components/editor/icons/header2.svg",
137
+ "./components/editor/icons/header3.svg": "./components/editor/icons/header3.svg",
138
+ "./components/editor/icons/home.svg": "./components/editor/icons/home.svg",
139
+ "./components/editor/icons/indent.svg": "./components/editor/icons/indent.svg",
140
+ "./components/editor/icons/italic.svg": "./components/editor/icons/italic.svg",
141
+ "./components/editor/icons/label.svg": "./components/editor/icons/label.svg",
142
+ "./components/editor/icons/left.svg": "./components/editor/icons/left.svg",
143
+ "./components/editor/icons/level.svg": "./components/editor/icons/level.svg",
144
+ "./components/editor/icons/link.svg": "./components/editor/icons/link.svg",
145
+ "./components/editor/icons/list.svg": "./components/editor/icons/list.svg",
146
+ "./components/editor/icons/media.svg": "./components/editor/icons/media.svg",
147
+ "./components/editor/icons/middle.svg": "./components/editor/icons/middle.svg",
148
+ "./components/editor/icons/numbers.svg": "./components/editor/icons/numbers.svg",
149
+ "./components/editor/icons/paragraph.svg": "./components/editor/icons/paragraph.svg",
150
+ "./components/editor/icons/paste.svg": "./components/editor/icons/paste.svg",
151
+ "./components/editor/icons/quote.svg": "./components/editor/icons/quote.svg",
152
+ "./components/editor/icons/redo.svg": "./components/editor/icons/redo.svg",
153
+ "./components/editor/icons/right.svg": "./components/editor/icons/right.svg",
154
+ "./components/editor/icons/rowabove.svg": "./components/editor/icons/rowabove.svg",
155
+ "./components/editor/icons/rowbelow.svg": "./components/editor/icons/rowbelow.svg",
156
+ "./components/editor/icons/rule.svg": "./components/editor/icons/rule.svg",
157
+ "./components/editor/icons/sub.svg": "./components/editor/icons/sub.svg",
158
+ "./components/editor/icons/super.svg": "./components/editor/icons/super.svg",
159
+ "./components/editor/icons/table.svg": "./components/editor/icons/table.svg",
160
+ "./components/editor/icons/text.svg": "./components/editor/icons/text.svg",
161
+ "./components/editor/icons/time.svg": "./components/editor/icons/time.svg",
162
+ "./components/editor/icons/undo.svg": "./components/editor/icons/undo.svg",
163
+ "./components/editor/icons/unindent.svg": "./components/editor/icons/unindent.svg",
164
+ "./components/editor/icons/unlink.svg": "./components/editor/icons/unlink.svg",
95
165
  "./components/page/Acknowledgements.svelte": "./components/page/Acknowledgements.svelte",
96
- "./components/page/Alert.svelte": "./components/page/Alert.svelte",
97
166
  "./components/page/Authors.svelte": "./components/page/Authors.svelte",
167
+ "./components/page/BookLoader.svelte": "./components/page/BookLoader.svelte",
98
168
  "./components/page/BulkReferenceEditor.svelte": "./components/page/BulkReferenceEditor.svelte",
99
169
  "./components/page/Chapter.svelte": "./components/page/Chapter.svelte",
100
170
  "./components/page/ChapterContext": "./components/page/ChapterContext.js",
171
+ "./components/page/ChapterNumber.svelte": "./components/page/ChapterNumber.svelte",
172
+ "./components/page/ChapterTitle.svelte": "./components/page/ChapterTitle.svelte",
101
173
  "./components/page/Contexts": "./components/page/Contexts.js",
102
174
  "./components/page/DefinitionView.svelte": "./components/page/DefinitionView.svelte",
103
175
  "./components/page/Description.svelte": "./components/page/Description.svelte",
104
176
  "./components/page/Edition.svelte": "./components/page/Edition.svelte",
177
+ "./components/page/EditionLoader.svelte": "./components/page/EditionLoader.svelte",
178
+ "./components/page/Editions.svelte": "./components/page/Editions.svelte",
105
179
  "./components/page/Glossary.svelte": "./components/page/Glossary.svelte",
106
180
  "./components/page/Header.svelte": "./components/page/Header.svelte",
107
181
  "./components/page/Index.svelte": "./components/page/Index.svelte",
@@ -110,14 +184,18 @@
110
184
  "./components/page/Loading.svelte": "./components/page/Loading.svelte",
111
185
  "./components/page/Media.svelte": "./components/page/Media.svelte",
112
186
  "./components/page/MediaPreview.svelte": "./components/page/MediaPreview.svelte",
187
+ "./components/page/Muted.svelte": "./components/page/Muted.svelte",
113
188
  "./components/page/Outline.svelte": "./components/page/Outline.svelte",
114
189
  "./components/page/Page.svelte": "./components/page/Page.svelte",
190
+ "./components/page/PageHeader.svelte": "./components/page/PageHeader.svelte",
191
+ "./components/page/PageParagraph.svelte": "./components/page/PageParagraph.svelte",
115
192
  "./components/page/PossibleChapter.svelte": "./components/page/PossibleChapter.svelte",
116
193
  "./components/page/PossibleReference.svelte": "./components/page/PossibleReference.svelte",
117
194
  "./components/page/Print.svelte": "./components/page/Print.svelte",
195
+ "./components/page/Publish.svelte": "./components/page/Publish.svelte",
118
196
  "./components/page/Reference.svelte": "./components/page/Reference.svelte",
119
197
  "./components/page/References.svelte": "./components/page/References.svelte",
120
- "./components/page/Revisions.svelte": "./components/page/Revisions.svelte",
198
+ "./components/page/Rows.svelte": "./components/page/Rows.svelte",
121
199
  "./components/page/Search.svelte": "./components/page/Search.svelte",
122
200
  "./components/page/Status.svelte": "./components/page/Status.svelte",
123
201
  "./components/page/SubdomainEditor.svelte": "./components/page/SubdomainEditor.svelte",
@@ -128,19 +206,24 @@
128
206
  "./components/page/ThemeEditorPreview.svelte": "./components/page/ThemeEditorPreview.svelte",
129
207
  "./components/page/ThemeSetEditor.svelte": "./components/page/ThemeSetEditor.svelte",
130
208
  "./components/page/ThemeVariableEditor.svelte": "./components/page/ThemeVariableEditor.svelte",
209
+ "./components/page/Title.svelte": "./components/page/Title.svelte",
131
210
  "./components/page/Unknown.svelte": "./components/page/Unknown.svelte",
132
211
  "./components/page/margins": "./components/page/margins.js",
133
- "./models/BookLoader": "./models/BookLoader.js",
212
+ ".": "./index.js",
213
+ "./models/CRUD": "./models/CRUD.js",
134
214
  "./models/Firebase": "./models/Firebase.js",
135
- "./models/Firestore": "./models/Firestore.js",
136
215
  "./models/book/Book": "./models/book/Book.js",
137
216
  "./models/book/BookMedia": "./models/book/BookMedia.js",
217
+ "./models/book/BookSaveStatus": "./models/book/BookSaveStatus.js",
138
218
  "./models/book/Chapter": "./models/book/Chapter.js",
139
219
  "./models/book/ChapterID": "./models/book/ChapterID.js",
140
220
  "./models/book/Definition": "./models/book/Definition.js",
141
221
  "./models/book/Edition": "./models/book/Edition.js",
222
+ "./models/book/Reference": "./models/book/Reference.js",
223
+ "./models/book/Schema": "./models/book/Schema.js",
142
224
  "./models/book/Theme": "./models/book/Theme.js",
143
225
  "./models/book/ThemeColors": "./models/book/ThemeColors.js",
226
+ "./models/book/Words": "./models/book/Words.js",
144
227
  "./models/chapter/AtomNode": "./models/chapter/AtomNode.js",
145
228
  "./models/chapter/BlockNode": "./models/chapter/BlockNode.js",
146
229
  "./models/chapter/BlocksNode.test": "./models/chapter/BlocksNode.test.js",
@@ -173,17 +256,16 @@
173
256
  "./models/chapter/Parser": "./models/chapter/Parser.js",
174
257
  "./models/chapter/Position": "./models/chapter/Position.js",
175
258
  "./models/chapter/QuoteNode": "./models/chapter/QuoteNode.js",
176
- "./models/chapter/ReferenceNode": "./models/chapter/ReferenceNode.js",
177
259
  "./models/chapter/RootNode": "./models/chapter/RootNode.js",
178
260
  "./models/chapter/RuleNode": "./models/chapter/RuleNode.js",
179
261
  "./models/chapter/TableNode.test": "./models/chapter/TableNode.test.js",
180
262
  "./models/chapter/TableNode": "./models/chapter/TableNode.js",
181
263
  "./models/chapter/TextNode.test": "./models/chapter/TextNode.test.js",
182
264
  "./models/chapter/TextNode": "./models/chapter/TextNode.js",
183
- "./models/loadEdition": "./models/loadEdition.js",
184
265
  "./util/getSubdomain": "./util/getSubdomain.js",
185
266
  "./util/isMobile": "./util/isMobile.js",
186
267
  "./util/mineReference": "./util/mineReference.js",
187
268
  "./util/scrollToEyeLevel": "./util/scrollToEyeLevel.js"
188
- }
269
+ },
270
+ "svelte": "./index.js"
189
271
  }
@@ -1,11 +1,13 @@
1
1
  export function getSubdomain() {
2
- if (typeof window === "undefined")
2
+ if (typeof window === 'undefined')
3
3
  return undefined;
4
4
  // Determine if there's a subdomain.
5
- const hostParts = window.location.hostname.split(".");
5
+ const hostParts = window.location.hostname.split('.');
6
6
  const firstPart = hostParts[0];
7
7
  const secondPart = hostParts[1];
8
- return secondPart === undefined || /^(localhost|bookish)$/.test(firstPart) ? undefined : firstPart;
8
+ return secondPart === undefined || /^(localhost|bookish)$/.test(firstPart)
9
+ ? undefined
10
+ : firstPart;
9
11
  }
10
12
  export function pathWithoutSubdomain(path) {
11
13
  // If there's no subdomain, just return the path.
@@ -13,10 +15,10 @@ export function pathWithoutSubdomain(path) {
13
15
  if (subdomain === undefined)
14
16
  return path;
15
17
  // Otherwise, return a full URL without the subdomain
16
- return `${window.location.protocol}//${window.location.host.replace(subdomain + ".", "")}${path}${window.location.search}`;
18
+ return `${window.location.protocol}//${window.location.host.replace(subdomain + '.', '')}${path}${window.location.search}`;
17
19
  }
18
20
  export function getSubdomainURL(subdomain) {
19
- const parts = window.location.host.split(".");
21
+ const parts = window.location.host.split('.');
20
22
  // Construct a URL from the subdomain and the last one or two parts of the host (accounting for localhost and normal domains and top level domains.)
21
- return `${window.location.protocol}//${subdomain}.${parts.length > 1 ? `${parts[parts.length - 2]}.` : ""}${parts[parts.length - 1]}`;
23
+ return `${window.location.protocol}//${subdomain}.${parts.length > 1 ? `${parts[parts.length - 2]}.` : ''}${parts[parts.length - 1]}`;
22
24
  }
package/util/isMobile.js CHANGED
@@ -2,5 +2,5 @@ export function isMobile() {
2
2
  return watchMobile().matches;
3
3
  }
4
4
  export function watchMobile() {
5
- return window.matchMedia("screen and (max-width: 1200px)");
5
+ return window.matchMedia('screen and (max-width: 1200px)');
6
6
  }
@@ -1,3 +1,4 @@
1
- import ReferenceNode from "../models/chapter/ReferenceNode";
2
- export declare function mineReference(ids: string[], text: string): ReferenceNode;
1
+ import Reference from '../models/book/Reference';
2
+ export declare function mineReference(ids: string[], text: string): Reference;
3
+ export declare function splitIntoSentences(text: string): string[];
3
4
  export declare function getUniqueReferenceID(ids: string[], authors?: string, year?: string): string;
@@ -1,60 +1,98 @@
1
- import ReferenceNode from "../models/chapter/ReferenceNode";
1
+ import Reference from '../models/book/Reference';
2
2
  export function mineReference(ids, text) {
3
3
  // First find the year, since it's the most easily detected. Optional parens.
4
4
  let yearMatches = text.match(/(\(?[0-9]{4}\)?)/);
5
- let year = yearMatches !== null && yearMatches.length > 0 ? yearMatches[1].replace("(", "").replace(")", "") : undefined;
5
+ let year = yearMatches !== null && yearMatches.length > 0
6
+ ? yearMatches[1].replace('(', '').replace(')', '')
7
+ : undefined;
6
8
  if (year && yearMatches)
7
- text = text.replace(yearMatches[1], "");
8
- // Split the remaining text by period-space sequences, assuming chunks of information are segmented by sentences.
9
- // let chunks = text.split(/(?<![A-Z])[?.]\s/);
10
- // Grrr, Safari doesn't support negative lookbehind. I'm going to break this until I have time for a fix.
11
- let chunks = text.split(/[?.]\s/);
12
- // First find the URL. If we find it, remove it from the chunks.
13
- let url = chunks.find(t => t.indexOf("http") >= 0);
14
- if (url) {
15
- chunks = chunks.filter(t => t !== url);
16
- url = url.trim();
9
+ text = text.replace(yearMatches[1], '');
10
+ // Next, find the URL
11
+ let url = null;
12
+ let urlMatches = text.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)/);
13
+ if (urlMatches !== null && urlMatches.length > 0) {
14
+ url = urlMatches[0];
15
+ const index = text.indexOf(url);
16
+ text = text.substring(0, index) + text.substring(index + url.length);
17
17
  }
18
+ // Split the remaining portion into sentences.
19
+ let chunks = splitIntoSentences(text);
18
20
  // Authors are usually lists of roman characters and periods optionally followed by commas or semicolons
19
- let authors = chunks.find(t => /[a-zA-Z\.]+[,;]?/.test(t));
21
+ let authors = chunks.find((t) => /[a-zA-Z\.]+[,;]?/.test(t));
20
22
  if (authors) {
21
- chunks = chunks.filter(t => t !== authors);
23
+ chunks = chunks.filter((t) => t !== authors);
22
24
  authors = authors.trim();
23
25
  }
24
26
  // Titles are usually lists of roman characters and spaces and maybe a colon.
25
- let title = chunks.find(t => /[a-zA-Z0-9:!#?]+/.test(t));
27
+ let title = chunks.find((t) => /[a-zA-Z0-9:!#?]+/.test(t));
26
28
  if (title) {
27
- chunks = chunks.filter(t => t !== title);
28
- if (text.charAt(text.indexOf(title) + title.length) === "?")
29
- title = title + "?";
29
+ chunks = chunks.filter((t) => t !== title);
30
+ if (text.charAt(text.indexOf(title) + title.length) === '?')
31
+ title = title + '?';
32
+ title = title.trim();
30
33
  }
31
34
  // Source is whatever is left.
32
35
  let source = chunks.length > 0 ? chunks[0] : undefined;
33
36
  if (source) {
34
- chunks = chunks.filter(t => t !== source);
37
+ chunks = chunks.filter((t) => t !== source);
38
+ source = source.trim();
35
39
  }
36
40
  // If there's anything left, fall back to just a string.
37
- return chunks.length > 0 ?
38
- new ReferenceNode(getUniqueReferenceID(ids), text) :
39
- new ReferenceNode(getUniqueReferenceID(ids, authors, year), authors || "", year || "", title || "", source || "", url || "", "", false);
41
+ return chunks.length > 0
42
+ ? new Reference(getUniqueReferenceID(ids), text)
43
+ : new Reference(getUniqueReferenceID(ids, authors, year), authors || '', year || '', title || '', source || '', url || '', '', false);
44
+ }
45
+ export function splitIntoSentences(text) {
46
+ // Split the remaining text by period-space sequences, assuming chunks of information are segmented by sentences
47
+ // unless they are single initials followed by a period.
48
+ let sentences = [];
49
+ let priorLetterSequence = '';
50
+ let accumulator = '';
51
+ for (let i = 0; i < text.length; i++) {
52
+ let char = text.charAt(i);
53
+ if (/[a-zA-Z]/.test(char)) {
54
+ priorLetterSequence += char;
55
+ accumulator += char;
56
+ }
57
+ else {
58
+ if (char === '.' && priorLetterSequence.length !== 1) {
59
+ sentences.push(accumulator);
60
+ accumulator = '';
61
+ priorLetterSequence = '';
62
+ }
63
+ else {
64
+ priorLetterSequence = '';
65
+ accumulator += char;
66
+ }
67
+ }
68
+ }
69
+ if (accumulator.length > 0)
70
+ sentences.push(accumulator);
71
+ return sentences;
40
72
  }
41
73
  export function getUniqueReferenceID(ids, authors, year) {
42
74
  if (authors && year) {
43
75
  // Split the authors, combine the first initials of each, then append the year.
44
- const semicolons = authors.includes(";");
45
- const authorList = authors.split(semicolons ? /;\s+/ : /,\s+/).map(t => t.trim());
46
- const initials = authorList.map(a => a.charAt(0).toLocaleLowerCase());
47
- const id = initials.join("") + year;
76
+ const semicolons = authors.includes(';');
77
+ const authorList = authors
78
+ .split(semicolons ? /;\s+/ : /,\s+/)
79
+ .map((t) => t.trim());
80
+ const initials = authorList.map((a) => a.charAt(0).toLocaleLowerCase());
81
+ const id = initials.join('') + year;
48
82
  let revisedID = id;
49
- let letters = "abcdefghijklmnopqrstuv".split("");
83
+ let letters = 'abcdefghijklmnopqrstuv'.split('');
50
84
  while (ids.includes(revisedID) || revisedID.length === 0) {
51
85
  const letter = letters.shift();
52
- revisedID = id + (letter !== undefined ? letter : Math.floor(Math.random() * 10));
86
+ revisedID =
87
+ id +
88
+ (letter !== undefined
89
+ ? letter
90
+ : Math.floor(Math.random() * 10));
53
91
  }
54
92
  return revisedID;
55
93
  }
56
94
  else {
57
- let id = "ref";
95
+ let id = 'ref';
58
96
  for (let i = 0; i < 4; i++)
59
97
  id = id + Math.round(Math.random() * 9);
60
98
  return id;