sdocs 0.0.2 → 0.0.4

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 (194) hide show
  1. package/bin/sdocs.js +1 -1
  2. package/dist/app-gen.d.ts +10 -0
  3. package/dist/app-gen.js +147 -0
  4. package/dist/cli.js +71 -0
  5. package/dist/client/App.svelte +151 -0
  6. package/dist/client/App.svelte.d.ts +14 -0
  7. package/dist/client/CollapsiblePanel.svelte +63 -0
  8. package/dist/client/CollapsiblePanel.svelte.d.ts +9 -0
  9. package/dist/client/ComponentView.svelte +321 -0
  10. package/dist/client/ComponentView.svelte.d.ts +10 -0
  11. package/dist/client/ControlsPanel.svelte +191 -0
  12. package/dist/client/ControlsPanel.svelte.d.ts +13 -0
  13. package/dist/client/DataTable.svelte +78 -0
  14. package/dist/client/DataTable.svelte.d.ts +11 -0
  15. package/dist/client/HomePage.svelte +92 -0
  16. package/dist/client/HomePage.svelte.d.ts +8 -0
  17. package/dist/client/LayoutView.svelte +27 -0
  18. package/dist/client/LayoutView.svelte.d.ts +8 -0
  19. package/dist/client/PageView.svelte +130 -0
  20. package/dist/client/PageView.svelte.d.ts +8 -0
  21. package/dist/client/PreviewFrame.svelte +100 -0
  22. package/dist/client/PreviewFrame.svelte.d.ts +10 -0
  23. package/dist/client/Sidebar.svelte +329 -0
  24. package/dist/client/Sidebar.svelte.d.ts +16 -0
  25. package/dist/client/controls/CheckboxControl.svelte +37 -0
  26. package/dist/client/controls/CheckboxControl.svelte.d.ts +8 -0
  27. package/dist/client/controls/ColorControl.svelte +47 -0
  28. package/dist/client/controls/ColorControl.svelte.d.ts +8 -0
  29. package/dist/client/controls/DimensionControl.svelte +56 -0
  30. package/dist/client/controls/DimensionControl.svelte.d.ts +8 -0
  31. package/dist/client/controls/NumberControl.svelte +44 -0
  32. package/dist/client/controls/NumberControl.svelte.d.ts +8 -0
  33. package/dist/client/controls/SelectControl.svelte +48 -0
  34. package/dist/client/controls/SelectControl.svelte.d.ts +9 -0
  35. package/dist/client/controls/TextControl.svelte +43 -0
  36. package/dist/client/controls/TextControl.svelte.d.ts +8 -0
  37. package/dist/client/router.svelte.d.ts +11 -0
  38. package/dist/client/router.svelte.js +45 -0
  39. package/dist/client/theme.css +34 -0
  40. package/dist/client/tree-builder.d.ts +30 -0
  41. package/dist/client/tree-builder.js +162 -0
  42. package/dist/commands/build.d.ts +1 -0
  43. package/dist/commands/build.js +38 -0
  44. package/dist/commands/dev.d.ts +1 -0
  45. package/dist/commands/dev.js +40 -0
  46. package/dist/commands/init.d.ts +1 -0
  47. package/dist/commands/init.js +41 -0
  48. package/dist/commands/preview.d.ts +1 -0
  49. package/dist/commands/preview.js +25 -0
  50. package/dist/config.d.ts +7 -0
  51. package/dist/config.js +57 -0
  52. package/dist/index.d.ts +2 -2
  53. package/dist/index.js +1 -4
  54. package/dist/server/discovery.d.ts +6 -0
  55. package/dist/server/discovery.js +24 -0
  56. package/dist/server/highlighter.d.ts +4 -0
  57. package/dist/server/highlighter.js +31 -0
  58. package/dist/server/meta-parser.d.ts +11 -0
  59. package/dist/server/meta-parser.js +107 -0
  60. package/dist/server/prop-parser.d.ts +5 -0
  61. package/dist/server/prop-parser.js +275 -0
  62. package/dist/server/sdocx-parser.d.ts +11 -0
  63. package/dist/server/sdocx-parser.js +197 -0
  64. package/dist/server/snippet-compiler.d.ts +27 -0
  65. package/dist/server/snippet-compiler.js +145 -0
  66. package/dist/server/snippet-extractor.d.ts +11 -0
  67. package/dist/server/snippet-extractor.js +37 -0
  68. package/dist/server/toc-extractor.d.ts +5 -0
  69. package/dist/server/toc-extractor.js +37 -0
  70. package/dist/types.d.ts +100 -148
  71. package/dist/vite.d.ts +5 -2
  72. package/dist/vite.js +266 -2
  73. package/package.json +50 -74
  74. package/README.md +0 -43
  75. package/dist/Sdocs.svelte +0 -1210
  76. package/dist/Sdocs.svelte.d.ts +0 -5
  77. package/dist/cli/app-plugin.d.ts +0 -7
  78. package/dist/cli/app-plugin.js +0 -69
  79. package/dist/cli/config.d.ts +0 -12
  80. package/dist/cli/config.js +0 -34
  81. package/dist/cli/index.js +0 -72
  82. package/dist/cli/server.d.ts +0 -2
  83. package/dist/cli/server.js +0 -63
  84. package/dist/docgen.d.ts +0 -47
  85. package/dist/docgen.js +0 -463
  86. package/dist/internal/ComponentPreview.svelte +0 -58
  87. package/dist/internal/ComponentPreview.svelte.d.ts +0 -17
  88. package/dist/internal/CssPropsTable.svelte +0 -239
  89. package/dist/internal/CssPropsTable.svelte.d.ts +0 -11
  90. package/dist/internal/Home.svelte +0 -92
  91. package/dist/internal/Home.svelte.d.ts +0 -9
  92. package/dist/internal/MethodsTable.svelte +0 -72
  93. package/dist/internal/MethodsTable.svelte.d.ts +0 -7
  94. package/dist/internal/PropsTable.svelte +0 -342
  95. package/dist/internal/PropsTable.svelte.d.ts +0 -12
  96. package/dist/internal/Showcase.svelte +0 -130
  97. package/dist/internal/Showcase.svelte.d.ts +0 -21
  98. package/dist/ui/Badge/Badge.docs.svelte +0 -46
  99. package/dist/ui/Badge/Badge.docs.svelte.d.ts +0 -26
  100. package/dist/ui/Badge/Badge.svelte +0 -59
  101. package/dist/ui/Badge/Badge.svelte.d.ts +0 -17
  102. package/dist/ui/Badge/index.d.ts +0 -1
  103. package/dist/ui/Badge/index.js +0 -1
  104. package/dist/ui/Checkbox/Checkbox.docs.svelte +0 -51
  105. package/dist/ui/Checkbox/Checkbox.docs.svelte.d.ts +0 -27
  106. package/dist/ui/Checkbox/Checkbox.svelte +0 -169
  107. package/dist/ui/Checkbox/Checkbox.svelte.d.ts +0 -18
  108. package/dist/ui/Checkbox/index.d.ts +0 -1
  109. package/dist/ui/Checkbox/index.js +0 -1
  110. package/dist/ui/CodeBlock/CodeBlock.docs.svelte +0 -28
  111. package/dist/ui/CodeBlock/CodeBlock.docs.svelte.d.ts +0 -24
  112. package/dist/ui/CodeBlock/CodeBlock.svelte +0 -101
  113. package/dist/ui/CodeBlock/CodeBlock.svelte.d.ts +0 -7
  114. package/dist/ui/CodeBlock/index.d.ts +0 -1
  115. package/dist/ui/CodeBlock/index.js +0 -1
  116. package/dist/ui/Frame/Frame.docs.svelte +0 -140
  117. package/dist/ui/Frame/Frame.docs.svelte.d.ts +0 -26
  118. package/dist/ui/Frame/Frame.svelte +0 -88
  119. package/dist/ui/Frame/Frame.svelte.d.ts +0 -15
  120. package/dist/ui/Frame/index.d.ts +0 -1
  121. package/dist/ui/Frame/index.js +0 -1
  122. package/dist/ui/InputNumber/InputNumber.docs.svelte +0 -50
  123. package/dist/ui/InputNumber/InputNumber.docs.svelte.d.ts +0 -26
  124. package/dist/ui/InputNumber/InputNumber.svelte +0 -275
  125. package/dist/ui/InputNumber/InputNumber.svelte.d.ts +0 -26
  126. package/dist/ui/InputNumber/index.d.ts +0 -1
  127. package/dist/ui/InputNumber/index.js +0 -1
  128. package/dist/ui/InputText/InputText.docs.svelte +0 -43
  129. package/dist/ui/InputText/InputText.docs.svelte.d.ts +0 -26
  130. package/dist/ui/InputText/InputText.svelte +0 -116
  131. package/dist/ui/InputText/InputText.svelte.d.ts +0 -22
  132. package/dist/ui/InputText/index.d.ts +0 -1
  133. package/dist/ui/InputText/index.js +0 -1
  134. package/dist/ui/Panel/CollapsiblePanel.docs.svelte +0 -45
  135. package/dist/ui/Panel/CollapsiblePanel.docs.svelte.d.ts +0 -25
  136. package/dist/ui/Panel/CollapsiblePanel.svelte +0 -93
  137. package/dist/ui/Panel/CollapsiblePanel.svelte.d.ts +0 -14
  138. package/dist/ui/Panel/index.d.ts +0 -1
  139. package/dist/ui/Panel/index.js +0 -1
  140. package/dist/ui/Placeholder/Placeholder.docs.svelte +0 -49
  141. package/dist/ui/Placeholder/Placeholder.docs.svelte.d.ts +0 -26
  142. package/dist/ui/Placeholder/Placeholder.svelte +0 -99
  143. package/dist/ui/Placeholder/Placeholder.svelte.d.ts +0 -21
  144. package/dist/ui/Placeholder/index.d.ts +0 -1
  145. package/dist/ui/Placeholder/index.js +0 -1
  146. package/dist/ui/Radio/Radio.docs.svelte +0 -67
  147. package/dist/ui/Radio/Radio.docs.svelte.d.ts +0 -27
  148. package/dist/ui/Radio/Radio.svelte +0 -165
  149. package/dist/ui/Radio/Radio.svelte.d.ts +0 -22
  150. package/dist/ui/Radio/RadioGroup.docs.svelte +0 -70
  151. package/dist/ui/Radio/RadioGroup.docs.svelte.d.ts +0 -27
  152. package/dist/ui/Radio/RadioGroup.svelte +0 -98
  153. package/dist/ui/Radio/RadioGroup.svelte.d.ts +0 -27
  154. package/dist/ui/Radio/index.d.ts +0 -2
  155. package/dist/ui/Radio/index.js +0 -2
  156. package/dist/ui/SegmentControl/SegmentControl.docs.svelte +0 -54
  157. package/dist/ui/SegmentControl/SegmentControl.docs.svelte.d.ts +0 -25
  158. package/dist/ui/SegmentControl/SegmentControl.svelte +0 -120
  159. package/dist/ui/SegmentControl/SegmentControl.svelte.d.ts +0 -18
  160. package/dist/ui/SegmentControl/index.d.ts +0 -1
  161. package/dist/ui/SegmentControl/index.js +0 -1
  162. package/dist/ui/Stack/Stack.docs.svelte +0 -63
  163. package/dist/ui/Stack/Stack.docs.svelte.d.ts +0 -26
  164. package/dist/ui/Stack/Stack.svelte +0 -45
  165. package/dist/ui/Stack/Stack.svelte.d.ts +0 -19
  166. package/dist/ui/Stack/index.d.ts +0 -1
  167. package/dist/ui/Stack/index.js +0 -1
  168. package/dist/ui/Table/Body.svelte +0 -17
  169. package/dist/ui/Table/Body.svelte.d.ts +0 -11
  170. package/dist/ui/Table/Caption.svelte +0 -17
  171. package/dist/ui/Table/Caption.svelte.d.ts +0 -11
  172. package/dist/ui/Table/Cell.svelte +0 -24
  173. package/dist/ui/Table/Cell.svelte.d.ts +0 -15
  174. package/dist/ui/Table/Foot.svelte +0 -17
  175. package/dist/ui/Table/Foot.svelte.d.ts +0 -11
  176. package/dist/ui/Table/Head.svelte +0 -17
  177. package/dist/ui/Table/Head.svelte.d.ts +0 -11
  178. package/dist/ui/Table/Header.svelte +0 -27
  179. package/dist/ui/Table/Header.svelte.d.ts +0 -17
  180. package/dist/ui/Table/Row.svelte +0 -19
  181. package/dist/ui/Table/Row.svelte.d.ts +0 -13
  182. package/dist/ui/Table/Table.docs.svelte +0 -197
  183. package/dist/ui/Table/Table.docs.svelte.d.ts +0 -28
  184. package/dist/ui/Table/Table.svelte +0 -140
  185. package/dist/ui/Table/Table.svelte.d.ts +0 -27
  186. package/dist/ui/Table/index.js +0 -10
  187. package/dist/ui/css/colors.css +0 -377
  188. package/dist/ui/css/global.css +0 -10
  189. package/dist/ui/index.d.ts +0 -12
  190. package/dist/ui/index.js +0 -12
  191. package/dist/virtual-sdocs.d.ts +0 -20
  192. package/dist/vite-plugin.d.ts +0 -18
  193. package/dist/vite-plugin.js +0 -206
  194. /package/dist/{cli/index.d.ts → cli.d.ts} +0 -0
