bookish-press 0.4.47 → 0.4.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/components/Auth.svelte +55 -0
  2. package/components/Auth.svelte.d.ts +16 -0
  3. package/{src/lib/components/Authentication.ts → components/Authentication.d.ts} +0 -2
  4. package/components/Authentication.js +1 -0
  5. package/{src/lib/components → components}/BookPreview.svelte +22 -27
  6. package/components/BookPreview.svelte.d.ts +18 -0
  7. package/{src/lib/components → components}/External.svelte +1 -2
  8. package/components/External.svelte.d.ts +18 -0
  9. package/components/Link.svelte +51 -0
  10. package/components/Link.svelte.d.ts +18 -0
  11. package/{src/lib/components → components}/app/BookList.svelte +3 -6
  12. package/components/app/BookList.svelte.d.ts +18 -0
  13. package/{src/lib/components → components}/app/Button.svelte +4 -5
  14. package/components/app/Button.svelte.d.ts +22 -0
  15. package/{src/lib/components → components}/app/Feedback.svelte +7 -11
  16. package/components/app/Feedback.svelte.d.ts +18 -0
  17. package/{src/lib/components → components}/app/Head.svelte +1 -2
  18. package/components/app/Head.svelte.d.ts +18 -0
  19. package/{src/lib/components → components}/app/Large.svelte +0 -0
  20. package/components/app/Large.svelte.d.ts +27 -0
  21. package/{src/lib/components → components}/app/Lead.svelte +0 -0
  22. package/components/app/Lead.svelte.d.ts +27 -0
  23. package/{src/lib/components → components}/app/Link.svelte +3 -4
  24. package/components/app/Link.svelte.d.ts +20 -0
  25. package/{src/lib/components → components}/app/Options.svelte +4 -5
  26. package/components/app/Options.svelte.d.ts +19 -0
  27. package/{src/lib/components → components}/app/Paragraph.svelte +1 -2
  28. package/components/app/Paragraph.svelte.d.ts +18 -0
  29. package/{src/lib/components → components}/app/Section.svelte +0 -0
  30. package/components/app/Section.svelte.d.ts +27 -0
  31. package/{src/lib/components → components}/app/Table.svelte +0 -0
  32. package/components/app/Table.svelte.d.ts +27 -0
  33. package/{src/lib/components → components}/app/TextInput.svelte +9 -12
  34. package/components/app/TextInput.svelte.d.ts +22 -0
  35. package/{src/lib/components → components}/chapter/Atom.svelte +12 -18
  36. package/components/chapter/Atom.svelte.d.ts +19 -0
  37. package/components/chapter/Block.svelte +37 -0
  38. package/components/chapter/Block.svelte.d.ts +17 -0
  39. package/{src/lib/components → components}/chapter/Callout.svelte +3 -6
  40. package/components/chapter/Callout.svelte.d.ts +17 -0
  41. package/{src/lib/components → components}/chapter/CaptionedCode.svelte +13 -21
  42. package/components/chapter/CaptionedCode.svelte.d.ts +17 -0
  43. package/{src/lib/components → components}/chapter/ChapterBody.svelte +9 -13
  44. package/components/chapter/ChapterBody.svelte.d.ts +19 -0
  45. package/{src/lib/components → components}/chapter/Citations.svelte +33 -34
  46. package/components/chapter/Citations.svelte.d.ts +17 -0
  47. package/{src/lib/components → components}/chapter/Code.svelte +60 -64
  48. package/components/chapter/Code.svelte.d.ts +22 -0
  49. package/{src/lib/components → components}/chapter/Comment.svelte +18 -30
  50. package/components/chapter/Comment.svelte.d.ts +17 -0
  51. package/{src/lib/components → components}/chapter/Definition.svelte +17 -23
  52. package/components/chapter/Definition.svelte.d.ts +17 -0
  53. package/{src/lib/components → components}/chapter/Embed.svelte +77 -97
  54. package/components/chapter/Embed.svelte.d.ts +20 -0
  55. package/components/chapter/ErrorMessage.svelte +9 -0
  56. package/components/chapter/ErrorMessage.svelte.d.ts +17 -0
  57. package/components/chapter/ExtendedPrism.d.ts +2 -0
  58. package/{src/lib/components → components}/chapter/ExtendedPrism.js +0 -0
  59. package/{src/lib/components → components}/chapter/Figure.svelte +26 -34
  60. package/components/chapter/Figure.svelte.d.ts +24 -0
  61. package/{src/lib/components → components}/chapter/Footnote.svelte +20 -32
  62. package/components/chapter/Footnote.svelte.d.ts +19 -0
  63. package/{src/lib/components → components}/chapter/Format.svelte +34 -39
  64. package/components/chapter/Format.svelte.d.ts +19 -0
  65. package/{src/lib/components → components}/chapter/InlineCode.svelte +5 -9
  66. package/components/chapter/InlineCode.svelte.d.ts +17 -0
  67. package/{src/lib/components → components}/chapter/Label.svelte +14 -23
  68. package/components/chapter/Label.svelte.d.ts +17 -0
  69. package/{src/lib/components → components}/chapter/Link.svelte +21 -27
  70. package/components/chapter/Link.svelte.d.ts +17 -0
  71. package/{src/lib/components → components}/chapter/List.svelte +3 -5
  72. package/components/chapter/List.svelte.d.ts +17 -0
  73. package/{src/lib/components → components}/chapter/Marginal.svelte +41 -54
  74. package/components/chapter/Marginal.svelte.d.ts +22 -0
  75. package/{src/lib/components → components}/chapter/Paragraph.svelte +20 -25
  76. package/components/chapter/Paragraph.svelte.d.ts +18 -0
  77. package/{src/lib/components → components}/chapter/Positioned.svelte +1 -4
  78. package/components/chapter/Positioned.svelte.d.ts +19 -0
  79. package/{src/lib/components → components}/chapter/Problem.svelte +0 -0
  80. package/components/chapter/Problem.svelte.d.ts +27 -0
  81. package/components/chapter/Python.svelte +128 -0
  82. package/components/chapter/Python.svelte.d.ts +18 -0
  83. package/{src/lib/components → components}/chapter/Quote.svelte +19 -13
  84. package/components/chapter/Quote.svelte.d.ts +17 -0
  85. package/{src/lib/components → components}/chapter/Rule.svelte +1 -4
  86. package/components/chapter/Rule.svelte.d.ts +17 -0
  87. package/{src/lib/components → components}/chapter/Table.svelte +7 -11
  88. package/components/chapter/Table.svelte.d.ts +17 -0
  89. package/components/chapter/Text.svelte +87 -0
  90. package/components/chapter/Text.svelte.d.ts +18 -0
  91. package/components/editor/BookishEditor.svelte +884 -0
  92. package/components/editor/BookishEditor.svelte.d.ts +25 -0
  93. package/components/editor/CalloutEditor.svelte +10 -0
  94. package/components/editor/CalloutEditor.svelte.d.ts +17 -0
  95. package/{src/lib/components → components}/editor/CaptionedCodeEditor.svelte +6 -10
  96. package/components/editor/CaptionedCodeEditor.svelte.d.ts +17 -0
  97. package/components/editor/CaretContext.d.ts +50 -0
  98. package/components/editor/CaretContext.js +1 -0
  99. package/{src/lib/components/editor/CaretState.ts → components/editor/CaretState.d.ts} +7 -6
  100. package/components/editor/CaretState.js +1 -0
  101. package/{src/lib/components/editor/CaretUtilities.ts → components/editor/CaretUtilities.d.ts} +0 -1
  102. package/components/editor/CaretUtilities.js +1 -0
  103. package/{src/lib/components → components}/editor/CaretView.svelte +20 -25
  104. package/components/editor/CaretView.svelte.d.ts +25 -0
  105. package/components/editor/CitationsEditor.svelte +53 -0
  106. package/components/editor/CitationsEditor.svelte.d.ts +17 -0
  107. package/{src/lib/components/editor/Clipboard.ts → components/editor/Clipboard.d.ts} +1 -2
  108. package/components/editor/Clipboard.js +1 -0
  109. package/{src/lib/components/editor/Command.ts → components/editor/Command.d.ts} +2 -8
  110. package/components/editor/Command.js +1 -0
  111. package/components/editor/Commands.d.ts +3 -0
  112. package/{src/lib/components/editor/Commands.ts → components/editor/Commands.js} +315 -730
  113. package/components/editor/ConfirmButton.svelte +49 -0
  114. package/components/editor/ConfirmButton.svelte.d.ts +19 -0
  115. package/components/editor/DefinitionEditor.svelte +36 -0
  116. package/components/editor/DefinitionEditor.svelte.d.ts +17 -0
  117. package/components/editor/EmbedEditor.svelte +137 -0
  118. package/components/editor/EmbedEditor.svelte.d.ts +17 -0
  119. package/{src/lib/components → components}/editor/Icon.svelte +1 -2
  120. package/components/editor/Icon.svelte.d.ts +16 -0
  121. package/{src/lib/components → components}/editor/ImageChooser.svelte +19 -24
  122. package/components/editor/ImageChooser.svelte.d.ts +18 -0
  123. package/components/editor/InlineCodeEditor.svelte +12 -0
  124. package/components/editor/InlineCodeEditor.svelte.d.ts +17 -0
  125. package/{src/lib/components → components}/editor/LabelEditor.svelte +9 -14
  126. package/components/editor/LabelEditor.svelte.d.ts +17 -0
  127. package/{src/lib/components → components}/editor/LanguageEditor.svelte +5 -8
  128. package/components/editor/LanguageEditor.svelte.d.ts +17 -0
  129. package/components/editor/LinkEditor.svelte +100 -0
  130. package/components/editor/LinkEditor.svelte.d.ts +17 -0
  131. package/{src/lib/components → components}/editor/Note.svelte +0 -0
  132. package/components/editor/Note.svelte.d.ts +27 -0
  133. package/{src/lib/components → components}/editor/Permissions.svelte +36 -43
  134. package/components/editor/Permissions.svelte.d.ts +20 -0
  135. package/components/editor/PositionEditor.svelte +17 -0
  136. package/components/editor/PositionEditor.svelte.d.ts +18 -0
  137. package/components/editor/QuoteEditor.svelte +10 -0
  138. package/components/editor/QuoteEditor.svelte.d.ts +17 -0
  139. package/{src/lib/components → components}/editor/Switch.svelte +11 -14
  140. package/components/editor/Switch.svelte.d.ts +20 -0
  141. package/components/editor/TableEditor.svelte +10 -0
  142. package/components/editor/TableEditor.svelte.d.ts +17 -0
  143. package/{src/lib/components → components}/editor/TextEditor.svelte +89 -101
  144. package/components/editor/TextEditor.svelte.d.ts +24 -0
  145. package/components/editor/Toggle.svelte +41 -0
  146. package/components/editor/Toggle.svelte.d.ts +19 -0
  147. package/components/editor/Toolbar.svelte +249 -0
  148. package/components/editor/Toolbar.svelte.d.ts +17 -0
  149. package/{src/lib/components → components}/editor/ToolbarGroup.svelte +3 -5
  150. package/components/editor/ToolbarGroup.svelte.d.ts +18 -0
  151. package/{src/lib/components → components}/editor/ToolbarSpacer.svelte +0 -0
  152. package/components/editor/ToolbarSpacer.svelte.d.ts +23 -0
  153. package/components/editor/URLEditor.svelte +13 -0
  154. package/components/editor/URLEditor.svelte.d.ts +18 -0
  155. package/{src/lib/components/editor/UndoState.ts → components/editor/UndoState.d.ts} +2 -3
  156. package/components/editor/UndoState.js +1 -0
  157. package/{src/lib/components → components}/editor/icons/annotate.svg +0 -0
  158. package/{src/lib/components → components}/editor/icons/block.svg +0 -0
  159. package/{src/lib/components → components}/editor/icons/bold.svg +0 -0
  160. package/{src/lib/components → components}/editor/icons/bullets.svg +0 -0
  161. package/{src/lib/components → components}/editor/icons/callout.svg +0 -0
  162. package/{src/lib/components → components}/editor/icons/citation.svg +0 -0
  163. package/{src/lib/components → components}/editor/icons/clear.svg +0 -0
  164. package/{src/lib/components → components}/editor/icons/clipboard.svg +0 -0
  165. package/{src/lib/components → components}/editor/icons/code.svg +0 -0
  166. package/{src/lib/components → components}/editor/icons/columnafter.svg +0 -0
  167. package/{src/lib/components → components}/editor/icons/columnbefore.svg +0 -0
  168. package/{src/lib/components → components}/editor/icons/comment.svg +0 -0
  169. package/{src/lib/components → components}/editor/icons/copy.svg +0 -0
  170. package/{src/lib/components → components}/editor/icons/cut.svg +0 -0
  171. package/{src/lib/components → components}/editor/icons/define.svg +0 -0
  172. package/{src/lib/components → components}/editor/icons/deletecolumn.svg +0 -0
  173. package/{src/lib/components → components}/editor/icons/deleterow.svg +0 -0
  174. package/{src/lib/components → components}/editor/icons/footnote.svg +0 -0
  175. package/{src/lib/components → components}/editor/icons/header1.svg +0 -0
  176. package/{src/lib/components → components}/editor/icons/header2.svg +0 -0
  177. package/{src/lib/components → components}/editor/icons/header3.svg +0 -0
  178. package/{src/lib/components → components}/editor/icons/home.svg +0 -0
  179. package/{src/lib/components → components}/editor/icons/indent.svg +0 -0
  180. package/{src/lib/components → components}/editor/icons/italic.svg +0 -0
  181. package/{src/lib/components → components}/editor/icons/label.svg +0 -0
  182. package/{src/lib/components → components}/editor/icons/left.svg +0 -0
  183. package/{src/lib/components → components}/editor/icons/level.svg +0 -0
  184. package/{src/lib/components → components}/editor/icons/link.svg +0 -0
  185. package/{src/lib/components → components}/editor/icons/list.svg +0 -0
  186. package/{src/lib/components → components}/editor/icons/media.svg +0 -0
  187. package/{src/lib/components → components}/editor/icons/middle.svg +0 -0
  188. package/{src/lib/components → components}/editor/icons/numbers.svg +0 -0
  189. package/{src/lib/components → components}/editor/icons/paragraph.svg +0 -0
  190. package/{src/lib/components → components}/editor/icons/paste.svg +0 -0
  191. package/{src/lib/components → components}/editor/icons/quote.svg +0 -0
  192. package/{src/lib/components → components}/editor/icons/redo.svg +0 -0
  193. package/{src/lib/components → components}/editor/icons/right.svg +0 -0
  194. package/{src/lib/components → components}/editor/icons/rowabove.svg +0 -0
  195. package/{src/lib/components → components}/editor/icons/rowbelow.svg +0 -0
  196. package/{src/lib/components → components}/editor/icons/rule.svg +0 -0
  197. package/{src/lib/components → components}/editor/icons/sub.svg +0 -0
  198. package/{src/lib/components → components}/editor/icons/super.svg +0 -0
  199. package/{src/lib/components → components}/editor/icons/table.svg +0 -0
  200. package/{src/lib/components → components}/editor/icons/text.svg +0 -0
  201. package/{src/lib/components → components}/editor/icons/time.svg +0 -0
  202. package/{src/lib/components → components}/editor/icons/undo.svg +0 -0
  203. package/{src/lib/components → components}/editor/icons/unindent.svg +0 -0
  204. package/{src/lib/components → components}/editor/icons/unlink.svg +0 -0
  205. package/{src/lib/components → components}/page/Acknowledgements.svelte +10 -19
  206. package/components/page/Acknowledgements.svelte.d.ts +14 -0
  207. package/components/page/Authors.svelte +85 -0
  208. package/components/page/Authors.svelte.d.ts +21 -0
  209. package/components/page/BookLoader.svelte +59 -0
  210. package/components/page/BookLoader.svelte.d.ts +16 -0
  211. package/components/page/BulkReferenceEditor.svelte +63 -0
  212. package/components/page/BulkReferenceEditor.svelte.d.ts +14 -0
  213. package/components/page/Chapter.svelte +393 -0
  214. package/components/page/Chapter.svelte.d.ts +18 -0
  215. package/components/page/ChapterContext.d.ts +10 -0
  216. package/components/page/ChapterContext.js +1 -0
  217. package/{src/lib/components → components}/page/ChapterNumber.svelte +0 -0
  218. package/components/page/ChapterNumber.svelte.d.ts +27 -0
  219. package/{src/lib/components → components}/page/ChapterTitle.svelte +2 -4
  220. package/components/page/ChapterTitle.svelte.d.ts +18 -0
  221. package/components/page/Contexts.d.ts +47 -0
  222. package/components/page/Contexts.js +133 -0
  223. package/{src/lib/components → components}/page/DefinitionView.svelte +38 -53
  224. package/components/page/DefinitionView.svelte.d.ts +18 -0
  225. package/{src/lib/components → components}/page/Description.svelte +7 -15
  226. package/components/page/Description.svelte.d.ts +14 -0
  227. package/components/page/Edition.svelte +161 -0
  228. package/components/page/Edition.svelte.d.ts +20 -0
  229. package/components/page/EditionLoader.svelte +99 -0
  230. package/components/page/EditionLoader.svelte.d.ts +18 -0
  231. package/{src/lib/components → components}/page/Editions.svelte +18 -22
  232. package/components/page/Editions.svelte.d.ts +14 -0
  233. package/{src/lib/components → components}/page/Glossary.svelte +28 -33
  234. package/components/page/Glossary.svelte.d.ts +14 -0
  235. package/{src/lib/components → components}/page/Header.svelte +52 -59
  236. package/components/page/Header.svelte.d.ts +29 -0
  237. package/{src/lib/components → components}/page/Index.svelte +47 -50
  238. package/components/page/Index.svelte.d.ts +14 -0
  239. package/{src/lib/components → components}/page/Instructions.svelte +1 -2
  240. package/components/page/Instructions.svelte.d.ts +18 -0
  241. package/{src/lib/components → components}/page/License.svelte +9 -17
  242. package/components/page/License.svelte.d.ts +14 -0
  243. package/{src/lib/components → components}/page/Loading.svelte +0 -0
  244. package/components/page/Loading.svelte.d.ts +23 -0
  245. package/{src/lib/components → components}/page/Media.svelte +27 -44
  246. package/components/page/Media.svelte.d.ts +14 -0
  247. package/{src/lib/components → components}/page/MediaPreview.svelte +2 -3
  248. package/components/page/MediaPreview.svelte.d.ts +19 -0
  249. package/{src/lib/components → components}/page/Muted.svelte +0 -0
  250. package/components/page/Muted.svelte.d.ts +27 -0
  251. package/{src/lib/components → components}/page/Outline.svelte +110 -140
  252. package/components/page/Outline.svelte.d.ts +19 -0
  253. package/components/page/Page.svelte +84 -0
  254. package/components/page/Page.svelte.d.ts +19 -0
  255. package/{src/lib/components → components}/page/PageHeader.svelte +1 -2
  256. package/components/page/PageHeader.svelte.d.ts +18 -0
  257. package/{src/lib/components → components}/page/PageParagraph.svelte +0 -0
  258. package/components/page/PageParagraph.svelte.d.ts +27 -0
  259. package/components/page/PossibleChapter.svelte +14 -0
  260. package/components/page/PossibleChapter.svelte.d.ts +14 -0
  261. package/components/page/PossibleReference.svelte +11 -0
  262. package/components/page/PossibleReference.svelte.d.ts +18 -0
  263. package/{src/lib/components → components}/page/Print.svelte +3 -5
  264. package/components/page/Print.svelte.d.ts +14 -0
  265. package/{src/lib/components → components}/page/Publish.svelte +52 -59
  266. package/components/page/Publish.svelte.d.ts +14 -0
  267. package/{src/lib/components → components}/page/Reference.svelte +30 -39
  268. package/components/page/Reference.svelte.d.ts +17 -0
  269. package/{src/lib/components → components}/page/References.svelte +14 -18
  270. package/components/page/References.svelte.d.ts +14 -0
  271. package/{src/lib/components → components}/page/Rows.svelte +0 -0
  272. package/components/page/Rows.svelte.d.ts +27 -0
  273. package/components/page/Search.svelte +133 -0
  274. package/components/page/Search.svelte.d.ts +14 -0
  275. package/{src/lib/components → components}/page/Status.svelte +3 -5
  276. package/components/page/Status.svelte.d.ts +14 -0
  277. package/{src/lib/components → components}/page/SubdomainEditor.svelte +13 -16
  278. package/components/page/SubdomainEditor.svelte.d.ts +14 -0
  279. package/{src/lib/components → components}/page/TableOfContents.svelte +68 -79
  280. package/components/page/TableOfContents.svelte.d.ts +14 -0
  281. package/components/page/TableOfContentsImage.svelte +18 -0
  282. package/components/page/TableOfContentsImage.svelte.d.ts +16 -0
  283. package/{src/lib/components → components}/page/TableOfContentsRow.svelte +24 -34
  284. package/components/page/TableOfContentsRow.svelte.d.ts +24 -0
  285. package/{src/lib/components → components}/page/ThemeEditor.svelte +33 -44
  286. package/components/page/ThemeEditor.svelte.d.ts +14 -0
  287. package/{src/lib/components → components}/page/ThemeEditorPreview.svelte +12 -21
  288. package/components/page/ThemeEditorPreview.svelte.d.ts +17 -0
  289. package/components/page/ThemeSetEditor.svelte +19 -0
  290. package/components/page/ThemeSetEditor.svelte.d.ts +18 -0
  291. package/{src/lib/components → components}/page/ThemeVariableEditor.svelte +14 -18
  292. package/components/page/ThemeVariableEditor.svelte.d.ts +18 -0
  293. package/{src/lib/components → components}/page/Title.svelte +0 -0
  294. package/components/page/Title.svelte.d.ts +27 -0
  295. package/{src/lib/components → components}/page/Unknown.svelte +8 -10
  296. package/components/page/Unknown.svelte.d.ts +16 -0
  297. package/components/page/margins.d.ts +2 -0
  298. package/{src/lib/components/page/margins.ts → components/page/margins.js} +46 -79
  299. package/index.d.ts +15 -0
  300. package/{src/lib/index.js → index.js} +0 -0
  301. package/models/CRUD.d.ts +27 -0
  302. package/models/CRUD.js +262 -0
  303. package/models/Firebase.d.ts +5 -0
  304. package/{src/lib/models/Firebase.ts → models/Firebase.js} +16 -26
  305. package/models/book/Book.d.ts +61 -0
  306. package/models/book/Book.js +135 -0
  307. package/models/book/BookMedia.d.ts +23 -0
  308. package/models/book/BookMedia.js +108 -0
  309. package/models/book/BookSaveStatus.d.ts +7 -0
  310. package/models/book/BookSaveStatus.js +8 -0
  311. package/models/book/Chapter.d.ts +81 -0
  312. package/models/book/Chapter.js +212 -0
  313. package/models/book/ChapterID.d.ts +10 -0
  314. package/{src/lib/models/book/ChapterID.ts → models/book/ChapterID.js} +0 -1
  315. package/models/book/Definition.d.ts +6 -0
  316. package/models/book/Definition.js +1 -0
  317. package/models/book/Edition.d.ts +139 -0
  318. package/models/book/Edition.js +620 -0
  319. package/models/book/Reference.d.ts +24 -0
  320. package/models/book/Reference.js +78 -0
  321. package/models/book/Schema.d.ts +174 -0
  322. package/{src/lib/models/book/Schema.ts → models/book/Schema.js} +0 -1
  323. package/models/book/Theme.d.ts +113 -0
  324. package/{src/lib/models/book/Theme.ts → models/book/Theme.js} +6 -110
  325. package/{src/lib/models/book/ThemeColors.ts → models/book/ThemeColors.d.ts} +0 -6
  326. package/models/book/ThemeColors.js +1 -0
  327. package/models/book/Words.d.ts +2 -0
  328. package/{src/lib/models/book/Words.ts → models/book/Words.js} +0 -1
  329. package/models/chapter/AtomNode.d.ts +18 -0
  330. package/{src/lib/models/chapter/AtomNode.ts → models/chapter/AtomNode.js} +10 -30
  331. package/models/chapter/BlockNode.d.ts +20 -0
  332. package/{src/lib/models/chapter/BlockNode.ts → models/chapter/BlockNode.js} +47 -80
  333. package/models/chapter/BlocksNode.d.ts +50 -0
  334. package/{src/lib/models/chapter/BlocksNode.ts → models/chapter/BlocksNode.js} +359 -571
  335. package/models/chapter/BlocksNode.test.d.ts +1 -0
  336. package/models/chapter/BlocksNode.test.js +568 -0
  337. package/{src/lib/models/chapter/Bookkeeping.ts → models/chapter/Bookkeeping.d.ts} +0 -0
  338. package/models/chapter/Bookkeeping.js +1 -0
  339. package/models/chapter/CalloutNode.d.ts +17 -0
  340. package/models/chapter/CalloutNode.js +58 -0
  341. package/models/chapter/Caret.d.ts +23 -0
  342. package/{src/lib/models/chapter/Caret.ts → models/chapter/Caret.js} +26 -50
  343. package/models/chapter/ChapterNode.d.ts +34 -0
  344. package/models/chapter/ChapterNode.js +117 -0
  345. package/models/chapter/CitationsNode.d.ts +16 -0
  346. package/{src/lib/models/chapter/CitationsNode.ts → models/chapter/CitationsNode.js} +10 -17
  347. package/models/chapter/CodeNode.d.ts +35 -0
  348. package/{src/lib/models/chapter/CodeNode.ts → models/chapter/CodeNode.js} +62 -125
  349. package/models/chapter/CommentNode.d.ts +18 -0
  350. package/models/chapter/CommentNode.js +48 -0
  351. package/models/chapter/DefinitionNode.d.ts +12 -0
  352. package/{src/lib/models/chapter/DefinitionNode.ts → models/chapter/DefinitionNode.js} +8 -14
  353. package/models/chapter/Edit.d.ts +7 -0
  354. package/models/chapter/Edit.js +1 -0
  355. package/models/chapter/EmbedNode.d.ts +45 -0
  356. package/models/chapter/EmbedNode.js +168 -0
  357. package/models/chapter/ErrorNode.d.ts +17 -0
  358. package/{src/lib/models/chapter/ErrorNode.ts → models/chapter/ErrorNode.js} +8 -15
  359. package/models/chapter/FootnoteNode.d.ts +18 -0
  360. package/models/chapter/FootnoteNode.js +47 -0
  361. package/models/chapter/FormatNode.d.ts +60 -0
  362. package/{src/lib/models/chapter/FormatNode.ts → models/chapter/FormatNode.js} +262 -443
  363. package/models/chapter/FormatNode.test.d.ts +1 -0
  364. package/models/chapter/FormatNode.test.js +96 -0
  365. package/models/chapter/InlineCodeNode.d.ts +12 -0
  366. package/{src/lib/models/chapter/InlineCodeNode.ts → models/chapter/InlineCodeNode.js} +9 -17
  367. package/models/chapter/LabelNode.d.ts +17 -0
  368. package/{src/lib/models/chapter/LabelNode.ts → models/chapter/LabelNode.js} +10 -26
  369. package/models/chapter/LinkNode.d.ts +12 -0
  370. package/{src/lib/models/chapter/LinkNode.ts → models/chapter/LinkNode.js} +7 -12
  371. package/models/chapter/ListNode.d.ts +51 -0
  372. package/{src/lib/models/chapter/ListNode.ts → models/chapter/ListNode.js} +200 -277
  373. package/models/chapter/ListNode.test.d.ts +1 -0
  374. package/{src/lib/models/chapter/ListNode.test.ts → models/chapter/ListNode.test.js} +20 -57
  375. package/models/chapter/MetadataNode.d.ts +17 -0
  376. package/models/chapter/MetadataNode.js +32 -0
  377. package/models/chapter/Node.d.ts +38 -0
  378. package/{src/lib/models/chapter/Node.ts → models/chapter/Node.js} +71 -155
  379. package/models/chapter/Node.test.d.ts +1 -0
  380. package/{src/lib/models → models}/chapter/Node.test.js +0 -0
  381. package/models/chapter/ParagraphNode.d.ts +33 -0
  382. package/{src/lib/models/chapter/ParagraphNode.ts → models/chapter/ParagraphNode.js} +58 -95
  383. package/models/chapter/ParagraphNode.test.d.ts +1 -0
  384. package/models/chapter/ParagraphNode.test.js +30 -0
  385. package/models/chapter/Parser.d.ts +75 -0
  386. package/{src/lib/models/chapter/Parser.ts → models/chapter/Parser.js} +184 -369
  387. package/models/chapter/Parser.test.d.ts +1 -0
  388. package/{src/lib/models/chapter/Parser.test.ts → models/chapter/Parser.test.js} +0 -7
  389. package/{src/lib/models/chapter/Position.ts → models/chapter/Position.d.ts} +0 -0
  390. package/models/chapter/Position.js +1 -0
  391. package/models/chapter/QuoteNode.d.ts +25 -0
  392. package/models/chapter/QuoteNode.js +99 -0
  393. package/{src/lib/models/chapter/RootNode.ts → models/chapter/RootNode.d.ts} +0 -2
  394. package/models/chapter/RootNode.js +1 -0
  395. package/models/chapter/RuleNode.d.ts +15 -0
  396. package/{src/lib/models/chapter/RuleNode.ts → models/chapter/RuleNode.js} +6 -9
  397. package/models/chapter/TableNode.d.ts +37 -0
  398. package/{src/lib/models/chapter/TableNode.ts → models/chapter/TableNode.js} +82 -141
  399. package/models/chapter/TableNode.test.d.ts +1 -0
  400. package/{src/lib/models/chapter/TableNode.test.ts → models/chapter/TableNode.test.js} +10 -27
  401. package/models/chapter/TextNode.d.ts +36 -0
  402. package/{src/lib/models/chapter/TextNode.ts → models/chapter/TextNode.js} +65 -117
  403. package/models/chapter/TextNode.test.d.ts +1 -0
  404. package/{src/lib/models/chapter/TextNode.test.ts → models/chapter/TextNode.test.js} +0 -2
  405. package/package.json +270 -53
  406. package/util/getSubdomain.d.ts +3 -0
  407. package/{src/lib/util/getSubdomain.ts → util/getSubdomain.js} +8 -14
  408. package/util/isMobile.d.ts +2 -0
  409. package/{src/lib/util/isMobile.ts → util/isMobile.js} +0 -1
  410. package/util/mineReference.d.ts +4 -0
  411. package/{src/lib/util/mineReference.ts → util/mineReference.js} +25 -45
  412. package/util/scrollToEyeLevel.d.ts +2 -0
  413. package/{src/lib/util/scrollToEyeLevel.ts → util/scrollToEyeLevel.js} +2 -4
  414. package/.env.example +0 -8
  415. package/.firebaserc +0 -8
  416. package/.prettierignore +0 -8
  417. package/.prettierrc.json +0 -5
  418. package/_update-notifier-last-checked +0 -0
  419. package/firebase.json +0 -46
  420. package/firestore.indexes.json +0 -4
  421. package/firestore.rules +0 -59
  422. package/functions/.eslintrc.js +0 -28
  423. package/functions/package-lock.json +0 -12595
  424. package/functions/package.json +0 -43
  425. package/functions/src/index.ts +0 -345
  426. package/functions/tsconfig.dev.json +0 -3
  427. package/functions/tsconfig.json +0 -15
  428. package/scripts/claims.cjs +0 -99
  429. package/src/app.d.ts +0 -9
  430. package/src/app.html +0 -24
  431. package/src/lib/components/Auth.svelte +0 -65
  432. package/src/lib/components/Link.svelte +0 -58
  433. package/src/lib/components/chapter/Block.svelte +0 -42
  434. package/src/lib/components/chapter/ErrorMessage.svelte +0 -12
  435. package/src/lib/components/chapter/Python.svelte +0 -144
  436. package/src/lib/components/chapter/Text.svelte +0 -109
  437. package/src/lib/components/editor/BookishEditor.svelte +0 -1101
  438. package/src/lib/components/editor/CalloutEditor.svelte +0 -14
  439. package/src/lib/components/editor/CaretContext.ts +0 -55
  440. package/src/lib/components/editor/CitationsEditor.svelte +0 -64
  441. package/src/lib/components/editor/ConfirmButton.svelte +0 -51
  442. package/src/lib/components/editor/DefinitionEditor.svelte +0 -44
  443. package/src/lib/components/editor/EmbedEditor.svelte +0 -152
  444. package/src/lib/components/editor/InlineCodeEditor.svelte +0 -16
  445. package/src/lib/components/editor/LinkEditor.svelte +0 -110
  446. package/src/lib/components/editor/PositionEditor.svelte +0 -21
  447. package/src/lib/components/editor/QuoteEditor.svelte +0 -14
  448. package/src/lib/components/editor/TableEditor.svelte +0 -14
  449. package/src/lib/components/editor/Toggle.svelte +0 -47
  450. package/src/lib/components/editor/Toolbar.svelte +0 -297
  451. package/src/lib/components/editor/URLEditor.svelte +0 -15
  452. package/src/lib/components/page/Authors.svelte +0 -92
  453. package/src/lib/components/page/BookLoader.svelte +0 -77
  454. package/src/lib/components/page/BulkReferenceEditor.svelte +0 -86
  455. package/src/lib/components/page/Chapter.svelte +0 -449
  456. package/src/lib/components/page/ChapterContext.ts +0 -13
  457. package/src/lib/components/page/Contexts.ts +0 -176
  458. package/src/lib/components/page/Edition.svelte +0 -189
  459. package/src/lib/components/page/EditionLoader.svelte +0 -123
  460. package/src/lib/components/page/Page.svelte +0 -94
  461. package/src/lib/components/page/PossibleChapter.svelte +0 -16
  462. package/src/lib/components/page/PossibleReference.svelte +0 -14
  463. package/src/lib/components/page/Search.svelte +0 -153
  464. package/src/lib/components/page/TableOfContentsImage.svelte +0 -22
  465. package/src/lib/components/page/ThemeSetEditor.svelte +0 -21
  466. package/src/lib/models/CRUD.ts +0 -469
  467. package/src/lib/models/book/Book.ts +0 -283
  468. package/src/lib/models/book/BookMedia.ts +0 -182
  469. package/src/lib/models/book/BookSaveStatus.ts +0 -8
  470. package/src/lib/models/book/Chapter.ts +0 -462
  471. package/src/lib/models/book/Definition.ts +0 -2
  472. package/src/lib/models/book/Edition.ts +0 -1216
  473. package/src/lib/models/book/Reference.ts +0 -171
  474. package/src/lib/models/chapter/BlocksNode.test.ts +0 -867
  475. package/src/lib/models/chapter/CalloutNode.ts +0 -79
  476. package/src/lib/models/chapter/ChapterNode.ts +0 -169
  477. package/src/lib/models/chapter/CommentNode.ts +0 -61
  478. package/src/lib/models/chapter/Edit.ts +0 -6
  479. package/src/lib/models/chapter/EmbedNode.ts +0 -257
  480. package/src/lib/models/chapter/FootnoteNode.ts +0 -59
  481. package/src/lib/models/chapter/FormatNode.test.ts +0 -137
  482. package/src/lib/models/chapter/MetadataNode.ts +0 -44
  483. package/src/lib/models/chapter/ParagraphNode.test.ts +0 -54
  484. package/src/lib/models/chapter/QuoteNode.ts +0 -135
  485. package/src/params/edition.ts +0 -3
  486. package/src/routes/+error.svelte +0 -12
  487. package/src/routes/+layout.svelte +0 -241
  488. package/src/routes/+page.svelte +0 -43
  489. package/src/routes/Footer.svelte +0 -0
  490. package/src/routes/Header.svelte +0 -112
  491. package/src/routes/[bookid]/+layout.svelte +0 -5
  492. package/src/routes/[bookid]/[[editionid=edition]]/+error.svelte +0 -14
  493. package/src/routes/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  494. package/src/routes/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  495. package/src/routes/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  496. package/src/routes/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  497. package/src/routes/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  498. package/src/routes/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  499. package/src/routes/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  500. package/src/routes/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  501. package/src/routes/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  502. package/src/routes/[bookid]/editions/+page.svelte +0 -20
  503. package/src/routes/about/+page.svelte +0 -102
  504. package/src/routes/confirm/+page.svelte +0 -62
  505. package/src/routes/email/+page.svelte +0 -99
  506. package/src/routes/login/+page.svelte +0 -66
  507. package/src/routes/read/+page.svelte +0 -38
  508. package/src/routes/write/+error.svelte +0 -10
  509. package/src/routes/write/+layout.svelte +0 -11
  510. package/src/routes/write/+page.svelte +0 -114
  511. package/src/routes/write/[bookid]/+layout.svelte +0 -5
  512. package/src/routes/write/[bookid]/[[editionid=edition]]/+layout.svelte +0 -7
  513. package/src/routes/write/[bookid]/[[editionid=edition]]/+page.svelte +0 -5
  514. package/src/routes/write/[bookid]/[[editionid=edition]]/[chapterid]/+page.svelte +0 -5
  515. package/src/routes/write/[bookid]/[[editionid=edition]]/glossary/+page.svelte +0 -5
  516. package/src/routes/write/[bookid]/[[editionid=edition]]/index/[[letter]]/+page.svelte +0 -5
  517. package/src/routes/write/[bookid]/[[editionid=edition]]/media/+page.svelte +0 -5
  518. package/src/routes/write/[bookid]/[[editionid=edition]]/print/+page.svelte +0 -5
  519. package/src/routes/write/[bookid]/[[editionid=edition]]/references/+page.svelte +0 -5
  520. package/src/routes/write/[bookid]/[[editionid=edition]]/search/+page.svelte +0 -5
  521. package/src/routes/write/[bookid]/[[editionid=edition]]/theme/+page.svelte +0 -5
  522. package/src/routes/write/[bookid]/[[editionid=edition]]/unknown/+page.svelte +0 -5
  523. package/src/routes/write/[bookid]/editions/+page.svelte +0 -20
  524. package/src/vite-env.d.ts +0 -1
  525. package/static/icons/favicon.png +0 -0
  526. package/static/icons/icon.png +0 -0
  527. package/static/icons/ios-icon.png +0 -0
  528. package/storage.rules +0 -9
  529. package/svelte.config.js +0 -19
  530. package/tsconfig.json +0 -18
  531. package/tsconfig.node.json +0 -9
  532. package/vite.config.ts +0 -8
  533. package/vite.reader.config.ts +0 -32
