@clidey/dory 1.0.8 → 1.10.0

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 (210) hide show
  1. package/README.md +59 -164
  2. package/bin/chat-server.ts +270 -0
  3. package/bin/dist/analytics-server.d.ts +11 -0
  4. package/bin/dist/analytics-server.d.ts.map +1 -0
  5. package/bin/dist/analytics-server.js +121 -0
  6. package/bin/dist/analytics-server.js.map +1 -0
  7. package/bin/dist/automation.d.ts +35 -0
  8. package/bin/dist/automation.d.ts.map +1 -0
  9. package/bin/dist/automation.js +259 -0
  10. package/bin/dist/automation.js.map +1 -0
  11. package/bin/dist/chat-server.d.ts +8 -0
  12. package/bin/dist/chat-server.d.ts.map +1 -0
  13. package/bin/dist/chat-server.js +322 -0
  14. package/bin/dist/chat-server.js.map +1 -0
  15. package/bin/dist/check.d.ts +16 -0
  16. package/bin/dist/check.d.ts.map +1 -0
  17. package/bin/dist/check.js +247 -0
  18. package/bin/dist/check.js.map +1 -0
  19. package/bin/dist/dependency-overlay.d.ts +7 -0
  20. package/bin/dist/dependency-overlay.d.ts.map +1 -0
  21. package/bin/dist/dependency-overlay.js +137 -0
  22. package/bin/dist/dependency-overlay.js.map +1 -0
  23. package/bin/dist/dory.js +254 -402
  24. package/bin/dist/dory.js.map +1 -1
  25. package/bin/dist/i18n-init.d.ts +6 -0
  26. package/bin/dist/i18n-init.d.ts.map +1 -0
  27. package/bin/dist/i18n-init.js +56 -0
  28. package/bin/dist/i18n-init.js.map +1 -0
  29. package/bin/dist/mcp-http.d.ts +8 -0
  30. package/bin/dist/mcp-http.d.ts.map +1 -0
  31. package/bin/dist/mcp-http.js +72 -0
  32. package/bin/dist/mcp-http.js.map +1 -0
  33. package/bin/dist/mcp.d.ts +2 -0
  34. package/bin/dist/mcp.d.ts.map +1 -0
  35. package/bin/dist/mcp.js +81 -0
  36. package/bin/dist/mcp.js.map +1 -0
  37. package/bin/dist/preview-entry.d.ts +2 -0
  38. package/bin/dist/preview-entry.d.ts.map +1 -0
  39. package/bin/dist/preview-entry.js +6 -0
  40. package/bin/dist/preview-entry.js.map +1 -0
  41. package/bin/dist/preview-server.d.ts +5 -0
  42. package/bin/dist/preview-server.d.ts.map +1 -0
  43. package/bin/dist/preview-server.js +146 -0
  44. package/bin/dist/preview-server.js.map +1 -0
  45. package/bin/dist/preview-static.d.ts +7 -0
  46. package/bin/dist/preview-static.d.ts.map +1 -0
  47. package/bin/dist/preview-static.js +70 -0
  48. package/bin/dist/preview-static.js.map +1 -0
  49. package/bin/dist/project-config.d.ts +22 -0
  50. package/bin/dist/project-config.d.ts.map +1 -0
  51. package/bin/dist/project-config.js +44 -0
  52. package/bin/dist/project-config.js.map +1 -0
  53. package/dist/index.html +57 -0
  54. package/dist/runtime/dory-runtime.css +2 -0
  55. package/dist/runtime/dory-runtime.html +14 -0
  56. package/dist/runtime/dory-runtime.js +5490 -0
  57. package/docs/api-playground-demo.mdx +119 -0
  58. package/docs/api-reference/asyncapi.json +324 -0
  59. package/docs/api-reference/openapi.json +366 -0
  60. package/docs/api-reference/operations/create.mdx +5 -0
  61. package/docs/api-reference/operations/delete.mdx +5 -0
  62. package/docs/api-reference/operations/get.mdx +5 -0
  63. package/docs/api-reference/operations/update.mdx +5 -0
  64. package/docs/api-reference/websocket-operations/receive-chat-message.mdx +5 -0
  65. package/docs/api-reference/websocket-operations/receive-notifications.mdx +5 -0
  66. package/docs/api-reference/websocket-operations/receive-presence-update.mdx +5 -0
  67. package/docs/api-reference/websocket-operations/send-chat-message.mdx +5 -0
  68. package/docs/api-reference/websocket-operations/send-presence-update.mdx +5 -0
  69. package/docs/assets/dory.jpeg +0 -0
  70. package/docs/components/accordion.mdx +145 -0
  71. package/docs/components/callouts.mdx +134 -0
  72. package/docs/components/cards.mdx +153 -0
  73. package/docs/components/code-blocks.mdx +281 -0
  74. package/docs/components/expandable.mdx +189 -0
  75. package/docs/components/icons.mdx +71 -0
  76. package/docs/components/images.mdx +82 -0
  77. package/docs/components/latex.mdx +148 -0
  78. package/docs/components/layout.mdx +178 -0
  79. package/docs/components/lists.mdx +134 -0
  80. package/docs/components/mermaid.mdx +149 -0
  81. package/docs/components/overview.mdx +81 -0
  82. package/docs/components/source.mdx +130 -0
  83. package/docs/components/steps.mdx +122 -0
  84. package/docs/components/tables.mdx +114 -0
  85. package/docs/components/tags.mdx +179 -0
  86. package/docs/components/typography.mdx +185 -0
  87. package/docs/configuration/analytics.mdx +45 -0
  88. package/docs/configuration/chat.mdx +59 -0
  89. package/docs/configuration/dory-json.mdx +278 -0
  90. package/docs/configuration/embed.mdx +73 -0
  91. package/docs/configuration/fonts.mdx +86 -0
  92. package/docs/configuration/internationalization.mdx +61 -0
  93. package/docs/configuration/navigation.mdx +217 -0
  94. package/docs/configuration/theming.mdx +166 -0
  95. package/docs/contributing.mdx +47 -0
  96. package/docs/dory.json +136 -0
  97. package/docs/embed-example.html +176 -0
  98. package/docs/favicon.svg +18 -0
  99. package/docs/features.mdx +440 -0
  100. package/docs/getting-started/automation.mdx +76 -0
  101. package/docs/getting-started/configuration.mdx +95 -0
  102. package/docs/getting-started/custom-components.mdx +60 -0
  103. package/docs/getting-started/installation.mdx +88 -0
  104. package/docs/getting-started/quick-start.mdx +53 -0
  105. package/docs/introduction.mdx +50 -0
  106. package/docs/logo/logo.svg +18 -0
  107. package/docs/playgrounds/api-playground.mdx +122 -0
  108. package/docs/playgrounds/websocket-playground.mdx +98 -0
  109. package/docs/social-card.png +0 -0
  110. package/docs/social-card.svg +17 -0
  111. package/docs/websocket-playground-demo.mdx +135 -0
  112. package/package.json +23 -17
  113. package/scripts/verify-component-examples.mjs +126 -0
  114. package/scripts/verify-runtime-parity.mjs +147 -0
  115. package/src/app.css +22 -1
  116. package/src/assets/fonts/HankenGrotesk.ttf +0 -0
  117. package/src/assets/fonts/OFL.txt +94 -0
  118. package/src/components/chat-assistant.tsx +229 -0
  119. package/src/components/dropdown.tsx +3 -3
  120. package/src/components/error-boundary.tsx +2 -2
  121. package/src/components/hooks.tsx +20 -1
  122. package/src/components/navigation.tsx +82 -51
  123. package/src/components/notification.tsx +2 -3
  124. package/src/components/routes.tsx +17 -19
  125. package/src/components/search-index.test.ts +15 -0
  126. package/src/components/search-index.ts +49 -48
  127. package/src/components/search.tsx +208 -104
  128. package/src/components/store.ts +27 -9
  129. package/src/config/mdx-common.ts +11 -0
  130. package/src/config/mdx.ts +10 -11
  131. package/src/embed/loader.ts +0 -3
  132. package/src/embed/types.ts +0 -2
  133. package/src/embed/widget-iframe.ts +19 -21
  134. package/src/embedded-runtime/config.ts +138 -0
  135. package/src/embedded-runtime/index.tsx +680 -0
  136. package/src/embedded-runtime/runtime.html +14 -0
  137. package/src/entry-server.tsx +46 -124
  138. package/src/main.tsx +17 -5
  139. package/src/mdx/accordion.tsx +3 -3
  140. package/src/mdx/api-playground.tsx +18 -16
  141. package/src/mdx/async-api.tsx +2 -2
  142. package/src/mdx/card.tsx +3 -2
  143. package/src/mdx/code.tsx +11 -9
  144. package/src/mdx/fence.tsx +6 -5
  145. package/src/mdx/icon-grid.tsx +4 -1
  146. package/src/mdx/icon-names.test.ts +15 -0
  147. package/src/mdx/icon-names.ts +60 -0
  148. package/src/mdx/icon-source-variants.ts +102 -0
  149. package/src/mdx/icon.tsx +12 -73
  150. package/src/mdx/latex.test.ts +38 -0
  151. package/src/mdx/latex.tsx +42 -64
  152. package/src/mdx/mdx.tsx +1 -1
  153. package/src/mdx/mermaid.tsx +12 -6
  154. package/src/mdx/open-api.tsx +130 -74
  155. package/src/mdx/preprocess.test.ts +16 -0
  156. package/src/mdx/preprocess.ts +61 -0
  157. package/src/mdx/processor.test.ts +135 -37
  158. package/src/mdx/processor.ts +54 -92
  159. package/src/mdx/source.tsx +5 -4
  160. package/src/mdx/specimen.tsx +57 -43
  161. package/src/mdx/tabs.tsx +32 -21
  162. package/src/mdx/text.tsx +11 -11
  163. package/src/mdx/try-it-panel.tsx +284 -0
  164. package/src/mdx/type-scale.tsx +7 -7
  165. package/src/mdx/websocket-playground.tsx +21 -14
  166. package/src/plugins/analytics-injector.ts +8 -0
  167. package/src/plugins/chat-dev-server.ts +32 -0
  168. package/src/plugins/docs-assets.test.ts +25 -0
  169. package/src/plugins/docs-assets.ts +6 -2
  170. package/src/plugins/frontmatter-dev-server.ts +2 -2
  171. package/src/plugins/frontmatter-generator.ts +1 -1
  172. package/src/plugins/html-files-middleware.test.ts +21 -1
  173. package/src/plugins/html-files-middleware.ts +26 -6
  174. package/src/plugins/html-metadata-injector.ts +24 -4
  175. package/src/plugins/llm-txt-dev-server.ts +2 -2
  176. package/src/plugins/llm-txt-generator.ts +21 -4
  177. package/src/plugins/prerender.ts +47 -20
  178. package/src/plugins/robots-generator.ts +1 -1
  179. package/src/plugins/sanitize.ts +6 -5
  180. package/src/plugins/shared.ts +6 -18
  181. package/src/plugins/sitemap-generator.ts +1 -1
  182. package/src/plugins/social-preview.test.ts +71 -0
  183. package/src/plugins/social-preview.ts +87 -0
  184. package/src/plugins/unified-mdx-plugin.ts +1 -1
  185. package/src/theme.scss +630 -207
  186. package/src/types/config.ts +53 -1
  187. package/src/ui/breadcrumb.tsx +17 -0
  188. package/src/ui/docs-header-view.tsx +32 -0
  189. package/src/ui/docs-navigation-view.tsx +69 -0
  190. package/src/ui/docs-page-frame.tsx +50 -0
  191. package/src/ui/dory-mark.tsx +9 -0
  192. package/src/ui/header.tsx +33 -90
  193. package/src/ui/layout.tsx +99 -153
  194. package/src/ui/mobile-navigation.tsx +10 -8
  195. package/src/ui/page-actions.tsx +67 -0
  196. package/src/ui/page-feedback.tsx +50 -0
  197. package/src/ui/page-footer.tsx +23 -0
  198. package/src/ui/prev-next-link.tsx +15 -69
  199. package/src/ui/prev-next-view.tsx +27 -0
  200. package/src/ui/table-of-content-view.tsx +167 -0
  201. package/src/ui/table-of-content.tsx +25 -183
  202. package/src/utils/analytics.test.ts +36 -0
  203. package/src/utils/analytics.ts +35 -0
  204. package/src/utils/colors.ts +7 -0
  205. package/src/utils/content-scope.test.ts +26 -0
  206. package/src/utils/content-scope.ts +39 -0
  207. package/src/utils/search-content.ts +12 -0
  208. package/src/utils/theme.ts +1 -7
  209. package/vite.config.ssr.ts +4 -4
  210. package/vite.config.ts +22 -16
