bookish-press 0.4.1 → 0.4.21
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.
- package/README.md +3 -1
- package/components/Auth.svelte +19 -14
- package/components/Auth.svelte.d.ts +4 -4
- package/components/Authentication.d.ts +2 -2
- package/components/BookPreview.svelte +77 -59
- package/components/BookPreview.svelte.d.ts +5 -5
- package/components/External.svelte +1 -1
- package/components/External.svelte.d.ts +3 -3
- package/components/Link.svelte +49 -3
- package/components/Link.svelte.d.ts +3 -4
- package/components/app/BookList.svelte +19 -0
- package/components/app/BookList.svelte.d.ts +18 -0
- package/components/app/Button.svelte +49 -0
- package/components/app/Button.svelte.d.ts +22 -0
- package/components/app/Feedback.svelte +45 -0
- package/components/app/Feedback.svelte.d.ts +18 -0
- package/components/app/Head.svelte +12 -0
- package/components/app/Head.svelte.d.ts +27 -0
- package/components/app/Large.svelte +8 -0
- package/components/app/Large.svelte.d.ts +27 -0
- package/components/app/Lead.svelte +12 -0
- package/components/app/Lead.svelte.d.ts +27 -0
- package/components/app/Link.svelte +24 -0
- package/components/app/Link.svelte.d.ts +20 -0
- package/components/app/Options.svelte +24 -0
- package/components/app/Options.svelte.d.ts +19 -0
- package/components/app/Paragraph.svelte +19 -0
- package/components/app/Paragraph.svelte.d.ts +18 -0
- package/components/app/Table.svelte +32 -0
- package/components/app/Table.svelte.d.ts +27 -0
- package/components/app/TextInput.svelte +37 -0
- package/components/app/TextInput.svelte.d.ts +22 -0
- package/components/app/Writing.svelte +13 -0
- package/components/app/Writing.svelte.d.ts +27 -0
- package/components/chapter/Atom.svelte +20 -6
- package/components/chapter/Atom.svelte.d.ts +3 -3
- package/components/chapter/Block.svelte +23 -20
- package/components/chapter/Block.svelte.d.ts +4 -4
- package/components/chapter/Callout.svelte +38 -7
- package/components/chapter/Callout.svelte.d.ts +4 -4
- package/components/chapter/CaptionedCode.svelte +66 -23
- package/components/chapter/CaptionedCode.svelte.d.ts +4 -4
- package/components/chapter/ChapterBody.svelte +61 -9
- package/components/chapter/ChapterBody.svelte.d.ts +4 -4
- package/components/chapter/Citations.svelte +86 -20
- package/components/chapter/Citations.svelte.d.ts +4 -4
- package/components/chapter/Code.svelte +152 -21
- package/components/chapter/Code.svelte.d.ts +3 -3
- package/components/chapter/Comment.svelte +38 -16
- package/components/chapter/Comment.svelte.d.ts +3 -3
- package/components/chapter/Definition.svelte +52 -18
- package/components/chapter/Definition.svelte.d.ts +5 -8
- package/components/chapter/Embed.svelte +154 -66
- package/components/chapter/Embed.svelte.d.ts +5 -4
- package/components/chapter/ErrorMessage.svelte +7 -2
- package/components/chapter/ErrorMessage.svelte.d.ts +4 -4
- package/components/chapter/ExtendedPrism.d.ts +2 -0
- package/components/chapter/ExtendedPrism.js +69 -0
- package/components/chapter/Figure.svelte +90 -0
- package/components/chapter/Figure.svelte.d.ts +24 -0
- package/components/chapter/Footnote.svelte +75 -12
- package/components/chapter/Footnote.svelte.d.ts +4 -4
- package/components/chapter/Format.svelte +60 -37
- package/components/chapter/Format.svelte.d.ts +4 -4
- package/components/chapter/InlineCode.svelte +15 -5
- package/components/chapter/InlineCode.svelte.d.ts +4 -4
- package/components/chapter/Label.svelte +37 -8
- package/components/chapter/Label.svelte.d.ts +4 -4
- package/components/chapter/Link.svelte +23 -18
- package/components/chapter/Link.svelte.d.ts +4 -4
- package/components/chapter/List.svelte +75 -8
- package/components/chapter/List.svelte.d.ts +4 -4
- package/components/chapter/Marginal.svelte +169 -27
- package/components/chapter/Marginal.svelte.d.ts +6 -3
- package/components/chapter/Paragraph.svelte +74 -6
- package/components/chapter/Paragraph.svelte.d.ts +4 -4
- package/components/chapter/Positioned.svelte +33 -0
- package/components/chapter/Positioned.svelte.d.ts +19 -0
- package/components/chapter/Problem.svelte +15 -0
- package/components/chapter/Problem.svelte.d.ts +27 -0
- package/components/chapter/Python.svelte +68 -21
- package/components/chapter/Python.svelte.d.ts +4 -4
- package/components/chapter/Quote.svelte +64 -11
- package/components/chapter/Quote.svelte.d.ts +4 -4
- package/components/chapter/Rule.svelte +12 -1
- package/components/chapter/Rule.svelte.d.ts +4 -4
- package/components/chapter/Table.svelte +36 -25
- package/components/chapter/Table.svelte.d.ts +4 -4
- package/components/chapter/Text.svelte +61 -36
- package/components/chapter/Text.svelte.d.ts +5 -4
- package/components/editor/BookishEditor.svelte +343 -237
- package/components/editor/BookishEditor.svelte.d.ts +5 -5
- package/components/editor/CalloutEditor.svelte +5 -5
- package/components/editor/CalloutEditor.svelte.d.ts +4 -4
- package/components/editor/CaptionedCodeEditor.svelte +16 -12
- package/components/editor/CaptionedCodeEditor.svelte.d.ts +4 -4
- package/components/editor/CaretContext.d.ts +48 -16
- package/components/editor/CaretState.d.ts +16 -44
- package/components/editor/CaretUtilities.d.ts +2 -2
- package/components/editor/CaretView.svelte +80 -0
- package/components/editor/CaretView.svelte.d.ts +24 -0
- package/components/editor/CitationsEditor.svelte +36 -25
- package/components/editor/CitationsEditor.svelte.d.ts +4 -4
- package/components/editor/Clipboard.d.ts +2 -2
- package/components/editor/Command.d.ts +13 -12
- package/components/editor/Commands.d.ts +1 -1
- package/components/editor/Commands.js +1114 -571
- package/components/editor/ConfirmButton.svelte +18 -12
- package/components/editor/ConfirmButton.svelte.d.ts +5 -4
- package/components/editor/DefinitionEditor.svelte +29 -21
- package/components/editor/DefinitionEditor.svelte.d.ts +4 -4
- package/components/editor/EmbedEditor.svelte +93 -43
- package/components/editor/EmbedEditor.svelte.d.ts +3 -3
- package/components/editor/Icon.svelte +17 -0
- package/components/editor/Icon.svelte.d.ts +16 -0
- package/components/editor/ImageChooser.svelte +53 -34
- package/components/editor/ImageChooser.svelte.d.ts +3 -3
- package/components/editor/InlineCodeEditor.svelte +7 -4
- package/components/editor/InlineCodeEditor.svelte.d.ts +4 -4
- package/components/editor/LabelEditor.svelte +20 -11
- package/components/editor/LabelEditor.svelte.d.ts +4 -4
- package/components/editor/LanguageEditor.svelte +10 -7
- package/components/editor/LanguageEditor.svelte.d.ts +3 -3
- package/components/editor/LinkEditor.svelte +64 -39
- package/components/editor/LinkEditor.svelte.d.ts +4 -4
- package/components/editor/Note.svelte +3 -3
- package/components/editor/Note.svelte.d.ts +6 -2
- package/components/editor/PositionEditor.svelte +9 -6
- package/components/editor/PositionEditor.svelte.d.ts +4 -4
- package/components/editor/QuoteEditor.svelte +7 -2
- package/components/editor/QuoteEditor.svelte.d.ts +4 -4
- package/components/editor/Switch.svelte +55 -28
- package/components/editor/Switch.svelte.d.ts +4 -4
- package/components/editor/TableEditor.svelte +10 -0
- package/components/editor/TableEditor.svelte.d.ts +17 -0
- package/components/editor/TextEditor.svelte +83 -45
- package/components/editor/TextEditor.svelte.d.ts +5 -4
- package/components/editor/Toggle.svelte +11 -8
- package/components/editor/Toggle.svelte.d.ts +4 -4
- package/components/editor/Toolbar.svelte +192 -144
- package/components/editor/Toolbar.svelte.d.ts +5 -8
- package/components/editor/ToolbarGroup.svelte +18 -23
- package/components/editor/ToolbarGroup.svelte.d.ts +3 -4
- package/components/editor/ToolbarSpacer.svelte +8 -1
- package/components/editor/ToolbarSpacer.svelte.d.ts +6 -2
- package/components/editor/URLEditor.svelte +6 -8
- package/components/editor/URLEditor.svelte.d.ts +3 -3
- package/components/editor/UndoState.d.ts +3 -3
- package/components/editor/icons/annotate.svg +1 -0
- package/components/editor/icons/block.svg +1 -0
- package/components/editor/icons/bold.svg +1 -0
- package/components/editor/icons/bullets.svg +1 -0
- package/components/editor/icons/callout.svg +1 -0
- package/components/editor/icons/citation.svg +8 -0
- package/components/editor/icons/clear.svg +1 -0
- package/components/editor/icons/clipboard.svg +1 -0
- package/components/editor/icons/code.svg +1 -0
- package/components/editor/icons/columnafter.svg +1 -0
- package/components/editor/icons/columnbefore.svg +1 -0
- package/components/editor/icons/comment.svg +1 -0
- package/components/editor/icons/copy.svg +1 -0
- package/components/editor/icons/cut.svg +1 -0
- package/components/editor/icons/define.svg +7 -0
- package/components/editor/icons/deletecolumn.svg +1 -0
- package/components/editor/icons/deleterow.svg +1 -0
- package/components/editor/icons/footnote.svg +8 -0
- package/components/editor/icons/header1.svg +7 -0
- package/components/editor/icons/header2.svg +7 -0
- package/components/editor/icons/header3.svg +7 -0
- package/components/editor/icons/home.svg +1 -0
- package/components/editor/icons/indent.svg +1 -0
- package/components/editor/icons/italic.svg +1 -0
- package/components/editor/icons/label.svg +1 -0
- package/components/editor/icons/left.svg +1 -0
- package/components/editor/icons/level.svg +1 -0
- package/components/editor/icons/link.svg +1 -0
- package/components/editor/icons/list.svg +1 -0
- package/components/editor/icons/media.svg +1 -0
- package/components/editor/icons/middle.svg +1 -0
- package/components/editor/icons/numbers.svg +10 -0
- package/components/editor/icons/paragraph.svg +1 -0
- package/components/editor/icons/paste.svg +10 -0
- package/components/editor/icons/quote.svg +1 -0
- package/components/editor/icons/redo.svg +1 -0
- package/components/editor/icons/right.svg +1 -0
- package/components/editor/icons/rowabove.svg +1 -0
- package/components/editor/icons/rowbelow.svg +1 -0
- package/components/editor/icons/rule.svg +1 -0
- package/components/editor/icons/sub.svg +1 -0
- package/components/editor/icons/super.svg +1 -0
- package/components/editor/icons/table.svg +1 -0
- package/components/editor/icons/text.svg +1 -0
- package/components/editor/icons/time.svg +1 -0
- package/components/editor/icons/undo.svg +1 -0
- package/components/editor/icons/unindent.svg +1 -0
- package/components/editor/icons/unlink.svg +1 -0
- package/components/page/Acknowledgements.svelte +31 -22
- package/components/page/Acknowledgements.svelte.d.ts +4 -4
- package/components/page/Authors.svelte +34 -14
- package/components/page/Authors.svelte.d.ts +6 -6
- package/components/page/BulkReferenceEditor.svelte +53 -22
- package/components/page/BulkReferenceEditor.svelte.d.ts +4 -4
- package/components/page/Chapter.svelte +196 -141
- package/components/page/Chapter.svelte.d.ts +3 -3
- package/components/page/ChapterContext.d.ts +4 -4
- package/components/page/ChapterNumber.svelte +9 -0
- package/components/page/ChapterNumber.svelte.d.ts +27 -0
- package/components/page/ChapterTitle.svelte +16 -0
- package/components/page/ChapterTitle.svelte.d.ts +18 -0
- package/components/page/Contexts.d.ts +31 -20
- package/components/page/Contexts.js +47 -17
- package/components/page/DefinitionView.svelte +115 -86
- package/components/page/DefinitionView.svelte.d.ts +3 -3
- package/components/page/Description.svelte +27 -18
- package/components/page/Description.svelte.d.ts +4 -4
- package/components/page/Edition.svelte +127 -75
- package/components/page/Edition.svelte.d.ts +4 -4
- package/components/page/Editions.svelte +158 -0
- package/components/page/Editions.svelte.d.ts +14 -0
- package/components/page/Glossary.svelte +57 -48
- package/components/page/Glossary.svelte.d.ts +4 -4
- package/components/page/Header.svelte +129 -44
- package/components/page/Header.svelte.d.ts +6 -6
- package/components/page/Index.svelte +114 -80
- package/components/page/Index.svelte.d.ts +4 -4
- package/components/page/Instructions.svelte +18 -16
- package/components/page/Instructions.svelte.d.ts +4 -4
- package/components/page/License.svelte +29 -21
- package/components/page/License.svelte.d.ts +4 -4
- package/components/page/Loading.svelte +102 -12
- package/components/page/Loading.svelte.d.ts +6 -2
- package/components/page/Media.svelte +77 -51
- package/components/page/Media.svelte.d.ts +4 -4
- package/components/page/MediaPreview.svelte +26 -8
- package/components/page/MediaPreview.svelte.d.ts +3 -3
- package/components/page/Muted.svelte +10 -0
- package/components/page/Muted.svelte.d.ts +27 -0
- package/components/page/Outline.svelte +279 -59
- package/components/page/Outline.svelte.d.ts +3 -3
- package/components/page/Page.svelte +40 -9
- package/components/page/Page.svelte.d.ts +3 -3
- package/components/page/PageHeader.svelte +14 -0
- package/components/page/PageHeader.svelte.d.ts +18 -0
- package/components/page/PageParagraph.svelte +18 -0
- package/components/page/PageParagraph.svelte.d.ts +27 -0
- package/components/page/PossibleChapter.svelte +7 -7
- package/components/page/PossibleChapter.svelte.d.ts +4 -4
- package/components/page/PossibleReference.svelte +6 -11
- package/components/page/PossibleReference.svelte.d.ts +6 -7
- package/components/page/Print.svelte +27 -3
- package/components/page/Print.svelte.d.ts +4 -4
- package/components/page/Reference.svelte +256 -113
- package/components/page/Reference.svelte.d.ts +5 -5
- package/components/page/References.svelte +39 -47
- package/components/page/References.svelte.d.ts +4 -4
- package/components/page/Rows.svelte +54 -0
- package/components/page/Rows.svelte.d.ts +27 -0
- package/components/page/Search.svelte +86 -63
- package/components/page/Search.svelte.d.ts +4 -4
- package/components/page/Status.svelte +43 -35
- package/components/page/Status.svelte.d.ts +4 -9
- package/components/page/SubdomainEditor.svelte +40 -27
- package/components/page/SubdomainEditor.svelte.d.ts +4 -4
- package/components/page/TableOfContents.svelte +225 -190
- package/components/page/TableOfContents.svelte.d.ts +4 -4
- package/components/page/TableOfContentsImage.svelte +8 -8
- package/components/page/TableOfContentsImage.svelte.d.ts +3 -3
- package/components/page/TableOfContentsRow.svelte +96 -33
- package/components/page/TableOfContentsRow.svelte.d.ts +4 -4
- package/components/page/ThemeEditor.svelte +174 -39
- package/components/page/ThemeEditor.svelte.d.ts +4 -4
- package/components/page/ThemeEditorPreview.svelte +35 -23
- package/components/page/ThemeEditorPreview.svelte.d.ts +5 -5
- package/components/page/ThemeSetEditor.svelte +15 -13
- package/components/page/ThemeSetEditor.svelte.d.ts +4 -4
- package/components/page/ThemeVariableEditor.svelte +24 -15
- package/components/page/ThemeVariableEditor.svelte.d.ts +3 -3
- package/components/page/Title.svelte +12 -0
- package/components/page/Title.svelte.d.ts +27 -0
- package/components/page/Unknown.svelte +25 -21
- package/components/page/Unknown.svelte.d.ts +4 -4
- package/components/page/margins.js +50 -33
- package/index.d.ts +14 -0
- package/index.js +14 -0
- package/models/CRUD.d.ts +17 -0
- package/models/CRUD.js +207 -0
- package/models/Firebase.d.ts +1 -0
- package/models/Firebase.js +21 -15
- package/models/book/Book.d.ts +26 -30
- package/models/book/Book.js +120 -113
- package/models/book/BookMedia.d.ts +3 -3
- package/models/book/BookMedia.js +22 -16
- package/models/book/BookSaveStatus.d.ts +7 -0
- package/models/book/BookSaveStatus.js +8 -0
- package/models/book/Chapter.d.ts +46 -39
- package/models/book/Chapter.js +180 -198
- package/models/book/ChapterID.js +7 -7
- package/models/book/Definition.d.ts +1 -1
- package/models/book/Edition.d.ts +62 -60
- package/models/book/Edition.js +385 -303
- package/models/book/Reference.d.ts +24 -0
- package/models/book/Reference.js +78 -0
- package/models/book/Schema.d.ts +169 -0
- package/models/book/Schema.js +114 -0
- package/models/book/Theme.d.ts +44 -37
- package/models/book/Theme.js +452 -52
- package/models/book/ThemeColors.d.ts +1 -1
- package/models/book/Words.d.ts +2 -0
- package/models/book/Words.js +110 -0
- package/models/chapter/AtomNode.d.ts +4 -4
- package/models/chapter/AtomNode.js +20 -13
- package/models/chapter/BlockNode.d.ts +9 -10
- package/models/chapter/BlockNode.js +32 -13
- package/models/chapter/BlocksNode.d.ts +10 -10
- package/models/chapter/BlocksNode.js +315 -120
- package/models/chapter/BlocksNode.test.js +494 -228
- package/models/chapter/Bookkeeping.d.ts +1 -1
- package/models/chapter/CalloutNode.d.ts +3 -3
- package/models/chapter/CalloutNode.js +34 -12
- package/models/chapter/Caret.d.ts +9 -7
- package/models/chapter/Caret.js +11 -6
- package/models/chapter/ChapterNode.d.ts +11 -11
- package/models/chapter/ChapterNode.js +70 -33
- package/models/chapter/CitationsNode.d.ts +3 -3
- package/models/chapter/CitationsNode.js +31 -12
- package/models/chapter/CodeNode.d.ts +11 -6
- package/models/chapter/CodeNode.js +143 -34
- package/models/chapter/CommentNode.d.ts +5 -5
- package/models/chapter/CommentNode.js +29 -13
- package/models/chapter/DefinitionNode.d.ts +2 -2
- package/models/chapter/DefinitionNode.js +15 -7
- package/models/chapter/Edit.d.ts +3 -3
- package/models/chapter/EmbedNode.d.ts +9 -5
- package/models/chapter/EmbedNode.js +108 -35
- package/models/chapter/ErrorNode.d.ts +2 -2
- package/models/chapter/ErrorNode.js +34 -12
- package/models/chapter/FootnoteNode.d.ts +5 -5
- package/models/chapter/FootnoteNode.js +34 -16
- package/models/chapter/FormatNode.d.ts +10 -10
- package/models/chapter/FormatNode.js +237 -106
- package/models/chapter/FormatNode.test.js +87 -45
- package/models/chapter/InlineCodeNode.d.ts +2 -2
- package/models/chapter/InlineCodeNode.js +22 -9
- package/models/chapter/LabelNode.d.ts +4 -4
- package/models/chapter/LabelNode.js +31 -13
- package/models/chapter/LinkNode.d.ts +2 -2
- package/models/chapter/LinkNode.js +21 -9
- package/models/chapter/ListNode.d.ts +8 -8
- package/models/chapter/ListNode.js +99 -38
- package/models/chapter/ListNode.test.js +29 -24
- package/models/chapter/MetadataNode.d.ts +3 -3
- package/models/chapter/MetadataNode.js +13 -5
- package/models/chapter/Node.d.ts +5 -3
- package/models/chapter/Node.js +76 -29
- package/models/chapter/Node.test.js +20 -18
- package/models/chapter/ParagraphNode.d.ts +6 -6
- package/models/chapter/ParagraphNode.js +84 -29
- package/models/chapter/ParagraphNode.test.js +22 -13
- package/models/chapter/Parser.d.ts +25 -25
- package/models/chapter/Parser.js +201 -189
- package/models/chapter/Parser.test.js +16 -16
- package/models/chapter/Position.d.ts +1 -1
- package/models/chapter/QuoteNode.d.ts +6 -6
- package/models/chapter/QuoteNode.js +61 -23
- package/models/chapter/RootNode.d.ts +4 -4
- package/models/chapter/RuleNode.d.ts +2 -2
- package/models/chapter/RuleNode.js +31 -11
- package/models/chapter/TableNode.d.ts +8 -6
- package/models/chapter/TableNode.js +89 -34
- package/models/chapter/TableNode.test.js +22 -24
- package/models/chapter/TextNode.d.ts +6 -6
- package/models/chapter/TextNode.js +72 -32
- package/models/chapter/TextNode.test.js +4 -4
- package/models/loadEdition.d.ts +1 -1
- package/models/loadEdition.js +10 -6
- package/package.json +104 -25
- package/util/getSubdomain.js +8 -6
- package/util/isMobile.js +1 -1
- package/util/mineReference.d.ts +3 -2
- package/util/mineReference.js +67 -29
- package/util/scrollToEyeLevel.js +6 -1
- package/components/chapter/renderPosition.d.ts +0 -3
- package/components/chapter/renderPosition.js +0 -4
- package/components/editor/ToolbarIcon.svelte +0 -22
- package/components/editor/ToolbarIcon.svelte.d.ts +0 -16
- package/components/page/Alert.svelte +0 -11
- package/components/page/Alert.svelte.d.ts +0 -23
- package/components/page/Revisions.svelte +0 -124
- package/components/page/Revisions.svelte.d.ts +0 -14
- package/models/BookLoader.d.ts +0 -2
- package/models/BookLoader.js +0 -67
- package/models/Firestore.d.ts +0 -22
- package/models/Firestore.js +0 -194
- package/models/chapter/ReferenceNode.d.ts +0 -29
- package/models/chapter/ReferenceNode.js +0 -48
|
@@ -2,20 +2,50 @@
|
|
|
2
2
|
// to avoid key collisions and prevent typos. This is partly
|
|
3
3
|
// future-proofing, but also because getContext<Type>() isn't type safe,
|
|
4
4
|
// as the resulting value is coerced to Type even if it's not that value.
|
|
5
|
-
import { getContext } from
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export
|
|
16
|
-
export
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export
|
|
20
|
-
export
|
|
21
|
-
|
|
5
|
+
import { getContext } from 'svelte';
|
|
6
|
+
import { get } from 'svelte/store';
|
|
7
|
+
export const DARK_MODE = Symbol('dark');
|
|
8
|
+
export function getDarkMode() {
|
|
9
|
+
return getContext(DARK_MODE);
|
|
10
|
+
}
|
|
11
|
+
export const AUTH = Symbol('auth');
|
|
12
|
+
export function getAuth() {
|
|
13
|
+
return getContext(AUTH);
|
|
14
|
+
}
|
|
15
|
+
export const BOOK = Symbol('book');
|
|
16
|
+
export function getBook() {
|
|
17
|
+
return getContext(BOOK);
|
|
18
|
+
}
|
|
19
|
+
export const EDITION = Symbol('edition');
|
|
20
|
+
export function getEdition() {
|
|
21
|
+
return getContext(EDITION);
|
|
22
|
+
}
|
|
23
|
+
export const CHAPTER = Symbol('chapter');
|
|
24
|
+
export function getChapter() {
|
|
25
|
+
return getContext(CHAPTER);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Update the edition that contains the chapter, then update the
|
|
29
|
+
* global edition store with the new edition, propogating the changes everywhere.
|
|
30
|
+
*/
|
|
31
|
+
export function setChapter(store, previous, chapter) {
|
|
32
|
+
const edition = get(store);
|
|
33
|
+
if (edition)
|
|
34
|
+
store.set(edition.withRevisedChapter(previous, chapter));
|
|
35
|
+
}
|
|
36
|
+
export const EDITABLE = Symbol('editable');
|
|
37
|
+
export function isEditable() {
|
|
38
|
+
return getContext(EDITABLE);
|
|
39
|
+
}
|
|
40
|
+
export const BASE = Symbol('base');
|
|
41
|
+
export function getBase() {
|
|
42
|
+
return getContext(BASE);
|
|
43
|
+
}
|
|
44
|
+
export const CARET = Symbol('caret');
|
|
45
|
+
export function getCaret() {
|
|
46
|
+
return getContext(CARET);
|
|
47
|
+
}
|
|
48
|
+
export const STATUS = Symbol('status');
|
|
49
|
+
export function getStatus() {
|
|
50
|
+
return getContext(STATUS);
|
|
51
|
+
}
|
|
@@ -6,6 +6,7 @@ import Format from '../chapter/Format.svelte';
|
|
|
6
6
|
import Note from '../editor/Note.svelte';
|
|
7
7
|
import { afterUpdate } from 'svelte';
|
|
8
8
|
import { getEdition, isEditable } from './Contexts';
|
|
9
|
+
import Button from '../app/Button.svelte';
|
|
9
10
|
export let id;
|
|
10
11
|
export let definition;
|
|
11
12
|
let edition = getEdition();
|
|
@@ -15,7 +16,7 @@ let newSynonym = false;
|
|
|
15
16
|
let synonymsEditor = null;
|
|
16
17
|
afterUpdate(() => {
|
|
17
18
|
if (newSynonym && synonymsEditor) {
|
|
18
|
-
const editors = synonymsEditor.querySelectorAll(
|
|
19
|
+
const editors = synonymsEditor.querySelectorAll('input');
|
|
19
20
|
if (editors.length > 0) {
|
|
20
21
|
const last = editors[editors.length - 1];
|
|
21
22
|
if (last instanceof HTMLElement)
|
|
@@ -26,104 +27,132 @@ afterUpdate(() => {
|
|
|
26
27
|
});
|
|
27
28
|
$: format = Parser.parseFormat(undefined, definition.definition).withTextIfEmpty();
|
|
28
29
|
function addSynonym() {
|
|
29
|
-
if ($edition
|
|
30
|
-
$edition.
|
|
30
|
+
if ($edition) {
|
|
31
|
+
edition.set($edition.withEditedDefinition(id, {
|
|
31
32
|
phrase: definition.phrase,
|
|
32
33
|
definition: definition.definition,
|
|
33
|
-
synonyms: [...definition.synonyms,
|
|
34
|
-
});
|
|
34
|
+
synonyms: [...(definition.synonyms ?? []), ''],
|
|
35
|
+
}));
|
|
35
36
|
}
|
|
36
37
|
newSynonym = true;
|
|
37
38
|
}
|
|
38
39
|
$: syns = definition.synonyms || [];
|
|
39
40
|
</script>
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
commandLabel="x"
|
|
46
|
-
confirmLabel="Confirm"
|
|
47
|
-
command={() => $edition.removeDefinition(id)}
|
|
48
|
-
/>
|
|
49
|
-
{/if}
|
|
50
|
-
{#if editable && edition }
|
|
51
|
-
<strong>
|
|
42
|
+
{#if $edition}
|
|
43
|
+
<section class="definition">
|
|
44
|
+
<dt>
|
|
45
|
+
{#if editable}
|
|
52
46
|
<TextEditor
|
|
53
|
-
|
|
54
|
-
label={'Glossary phrase editor.'}
|
|
47
|
+
text={definition.phrase}
|
|
48
|
+
label={'Glossary phrase editor.'}
|
|
55
49
|
placeholder="Phrase"
|
|
56
|
-
valid={
|
|
57
|
-
if(text.length === 0) return "
|
|
50
|
+
valid={(text) => {
|
|
51
|
+
if (text.length === 0) return "phrase can't be empty";
|
|
58
52
|
}}
|
|
59
|
-
save={text =>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
save={(text) =>
|
|
54
|
+
$edition
|
|
55
|
+
? edition.set(
|
|
56
|
+
$edition.withEditedDefinition(id, {
|
|
57
|
+
phrase: text,
|
|
58
|
+
definition: definition.definition,
|
|
59
|
+
synonyms: definition.synonyms,
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
: undefined}
|
|
64
63
|
/>
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
64
|
+
{:else if definition.phrase}{definition.phrase}{:else}<em
|
|
65
|
+
>—</em
|
|
66
|
+
>{/if}
|
|
67
|
+
{#if editable}
|
|
68
|
+
<ConfirmButton
|
|
69
|
+
tooltip="delete entry {definition.phrase}"
|
|
70
|
+
commandLabel="- definition"
|
|
71
|
+
confirmLabel="confirm"
|
|
72
|
+
command={() =>
|
|
73
|
+
$edition
|
|
74
|
+
? edition.set($edition.withoutDefinition(id))
|
|
75
|
+
: undefined}
|
|
76
|
+
/>
|
|
77
|
+
{/if}
|
|
78
|
+
</dt>
|
|
79
|
+
|
|
80
|
+
<dd class="term">
|
|
81
|
+
{#if editable && edition}
|
|
82
|
+
<BookishEditor
|
|
83
|
+
ast={format}
|
|
84
|
+
save={(node) =>
|
|
85
|
+
$edition
|
|
86
|
+
? edition.set(
|
|
87
|
+
$edition.withEditedDefinition(id, {
|
|
88
|
+
phrase: definition.phrase,
|
|
89
|
+
definition: node.toBookdown(),
|
|
90
|
+
synonyms: definition.synonyms,
|
|
91
|
+
})
|
|
92
|
+
)
|
|
93
|
+
: undefined}
|
|
94
|
+
chapter={false}
|
|
95
|
+
component={Format}
|
|
96
|
+
placeholder="write a definition"
|
|
97
|
+
/>
|
|
98
|
+
{:else if definition.definition === ''}
|
|
85
99
|
<em>Definition</em>
|
|
86
100
|
{:else}
|
|
87
|
-
<Format node={format}/>
|
|
101
|
+
<Format node={format} />
|
|
88
102
|
{/if}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
103
|
+
{#if edition && editable}
|
|
104
|
+
<span bind:this={synonymsEditor}>
|
|
105
|
+
{#if syns.length === 0}
|
|
106
|
+
<Note>no synonyms</Note>
|
|
107
|
+
{:else}
|
|
108
|
+
{#each syns as syn, index}
|
|
109
|
+
<Note>
|
|
110
|
+
<TextEditor
|
|
111
|
+
text={syn}
|
|
112
|
+
label={'Synonym editor.'}
|
|
113
|
+
placeholder="Synonym"
|
|
114
|
+
valid={() => undefined}
|
|
115
|
+
save={(text) => {
|
|
116
|
+
const newSyns = [...syns];
|
|
117
|
+
// Remove the synonym if it's empty but wasn't before
|
|
118
|
+
if (syn.length > 0 && text.length === 0)
|
|
119
|
+
newSyns.splice(index, 1);
|
|
120
|
+
else newSyns[index] = text;
|
|
121
|
+
if ($edition)
|
|
122
|
+
edition.set(
|
|
123
|
+
$edition.withEditedDefinition(
|
|
124
|
+
id,
|
|
125
|
+
{
|
|
126
|
+
phrase: definition.phrase,
|
|
127
|
+
definition:
|
|
128
|
+
definition.definition,
|
|
129
|
+
synonyms: newSyns,
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
);
|
|
133
|
+
}}
|
|
134
|
+
/>
|
|
135
|
+
</Note>
|
|
136
|
+
{#if syns.length > 1 && index < syns.length - 1}, {/if}
|
|
137
|
+
{/each}
|
|
138
|
+
{/if}
|
|
139
|
+
</span> <Button tooltip="add synonym" command={addSynonym}
|
|
140
|
+
>+ synonym</Button
|
|
141
|
+
>
|
|
142
|
+
{:else if definition.synonyms !== undefined && definition.synonyms.length > 0}
|
|
143
|
+
<Note>{definition.synonyms.join(', ')}</Note>
|
|
126
144
|
{/if}
|
|
127
|
-
|
|
128
|
-
</
|
|
129
|
-
|
|
145
|
+
</dd>
|
|
146
|
+
</section>
|
|
147
|
+
{/if}
|
|
148
|
+
|
|
149
|
+
<style>
|
|
150
|
+
dd {
|
|
151
|
+
margin: 0;
|
|
152
|
+
margin-top: var(--bookish-paragraph-spacing);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
dt {
|
|
156
|
+
font-weight: bold;
|
|
157
|
+
}
|
|
158
|
+
</style>
|
|
@@ -10,9 +10,9 @@ declare const __propDef: {
|
|
|
10
10
|
};
|
|
11
11
|
slots: {};
|
|
12
12
|
};
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
13
|
+
export type DefinitionViewProps = typeof __propDef.props;
|
|
14
|
+
export type DefinitionViewEvents = typeof __propDef.events;
|
|
15
|
+
export type DefinitionViewSlots = typeof __propDef.slots;
|
|
16
16
|
export default class DefinitionView extends SvelteComponentTyped<DefinitionViewProps, DefinitionViewEvents, DefinitionViewSlots> {
|
|
17
17
|
}
|
|
18
18
|
export {};
|
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
<script>import Parser from
|
|
2
|
-
import ChapterBody from
|
|
3
|
-
import BookishEditor from
|
|
4
|
-
import { getEdition, isEditable } from
|
|
1
|
+
<script>import Parser from '../../models/chapter/Parser';
|
|
2
|
+
import ChapterBody from '../chapter/ChapterBody.svelte';
|
|
3
|
+
import BookishEditor from '../editor/BookishEditor.svelte';
|
|
4
|
+
import { getEdition, isEditable } from './Contexts';
|
|
5
5
|
let editable = isEditable();
|
|
6
6
|
let edition = getEdition();
|
|
7
|
-
$: descriptionNode =
|
|
7
|
+
$: descriptionNode = $edition
|
|
8
|
+
? Parser.parseChapter($edition, $edition.getDescription())
|
|
9
|
+
: undefined;
|
|
8
10
|
</script>
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
{#if descriptionNode}
|
|
13
|
+
<section class="bookish-description">
|
|
14
|
+
{#if editable}
|
|
15
|
+
<BookishEditor
|
|
16
|
+
ast={descriptionNode}
|
|
17
|
+
save={(node) =>
|
|
18
|
+
$edition
|
|
19
|
+
? edition.set(
|
|
20
|
+
$edition?.setDescription(node.toBookdown())
|
|
21
|
+
)
|
|
22
|
+
: undefined}
|
|
23
|
+
chapter={false}
|
|
24
|
+
component={ChapterBody}
|
|
25
|
+
placeholder="What is this book about?"
|
|
26
|
+
/>
|
|
27
|
+
{:else}
|
|
28
|
+
<ChapterBody node={descriptionNode} />
|
|
29
|
+
{/if}
|
|
30
|
+
</section>
|
|
31
|
+
{/if}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
2
|
declare const __propDef: {
|
|
3
|
-
props:
|
|
3
|
+
props: Record<string, never>;
|
|
4
4
|
events: {
|
|
5
5
|
[evt: string]: CustomEvent<any>;
|
|
6
6
|
};
|
|
7
7
|
slots: {};
|
|
8
8
|
};
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
9
|
+
export type DescriptionProps = typeof __propDef.props;
|
|
10
|
+
export type DescriptionEvents = typeof __propDef.events;
|
|
11
|
+
export type DescriptionSlots = typeof __propDef.slots;
|
|
12
12
|
export default class Description extends SvelteComponentTyped<DescriptionProps, DescriptionEvents, DescriptionSlots> {
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script>import smoothscroll from 'smoothscroll-polyfill';
|
|
2
2
|
import { goto } from '$app/navigation';
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { setContext } from 'svelte';
|
|
4
|
+
import { writable } from 'svelte/store';
|
|
5
|
+
import { BASE, DARK_MODE, EDITABLE, } from './Contexts';
|
|
6
|
+
import { BookishTheme } from '../../models/book/Theme';
|
|
7
7
|
// Poly fill smooth scrolling for Safari.
|
|
8
8
|
smoothscroll.polyfill();
|
|
9
9
|
// True if the edition should be editable. Distributed as context.
|
|
@@ -11,97 +11,149 @@ export let editable = false;
|
|
|
11
11
|
// When editable changes, update the context.
|
|
12
12
|
$: setContext(EDITABLE, editable);
|
|
13
13
|
// The base path allows links to adjust to different routing contexts in which a book is placed.
|
|
14
|
-
// For example, when the book is hosted alone, all routes might start with the bare root "/",
|
|
14
|
+
// For example, when the book is hosted alone, all routes might start with the bare root "/",
|
|
15
15
|
// but when the book is being viewed or edited in the Bookish app, it needs a prefix for the
|
|
16
16
|
// route in the app.
|
|
17
|
-
export let base =
|
|
17
|
+
export let base = '/';
|
|
18
18
|
// When the base changes, update the context.
|
|
19
|
-
|
|
19
|
+
let baseStore = writable(base);
|
|
20
|
+
$: setContext(BASE, baseStore);
|
|
21
|
+
$: baseStore.set(base);
|
|
20
22
|
// The book edition to render.
|
|
21
23
|
export let edition;
|
|
22
|
-
// Expose the edition to descendents in a store and update the context when the edition changes.
|
|
23
|
-
let currentEdition = writable(edition);
|
|
24
|
-
setContext(EDITION, currentEdition);
|
|
25
|
-
// Expose the book to descendents in a store and update the context when the edition changes.
|
|
26
|
-
$: setContext(BOOK, edition.getBook());
|
|
27
|
-
// When edition changes, unsubscribe to the previous edition and subscribe to the new one.
|
|
28
|
-
// We use a simple assignment to tell Svelte about the change.
|
|
29
|
-
let editionChanged = () => currentEdition.set(edition);
|
|
30
|
-
$: {
|
|
31
|
-
// Remove the listeners from the old edition
|
|
32
|
-
$currentEdition.removeListener(editionChanged);
|
|
33
|
-
$currentEdition.getBook()?.removeListener(editionChanged);
|
|
34
|
-
// Update the current edition.
|
|
35
|
-
currentEdition.set(edition);
|
|
36
|
-
// Listen to the new edition
|
|
37
|
-
$currentEdition.getBook()?.addListener(editionChanged);
|
|
38
|
-
$currentEdition.addListener(editionChanged);
|
|
39
|
-
}
|
|
40
|
-
// Create a timer that saves the current edition periodically and stops when unmounted.
|
|
41
|
-
onMount(() => {
|
|
42
|
-
const saveListener = setInterval(() => {
|
|
43
|
-
$currentEdition.saveEdits();
|
|
44
|
-
$currentEdition.getBook()?.saveEdits();
|
|
45
|
-
}, 500);
|
|
46
|
-
// On unmount, stop listening.
|
|
47
|
-
return () => clearInterval(saveListener);
|
|
48
|
-
});
|
|
49
24
|
// Default dark mode to whatever's stored in local storage, if anything.
|
|
50
25
|
// respect user choice on the website despite the system theme
|
|
51
|
-
let darkMode = writable(typeof localStorage !==
|
|
52
|
-
localStorage.getItem(
|
|
53
|
-
|
|
54
|
-
))
|
|
26
|
+
let darkMode = writable(typeof localStorage !== 'undefined' &&
|
|
27
|
+
localStorage.getItem('dark') !== 'false' &&
|
|
28
|
+
(localStorage.getItem('dark') === 'true' || // A previous setting
|
|
29
|
+
window.matchMedia('(prefers-color-scheme: dark)').matches) // Operating system is set to dark
|
|
30
|
+
);
|
|
55
31
|
// Expose dark mode to descendants
|
|
56
32
|
setContext(DARK_MODE, darkMode);
|
|
57
33
|
// When dark mode changes, update the body's class list.
|
|
58
34
|
$: {
|
|
59
|
-
if ($darkMode)
|
|
60
|
-
document.body.classList.add(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
localStorage.setItem("bookish-dark", $darkMode ? "true" : "false");
|
|
66
|
-
}
|
|
35
|
+
if ($darkMode)
|
|
36
|
+
document.body.classList.add('dark');
|
|
37
|
+
else
|
|
38
|
+
document.body.classList.remove('dark');
|
|
39
|
+
if (typeof localStorage !== 'undefined')
|
|
40
|
+
localStorage.setItem('dark', $darkMode ? 'true' : 'false');
|
|
67
41
|
}
|
|
68
42
|
// Redirect old hash routes by simply replacing their hash before routing.
|
|
69
|
-
if (typeof window !==
|
|
43
|
+
if (typeof window !== 'undefined' && window.location.hash.startsWith('#/'))
|
|
70
44
|
goto(location.hash.replace('#', ''));
|
|
71
45
|
// Set the theme, whatever it is, and change it when the edition changes.
|
|
72
|
-
$: setTheme(edition.getTheme());
|
|
46
|
+
$: setTheme(edition.getTheme() ?? BookishTheme);
|
|
47
|
+
/** Given a theme, sets the appropriate CSS rules in the browser to apply the theme.*/
|
|
73
48
|
function setTheme(theme) {
|
|
74
|
-
// Remove any existing theme.
|
|
75
|
-
document.getElementById("bookish-theme")?.remove();
|
|
76
49
|
// If the theme is being unset, make sure we've removed any overrding style declaration.
|
|
77
50
|
// This let's the default theme kick in.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
51
|
+
let themeTagImports = document.getElementById('bookish-theme-imports');
|
|
52
|
+
let themeTagCSS = document.getElementById('bookish-theme');
|
|
53
|
+
// We only want to set it if it's actually different than what's currently set.
|
|
54
|
+
// Otherwise during editing we get lots of jittery changes on each edit, because the
|
|
55
|
+
// whole edition is rerendering. To check this, we set a data attribute on the style tag containing
|
|
56
|
+
// a stringify of the theme set. We do this separately for the imports, since they can have more
|
|
57
|
+
// major changes than the spacing and color sizes, changing fonts especially.
|
|
58
|
+
const themeTagCSSValue = themeTagCSS?.dataset.css;
|
|
59
|
+
const themeTagImportsValue = themeTagImports?.dataset.imports;
|
|
60
|
+
const newThemeTagCSSValue = JSON.stringify(theme);
|
|
61
|
+
const newThemeTagImportsValue = JSON.stringify(theme?.imports);
|
|
62
|
+
if (theme !== null) {
|
|
63
|
+
// If the imports changed, update theme.
|
|
64
|
+
if (themeTagImportsValue !== newThemeTagImportsValue) {
|
|
65
|
+
// If it's being set, create a new style tag.
|
|
66
|
+
const newThemeImportsTag = document.createElement('style');
|
|
67
|
+
// Give it an ID so we can remove it later.
|
|
68
|
+
newThemeImportsTag.setAttribute('id', 'bookish-theme-imports');
|
|
69
|
+
newThemeImportsTag.dataset.imports = newThemeTagImportsValue;
|
|
70
|
+
// Insert any import statements, then any rules.
|
|
71
|
+
const css = `${(theme.imports ?? [])
|
|
72
|
+
.map((url) => `@import url(${url});`)
|
|
73
|
+
.join('\n')}`;
|
|
74
|
+
newThemeImportsTag.appendChild(document.createTextNode(css));
|
|
75
|
+
document.head.appendChild(newThemeImportsTag);
|
|
76
|
+
// Remove the old tag
|
|
77
|
+
themeTagImports?.remove();
|
|
78
|
+
}
|
|
79
|
+
// If the rules changed, update them.
|
|
80
|
+
if (themeTagCSSValue !== newThemeTagCSSValue) {
|
|
81
|
+
// If it's being set, create a new style tag.
|
|
82
|
+
const newThemeCSSTag = document.createElement('style');
|
|
83
|
+
// Give it an ID so we can remove it later.
|
|
84
|
+
newThemeCSSTag.setAttribute('id', 'bookish-theme');
|
|
85
|
+
newThemeCSSTag.dataset.css = newThemeTagCSSValue;
|
|
86
|
+
// Insert any import statements, then any rules.
|
|
87
|
+
const css = `
|
|
88
|
+
${(theme.imports ?? [])
|
|
89
|
+
.map((url) => `@import url(${url});`)
|
|
90
|
+
.join('\n')}
|
|
91
|
+
.bookish {
|
|
92
|
+
${theme.light ? toRules(theme.light) : ''}
|
|
93
|
+
${theme.fonts ? toRules(theme.fonts) : ''}
|
|
94
|
+
${theme.sizes ? toRules(theme.sizes) : ''}
|
|
95
|
+
${theme.weights ? toRules(theme.weights) : ''}
|
|
96
|
+
${theme.spacing ? toRules(theme.spacing) : ''}
|
|
97
|
+
}
|
|
98
|
+
.dark {
|
|
99
|
+
${theme.dark ? toRules(theme.dark) : ''}
|
|
100
|
+
}`;
|
|
101
|
+
newThemeCSSTag.appendChild(document.createTextNode(css));
|
|
102
|
+
document.head.appendChild(newThemeCSSTag);
|
|
103
|
+
// Remove the old tag
|
|
104
|
+
themeTagCSS?.remove();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Remove the old tags, unsetting the theme.
|
|
109
|
+
themeTagImports?.remove();
|
|
110
|
+
themeTagCSS?.remove();
|
|
111
|
+
}
|
|
95
112
|
}
|
|
96
113
|
function toRules(set) {
|
|
97
|
-
return Object.keys(set)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
114
|
+
return Object.keys(set)
|
|
115
|
+
.map((name) => {
|
|
116
|
+
const value = set[name];
|
|
117
|
+
if (value.length > 0) {
|
|
118
|
+
const cssVariable = '--bookish-' +
|
|
119
|
+
name
|
|
120
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
121
|
+
.split(' ')
|
|
122
|
+
.map((s) => s.toLowerCase())
|
|
123
|
+
.join('-')
|
|
124
|
+
.replace(/([0-9])/g, '-$1-');
|
|
125
|
+
return `${cssVariable}: ${value};`;
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
.join('\n\t\t');
|
|
101
129
|
}
|
|
102
130
|
</script>
|
|
103
131
|
|
|
104
|
-
<
|
|
105
|
-
<slot
|
|
106
|
-
|
|
107
|
-
|
|
132
|
+
<main class="bookish {$darkMode ? ' dark' : ''}">
|
|
133
|
+
<slot />
|
|
134
|
+
</main>
|
|
135
|
+
|
|
136
|
+
<style>
|
|
137
|
+
* {
|
|
138
|
+
box-sizing: border-box;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* WINDOW AND PAGES */
|
|
142
|
+
:global(body) {
|
|
143
|
+
margin: 0;
|
|
144
|
+
padding: 0;
|
|
145
|
+
background-color: var(--bookish-background-color);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* The root container for a book */
|
|
149
|
+
.bookish {
|
|
150
|
+
font-weight: var(--bookish-paragraph-font-weight);
|
|
151
|
+
font-family: var(--bookish-paragraph-font-family);
|
|
152
|
+
font-size: var(--bookish-paragraph-font-size);
|
|
153
|
+
background-color: var(--bookish-background-color);
|
|
154
|
+
color: var(--bookish-paragraph-color);
|
|
155
|
+
width: 100%;
|
|
156
|
+
z-index: 0;
|
|
157
|
+
text-align: left;
|
|
158
|
+
}
|
|
159
|
+
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type EditionModel from
|
|
2
|
+
import type EditionModel from '../../models/book/Edition';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
editable?: boolean | undefined;
|
|
@@ -13,9 +13,9 @@ declare const __propDef: {
|
|
|
13
13
|
default: {};
|
|
14
14
|
};
|
|
15
15
|
};
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
export
|
|
16
|
+
export type EditionProps = typeof __propDef.props;
|
|
17
|
+
export type EditionEvents = typeof __propDef.events;
|
|
18
|
+
export type EditionSlots = typeof __propDef.slots;
|
|
19
19
|
export default class Edition extends SvelteComponentTyped<EditionProps, EditionEvents, EditionSlots> {
|
|
20
20
|
}
|
|
21
21
|
export {};
|