@@ -0,0 +1 @@
1
+ export {};
@@ -1,30 +1,23 @@
1
1
  import { test, expect } from 'vitest';
2
-
3
2
  import Parser from './Parser';
4
-
5
3
  test('Empty chapter', () => {
6
4
  expect(Parser.parseChapter(undefined, '').toBookdown()).toBe('');
7
5
  });
8
-
9
6
  test('Single paragraph', () => {
10
7
  expect(Parser.parseChapter(undefined, 'hello').toBookdown()).toBe('hello');
11
8
  });
12
-
13
9
  test('Peek', () => {
14
10
  const p = new Parser(undefined, '# hello');
15
11
  expect(p.peek()).toBe('#');
16
12
  expect(p.read()).toBe('#');
17
13
  expect(p.peek()).toBe(' ');
18
14
  });
19
-
20
15
  test('More', () => {
21
16
  const p = new Parser(undefined, '#');
22
17
  expect(p.more()).toBe(true);
23
-
24
18
  const p2 = new Parser(undefined, '');
25
19
  expect(p2.more()).toBe(false);
26
20
  });
27
-
28
21
  test('Whitespace', () => {
29
22
  const p = new Parser(undefined, ' Hi');
30
23
  p.readWhitespace();
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ import type Node from './Node';
2
+ import BlockNode from './BlockNode';
3
+ import type Position from './Position';
4
+ import FormatNode from './FormatNode';
5
+ import BlocksNode from './BlocksNode';
6
+ import type { CaretRange } from './Caret';
7
+ export default class QuoteNode extends BlocksNode {
8
+ #private;
9
+ constructor(elements: BlockNode[], credit?: FormatNode, position?: Position);
10
+ getType(): string;
11
+ getCredit(): FormatNode;
12
+ getPosition(): Position;
13
+ getFormats(): FormatNode[];
14
+ toText(): string;
15
+ toBookdown(): string;
16
+ toHTML(): string;
17
+ getChildren(): Node[];
18
+ getParentOf(node: Node): Node | undefined;
19
+ copy(): this;
20
+ create(blocks: BlockNode[]): BlocksNode;
21
+ withChildReplaced(node: BlockNode | FormatNode, replacement: BlockNode | FormatNode | undefined): this | undefined;
22
+ withCredit(credit: FormatNode | undefined): QuoteNode;
23
+ withPosition(position: Position): QuoteNode;
24
+ withContentInRange(range: CaretRange): this | undefined;
25
+ }
@@ -0,0 +1,99 @@
1
+ import BlockNode from './BlockNode';
2
+ import FormatNode from './FormatNode';
3
+ import BlocksNode from './BlocksNode';
4
+ import TextNode from './TextNode';
5
+ export default class QuoteNode extends BlocksNode {
6
+ #credit;
7
+ #position;
8
+ constructor(elements, credit, position = '|') {
9
+ super(elements);
10
+ this.#position = position;
11
+ this.#credit =
12
+ credit === undefined
13
+ ? new FormatNode('', [new TextNode()])
14
+ : credit.withTextIfEmpty();
15
+ }
16
+ getType() {
17
+ return 'quote';
18
+ }
19
+ getCredit() {
20
+ return this.#credit;
21
+ }
22
+ getPosition() {
23
+ return this.#position;
24
+ }
25
+ getFormats() {
26
+ return [this.#credit];
27
+ }
28
+ toText() {
29
+ return (this.getBlocks()
30
+ .map((element) => element.toText())
31
+ .join(' ') + (this.#credit ? ' ' + this.#credit.toText() : ''));
32
+ }
33
+ toBookdown() {
34
+ return `"\n${this.getBlocks()
35
+ .map((element) => element.toBookdown())
36
+ .join('\n\n')}\n"${this.#position === '|' ? '' : this.#position}${this.#credit ? this.#credit.toBookdown() : ''}`;
37
+ }
38
+ toHTML() {
39
+ return `"${super.toHTML()}"<center>${this.#credit.toHTML()}</center>`;
40
+ }
41
+ getChildren() {
42
+ return [...this.getBlocks(), this.#credit];
43
+ }
44
+ getParentOf(node) {
45
+ if (node === this.#credit)
46
+ return this;
47
+ const creditParent = this.#credit.getParentOf(node);
48
+ if (creditParent !== undefined)
49
+ return creditParent;
50
+ return super.getParentOf(node);
51
+ }
52
+ copy() {
53
+ return new QuoteNode(this.getBlocks().map((b) => b.copy()));
54
+ }
55
+ create(blocks) {
56
+ return new QuoteNode(blocks, this.#credit, this.#position);
57
+ }
58
+ withChildReplaced(node, replacement) {
59
+ // Replace the credit.
60
+ if (this.#credit === node &&
61
+ (replacement instanceof FormatNode || replacement === undefined))
62
+ return new QuoteNode(this.getBlocks(), replacement, this.#position);
63
+ // Replace a block.
64
+ if (replacement !== undefined && !(replacement instanceof BlockNode))
65
+ return;
66
+ const index = this.getBlocks().indexOf(node);
67
+ if (index < 0)
68
+ return;
69
+ // Make a new blocks node, assigning and re-parenting the replacement.
70
+ const blocks = replacement === undefined
71
+ ? [
72
+ ...this.getBlocks().slice(0, index),
73
+ ...this.getBlocks().slice(index + 1),
74
+ ]
75
+ : [
76
+ ...this.getBlocks().slice(0, index),
77
+ replacement,
78
+ ...this.getBlocks().slice(index + 1),
79
+ ];
80
+ return new QuoteNode(blocks, this.#credit, this.#position);
81
+ }
82
+ withCredit(credit) {
83
+ return new QuoteNode(this.getBlocks(), credit, this.#position);
84
+ }
85
+ withPosition(position) {
86
+ return new QuoteNode(this.getBlocks(), this.#credit, position);
87
+ }
88
+ withContentInRange(range) {
89
+ // First get the blocks in range.
90
+ const newQuote = super.withContentInRange(range);
91
+ if (newQuote === undefined)
92
+ return;
93
+ const newCredit = this.getBlocks().find((b) => b.contains(range.end.node)) !==
94
+ undefined
95
+ ? new FormatNode('', [new TextNode()])
96
+ : this.#credit.withContentInRange(range);
97
+ return newQuote.withNodeReplaced(this.#credit, newCredit);
98
+ }
99
+ }
@@ -1,7 +1,5 @@
1
1
  import type ChapterNode from './ChapterNode';
2
2
  import type EmbedNode from './EmbedNode';
3
3
  import type FormatNode from './FormatNode';
4
-
5
- // Beware: BookishEditor checks for each of these in order to undo/redo. If you change this, check it's undo/redo logic too.
6
4
  type RootNode = ChapterNode | FormatNode | EmbedNode;
7
5
  export default RootNode;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import type Node from './Node';
2
+ import BlockNode from './BlockNode';
3
+ export default class RuleNode extends BlockNode {
4
+ constructor();
5
+ getType(): string;
6
+ toText(): string;
7
+ toBookdown(): string;
8
+ toHTML(): string;
9
+ getParentOf(): Node | undefined;
10
+ getFormats(): never[];
11
+ getChildren(): Node[];
12
+ copy(): this;
13
+ withChildReplaced(): undefined;
14
+ withContentInRange(): this | undefined;
15
+ }
@@ -1,39 +1,36 @@
1
- import type Node from './Node';
2
1
  import BlockNode from './BlockNode';
3
-
4
2
  export default class RuleNode extends BlockNode {
5
3
  constructor() {
6
4
  super();
7
5
  }
8
-
9
6
  getType() {
10
7
  return 'rule';
11
8
  }
12
- toText(): string {
9
+ toText() {
13
10
  return '';
14
11
  }
15
- toBookdown(): string {
12
+ toBookdown() {
16
13
  return '-';
17
14
  }
18
15
  toHTML() {
19
16
  return `<hr/>`;
20
17
  }
21
- getParentOf(): Node | undefined {
18
+ getParentOf() {
22
19
  return undefined;
23
20
  }
24
21
  getFormats() {
25
22
  return [];
26
23
  }
27
- getChildren(): Node[] {
24
+ getChildren() {
28
25
  return [];
29
26
  }
30
27
  copy() {
31
- return new RuleNode() as this;
28
+ return new RuleNode();
32
29
  }
33
30
  withChildReplaced() {
34
31
  return undefined;
35
32
  }
36
- withContentInRange(): this | undefined {
33
+ withContentInRange() {
37
34
  return this.copy();
38
35
  }
39
36
  }
@@ -0,0 +1,37 @@
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
+ type Location = {
7
+ row: number;
8
+ column: number;
9
+ };
10
+ export default class TableNode extends BlockNode {
11
+ #private;
12
+ constructor(rows: FormatNode[][], position?: Position, caption?: FormatNode);
13
+ getType(): string;
14
+ getRows(): FormatNode[][];
15
+ getRowCount(): number;
16
+ getColumnCount(): number;
17
+ getPosition(): Position;
18
+ getCaption(): FormatNode;
19
+ getFormats(): FormatNode[];
20
+ getNextCell(format: FormatNode, direction?: -1 | 1): FormatNode | undefined;
21
+ toText(): string;
22
+ toBookdown(): string;
23
+ toHTML(): string;
24
+ getChildren(): FormatNode[];
25
+ locate(format: FormatNode): Location | undefined;
26
+ getCell(row: number, col: number): FormatNode | undefined;
27
+ getParentOf(node: Node): Node | undefined;
28
+ copy(): this;
29
+ withChildReplaced(node: FormatNode, replacement: FormatNode | undefined): this | undefined;
30
+ withNewRow(index: number): TableNode | undefined;
31
+ withoutRow(index: number): TableNode | undefined;
32
+ withoutColumn(index: number): TableNode | undefined;
33
+ withNewColumn(index: number): TableNode | undefined;
34
+ withContentInRange(range: CaretRange): this | undefined;
35
+ withPosition(position: Position): TableNode;
36
+ }
37
+ export {};
@@ -1,22 +1,11 @@
1
- import type Node from './Node';
2
- import type Position from './Position';
3
1
  import FormatNode from './FormatNode';
4
2
  import TextNode from './TextNode';
5
3
  import BlockNode from './BlockNode';
6
- import type { CaretRange } from './Caret';
7
-
8
- type Location = { row: number; column: number };
9
-
10
4
  export default class TableNode extends BlockNode {
11
- readonly #rows: FormatNode[][];
12
- readonly #caption: FormatNode;
13
- readonly #position: Position;
14
-
15
- constructor(
16
- rows: FormatNode[][],
17
- position?: Position,
18
- caption?: FormatNode
19
- ) {
5
+ #rows;
6
+ #caption;
7
+ #position;
8
+ constructor(rows, position, caption) {
20
9
  super();
21
10
  this.#rows = rows.map((r) => r.map((c) => c.withTextIfEmpty()));
22
11
  this.#position = position ? position : '|';
@@ -25,11 +14,9 @@ export default class TableNode extends BlockNode {
25
14
  ? new FormatNode('', [new TextNode()])
26
15
  : caption.withTextIfEmpty();
27
16
  }
28
-
29
17
  getType() {
30
18
  return 'table';
31
19
  }
32
-
33
20
  getRows() {
34
21
  return this.#rows;
35
22
  }
@@ -46,81 +33,64 @@ export default class TableNode extends BlockNode {
46
33
  return this.#caption;
47
34
  }
48
35
  getFormats() {
49
- const formats: FormatNode[] = [];
50
- this.#rows.forEach((row) =>
51
- row.forEach((cell) => {
52
- formats.push(cell);
53
- })
54
- );
36
+ const formats = [];
37
+ this.#rows.forEach((row) => row.forEach((cell) => {
38
+ formats.push(cell);
39
+ }));
55
40
  return [...formats, this.#caption];
56
41
  }
57
-
58
- getNextCell(format: FormatNode, direction: -1 | 1 = 1) {
59
- let previous: FormatNode | undefined = undefined;
60
- let found: boolean = false;
42
+ getNextCell(format, direction = 1) {
43
+ let previous = undefined;
44
+ let found = false;
61
45
  for (const row of this.#rows) {
62
46
  for (const cell of row) {
63
- if (found) return cell;
47
+ if (found)
48
+ return cell;
64
49
  if (cell === format) {
65
- if (direction > 0) found = true;
66
- else return previous;
50
+ if (direction > 0)
51
+ found = true;
52
+ else
53
+ return previous;
67
54
  }
68
55
  previous = cell;
69
56
  }
70
57
  }
71
58
  return undefined;
72
59
  }
73
-
74
60
  toText() {
75
61
  return this.#rows
76
62
  .map((row) => row.map((cell) => cell.toText()).join(', '))
77
63
  .join(', ');
78
64
  }
79
-
80
- toBookdown(): string {
81
- return (
82
- this.#rows
83
- .map(
84
- (row) =>
85
- `,${row.map((cell) => cell.toBookdown()).join('|')}`
86
- )
87
- .join('\n') +
88
- `\n${this.#position === '|' ? '' : this.#position}${
89
- this.#caption ? '' + this.#caption.toBookdown() : ''
90
- }`
91
- );
65
+ toBookdown() {
66
+ return (this.#rows
67
+ .map((row) => `,${row.map((cell) => cell.toBookdown()).join('|')}`)
68
+ .join('\n') +
69
+ `\n${this.#position === '|' ? '' : this.#position}${this.#caption ? '' + this.#caption.toBookdown() : ''}`);
92
70
  }
93
-
94
71
  toHTML() {
95
72
  return `<table><tbody>${this.#rows
96
- .map(
97
- (row) =>
98
- `<tr>${row
99
- .map((cell) => `<td>${cell.toHTML()}</td>`)
100
- .join('')}`
101
- )
102
- .join(
103
- ''
104
- )}</tbody></table><center>${this.#caption.toHTML()}</center>`;
73
+ .map((row) => `<tr>${row
74
+ .map((cell) => `<td>${cell.toHTML()}</td>`)
75
+ .join('')}`)
76
+ .join('')}</tbody></table><center>${this.#caption.toHTML()}</center>`;
105
77
  }
106
-
107
78
  getChildren() {
108
79
  const children = [];
109
80
  this.#rows.forEach((row) => row.forEach((cell) => children.push(cell)));
110
81
  children.push(this.#caption);
111
82
  return children;
112
83
  }
113
-
114
- locate(format: FormatNode): Location | undefined {
84
+ locate(format) {
115
85
  for (let r = 0; r < this.#rows.length; r++) {
116
86
  const row = this.#rows[r];
117
87
  for (let c = 0; c < row.length; c++) {
118
- if (row[c] === format) return { row: r, column: c };
88
+ if (row[c] === format)
89
+ return { row: r, column: c };
119
90
  }
120
91
  }
121
92
  }
122
-
123
- getCell(row: number, col: number): FormatNode | undefined {
93
+ getCell(row, col) {
124
94
  return row >= 0 &&
125
95
  row < this.#rows.length &&
126
96
  this.#rows.length > 0 &&
@@ -129,45 +99,33 @@ export default class TableNode extends BlockNode {
129
99
  ? this.#rows[row][col]
130
100
  : undefined;
131
101
  }
132
-
133
- getParentOf(node: Node): Node | undefined {
102
+ getParentOf(node) {
134
103
  for (let r = 0; r < this.#rows.length; r++) {
135
104
  const row = this.#rows[r];
136
105
  for (let c = 0; c < row.length; c++) {
137
- if (row[c] === node) return this;
106
+ if (row[c] === node)
107
+ return this;
138
108
  const parent = row[c].getParentOf(node);
139
- if (parent !== undefined) return parent;
109
+ if (parent !== undefined)
110
+ return parent;
140
111
  }
141
112
  }
142
113
  return node === this.#caption ? this : this.#caption.getParentOf(node);
143
114
  }
144
-
145
115
  copy() {
146
- const rows: FormatNode[][] = [];
116
+ const rows = [];
147
117
  this.#rows.forEach((row) => {
148
- const cells: FormatNode[] = [];
118
+ const cells = [];
149
119
  row.forEach((cell) => cells.push(cell.copy()));
150
120
  rows.push(cells);
151
121
  });
152
- return new TableNode(
153
- rows,
154
- this.#position,
155
- this.#caption ? this.#caption.copy() : undefined
156
- ) as this;
122
+ return new TableNode(rows, this.#position, this.#caption ? this.#caption.copy() : undefined);
157
123
  }
158
-
159
- withChildReplaced(node: FormatNode, replacement: FormatNode | undefined) {
124
+ withChildReplaced(node, replacement) {
160
125
  // If it's just the caption, make a new node with the new credit.
161
- if (
162
- node === this.#caption &&
163
- (replacement instanceof FormatNode || replacement === undefined)
164
- )
165
- return new TableNode(
166
- this.#rows,
167
- this.#position,
168
- replacement
169
- ) as this;
170
-
126
+ if (node === this.#caption &&
127
+ (replacement instanceof FormatNode || replacement === undefined))
128
+ return new TableNode(this.#rows, this.#position, replacement);
171
129
  // If it's a cell, update the cell.
172
130
  if (node instanceof FormatNode && replacement instanceof FormatNode) {
173
131
  // Does this table contain node we're replacing?
@@ -175,59 +133,49 @@ export default class TableNode extends BlockNode {
175
133
  let updateColumn = -1;
176
134
  for (; updateRow < this.#rows.length; updateRow++) {
177
135
  updateColumn = this.#rows[updateRow].indexOf(node);
178
- if (updateColumn >= 0) break;
136
+ if (updateColumn >= 0)
137
+ break;
179
138
  }
180
-
181
139
  // Make new rows with the updated cell.
182
140
  if (updateRow < this.#rows.length && updateColumn >= 0) {
183
141
  const newRows = this.#rows.map((row) => [...row]);
184
142
  newRows[updateRow][updateColumn] = replacement;
185
- return new TableNode(
186
- newRows,
187
- this.#position,
188
- this.#caption
189
- ) as this;
143
+ return new TableNode(newRows, this.#position, this.#caption);
190
144
  }
191
145
  }
192
146
  }
193
-
194
- withNewRow(index: number): TableNode | undefined {
195
- if (index < 0 || index > this.#rows.length) return;
196
-
147
+ withNewRow(index) {
148
+ if (index < 0 || index > this.#rows.length)
149
+ return;
197
150
  // Figure out how many columns the first row has, then create a row with that many columns
198
151
  // and an empty FormatNode.
199
152
  const columnCount = this.#rows.length === 0 ? 0 : this.#rows[0].length;
200
- const column: FormatNode[] = [];
201
-
153
+ const column = [];
202
154
  for (let c = 0; c < columnCount; c++)
203
155
  column.push(new FormatNode('', [new TextNode()]));
204
-
205
156
  const newRows = this.#rows.slice();
206
157
  newRows.splice(index, 0, column);
207
158
  return new TableNode(newRows, this.#position, this.#caption);
208
159
  }
209
-
210
- withoutRow(index: number): TableNode | undefined {
211
- if (index < 0 || index >= this.#rows.length) return;
160
+ withoutRow(index) {
161
+ if (index < 0 || index >= this.#rows.length)
162
+ return;
212
163
  const newRows = this.#rows.slice();
213
164
  newRows.splice(index, 1);
214
165
  return new TableNode(newRows, this.#position, this.#caption);
215
166
  }
216
-
217
- withoutColumn(index: number): TableNode | undefined {
218
- if (index < 0 || index >= this.getColumnCount()) return;
167
+ withoutColumn(index) {
168
+ if (index < 0 || index >= this.getColumnCount())
169
+ return;
219
170
  const newRows = this.#rows.slice();
220
- for (let r = 0; r < this.#rows.length; r++) newRows[r].splice(index, 1);
171
+ for (let r = 0; r < this.#rows.length; r++)
172
+ newRows[r].splice(index, 1);
221
173
  return new TableNode(newRows, this.#position, this.#caption);
222
174
  }
223
-
224
- withNewColumn(index: number): TableNode | undefined {
225
- if (
226
- this.#rows.length > 0 &&
227
- (index < 0 || index > this.#rows[0].length)
228
- )
175
+ withNewColumn(index) {
176
+ if (this.#rows.length > 0 &&
177
+ (index < 0 || index > this.#rows[0].length))
229
178
  return;
230
-
231
179
  // Figure out how many rows the table has and add a column
232
180
  const newRows = this.#rows.slice();
233
181
  for (let r = 0; r < this.#rows.length; r++) {
@@ -236,55 +184,48 @@ export default class TableNode extends BlockNode {
236
184
  }
237
185
  return new TableNode(newRows, this.#position, this.#caption);
238
186
  }
239
-
240
- withContentInRange(range: CaretRange): this | undefined {
187
+ withContentInRange(range) {
241
188
  const containsStart = this.contains(range.start.node);
242
189
  const containsEnd = this.contains(range.end.node);
243
- if (!containsStart && !containsEnd) return this.copy();
244
-
190
+ if (!containsStart && !containsEnd)
191
+ return this.copy();
245
192
  // If it contains the start, skip rows until we find the cell with the start node.
246
193
  // If it contains the end, skip rows after we find the cell with the end node.
247
- let r = 0,
248
- c = 0;
194
+ let r = 0, c = 0;
249
195
  let foundStart = false;
250
196
  let foundEnd = false;
251
- let newRows: FormatNode[][] = [];
197
+ let newRows = [];
252
198
  for (; r < this.#rows.length; r++, c = 0) {
253
199
  const row = this.#rows[r];
254
-
255
200
  // Skip this row if this table contains the start node and we haven't found it and the row doesn't contain it
256
- if (
257
- containsStart &&
201
+ if (containsStart &&
258
202
  !foundStart &&
259
- row.find((r) => r.contains(range.start.node)) === undefined
260
- )
203
+ row.find((r) => r.contains(range.start.node)) === undefined)
261
204
  continue;
262
205
  // Stop if we found the end row.
263
- if (containsEnd && foundEnd) break;
264
-
265
- newRows.push([] as FormatNode[]);
206
+ if (containsEnd && foundEnd)
207
+ break;
208
+ newRows.push([]);
266
209
  for (; c < row.length; c++) {
267
210
  if (!foundStart && row[c].contains(range.start.node))
268
211
  foundStart = true;
269
212
  const newCell = row[c].withContentInRange(range);
270
- if (newCell === undefined) return;
271
- newRows[newRows.length - 1].push(
272
- ((containsStart && foundStart) || !containsStart) &&
273
- ((containsEnd && !foundEnd) || !containsEnd)
274
- ? newCell
275
- : new FormatNode('', [new TextNode()])
276
- );
277
- if (row[c].contains(range.end.node)) foundEnd = true;
213
+ if (newCell === undefined)
214
+ return;
215
+ newRows[newRows.length - 1].push(((containsStart && foundStart) || !containsStart) &&
216
+ ((containsEnd && !foundEnd) || !containsEnd)
217
+ ? newCell
218
+ : new FormatNode('', [new TextNode()]));
219
+ if (row[c].contains(range.end.node))
220
+ foundEnd = true;
278
221
  }
279
222
  }
280
-
281
223
  const newCaption = this.#caption.withContentInRange(range);
282
- if (newCaption === undefined) return;
283
-
284
- return new TableNode(newRows, this.#position, newCaption) as this;
224
+ if (newCaption === undefined)
225
+ return;
226
+ return new TableNode(newRows, this.#position, newCaption);
285
227
  }
286
-
287
- withPosition(position: Position) {
228
+ withPosition(position) {
288
229
  return new TableNode(this.#rows, position, this.#caption);
289
230
  }
290
231
  }
@@ -0,0 +1 @@
1
+ export {};