bookish-press 0.7.4 → 0.8.2

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 (249) hide show
  1. package/README.md +8 -0
  2. package/dist/components/Auth.svelte +29 -39
  3. package/dist/components/Auth.svelte.d.ts +5 -17
  4. package/dist/components/BookPreview.svelte +14 -20
  5. package/dist/components/BookPreview.svelte.d.ts +6 -18
  6. package/dist/components/Link.svelte +19 -30
  7. package/dist/components/Link.svelte.d.ts +7 -20
  8. package/dist/components/app/BookList.svelte +2 -3
  9. package/dist/components/app/BookList.svelte.d.ts +6 -18
  10. package/dist/components/app/Button.svelte +12 -8
  11. package/dist/components/app/Button.svelte.d.ts +10 -23
  12. package/dist/components/app/Feedback.svelte +4 -4
  13. package/dist/components/app/Feedback.svelte.d.ts +6 -19
  14. package/dist/components/app/Head.svelte +2 -2
  15. package/dist/components/app/Head.svelte.d.ts +6 -19
  16. package/dist/components/app/Large.svelte +4 -1
  17. package/dist/components/app/Large.svelte.d.ts +5 -28
  18. package/dist/components/app/Lead.svelte +4 -1
  19. package/dist/components/app/Lead.svelte.d.ts +5 -28
  20. package/dist/components/app/Link.svelte +12 -9
  21. package/dist/components/app/Link.svelte.d.ts +9 -22
  22. package/dist/components/app/Options.svelte +8 -6
  23. package/dist/components/app/Options.svelte.d.ts +8 -20
  24. package/dist/components/app/Paragraph.svelte +2 -2
  25. package/dist/components/app/Paragraph.svelte.d.ts +6 -19
  26. package/dist/components/app/Section.svelte +4 -1
  27. package/dist/components/app/Section.svelte.d.ts +5 -28
  28. package/dist/components/app/Table.svelte +4 -1
  29. package/dist/components/app/Table.svelte.d.ts +5 -28
  30. package/dist/components/app/TextInput.svelte +10 -8
  31. package/dist/components/app/TextInput.svelte.d.ts +12 -23
  32. package/dist/components/chapter/Atom.svelte +4 -7
  33. package/dist/components/chapter/Atom.svelte.d.ts +6 -19
  34. package/dist/components/chapter/Block.svelte +21 -23
  35. package/dist/components/chapter/Block.svelte.d.ts +5 -17
  36. package/dist/components/chapter/Callout.svelte +3 -5
  37. package/dist/components/chapter/Callout.svelte.d.ts +5 -17
  38. package/dist/components/chapter/CaptionedCode.svelte +12 -14
  39. package/dist/components/chapter/CaptionedCode.svelte.d.ts +5 -17
  40. package/dist/components/chapter/ChapterBody.svelte +14 -17
  41. package/dist/components/chapter/ChapterBody.svelte.d.ts +7 -19
  42. package/dist/components/chapter/ChapterBody.test.d.ts +1 -0
  43. package/dist/components/chapter/ChapterBody.test.js +85 -0
  44. package/dist/components/chapter/Citations.svelte +39 -45
  45. package/dist/components/chapter/Citations.svelte.d.ts +5 -17
  46. package/dist/components/chapter/Code.svelte +158 -155
  47. package/dist/components/chapter/Code.svelte.d.ts +10 -23
  48. package/dist/components/chapter/Comment.svelte +30 -23
  49. package/dist/components/chapter/Comment.svelte.d.ts +5 -17
  50. package/dist/components/chapter/Definition.svelte +36 -34
  51. package/dist/components/chapter/Definition.svelte.d.ts +5 -17
  52. package/dist/components/chapter/Embed.svelte +78 -72
  53. package/dist/components/chapter/Embed.svelte.d.ts +8 -20
  54. package/dist/components/chapter/ErrorMessage.svelte +2 -4
  55. package/dist/components/chapter/ErrorMessage.svelte.d.ts +5 -17
  56. package/dist/components/chapter/Figure.svelte +22 -29
  57. package/dist/components/chapter/Figure.svelte.d.ts +9 -22
  58. package/dist/components/chapter/Footnote.svelte +40 -32
  59. package/dist/components/chapter/Footnote.svelte.d.ts +5 -17
  60. package/dist/components/chapter/Format.svelte +26 -41
  61. package/dist/components/chapter/Format.svelte.d.ts +7 -18
  62. package/dist/components/chapter/InlineCode.svelte +7 -8
  63. package/dist/components/chapter/InlineCode.svelte.d.ts +5 -17
  64. package/dist/components/chapter/Label.svelte +5 -11
  65. package/dist/components/chapter/Label.svelte.d.ts +5 -17
  66. package/dist/components/chapter/LineBreak.svelte +1 -3
  67. package/dist/components/chapter/LineBreak.svelte.d.ts +5 -17
  68. package/dist/components/chapter/Link.svelte +17 -23
  69. package/dist/components/chapter/Link.svelte.d.ts +5 -17
  70. package/dist/components/chapter/List.svelte +9 -9
  71. package/dist/components/chapter/List.svelte.d.ts +6 -17
  72. package/dist/components/chapter/Marginal.svelte +59 -60
  73. package/dist/components/chapter/Marginal.svelte.d.ts +10 -22
  74. package/dist/components/chapter/Paragraph.svelte +8 -23
  75. package/dist/components/chapter/Paragraph.svelte.d.ts +6 -18
  76. package/dist/components/chapter/Positioned.svelte +2 -4
  77. package/dist/components/chapter/Positioned.svelte.d.ts +6 -19
  78. package/dist/components/chapter/Problem.svelte +3 -2
  79. package/dist/components/chapter/Problem.svelte.d.ts +5 -28
  80. package/dist/components/chapter/Python.svelte +45 -58
  81. package/dist/components/chapter/Python.svelte.d.ts +6 -18
  82. package/dist/components/chapter/Quote.svelte +5 -7
  83. package/dist/components/chapter/Quote.svelte.d.ts +5 -17
  84. package/dist/components/chapter/Rule.svelte +1 -3
  85. package/dist/components/chapter/Rule.svelte.d.ts +5 -17
  86. package/dist/components/chapter/Table.svelte +6 -8
  87. package/dist/components/chapter/Table.svelte.d.ts +5 -17
  88. package/dist/components/chapter/Text.svelte +54 -69
  89. package/dist/components/chapter/Text.svelte.d.ts +6 -18
  90. package/dist/components/controls/DarkToggle.svelte +7 -8
  91. package/dist/components/controls/DarkToggle.svelte.d.ts +6 -18
  92. package/dist/components/editor/BookishEditor.svelte +583 -761
  93. package/dist/components/editor/BookishEditor.svelte.d.ts +14 -26
  94. package/dist/components/editor/CalloutEditor.svelte +3 -3
  95. package/dist/components/editor/CalloutEditor.svelte.d.ts +5 -17
  96. package/dist/components/editor/CaptionedCodeEditor.svelte +5 -5
  97. package/dist/components/editor/CaptionedCodeEditor.svelte.d.ts +5 -17
  98. package/dist/components/editor/CaretView.svelte +23 -25
  99. package/dist/components/editor/CaretView.svelte.d.ts +15 -27
  100. package/dist/components/editor/CitationsEditor.svelte +25 -28
  101. package/dist/components/editor/CitationsEditor.svelte.d.ts +5 -17
  102. package/dist/components/editor/ConfirmButton.svelte +9 -6
  103. package/dist/components/editor/ConfirmButton.svelte.d.ts +8 -21
  104. package/dist/components/editor/DefinitionEditor.svelte +11 -15
  105. package/dist/components/editor/DefinitionEditor.svelte.d.ts +5 -17
  106. package/dist/components/editor/EmbedEditor.svelte +43 -44
  107. package/dist/components/editor/EmbedEditor.svelte.d.ts +5 -17
  108. package/dist/components/editor/Icon.svelte +1 -1
  109. package/dist/components/editor/Icon.svelte.d.ts +5 -17
  110. package/dist/components/editor/ImageChooser.svelte +15 -18
  111. package/dist/components/editor/ImageChooser.svelte.d.ts +6 -18
  112. package/dist/components/editor/ImageThumbnail.svelte +29 -24
  113. package/dist/components/editor/ImageThumbnail.svelte.d.ts +7 -19
  114. package/dist/components/editor/InlineCodeEditor.svelte +3 -3
  115. package/dist/components/editor/InlineCodeEditor.svelte.d.ts +5 -17
  116. package/dist/components/editor/LabelEditor.svelte +5 -6
  117. package/dist/components/editor/LabelEditor.svelte.d.ts +5 -17
  118. package/dist/components/editor/LanguageEditor.svelte +4 -5
  119. package/dist/components/editor/LanguageEditor.svelte.d.ts +6 -18
  120. package/dist/components/editor/LinkEditor.svelte +52 -68
  121. package/dist/components/editor/LinkEditor.svelte.d.ts +5 -17
  122. package/dist/components/editor/Note.svelte +4 -1
  123. package/dist/components/editor/Note.svelte.d.ts +5 -28
  124. package/dist/components/editor/Permissions.svelte +36 -34
  125. package/dist/components/editor/Permissions.svelte.d.ts +9 -21
  126. package/dist/components/editor/PositionEditor.svelte +6 -7
  127. package/dist/components/editor/PositionEditor.svelte.d.ts +6 -18
  128. package/dist/components/editor/QuoteEditor.svelte +3 -3
  129. package/dist/components/editor/QuoteEditor.svelte.d.ts +5 -17
  130. package/dist/components/editor/Switch.svelte +16 -11
  131. package/dist/components/editor/Switch.svelte.d.ts +9 -21
  132. package/dist/components/editor/TableEditor.svelte +3 -3
  133. package/dist/components/editor/TableEditor.svelte.d.ts +5 -17
  134. package/dist/components/editor/TextEditor.svelte +74 -87
  135. package/dist/components/editor/TextEditor.svelte.d.ts +13 -25
  136. package/dist/components/editor/Toggle.svelte +18 -21
  137. package/dist/components/editor/Toggle.svelte.d.ts +7 -20
  138. package/dist/components/editor/Toolbar.svelte +140 -145
  139. package/dist/components/editor/Toolbar.svelte.d.ts +5 -17
  140. package/dist/components/editor/ToolbarGroup.svelte +4 -4
  141. package/dist/components/editor/ToolbarGroup.svelte.d.ts +6 -19
  142. package/dist/components/editor/ToolbarSpacer.svelte +1 -1
  143. package/dist/components/editor/ToolbarSpacer.svelte.d.ts +22 -21
  144. package/dist/components/editor/URLEditor.svelte +3 -5
  145. package/dist/components/editor/URLEditor.svelte.d.ts +7 -19
  146. package/dist/components/page/Acknowledgements.svelte +14 -8
  147. package/dist/components/page/Acknowledgements.svelte.d.ts +3 -16
  148. package/dist/components/page/Analytics.svelte +2 -3
  149. package/dist/components/page/Analytics.svelte.d.ts +6 -17
  150. package/dist/components/page/Authors.svelte +29 -29
  151. package/dist/components/page/Authors.svelte.d.ts +11 -23
  152. package/dist/components/page/BookLoader.svelte +47 -43
  153. package/dist/components/page/BookLoader.svelte.d.ts +5 -17
  154. package/dist/components/page/BulkReferenceEditor.svelte +43 -26
  155. package/dist/components/page/BulkReferenceEditor.svelte.d.ts +3 -16
  156. package/dist/components/page/Chapter.svelte +224 -249
  157. package/dist/components/page/Chapter.svelte.d.ts +6 -18
  158. package/dist/components/page/ChapterContext.d.ts +3 -1
  159. package/dist/components/page/ChapterNumber.svelte +4 -1
  160. package/dist/components/page/ChapterNumber.svelte.d.ts +5 -28
  161. package/dist/components/page/ChapterTitle.svelte +4 -4
  162. package/dist/components/page/ChapterTitle.svelte.d.ts +6 -19
  163. package/dist/components/page/Contexts.js +2 -2
  164. package/dist/components/page/DefinitionView.svelte +51 -44
  165. package/dist/components/page/DefinitionView.svelte.d.ts +6 -18
  166. package/dist/components/page/Description.svelte +10 -4
  167. package/dist/components/page/Description.svelte.d.ts +16 -14
  168. package/dist/components/page/EditableHeader.svelte +4 -6
  169. package/dist/components/page/EditableHeader.svelte.d.ts +7 -18
  170. package/dist/components/page/Edition.svelte +57 -71
  171. package/dist/components/page/Edition.svelte.d.ts +7 -20
  172. package/dist/components/page/EditionLoader.svelte +119 -82
  173. package/dist/components/page/EditionLoader.svelte.d.ts +6 -19
  174. package/dist/components/page/Editions.svelte +26 -31
  175. package/dist/components/page/Editions.svelte.d.ts +5 -17
  176. package/dist/components/page/Glossary.svelte +31 -35
  177. package/dist/components/page/Glossary.svelte.d.ts +3 -16
  178. package/dist/components/page/Header.svelte +43 -49
  179. package/dist/components/page/Header.svelte.d.ts +19 -30
  180. package/dist/components/page/Index.svelte +46 -46
  181. package/dist/components/page/Index.svelte.d.ts +3 -16
  182. package/dist/components/page/Instructions.svelte +2 -2
  183. package/dist/components/page/Instructions.svelte.d.ts +6 -19
  184. package/dist/components/page/License.svelte +13 -7
  185. package/dist/components/page/License.svelte.d.ts +16 -14
  186. package/dist/components/page/Loading.svelte +9 -9
  187. package/dist/components/page/Loading.svelte.d.ts +22 -21
  188. package/dist/components/page/Media.svelte +36 -27
  189. package/dist/components/page/Media.svelte.d.ts +3 -16
  190. package/dist/components/page/MediaPreview.svelte +22 -19
  191. package/dist/components/page/MediaPreview.svelte.d.ts +8 -21
  192. package/dist/components/page/Muted.svelte +4 -1
  193. package/dist/components/page/Muted.svelte.d.ts +5 -28
  194. package/dist/components/page/Outline.svelte +75 -97
  195. package/dist/components/page/Outline.svelte.d.ts +8 -20
  196. package/dist/components/page/Page.svelte +23 -33
  197. package/dist/components/page/Page.svelte.d.ts +7 -20
  198. package/dist/components/page/PageHeader.svelte +2 -2
  199. package/dist/components/page/PageHeader.svelte.d.ts +6 -19
  200. package/dist/components/page/PageParagraph.svelte +4 -1
  201. package/dist/components/page/PageParagraph.svelte.d.ts +5 -28
  202. package/dist/components/page/PossibleChapter.svelte +7 -7
  203. package/dist/components/page/PossibleChapter.svelte.d.ts +3 -16
  204. package/dist/components/page/PossibleReference.svelte +4 -5
  205. package/dist/components/page/PossibleReference.svelte.d.ts +6 -18
  206. package/dist/components/page/Print.svelte +11 -12
  207. package/dist/components/page/Print.svelte.d.ts +3 -16
  208. package/dist/components/page/Publish.svelte +47 -47
  209. package/dist/components/page/Publish.svelte.d.ts +3 -16
  210. package/dist/components/page/Reference.svelte +24 -35
  211. package/dist/components/page/Reference.svelte.d.ts +6 -18
  212. package/dist/components/page/References.svelte +21 -22
  213. package/dist/components/page/References.svelte.d.ts +3 -16
  214. package/dist/components/page/Rows.svelte +4 -1
  215. package/dist/components/page/Rows.svelte.d.ts +5 -28
  216. package/dist/components/page/Search.svelte +58 -60
  217. package/dist/components/page/Search.svelte.d.ts +3 -16
  218. package/dist/components/page/Status.svelte +2 -2
  219. package/dist/components/page/Status.svelte.d.ts +16 -14
  220. package/dist/components/page/SubdomainEditor.svelte +11 -11
  221. package/dist/components/page/SubdomainEditor.svelte.d.ts +16 -14
  222. package/dist/components/page/TableOfContents.svelte +143 -125
  223. package/dist/components/page/TableOfContents.svelte.d.ts +3 -16
  224. package/dist/components/page/TableOfContentsImage.svelte +6 -7
  225. package/dist/components/page/TableOfContentsImage.svelte.d.ts +6 -18
  226. package/dist/components/page/TableOfContentsRow.svelte +32 -32
  227. package/dist/components/page/TableOfContentsRow.svelte.d.ts +10 -22
  228. package/dist/components/page/ThemeEditor.svelte +35 -28
  229. package/dist/components/page/ThemeEditor.svelte.d.ts +3 -16
  230. package/dist/components/page/ThemeEditorPreview.svelte +11 -13
  231. package/dist/components/page/ThemeEditorPreview.svelte.d.ts +5 -17
  232. package/dist/components/page/ThemeSetEditor.svelte +4 -6
  233. package/dist/components/page/ThemeSetEditor.svelte.d.ts +7 -19
  234. package/dist/components/page/ThemeVariableEditor.svelte +9 -11
  235. package/dist/components/page/ThemeVariableEditor.svelte.d.ts +7 -19
  236. package/dist/components/page/Title.svelte +4 -1
  237. package/dist/components/page/Title.svelte.d.ts +5 -28
  238. package/dist/components/page/Unknown.svelte +11 -8
  239. package/dist/components/page/Unknown.svelte.d.ts +5 -17
  240. package/dist/models/Firebase.js +18 -4
  241. package/dist/models/book/Book.js +2 -1
  242. package/dist/models/book/BookMedia.js +1 -2
  243. package/dist/models/book/Chapter.js +3 -2
  244. package/dist/models/book/Edition.d.ts +1 -1
  245. package/dist/models/book/Edition.js +5 -1
  246. package/dist/models/chapter/BlocksNode.js +3 -1
  247. package/dist/models/chapter/BlocksNode.test.js +5 -1
  248. package/dist/models/chapter/Node.test.js +2 -2
  249. package/package.json +34 -22
