@fuzdev/fuz_ui 0.169.0
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/LICENSE +21 -0
- package/README.md +93 -0
- package/dist/Alert.svelte +108 -0
- package/dist/Alert.svelte.d.ts +16 -0
- package/dist/Alert.svelte.d.ts.map +1 -0
- package/dist/ApiDeclarationList.svelte +35 -0
- package/dist/ApiDeclarationList.svelte.d.ts +9 -0
- package/dist/ApiDeclarationList.svelte.d.ts.map +1 -0
- package/dist/ApiIndex.svelte +65 -0
- package/dist/ApiIndex.svelte.d.ts +23 -0
- package/dist/ApiIndex.svelte.d.ts.map +1 -0
- package/dist/ApiModule.svelte +124 -0
- package/dist/ApiModule.svelte.d.ts +22 -0
- package/dist/ApiModule.svelte.d.ts.map +1 -0
- package/dist/Breadcrumb.svelte +83 -0
- package/dist/Breadcrumb.svelte.d.ts +23 -0
- package/dist/Breadcrumb.svelte.d.ts.map +1 -0
- package/dist/Card.svelte +157 -0
- package/dist/Card.svelte.d.ts +13 -0
- package/dist/Card.svelte.d.ts.map +1 -0
- package/dist/ColorSchemeInput.svelte +65 -0
- package/dist/ColorSchemeInput.svelte.d.ts +11 -0
- package/dist/ColorSchemeInput.svelte.d.ts.map +1 -0
- package/dist/Contextmenu.svelte +30 -0
- package/dist/Contextmenu.svelte.d.ts +32 -0
- package/dist/Contextmenu.svelte.d.ts.map +1 -0
- package/dist/ContextmenuEntry.svelte +74 -0
- package/dist/ContextmenuEntry.svelte.d.ts +12 -0
- package/dist/ContextmenuEntry.svelte.d.ts.map +1 -0
- package/dist/ContextmenuLinkEntry.svelte +112 -0
- package/dist/ContextmenuLinkEntry.svelte.d.ts +12 -0
- package/dist/ContextmenuLinkEntry.svelte.d.ts.map +1 -0
- package/dist/ContextmenuRoot.svelte +372 -0
- package/dist/ContextmenuRoot.svelte.d.ts +71 -0
- package/dist/ContextmenuRoot.svelte.d.ts.map +1 -0
- package/dist/ContextmenuRootForSafariCompatibility.svelte +541 -0
- package/dist/ContextmenuRootForSafariCompatibility.svelte.d.ts +79 -0
- package/dist/ContextmenuRootForSafariCompatibility.svelte.d.ts.map +1 -0
- package/dist/ContextmenuSeparator.svelte +16 -0
- package/dist/ContextmenuSeparator.svelte.d.ts +4 -0
- package/dist/ContextmenuSeparator.svelte.d.ts.map +1 -0
- package/dist/ContextmenuSubmenu.svelte +116 -0
- package/dist/ContextmenuSubmenu.svelte.d.ts +10 -0
- package/dist/ContextmenuSubmenu.svelte.d.ts.map +1 -0
- package/dist/ContextmenuTextEntry.svelte +21 -0
- package/dist/ContextmenuTextEntry.svelte.d.ts +10 -0
- package/dist/ContextmenuTextEntry.svelte.d.ts.map +1 -0
- package/dist/CopyToClipboard.svelte +81 -0
- package/dist/CopyToClipboard.svelte.d.ts +18 -0
- package/dist/CopyToClipboard.svelte.d.ts.map +1 -0
- package/dist/DeclarationDetail.svelte +340 -0
- package/dist/DeclarationDetail.svelte.d.ts +8 -0
- package/dist/DeclarationDetail.svelte.d.ts.map +1 -0
- package/dist/DeclarationLink.svelte +50 -0
- package/dist/DeclarationLink.svelte.d.ts +8 -0
- package/dist/DeclarationLink.svelte.d.ts.map +1 -0
- package/dist/Details.svelte +51 -0
- package/dist/Details.svelte.d.ts +20 -0
- package/dist/Details.svelte.d.ts.map +1 -0
- package/dist/Dialog.svelte +217 -0
- package/dist/Dialog.svelte.d.ts +30 -0
- package/dist/Dialog.svelte.d.ts.map +1 -0
- package/dist/Dialogs.svelte +28 -0
- package/dist/Dialogs.svelte.d.ts +11 -0
- package/dist/Dialogs.svelte.d.ts.map +1 -0
- package/dist/Docs.svelte +179 -0
- package/dist/Docs.svelte.d.ts +13 -0
- package/dist/Docs.svelte.d.ts.map +1 -0
- package/dist/DocsContent.svelte +40 -0
- package/dist/DocsContent.svelte.d.ts +14 -0
- package/dist/DocsContent.svelte.d.ts.map +1 -0
- package/dist/DocsFooter.svelte +64 -0
- package/dist/DocsFooter.svelte.d.ts +15 -0
- package/dist/DocsFooter.svelte.d.ts.map +1 -0
- package/dist/DocsLink.svelte +41 -0
- package/dist/DocsLink.svelte.d.ts +12 -0
- package/dist/DocsLink.svelte.d.ts.map +1 -0
- package/dist/DocsList.svelte +44 -0
- package/dist/DocsList.svelte.d.ts +11 -0
- package/dist/DocsList.svelte.d.ts.map +1 -0
- package/dist/DocsMenu.svelte +55 -0
- package/dist/DocsMenu.svelte.d.ts +11 -0
- package/dist/DocsMenu.svelte.d.ts.map +1 -0
- package/dist/DocsMenuHeader.svelte +15 -0
- package/dist/DocsMenuHeader.svelte.d.ts +9 -0
- package/dist/DocsMenuHeader.svelte.d.ts.map +1 -0
- package/dist/DocsModulesList.svelte +32 -0
- package/dist/DocsModulesList.svelte.d.ts +7 -0
- package/dist/DocsModulesList.svelte.d.ts.map +1 -0
- package/dist/DocsPageLinks.svelte +61 -0
- package/dist/DocsPageLinks.svelte.d.ts +8 -0
- package/dist/DocsPageLinks.svelte.d.ts.map +1 -0
- package/dist/DocsPrimaryNav.svelte +93 -0
- package/dist/DocsPrimaryNav.svelte.d.ts +11 -0
- package/dist/DocsPrimaryNav.svelte.d.ts.map +1 -0
- package/dist/DocsSearch.svelte +48 -0
- package/dist/DocsSearch.svelte.d.ts +11 -0
- package/dist/DocsSearch.svelte.d.ts.map +1 -0
- package/dist/DocsSecondaryNav.svelte +63 -0
- package/dist/DocsSecondaryNav.svelte.d.ts +9 -0
- package/dist/DocsSecondaryNav.svelte.d.ts.map +1 -0
- package/dist/DocsTertiaryNav.svelte +118 -0
- package/dist/DocsTertiaryNav.svelte.d.ts +10 -0
- package/dist/DocsTertiaryNav.svelte.d.ts.map +1 -0
- package/dist/EcosystemLinks.svelte +53 -0
- package/dist/EcosystemLinks.svelte.d.ts +7 -0
- package/dist/EcosystemLinks.svelte.d.ts.map +1 -0
- package/dist/EcosystemLinksPanel.svelte +22 -0
- package/dist/EcosystemLinksPanel.svelte.d.ts +8 -0
- package/dist/EcosystemLinksPanel.svelte.d.ts.map +1 -0
- package/dist/GithubLink.svelte +75 -0
- package/dist/GithubLink.svelte.d.ts +14 -0
- package/dist/GithubLink.svelte.d.ts.map +1 -0
- package/dist/Glyph.svelte +28 -0
- package/dist/Glyph.svelte.d.ts +9 -0
- package/dist/Glyph.svelte.d.ts.map +1 -0
- package/dist/Hashlink.svelte +41 -0
- package/dist/Hashlink.svelte.d.ts +8 -0
- package/dist/Hashlink.svelte.d.ts.map +1 -0
- package/dist/HiddenPersonalLinks.svelte +6 -0
- package/dist/HiddenPersonalLinks.svelte.d.ts +27 -0
- package/dist/HiddenPersonalLinks.svelte.d.ts.map +1 -0
- package/dist/HueInput.svelte +127 -0
- package/dist/HueInput.svelte.d.ts +11 -0
- package/dist/HueInput.svelte.d.ts.map +1 -0
- package/dist/ImgOrSvg.svelte +58 -0
- package/dist/ImgOrSvg.svelte.d.ts +25 -0
- package/dist/ImgOrSvg.svelte.d.ts.map +1 -0
- package/dist/LibraryDetail.svelte +297 -0
- package/dist/LibraryDetail.svelte.d.ts +15 -0
- package/dist/LibraryDetail.svelte.d.ts.map +1 -0
- package/dist/LibrarySummary.svelte +151 -0
- package/dist/LibrarySummary.svelte.d.ts +16 -0
- package/dist/LibrarySummary.svelte.d.ts.map +1 -0
- package/dist/MdnLink.svelte +40 -0
- package/dist/MdnLink.svelte.d.ts +8 -0
- package/dist/MdnLink.svelte.d.ts.map +1 -0
- package/dist/Mdz.svelte +30 -0
- package/dist/Mdz.svelte.d.ts +10 -0
- package/dist/Mdz.svelte.d.ts.map +1 -0
- package/dist/MdzNodeView.svelte +93 -0
- package/dist/MdzNodeView.svelte.d.ts +9 -0
- package/dist/MdzNodeView.svelte.d.ts.map +1 -0
- package/dist/ModuleLink.svelte +48 -0
- package/dist/ModuleLink.svelte.d.ts +8 -0
- package/dist/ModuleLink.svelte.d.ts.map +1 -0
- package/dist/PasteFromClipboard.svelte +35 -0
- package/dist/PasteFromClipboard.svelte.d.ts +9 -0
- package/dist/PasteFromClipboard.svelte.d.ts.map +1 -0
- package/dist/PendingAnimation.svelte +62 -0
- package/dist/PendingAnimation.svelte.d.ts +13 -0
- package/dist/PendingAnimation.svelte.d.ts.map +1 -0
- package/dist/PendingButton.svelte +75 -0
- package/dist/PendingButton.svelte.d.ts +17 -0
- package/dist/PendingButton.svelte.d.ts.map +1 -0
- package/dist/ProjectLinks.svelte +54 -0
- package/dist/ProjectLinks.svelte.d.ts +19 -0
- package/dist/ProjectLinks.svelte.d.ts.map +1 -0
- package/dist/Redirect.svelte +44 -0
- package/dist/Redirect.svelte.d.ts +23 -0
- package/dist/Redirect.svelte.d.ts.map +1 -0
- package/dist/Spiders.svelte +57 -0
- package/dist/Spiders.svelte.d.ts +9 -0
- package/dist/Spiders.svelte.d.ts.map +1 -0
- package/dist/Svg.svelte +99 -0
- package/dist/Svg.svelte.d.ts +54 -0
- package/dist/Svg.svelte.d.ts.map +1 -0
- package/dist/Teleport.svelte +48 -0
- package/dist/Teleport.svelte.d.ts +15 -0
- package/dist/Teleport.svelte.d.ts.map +1 -0
- package/dist/ThemeInput.svelte +75 -0
- package/dist/ThemeInput.svelte.d.ts +15 -0
- package/dist/ThemeInput.svelte.d.ts.map +1 -0
- package/dist/Themed.svelte +101 -0
- package/dist/Themed.svelte.d.ts +24 -0
- package/dist/Themed.svelte.d.ts.map +1 -0
- package/dist/TomeContent.svelte +67 -0
- package/dist/TomeContent.svelte.d.ts +12 -0
- package/dist/TomeContent.svelte.d.ts.map +1 -0
- package/dist/TomeHeader.svelte +56 -0
- package/dist/TomeHeader.svelte.d.ts +4 -0
- package/dist/TomeHeader.svelte.d.ts.map +1 -0
- package/dist/TomeLink.svelte +29 -0
- package/dist/TomeLink.svelte.d.ts +10 -0
- package/dist/TomeLink.svelte.d.ts.map +1 -0
- package/dist/TomeSection.svelte +65 -0
- package/dist/TomeSection.svelte.d.ts +24 -0
- package/dist/TomeSection.svelte.d.ts.map +1 -0
- package/dist/TomeSectionHeader.svelte +90 -0
- package/dist/TomeSectionHeader.svelte.d.ts +13 -0
- package/dist/TomeSectionHeader.svelte.d.ts.map +1 -0
- package/dist/TypeLink.svelte +19 -0
- package/dist/TypeLink.svelte.d.ts +7 -0
- package/dist/TypeLink.svelte.d.ts.map +1 -0
- package/dist/alert.d.ts +7 -0
- package/dist/alert.d.ts.map +1 -0
- package/dist/alert.js +6 -0
- package/dist/api_search.svelte.d.ts +16 -0
- package/dist/api_search.svelte.d.ts.map +1 -0
- package/dist/api_search.svelte.js +61 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +3 -0
- package/dist/context_helpers.d.ts +17 -0
- package/dist/context_helpers.d.ts.map +1 -0
- package/dist/context_helpers.js +19 -0
- package/dist/contextmenu_helpers.d.ts +16 -0
- package/dist/contextmenu_helpers.d.ts.map +1 -0
- package/dist/contextmenu_helpers.js +39 -0
- package/dist/contextmenu_state.svelte.d.ts +152 -0
- package/dist/contextmenu_state.svelte.d.ts.map +1 -0
- package/dist/contextmenu_state.svelte.js +424 -0
- package/dist/csp.d.ts +160 -0
- package/dist/csp.d.ts.map +1 -0
- package/dist/csp.js +354 -0
- package/dist/csp_of_ryanatkn.d.ts +6 -0
- package/dist/csp_of_ryanatkn.d.ts.map +1 -0
- package/dist/csp_of_ryanatkn.js +14 -0
- package/dist/declaration.svelte.d.ts +84 -0
- package/dist/declaration.svelte.d.ts.map +1 -0
- package/dist/declaration.svelte.js +66 -0
- package/dist/declaration_contextmenu.d.ts +4 -0
- package/dist/declaration_contextmenu.d.ts.map +1 -0
- package/dist/declaration_contextmenu.js +14 -0
- package/dist/dialog.d.ts +24 -0
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +12 -0
- package/dist/dimensions.svelte.d.ts +5 -0
- package/dist/dimensions.svelte.d.ts.map +1 -0
- package/dist/dimensions.svelte.js +4 -0
- package/dist/docs_helpers.svelte.d.ts +48 -0
- package/dist/docs_helpers.svelte.d.ts.map +1 -0
- package/dist/docs_helpers.svelte.js +99 -0
- package/dist/helpers.d.ts +2 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +16 -0
- package/dist/intersect.svelte.d.ts +47 -0
- package/dist/intersect.svelte.d.ts.map +1 -0
- package/dist/intersect.svelte.js +92 -0
- package/dist/library.svelte.d.ts +197 -0
- package/dist/library.svelte.d.ts.map +1 -0
- package/dist/library.svelte.js +130 -0
- package/dist/library_gen.d.ts +34 -0
- package/dist/library_gen.d.ts.map +1 -0
- package/dist/library_gen.js +123 -0
- package/dist/library_gen_helpers.d.ts +85 -0
- package/dist/library_gen_helpers.d.ts.map +1 -0
- package/dist/library_gen_helpers.js +188 -0
- package/dist/library_helpers.d.ts +54 -0
- package/dist/library_helpers.d.ts.map +1 -0
- package/dist/library_helpers.js +102 -0
- package/dist/logos.d.ts +134 -0
- package/dist/logos.d.ts.map +1 -0
- package/dist/logos.js +281 -0
- package/dist/mdz.d.ts +106 -0
- package/dist/mdz.d.ts.map +1 -0
- package/dist/mdz.js +1481 -0
- package/dist/mdz_components.d.ts +37 -0
- package/dist/mdz_components.d.ts.map +1 -0
- package/dist/mdz_components.js +12 -0
- package/dist/module.svelte.d.ts +47 -0
- package/dist/module.svelte.d.ts.map +1 -0
- package/dist/module.svelte.js +56 -0
- package/dist/module_contextmenu.d.ts +4 -0
- package/dist/module_contextmenu.d.ts.map +1 -0
- package/dist/module_contextmenu.js +14 -0
- package/dist/module_helpers.d.ts +69 -0
- package/dist/module_helpers.d.ts.map +1 -0
- package/dist/module_helpers.js +87 -0
- package/dist/rune_helpers.svelte.d.ts +6 -0
- package/dist/rune_helpers.svelte.d.ts.map +1 -0
- package/dist/rune_helpers.svelte.js +10 -0
- package/dist/storage.d.ts +13 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +43 -0
- package/dist/svelte_helpers.d.ts +37 -0
- package/dist/svelte_helpers.d.ts.map +1 -0
- package/dist/svelte_helpers.js +245 -0
- package/dist/themer.svelte.d.ts +24 -0
- package/dist/themer.svelte.d.ts.map +1 -0
- package/dist/themer.svelte.js +43 -0
- package/dist/tome.d.ts +80 -0
- package/dist/tome.d.ts.map +1 -0
- package/dist/tome.js +27 -0
- package/dist/ts_helpers.d.ts +110 -0
- package/dist/ts_helpers.d.ts.map +1 -0
- package/dist/ts_helpers.js +533 -0
- package/dist/tsdoc_helpers.d.ts +98 -0
- package/dist/tsdoc_helpers.d.ts.map +1 -0
- package/dist/tsdoc_helpers.js +221 -0
- package/package.json +128 -0
- package/src/lib/alert.ts +14 -0
- package/src/lib/api_search.svelte.ts +85 -0
- package/src/lib/constants.ts +3 -0
- package/src/lib/context_helpers.ts +47 -0
- package/src/lib/contextmenu_helpers.ts +63 -0
- package/src/lib/contextmenu_state.svelte.ts +515 -0
- package/src/lib/csp.ts +576 -0
- package/src/lib/csp_of_ryanatkn.ts +16 -0
- package/src/lib/declaration.svelte.ts +102 -0
- package/src/lib/declaration_contextmenu.ts +22 -0
- package/src/lib/dialog.ts +35 -0
- package/src/lib/dimensions.svelte.ts +4 -0
- package/src/lib/docs_helpers.svelte.ts +149 -0
- package/src/lib/helpers.ts +10 -0
- package/src/lib/intersect.svelte.ts +152 -0
- package/src/lib/library.svelte.ts +162 -0
- package/src/lib/library_gen.ts +160 -0
- package/src/lib/library_gen_helpers.ts +262 -0
- package/src/lib/library_helpers.ts +123 -0
- package/src/lib/logos.ts +302 -0
- package/src/lib/mdz.ts +1819 -0
- package/src/lib/mdz_components.ts +34 -0
- package/src/lib/module.svelte.ts +78 -0
- package/src/lib/module_contextmenu.ts +20 -0
- package/src/lib/module_helpers.ts +113 -0
- package/src/lib/rune_helpers.svelte.ts +10 -0
- package/src/lib/storage.ts +48 -0
- package/src/lib/svelte_helpers.ts +303 -0
- package/src/lib/themer.svelte.ts +68 -0
- package/src/lib/tome.ts +38 -0
- package/src/lib/ts_helpers.ts +662 -0
- package/src/lib/tsdoc_helpers.ts +259 -0
package/dist/Svg.svelte
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import {ensure_end} from '@fuzdev/fuz_util/string.js';
|
|
3
|
+
import type {SvelteHTMLElements} from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
export interface SvgData {
|
|
6
|
+
/**
|
|
7
|
+
* Raw svg markup string that's inserted unsafely as a child of the `svg` element.
|
|
8
|
+
* This is an escape hatch for non-`path` markup -
|
|
9
|
+
* generally, you should instead use the `paths` property to avoid security/CSP implications.
|
|
10
|
+
*/
|
|
11
|
+
raw?: string | null;
|
|
12
|
+
/**
|
|
13
|
+
* List of svg `path` attribute objects. The `d` attribute is required.
|
|
14
|
+
*/
|
|
15
|
+
paths?: Array<{d: string} & SvelteHTMLElements['path']> | null;
|
|
16
|
+
attrs?: SvelteHTMLElements['svg'] | null;
|
|
17
|
+
fill?: string | null;
|
|
18
|
+
width?: string | null;
|
|
19
|
+
height?: string | null;
|
|
20
|
+
label?: string | null;
|
|
21
|
+
/**
|
|
22
|
+
* Defaults to `"0 0 100 100"`.
|
|
23
|
+
*/
|
|
24
|
+
viewBox?: string | null;
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<script lang="ts">
|
|
29
|
+
const {
|
|
30
|
+
data,
|
|
31
|
+
fill,
|
|
32
|
+
size = 'var(--font_size, auto)',
|
|
33
|
+
width,
|
|
34
|
+
height,
|
|
35
|
+
label,
|
|
36
|
+
inline,
|
|
37
|
+
shrink = true,
|
|
38
|
+
attrs,
|
|
39
|
+
}: {
|
|
40
|
+
data: SvgData;
|
|
41
|
+
/**
|
|
42
|
+
* Overrides `data.fill`.
|
|
43
|
+
*/
|
|
44
|
+
fill?: string | null;
|
|
45
|
+
/**
|
|
46
|
+
* Sets both the `width` and `height` of the svg. Overridden by the `width` and `height` props.
|
|
47
|
+
*/
|
|
48
|
+
size?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Sets the `width` of the svg. Overrides `size`.
|
|
51
|
+
*/
|
|
52
|
+
width?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Sets the `height` of the svg. Overrides `size`.
|
|
55
|
+
*/
|
|
56
|
+
height?: string;
|
|
57
|
+
label?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Renders the SVG as an inline block with spacing appropriate for text. Defaults to `false`.
|
|
60
|
+
*/
|
|
61
|
+
inline?: boolean;
|
|
62
|
+
shrink?: boolean;
|
|
63
|
+
attrs?: SvelteHTMLElements['svg'];
|
|
64
|
+
} = $props();
|
|
65
|
+
|
|
66
|
+
const final_fill = $derived(fill ?? data.fill ?? 'var(--text_color, #000)'); // can be overridden by each path's `fill` attribute
|
|
67
|
+
const final_width = $derived(width ?? size); // TODO @many default value? `100%` or omitted or something else?
|
|
68
|
+
const final_height = $derived(height ?? size); // TODO @many default value? `100%` or omitted or something else?
|
|
69
|
+
|
|
70
|
+
// merge `style` so users don't accidentally clobber any style data - maybe support other attrs or somehow clean this up?
|
|
71
|
+
const style = $derived(
|
|
72
|
+
data.attrs?.style && attrs?.style
|
|
73
|
+
? ensure_end(data.attrs.style, ';') + ' ' + attrs.style
|
|
74
|
+
: (data.attrs?.style ?? attrs?.style),
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
// TODO dont use @html
|
|
78
|
+
</script>
|
|
79
|
+
|
|
80
|
+
<svg
|
|
81
|
+
viewBox={data.viewBox ?? '0 0 100 100'}
|
|
82
|
+
{...data.attrs}
|
|
83
|
+
{...attrs}
|
|
84
|
+
aria-label={label ?? data.label}
|
|
85
|
+
class:display_inline_block={inline}
|
|
86
|
+
class:position_relative={inline}
|
|
87
|
+
style:width={final_width}
|
|
88
|
+
style:height={final_height}
|
|
89
|
+
style:top={inline ? '0.1em' : undefined}
|
|
90
|
+
style:flex-shrink={shrink ? 1 : 0}
|
|
91
|
+
{style}
|
|
92
|
+
>
|
|
93
|
+
{#if data.raw}{@html data.raw}{/if}<!-- eslint-disable-line svelte/no-at-html-tags -->
|
|
94
|
+
{#if data.paths}
|
|
95
|
+
{#each data.paths as path (path)}
|
|
96
|
+
<path fill={final_fill} {...path} />
|
|
97
|
+
{/each}
|
|
98
|
+
{/if}
|
|
99
|
+
</svg>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { SvelteHTMLElements } from 'svelte/elements';
|
|
2
|
+
export interface SvgData {
|
|
3
|
+
/**
|
|
4
|
+
* Raw svg markup string that's inserted unsafely as a child of the `svg` element.
|
|
5
|
+
* This is an escape hatch for non-`path` markup -
|
|
6
|
+
* generally, you should instead use the `paths` property to avoid security/CSP implications.
|
|
7
|
+
*/
|
|
8
|
+
raw?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* List of svg `path` attribute objects. The `d` attribute is required.
|
|
11
|
+
*/
|
|
12
|
+
paths?: Array<{
|
|
13
|
+
d: string;
|
|
14
|
+
} & SvelteHTMLElements['path']> | null;
|
|
15
|
+
attrs?: SvelteHTMLElements['svg'] | null;
|
|
16
|
+
fill?: string | null;
|
|
17
|
+
width?: string | null;
|
|
18
|
+
height?: string | null;
|
|
19
|
+
label?: string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Defaults to `"0 0 100 100"`.
|
|
22
|
+
*/
|
|
23
|
+
viewBox?: string | null;
|
|
24
|
+
}
|
|
25
|
+
type $$ComponentProps = {
|
|
26
|
+
data: SvgData;
|
|
27
|
+
/**
|
|
28
|
+
* Overrides `data.fill`.
|
|
29
|
+
*/
|
|
30
|
+
fill?: string | null;
|
|
31
|
+
/**
|
|
32
|
+
* Sets both the `width` and `height` of the svg. Overridden by the `width` and `height` props.
|
|
33
|
+
*/
|
|
34
|
+
size?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Sets the `width` of the svg. Overrides `size`.
|
|
37
|
+
*/
|
|
38
|
+
width?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Sets the `height` of the svg. Overrides `size`.
|
|
41
|
+
*/
|
|
42
|
+
height?: string;
|
|
43
|
+
label?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Renders the SVG as an inline block with spacing appropriate for text. Defaults to `false`.
|
|
46
|
+
*/
|
|
47
|
+
inline?: boolean;
|
|
48
|
+
shrink?: boolean;
|
|
49
|
+
attrs?: SvelteHTMLElements['svg'];
|
|
50
|
+
};
|
|
51
|
+
declare const Svg: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
52
|
+
type Svg = ReturnType<typeof Svg>;
|
|
53
|
+
export default Svg;
|
|
54
|
+
//# sourceMappingURL=Svg.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Svg.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Svg.svelte"],"names":[],"mappings":"AAIC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,OAAO;IACvB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,KAAK,gBAAgB,GAAI;IACxB,IAAI,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAClC,CAAC;AAyCH,QAAA,MAAM,GAAG,sDAAwC,CAAC;AAClD,KAAK,GAAG,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;AAClC,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {onDestroy, type Snippet} from 'svelte';
|
|
3
|
+
|
|
4
|
+
const {
|
|
5
|
+
to,
|
|
6
|
+
onmove,
|
|
7
|
+
children,
|
|
8
|
+
}: {
|
|
9
|
+
/**
|
|
10
|
+
* Defaults to `undefined` to lessen friction with SSR.
|
|
11
|
+
* We may want to change this to optionally accept a string selector,
|
|
12
|
+
* but that didn't seem to be the best API for the `Dialog`.
|
|
13
|
+
*/
|
|
14
|
+
to?: HTMLElement | undefined | null;
|
|
15
|
+
onmove?: (el: HTMLElement, to: HTMLElement) => void;
|
|
16
|
+
children: Snippet;
|
|
17
|
+
} = $props();
|
|
18
|
+
|
|
19
|
+
let el: HTMLElement | undefined | null = $state();
|
|
20
|
+
|
|
21
|
+
$effect(() => {
|
|
22
|
+
if (el && to) {
|
|
23
|
+
move(el, to);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
let moved = $state(false);
|
|
28
|
+
|
|
29
|
+
const move = (el: HTMLElement, to: HTMLElement): void => {
|
|
30
|
+
moved = true;
|
|
31
|
+
to.appendChild(el);
|
|
32
|
+
onmove?.(el, to);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
onDestroy(() => {
|
|
36
|
+
el?.parentNode?.removeChild(el);
|
|
37
|
+
});
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<div class="teleport" bind:this={el} hidden={!moved}>
|
|
41
|
+
{@render children()}
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<style>
|
|
45
|
+
.teleport {
|
|
46
|
+
display: contents;
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
/**
|
|
4
|
+
* Defaults to `undefined` to lessen friction with SSR.
|
|
5
|
+
* We may want to change this to optionally accept a string selector,
|
|
6
|
+
* but that didn't seem to be the best API for the `Dialog`.
|
|
7
|
+
*/
|
|
8
|
+
to?: HTMLElement | undefined | null;
|
|
9
|
+
onmove?: (el: HTMLElement, to: HTMLElement) => void;
|
|
10
|
+
children: Snippet;
|
|
11
|
+
};
|
|
12
|
+
declare const Teleport: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
13
|
+
type Teleport = ReturnType<typeof Teleport>;
|
|
14
|
+
export default Teleport;
|
|
15
|
+
//# sourceMappingURL=Teleport.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Teleport.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Teleport.svelte"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,OAAO,EAAC,MAAM,QAAQ,CAAC;AAE9C,KAAK,gBAAgB,GAAI;IACxB;;;;OAIG;IACH,EAAE,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AAuCH,QAAA,MAAM,QAAQ,sDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {swallow} from '@fuzdev/fuz_util/dom.js';
|
|
3
|
+
import type {Theme} from '@fuzdev/fuz_css/theme.js';
|
|
4
|
+
import {default_themes} from '@fuzdev/fuz_css/themes.js';
|
|
5
|
+
|
|
6
|
+
import {themer_context} from './themer.svelte.js';
|
|
7
|
+
|
|
8
|
+
const {
|
|
9
|
+
selected_theme = themer_context.get(),
|
|
10
|
+
themes = default_themes,
|
|
11
|
+
enable_editing = false,
|
|
12
|
+
select = (theme) => {
|
|
13
|
+
selected_theme.theme = theme;
|
|
14
|
+
},
|
|
15
|
+
onselect,
|
|
16
|
+
onedit,
|
|
17
|
+
}: {
|
|
18
|
+
selected_theme?: {theme: Theme};
|
|
19
|
+
themes?: Array<Theme>;
|
|
20
|
+
enable_editing?: boolean;
|
|
21
|
+
select?: ((theme: Theme) => void | boolean) | null;
|
|
22
|
+
onselect?: (theme: Theme) => void;
|
|
23
|
+
onedit?: (theme: Theme) => void;
|
|
24
|
+
} = $props();
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<menu class="theme_input unstyled">
|
|
28
|
+
{#each themes as theme (theme.name)}
|
|
29
|
+
<!-- TODO @many proper equality check, won't work when we allow editing, need an id or unique names and a deep equality check -->
|
|
30
|
+
{@const selected = theme.name === selected_theme.theme.name}
|
|
31
|
+
<li class="row" role="none">
|
|
32
|
+
<button
|
|
33
|
+
type="button"
|
|
34
|
+
class="theme_button color_a"
|
|
35
|
+
role="menuitemradio"
|
|
36
|
+
aria-label="{theme.name} theme"
|
|
37
|
+
aria-checked={selected}
|
|
38
|
+
class:selected
|
|
39
|
+
onclick={(e) => {
|
|
40
|
+
swallow(e);
|
|
41
|
+
if (select?.(theme) !== false) {
|
|
42
|
+
onselect?.(theme);
|
|
43
|
+
}
|
|
44
|
+
}}
|
|
45
|
+
>
|
|
46
|
+
{theme.name}
|
|
47
|
+
</button>
|
|
48
|
+
{#if enable_editing}
|
|
49
|
+
<button
|
|
50
|
+
type="button"
|
|
51
|
+
class="icon_button plain ml_sm"
|
|
52
|
+
onclick={(e) => {
|
|
53
|
+
swallow(e);
|
|
54
|
+
onedit?.(theme);
|
|
55
|
+
}}>•••</button
|
|
56
|
+
>
|
|
57
|
+
{/if}
|
|
58
|
+
</li>
|
|
59
|
+
{/each}
|
|
60
|
+
</menu>
|
|
61
|
+
|
|
62
|
+
<style>
|
|
63
|
+
.theme_button {
|
|
64
|
+
flex: 1;
|
|
65
|
+
border-radius: 0;
|
|
66
|
+
}
|
|
67
|
+
li:first-child .theme_button {
|
|
68
|
+
border-top-left-radius: var(--border_radius_sm);
|
|
69
|
+
border-top-right-radius: var(--border_radius_sm);
|
|
70
|
+
}
|
|
71
|
+
li:last-child .theme_button {
|
|
72
|
+
border-bottom-left-radius: var(--border_radius_sm);
|
|
73
|
+
border-bottom-right-radius: var(--border_radius_sm);
|
|
74
|
+
}
|
|
75
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Theme } from '@fuzdev/fuz_css/theme.js';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
selected_theme?: {
|
|
4
|
+
theme: Theme;
|
|
5
|
+
};
|
|
6
|
+
themes?: Array<Theme>;
|
|
7
|
+
enable_editing?: boolean;
|
|
8
|
+
select?: ((theme: Theme) => void | boolean) | null;
|
|
9
|
+
onselect?: (theme: Theme) => void;
|
|
10
|
+
onedit?: (theme: Theme) => void;
|
|
11
|
+
};
|
|
12
|
+
declare const ThemeInput: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
13
|
+
type ThemeInput = ReturnType<typeof ThemeInput>;
|
|
14
|
+
export default ThemeInput;
|
|
15
|
+
//# sourceMappingURL=ThemeInput.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeInput.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ThemeInput.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAKnD,KAAK,gBAAgB,GAAI;IACxB,cAAc,CAAC,EAAE;QAAC,KAAK,EAAE,KAAK,CAAA;KAAC,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC,CAAC;AA+CH,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
let mounted = false;
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import {onMount, type Snippet} from 'svelte';
|
|
7
|
+
import {render_theme_style, type Theme} from '@fuzdev/fuz_css/theme.js';
|
|
8
|
+
import {DEFAULT_THEME} from '@fuzdev/fuz_css/themes.js';
|
|
9
|
+
import {DEV} from 'esm-env';
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
load_color_scheme as default_load_color_scheme,
|
|
13
|
+
save_color_scheme as default_save_color_scheme,
|
|
14
|
+
sync_color_scheme as default_sync_color_scheme,
|
|
15
|
+
save_theme as default_save_theme,
|
|
16
|
+
load_theme as default_load_theme,
|
|
17
|
+
themer_context,
|
|
18
|
+
Themer,
|
|
19
|
+
} from './themer.svelte.js';
|
|
20
|
+
import {effect_with_count} from './rune_helpers.svelte.js';
|
|
21
|
+
|
|
22
|
+
const {
|
|
23
|
+
sync_color_scheme = default_sync_color_scheme,
|
|
24
|
+
load_color_scheme = default_load_color_scheme,
|
|
25
|
+
save_color_scheme = default_save_color_scheme,
|
|
26
|
+
load_theme = default_load_theme,
|
|
27
|
+
save_theme = default_save_theme,
|
|
28
|
+
theme_fallback,
|
|
29
|
+
themer = new Themer(load_theme(theme_fallback), load_color_scheme()),
|
|
30
|
+
children,
|
|
31
|
+
}: {
|
|
32
|
+
sync_color_scheme?: typeof default_sync_color_scheme;
|
|
33
|
+
load_color_scheme?: typeof default_load_color_scheme;
|
|
34
|
+
save_color_scheme?: typeof default_save_color_scheme;
|
|
35
|
+
load_theme?: typeof default_load_theme;
|
|
36
|
+
save_theme?: typeof default_save_theme;
|
|
37
|
+
theme_fallback?: Theme | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* A reactive class containing the selected theme and color scheme.
|
|
40
|
+
* Defaults to the first default theme.
|
|
41
|
+
* The class reference is not reactive
|
|
42
|
+
* because it's set in context without a wrapper, use `{#key theme}` if it changes.
|
|
43
|
+
* @nonreactive
|
|
44
|
+
*/
|
|
45
|
+
themer?: Themer;
|
|
46
|
+
children: Snippet<[themer: Themer, style: string | null, theme_style_html: string | null]>;
|
|
47
|
+
} = $props();
|
|
48
|
+
|
|
49
|
+
// In dev mode only, warn about misuse of the singleton `Themed`.
|
|
50
|
+
if (DEV) {
|
|
51
|
+
onMount(() => {
|
|
52
|
+
if (mounted) {
|
|
53
|
+
console.warn('more than one Themed was mounted'); // eslint-disable-line no-console
|
|
54
|
+
}
|
|
55
|
+
mounted = true;
|
|
56
|
+
return () => {
|
|
57
|
+
mounted = false;
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* `Themed` adds global color scheme and theme support to the page.
|
|
64
|
+
* It also sets in the Svelte context a reactive `themer` containing the theme and color scheme.
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
themer_context.set(themer);
|
|
68
|
+
|
|
69
|
+
const selected_theme_name = $derived(themer.theme.name);
|
|
70
|
+
const style = $derived(
|
|
71
|
+
selected_theme_name === DEFAULT_THEME.name // TODO @many proper equality check, won't work when we allow editing, need an id or unique names and a deep equality check
|
|
72
|
+
? null
|
|
73
|
+
: render_theme_style(themer.theme),
|
|
74
|
+
);
|
|
75
|
+
const theme_style_html = $derived(style ? `<style>${style}</style>` : null);
|
|
76
|
+
|
|
77
|
+
effect_with_count((count) => {
|
|
78
|
+
const v = themer.color_scheme;
|
|
79
|
+
if (count === 1) return;
|
|
80
|
+
sync_color_scheme(v);
|
|
81
|
+
});
|
|
82
|
+
effect_with_count((count) => {
|
|
83
|
+
const v = themer.color_scheme;
|
|
84
|
+
if (count === 1) return;
|
|
85
|
+
save_color_scheme(v); // helper may change, so is separate from `sync_color_scheme`
|
|
86
|
+
});
|
|
87
|
+
effect_with_count((count) => {
|
|
88
|
+
const v = themer.theme;
|
|
89
|
+
if (count === 1) return;
|
|
90
|
+
save_theme(v);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// TODO @many @html making me nervous
|
|
94
|
+
</script>
|
|
95
|
+
|
|
96
|
+
<!-- eslint-disable svelte/no-at-html-tags -->
|
|
97
|
+
<svelte:head>
|
|
98
|
+
{#if theme_style_html}{@html theme_style_html}{/if}
|
|
99
|
+
</svelte:head>
|
|
100
|
+
|
|
101
|
+
{@render children(themer, style, theme_style_html)}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
import { type Theme } from '@fuzdev/fuz_css/theme.js';
|
|
3
|
+
import { load_color_scheme as default_load_color_scheme, save_color_scheme as default_save_color_scheme, sync_color_scheme as default_sync_color_scheme, save_theme as default_save_theme, load_theme as default_load_theme, Themer } from './themer.svelte.js';
|
|
4
|
+
type $$ComponentProps = {
|
|
5
|
+
sync_color_scheme?: typeof default_sync_color_scheme;
|
|
6
|
+
load_color_scheme?: typeof default_load_color_scheme;
|
|
7
|
+
save_color_scheme?: typeof default_save_color_scheme;
|
|
8
|
+
load_theme?: typeof default_load_theme;
|
|
9
|
+
save_theme?: typeof default_save_theme;
|
|
10
|
+
theme_fallback?: Theme | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* A reactive class containing the selected theme and color scheme.
|
|
13
|
+
* Defaults to the first default theme.
|
|
14
|
+
* The class reference is not reactive
|
|
15
|
+
* because it's set in context without a wrapper, use `{#key theme}` if it changes.
|
|
16
|
+
* @nonreactive
|
|
17
|
+
*/
|
|
18
|
+
themer?: Themer;
|
|
19
|
+
children: Snippet<[themer: Themer, style: string | null, theme_style_html: string | null]>;
|
|
20
|
+
};
|
|
21
|
+
declare const Themed: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
22
|
+
type Themed = ReturnType<typeof Themed>;
|
|
23
|
+
export default Themed;
|
|
24
|
+
//# sourceMappingURL=Themed.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Themed.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Themed.svelte"],"names":[],"mappings":"AAMA,OAAO,EAAU,KAAK,OAAO,EAAC,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAqB,KAAK,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAIxE,OAAO,EACL,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAEhC,MAAM,EACN,MAAM,oBAAoB,CAAC;AAG5B,KAAK,gBAAgB,GAAI;IACxB,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CAC3F,CAAC;AA+EH,QAAA,MAAM,MAAM,sDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type {Snippet} from 'svelte';
|
|
3
|
+
import {page} from '$app/state';
|
|
4
|
+
import {resolve} from '$app/paths';
|
|
5
|
+
|
|
6
|
+
import TomeHeader from './TomeHeader.svelte';
|
|
7
|
+
import {tome_context, type Tome} from './tome.js';
|
|
8
|
+
import {DOCS_PATH_DEFAULT, docs_links_context, docs_slugify} from './docs_helpers.svelte.js';
|
|
9
|
+
import {intersect} from './intersect.svelte.js';
|
|
10
|
+
|
|
11
|
+
const {
|
|
12
|
+
tome,
|
|
13
|
+
docs_path = DOCS_PATH_DEFAULT,
|
|
14
|
+
header,
|
|
15
|
+
children,
|
|
16
|
+
}: {
|
|
17
|
+
tome: Tome;
|
|
18
|
+
docs_path?: string;
|
|
19
|
+
header?: Snippet;
|
|
20
|
+
children: Snippet;
|
|
21
|
+
} = $props();
|
|
22
|
+
|
|
23
|
+
const docs_links = docs_links_context.get();
|
|
24
|
+
|
|
25
|
+
tome_context.set(tome); // TODO make reactive?
|
|
26
|
+
|
|
27
|
+
const fragment = docs_slugify(tome.name);
|
|
28
|
+
|
|
29
|
+
const at_root = $derived(page.url.pathname === resolve(docs_path as any));
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<section
|
|
33
|
+
class="tome_content width_upto_md mb_xl9"
|
|
34
|
+
{@attach intersect(() =>
|
|
35
|
+
at_root
|
|
36
|
+
? ({intersecting}) => {
|
|
37
|
+
if (intersecting) {
|
|
38
|
+
docs_links.fragments_onscreen.add(fragment);
|
|
39
|
+
} else {
|
|
40
|
+
docs_links.fragments_onscreen.delete(fragment);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
: null,
|
|
44
|
+
)}
|
|
45
|
+
>
|
|
46
|
+
<header
|
|
47
|
+
class="mb_xl3 position_sticky top_0"
|
|
48
|
+
{@attach intersect(() =>
|
|
49
|
+
at_root
|
|
50
|
+
? null
|
|
51
|
+
: ({intersecting}) => {
|
|
52
|
+
if (intersecting) {
|
|
53
|
+
docs_links.fragments_onscreen.add(fragment);
|
|
54
|
+
} else {
|
|
55
|
+
docs_links.fragments_onscreen.delete(fragment);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
)}
|
|
59
|
+
>
|
|
60
|
+
{#if header}
|
|
61
|
+
{@render header()}
|
|
62
|
+
{:else}
|
|
63
|
+
<TomeHeader />
|
|
64
|
+
{/if}
|
|
65
|
+
</header>
|
|
66
|
+
{@render children()}
|
|
67
|
+
</section>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import { type Tome } from './tome.js';
|
|
3
|
+
type $$ComponentProps = {
|
|
4
|
+
tome: Tome;
|
|
5
|
+
docs_path?: string;
|
|
6
|
+
header?: Snippet;
|
|
7
|
+
children: Snippet;
|
|
8
|
+
};
|
|
9
|
+
declare const TomeContent: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
10
|
+
type TomeContent = ReturnType<typeof TomeContent>;
|
|
11
|
+
export default TomeContent;
|
|
12
|
+
//# sourceMappingURL=TomeContent.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TomeContent.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TomeContent.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAKpC,OAAO,EAAe,KAAK,IAAI,EAAC,MAAM,WAAW,CAAC;AAIjD,KAAK,gBAAgB,GAAI;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AA4DH,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {page} from '$app/state';
|
|
3
|
+
import {onDestroy} from 'svelte';
|
|
4
|
+
import {DEV} from 'esm-env';
|
|
5
|
+
import type {SvelteHTMLElements} from 'svelte/elements';
|
|
6
|
+
|
|
7
|
+
import {tome_context} from './tome.js';
|
|
8
|
+
import Hashlink from './Hashlink.svelte';
|
|
9
|
+
import {docs_links_context, docs_slugify, to_docs_path_info} from './docs_helpers.svelte.js';
|
|
10
|
+
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-duplicate-type-constituents
|
|
12
|
+
const props: SvelteHTMLElements['h1'] | SvelteHTMLElements['h2'] = $props();
|
|
13
|
+
|
|
14
|
+
const tome = tome_context.get(); // TODO make reactive?
|
|
15
|
+
if (DEV && !tome) throw Error('TomeHeader expects a tome in context'); // eslint-disable-line @typescript-eslint/no-unnecessary-condition
|
|
16
|
+
|
|
17
|
+
const docs_links = docs_links_context.get();
|
|
18
|
+
|
|
19
|
+
const fragment = docs_slugify(tome.name);
|
|
20
|
+
const path_slug = docs_slugify(tome.name);
|
|
21
|
+
const id = docs_links.add(fragment, tome.name, page.url.pathname);
|
|
22
|
+
|
|
23
|
+
onDestroy(() => {
|
|
24
|
+
docs_links.remove(id);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const {path, path_is_selected} = $derived(to_docs_path_info(path_slug, page.url.pathname));
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<svelte:element this={path_is_selected ? 'h1' : 'h2'} {...props} class="tome_header">
|
|
31
|
+
{#if path_is_selected}
|
|
32
|
+
{@render content(tome.name)}
|
|
33
|
+
{:else}
|
|
34
|
+
<!-- eslint-disable-next-line svelte/no-navigation-without-resolve -->
|
|
35
|
+
<a href={path}>{@render content(tome.name)}</a>
|
|
36
|
+
{/if}
|
|
37
|
+
<Hashlink {fragment} />
|
|
38
|
+
</svelte:element>
|
|
39
|
+
|
|
40
|
+
{#snippet content(name: string)}
|
|
41
|
+
{name}
|
|
42
|
+
{/snippet}
|
|
43
|
+
|
|
44
|
+
<style>
|
|
45
|
+
.tome_header {
|
|
46
|
+
position: relative;
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: space-between;
|
|
50
|
+
margin-top: var(--space_xl4);
|
|
51
|
+
}
|
|
52
|
+
/* TODO @many how can this be done composably? currently using `:global` at usage site - ideally we'd continue to use :hover instead of JS */
|
|
53
|
+
.tome_header:hover :global(.hashlink) {
|
|
54
|
+
opacity: 1;
|
|
55
|
+
}
|
|
56
|
+
</style>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TomeHeader.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TomeHeader.svelte"],"names":[],"mappings":"AA4DA,QAAA,MAAM,UAAU,kGAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {DEV} from 'esm-env';
|
|
3
|
+
import type {SvelteHTMLElements} from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
import {get_tome_by_name, to_tome_pathname} from './tome.js';
|
|
6
|
+
import {DOCS_PATH_DEFAULT} from './docs_helpers.svelte.js';
|
|
7
|
+
|
|
8
|
+
const {
|
|
9
|
+
name,
|
|
10
|
+
docs_path = DOCS_PATH_DEFAULT,
|
|
11
|
+
hash,
|
|
12
|
+
children,
|
|
13
|
+
class: class_prop = 'chip',
|
|
14
|
+
...rest
|
|
15
|
+
}: SvelteHTMLElements['a'] & {
|
|
16
|
+
name: string; // TODO type, generate from `tomes`?
|
|
17
|
+
docs_path?: string;
|
|
18
|
+
hash?: string;
|
|
19
|
+
} = $props();
|
|
20
|
+
|
|
21
|
+
if (DEV) get_tome_by_name(name); // throws if not found
|
|
22
|
+
|
|
23
|
+
// TODO add contextmenu behavior
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<!-- eslint-disable-next-line svelte/no-navigation-without-resolve -->
|
|
27
|
+
<a {...rest} class="tome_link {class_prop}" href={to_tome_pathname(name, docs_path, hash)}
|
|
28
|
+
>{#if children}{@render children()}{:else}{name}{/if}</a
|
|
29
|
+
>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SvelteHTMLElements } from 'svelte/elements';
|
|
2
|
+
type $$ComponentProps = SvelteHTMLElements['a'] & {
|
|
3
|
+
name: string;
|
|
4
|
+
docs_path?: string;
|
|
5
|
+
hash?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const TomeLink: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type TomeLink = ReturnType<typeof TomeLink>;
|
|
9
|
+
export default TomeLink;
|
|
10
|
+
//# sourceMappingURL=TomeLink.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TomeLink.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TomeLink.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAKvD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AA2BH,QAAA,MAAM,QAAQ,sDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|