bookish-press 0.4.0 → 0.4.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/README.md +3 -1
  2. package/components/Auth.svelte +19 -14
  3. package/components/Auth.svelte.d.ts +4 -4
  4. package/components/Authentication.d.ts +2 -2
  5. package/components/BookPreview.svelte +77 -59
  6. package/components/BookPreview.svelte.d.ts +5 -5
  7. package/components/External.svelte +1 -1
  8. package/components/External.svelte.d.ts +3 -3
  9. package/components/Link.svelte +49 -3
  10. package/components/Link.svelte.d.ts +3 -4
  11. package/components/app/BookList.svelte +19 -0
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/components/app/Button.svelte +49 -0
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/components/app/Feedback.svelte +45 -0
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/components/app/Head.svelte +12 -0
  18. package/components/app/Head.svelte.d.ts +27 -0
  19. package/components/app/Large.svelte +8 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/components/app/Lead.svelte +12 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/components/app/Link.svelte +24 -0
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/components/app/Options.svelte +24 -0
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/components/app/Paragraph.svelte +19 -0
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/components/app/Table.svelte +32 -0
  30. package/components/app/Table.svelte.d.ts +27 -0
  31. package/components/app/TextInput.svelte +37 -0
  32. package/components/app/TextInput.svelte.d.ts +22 -0
  33. package/components/app/Writing.svelte +13 -0
  34. package/components/app/Writing.svelte.d.ts +27 -0
  35. package/components/chapter/Atom.svelte +20 -6
  36. package/components/chapter/Atom.svelte.d.ts +3 -3
  37. package/components/chapter/Block.svelte +23 -20
  38. package/components/chapter/Block.svelte.d.ts +4 -4
  39. package/components/chapter/Callout.svelte +38 -7
  40. package/components/chapter/Callout.svelte.d.ts +4 -4
  41. package/components/chapter/CaptionedCode.svelte +66 -23
  42. package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
  43. package/components/chapter/ChapterBody.svelte +61 -9
  44. package/components/chapter/ChapterBody.svelte.d.ts +4 -4
  45. package/components/chapter/Citations.svelte +86 -20
  46. package/components/chapter/Citations.svelte.d.ts +4 -4
  47. package/components/chapter/Code.svelte +152 -21
  48. package/components/chapter/Code.svelte.d.ts +3 -3
  49. package/components/chapter/Comment.svelte +38 -16
  50. package/components/chapter/Comment.svelte.d.ts +3 -3
  51. package/components/chapter/Definition.svelte +52 -18
  52. package/components/chapter/Definition.svelte.d.ts +5 -8
  53. package/components/chapter/Embed.svelte +154 -66
  54. package/components/chapter/Embed.svelte.d.ts +5 -4
  55. package/components/chapter/ErrorMessage.svelte +7 -2
  56. package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/components/chapter/ExtendedPrism.js +69 -0
  59. package/components/chapter/Figure.svelte +90 -0
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/components/chapter/Footnote.svelte +75 -12
  62. package/components/chapter/Footnote.svelte.d.ts +4 -4
  63. package/components/chapter/Format.svelte +60 -37
  64. package/components/chapter/Format.svelte.d.ts +4 -4
  65. package/components/chapter/InlineCode.svelte +15 -5
  66. package/components/chapter/InlineCode.svelte.d.ts +4 -4
  67. package/components/chapter/Label.svelte +37 -8
  68. package/components/chapter/Label.svelte.d.ts +4 -4
  69. package/components/chapter/Link.svelte +23 -18
  70. package/components/chapter/Link.svelte.d.ts +4 -4
  71. package/components/chapter/List.svelte +75 -8
  72. package/components/chapter/List.svelte.d.ts +4 -4
  73. package/components/chapter/Marginal.svelte +169 -27
  74. package/components/chapter/Marginal.svelte.d.ts +6 -3
  75. package/components/chapter/Paragraph.svelte +74 -6
  76. package/components/chapter/Paragraph.svelte.d.ts +4 -4
  77. package/components/chapter/Positioned.svelte +33 -0
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/components/chapter/Problem.svelte +15 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +68 -21
  82. package/components/chapter/Python.svelte.d.ts +4 -4
  83. package/components/chapter/Quote.svelte +64 -11
  84. package/components/chapter/Quote.svelte.d.ts +4 -4
  85. package/components/chapter/Rule.svelte +12 -1
  86. package/components/chapter/Rule.svelte.d.ts +4 -4
  87. package/components/chapter/Table.svelte +36 -25
  88. package/components/chapter/Table.svelte.d.ts +4 -4
  89. package/components/chapter/Text.svelte +61 -36
  90. package/components/chapter/Text.svelte.d.ts +5 -4
  91. package/components/editor/BookishEditor.svelte +343 -237
  92. package/components/editor/BookishEditor.svelte.d.ts +5 -5
  93. package/components/editor/CalloutEditor.svelte +5 -5
  94. package/components/editor/CalloutEditor.svelte.d.ts +4 -4
  95. package/components/editor/CaptionedCodeEditor.svelte +16 -12
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
  97. package/components/editor/CaretContext.d.ts +48 -16
  98. package/components/editor/CaretState.d.ts +16 -44
  99. package/components/editor/CaretUtilities.d.ts +2 -2
  100. package/components/editor/CaretView.svelte +80 -0
  101. package/components/editor/CaretView.svelte.d.ts +24 -0
  102. package/components/editor/CitationsEditor.svelte +36 -25
  103. package/components/editor/CitationsEditor.svelte.d.ts +4 -4
  104. package/components/editor/Clipboard.d.ts +2 -2
  105. package/components/editor/Command.d.ts +13 -12
  106. package/components/editor/Commands.d.ts +1 -1
  107. package/components/editor/Commands.js +1114 -571
  108. package/components/editor/ConfirmButton.svelte +18 -12
  109. package/components/editor/ConfirmButton.svelte.d.ts +5 -4
  110. package/components/editor/DefinitionEditor.svelte +29 -21
  111. package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
  112. package/components/editor/EmbedEditor.svelte +93 -43
  113. package/components/editor/EmbedEditor.svelte.d.ts +3 -3
  114. package/components/editor/Icon.svelte +17 -0
  115. package/components/editor/Icon.svelte.d.ts +16 -0
  116. package/components/editor/ImageChooser.svelte +53 -34
  117. package/components/editor/ImageChooser.svelte.d.ts +3 -3
  118. package/components/editor/InlineCodeEditor.svelte +7 -4
  119. package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
  120. package/components/editor/LabelEditor.svelte +20 -11
  121. package/components/editor/LabelEditor.svelte.d.ts +4 -4
  122. package/components/editor/LanguageEditor.svelte +10 -7
  123. package/components/editor/LanguageEditor.svelte.d.ts +3 -3
  124. package/components/editor/LinkEditor.svelte +64 -39
  125. package/components/editor/LinkEditor.svelte.d.ts +4 -4
  126. package/components/editor/Note.svelte +3 -3
  127. package/components/editor/Note.svelte.d.ts +6 -2
  128. package/components/editor/PositionEditor.svelte +9 -6
  129. package/components/editor/PositionEditor.svelte.d.ts +4 -4
  130. package/components/editor/QuoteEditor.svelte +7 -2
  131. package/components/editor/QuoteEditor.svelte.d.ts +4 -4
  132. package/components/editor/Switch.svelte +55 -28
  133. package/components/editor/Switch.svelte.d.ts +4 -4
  134. package/components/editor/TableEditor.svelte +10 -0
  135. package/components/editor/TableEditor.svelte.d.ts +17 -0
  136. package/components/editor/TextEditor.svelte +83 -45
  137. package/components/editor/TextEditor.svelte.d.ts +5 -4
  138. package/components/editor/Toggle.svelte +11 -8
  139. package/components/editor/Toggle.svelte.d.ts +4 -4
  140. package/components/editor/Toolbar.svelte +192 -144
  141. package/components/editor/Toolbar.svelte.d.ts +5 -8
  142. package/components/editor/ToolbarGroup.svelte +18 -23
  143. package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
  144. package/components/editor/ToolbarSpacer.svelte +8 -1
  145. package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
  146. package/components/editor/URLEditor.svelte +6 -8
  147. package/components/editor/URLEditor.svelte.d.ts +3 -3
  148. package/components/editor/UndoState.d.ts +3 -3
  149. package/components/editor/icons/annotate.svg +1 -0
  150. package/components/editor/icons/block.svg +1 -0
  151. package/components/editor/icons/bold.svg +1 -0
  152. package/components/editor/icons/bullets.svg +1 -0
  153. package/components/editor/icons/callout.svg +1 -0
  154. package/components/editor/icons/citation.svg +8 -0
  155. package/components/editor/icons/clear.svg +1 -0
  156. package/components/editor/icons/clipboard.svg +1 -0
  157. package/components/editor/icons/code.svg +1 -0
  158. package/components/editor/icons/columnafter.svg +1 -0
  159. package/components/editor/icons/columnbefore.svg +1 -0
  160. package/components/editor/icons/comment.svg +1 -0
  161. package/components/editor/icons/copy.svg +1 -0
  162. package/components/editor/icons/cut.svg +1 -0
  163. package/components/editor/icons/define.svg +7 -0
  164. package/components/editor/icons/deletecolumn.svg +1 -0
  165. package/components/editor/icons/deleterow.svg +1 -0
  166. package/components/editor/icons/footnote.svg +8 -0
  167. package/components/editor/icons/header1.svg +7 -0
  168. package/components/editor/icons/header2.svg +7 -0
  169. package/components/editor/icons/header3.svg +7 -0
  170. package/components/editor/icons/home.svg +1 -0
  171. package/components/editor/icons/indent.svg +1 -0
  172. package/components/editor/icons/italic.svg +1 -0
  173. package/components/editor/icons/label.svg +1 -0
  174. package/components/editor/icons/left.svg +1 -0
  175. package/components/editor/icons/level.svg +1 -0
  176. package/components/editor/icons/link.svg +1 -0
  177. package/components/editor/icons/list.svg +1 -0
  178. package/components/editor/icons/media.svg +1 -0
  179. package/components/editor/icons/middle.svg +1 -0
  180. package/components/editor/icons/numbers.svg +10 -0
  181. package/components/editor/icons/paragraph.svg +1 -0
  182. package/components/editor/icons/paste.svg +10 -0
  183. package/components/editor/icons/quote.svg +1 -0
  184. package/components/editor/icons/redo.svg +1 -0
  185. package/components/editor/icons/right.svg +1 -0
  186. package/components/editor/icons/rowabove.svg +1 -0
  187. package/components/editor/icons/rowbelow.svg +1 -0
  188. package/components/editor/icons/rule.svg +1 -0
  189. package/components/editor/icons/sub.svg +1 -0
  190. package/components/editor/icons/super.svg +1 -0
  191. package/components/editor/icons/table.svg +1 -0
  192. package/components/editor/icons/text.svg +1 -0
  193. package/components/editor/icons/time.svg +1 -0
  194. package/components/editor/icons/undo.svg +1 -0
  195. package/components/editor/icons/unindent.svg +1 -0
  196. package/components/editor/icons/unlink.svg +1 -0
  197. package/components/page/Acknowledgements.svelte +31 -22
  198. package/components/page/Acknowledgements.svelte.d.ts +4 -4
  199. package/components/page/Authors.svelte +34 -14
  200. package/components/page/Authors.svelte.d.ts +6 -6
  201. package/components/page/BulkReferenceEditor.svelte +53 -22
  202. package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
  203. package/components/page/Chapter.svelte +196 -141
  204. package/components/page/Chapter.svelte.d.ts +3 -3
  205. package/components/page/ChapterContext.d.ts +4 -4
  206. package/components/page/ChapterNumber.svelte +9 -0
  207. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  208. package/components/page/ChapterTitle.svelte +16 -0
  209. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  210. package/components/page/Contexts.d.ts +31 -20
  211. package/components/page/Contexts.js +47 -17
  212. package/components/page/DefinitionView.svelte +115 -86
  213. package/components/page/DefinitionView.svelte.d.ts +3 -3
  214. package/components/page/Description.svelte +27 -18
  215. package/components/page/Description.svelte.d.ts +4 -4
  216. package/components/page/Edition.svelte +127 -74
  217. package/components/page/Edition.svelte.d.ts +4 -4
  218. package/components/page/Editions.svelte +144 -0
  219. package/components/page/Editions.svelte.d.ts +14 -0
  220. package/components/page/Glossary.svelte +57 -48
  221. package/components/page/Glossary.svelte.d.ts +4 -4
  222. package/components/page/Header.svelte +129 -44
  223. package/components/page/Header.svelte.d.ts +6 -6
  224. package/components/page/Index.svelte +114 -80
  225. package/components/page/Index.svelte.d.ts +4 -4
  226. package/components/page/Instructions.svelte +18 -16
  227. package/components/page/Instructions.svelte.d.ts +4 -4
  228. package/components/page/License.svelte +29 -21
  229. package/components/page/License.svelte.d.ts +4 -4
  230. package/components/page/Loading.svelte +102 -12
  231. package/components/page/Loading.svelte.d.ts +6 -2
  232. package/components/page/Media.svelte +77 -51
  233. package/components/page/Media.svelte.d.ts +4 -4
  234. package/components/page/MediaPreview.svelte +26 -8
  235. package/components/page/MediaPreview.svelte.d.ts +3 -3
  236. package/components/page/Muted.svelte +10 -0
  237. package/components/page/Muted.svelte.d.ts +27 -0
  238. package/components/page/Outline.svelte +279 -59
  239. package/components/page/Outline.svelte.d.ts +3 -3
  240. package/components/page/Page.svelte +40 -9
  241. package/components/page/Page.svelte.d.ts +3 -3
  242. package/components/page/PageHeader.svelte +14 -0
  243. package/components/page/PageHeader.svelte.d.ts +18 -0
  244. package/components/page/PageParagraph.svelte +18 -0
  245. package/components/page/PageParagraph.svelte.d.ts +27 -0
  246. package/components/page/PossibleChapter.svelte +7 -7
  247. package/components/page/PossibleChapter.svelte.d.ts +4 -4
  248. package/components/page/PossibleReference.svelte +6 -11
  249. package/components/page/PossibleReference.svelte.d.ts +6 -7
  250. package/components/page/Print.svelte +27 -3
  251. package/components/page/Print.svelte.d.ts +4 -4
  252. package/components/page/Reference.svelte +256 -113
  253. package/components/page/Reference.svelte.d.ts +5 -5
  254. package/components/page/References.svelte +39 -47
  255. package/components/page/References.svelte.d.ts +4 -4
  256. package/components/page/Rows.svelte +54 -0
  257. package/components/page/Rows.svelte.d.ts +27 -0
  258. package/components/page/Search.svelte +86 -63
  259. package/components/page/Search.svelte.d.ts +4 -4
  260. package/components/page/Status.svelte +43 -35
  261. package/components/page/Status.svelte.d.ts +4 -9
  262. package/components/page/SubdomainEditor.svelte +40 -27
  263. package/components/page/SubdomainEditor.svelte.d.ts +4 -4
  264. package/components/page/TableOfContents.svelte +225 -190
  265. package/components/page/TableOfContents.svelte.d.ts +4 -4
  266. package/components/page/TableOfContentsImage.svelte +8 -8
  267. package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
  268. package/components/page/TableOfContentsRow.svelte +96 -33
  269. package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
  270. package/components/page/ThemeEditor.svelte +174 -39
  271. package/components/page/ThemeEditor.svelte.d.ts +4 -4
  272. package/components/page/ThemeEditorPreview.svelte +35 -23
  273. package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
  274. package/components/page/ThemeSetEditor.svelte +15 -13
  275. package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
  276. package/components/page/ThemeVariableEditor.svelte +24 -15
  277. package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
  278. package/components/page/Title.svelte +12 -0
  279. package/components/page/Title.svelte.d.ts +27 -0
  280. package/components/page/Unknown.svelte +25 -21
  281. package/components/page/Unknown.svelte.d.ts +4 -4
  282. package/components/page/margins.js +50 -33
  283. package/index.d.ts +14 -0
  284. package/index.js +14 -0
  285. package/models/CRUD.d.ts +17 -0
  286. package/models/CRUD.js +194 -0
  287. package/models/Firebase.js +17 -15
  288. package/models/book/Book.d.ts +24 -28
  289. package/models/book/Book.js +120 -113
  290. package/models/book/BookMedia.d.ts +3 -3
  291. package/models/book/BookMedia.js +22 -16
  292. package/models/book/BookSaveStatus.d.ts +7 -0
  293. package/models/book/BookSaveStatus.js +8 -0
  294. package/models/book/Chapter.d.ts +46 -39
  295. package/models/book/Chapter.js +180 -198
  296. package/models/book/ChapterID.js +7 -7
  297. package/models/book/Definition.d.ts +1 -1
  298. package/models/book/Edition.d.ts +62 -60
  299. package/models/book/Edition.js +385 -303
  300. package/models/book/Reference.d.ts +24 -0
  301. package/models/book/Reference.js +78 -0
  302. package/models/book/Schema.d.ts +169 -0
  303. package/models/book/Schema.js +114 -0
  304. package/models/book/Theme.d.ts +44 -37
  305. package/models/book/Theme.js +452 -52
  306. package/models/book/ThemeColors.d.ts +1 -1
  307. package/models/book/Words.d.ts +2 -0
  308. package/models/book/Words.js +110 -0
  309. package/models/chapter/AtomNode.d.ts +4 -4
  310. package/models/chapter/AtomNode.js +20 -13
  311. package/models/chapter/BlockNode.d.ts +9 -10
  312. package/models/chapter/BlockNode.js +32 -13
  313. package/models/chapter/BlocksNode.d.ts +10 -10
  314. package/models/chapter/BlocksNode.js +315 -120
  315. package/models/chapter/BlocksNode.test.js +494 -228
  316. package/models/chapter/Bookkeeping.d.ts +1 -1
  317. package/models/chapter/CalloutNode.d.ts +3 -3
  318. package/models/chapter/CalloutNode.js +34 -12
  319. package/models/chapter/Caret.d.ts +9 -7
  320. package/models/chapter/Caret.js +11 -6
  321. package/models/chapter/ChapterNode.d.ts +11 -11
  322. package/models/chapter/ChapterNode.js +70 -33
  323. package/models/chapter/CitationsNode.d.ts +3 -3
  324. package/models/chapter/CitationsNode.js +31 -12
  325. package/models/chapter/CodeNode.d.ts +11 -6
  326. package/models/chapter/CodeNode.js +143 -34
  327. package/models/chapter/CommentNode.d.ts +5 -5
  328. package/models/chapter/CommentNode.js +29 -13
  329. package/models/chapter/DefinitionNode.d.ts +2 -2
  330. package/models/chapter/DefinitionNode.js +15 -7
  331. package/models/chapter/Edit.d.ts +3 -3
  332. package/models/chapter/EmbedNode.d.ts +9 -5
  333. package/models/chapter/EmbedNode.js +108 -35
  334. package/models/chapter/ErrorNode.d.ts +2 -2
  335. package/models/chapter/ErrorNode.js +34 -12
  336. package/models/chapter/FootnoteNode.d.ts +5 -5
  337. package/models/chapter/FootnoteNode.js +34 -16
  338. package/models/chapter/FormatNode.d.ts +10 -10
  339. package/models/chapter/FormatNode.js +237 -106
  340. package/models/chapter/FormatNode.test.js +87 -45
  341. package/models/chapter/InlineCodeNode.d.ts +2 -2
  342. package/models/chapter/InlineCodeNode.js +22 -9
  343. package/models/chapter/LabelNode.d.ts +4 -4
  344. package/models/chapter/LabelNode.js +31 -13
  345. package/models/chapter/LinkNode.d.ts +2 -2
  346. package/models/chapter/LinkNode.js +21 -9
  347. package/models/chapter/ListNode.d.ts +8 -8
  348. package/models/chapter/ListNode.js +99 -38
  349. package/models/chapter/ListNode.test.js +29 -24
  350. package/models/chapter/MetadataNode.d.ts +3 -3
  351. package/models/chapter/MetadataNode.js +13 -5
  352. package/models/chapter/Node.d.ts +5 -3
  353. package/models/chapter/Node.js +76 -29
  354. package/models/chapter/Node.test.js +20 -18
  355. package/models/chapter/ParagraphNode.d.ts +6 -6
  356. package/models/chapter/ParagraphNode.js +84 -29
  357. package/models/chapter/ParagraphNode.test.js +22 -13
  358. package/models/chapter/Parser.d.ts +25 -25
  359. package/models/chapter/Parser.js +201 -189
  360. package/models/chapter/Parser.test.js +16 -16
  361. package/models/chapter/Position.d.ts +1 -1
  362. package/models/chapter/QuoteNode.d.ts +6 -6
  363. package/models/chapter/QuoteNode.js +61 -23
  364. package/models/chapter/RootNode.d.ts +4 -4
  365. package/models/chapter/RuleNode.d.ts +2 -2
  366. package/models/chapter/RuleNode.js +31 -11
  367. package/models/chapter/TableNode.d.ts +8 -6
  368. package/models/chapter/TableNode.js +89 -34
  369. package/models/chapter/TableNode.test.js +22 -24
  370. package/models/chapter/TextNode.d.ts +6 -6
  371. package/models/chapter/TextNode.js +72 -32
  372. package/models/chapter/TextNode.test.js +4 -4
  373. package/models/loadEdition.d.ts +1 -1
  374. package/models/loadEdition.js +10 -6
  375. package/package.json +104 -25
  376. package/util/getSubdomain.js +8 -6
  377. package/util/isMobile.js +1 -1
  378. package/util/mineReference.d.ts +3 -2
  379. package/util/mineReference.js +67 -29
  380. package/util/scrollToEyeLevel.js +6 -1
  381. package/components/chapter/renderPosition.d.ts +0 -3
  382. package/components/chapter/renderPosition.js +0 -4
  383. package/components/editor/ToolbarIcon.svelte +0 -22
  384. package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
  385. package/components/page/Alert.svelte +0 -11
  386. package/components/page/Alert.svelte.d.ts +0 -23
  387. package/components/page/Revisions.svelte +0 -124
  388. package/components/page/Revisions.svelte.d.ts +0 -14
  389. package/models/BookLoader.d.ts +0 -2
  390. package/models/BookLoader.js +0 -67
  391. package/models/Firestore.d.ts +0 -22
  392. package/models/Firestore.js +0 -194
  393. package/models/chapter/ReferenceNode.d.ts +0 -29
  394. package/models/chapter/ReferenceNode.js +0 -48
