sdocs 0.0.15 → 0.0.17
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/bin/sdocs.js +1 -1
- package/dist/client/App.svelte +16 -39
- package/dist/client/App.svelte.d.ts +1 -1
- package/dist/client/favicon.png +0 -0
- package/dist/client/tree-builder.js +57 -14
- package/dist/client/{CollapsiblePanel.svelte → views/CollapsiblePanel.svelte} +5 -5
- package/dist/client/{ComponentView.svelte → views/ComponentView.svelte} +39 -13
- package/dist/client/{ComponentView.svelte.d.ts → views/ComponentView.svelte.d.ts} +1 -1
- package/dist/client/{ControlsPanel.svelte → views/ControlsPanel.svelte} +10 -15
- package/dist/client/{ControlsPanel.svelte.d.ts → views/ControlsPanel.svelte.d.ts} +1 -1
- package/dist/client/{DataTable.svelte → views/DataTable.svelte} +8 -8
- package/dist/client/{HomePage.svelte → views/HomePage.svelte} +10 -8
- package/dist/client/{HomePage.svelte.d.ts → views/HomePage.svelte.d.ts} +1 -1
- package/dist/client/{LayoutView.svelte → views/LayoutView.svelte} +1 -1
- package/dist/client/{LayoutView.svelte.d.ts → views/LayoutView.svelte.d.ts} +1 -1
- package/dist/client/{PageView.svelte → views/PageView.svelte} +7 -7
- package/dist/client/{PageView.svelte.d.ts → views/PageView.svelte.d.ts} +1 -1
- package/dist/client/{PreviewFrame.svelte → views/PreviewFrame.svelte} +10 -3
- package/dist/client/views/Sidebar.svelte +369 -0
- package/dist/client/{Sidebar.svelte.d.ts → views/Sidebar.svelte.d.ts} +2 -2
- package/dist/commands/build.js +2 -2
- package/dist/commands/dev.js +2 -2
- package/dist/commands/init.js +4 -4
- package/dist/commands/preview.js +1 -1
- package/dist/{app-gen.d.ts → server/app-gen.d.ts} +1 -1
- package/dist/{app-gen.js → server/app-gen.js} +4 -4
- package/dist/{cli.js → server/cli.js} +4 -4
- package/dist/{config.d.ts → server/config.d.ts} +1 -1
- package/dist/{config.js → server/config.js} +7 -2
- package/dist/server/discovery.d.ts +1 -1
- package/dist/server/discovery.js +1 -1
- package/dist/server/meta-parser.js +1 -1
- package/dist/server/prop-parser.js +12 -4
- package/dist/server/snippet-compiler.js +8 -0
- package/dist/server/snippet-extractor.d.ts +1 -1
- package/dist/server/snippet-extractor.js +40 -5
- package/dist/server/toc-extractor.d.ts +0 -2
- package/dist/server/toc-extractor.js +0 -14
- package/dist/types.d.ts +3 -3
- package/dist/ui/About.page.sdoc +37 -0
- package/dist/ui/Button/Button.sdoc +51 -0
- package/dist/ui/Button/Button.svelte +90 -0
- package/dist/ui/Button/Button.svelte.d.ts +27 -0
- package/dist/ui/Button/index.d.ts +1 -0
- package/dist/ui/Button/index.js +1 -0
- package/dist/ui/Control/Checkbox.sdoc +17 -0
- package/dist/{client/controls/CheckboxControl.svelte → ui/Control/Checkbox.svelte} +1 -1
- package/dist/ui/Control/Checkbox.svelte.d.ts +8 -0
- package/dist/ui/Control/Color.sdoc +17 -0
- package/dist/{client/controls/ColorControl.svelte → ui/Control/Color.svelte} +4 -4
- package/dist/ui/Control/Color.svelte.d.ts +8 -0
- package/dist/ui/Control/Dimension.sdoc +17 -0
- package/dist/{client/controls/DimensionControl.svelte → ui/Control/Dimension.svelte} +5 -5
- package/dist/ui/Control/Dimension.svelte.d.ts +8 -0
- package/dist/ui/Control/Number.sdoc +17 -0
- package/dist/{client/controls/NumberControl.svelte → ui/Control/Number.svelte} +4 -4
- package/dist/ui/Control/Number.svelte.d.ts +8 -0
- package/dist/ui/Control/Select.sdoc +18 -0
- package/dist/{client/controls/SelectControl.svelte → ui/Control/Select.svelte} +4 -4
- package/dist/ui/Control/Select.svelte.d.ts +9 -0
- package/dist/ui/Control/Text.sdoc +17 -0
- package/dist/{client/controls/TextControl.svelte → ui/Control/Text.svelte} +4 -4
- package/dist/ui/Control/Text.svelte.d.ts +8 -0
- package/dist/ui/Control/index.d.ts +6 -0
- package/dist/ui/Control/index.js +6 -0
- package/dist/ui/Dashboard.layout.sdoc +60 -0
- package/dist/ui/Frame/Frame.sdoc +54 -0
- package/dist/ui/Frame/Frame.svelte +88 -0
- package/dist/ui/Frame/Frame.svelte.d.ts +15 -0
- package/dist/ui/Frame/index.d.ts +1 -0
- package/dist/ui/Frame/index.js +1 -0
- package/dist/ui/Icon/Icon.sdoc +45 -0
- package/dist/ui/Icon/Icon.svelte +73 -0
- package/dist/ui/Icon/Icon.svelte.d.ts +16 -0
- package/dist/ui/Icon/icons/bookmark.svg +1 -0
- package/dist/ui/Icon/icons/chevron-down.svg +1 -0
- package/dist/ui/Icon/icons/chevron-left.svg +1 -0
- package/dist/ui/Icon/icons/chevron-right.svg +1 -0
- package/dist/ui/Icon/icons/chevron-up.svg +1 -0
- package/dist/ui/Icon/icons/code.svg +1 -0
- package/dist/ui/Icon/icons/component.svg +1 -0
- package/dist/ui/Icon/icons/copy.svg +1 -0
- package/dist/ui/Icon/icons/diamond.svg +1 -0
- package/dist/ui/Icon/icons/file-code.svg +1 -0
- package/dist/ui/Icon/icons/file-text.svg +1 -0
- package/dist/ui/Icon/icons/folder-open.svg +1 -0
- package/dist/ui/Icon/icons/folder.svg +1 -0
- package/dist/ui/Icon/icons/panels-top-left.svg +1 -0
- package/dist/ui/Icon/icons/sdocs.svg +8 -0
- package/dist/ui/Icon/index.d.ts +1 -0
- package/dist/ui/Icon/index.js +1 -0
- package/dist/ui/NavTree/Group.sdoc +46 -0
- package/dist/ui/NavTree/Group.svelte +82 -0
- package/dist/ui/NavTree/Group.svelte.d.ts +11 -0
- package/dist/ui/NavTree/Item.sdoc +70 -0
- package/dist/ui/NavTree/Item.svelte +164 -0
- package/dist/ui/NavTree/Item.svelte.d.ts +33 -0
- package/dist/ui/NavTree/NavTree.sdoc +119 -0
- package/dist/ui/NavTree/NavTree.svelte +31 -0
- package/dist/ui/NavTree/NavTree.svelte.d.ts +8 -0
- package/dist/ui/NavTree/index.js +6 -0
- package/dist/ui/Stack/Stack.sdoc +44 -0
- package/dist/ui/Stack/Stack.svelte +41 -0
- package/dist/ui/Stack/Stack.svelte.d.ts +19 -0
- package/dist/ui/Stack/index.d.ts +1 -0
- package/dist/ui/Stack/index.js +1 -0
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.js +6 -0
- package/dist/{client/theme.css → ui/styles/fonts.css} +0 -37
- package/dist/ui/styles/theme.css +910 -0
- package/dist/vite.js +47 -51
- package/package.json +5 -2
- package/dist/client/Sidebar.svelte +0 -329
- package/dist/client/controls/CheckboxControl.svelte.d.ts +0 -8
- package/dist/client/controls/ColorControl.svelte.d.ts +0 -8
- package/dist/client/controls/DimensionControl.svelte.d.ts +0 -8
- package/dist/client/controls/NumberControl.svelte.d.ts +0 -8
- package/dist/client/controls/SelectControl.svelte.d.ts +0 -9
- package/dist/client/controls/TextControl.svelte.d.ts +0 -8
- package/dist/server/sdocx-parser.d.ts +0 -11
- package/dist/server/sdocx-parser.js +0 -197
- /package/dist/client/{CollapsiblePanel.svelte.d.ts → views/CollapsiblePanel.svelte.d.ts} +0 -0
- /package/dist/client/{DataTable.svelte.d.ts → views/DataTable.svelte.d.ts} +0 -0
- /package/dist/client/{PreviewFrame.svelte.d.ts → views/PreviewFrame.svelte.d.ts} +0 -0
- /package/dist/{cli.d.ts → server/cli.d.ts} +0 -0
- /package/dist/{client → ui/styles}/fonts/figtree-italic-latin-ext.woff2 +0 -0
- /package/dist/{client → ui/styles}/fonts/figtree-italic-latin.woff2 +0 -0
- /package/dist/{client → ui/styles}/fonts/figtree-latin-ext.woff2 +0 -0
- /package/dist/{client → ui/styles}/fonts/figtree-latin.woff2 +0 -0
- /package/dist/{client → ui/styles}/fonts/jetbrains-mono-italic-latin-ext.woff2 +0 -0
- /package/dist/{client → ui/styles}/fonts/jetbrains-mono-italic-latin.woff2 +0 -0
- /package/dist/{client → ui/styles}/fonts/jetbrains-mono-latin-ext.woff2 +0 -0
- /package/dist/{client → ui/styles}/fonts/jetbrains-mono-latin.woff2 +0 -0
|
@@ -1,12 +1,47 @@
|
|
|
1
|
-
/** Extract {#snippet} blocks from .sdoc source */
|
|
1
|
+
/** Extract top-level {#snippet} blocks from .sdoc source, handling nested snippets */
|
|
2
2
|
export function extractSnippets(source) {
|
|
3
3
|
const snippets = [];
|
|
4
|
-
|
|
4
|
+
// Strip <script> and <style> to search only markup
|
|
5
|
+
const markup = source
|
|
6
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/g, '')
|
|
7
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/g, '');
|
|
8
|
+
const openRegex = /\{#snippet\s+(\w+)\s*\([^)]*\)\}/g;
|
|
5
9
|
let match;
|
|
6
|
-
|
|
10
|
+
let searchFrom = 0;
|
|
11
|
+
while (true) {
|
|
12
|
+
openRegex.lastIndex = searchFrom;
|
|
13
|
+
match = openRegex.exec(markup);
|
|
14
|
+
if (!match)
|
|
15
|
+
break;
|
|
7
16
|
const name = match[1];
|
|
8
|
-
const
|
|
9
|
-
|
|
17
|
+
const bodyStart = match.index + match[0].length;
|
|
18
|
+
// Count nesting depth to find the matching {/snippet}
|
|
19
|
+
let depth = 1;
|
|
20
|
+
let i = bodyStart;
|
|
21
|
+
while (i < markup.length && depth > 0) {
|
|
22
|
+
if (markup.startsWith('{/snippet}', i)) {
|
|
23
|
+
depth--;
|
|
24
|
+
if (depth === 0)
|
|
25
|
+
break;
|
|
26
|
+
i += '{/snippet}'.length;
|
|
27
|
+
}
|
|
28
|
+
else if (markup.startsWith('{#snippet', i)) {
|
|
29
|
+
depth++;
|
|
30
|
+
const closeBrace = markup.indexOf('}', i);
|
|
31
|
+
i = closeBrace !== -1 ? closeBrace + 1 : i + 1;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
i++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (depth === 0) {
|
|
38
|
+
const body = markup.slice(bodyStart, i).trim();
|
|
39
|
+
snippets.push({ name, body });
|
|
40
|
+
searchFrom = i + '{/snippet}'.length;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
break; // malformed source, stop
|
|
44
|
+
}
|
|
10
45
|
}
|
|
11
46
|
return snippets;
|
|
12
47
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
import type { TocHeading } from '../types.js';
|
|
2
2
|
/** Extract ToC headings from HTML markup (for .sdoc pages) */
|
|
3
3
|
export declare function extractTocFromHtml(body: string): TocHeading[];
|
|
4
|
-
/** Extract ToC headings from markdown (for .sdocx pages) */
|
|
5
|
-
export declare function extractTocFromMarkdown(body: string): TocHeading[];
|
|
@@ -21,17 +21,3 @@ export function extractTocFromHtml(body) {
|
|
|
21
21
|
}
|
|
22
22
|
return headings;
|
|
23
23
|
}
|
|
24
|
-
/** Extract ToC headings from markdown (for .sdocx pages) */
|
|
25
|
-
export function extractTocFromMarkdown(body) {
|
|
26
|
-
const headings = [];
|
|
27
|
-
const regex = /^(#{2,4})\s+(.+)$/gm;
|
|
28
|
-
let match;
|
|
29
|
-
while ((match = regex.exec(body)) !== null) {
|
|
30
|
-
const level = match[1].length;
|
|
31
|
-
const text = match[2].trim();
|
|
32
|
-
if (text) {
|
|
33
|
-
headings.push({ text, level, id: slugify(text) });
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return headings;
|
|
37
|
-
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** sdocs config file schema */
|
|
2
2
|
export interface SdocsConfig {
|
|
3
|
-
/** Glob pattern(s) to find sdoc files. Default: ['./src/**\/*.sdoc'
|
|
3
|
+
/** Glob pattern(s) to find sdoc files. Default: ['./src/**\/*.sdoc'] */
|
|
4
4
|
include?: string | string[];
|
|
5
|
-
/** Dev server port. Default:
|
|
5
|
+
/** Dev server port. Default: 3000 */
|
|
6
6
|
port?: number;
|
|
7
7
|
/** Open browser on start. Default: false */
|
|
8
8
|
open?: boolean;
|
|
@@ -93,7 +93,7 @@ export interface TocHeading {
|
|
|
93
93
|
level: number;
|
|
94
94
|
id: string;
|
|
95
95
|
}
|
|
96
|
-
/** A complete doc entry (one .sdoc
|
|
96
|
+
/** A complete doc entry (one .sdoc file) */
|
|
97
97
|
export interface DocEntry {
|
|
98
98
|
/** Doc kind */
|
|
99
99
|
kind: 'component' | 'page' | 'layout';
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export const meta = {
|
|
3
|
+
title: ':Pages / About',
|
|
4
|
+
description: 'About the sdocs component library.',
|
|
5
|
+
};
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<div style="max-width: 640px; padding: 32px; font-family: system-ui, sans-serif; line-height: 1.6; color: #1e293b;">
|
|
9
|
+
<h1>About sdocs</h1>
|
|
10
|
+
<p>
|
|
11
|
+
sdocs is a lightweight documentation tool for Svelte 5 components.
|
|
12
|
+
It discovers <code>.sdoc</code> files in your project and renders
|
|
13
|
+
an interactive component explorer with live previews.
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<h2>Features</h2>
|
|
17
|
+
<ul>
|
|
18
|
+
<li>Zero-config component discovery</li>
|
|
19
|
+
<li>Live preview with prop controls</li>
|
|
20
|
+
<li>Multiple snippet examples per component</li>
|
|
21
|
+
<li>Page and layout support</li>
|
|
22
|
+
<li>Light and dark themes</li>
|
|
23
|
+
</ul>
|
|
24
|
+
|
|
25
|
+
<h2>Getting Started</h2>
|
|
26
|
+
<p>
|
|
27
|
+
Create a <code>.sdoc</code> file next to your component and export
|
|
28
|
+
a <code>meta</code> object with the component reference and title.
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
<h2>File Types</h2>
|
|
32
|
+
<ul>
|
|
33
|
+
<li><strong>.sdoc</strong> — Component documentation with snippets</li>
|
|
34
|
+
<li><strong>.page.sdoc</strong> — Standalone content pages</li>
|
|
35
|
+
<li><strong>.layout.sdoc</strong> — Full-page layout previews</li>
|
|
36
|
+
</ul>
|
|
37
|
+
</div>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Button from './Button.svelte';
|
|
3
|
+
import { Icon } from '../Icon/index.js';
|
|
4
|
+
|
|
5
|
+
export const meta = {
|
|
6
|
+
component: Button,
|
|
7
|
+
title: 'Button',
|
|
8
|
+
description: 'A flexible button with optional left and right snippet slots for icons or badges.',
|
|
9
|
+
};
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
{#snippet Default()}
|
|
13
|
+
<Button>Click me</Button>
|
|
14
|
+
{/snippet}
|
|
15
|
+
|
|
16
|
+
{#snippet WithLeftIcon()}
|
|
17
|
+
<Button onclick={() => alert('Settings')}>
|
|
18
|
+
{#snippet left()}<Icon name="settings" --w="14px" --h="14px" />{/snippet}
|
|
19
|
+
Settings
|
|
20
|
+
</Button>
|
|
21
|
+
{/snippet}
|
|
22
|
+
|
|
23
|
+
{#snippet WithRightIcon()}
|
|
24
|
+
<Button>
|
|
25
|
+
Next
|
|
26
|
+
{#snippet right()}<Icon name="chevron-right" --w="14px" --h="14px" />{/snippet}
|
|
27
|
+
</Button>
|
|
28
|
+
{/snippet}
|
|
29
|
+
|
|
30
|
+
{#snippet BothSlots()}
|
|
31
|
+
<Button>
|
|
32
|
+
{#snippet left()}<Icon name="file-text" --w="14px" --h="14px" />{/snippet}
|
|
33
|
+
Export
|
|
34
|
+
{#snippet right()}<span style="font-size: 11px; opacity: 0.6;">PDF</span>{/snippet}
|
|
35
|
+
</Button>
|
|
36
|
+
{/snippet}
|
|
37
|
+
|
|
38
|
+
{#snippet IconOnly()}
|
|
39
|
+
<div style="display: flex; gap: 8px;">
|
|
40
|
+
<Button title="Light theme" --p="4px 6px">
|
|
41
|
+
{#snippet left()}<Icon name="sun" --w="16px" --h="16px" />{/snippet}
|
|
42
|
+
</Button>
|
|
43
|
+
<Button title="Fullscreen" --p="4px 6px">
|
|
44
|
+
{#snippet left()}<Icon name="maximize" --w="16px" --h="16px" />{/snippet}
|
|
45
|
+
</Button>
|
|
46
|
+
</div>
|
|
47
|
+
{/snippet}
|
|
48
|
+
|
|
49
|
+
{#snippet Disabled()}
|
|
50
|
+
<Button disabled>Can't click</Button>
|
|
51
|
+
{/snippet}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @cssvar {shorthand} --p - Padding
|
|
6
|
+
* @cssvar {length} --r - Border radius
|
|
7
|
+
* @cssvar {length} --h - Height
|
|
8
|
+
* @cssvar {length} --gap - Gap between left, label, right
|
|
9
|
+
* @cssvar {color} --bg - Background color
|
|
10
|
+
* @cssvar {color} --bg-hover - Background on hover
|
|
11
|
+
* @cssvar {color} --bg-active - Background when pressed
|
|
12
|
+
* @cssvar {color} --border - Border color
|
|
13
|
+
* @cssvar {color} --color - Text/icon color
|
|
14
|
+
* @cssvar {color} --color-hover - Text/icon color on hover
|
|
15
|
+
* @cssvar {string} --font-weight - Font weight
|
|
16
|
+
* @cssvar {length} --font-size - Font size
|
|
17
|
+
*/
|
|
18
|
+
interface Props {
|
|
19
|
+
onclick?: (e: MouseEvent) => void;
|
|
20
|
+
title?: string;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
left?: Snippet;
|
|
23
|
+
right?: Snippet;
|
|
24
|
+
children?: Snippet;
|
|
25
|
+
class?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
onclick,
|
|
30
|
+
title,
|
|
31
|
+
disabled = false,
|
|
32
|
+
left,
|
|
33
|
+
right,
|
|
34
|
+
children,
|
|
35
|
+
class: className = '',
|
|
36
|
+
}: Props = $props();
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<button class="Button {className}" {onclick} {title} {disabled}>
|
|
40
|
+
{#if left}<span class="Button-left">{@render left()}</span>{/if}
|
|
41
|
+
{#if children}<span class="Button-label">{@render children()}</span>{/if}
|
|
42
|
+
{#if right}<span class="Button-right">{@render right()}</span>{/if}
|
|
43
|
+
</button>
|
|
44
|
+
|
|
45
|
+
<style>
|
|
46
|
+
.Button {
|
|
47
|
+
display: inline-flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
gap: var(--gap, 6px);
|
|
51
|
+
height: var(--h, auto);
|
|
52
|
+
padding: var(--p, 4px 8px);
|
|
53
|
+
border-radius: var(--r, 4px);
|
|
54
|
+
border: 1px solid var(--border, var(--color-base-200));
|
|
55
|
+
background: var(--bg, var(--color-base-0));
|
|
56
|
+
color: var(--color, var(--color-base-600));
|
|
57
|
+
font: inherit;
|
|
58
|
+
font-size: var(--font-size, inherit);
|
|
59
|
+
font-weight: var(--font-weight, inherit);
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
line-height: 1;
|
|
62
|
+
box-sizing: border-box;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.Button:hover:not(:disabled) {
|
|
66
|
+
background: var(--bg-hover, var(--color-base-100));
|
|
67
|
+
color: var(--color-hover, var(--color, var(--color-base-600)));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.Button:active:not(:disabled) {
|
|
71
|
+
background: var(--bg-active, var(--bg-hover, var(--color-base-100)));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.Button:disabled {
|
|
75
|
+
opacity: 0.5;
|
|
76
|
+
cursor: not-allowed;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.Button-left,
|
|
80
|
+
.Button-right {
|
|
81
|
+
display: inline-flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
flex-shrink: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.Button-label {
|
|
87
|
+
display: inline-flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
}
|
|
90
|
+
</style>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
/**
|
|
3
|
+
* @cssvar {shorthand} --p - Padding
|
|
4
|
+
* @cssvar {length} --r - Border radius
|
|
5
|
+
* @cssvar {length} --h - Height
|
|
6
|
+
* @cssvar {length} --gap - Gap between left, label, right
|
|
7
|
+
* @cssvar {color} --bg - Background color
|
|
8
|
+
* @cssvar {color} --bg-hover - Background on hover
|
|
9
|
+
* @cssvar {color} --bg-active - Background when pressed
|
|
10
|
+
* @cssvar {color} --border - Border color
|
|
11
|
+
* @cssvar {color} --color - Text/icon color
|
|
12
|
+
* @cssvar {color} --color-hover - Text/icon color on hover
|
|
13
|
+
* @cssvar {string} --font-weight - Font weight
|
|
14
|
+
* @cssvar {length} --font-size - Font size
|
|
15
|
+
*/
|
|
16
|
+
interface Props {
|
|
17
|
+
onclick?: (e: MouseEvent) => void;
|
|
18
|
+
title?: string;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
left?: Snippet;
|
|
21
|
+
right?: Snippet;
|
|
22
|
+
children?: Snippet;
|
|
23
|
+
class?: string;
|
|
24
|
+
}
|
|
25
|
+
declare const Button: import("svelte").Component<Props, {}, "">;
|
|
26
|
+
type Button = ReturnType<typeof Button>;
|
|
27
|
+
export default Button;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Button } from './Button.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Button } from './Button.svelte';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Checkbox from './Checkbox.svelte';
|
|
3
|
+
|
|
4
|
+
export const meta = {
|
|
5
|
+
component: Checkbox,
|
|
6
|
+
title: 'Control / Checkbox',
|
|
7
|
+
description: 'A checkbox control for boolean values.',
|
|
8
|
+
args: {
|
|
9
|
+
label: 'Enabled',
|
|
10
|
+
value: true,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#snippet Default(args)}
|
|
16
|
+
<Checkbox {...args} onchange={(v) => console.log('changed:', v)} />
|
|
17
|
+
{/snippet}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Color from './Color.svelte';
|
|
3
|
+
|
|
4
|
+
export const meta = {
|
|
5
|
+
component: Color,
|
|
6
|
+
title: 'UI / Control / Color',
|
|
7
|
+
description: 'A color picker control.',
|
|
8
|
+
args: {
|
|
9
|
+
label: 'Background',
|
|
10
|
+
value: '#3b82f6',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#snippet Default(args)}
|
|
16
|
+
<Color {...args} onchange={(v) => console.log('changed:', v)} />
|
|
17
|
+
{/snippet}
|
|
@@ -28,20 +28,20 @@
|
|
|
28
28
|
}
|
|
29
29
|
.sdocs-control-label {
|
|
30
30
|
min-width: 100px;
|
|
31
|
-
color: var(--
|
|
31
|
+
color: var(--color-base-600);
|
|
32
32
|
font-weight: 500;
|
|
33
33
|
}
|
|
34
34
|
.sdocs-control-color {
|
|
35
35
|
width: 32px;
|
|
36
36
|
height: 24px;
|
|
37
37
|
padding: 0;
|
|
38
|
-
border: 1px solid var(--
|
|
38
|
+
border: 1px solid var(--color-base-200);
|
|
39
39
|
border-radius: 4px;
|
|
40
40
|
cursor: pointer;
|
|
41
41
|
}
|
|
42
42
|
.sdocs-control-value {
|
|
43
|
-
color: var(--
|
|
44
|
-
font-family: var(--
|
|
43
|
+
color: var(--color-base-500);
|
|
44
|
+
font-family: var(--mono);
|
|
45
45
|
font-size: 12px;
|
|
46
46
|
}
|
|
47
47
|
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Dimension from './Dimension.svelte';
|
|
3
|
+
|
|
4
|
+
export const meta = {
|
|
5
|
+
component: Dimension,
|
|
6
|
+
title: 'UI / Control / Dimension',
|
|
7
|
+
description: 'A dimension input control for CSS values (px).',
|
|
8
|
+
args: {
|
|
9
|
+
label: 'Width',
|
|
10
|
+
value: '120px',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#snippet Default(args)}
|
|
16
|
+
<Dimension {...args} onchange={(v) => console.log('changed:', v)} />
|
|
17
|
+
{/snippet}
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
}
|
|
32
32
|
.sdocs-control-label {
|
|
33
33
|
min-width: 100px;
|
|
34
|
-
color: var(--
|
|
34
|
+
color: var(--color-base-600);
|
|
35
35
|
font-weight: 500;
|
|
36
36
|
}
|
|
37
37
|
.sdocs-control-dimension {
|
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
.sdocs-control-input {
|
|
43
43
|
width: 80px;
|
|
44
44
|
padding: 4px 8px;
|
|
45
|
-
border: 1px solid var(--
|
|
45
|
+
border: 1px solid var(--color-base-200);
|
|
46
46
|
border-radius: 4px;
|
|
47
47
|
font: inherit;
|
|
48
48
|
font-size: 13px;
|
|
49
|
-
background: var(--
|
|
50
|
-
color: var(--
|
|
49
|
+
background: var(--color-base-0);
|
|
50
|
+
color: var(--color-base-600);
|
|
51
51
|
}
|
|
52
52
|
.sdocs-control-unit {
|
|
53
|
-
color: var(--
|
|
53
|
+
color: var(--color-base-400);
|
|
54
54
|
font-size: 12px;
|
|
55
55
|
}
|
|
56
56
|
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Number from './Number.svelte';
|
|
3
|
+
|
|
4
|
+
export const meta = {
|
|
5
|
+
component: Number,
|
|
6
|
+
title: 'UI / Control / Number',
|
|
7
|
+
description: 'A numeric input control.',
|
|
8
|
+
args: {
|
|
9
|
+
label: 'Count',
|
|
10
|
+
value: 42,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#snippet Default(args)}
|
|
16
|
+
<Number {...args} onchange={(v) => console.log('changed:', v)} />
|
|
17
|
+
{/snippet}
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
}
|
|
28
28
|
.sdocs-control-label {
|
|
29
29
|
min-width: 100px;
|
|
30
|
-
color: var(--
|
|
30
|
+
color: var(--color-base-600);
|
|
31
31
|
font-weight: 500;
|
|
32
32
|
}
|
|
33
33
|
.sdocs-control-input {
|
|
34
34
|
flex: 1;
|
|
35
35
|
padding: 4px 8px;
|
|
36
|
-
border: 1px solid var(--
|
|
37
|
-
background: var(--
|
|
38
|
-
color: var(--
|
|
36
|
+
border: 1px solid var(--color-base-200);
|
|
37
|
+
background: var(--color-base-0);
|
|
38
|
+
color: var(--color-base-600);
|
|
39
39
|
border-radius: 4px;
|
|
40
40
|
font: inherit;
|
|
41
41
|
font-size: 13px;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Select from './Select.svelte';
|
|
3
|
+
|
|
4
|
+
export const meta = {
|
|
5
|
+
component: Select,
|
|
6
|
+
title: 'UI / Control / Select',
|
|
7
|
+
description: 'A dropdown select control.',
|
|
8
|
+
args: {
|
|
9
|
+
label: 'Size',
|
|
10
|
+
value: 'md',
|
|
11
|
+
options: ['sm', 'md', 'lg'],
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{#snippet Default(args)}
|
|
17
|
+
<Select {...args} onchange={(v) => console.log('changed:', v)} />
|
|
18
|
+
{/snippet}
|
|
@@ -31,18 +31,18 @@
|
|
|
31
31
|
}
|
|
32
32
|
.sdocs-control-label {
|
|
33
33
|
min-width: 100px;
|
|
34
|
-
color: var(--
|
|
34
|
+
color: var(--color-base-600);
|
|
35
35
|
font-weight: 500;
|
|
36
36
|
}
|
|
37
37
|
.sdocs-control-select {
|
|
38
38
|
flex: 1;
|
|
39
39
|
padding: 4px 8px;
|
|
40
|
-
border: 1px solid var(--
|
|
40
|
+
border: 1px solid var(--color-base-200);
|
|
41
41
|
border-radius: 4px;
|
|
42
42
|
font: inherit;
|
|
43
43
|
font-size: 13px;
|
|
44
|
-
background: var(--
|
|
45
|
-
color: var(--
|
|
44
|
+
background: var(--color-base-0);
|
|
45
|
+
color: var(--color-base-600);
|
|
46
46
|
max-width: 200px;
|
|
47
47
|
}
|
|
48
48
|
</style>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Text from './Text.svelte';
|
|
3
|
+
|
|
4
|
+
export const meta = {
|
|
5
|
+
component: Text,
|
|
6
|
+
title: 'UI / Control / Text',
|
|
7
|
+
description: 'A text input control for string values.',
|
|
8
|
+
args: {
|
|
9
|
+
label: 'Name',
|
|
10
|
+
value: 'Hello',
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
{#snippet Default(args)}
|
|
16
|
+
<Text {...args} onchange={(v) => console.log('changed:', v)} />
|
|
17
|
+
{/snippet}
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
}
|
|
28
28
|
.sdocs-control-label {
|
|
29
29
|
min-width: 100px;
|
|
30
|
-
color: var(--
|
|
30
|
+
color: var(--color-base-600);
|
|
31
31
|
font-weight: 500;
|
|
32
32
|
}
|
|
33
33
|
.sdocs-control-input {
|
|
34
34
|
flex: 1;
|
|
35
35
|
padding: 4px 8px;
|
|
36
|
-
border: 1px solid var(--
|
|
37
|
-
background: var(--
|
|
38
|
-
color: var(--
|
|
36
|
+
border: 1px solid var(--color-base-200);
|
|
37
|
+
background: var(--color-base-0);
|
|
38
|
+
color: var(--color-base-600);
|
|
39
39
|
border-radius: 4px;
|
|
40
40
|
font: inherit;
|
|
41
41
|
font-size: 13px;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Text } from './Text.svelte';
|
|
2
|
+
export { default as Number } from './Number.svelte';
|
|
3
|
+
export { default as Checkbox } from './Checkbox.svelte';
|
|
4
|
+
export { default as Select } from './Select.svelte';
|
|
5
|
+
export { default as Color } from './Color.svelte';
|
|
6
|
+
export { default as Dimension } from './Dimension.svelte';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Text } from './Text.svelte';
|
|
2
|
+
export { default as Number } from './Number.svelte';
|
|
3
|
+
export { default as Checkbox } from './Checkbox.svelte';
|
|
4
|
+
export { default as Select } from './Select.svelte';
|
|
5
|
+
export { default as Color } from './Color.svelte';
|
|
6
|
+
export { default as Dimension } from './Dimension.svelte';
|