@@ -0,0 +1,92 @@
1
+ <script lang="ts">
2
+ import type { DocEntry } from '../types.js';
3
+
4
+ interface Props {
5
+ docs: DocEntry[];
6
+ logo: string;
7
+ }
8
+
9
+ let { docs, logo }: Props = $props();
10
+
11
+ const componentCount = $derived(docs.filter((d) => d.kind === 'component').length);
12
+ const pageCount = $derived(docs.filter((d) => d.kind === 'page').length);
13
+ const layoutCount = $derived(docs.filter((d) => d.kind === 'layout').length);
14
+ </script>
15
+
16
+ <div class="sdocs-home">
17
+ <div class="sdocs-home-brand">
18
+ <h1 class="sdocs-home-logo">{logo}</h1>
19
+ <p class="sdocs-home-tagline">A lightweight documentation tool for Svelte 5 components.</p>
20
+ </div>
21
+
22
+ <div class="sdocs-home-stats">
23
+ {#if componentCount > 0}
24
+ <div class="sdocs-stat">
25
+ <span class="sdocs-stat-value">{componentCount}</span>
26
+ <span class="sdocs-stat-label">{componentCount === 1 ? 'Component' : 'Components'}</span>
27
+ </div>
28
+ {/if}
29
+ {#if pageCount > 0}
30
+ <div class="sdocs-stat">
31
+ <span class="sdocs-stat-value">{pageCount}</span>
32
+ <span class="sdocs-stat-label">{pageCount === 1 ? 'Page' : 'Pages'}</span>
33
+ </div>
34
+ {/if}
35
+ {#if layoutCount > 0}
36
+ <div class="sdocs-stat">
37
+ <span class="sdocs-stat-value">{layoutCount}</span>
38
+ <span class="sdocs-stat-label">{layoutCount === 1 ? 'Layout' : 'Layouts'}</span>
39
+ </div>
40
+ {/if}
41
+ </div>
42
+
43
+ <p class="sdocs-home-hint">Select a component or page from the sidebar to get started.</p>
44
+ </div>
45
+
46
+ <style>
47
+ .sdocs-home {
48
+ display: flex;
49
+ flex-direction: column;
50
+ align-items: center;
51
+ justify-content: center;
52
+ height: 100%;
53
+ min-height: 400px;
54
+ gap: 32px;
55
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
56
+ }
57
+ .sdocs-home-brand {
58
+ text-align: center;
59
+ }
60
+ .sdocs-home-logo {
61
+ font-size: 36px;
62
+ font-weight: 800;
63
+ color: var(--sdocs-text-heading);
64
+ margin: 0;
65
+ }
66
+ .sdocs-home-tagline {
67
+ font-size: 16px;
68
+ color: var(--sdocs-text-secondary);
69
+ margin: 8px 0 0;
70
+ }
71
+ .sdocs-home-stats {
72
+ display: flex;
73
+ gap: 32px;
74
+ }
75
+ .sdocs-stat {
76
+ text-align: center;
77
+ }
78
+ .sdocs-stat-value {
79
+ display: block;
80
+ font-size: 28px;
81
+ font-weight: 700;
82
+ color: var(--sdocs-primary);
83
+ }
84
+ .sdocs-stat-label {
85
+ font-size: 13px;
86
+ color: var(--sdocs-text-muted);
87
+ }
88
+ .sdocs-home-hint {
89
+ font-size: 14px;
90
+ color: var(--sdocs-text-muted);
91
+ }
92
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { DocEntry } from '../types.js';
2
+ interface Props {
3
+ docs: DocEntry[];
4
+ logo: string;
5
+ }
6
+ declare const HomePage: import("svelte").Component<Props, {}, "">;
7
+ type HomePage = ReturnType<typeof HomePage>;
8
+ export default HomePage;
@@ -0,0 +1,27 @@
1
+ <script lang="ts">
2
+ import type { DocEntry } from '../types.js';
3
+ import PreviewFrame from './PreviewFrame.svelte';
4
+
5
+ interface Props {
6
+ doc: DocEntry;
7
+ activeStylesheet?: string;
8
+ }
9
+
10
+ let { doc, activeStylesheet }: Props = $props();
11
+
12
+ const contentSnippet = $derived(doc.snippets?.[0]);
13
+ </script>
14
+
15
+ <div class="sdocs-layout-view">
16
+ {#if contentSnippet}
17
+ <PreviewFrame src={contentSnippet.previewUrl} {activeStylesheet} fullHeight />
18
+ {/if}
19
+ </div>
20
+
21
+ <style>
22
+ .sdocs-layout-view {
23
+ height: 100%;
24
+ display: flex;
25
+ flex-direction: column;
26
+ }
27
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { DocEntry } from '../types.js';
2
+ interface Props {
3
+ doc: DocEntry;
4
+ activeStylesheet?: string;
5
+ }
6
+ declare const LayoutView: import("svelte").Component<Props, {}, "">;
7
+ type LayoutView = ReturnType<typeof LayoutView>;
8
+ export default LayoutView;
@@ -0,0 +1,130 @@
1
+ <script lang="ts">
2
+ import type { DocEntry } from '../types.js';
3
+ import PreviewFrame from './PreviewFrame.svelte';
4
+
5
+ interface Props {
6
+ doc: DocEntry;
7
+ activeStylesheet?: string;
8
+ }
9
+
10
+ let { doc, activeStylesheet }: Props = $props();
11
+
12
+ const meta = $derived(doc.meta);
13
+ const contentSnippet = $derived(doc.snippets?.[0]);
14
+ const toc = $derived(doc.toc ?? []);
15
+
16
+ function scrollToHeading(id: string) {
17
+ const iframe = document.querySelector('.sdocs-page-content .sdocs-iframe') as HTMLIFrameElement;
18
+ if (iframe?.contentWindow) {
19
+ iframe.contentWindow.postMessage({ type: 'sdocs:scroll-to', id }, '*');
20
+ }
21
+ }
22
+ </script>
23
+
24
+ <div class="sdocs-page-view">
25
+ <div class="sdocs-page-main">
26
+ <!-- Header -->
27
+ <div class="sdocs-view-header">
28
+ <h1 class="sdocs-view-title">{meta.title}</h1>
29
+ {#if meta.description}
30
+ <p class="sdocs-view-description">{meta.description}</p>
31
+ {/if}
32
+ </div>
33
+
34
+ <!-- Content -->
35
+ {#if contentSnippet}
36
+ <div class="sdocs-page-content">
37
+ <PreviewFrame src={contentSnippet.previewUrl} {activeStylesheet} />
38
+ </div>
39
+ {/if}
40
+ </div>
41
+
42
+ <!-- Table of Contents -->
43
+ {#if toc.length > 0}
44
+ <aside class="sdocs-toc">
45
+ <h3 class="sdocs-toc-title">On this page</h3>
46
+ <nav>
47
+ <ul class="sdocs-toc-list">
48
+ {#each toc as heading (heading.id)}
49
+ <li class="sdocs-toc-item" style:padding-left="{(heading.level - 2) * 12}px">
50
+ <button
51
+ class="sdocs-toc-link"
52
+ onclick={() => scrollToHeading(heading.id)}
53
+ >
54
+ {heading.text}
55
+ </button>
56
+ </li>
57
+ {/each}
58
+ </ul>
59
+ </nav>
60
+ </aside>
61
+ {/if}
62
+ </div>
63
+
64
+ <style>
65
+ .sdocs-page-view {
66
+ display: flex;
67
+ gap: 24px;
68
+ padding: 24px 32px;
69
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
70
+ }
71
+ .sdocs-page-main {
72
+ flex: 1;
73
+ min-width: 0;
74
+ }
75
+ .sdocs-view-header {
76
+ margin-bottom: 24px;
77
+ }
78
+ .sdocs-view-title {
79
+ font-size: 24px;
80
+ font-weight: 700;
81
+ color: var(--sdocs-text-heading);
82
+ margin: 0;
83
+ }
84
+ .sdocs-view-description {
85
+ font-size: 14px;
86
+ color: var(--sdocs-text-secondary);
87
+ margin: 6px 0 0;
88
+ }
89
+ .sdocs-page-content {
90
+ flex: 1;
91
+ }
92
+ .sdocs-toc {
93
+ width: 200px;
94
+ flex-shrink: 0;
95
+ position: sticky;
96
+ top: 24px;
97
+ align-self: flex-start;
98
+ }
99
+ .sdocs-toc-title {
100
+ font-size: 12px;
101
+ font-weight: 600;
102
+ text-transform: uppercase;
103
+ letter-spacing: 0.05em;
104
+ color: var(--sdocs-text-muted);
105
+ margin: 0 0 8px;
106
+ }
107
+ .sdocs-toc-list {
108
+ list-style: none;
109
+ padding: 0;
110
+ margin: 0;
111
+ }
112
+ .sdocs-toc-item {
113
+ margin: 0;
114
+ }
115
+ .sdocs-toc-link {
116
+ display: block;
117
+ padding: 4px 0;
118
+ font-size: 13px;
119
+ color: var(--sdocs-text-secondary);
120
+ text-decoration: none;
121
+ background: none;
122
+ border: none;
123
+ cursor: pointer;
124
+ text-align: left;
125
+ width: 100%;
126
+ }
127
+ .sdocs-toc-link:hover {
128
+ color: var(--sdocs-primary);
129
+ }
130
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { DocEntry } from '../types.js';
2
+ interface Props {
3
+ doc: DocEntry;
4
+ activeStylesheet?: string;
5
+ }
6
+ declare const PageView: import("svelte").Component<Props, {}, "">;
7
+ type PageView = ReturnType<typeof PageView>;
8
+ export default PageView;
@@ -0,0 +1,100 @@
1
+ <script lang="ts">
2
+ import { onMount, untrack } from 'svelte';
3
+
4
+ interface Props {
5
+ src: string;
6
+ props?: Record<string, unknown>;
7
+ cssVars?: Record<string, string>;
8
+ activeStylesheet?: string;
9
+ fullHeight?: boolean;
10
+ }
11
+
12
+ let { src, props = {}, cssVars = {}, activeStylesheet, fullHeight = false }: Props = $props();
13
+ let iframe: HTMLIFrameElement;
14
+ let ready = $state(false);
15
+
16
+ onMount(() => {
17
+ function onMessage(e: MessageEvent) {
18
+ if (e.data?.type === 'sdocs:preview-ready') {
19
+ ready = true;
20
+ sendProps();
21
+ sendCss();
22
+ sendStylesheet();
23
+ }
24
+ }
25
+ window.addEventListener('message', onMessage);
26
+ return () => window.removeEventListener('message', onMessage);
27
+ });
28
+
29
+ function sendProps() {
30
+ if (ready && iframe?.contentWindow) {
31
+ // Snapshot to strip $state proxy before postMessage (DataCloneError)
32
+ const data = $state.snapshot(props);
33
+ iframe.contentWindow.postMessage({ type: 'sdocs:update-props', props: data }, '*');
34
+ }
35
+ }
36
+
37
+ function sendCss() {
38
+ if (ready && iframe?.contentWindow) {
39
+ const data = $state.snapshot(cssVars);
40
+ iframe.contentWindow.postMessage({ type: 'sdocs:update-css', vars: data }, '*');
41
+ }
42
+ }
43
+
44
+ function sendStylesheet() {
45
+ if (ready && iframe?.contentWindow && activeStylesheet) {
46
+ iframe.contentWindow.postMessage({ type: 'sdocs:update-stylesheet', name: activeStylesheet }, '*');
47
+ }
48
+ }
49
+
50
+ $effect(() => {
51
+ // Track props changes, send without re-tracking inside send
52
+ JSON.stringify(props);
53
+ untrack(() => sendProps());
54
+ });
55
+
56
+ $effect(() => {
57
+ // Track cssVars changes
58
+ JSON.stringify(cssVars);
59
+ untrack(() => sendCss());
60
+ });
61
+
62
+ $effect(() => {
63
+ // Track stylesheet changes
64
+ activeStylesheet;
65
+ untrack(() => sendStylesheet());
66
+ });
67
+ </script>
68
+
69
+ <div class="sdocs-preview-frame" class:full-height={fullHeight}>
70
+ <iframe
71
+ bind:this={iframe}
72
+ {src}
73
+ title="Component preview"
74
+ class="sdocs-iframe"
75
+ ></iframe>
76
+ </div>
77
+
78
+ <style>
79
+ .sdocs-preview-frame {
80
+ border: 1px solid var(--sdocs-border);
81
+ border-radius: 6px;
82
+ overflow: hidden;
83
+ background: var(--sdocs-bg);
84
+ }
85
+ .sdocs-preview-frame.full-height {
86
+ flex: 1;
87
+ border: none;
88
+ border-radius: 0;
89
+ }
90
+ .sdocs-iframe {
91
+ width: 100%;
92
+ min-height: 120px;
93
+ border: none;
94
+ display: block;
95
+ }
96
+ .full-height .sdocs-iframe {
97
+ height: 100%;
98
+ min-height: 0;
99
+ }
100
+ </style>
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ src: string;
3
+ props?: Record<string, unknown>;
4
+ cssVars?: Record<string, string>;
5
+ activeStylesheet?: string;
6
+ fullHeight?: boolean;
7
+ }
8
+ declare const PreviewFrame: import("svelte").Component<Props, {}, "">;
9
+ type PreviewFrame = ReturnType<typeof PreviewFrame>;
10
+ export default PreviewFrame;