@@ -1,28 +1,44 @@
1
- import AtomNode from "./AtomNode";
2
- import FormatNode from "./FormatNode";
1
+ import AtomNode from './AtomNode';
2
+ import FormatNode from './FormatNode';
3
3
  export default class CommentNode extends AtomNode {
4
4
  constructor(comment) {
5
5
  super(comment.withTextIfEmpty());
6
6
  }
7
- getType() { return "comment"; }
8
- toText() { return ""; }
9
- toHTML() { return `(${this.getMeta().toHTML()})`; }
10
- getDefaultCaret() { return this.getMeta().getFirstCaret(); }
7
+ getType() {
8
+ return 'comment';
9
+ }
10
+ toText() {
11
+ return '';
12
+ }
13
+ toHTML() {
14
+ return `(${this.getMeta().toHTML()})`;
15
+ }
16
+ getDefaultCaret() {
17
+ return this.getMeta().getFirstCaret();
18
+ }
11
19
  toBookdown(format) {
12
20
  const previousText = format?.getPreviousTextOrAtom(this)?.toBookdown();
13
21
  // Insert a space before the % if there isn't one before this.
14
- return `${previousText?.endsWith(" ") ? "" : " "}%${this.getMeta().toBookdown()}%`;
22
+ return `${previousText?.endsWith(' ') ? '' : ' '}%${this.getMeta().toBookdown()}%`;
23
+ }
24
+ copy() {
25
+ return new CommentNode(this.getMeta().copy());
15
26
  }
16
- copy() { return new CommentNode(this.getMeta().copy()); }
17
27
  withChildReplaced(node, replacement) {
18
- return node instanceof FormatNode && replacement instanceof FormatNode && node === this.getMeta() ?
19
- new CommentNode(replacement) :
20
- undefined;
28
+ return node instanceof FormatNode &&
29
+ replacement instanceof FormatNode &&
30
+ node === this.getMeta()
31
+ ? new CommentNode(replacement)
32
+ : undefined;
21
33
  }
22
34
  getParentOf(node) {
23
- return node === this.getMeta() ? this : this.getMeta().getParentOf(node);
35
+ return node === this.getMeta()
36
+ ? this
37
+ : this.getMeta().getParentOf(node);
38
+ }
39
+ withMeta(comment) {
40
+ return new CommentNode(comment);
24
41
  }
25
- withMeta(comment) { return new CommentNode(comment); }
26
42
  withContentInRange(range) {
27
43
  const newFormat = this.getMeta().withContentInRange(range);
28
44
  if (newFormat === undefined)
@@ -1,5 +1,5 @@
1
- import MetadataNode from "./MetadataNode";
2
- import TextNode from "./TextNode";
1
+ import MetadataNode from './MetadataNode';
2
+ import TextNode from './TextNode';
3
3
  export default class DefinitionNode extends MetadataNode<string> {
4
4
  constructor(phrase?: TextNode, glossaryID?: string);
5
5
  getType(): string;
@@ -1,20 +1,28 @@
1
- import MetadataNode from "./MetadataNode";
2
- import TextNode from "./TextNode";
1
+ import MetadataNode from './MetadataNode';
2
+ import TextNode from './TextNode';
3
3
  export default class DefinitionNode extends MetadataNode {
4
- constructor(phrase, glossaryID = "") {
4
+ constructor(phrase, glossaryID = '') {
5
5
  super(phrase === undefined ? new TextNode() : phrase, glossaryID);
6
6
  }
7
- getType() { return "definition"; }
7
+ getType() {
8
+ return 'definition';
9
+ }
8
10
  toText() {
9
11
  return this.getText().toText();
10
12
  }
11
- toHTML() { return `${this.getText().toHTML()}`; }
13
+ toHTML() {
14
+ return `${this.getText().toHTML()}`;
15
+ }
12
16
  toBookdown() {
13
17
  return `~${this.getText().toBookdown()}~${this.getMeta()}`;
14
18
  }
15
19
  copy() {
16
20
  return new DefinitionNode(this.getText(), this.getMeta());
17
21
  }
18
- withMeta(meta) { return new DefinitionNode(this.getText(), meta); }
19
- withText(text) { return new DefinitionNode(text, this.getMeta()); }
22
+ withMeta(meta) {
23
+ return new DefinitionNode(this.getText(), meta);
24
+ }
25
+ withText(text) {
26
+ return new DefinitionNode(text, this.getMeta());
27
+ }
20
28
  }
@@ -1,6 +1,6 @@
1
- import type { CaretRange } from "./Caret";
2
- import type Node from "./Node";
3
- declare type Edit = undefined | {
1
+ import type { CaretRange } from './Caret';
2
+ import type Node from './Node';
3
+ type Edit = undefined | {
4
4
  root: Node;
5
5
  range: CaretRange;
6
6
  };
@@ -1,8 +1,10 @@
1
- import type Node from "./Node";
2
- import type Position from "./Position";
3
- import FormatNode from "./FormatNode";
4
- import BlockNode from "./BlockNode";
5
- import type { CaretRange } from "./Caret";
1
+ import type Node from './Node';
2
+ import type Position from './Position';
3
+ import FormatNode from './FormatNode';
4
+ import BlockNode from './BlockNode';
5
+ import type { CaretRange } from './Caret';
6
+ import type RootNode from './RootNode';
7
+ import type Caret from './Caret';
6
8
  export default class EmbedNode extends BlockNode {
7
9
  #private;
8
10
  constructor(url: string, description: string, caption?: FormatNode, credit?: FormatNode, position?: Position);
@@ -37,4 +39,6 @@ export default class EmbedNode extends BlockNode {
37
39
  withCredit(credit: FormatNode): EmbedNode;
38
40
  withPosition(position: Position): EmbedNode;
39
41
  withContentInRange(range: CaretRange): this | undefined;
42
+ nextWord(): Caret;
43
+ previousWord(root: RootNode): Caret;
40
44
  }
@@ -1,8 +1,8 @@
1
- import FormatNode from "./FormatNode";
2
- import TextNode from "./TextNode";
3
- import BlockNode from "./BlockNode";
1
+ import FormatNode from './FormatNode';
2
+ import TextNode from './TextNode';
3
+ import BlockNode from './BlockNode';
4
4
  // This is what we use to encode URLs in the URL field of the embed node.
5
- const URL_SEPARATOR = "*";
5
+ const URL_SEPARATOR = '*';
6
6
  export default class EmbedNode extends BlockNode {
7
7
  /**
8
8
  * The URL is actually a list of up to two URLs. The first is a full-size image URL, the second is a smaller image.
@@ -13,26 +13,61 @@ export default class EmbedNode extends BlockNode {
13
13
  #caption;
14
14
  #credit;
15
15
  #position;
16
- constructor(url, description, caption, credit, position = "|") {
16
+ constructor(url, description, caption, credit, position = '|') {
17
17
  super();
18
18
  this.#urls = url;
19
19
  this.#description = description;
20
- this.#caption = caption === undefined ? new FormatNode("", [new TextNode()]) : caption.withTextIfEmpty();
21
- this.#credit = credit == undefined ? new FormatNode("", [new TextNode()]) : credit.withTextIfEmpty();
20
+ this.#caption =
21
+ caption === undefined
22
+ ? new FormatNode('', [new TextNode()])
23
+ : caption.withTextIfEmpty();
24
+ this.#credit =
25
+ credit == undefined
26
+ ? new FormatNode('', [new TextNode()])
27
+ : credit.withTextIfEmpty();
22
28
  this.#position = position;
23
29
  }
24
- getType() { return "embed"; }
25
- getURL() { return this.#urls.split(URL_SEPARATOR)[0]; }
26
- getSmallURL() { return this.isLocal() ? "images/small/" + this.getURL() : this.hasSmallURL() ? this.#urls.split(URL_SEPARATOR)[1] : this.getURL(); }
27
- hasSmallURL() { return this.#urls.split(URL_SEPARATOR).length > 1 && this.#urls.split(URL_SEPARATOR)[1].trim().length > 0; }
28
- isHosted() { return this.#urls.includes("bookish"); }
29
- isLocal() { return !this.#urls.startsWith("http"); }
30
- getDescription() { return this.#description; }
31
- getCaption() { return this.#caption; }
32
- getCredit() { return this.#credit; }
33
- getPosition() { return this.#position; }
34
- getFormats() { return [this.#credit, this.#caption]; }
35
- getChildren() { return [this.#credit, this.#caption]; }
30
+ getType() {
31
+ return 'embed';
32
+ }
33
+ getURL() {
34
+ return this.#urls.split(URL_SEPARATOR)[0];
35
+ }
36
+ getSmallURL() {
37
+ return this.isLocal()
38
+ ? 'images/small/' + this.getURL()
39
+ : this.hasSmallURL()
40
+ ? this.#urls.split(URL_SEPARATOR)[1]
41
+ : this.getURL();
42
+ }
43
+ hasSmallURL() {
44
+ return (this.#urls.split(URL_SEPARATOR).length > 1 &&
45
+ this.#urls.split(URL_SEPARATOR)[1].trim().length > 0);
46
+ }
47
+ isHosted() {
48
+ return this.#urls.includes('bookish');
49
+ }
50
+ isLocal() {
51
+ return this.#urls.length > 0 && !this.#urls.startsWith('http');
52
+ }
53
+ getDescription() {
54
+ return this.#description;
55
+ }
56
+ getCaption() {
57
+ return this.#caption;
58
+ }
59
+ getCredit() {
60
+ return this.#credit;
61
+ }
62
+ getPosition() {
63
+ return this.#position;
64
+ }
65
+ getFormats() {
66
+ return [this.#caption, this.#credit];
67
+ }
68
+ getChildren() {
69
+ return [this.#caption, this.#credit];
70
+ }
36
71
  getParentOf(node) {
37
72
  if (node === this.#caption || node === this.#credit)
38
73
  return this;
@@ -43,8 +78,12 @@ export default class EmbedNode extends BlockNode {
43
78
  if (creditParent)
44
79
  return creditParent;
45
80
  }
46
- toText() { return this.#caption.toText(); }
47
- toHTML() { return `<img src="${this.getURL()}" alt="${this.getDescription()}" />`; }
81
+ toText() {
82
+ return this.#caption.toText();
83
+ }
84
+ toHTML() {
85
+ return `<img src="${this.getURL()}" alt="${this.getDescription()}" />`;
86
+ }
48
87
  toBookdown() {
49
88
  return `|${this.#urls}|${this.#description}|${this.#caption.toBookdown()}|${this.#credit.toBookdown()}|`;
50
89
  }
@@ -53,37 +92,71 @@ export default class EmbedNode extends BlockNode {
53
92
  url: this.#urls,
54
93
  alt: this.#description,
55
94
  caption: this.#caption.toText(),
56
- credit: this.#credit.toText()
95
+ credit: this.#credit.toText(),
57
96
  };
58
97
  }
59
98
  copy() {
60
99
  return new EmbedNode(this.#urls, this.#description, this.#caption.copy(), this.#credit.copy(), this.#position);
61
100
  }
62
101
  withChildReplaced(node, replacement) {
63
- const newCaption = (node === this.#caption && (replacement === undefined || replacement instanceof FormatNode)) ? replacement : this.#caption;
64
- const newCredit = (node === this.#credit && (replacement === undefined || replacement instanceof FormatNode)) ? replacement : this.#credit;
65
- return newCaption || newCredit ?
66
- new EmbedNode(this.#urls, this.#description, newCaption, newCredit, this.#position) :
67
- undefined;
102
+ const newCaption = node === this.#caption &&
103
+ (replacement === undefined || replacement instanceof FormatNode)
104
+ ? replacement
105
+ : this.#caption;
106
+ const newCredit = node === this.#credit &&
107
+ (replacement === undefined || replacement instanceof FormatNode)
108
+ ? replacement
109
+ : this.#credit;
110
+ return newCaption || newCredit
111
+ ? new EmbedNode(this.#urls, this.#description, newCaption, newCredit, this.#position)
112
+ : undefined;
68
113
  }
69
114
  withURL(url) {
70
115
  // If the URL is a YouTube URL, convert to an embed URL, since a raw YouTube URL is never valid for embedding.
71
- if (url.includes("www.youtube.com/watch?v="))
116
+ if (url.includes('www.youtube.com/watch?v='))
72
117
  url = url.replace('/watch?v=', '/embed/');
73
118
  return new EmbedNode(url, this.#description, this.#caption, this.#credit, this.#position);
74
119
  }
75
- withURLs(url, thumbnail) { return new EmbedNode(url + URL_SEPARATOR + thumbnail, this.#description, this.#caption, this.#credit, this.#position); }
76
- withDescription(description) { return new EmbedNode(this.#urls, description, this.#caption, this.#credit, this.#position); }
77
- withCaption(caption) { return new EmbedNode(this.#urls, this.#description, caption, this.#credit, this.#position); }
78
- withCredit(credit) { return new EmbedNode(this.#urls, this.#description, this.#caption, credit, this.#position); }
79
- withPosition(position) { return new EmbedNode(this.#urls, this.#description, this.#caption, this.#credit, position); }
120
+ withURLs(url, thumbnail) {
121
+ return new EmbedNode(url + URL_SEPARATOR + thumbnail, this.#description, this.#caption, this.#credit, this.#position);
122
+ }
123
+ withDescription(description) {
124
+ return new EmbedNode(this.#urls, description, this.#caption, this.#credit, this.#position);
125
+ }
126
+ withCaption(caption) {
127
+ return new EmbedNode(this.#urls, this.#description, caption, this.#credit, this.#position);
128
+ }
129
+ withCredit(credit) {
130
+ return new EmbedNode(this.#urls, this.#description, this.#caption, credit, this.#position);
131
+ }
132
+ withPosition(position) {
133
+ return new EmbedNode(this.#urls, this.#description, this.#caption, this.#credit, position);
134
+ }
80
135
  withContentInRange(range) {
81
136
  if (!this.contains(range.start.node) && !this.contains(range.end.node))
82
137
  return this.copy();
83
- const newCredit = this.#caption.contains(range.start.node) ? new FormatNode("", [new TextNode()]) : this.#credit.withContentInRange(range);
84
- const newCaption = this.#credit.contains(range.end.node) ? new FormatNode("", [new TextNode()]) : this.#caption.withContentInRange(range);
138
+ const newCredit = this.#credit.contains(range.end.node) ||
139
+ this.#credit.contains(range.start.node)
140
+ ? this.#credit.withContentInRange(range)
141
+ : new FormatNode('', [new TextNode()]);
142
+ const newCaption = this.#caption.contains(range.start.node) ||
143
+ this.#caption.contains(range.end.node)
144
+ ? this.#caption.withContentInRange(range)
145
+ : new FormatNode('', [new TextNode()]);
85
146
  if (newCaption === undefined || newCredit === undefined)
86
147
  return;
87
148
  return new EmbedNode(this.#urls, this.#description, newCaption, newCredit, this.#position);
88
149
  }
150
+ nextWord() {
151
+ return this.#caption.getFirstCaret();
152
+ }
153
+ previousWord(root) {
154
+ const previous = root.getPreviousTextOrAtom(this.#caption.getFirstTextNode());
155
+ return previous
156
+ ? {
157
+ node: previous,
158
+ index: previous instanceof TextNode ? previous.getLength() : 0,
159
+ }
160
+ : { node: this, index: 0 };
161
+ }
89
162
  }
@@ -1,5 +1,5 @@
1
- import BlockNode from "./BlockNode";
2
- import type Node from "./Node";
1
+ import BlockNode from './BlockNode';
2
+ import type Node from './Node';
3
3
  export default class ErrorNode extends BlockNode {
4
4
  #private;
5
5
  constructor(text: string | undefined, error: string);
@@ -1,4 +1,4 @@
1
- import BlockNode from "./BlockNode";
1
+ import BlockNode from './BlockNode';
2
2
  export default class ErrorNode extends BlockNode {
3
3
  #text;
4
4
  #error;
@@ -7,15 +7,37 @@ export default class ErrorNode extends BlockNode {
7
7
  this.#text = text;
8
8
  this.#error = error;
9
9
  }
10
- getType() { return "error"; }
11
- getError() { return this.#error; }
12
- getFormats() { return []; }
13
- toText() { return ""; }
14
- toBookdown() { return this.#text ?? ""; }
15
- toHTML() { return this.#text ?? ""; }
16
- getChildren() { return []; }
17
- getParentOf() { return undefined; }
18
- copy() { return new ErrorNode(this.#text, this.#error); }
19
- withChildReplaced() { return undefined; }
20
- withContentInRange() { return this.copy(); }
10
+ getType() {
11
+ return 'error';
12
+ }
13
+ getError() {
14
+ return this.#error;
15
+ }
16
+ getFormats() {
17
+ return [];
18
+ }
19
+ toText() {
20
+ return '';
21
+ }
22
+ toBookdown() {
23
+ return this.#text ?? '';
24
+ }
25
+ toHTML() {
26
+ return this.#text ?? '';
27
+ }
28
+ getChildren() {
29
+ return [];
30
+ }
31
+ getParentOf() {
32
+ return undefined;
33
+ }
34
+ copy() {
35
+ return new ErrorNode(this.#text, this.#error);
36
+ }
37
+ withChildReplaced() {
38
+ return undefined;
39
+ }
40
+ withContentInRange() {
41
+ return this.copy();
42
+ }
21
43
  }
@@ -1,8 +1,8 @@
1
- import FormatNode from "./FormatNode";
2
- import AtomNode from "./AtomNode";
3
- import type Node from "./Node";
4
- import type Caret from "./Caret";
5
- import type { CaretRange } from "./Caret";
1
+ import FormatNode from './FormatNode';
2
+ import AtomNode from './AtomNode';
3
+ import type Node from './Node';
4
+ import type Caret from './Caret';
5
+ import type { CaretRange } from './Caret';
6
6
  export default class FootnoteNode extends AtomNode<FormatNode> {
7
7
  constructor(content?: FormatNode);
8
8
  getType(): string;
@@ -1,25 +1,43 @@
1
- import FormatNode from "./FormatNode";
2
- import AtomNode from "./AtomNode";
3
- import TextNode from "./TextNode";
1
+ import FormatNode from './FormatNode';
2
+ import AtomNode from './AtomNode';
3
+ import TextNode from './TextNode';
4
4
  export default class FootnoteNode extends AtomNode {
5
5
  constructor(content) {
6
- super(content === undefined ? new FormatNode("", [new TextNode()]) : content.withTextIfEmpty());
7
- }
8
- getType() { return "footnote"; }
9
- getDefaultCaret() { return this.getMeta().getFirstCaret(); }
10
- toText() { return this.getMeta().toText(); }
11
- toBookdown() { return `{${this.getMeta().toBookdown()}}`; }
12
- toHTML() { return `(${this.getMeta().toHTML()})`; }
13
- copy() { return new FootnoteNode(this.getMeta().copy()); }
6
+ super(content === undefined
7
+ ? new FormatNode('', [new TextNode()])
8
+ : content.withTextIfEmpty());
9
+ }
10
+ getType() {
11
+ return 'footnote';
12
+ }
13
+ getDefaultCaret() {
14
+ return this.getMeta().getFirstCaret();
15
+ }
16
+ toText() {
17
+ return this.getMeta().toText();
18
+ }
19
+ toBookdown() {
20
+ return `{${this.getMeta().toBookdown()}}`;
21
+ }
22
+ toHTML() {
23
+ return `(${this.getMeta().toHTML()})`;
24
+ }
25
+ copy() {
26
+ return new FootnoteNode(this.getMeta().copy());
27
+ }
14
28
  getParentOf(node) {
15
- return node === this.getMeta() ? this : this.getMeta().getParentOf(node);
29
+ return node === this.getMeta()
30
+ ? this
31
+ : this.getMeta().getParentOf(node);
16
32
  }
17
33
  withChildReplaced(node, replacement) {
18
- return node === this.getMeta() && replacement !== undefined ?
19
- new FootnoteNode(replacement) :
20
- undefined;
34
+ return node === this.getMeta() && replacement !== undefined
35
+ ? new FootnoteNode(replacement)
36
+ : undefined;
37
+ }
38
+ withMeta(footnote) {
39
+ return new FootnoteNode(footnote);
21
40
  }
22
- withMeta(footnote) { return new FootnoteNode(footnote); }
23
41
  withContentInRange(range) {
24
42
  const newFormat = this.getMeta().withContentInRange(range);
25
43
  if (newFormat === undefined)
@@ -1,13 +1,13 @@
1
- import Node from "./Node";
2
- import type ErrorNode from "./ErrorNode";
3
- import TextNode from "./TextNode";
4
- import type Caret from "./Caret";
5
- import { type CaretRange } from "./Caret";
6
- import MetadataNode from "./MetadataNode";
7
- import AtomNode from "./AtomNode";
8
- import type Edit from "./Edit";
9
- export declare type Format = "" | "*" | "_" | "^" | "v";
10
- export declare type FormatNodeSegmentType = FormatNode | TextNode | ErrorNode | MetadataNode<any> | AtomNode<any>;
1
+ import Node from './Node';
2
+ import type ErrorNode from './ErrorNode';
3
+ import TextNode from './TextNode';
4
+ import type Caret from './Caret';
5
+ import { type CaretRange } from './Caret';
6
+ import MetadataNode from './MetadataNode';
7
+ import AtomNode from './AtomNode';
8
+ import type Edit from './Edit';
9
+ export type Format = '' | '*' | '_' | '^' | 'v';
10
+ export type FormatNodeSegmentType = FormatNode | TextNode | ErrorNode | MetadataNode<any> | AtomNode<any>;
11
11
  export default class FormatNode extends Node {
12
12
  #private;
13
13
  constructor(format: Format, segments: FormatNodeSegmentType[]);