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,5 @@
1
+ import type { SdocsProps } from './types.js';
2
+ import './ui/css/global.css';
3
+ declare const Sdocs: import("svelte").Component<SdocsProps, {}, "">;
4
+ type Sdocs = ReturnType<typeof Sdocs>;
5
+ export default Sdocs;
@@ -0,0 +1,7 @@
1
+ import type { Plugin } from 'vite';
2
+ import type { SdocsOptions } from '../types.js';
3
+ /**
4
+ * Vite plugin that provides the virtual HTML shell and Svelte app entry
5
+ * for standalone mode. Also handles SPA fallback routing.
6
+ */
7
+ export declare function sdocsAppPlugin(options?: SdocsOptions): Plugin;
@@ -0,0 +1,69 @@
1
+ const ENTRY_ID = '/@sdocs/entry';
2
+ const RESOLVED_ENTRY_ID = '\0' + ENTRY_ID;
3
+ const HTML = `<!DOCTYPE html>
4
+ <html lang="en">
5
+ <head>
6
+ <meta charset="UTF-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>sdocs</title>
9
+ </head>
10
+ <body>
11
+ <div id="sdocs-app"></div>
12
+ <script type="module" src="${ENTRY_ID}"></script>
13
+ </body>
14
+ </html>`;
15
+ function generateEntry(options) {
16
+ const optionsJson = JSON.stringify(options);
17
+ return `
18
+ import { mount } from 'svelte';
19
+ import Sdocs from 'sdocs/Sdocs.svelte';
20
+ import 'sdocs/ui/css/global.css';
21
+
22
+ mount(Sdocs, {
23
+ target: document.getElementById('sdocs-app'),
24
+ props: { options: ${optionsJson} }
25
+ });
26
+ `;
27
+ }
28
+ /**
29
+ * Vite plugin that provides the virtual HTML shell and Svelte app entry
30
+ * for standalone mode. Also handles SPA fallback routing.
31
+ */
32
+ export function sdocsAppPlugin(options = {}) {
33
+ return {
34
+ name: 'sdocs-app',
35
+ resolveId(id) {
36
+ if (id === ENTRY_ID) {
37
+ return RESOLVED_ENTRY_ID;
38
+ }
39
+ },
40
+ load(id) {
41
+ if (id === RESOLVED_ENTRY_ID) {
42
+ return generateEntry(options);
43
+ }
44
+ },
45
+ configureServer(server) {
46
+ // Return a function so the middleware runs AFTER Vite's internal ones.
47
+ // This ensures static files and module requests are handled first,
48
+ // and only unmatched requests fall through to the SPA fallback.
49
+ return () => {
50
+ server.middlewares.use(async (req, res, next) => {
51
+ const url = req.url ?? '/';
52
+ // Skip Vite internal paths and file requests
53
+ if (url.startsWith('/@') ||
54
+ url.startsWith('/__') ||
55
+ url.startsWith('/node_modules') ||
56
+ url.startsWith('/src') ||
57
+ url.includes('.')) {
58
+ return next();
59
+ }
60
+ // SPA fallback: serve the HTML shell for all other routes
61
+ const html = await server.transformIndexHtml(url, HTML);
62
+ res.setHeader('Content-Type', 'text/html');
63
+ res.statusCode = 200;
64
+ res.end(html);
65
+ });
66
+ };
67
+ },
68
+ };
69
+ }
@@ -0,0 +1,12 @@
1
+ import type { SdocsOptions } from '../types.js';
2
+ export interface SdocsConfig {
3
+ /** Glob pattern(s) to find doc files */
4
+ include?: string | string[];
5
+ /** Dev server port */
6
+ port?: number;
7
+ /** Open browser on start */
8
+ open?: boolean;
9
+ /** Sdocs UI options (sidebar order, etc.) */
10
+ options?: SdocsOptions;
11
+ }
12
+ export declare function loadConfig(cwd?: any): Promise<Required<SdocsConfig>>;
@@ -0,0 +1,34 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { existsSync } from 'fs';
10
+ import { resolve } from 'path';
11
+ import { pathToFileURL } from 'url';
12
+ const CONFIG_FILES = ['sdocs.config.js', 'sdocs.config.mjs', 'sdocs.config.ts'];
13
+ const DEFAULTS = {
14
+ include: ['./src/**/*.docs.{svelte,svx}'],
15
+ port: 5174,
16
+ open: false,
17
+ options: {},
18
+ };
19
+ export async function loadConfig(cwd = process.cwd()) {
20
+ for (const filename of CONFIG_FILES) {
21
+ const filepath = resolve(cwd, filename);
22
+ if (existsSync(filepath)) {
23
+ try {
24
+ const mod = await import(__rewriteRelativeImportExtension(pathToFileURL(filepath).href, true));
25
+ const userConfig = mod.default ?? mod;
26
+ return { ...DEFAULTS, ...userConfig };
27
+ }
28
+ catch (err) {
29
+ console.warn(`[sdocs] Failed to load ${filename}:`, err);
30
+ }
31
+ }
32
+ }
33
+ return { ...DEFAULTS };
34
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ import { loadConfig } from './config.js';
2
+ import { startServer } from './server.js';
3
+ const args = process.argv.slice(2);
4
+ const command = args[0];
5
+ function parseFlags(args) {
6
+ const flags = {};
7
+ for (let i = 0; i < args.length; i++) {
8
+ const arg = args[i];
9
+ if (arg.startsWith('--')) {
10
+ const key = arg.slice(2);
11
+ const next = args[i + 1];
12
+ if (next && !next.startsWith('--')) {
13
+ flags[key] = next;
14
+ i++;
15
+ }
16
+ else {
17
+ flags[key] = true;
18
+ }
19
+ }
20
+ }
21
+ return flags;
22
+ }
23
+ function printHelp() {
24
+ console.log(`
25
+ sdocs — Svelte component documentation
26
+
27
+ Usage:
28
+ sdocs dev Start dev server
29
+ sdocs help Show this help
30
+
31
+ Options:
32
+ --port <number> Dev server port (default: 5174)
33
+ --open Open browser on start
34
+
35
+ Config:
36
+ Create sdocs.config.js in your project root:
37
+
38
+ export default {
39
+ include: ['src/**/*.docs.{svelte,svx}'],
40
+ port: 5174,
41
+ options: {
42
+ sidebar: { order: { root: ['Layout', '*'] } }
43
+ }
44
+ }
45
+ `);
46
+ }
47
+ async function main() {
48
+ if (!command || command === 'help' || command === '--help') {
49
+ printHelp();
50
+ return;
51
+ }
52
+ if (command === 'dev') {
53
+ const flags = parseFlags(args.slice(1));
54
+ const config = await loadConfig();
55
+ if (flags.port) {
56
+ config.port = Number(flags.port);
57
+ }
58
+ if (flags.open) {
59
+ config.open = true;
60
+ }
61
+ await startServer(config);
62
+ }
63
+ else {
64
+ console.error(`Unknown command: ${command}`);
65
+ printHelp();
66
+ process.exit(1);
67
+ }
68
+ }
69
+ main().catch((err) => {
70
+ console.error(err);
71
+ process.exit(1);
72
+ });
@@ -0,0 +1,2 @@
1
+ import type { SdocsConfig } from './config.js';
2
+ export declare function startServer(config: Required<SdocsConfig>): Promise<void>;
@@ -0,0 +1,62 @@
1
+ import { createServer } from 'vite';
2
+ import { resolve } from 'path';
3
+ import { sdocsPlugin } from '../vite-plugin.js';
4
+ import { sdocsAppPlugin } from './app-plugin.js';
5
+ /**
6
+ * Try to dynamically import mdsvex. Returns null if not installed.
7
+ */
8
+ async function tryLoadMdsvex() {
9
+ try {
10
+ return await import('mdsvex');
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ export async function startServer(config) {
17
+ const cwd = process.cwd();
18
+ const mdsvexMod = await tryLoadMdsvex();
19
+ const hasMdsvex = mdsvexMod !== null;
20
+ // Import svelte vite plugin
21
+ const { svelte } = await import('@sveltejs/vite-plugin-svelte');
22
+ const svelteConfig = {
23
+ extensions: hasMdsvex ? ['.svelte', '.svx'] : ['.svelte'],
24
+ compilerOptions: {
25
+ dev: true,
26
+ },
27
+ // Don't auto-load svelte.config.js (avoids SvelteKit interference)
28
+ configFile: false,
29
+ };
30
+ if (hasMdsvex) {
31
+ svelteConfig.preprocess = [mdsvexMod.mdsvex({ extensions: ['.svx'] })];
32
+ }
33
+ const server = await createServer({
34
+ root: cwd,
35
+ // Prevent loading vite.config.ts from the user's project (which may have SvelteKit)
36
+ configFile: false,
37
+ plugins: [
38
+ svelte(svelteConfig),
39
+ sdocsPlugin({ include: config.include }),
40
+ sdocsAppPlugin(config.options),
41
+ ],
42
+ resolve: {
43
+ alias: {
44
+ $lib: resolve(cwd, 'src/lib'),
45
+ },
46
+ },
47
+ server: {
48
+ port: config.port,
49
+ open: config.open,
50
+ },
51
+ // Custom app type — we serve HTML virtually, no index.html on disk
52
+ appType: 'custom',
53
+ optimizeDeps: {
54
+ include: ['svelte', 'lucide-svelte'],
55
+ },
56
+ });
57
+ await server.listen();
58
+ server.printUrls();
59
+ if (hasMdsvex) {
60
+ console.log(' mdsvex detected — .svx files enabled');
61
+ }
62
+ }
@@ -0,0 +1,47 @@
1
+ import type { ArgType, CssProps, CssControlType, MethodType } from './types.js';
2
+ export interface ExtractedProp {
3
+ name: string;
4
+ type: string;
5
+ required: boolean;
6
+ defaultValue?: string;
7
+ description?: string;
8
+ }
9
+ export interface ExtractedCssProp {
10
+ name: string;
11
+ type?: CssControlType;
12
+ description?: string;
13
+ default?: string;
14
+ }
15
+ export interface ExtractedMethod {
16
+ name: string;
17
+ params?: string;
18
+ returnType?: string;
19
+ description?: string;
20
+ }
21
+ export interface ComponentDocgen {
22
+ props: ExtractedProp[];
23
+ cssProps: ExtractedCssProp[];
24
+ methods: ExtractedMethod[];
25
+ description?: string;
26
+ }
27
+ /**
28
+ * Parse Svelte 5 component props from source code.
29
+ * Supports both interface Props {} and inline type annotations.
30
+ */
31
+ export declare function parseProps(source: string): ComponentDocgen;
32
+ /**
33
+ * Convert extracted component props to argTypes for controls
34
+ */
35
+ export declare function propsToArgTypes(docgen: ComponentDocgen | undefined): Record<string, ArgType>;
36
+ /**
37
+ * Extract default args from component docgen
38
+ */
39
+ export declare function propsToDefaultArgs(docgen: ComponentDocgen | undefined): Record<string, unknown>;
40
+ /**
41
+ * Convert extracted CSS props to CssProps config
42
+ */
43
+ export declare function cssVarsToCssProps(docgen: ComponentDocgen | undefined): CssProps;
44
+ /**
45
+ * Convert extracted methods to MethodType[] for the UI
46
+ */
47
+ export declare function docgenToMethods(docgen: ComponentDocgen | undefined): MethodType[];