@@ -1,20 +1,7 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- link?: string | undefined;
5
- };
6
- events: {
7
- [evt: string]: CustomEvent<any>;
8
- };
9
- slots: {
10
- default: {};
11
- };
12
- exports?: {} | undefined;
13
- bindings?: string | undefined;
14
- };
15
- export type ChapterTitleProps = typeof __propDef.props;
16
- export type ChapterTitleEvents = typeof __propDef.events;
17
- export type ChapterTitleSlots = typeof __propDef.slots;
18
- export default class ChapterTitle extends SvelteComponent<ChapterTitleProps, ChapterTitleEvents, ChapterTitleSlots> {
1
+ interface Props {
2
+ link?: string | undefined;
3
+ children?: import('svelte').Snippet;
19
4
  }
20
- export {};
5
+ declare const ChapterTitle: import("svelte").Component<Props, {}, "">;
6
+ type ChapterTitle = ReturnType<typeof ChapterTitle>;
7
+ export default ChapterTitle;
@@ -4,7 +4,7 @@
4
4
  // as the resulting value is coerced to Type even if it's not that value.
5
5
  import { getContext } from 'svelte';
6
6
  import { get } from 'svelte/store';
7
- import { page } from '$app/stores';
7
+ import { page } from '$app/state';
8
8
  import { updateLock } from '../../models/CRUD';
9
9
  export const DARK_MODE = Symbol('dark');
10
10
  export function getDarkMode() {
@@ -47,7 +47,7 @@ export function setChapter(store, previous, revised) {
47
47
  store.set(edition.withRevisedChapter(previous, revised));
48
48
  }
49
49
  function isRouteWrite() {
50
- return get(page).route.id?.startsWith('/(app)/write') ?? false;
50
+ return page.route.id?.startsWith('/(app)/write') ?? false;
51
51
  }
52
52
  export function isChapterEditable() {
53
53
  if (!isRouteWrite())
@@ -1,59 +1,66 @@
1
- <script>import Parser from '../../models/chapter/Parser';
2
- import ConfirmButton from '../editor/ConfirmButton.svelte';
3
- import TextEditor from '../editor/TextEditor.svelte';
4
- import BookishEditor from '../editor/BookishEditor.svelte';
5
- import Format from '../chapter/Format.svelte';
6
- import Note from '../editor/Note.svelte';
7
- import { afterUpdate } from 'svelte';
8
- import { getUser, getEdition, getLeasee, isChapterEditable, lease, isEditionEditable, } from './Contexts';
9
- import Button from '../app/Button.svelte';
10
- export let id;
11
- export let definition;
1
+ <script lang="ts">import Parser from "../../models/chapter/Parser";
2
+ import ConfirmButton from "../editor/ConfirmButton.svelte";
3
+ import TextEditor from "../editor/TextEditor.svelte";
4
+ import BookishEditor from "../editor/BookishEditor.svelte";
5
+ import Format from "../chapter/Format.svelte";
6
+ import Note from "../editor/Note.svelte";
7
+ import {
8
+ getUser,
9
+ getEdition,
10
+ getLeasee,
11
+ isChapterEditable,
12
+ lease,
13
+ isEditionEditable
14
+ } from "./Contexts";
15
+ import Button from "../app/Button.svelte";
16
+ let { id, definition } = $props();
12
17
  let auth = getUser();
13
18
  let edition = getEdition();
14
19
  let editable = isEditionEditable();
15
- // Focus after adding a new synonym.
16
20
  let newSynonym = false;
17
- let synonymsEditor = null;
18
- afterUpdate(() => {
19
- if (newSynonym && synonymsEditor) {
20
- const editors = synonymsEditor.querySelectorAll('input');
21
- if (editors.length > 0) {
22
- const last = editors[editors.length - 1];
23
- if (last instanceof HTMLElement)
24
- last.focus();
25
- }
26
- newSynonym = false;
21
+ let synonymsEditor = $state(null);
22
+ $effect(() => {
23
+ void definition;
24
+ if (newSynonym && synonymsEditor) {
25
+ const editors = synonymsEditor.querySelectorAll("input");
26
+ if (editors.length > 0) {
27
+ const last = editors[editors.length - 1];
28
+ if (last instanceof HTMLElement)
29
+ setTimeout(() => last.focus(), 0);
27
30
  }
31
+ newSynonym = false;
32
+ }
28
33
  });
29
34
  function addSynonym() {
30
- if ($edition) {
31
- edition.set($edition.withEditedDefinition(id, {
32
- phrase: definition.phrase,
33
- definition: definition.definition,
34
- synonyms: [...(definition.synonyms ?? []), ''],
35
- }));
36
- }
37
- newSynonym = true;
35
+ if ($edition) {
36
+ edition.set(
37
+ $edition.withEditedDefinition(id, {
38
+ phrase: definition.phrase,
39
+ definition: definition.definition,
40
+ synonyms: [...definition.synonyms ?? [], ""]
41
+ })
42
+ );
43
+ }
44
+ newSynonym = true;
38
45
  }
39
46
  function removeSynonym(index) {
40
- if (definition.synonyms &&
41
- index >= 0 &&
42
- index < definition.synonyms.length)
43
- updateSynonyms([
44
- ...definition.synonyms.slice(0, index),
45
- ...definition.synonyms.slice(index + 1),
46
- ]);
47
+ if (definition.synonyms && index >= 0 && index < definition.synonyms.length)
48
+ updateSynonyms([
49
+ ...definition.synonyms.slice(0, index),
50
+ ...definition.synonyms.slice(index + 1)
51
+ ]);
47
52
  }
48
53
  function updateSynonyms(synonyms) {
49
- if ($edition)
50
- edition.set($edition.withEditedDefinition(id, {
51
- phrase: definition.phrase,
52
- definition: definition.definition,
53
- synonyms: synonyms,
54
- }));
54
+ if ($edition)
55
+ edition.set(
56
+ $edition.withEditedDefinition(id, {
57
+ phrase: definition.phrase,
58
+ definition: definition.definition,
59
+ synonyms
60
+ })
61
+ );
55
62
  }
56
- $: syns = definition.synonyms || [];
63
+ let syns = $derived(definition.synonyms || []);
57
64
  </script>
58
65
 
59
66
  {#if $edition}
@@ -1,20 +1,8 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type Definition from '../../models/book/Definition';
3
- declare const __propDef: {
4
- props: {
5
- id: string;
6
- definition: Definition;
7
- };
8
- events: {
9
- [evt: string]: CustomEvent<any>;
10
- };
11
- slots: {};
12
- exports?: {} | undefined;
13
- bindings?: string | undefined;
14
- };
15
- export type DefinitionViewProps = typeof __propDef.props;
16
- export type DefinitionViewEvents = typeof __propDef.events;
17
- export type DefinitionViewSlots = typeof __propDef.slots;
18
- export default class DefinitionView extends SvelteComponent<DefinitionViewProps, DefinitionViewEvents, DefinitionViewSlots> {
2
+ interface Props {
3
+ id: string;
4
+ definition: Definition;
19
5
  }
20
- export {};
6
+ declare const DefinitionView: import("svelte").Component<Props, {}, "">;
7
+ type DefinitionView = ReturnType<typeof DefinitionView>;
8
+ export default DefinitionView;
@@ -1,7 +1,13 @@
1
- <script>import Parser from '../../models/chapter/Parser';
2
- import ChapterBody from '../chapter/ChapterBody.svelte';
3
- import BookishEditor from '../editor/BookishEditor.svelte';
4
- import { getUser, getEdition, getLeasee, isEditionEditable, lease, } from './Contexts';
1
+ <script lang="ts">import Parser from "../../models/chapter/Parser";
2
+ import ChapterBody from "../chapter/ChapterBody.svelte";
3
+ import BookishEditor from "../editor/BookishEditor.svelte";
4
+ import {
5
+ getUser,
6
+ getEdition,
7
+ getLeasee,
8
+ isEditionEditable,
9
+ lease
10
+ } from "./Contexts";
5
11
  let auth = getUser();
6
12
  let editable = isEditionEditable();
7
13
  let edition = getEdition();
@@ -1,16 +1,18 @@
1
- import { SvelteComponent } from "svelte";
2
- declare const __propDef: {
3
- props: Record<string, never>;
4
- events: {
5
- [evt: string]: CustomEvent<any>;
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
6
11
  };
7
- slots: {};
8
- exports?: {} | undefined;
9
- bindings?: string | undefined;
10
- };
11
- export type DescriptionProps = typeof __propDef.props;
12
- export type DescriptionEvents = typeof __propDef.events;
13
- export type DescriptionSlots = typeof __propDef.slots;
14
- export default class Description extends SvelteComponent<DescriptionProps, DescriptionEvents, DescriptionSlots> {
12
+ z_$$bindings?: Bindings;
15
13
  }
16
- export {};
14
+ declare const Description: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type Description = InstanceType<typeof Description>;
18
+ export default Description;
@@ -1,9 +1,7 @@
1
- <script>import TextEditor from '../editor/TextEditor.svelte';
2
- import { getEdition, isEditionEditable } from './Contexts';
3
- import PageHeader from './PageHeader.svelte';
4
- export let id;
5
- /** ARIA label */
6
- export let label;
1
+ <script lang="ts">import TextEditor from "../editor/TextEditor.svelte";
2
+ import { getEdition, isEditionEditable } from "./Contexts";
3
+ import PageHeader from "./PageHeader.svelte";
4
+ let { id, label } = $props();
7
5
  let edition = getEdition();
8
6
  let editable = isEditionEditable();
9
7
  </script>
@@ -1,20 +1,9 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type { TOCHeaderKey } from '../../models/book/ChapterID';
3
- declare const __propDef: {
4
- props: {
5
- id: TOCHeaderKey;
6
- /** ARIA label */ label: string;
7
- };
8
- events: {
9
- [evt: string]: CustomEvent<any>;
10
- };
11
- slots: {};
12
- exports?: {} | undefined;
13
- bindings?: string | undefined;
14
- };
15
- export type EditableHeaderProps = typeof __propDef.props;
16
- export type EditableHeaderEvents = typeof __propDef.events;
17
- export type EditableHeaderSlots = typeof __propDef.slots;
18
- export default class EditableHeader extends SvelteComponent<EditableHeaderProps, EditableHeaderEvents, EditableHeaderSlots> {
2
+ interface Props {
3
+ id: TOCHeaderKey;
4
+ /** ARIA label */
5
+ label: string;
19
6
  }
20
- export {};
7
+ declare const EditableHeader: import("svelte").Component<Props, {}, "">;
8
+ type EditableHeader = ReturnType<typeof EditableHeader>;
9
+ export default EditableHeader;
@@ -1,83 +1,69 @@
1
- <script>import smoothscroll from 'smoothscroll-polyfill';
2
- import { goto } from '$app/navigation';
3
- import { onMount, setContext } from 'svelte';
4
- import { writable } from 'svelte/store';
5
- import { BASE, DARK_MODE, getBook, } from './Contexts';
6
- import { BookishTheme } from '../../models/book/Theme';
7
- import { isDark, setDark } from '../../util/dark';
8
- import { page } from '$app/stores';
9
- import Title from './Title.svelte';
10
- import Page from './Page.svelte';
11
- // Poly fill smooth scrolling for Safari.
1
+ <script lang="ts">import smoothscroll from "smoothscroll-polyfill";
2
+ import { goto } from "$app/navigation";
3
+ import { onMount, setContext, untrack } from "svelte";
4
+ import { writable } from "svelte/store";
5
+ import {
6
+ BASE,
7
+ DARK_MODE,
8
+ getBook
9
+ } from "./Contexts";
10
+ import { BookishTheme } from "../../models/book/Theme";
11
+ import { isDark, setDark } from "../../util/dark";
12
+ import { page } from "$app/state";
13
+ import Title from "./Title.svelte";
14
+ import Page from "./Page.svelte";
15
+ import Parser from "../../models/chapter/Parser";
16
+ import EmbedNode from "../../models/chapter/EmbedNode";
12
17
  onMount(() => smoothscroll.polyfill());
13
- // The book and edition to render
14
- export let edition;
15
- // The base path allows links to adjust to different routing contexts in which a book is placed.
16
- // For example, when the book is hosted alone, all routes might start with the bare root "/",
17
- // but when the book is being viewed or edited in the Bookish app, it needs a prefix for the
18
- // route in the app.
19
- export let base = '';
18
+ let { edition, base = "", children } = $props();
19
+ let coverURL = $derived.by(() => {
20
+ const cover = edition?.getImage("cover");
21
+ if (!cover) return void 0;
22
+ const node = Parser.parseEmbed(edition, cover);
23
+ const url = node instanceof EmbedNode ? node.getURL() : void 0;
24
+ if (!url || url.length === 0) return void 0;
25
+ return url.startsWith("http") ? url : `${base}/images/${url}`;
26
+ });
20
27
  let book = getBook();
21
- // When the base changes, update the context.
22
- let baseStore = writable(base);
23
- $: setContext(BASE, baseStore);
24
- $: baseStore.set(base);
25
- // Default dark mode to whatever's stored in local storage, if anything.
26
- // respect user choice on the website despite the system theme
28
+ let baseStore = writable(untrack(() => base));
29
+ setContext(BASE, baseStore);
30
+ $effect.pre(() => {
31
+ baseStore.set(base);
32
+ });
27
33
  let darkMode = writable(isDark());
28
- // Expose dark mode to descendants
29
34
  setContext(DARK_MODE, darkMode);
30
- // When dark mode changes, update the body's class list.
31
- $: {
32
- setDark($darkMode);
33
- // Set the theme, whatever it is, and change it when the edition changes
34
- setTheme(edition?.getTheme() ?? BookishTheme);
35
- }
36
- // The CSS to set on the edition.
37
- let themeCSS;
38
- // Set the theme on mount.
39
- onMount(() => {
40
- setTheme(edition?.getTheme() ?? BookishTheme);
35
+ let themeCSS = $derived(
36
+ themeToCSS(edition?.getTheme() ?? BookishTheme)
37
+ );
38
+ $effect.pre(() => {
39
+ setDark($darkMode);
41
40
  });
42
- // Redirect old hash routes by simply replacing their hash before routing.
43
- if (typeof window !== 'undefined' && window.location.hash.startsWith('#/'))
44
- goto(location.hash.replace('#', ''));
45
- /** Given a theme, sets the appropriate CSS rules in the browser to apply the theme. */
46
- function setTheme(theme) {
47
- if (theme === null)
48
- theme = BookishTheme;
49
- themeCSS = `
50
- ${(theme.imports ?? [])
51
- .map((url) => `@import url(${url});`)
52
- .join('\n')}
41
+ if (typeof window !== "undefined" && window.location.hash.startsWith("#/"))
42
+ goto(location.hash.replace("#", ""));
43
+ function themeToCSS(theme) {
44
+ if (theme === null) theme = BookishTheme;
45
+ return `
46
+ ${(theme.imports ?? []).map((url) => `@import url(${url});`).join("\n")}
53
47
  .bookish {
54
- ${theme.light ? toRules(theme.light) : ''}
55
- ${theme.fonts ? toRules(theme.fonts) : ''}
56
- ${theme.sizes ? toRules(theme.sizes) : ''}
57
- ${theme.weights ? toRules(theme.weights) : ''}
58
- ${theme.spacing ? toRules(theme.spacing) : ''}
48
+ ${theme.light ? toRules(theme.light) : ""}
49
+ ${theme.fonts ? toRules(theme.fonts) : ""}
50
+ ${theme.sizes ? toRules(theme.sizes) : ""}
51
+ ${theme.weights ? toRules(theme.weights) : ""}
52
+ ${theme.spacing ? toRules(theme.spacing) : ""}
59
53
  }
60
54
  .dark {
61
- ${theme.dark ? toRules(theme.dark) : ''}
55
+ ${theme.dark ? toRules(theme.dark) : ""}
62
56
  }
63
57
  `;
64
58
  }
65
59
  function toRules(set) {
66
- return Object.keys(set)
67
- .map((name) => {
68
- const value = set[name];
69
- if (value.length > 0) {
70
- const cssVariable = '--bookish-' +
71
- name
72
- .replace(/([a-z])([A-Z])/g, '$1 $2')
73
- .split(' ')
74
- .map((s) => s.toLowerCase())
75
- .join('-')
76
- .replace(/([0-9])/g, '-$1-');
77
- return `${cssVariable}: ${value};`;
78
- }
79
- })
80
- .join('\n\t\t');
60
+ return Object.keys(set).map((name) => {
61
+ const value = set[name];
62
+ if (value.length > 0) {
63
+ const cssVariable = "--bookish-" + name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" ").map((s) => s.toLowerCase()).join("-").replace(/([0-9])/g, "-$1-");
64
+ return `${cssVariable}: ${value};`;
65
+ }
66
+ }).join("\n ");
81
67
  }
82
68
  </script>
83
69
 
@@ -87,7 +73,7 @@ function toRules(set) {
87
73
 
88
74
  {#if edition}
89
75
  <meta property="og:title" content={edition.getTitle()} />
90
- <meta property="og:image" content={edition.getImage('cover')} />
76
+ {#if coverURL}<meta property="og:image" content={coverURL} />{/if}
91
77
  <meta property="og:description" content={edition.getDescription()} />
92
78
  <meta property="og:type" content="book" />
93
79
  <meta property="og:author" content={edition.getAuthorsText()} />
@@ -95,7 +81,7 @@ function toRules(set) {
95
81
  property="og:url"
96
82
  content={edition.base ??
97
83
  `https://bookish.press/${
98
- $book && $book.domain ? $book.domain : $page.params.bookid
84
+ $book && $book.domain ? $book.domain : page.params.bookid
99
85
  }`}
100
86
  />
101
87
  {/if}
@@ -103,7 +89,7 @@ function toRules(set) {
103
89
 
104
90
  <main class="bookish {$darkMode ? ' dark' : ''}">
105
91
  {#if edition}
106
- <slot />
92
+ {@render children?.()}
107
93
  <!-- No edition to render? Coming soon. -->
108
94
  {:else if $book}
109
95
  <Page title={$book.title}>
@@ -1,22 +1,9 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type EditionModel from '../../models/book/Edition';
3
- declare const __propDef: {
4
- props: {
5
- edition: EditionModel | undefined;
6
- base?: string;
7
- };
8
- events: {
9
- [evt: string]: CustomEvent<any>;
10
- };
11
- slots: {
12
- default: {};
13
- };
14
- exports?: {} | undefined;
15
- bindings?: string | undefined;
16
- };
17
- export type EditionProps = typeof __propDef.props;
18
- export type EditionEvents = typeof __propDef.events;
19
- export type EditionSlots = typeof __propDef.slots;
20
- export default class Edition extends SvelteComponent<EditionProps, EditionEvents, EditionSlots> {
2
+ interface Props {
3
+ edition: EditionModel | undefined;
4
+ base?: string;
5
+ children?: import('svelte').Snippet;
21
6
  }
22
- export {};
7
+ declare const Edition: import("svelte").Component<Props, {}, "">;
8
+ type Edition = ReturnType<typeof Edition>;
9
+ export default Edition;