sdocs 0.0.14 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/bin/sdocs.js +1 -1
  2. package/dist/client/App.svelte +16 -39
  3. package/dist/client/App.svelte.d.ts +1 -1
  4. package/dist/client/favicon.png +0 -0
  5. package/dist/client/tree-builder.js +57 -14
  6. package/dist/client/{CollapsiblePanel.svelte → views/CollapsiblePanel.svelte} +5 -5
  7. package/dist/client/{ComponentView.svelte → views/ComponentView.svelte} +39 -13
  8. package/dist/client/{ComponentView.svelte.d.ts → views/ComponentView.svelte.d.ts} +1 -1
  9. package/dist/client/{ControlsPanel.svelte → views/ControlsPanel.svelte} +10 -15
  10. package/dist/client/{ControlsPanel.svelte.d.ts → views/ControlsPanel.svelte.d.ts} +1 -1
  11. package/dist/client/{DataTable.svelte → views/DataTable.svelte} +8 -8
  12. package/dist/client/{HomePage.svelte → views/HomePage.svelte} +10 -8
  13. package/dist/client/{HomePage.svelte.d.ts → views/HomePage.svelte.d.ts} +1 -1
  14. package/dist/client/{LayoutView.svelte → views/LayoutView.svelte} +1 -1
  15. package/dist/client/{LayoutView.svelte.d.ts → views/LayoutView.svelte.d.ts} +1 -1
  16. package/dist/client/{PageView.svelte → views/PageView.svelte} +7 -7
  17. package/dist/client/{PageView.svelte.d.ts → views/PageView.svelte.d.ts} +1 -1
  18. package/dist/client/{PreviewFrame.svelte → views/PreviewFrame.svelte} +10 -3
  19. package/dist/client/views/Sidebar.svelte +369 -0
  20. package/dist/client/{Sidebar.svelte.d.ts → views/Sidebar.svelte.d.ts} +2 -2
  21. package/dist/commands/build.js +2 -2
  22. package/dist/commands/dev.js +2 -2
  23. package/dist/commands/init.js +4 -4
  24. package/dist/commands/preview.js +1 -1
  25. package/dist/{app-gen.d.ts → server/app-gen.d.ts} +1 -1
  26. package/dist/{app-gen.js → server/app-gen.js} +4 -4
  27. package/dist/{cli.js → server/cli.js} +4 -4
  28. package/dist/{config.d.ts → server/config.d.ts} +1 -1
  29. package/dist/{config.js → server/config.js} +7 -2
  30. package/dist/server/discovery.d.ts +1 -1
  31. package/dist/server/discovery.js +1 -1
  32. package/dist/server/meta-parser.js +1 -1
  33. package/dist/server/prop-parser.js +12 -4
  34. package/dist/server/snippet-compiler.js +8 -0
  35. package/dist/server/snippet-extractor.d.ts +1 -1
  36. package/dist/server/snippet-extractor.js +40 -5
  37. package/dist/server/toc-extractor.d.ts +0 -2
  38. package/dist/server/toc-extractor.js +0 -14
  39. package/dist/types.d.ts +3 -3
  40. package/dist/ui/About.page.sdoc +37 -0
  41. package/dist/ui/Button/Button.sdoc +51 -0
  42. package/dist/ui/Button/Button.svelte +90 -0
  43. package/dist/ui/Button/Button.svelte.d.ts +27 -0
  44. package/dist/ui/Button/index.d.ts +1 -0
  45. package/dist/ui/Button/index.js +1 -0
  46. package/dist/ui/Control/Checkbox.sdoc +17 -0
  47. package/dist/{client/controls/CheckboxControl.svelte → ui/Control/Checkbox.svelte} +1 -1
  48. package/dist/ui/Control/Checkbox.svelte.d.ts +8 -0
  49. package/dist/ui/Control/Color.sdoc +17 -0
  50. package/dist/{client/controls/ColorControl.svelte → ui/Control/Color.svelte} +4 -4
  51. package/dist/ui/Control/Color.svelte.d.ts +8 -0
  52. package/dist/ui/Control/Dimension.sdoc +17 -0
  53. package/dist/{client/controls/DimensionControl.svelte → ui/Control/Dimension.svelte} +5 -5
  54. package/dist/ui/Control/Dimension.svelte.d.ts +8 -0
  55. package/dist/ui/Control/Number.sdoc +17 -0
  56. package/dist/{client/controls/NumberControl.svelte → ui/Control/Number.svelte} +4 -4
  57. package/dist/ui/Control/Number.svelte.d.ts +8 -0
  58. package/dist/ui/Control/Select.sdoc +18 -0
  59. package/dist/{client/controls/SelectControl.svelte → ui/Control/Select.svelte} +4 -4
  60. package/dist/ui/Control/Select.svelte.d.ts +9 -0
  61. package/dist/ui/Control/Text.sdoc +17 -0
  62. package/dist/{client/controls/TextControl.svelte → ui/Control/Text.svelte} +4 -4
  63. package/dist/ui/Control/Text.svelte.d.ts +8 -0
  64. package/dist/ui/Control/index.d.ts +6 -0
  65. package/dist/ui/Control/index.js +6 -0
  66. package/dist/ui/Dashboard.layout.sdoc +60 -0
  67. package/dist/ui/Frame/Frame.sdoc +54 -0
  68. package/dist/ui/Frame/Frame.svelte +88 -0
  69. package/dist/ui/Frame/Frame.svelte.d.ts +15 -0
  70. package/dist/ui/Frame/index.d.ts +1 -0
  71. package/dist/ui/Frame/index.js +1 -0
  72. package/dist/ui/Icon/Icon.sdoc +45 -0
  73. package/dist/ui/Icon/Icon.svelte +47 -0
  74. package/dist/ui/Icon/Icon.svelte.d.ts +16 -0
  75. package/dist/ui/Icon/icons/bookmark.svg +1 -0
  76. package/dist/ui/Icon/icons/chevron-down.svg +1 -0
  77. package/dist/ui/Icon/icons/chevron-left.svg +1 -0
  78. package/dist/ui/Icon/icons/chevron-right.svg +1 -0
  79. package/dist/ui/Icon/icons/chevron-up.svg +1 -0
  80. package/dist/ui/Icon/icons/code.svg +1 -0
  81. package/dist/ui/Icon/icons/component.svg +1 -0
  82. package/dist/ui/Icon/icons/copy.svg +1 -0
  83. package/dist/ui/Icon/icons/diamond.svg +1 -0
  84. package/dist/ui/Icon/icons/file-code.svg +1 -0
  85. package/dist/ui/Icon/icons/file-text.svg +1 -0
  86. package/dist/ui/Icon/icons/folder-open.svg +1 -0
  87. package/dist/ui/Icon/icons/folder.svg +1 -0
  88. package/dist/ui/Icon/icons/panels-top-left.svg +1 -0
  89. package/dist/ui/Icon/icons/sdocs.svg +8 -0
  90. package/dist/ui/Icon/index.d.ts +1 -0
  91. package/dist/ui/Icon/index.js +1 -0
  92. package/dist/ui/NavTree/Group.sdoc +46 -0
  93. package/dist/ui/NavTree/Group.svelte +82 -0
  94. package/dist/ui/NavTree/Group.svelte.d.ts +11 -0
  95. package/dist/ui/NavTree/Item.sdoc +70 -0
  96. package/dist/ui/NavTree/Item.svelte +164 -0
  97. package/dist/ui/NavTree/Item.svelte.d.ts +33 -0
  98. package/dist/ui/NavTree/NavTree.sdoc +119 -0
  99. package/dist/ui/NavTree/NavTree.svelte +31 -0
  100. package/dist/ui/NavTree/NavTree.svelte.d.ts +8 -0
  101. package/dist/ui/NavTree/index.js +6 -0
  102. package/dist/ui/Stack/Stack.sdoc +44 -0
  103. package/dist/ui/Stack/Stack.svelte +41 -0
  104. package/dist/ui/Stack/Stack.svelte.d.ts +19 -0
  105. package/dist/ui/Stack/index.d.ts +1 -0
  106. package/dist/ui/Stack/index.js +1 -0
  107. package/dist/ui/index.d.ts +6 -0
  108. package/dist/ui/index.js +6 -0
  109. package/dist/ui/styles/fonts/jetbrains-mono-italic-latin-ext.woff2 +0 -0
  110. package/dist/ui/styles/fonts/jetbrains-mono-italic-latin.woff2 +0 -0
  111. package/dist/ui/styles/fonts/jetbrains-mono-latin-ext.woff2 +0 -0
  112. package/dist/ui/styles/fonts/jetbrains-mono-latin.woff2 +0 -0
  113. package/dist/ui/styles/fonts.css +87 -0
  114. package/dist/ui/styles/theme.css +910 -0
  115. package/dist/vite.js +47 -51
  116. package/package.json +5 -2
  117. package/dist/client/Sidebar.svelte +0 -329
  118. package/dist/client/controls/CheckboxControl.svelte.d.ts +0 -8
  119. package/dist/client/controls/ColorControl.svelte.d.ts +0 -8
  120. package/dist/client/controls/DimensionControl.svelte.d.ts +0 -8
  121. package/dist/client/controls/NumberControl.svelte.d.ts +0 -8
  122. package/dist/client/controls/SelectControl.svelte.d.ts +0 -9
  123. package/dist/client/controls/TextControl.svelte.d.ts +0 -8
  124. package/dist/client/theme.css +0 -80
  125. package/dist/server/sdocx-parser.d.ts +0 -11
  126. package/dist/server/sdocx-parser.js +0 -197
  127. /package/dist/client/{CollapsiblePanel.svelte.d.ts → views/CollapsiblePanel.svelte.d.ts} +0 -0
  128. /package/dist/client/{DataTable.svelte.d.ts → views/DataTable.svelte.d.ts} +0 -0
  129. /package/dist/client/{PreviewFrame.svelte.d.ts → views/PreviewFrame.svelte.d.ts} +0 -0
  130. /package/dist/{cli.d.ts → server/cli.d.ts} +0 -0
  131. /package/dist/{client → ui/styles}/fonts/figtree-italic-latin-ext.woff2 +0 -0
  132. /package/dist/{client → ui/styles}/fonts/figtree-italic-latin.woff2 +0 -0
  133. /package/dist/{client → ui/styles}/fonts/figtree-latin-ext.woff2 +0 -0
  134. /package/dist/{client → ui/styles}/fonts/figtree-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
