sdocs 0.0.1

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 (129) hide show
  1. package/README.md +43 -0
  2. package/bin/sdocs.js +2 -0
  3. package/dist/Sdocs.svelte +1210 -0
  4. package/dist/Sdocs.svelte.d.ts +5 -0
  5. package/dist/cli/app-plugin.d.ts +7 -0
  6. package/dist/cli/app-plugin.js +69 -0
  7. package/dist/cli/config.d.ts +12 -0
  8. package/dist/cli/config.js +34 -0
  9. package/dist/cli/index.d.ts +1 -0
  10. package/dist/cli/index.js +72 -0
  11. package/dist/cli/server.d.ts +2 -0
  12. package/dist/cli/server.js +62 -0
  13. package/dist/docgen.d.ts +47 -0
  14. package/dist/docgen.js +463 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.js +4 -0
  17. package/dist/internal/ComponentPreview.svelte +58 -0
  18. package/dist/internal/ComponentPreview.svelte.d.ts +17 -0
  19. package/dist/internal/CssPropsTable.svelte +239 -0
  20. package/dist/internal/CssPropsTable.svelte.d.ts +11 -0
  21. package/dist/internal/Home.svelte +92 -0
  22. package/dist/internal/Home.svelte.d.ts +9 -0
  23. package/dist/internal/MethodsTable.svelte +72 -0
  24. package/dist/internal/MethodsTable.svelte.d.ts +7 -0
  25. package/dist/internal/PropsTable.svelte +342 -0
  26. package/dist/internal/PropsTable.svelte.d.ts +12 -0
  27. package/dist/internal/Showcase.svelte +130 -0
  28. package/dist/internal/Showcase.svelte.d.ts +21 -0
  29. package/dist/types.d.ts +162 -0
  30. package/dist/types.js +1 -0
  31. package/dist/ui/Badge/Badge.docs.svelte +46 -0
  32. package/dist/ui/Badge/Badge.docs.svelte.d.ts +26 -0
  33. package/dist/ui/Badge/Badge.svelte +59 -0
  34. package/dist/ui/Badge/Badge.svelte.d.ts +17 -0
  35. package/dist/ui/Badge/index.d.ts +1 -0
  36. package/dist/ui/Badge/index.js +1 -0
  37. package/dist/ui/Checkbox/Checkbox.docs.svelte +51 -0
  38. package/dist/ui/Checkbox/Checkbox.docs.svelte.d.ts +27 -0
  39. package/dist/ui/Checkbox/Checkbox.svelte +169 -0
  40. package/dist/ui/Checkbox/Checkbox.svelte.d.ts +18 -0
  41. package/dist/ui/Checkbox/index.d.ts +1 -0
  42. package/dist/ui/Checkbox/index.js +1 -0
  43. package/dist/ui/CodeBlock/CodeBlock.docs.svelte +28 -0
  44. package/dist/ui/CodeBlock/CodeBlock.docs.svelte.d.ts +24 -0
  45. package/dist/ui/CodeBlock/CodeBlock.svelte +101 -0
  46. package/dist/ui/CodeBlock/CodeBlock.svelte.d.ts +7 -0
  47. package/dist/ui/CodeBlock/index.d.ts +1 -0
  48. package/dist/ui/CodeBlock/index.js +1 -0
  49. package/dist/ui/Frame/Frame.docs.svelte +140 -0
  50. package/dist/ui/Frame/Frame.docs.svelte.d.ts +26 -0
  51. package/dist/ui/Frame/Frame.svelte +88 -0
  52. package/dist/ui/Frame/Frame.svelte.d.ts +15 -0
  53. package/dist/ui/Frame/index.d.ts +1 -0
  54. package/dist/ui/Frame/index.js +1 -0
  55. package/dist/ui/InputNumber/InputNumber.docs.svelte +50 -0
  56. package/dist/ui/InputNumber/InputNumber.docs.svelte.d.ts +26 -0
  57. package/dist/ui/InputNumber/InputNumber.svelte +275 -0
  58. package/dist/ui/InputNumber/InputNumber.svelte.d.ts +26 -0
  59. package/dist/ui/InputNumber/index.d.ts +1 -0
  60. package/dist/ui/InputNumber/index.js +1 -0
  61. package/dist/ui/InputText/InputText.docs.svelte +43 -0
  62. package/dist/ui/InputText/InputText.docs.svelte.d.ts +26 -0
  63. package/dist/ui/InputText/InputText.svelte +116 -0
  64. package/dist/ui/InputText/InputText.svelte.d.ts +22 -0
  65. package/dist/ui/InputText/index.d.ts +1 -0
  66. package/dist/ui/InputText/index.js +1 -0
  67. package/dist/ui/Panel/CollapsiblePanel.docs.svelte +45 -0
  68. package/dist/ui/Panel/CollapsiblePanel.docs.svelte.d.ts +25 -0
  69. package/dist/ui/Panel/CollapsiblePanel.svelte +93 -0
  70. package/dist/ui/Panel/CollapsiblePanel.svelte.d.ts +14 -0
  71. package/dist/ui/Panel/index.d.ts +1 -0
  72. package/dist/ui/Panel/index.js +1 -0
  73. package/dist/ui/Placeholder/Placeholder.docs.svelte +49 -0
  74. package/dist/ui/Placeholder/Placeholder.docs.svelte.d.ts +26 -0
  75. package/dist/ui/Placeholder/Placeholder.svelte +99 -0
  76. package/dist/ui/Placeholder/Placeholder.svelte.d.ts +21 -0
  77. package/dist/ui/Placeholder/index.d.ts +1 -0
  78. package/dist/ui/Placeholder/index.js +1 -0
  79. package/dist/ui/Radio/Radio.docs.svelte +67 -0
  80. package/dist/ui/Radio/Radio.docs.svelte.d.ts +27 -0
  81. package/dist/ui/Radio/Radio.svelte +165 -0
  82. package/dist/ui/Radio/Radio.svelte.d.ts +22 -0
  83. package/dist/ui/Radio/RadioGroup.docs.svelte +70 -0
  84. package/dist/ui/Radio/RadioGroup.docs.svelte.d.ts +27 -0
  85. package/dist/ui/Radio/RadioGroup.svelte +98 -0
  86. package/dist/ui/Radio/RadioGroup.svelte.d.ts +27 -0
  87. package/dist/ui/Radio/index.d.ts +2 -0
  88. package/dist/ui/Radio/index.js +2 -0
  89. package/dist/ui/SegmentControl/SegmentControl.docs.svelte +54 -0
  90. package/dist/ui/SegmentControl/SegmentControl.docs.svelte.d.ts +25 -0
  91. package/dist/ui/SegmentControl/SegmentControl.svelte +120 -0
  92. package/dist/ui/SegmentControl/SegmentControl.svelte.d.ts +18 -0
  93. package/dist/ui/SegmentControl/index.d.ts +1 -0
  94. package/dist/ui/SegmentControl/index.js +1 -0
  95. package/dist/ui/Stack/Stack.docs.svelte +63 -0
  96. package/dist/ui/Stack/Stack.docs.svelte.d.ts +26 -0
  97. package/dist/ui/Stack/Stack.svelte +45 -0
  98. package/dist/ui/Stack/Stack.svelte.d.ts +19 -0
  99. package/dist/ui/Stack/index.d.ts +1 -0
  100. package/dist/ui/Stack/index.js +1 -0
  101. package/dist/ui/Table/Body.svelte +17 -0
  102. package/dist/ui/Table/Body.svelte.d.ts +11 -0
  103. package/dist/ui/Table/Caption.svelte +17 -0
  104. package/dist/ui/Table/Caption.svelte.d.ts +11 -0
  105. package/dist/ui/Table/Cell.svelte +24 -0
  106. package/dist/ui/Table/Cell.svelte.d.ts +15 -0
  107. package/dist/ui/Table/Foot.svelte +17 -0
  108. package/dist/ui/Table/Foot.svelte.d.ts +11 -0
  109. package/dist/ui/Table/Head.svelte +17 -0
  110. package/dist/ui/Table/Head.svelte.d.ts +11 -0
  111. package/dist/ui/Table/Header.svelte +27 -0
  112. package/dist/ui/Table/Header.svelte.d.ts +17 -0
  113. package/dist/ui/Table/Row.svelte +19 -0
  114. package/dist/ui/Table/Row.svelte.d.ts +13 -0
  115. package/dist/ui/Table/Table.docs.svelte +197 -0
  116. package/dist/ui/Table/Table.docs.svelte.d.ts +28 -0
  117. package/dist/ui/Table/Table.svelte +140 -0
  118. package/dist/ui/Table/Table.svelte.d.ts +27 -0
  119. package/dist/ui/Table/index.js +10 -0
  120. package/dist/ui/css/colors.css +377 -0
  121. package/dist/ui/css/global.css +10 -0
  122. package/dist/ui/index.d.ts +12 -0
  123. package/dist/ui/index.js +12 -0
  124. package/dist/virtual-sdocs.d.ts +20 -0
  125. package/dist/vite-plugin.d.ts +18 -0
  126. package/dist/vite-plugin.js +206 -0
  127. package/dist/vite.d.ts +2 -0
  128. package/dist/vite.js +2 -0
  129. package/package.json +76 -0