@@ -0,0 +1,217 @@
1
+ ---
2
+ title: 'Navigation'
3
+ description: 'Configure the sidebar navigation using tabs, groups, and pages in dory.json.'
4
+ ---
5
+
6
+ # Navigation
7
+
8
+ The `navigation` object in `dory.json` defines the sidebar structure. Navigation is organized into three levels: **tabs**, **groups**, and **pages**.
9
+
10
+ ## Structure
11
+
12
+ ```json
13
+ "navigation": {
14
+ "tabs": [
15
+ {
16
+ "tab": "Documentation",
17
+ "groups": [
18
+ {
19
+ "group": "Getting Started",
20
+ "pages": [
21
+ "introduction",
22
+ "installation",
23
+ "quick-start"
24
+ ]
25
+ },
26
+ {
27
+ "group": "Components",
28
+ "pages": [
29
+ "components/overview",
30
+ "components/code-blocks"
31
+ ]
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "tab": "API Reference",
37
+ "groups": [
38
+ {
39
+ "group": "Endpoints",
40
+ "pages": [
41
+ "api/users",
42
+ "api/workspaces"
43
+ ]
44
+ }
45
+ ]
46
+ }
47
+ ]
48
+ }
49
+ ```
50
+
51
+ ## Tabs
52
+
53
+ Tabs appear at the top of the sidebar. Use multiple tabs to separate major sections of your documentation.
54
+
55
+ ```json
56
+ {
57
+ "tab": "Documentation",
58
+ "groups": [...]
59
+ }
60
+ ```
61
+
62
+ | Field | Type | Description |
63
+ | --- | --- | --- |
64
+ | `tab` | `string` | Tab label shown in the sidebar header. |
65
+ | `groups` | `Group[]` | Navigation groups within this tab. |
66
+
67
+ ## Groups
68
+
69
+ Groups are collapsible sections within a tab. They appear as labeled sections in the sidebar.
70
+
71
+ ```json
72
+ {
73
+ "group": "Getting Started",
74
+ "pages": ["introduction", "installation"]
75
+ }
76
+ ```
77
+
78
+ | Field | Type | Description |
79
+ | --- | --- | --- |
80
+ | `group` | `string` | Group label. |
81
+ | `pages` | `string[]` | List of page paths within the group. |
82
+
83
+ ## Pages
84
+
85
+ Pages are references to MDX files. Use paths **relative to the docs directory root**, without the `.mdx` extension.
86
+
87
+ ```json
88
+ "pages": [
89
+ "introduction",
90
+ "getting-started/installation",
91
+ "components/code-blocks"
92
+ ]
93
+ ```
94
+
95
+ A path like `"components/code-blocks"` maps to `docs/components/code-blocks.mdx`.
96
+
97
+ <Note>
98
+ Page paths are case-sensitive and must exactly match the filename (without `.mdx`). Use lowercase with hyphens for consistency.
99
+ </Note>
100
+
101
+ ## Single-Tab Setup
102
+
103
+ For smaller documentation sites, one tab is enough:
104
+
105
+ ```json
106
+ "navigation": {
107
+ "tabs": [
108
+ {
109
+ "tab": "Docs",
110
+ "groups": [
111
+ {
112
+ "group": "Overview",
113
+ "pages": ["introduction"]
114
+ },
115
+ {
116
+ "group": "Guides",
117
+ "pages": ["guides/setup", "guides/deployment"]
118
+ }
119
+ ]
120
+ }
121
+ ]
122
+ }
123
+ ```
124
+
125
+ ## Multi-Tab Setup
126
+
127
+ Separate documentation types with multiple tabs:
128
+
129
+ ```json
130
+ "navigation": {
131
+ "tabs": [
132
+ {
133
+ "tab": "Guides",
134
+ "groups": [
135
+ {
136
+ "group": "Getting Started",
137
+ "pages": ["introduction", "installation"]
138
+ }
139
+ ]
140
+ },
141
+ {
142
+ "tab": "API Reference",
143
+ "groups": [
144
+ {
145
+ "group": "Users",
146
+ "pages": ["api/create-user", "api/get-user", "api/delete-user"]
147
+ }
148
+ ]
149
+ },
150
+ {
151
+ "tab": "SDKs",
152
+ "groups": [
153
+ {
154
+ "group": "Client Libraries",
155
+ "pages": ["sdks/javascript", "sdks/python", "sdks/go"]
156
+ }
157
+ ]
158
+ }
159
+ ]
160
+ }
161
+ ```
162
+
163
+ ## Sidebar Extras
164
+
165
+ Set `version` in `dory.json` to show the version card at the top of the sidebar. A page entry can be an object with a `badge`, which renders as a small label after the page name.
166
+
167
+ ```json dory.json
168
+ {
169
+ "version": "1.0.8 · Latest",
170
+ "navigation": {
171
+ "tabs": [{
172
+ "tab": "Documentation",
173
+ "groups": [{
174
+ "group": "Writing Docs",
175
+ "pages": ["introduction", { "page": "components/overview", "badge": "New" }]
176
+ }]
177
+ }]
178
+ }
179
+ }
180
+ ```
181
+
182
+ API reference pages show their method in the sidebar automatically, taken from the page's `openapi` or `asyncapi` frontmatter.
183
+
184
+ ## Page Frontmatter
185
+
186
+ Each MDX page should include frontmatter with `title` and `description`. These are used for the page title, meta tags, and breadcrumbs:
187
+
188
+ ```mdx
189
+ ---
190
+ title: 'Installation'
191
+ description: 'Install and configure Dory for your project.'
192
+ ---
193
+
194
+ # Installation
195
+ ```
196
+
197
+ <Tip>
198
+ Keep `title` concise (2–5 words). The `description` is used for SEO meta tags and appears in search results, so make it a full sentence.
199
+ </Tip>
200
+
201
+ ### Lead Paragraph and Metadata Strip
202
+
203
+ Add a `lead` string to show a larger introductory paragraph directly under the page title. Add a `meta` map to show a row of labelled facts below it. Keys are the labels and values are shown as written. YAML dates such as `2026-10-12` render as `12 Oct 2026`.
204
+
205
+ ```mdx
206
+ ---
207
+ title: 'Introduction'
208
+ description: 'What Dory is and how to get started.'
209
+ lead: 'Dory turns MDX pages into a documentation site with navigation, search, and interactive components.'
210
+ meta:
211
+ License: MIT
212
+ Updated: 2026-10-12
213
+ Read: 4 min
214
+ ---
215
+ ```
216
+
217
+ Pages without `lead` or `meta` show neither.
@@ -0,0 +1,166 @@
1
+ ---
2
+ title: 'Theming'
3
+ description: 'Customize your documentation site colors, fonts, and appearance to match your brand.'
4
+ ---
5
+
6
+ # Theming
7
+
8
+ Dory uses the default Clidey Design theme from `@clidey/ux`. It provides the Paper and Ink surfaces, Signal Blue actions, and light and dark modes. Add `dory.json` overrides to match your product's visual identity.
9
+
10
+ ## Color Configuration
11
+
12
+ ### Brand Colors
13
+
14
+ ```json
15
+ "colors": {
16
+ "primary": "#6366f1",
17
+ "light": "#818cf8",
18
+ "dark": "#4f46e5"
19
+ }
20
+ ```
21
+
22
+ | Field | Description |
23
+ | --- | --- |
24
+ | `primary` | Base brand color. Applied to active navigation items, links, and accent elements. |
25
+ | `light` | Lighter shade. Used for hover states and accents in light mode. |
26
+ | `dark` | Darker shade. Used for hover states and accents in dark mode. |
27
+
28
+ ### Extended Colors
29
+
30
+ For deeper customization, you can control the entire page palette:
31
+
32
+ ```json
33
+ "colors": {
34
+ "primary": "#F1BF4F",
35
+ "light": "#F1BF4F",
36
+ "dark": "#F1BF4F",
37
+ "background": "#1a1a2e",
38
+ "surface": "#242440",
39
+ "surfaceElevated": "#2e2e4a",
40
+ "foreground": "#f5f5f7",
41
+ "mutedForeground": "#a0a0b0",
42
+ "border": "rgba(255, 255, 255, 0.1)",
43
+ "accent": "#60a5fa"
44
+ }
45
+ ```
46
+
47
+ | Field | Description |
48
+ | --- | --- |
49
+ | `background` | Page background color. |
50
+ | `surface` | Header and sidebar background. |
51
+ | `surfaceElevated` | Elevated card/panel backgrounds. |
52
+ | `foreground` | Primary text color. |
53
+ | `mutedForeground` | Secondary/muted text color. |
54
+ | `border` | Border and divider color. |
55
+ | `accent` | Secondary accent color for interactive elements. |
56
+
57
+ ## Theme Mode
58
+
59
+ Force your docs into dark or light mode regardless of the user's OS preference:
60
+
61
+ ```json
62
+ "theme": {
63
+ "mode": "dark",
64
+ "radius": "0.5rem"
65
+ }
66
+ ```
67
+
68
+ | Field | Description |
69
+ | --- | --- |
70
+ | `mode` | `"dark"`, `"light"`, or `"system"` (default). Forces a specific color scheme. |
71
+ | `radius` | Base border-radius value for UI elements. |
72
+
73
+ ## Typography
74
+
75
+ Control heading, body, and code fonts independently:
76
+
77
+ ```json
78
+ "fonts": {
79
+ "family": "Inter Tight",
80
+ "source": "https://fonts.gstatic.com/s/intertight/v7/...",
81
+ "format": "woff2",
82
+ "heading": {
83
+ "family": "Fraunces",
84
+ "source": "https://fonts.gstatic.com/s/fraunces/v31/...",
85
+ "format": "woff2",
86
+ "weight": "300 900"
87
+ },
88
+ "mono": {
89
+ "family": "JetBrains Mono",
90
+ "source": "https://fonts.gstatic.com/s/jetbrainsmono/v18/...",
91
+ "format": "woff2"
92
+ }
93
+ }
94
+ ```
95
+
96
+ | Field | Description |
97
+ | --- | --- |
98
+ | `family` / `source` / `format` | Body font (applied globally). |
99
+ | `heading` | Optional separate font for h1-h4 headings. |
100
+ | `mono` | Optional separate font for code blocks and inline code. |
101
+
102
+ <Tip>
103
+ Combine `theme.mode: "dark"` with custom `background` and `surface` colors to create a dark-themed documentation site that matches your product's look and feel.
104
+ </Tip>
105
+
106
+ ## Dark Mode
107
+
108
+ Dory automatically follows the user's OS/browser dark mode preference. No configuration required — it works out of the box.
109
+
110
+ The `light` and `dark` color fields let you fine-tune how your brand color appears on light and dark backgrounds respectively.
111
+
112
+ <Tip>
113
+ For best results: choose a `light` shade that's slightly lighter than `primary`, and a `dark` shade that's slightly darker. This ensures good contrast on both backgrounds.
114
+ </Tip>
115
+
116
+ ## Color Palettes
117
+
118
+ Some well-tested palettes:
119
+
120
+ <AccordionGroup>
121
+ <Accordion title="Indigo" icon="palette">
122
+ ```json
123
+ "colors": {
124
+ "primary": "#6366f1",
125
+ "light": "#818cf8",
126
+ "dark": "#4f46e5"
127
+ }
128
+ ```
129
+ </Accordion>
130
+ <Accordion title="Sky Blue" icon="palette">
131
+ ```json
132
+ "colors": {
133
+ "primary": "#0ea5e9",
134
+ "light": "#38bdf8",
135
+ "dark": "#0284c7"
136
+ }
137
+ ```
138
+ </Accordion>
139
+ <Accordion title="Emerald Green" icon="palette">
140
+ ```json
141
+ "colors": {
142
+ "primary": "#10b981",
143
+ "light": "#34d399",
144
+ "dark": "#059669"
145
+ }
146
+ ```
147
+ </Accordion>
148
+ <Accordion title="Rose" icon="palette">
149
+ ```json
150
+ "colors": {
151
+ "primary": "#f43f5e",
152
+ "light": "#fb7185",
153
+ "dark": "#e11d48"
154
+ }
155
+ ```
156
+ </Accordion>
157
+ <Accordion title="Violet" icon="palette">
158
+ ```json
159
+ "colors": {
160
+ "primary": "#8b5cf6",
161
+ "light": "#a78bfa",
162
+ "dark": "#7c3aed"
163
+ }
164
+ ```
165
+ </Accordion>
166
+ </AccordionGroup>
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: 'Contributing to Dory'
3
+ description: 'Develop Dory, review its own documentation, and understand the publishing workflow.'
4
+ ---
5
+
6
+ Dory's public README introduces the product. This guide covers work on the repository itself. To create a separate documentation site, use the [quick start](/getting-started/quick-start).
7
+
8
+ ## Run the repository
9
+
10
+ ```bash
11
+ git clone https://github.com/clidey/dory.git
12
+ cd dory
13
+ pnpm install --frozen-lockfile --ignore-scripts
14
+ pnpm dev
15
+ ```
16
+
17
+ Edit Dory's own pages under `docs/`. Keep dependency lifecycle scripts disabled and preserve the repository's dependency integrity and release-age policies.
18
+
19
+ ## Validate changes
20
+
21
+ ```bash
22
+ pnpm test
23
+ node --import tsx --test bin/dependency-overlay.test.mts bin/preview-static.test.mts
24
+ pnpm build
25
+ node bin/dist/dory.js check
26
+ node scripts/verify-component-examples.mjs
27
+ ```
28
+
29
+ The component browser check uses installed Chrome (or `DORY_CHROME_PATH`), measures preview padding and clipping, exercises tabs, and verifies math loading and failure states on desktop and mobile. It saves screenshots and a report under ignored `.dory/component-review/`; inspect these before publishing.
30
+
31
+ Review browser behavior in light and dark modes. For custom components, verify interactions and focus handling; compilation alone cannot do that.
32
+
33
+ ## Preview the production site
34
+
35
+ ```bash
36
+ pnpm preview --host 127.0.0.1 --port 3188 --strictPort
37
+ ```
38
+
39
+ Open `http://127.0.0.1:3188/dory/`. Review code and the exact generated site before pushing or publishing changes.
40
+
41
+ ## Publish this repository's docs
42
+
43
+ The documentation workflow validates pull requests and deploys main-branch documentation to `https://clidey.github.io/dory/`. Its canonical URL and path are configured in `docs/dory.json`; GitHub Pages uses GitHub Actions as the publishing source.
44
+
45
+ Publish only the generated `dist/` artifact. Static Pages hosting includes navigation and search. Documentation chat and HTTP MCP need a separately hosted Dory server; do not put server credentials into static assets.
46
+
47
+ Imported MDX and component modules are executable source. Review them, build untrusted contributions without secrets or deployment credentials, and deploy reviewed artifacts separately. See the repository security policy for the trust boundary.
package/docs/dory.json ADDED
@@ -0,0 +1,136 @@
1
+ {
2
+ "name": "Dory",
3
+ "url": "https://clidey.github.io",
4
+ "image": "/social-card.png",
5
+ "version": "1.10.0 \u00b7 Latest",
6
+ "copyright": "Clidey",
7
+ "repository": {
8
+ "url": "https://github.com/clidey/dory",
9
+ "branch": "main",
10
+ "path": "docs"
11
+ },
12
+ "description": "Static documentation site generator for modern teams. Build beautiful docs from MDX files.",
13
+ "seo": {
14
+ "titleTemplate": "%s \u2014 Dory"
15
+ },
16
+ "favicon": "./favicon.svg",
17
+ "fonts": {
18
+ "family": "Hanken Grotesk",
19
+ "heading": {
20
+ "family": "Bricolage Grotesque"
21
+ },
22
+ "mono": {
23
+ "family": "JetBrains Mono"
24
+ }
25
+ },
26
+ "logo": {
27
+ "light": "./logo/logo.svg",
28
+ "dark": "./logo/logo.svg"
29
+ },
30
+ "navigation": {
31
+ "tabs": [
32
+ {
33
+ "tab": "Guides",
34
+ "groups": [
35
+ {
36
+ "group": "Getting Started",
37
+ "pages": [
38
+ "introduction",
39
+ "getting-started/installation",
40
+ "getting-started/quick-start",
41
+ "getting-started/automation",
42
+ "getting-started/configuration",
43
+ "getting-started/custom-components"
44
+ ]
45
+ },
46
+ {
47
+ "group": "Configuration",
48
+ "pages": [
49
+ "configuration/dory-json",
50
+ "configuration/navigation",
51
+ "configuration/theming",
52
+ "configuration/fonts",
53
+ "configuration/analytics",
54
+ "configuration/chat",
55
+ "configuration/internationalization",
56
+ "configuration/embed"
57
+ ]
58
+ },
59
+ {
60
+ "group": "Contribute",
61
+ "pages": [
62
+ "contributing"
63
+ ]
64
+ }
65
+ ]
66
+ },
67
+ {
68
+ "tab": "Components",
69
+ "groups": [
70
+ {
71
+ "group": "Components",
72
+ "pages": [
73
+ {
74
+ "page": "components/overview",
75
+ "badge": "New"
76
+ },
77
+ "components/typography",
78
+ "components/code-blocks",
79
+ "components/callouts",
80
+ "components/cards",
81
+ "components/accordion",
82
+ "components/expandable",
83
+ "components/steps",
84
+ "components/tables",
85
+ "components/lists",
86
+ "components/icons",
87
+ "components/tags",
88
+ "components/images",
89
+ "components/layout",
90
+ "components/source",
91
+ "components/mermaid",
92
+ "components/latex"
93
+ ]
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ "tab": "API reference",
99
+ "groups": [
100
+ {
101
+ "group": "API Reference",
102
+ "pages": [
103
+ "api-reference/operations/get",
104
+ "api-reference/operations/create",
105
+ "api-reference/operations/update",
106
+ "api-reference/operations/delete"
107
+ ]
108
+ },
109
+ {
110
+ "group": "Interactive Playgrounds",
111
+ "pages": [
112
+ "playgrounds/api-playground",
113
+ "playgrounds/websocket-playground"
114
+ ]
115
+ }
116
+ ]
117
+ },
118
+ {
119
+ "tab": "Realtime",
120
+ "groups": [
121
+ {
122
+ "group": "Realtime",
123
+ "pages": [
124
+ "api-reference/websocket-operations/receive-chat-message",
125
+ "api-reference/websocket-operations/send-chat-message",
126
+ "api-reference/websocket-operations/receive-notifications",
127
+ "api-reference/websocket-operations/receive-presence-update",
128
+ "api-reference/websocket-operations/send-presence-update"
129
+ ]
130
+ }
131
+ ]
132
+ }
133
+ ]
134
+ },
135
+ "basePath": "/dory"
136
+ }