- const regex = /\{#snippet\s+(\w+)\s*\(([^)]*)\)\}([\s\S]*?)\{\/snippet\}/g;
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
- while ((match = regex.exec(source)) !== null) {
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 body = match[3].trim();
9
- snippets.push({ name, body });
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', './src/**\/*.sdocx'] */
3
+ /** Glob pattern(s) to find sdoc files. Default: ['./src/**\/*.sdoc'] */
4
4
  include?: string | string[];
5
- /** Dev server port. Default: 5174 */
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/.sdocx file) */
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}
@@ -27,7 +27,7 @@
27
27
  }
28
28
  .sdocs-control-label {
29
29
  min-width: 100px;
30
- color: var(--sdocs-text);
30
+ color: var(--color-base-600);
31
31
  font-weight: 500;
32
32
  }
33
33
  .sdocs-control-checkbox {
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ label: string;
3
+ value: boolean;
4
+ onchange: (value: boolean) => void;
5
+ }
6
+ declare const Checkbox: import("svelte").Component<Props, {}, "">;
7
+ type Checkbox = ReturnType<typeof Checkbox>;
8
+ export default Checkbox;
@@ -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(--sdocs-text);
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(--sdocs-border);
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(--sdocs-text-secondary);
44
- font-family: var(--sdocs-font-mono);
43
+ color: var(--color-base-500);
44
+ font-family: var(--mono);
45
45
  font-size: 12px;