@@ -0,0 +1,239 @@
1
+ <script lang="ts">
2
+ import type { CssProps, CssControlType } from '../types.js';
3
+ import { Table } from '../ui/index.js';
4
+
5
+ interface Props {
6
+ cssProps: CssProps;
7
+ /** Current CSS values (for interactive mode) */
8
+ values?: Record<string, string>;
9
+ /** Callback when values change (enables interactive mode) */
10
+ onchange?: (values: Record<string, string>) => void;
11
+ }
12
+
13
+ let { cssProps, values = {}, onchange }: Props = $props();
14
+
15
+ // Get sorted CSS prop names
16
+ let propNames = $derived(Object.keys(cssProps).sort());
17
+
18
+ // Check if we're in interactive mode
19
+ let isInteractive = $derived(!!onchange);
20
+
21
+ function getControlType(control: CssProps[string]['control']): CssControlType {
22
+ if (!control) return 'color'; // default
23
+ if (typeof control === 'string') return control;
24
+ return control.type;
25
+ }
26
+
27
+ function getOptions(control: CssProps[string]['control']): string[] {
28
+ if (typeof control === 'object' && control.options) return control.options;
29
+ return [];
30
+ }
31
+
32
+ function updateValue(key: string, value: string) {
33
+ onchange?.({ ...values, [key]: value });
34
+ }
35
+
36
+ function handleInput(key: string, event: Event) {
37
+ const target = event.target as HTMLInputElement | HTMLSelectElement;
38
+ updateValue(key, target.value);
39
+ }
40
+ </script>
41
+
42
+ {#if propNames.length > 0}
43
+ <Table compact borderless>
44
+ <Table.Head>
45
+ <Table.Row>
46
+ <Table.Header>Name</Table.Header>
47
+ <Table.Header>Type</Table.Header>
48
+ <Table.Header>Default</Table.Header>
49
+ <Table.Header>Description</Table.Header>
50
+ {#if isInteractive}
51
+ <Table.Header>Control</Table.Header>
52
+ {/if}
53
+ </Table.Row>
54
+ </Table.Head>
55
+ <Table.Body>
56
+ {#each propNames as name (name)}
57
+ {@const cssProp = cssProps[name]}
58
+ {@const controlType = getControlType(cssProp.control)}
59
+ {@const currentValue = values[name] || cssProp.default || ''}
60
+ {@const hasControl = cssProp.control !== false}
61
+ <Table.Row>
62
+ <Table.Cell>
63
+ <span class="css-name"><code>{name}</code></span>
64
+ </Table.Cell>
65
+ <Table.Cell>
66
+ <code class="css-type">{controlType}</code>
67
+ </Table.Cell>
68
+ <Table.Cell>
69
+ <code class="css-default">{cssProp.default ?? '-'}</code>
70
+ </Table.Cell>
71
+ <Table.Cell>
72
+ <span class="css-description">{cssProp.description ?? '-'}</span>
73
+ </Table.Cell>
74
+ {#if isInteractive}
75
+ <Table.Cell>
76
+ <div class="css-control">
77
+ {#if hasControl}
78
+ {#if controlType === 'color'}
79
+ <div class="css-control-color">
80
+ <input
81
+ type="color"
82
+ value={currentValue || '#888888'}
83
+ oninput={(e) => handleInput(name, e)}
84
+ />
85
+ <span class="css-control-value">{currentValue || '-'}</span>
86
+ </div>
87
+ {:else if controlType === 'select'}
88
+ <select
89
+ value={currentValue}
90
+ onchange={(e) => handleInput(name, e)}
91
+ >
92
+ {#each getOptions(cssProp.control) as option}
93
+ <option value={option}>{option}</option>
94
+ {/each}
95
+ </select>
96
+ {:else if controlType === 'number'}
97
+ <input
98
+ type="number"
99
+ value={currentValue}
100
+ oninput={(e) => handleInput(name, e)}
101
+ />
102
+ {:else}
103
+ <!-- text, length, or fallback -->
104
+ <input
105
+ type="text"
106
+ value={currentValue}
107
+ placeholder={controlType === 'length' ? '16px, 1rem' : ''}
108
+ oninput={(e) => handleInput(name, e)}
109
+ />
110
+ {/if}
111
+ {:else}
112
+ <span class="no-control">-</span>
113
+ {/if}
114
+ </div>
115
+ </Table.Cell>
116
+ {/if}
117
+ </Table.Row>
118
+ {/each}
119
+ </Table.Body>
120
+ </Table>
121
+ {:else}
122
+ <p class="css-empty">No CSS props defined</p>
123
+ {/if}
124
+
125
+ <style>
126
+ .css-name {
127
+ white-space: nowrap;
128
+ }
129
+
130
+ .css-name code {
131
+ font-family: var(--font-mono);
132
+ font-weight: 600;
133
+ color: var(--color-text);
134
+ background: none;
135
+ padding: 0;
136
+ }
137
+
138
+ .css-type {
139
+ font-family: var(--font-mono);
140
+ color: var(--sky-600);
141
+ background: var(--sky-50);
142
+ padding: 2px 6px;
143
+ border-radius: 4px;
144
+ font-size: 11px;
145
+ }
146
+
147
+ .css-default {
148
+ font-family: var(--font-mono);
149
+ color: var(--color-text-secondary);
150
+ background: var(--color-bg-hover);
151
+ padding: 2px 6px;
152
+ border-radius: 4px;
153
+ font-size: 12px;
154
+ }
155
+
156
+ .css-description {
157
+ color: var(--color-text-secondary);
158
+ line-height: 1.5;
159
+ }
160
+
161
+ .css-empty {
162
+ color: var(--color-text-muted);
163
+ font-style: italic;
164
+ margin: 0;
165
+ }
166
+
167
+ /* Control column styles */
168
+ .css-control {
169
+ min-width: 140px;
170
+ }
171
+
172
+ .css-control-color {
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 10px;
176
+ }
177
+
178
+ .css-control input[type='color'] {
179
+ width: 32px;
180
+ height: 28px;
181
+ border: 1px solid var(--color-border);
182
+ border-radius: 4px;
183
+ cursor: pointer;
184
+ padding: 2px;
185
+ flex-shrink: 0;
186
+ }
187
+
188
+ .css-control-value {
189
+ font-size: 12px;
190
+ font-family: var(--font-mono);
191
+ color: var(--color-text-muted);
192
+ overflow: hidden;
193
+ text-overflow: ellipsis;
194
+ white-space: nowrap;
195
+ }
196
+
197
+ .css-control input[type='text'],
198
+ .css-control input[type='number'] {
199
+ width: 100%;
200
+ max-width: 140px;
201
+ height: 28px;
202
+ padding: 0 8px;
203
+ border: 1px solid var(--color-border);
204
+ border-radius: 4px;
205
+ font-size: 12px;
206
+ font-family: var(--font-mono);
207
+ background: var(--color-bg-elevated);
208
+ color: var(--color-text);
209
+ }
210
+
211
+ .css-control input[type='text']:focus,
212
+ .css-control input[type='number']:focus {
213
+ outline: none;
214
+ border-color: var(--color-primary);
215
+ }
216
+
217
+ .css-control select {
218
+ width: 100%;
219
+ max-width: 140px;
220
+ height: 28px;
221
+ padding: 0 8px;
222
+ border: 1px solid var(--color-border);
223
+ border-radius: 4px;
224
+ font-size: 12px;
225
+ font-family: var(--font-mono);
226
+ background: var(--color-bg-elevated);
227
+ color: var(--color-text);
228
+ cursor: pointer;
229
+ }
230
+
231
+ .css-control select:focus {
232
+ outline: none;
233
+ border-color: var(--color-primary);
234
+ }
235
+
236
+ .no-control {
237
+ color: var(--color-text-muted);
238
+ }
239
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { CssProps } from '../types.js';
2
+ interface Props {
3
+ cssProps: CssProps;
4
+ /** Current CSS values (for interactive mode) */
5
+ values?: Record<string, string>;
6
+ /** Callback when values change (enables interactive mode) */
7
+ onchange?: (values: Record<string, string>) => void;
8
+ }
9
+ declare const CssPropsTable: import("svelte").Component<Props, {}, "">;
10
+ type CssPropsTable = ReturnType<typeof CssPropsTable>;
11
+ export default CssPropsTable;
@@ -0,0 +1,92 @@
1
+ <script lang="ts">
2
+ interface Props {
3
+ /** Total number of documented components */
4
+ componentCount?: number;
5
+ /** Total number of documentation pages */
6
+ pageCount?: number;
7
+ }
8
+
9
+ let { componentCount = 0, pageCount = 0 }: Props = $props();
10
+ </script>
11
+
12
+ <div class="Home">
13
+ <h1 class="Home-title">sdocs</h1>
14
+ <p class="Home-tagline">A lightweight documentation tool for Svelte 5 components.</p>
15
+
16
+ <div class="Home-stats">
17
+ {#if componentCount > 0}
18
+ <div class="Home-stat">
19
+ <span class="Home-stat-value">{componentCount}</span>
20
+ <span class="Home-stat-label">{componentCount === 1 ? 'Component' : 'Components'}</span>
21
+ </div>
22
+ {/if}
23
+ {#if pageCount > 0}
24
+ <div class="Home-stat">
25
+ <span class="Home-stat-value">{pageCount}</span>
26
+ <span class="Home-stat-label">{pageCount === 1 ? 'Page' : 'Pages'}</span>
27
+ </div>
28
+ {/if}
29
+ </div>
30
+
31
+ <p class="Home-hint">Select a component or page from the sidebar to get started.</p>
32
+ </div>
33
+
34
+ <style>
35
+ .Home {
36
+ display: flex;
37
+ flex-direction: column;
38
+ align-items: center;
39
+ justify-content: center;
40
+ text-align: center;
41
+ min-height: 60vh;
42
+ padding: 48px;
43
+ }
44
+
45
+ .Home-title {
46
+ font-size: 48px;
47
+ font-weight: 800;
48
+ margin: 0 0 12px;
49
+ color: var(--color-text);
50
+ letter-spacing: -0.03em;
51
+ }
52
+
53
+ .Home-tagline {
54
+ font-size: 18px;
55
+ color: var(--color-text-secondary);
56
+ margin: 0 0 40px;
57
+ max-width: 400px;
58
+ line-height: 1.5;
59
+ }
60
+
61
+ .Home-stats {
62
+ display: flex;
63
+ gap: 48px;
64
+ margin-bottom: 40px;
65
+ }
66
+
67
+ .Home-stat {
68
+ display: flex;
69
+ flex-direction: column;
70
+ align-items: center;
71
+ gap: 4px;
72
+ }
73
+
74
+ .Home-stat-value {
75
+ font-size: 36px;
76
+ font-weight: 700;
77
+ color: var(--color-primary);
78
+ }
79
+
80
+ .Home-stat-label {
81
+ font-size: 14px;
82
+ color: var(--color-text-muted);
83
+ text-transform: uppercase;
84
+ letter-spacing: 0.05em;
85
+ }
86
+
87
+ .Home-hint {
88
+ font-size: 14px;
89
+ color: var(--color-text-muted);
90
+ margin: 0;
91
+ }
92
+ </style>
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ /** Total number of documented components */
3
+ componentCount?: number;
4
+ /** Total number of documentation pages */
5
+ pageCount?: number;
6
+ }
7
+ declare const Home: import("svelte").Component<Props, {}, "">;
8
+ type Home = ReturnType<typeof Home>;
9
+ export default Home;
@@ -0,0 +1,72 @@
1
+ <script lang="ts">
2
+ import type { MethodType } from '../types.js';
3
+ import { Table } from '../ui/index.js';
4
+
5
+ interface Props {
6
+ methods: MethodType[];
7
+ }
8
+
9
+ let { methods }: Props = $props();
10
+ </script>
11
+
12
+ {#if methods.length > 0}
13
+ <Table compact borderless>
14
+ <Table.Head>
15
+ <Table.Row>
16
+ <Table.Header width="20%">Name</Table.Header>
17
+ <Table.Header width="30%">Params</Table.Header>
18
+ <Table.Header width="15%">Returns</Table.Header>
19
+ <Table.Header width="35%">Description</Table.Header>
20
+ </Table.Row>
21
+ </Table.Head>
22
+ <Table.Body>
23
+ {#each methods as method (method.name)}
24
+ <Table.Row>
25
+ <Table.Cell>
26
+ <code class="method-name">{method.name}()</code>
27
+ </Table.Cell>
28
+ <Table.Cell>
29
+ <code class="method-params">{method.params || '-'}</code>
30
+ </Table.Cell>
31
+ <Table.Cell>
32
+ <code class="method-return">{method.returnType || 'void'}</code>
33
+ </Table.Cell>
34
+ <Table.Cell>
35
+ <span class="method-description">{method.description || '-'}</span>
36
+ </Table.Cell>
37
+ </Table.Row>
38
+ {/each}
39
+ </Table.Body>
40
+ </Table>
41
+ {/if}
42
+
43
+ <style>
44
+ .method-name {
45
+ font-family: var(--font-mono);
46
+ font-weight: 600;
47
+ color: var(--color-text);
48
+ background: none;
49
+ padding: 0;
50
+ white-space: nowrap;
51
+ }
52
+
53
+ .method-params {
54
+ font-family: var(--font-mono);
55
+ color: var(--color-text-secondary);
56
+ font-size: 12px;
57
+ }
58
+
59
+ .method-return {
60
+ font-family: var(--font-mono);
61
+ color: var(--sky-600);
62
+ background: var(--sky-50);
63
+ padding: 2px 6px;
64
+ border-radius: 4px;
65
+ font-size: 12px;
66
+ }
67
+
68
+ .method-description {
69
+ color: var(--color-text-secondary);
70
+ line-height: 1.5;
71
+ }
72
+ </style>
@@ -0,0 +1,7 @@
1
+ import type { MethodType } from '../types.js';
2
+ interface Props {
3
+ methods: MethodType[];
4
+ }
5
+ declare const MethodsTable: import("svelte").Component<Props, {}, "">;
6
+ type MethodsTable = ReturnType<typeof MethodsTable>;
7
+ export default MethodsTable;