46
46
  }
47
47
  </style>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ label: string;
3
+ value: string;
4
+ onchange: (value: string) => void;
5
+ }
6
+ declare const Color: import("svelte").Component<Props, {}, "">;
7
+ type Color = ReturnType<typeof Color>;
8
+ export default Color;
@@ -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(--sdocs-text);
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(--sdocs-border);
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(--sdocs-bg);
50
- color: var(--sdocs-text);
49
+ background: var(--color-base-0);
50
+ color: var(--color-base-600);
51
51
  }
52
52
  .sdocs-control-unit {
53
- color: var(--sdocs-text-muted);
53
+ color: var(--color-base-400);
54
54
  font-size: 12px;
55
55
  }
56
56
  </style>
@@ -0,0 +1,8 @@
1
+ interface Props {
2
+ label: string;
3
+ value: string;
4
+ onchange: (value: string) => void;
5
+ }
6
+ declare const Dimension: import("svelte").Component<Props, {}, "">;
7
+ type Dimension = ReturnType<typeof Dimension>;
8
+ export default Dimension;
@@ -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(--sdocs-text);
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(--sdocs-border);
37
- background: var(--sdocs-bg);
38
- color: var(--sdocs-text);
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,8 @@
1
+ interface Props {
2
+ label: string;
3
+ value: number;
4
+ onchange: (value: number) => void;
5
+ }
6
+ declare const Number: import("svelte").Component<Props, {}, "">;
7
+ type Number = ReturnType<typeof Number>;
8
+ export default Number;
@@ -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(--sdocs-text);
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(--sdocs-border);
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(--sdocs-bg);
45
- color: var(--sdocs-text);
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,9 @@
1
+ interface Props {
2
+ label: string;
3
+ value: string;
4
+ options: string[];
5
+ onchange: (value: string) => void;
6
+ }
7
+ declare const Select: import("svelte").Component<Props, {}, "">;
8
+ type Select = ReturnType<typeof Select>;
9
+ export default Select;
@@ -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(--sdocs-text);
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(--sdocs-border);
37
- background: var(--sdocs-bg);
38
- color: var(--sdocs-text);
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,8 @@
1
+ interface Props {
2
+ label: string;
3
+ value: string;
4
+ onchange: (value: string) => void;
5
+ }
6
+ declare const Text: import("svelte").Component<Props, {}, "">;
7
+ type Text = ReturnType<typeof Text>;
8
+ export default Text;
@@ -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';