@clidey/dory 0.22.0 → 0.23.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 (181) hide show
  1. package/bin/dory.ts +18 -4
  2. package/dist/dory.json +5 -0
  3. package/dist/favicon.svg +1 -1
  4. package/dist/index.html +6 -6
  5. package/dist/introduction.mdx +2 -2
  6. package/dist/llms.txt +2 -2
  7. package/docs/dory.json +5 -0
  8. package/docs/favicon.svg +1 -1
  9. package/docs/introduction.mdx +2 -2
  10. package/package.json +13 -10
  11. package/src/app.css +2 -0
  12. package/src/components/dropdown.tsx +30 -26
  13. package/src/components/loading.tsx +6 -8
  14. package/src/components/navigation.tsx +8 -6
  15. package/src/components/notification.tsx +9 -93
  16. package/src/components/routes.tsx +1 -1
  17. package/src/components/search.tsx +31 -104
  18. package/src/components/store.ts +4 -1
  19. package/src/main.tsx +9 -5
  20. package/src/mdx/accordion.tsx +21 -28
  21. package/src/mdx/api-playground.tsx +68 -83
  22. package/src/mdx/api.tsx +21 -21
  23. package/src/mdx/async-api.tsx +15 -31
  24. package/src/mdx/callout.tsx +27 -43
  25. package/src/mdx/card.tsx +20 -14
  26. package/src/mdx/code.tsx +26 -26
  27. package/src/mdx/expandable.tsx +21 -25
  28. package/src/mdx/fence.tsx +2 -2
  29. package/src/mdx/list.tsx +2 -2
  30. package/src/mdx/open-api.tsx +31 -45
  31. package/src/mdx/table.tsx +8 -3
  32. package/src/mdx/tag.tsx +27 -40
  33. package/src/mdx/text.tsx +3 -2
  34. package/src/mdx/websocket-playground.tsx +150 -81
  35. package/src/theme.scss +50 -106
  36. package/src/types/config.ts +47 -0
  37. package/src/ui/header.tsx +12 -9
  38. package/src/ui/layout.tsx +5 -4
  39. package/src/ui/mobile-navigation.tsx +36 -63
  40. package/src/ui/table-of-content.tsx +3 -3
  41. package/src/utils/colors.ts +54 -0
  42. package/src/utils/fonts.ts +4 -1
  43. package/vite.config.ts +2 -0
  44. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  45. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  46. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  47. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  48. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  49. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  50. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  51. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  52. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  53. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  54. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  55. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  56. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  57. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  58. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  59. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  60. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  61. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  62. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  63. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  64. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  65. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  66. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  67. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  68. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  69. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  70. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  71. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  72. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  73. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  74. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  75. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  76. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  77. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  78. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  79. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  80. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  81. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  82. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  83. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  84. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  85. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  86. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  87. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  88. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  89. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  90. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  91. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  92. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  93. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  94. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  95. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  96. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  97. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  98. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  99. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  100. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  101. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  102. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  103. package/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
  104. package/dist/assets/_basePickBy-CsnA5_xx.js +0 -1
  105. package/dist/assets/_baseUniq-COwFna6s.js +0 -1
  106. package/dist/assets/api-playground-demo-Ct5XK2u1.js +0 -45
  107. package/dist/assets/api-playground-demo-vBae5R-d.js +0 -119
  108. package/dist/assets/arc-Dy4kITED.js +0 -1
  109. package/dist/assets/architectureDiagram-IEHRJDOE-BiaWQpzt.js +0 -36
  110. package/dist/assets/blockDiagram-JOT3LUYC-7LfUOsM7.js +0 -121
  111. package/dist/assets/c4Diagram-VJAJSXHY-Ca-3deDF.js +0 -10
  112. package/dist/assets/channel-j6jMzwSu.js +0 -1
  113. package/dist/assets/chunk-4BMEZGHF-Cln31Q_z.js +0 -1
  114. package/dist/assets/chunk-A2AXSNBT-Cj4U7K4I.js +0 -164
  115. package/dist/assets/chunk-AEK57VVT-1kn9120k.js +0 -220
  116. package/dist/assets/chunk-D6G4REZN-DMgQaOLS.js +0 -1
  117. package/dist/assets/chunk-RZ5BOZE2-DDd-DrSb.js +0 -1
  118. package/dist/assets/chunk-XZIHB7SX-sVdgMrEr.js +0 -1
  119. package/dist/assets/classDiagram-GIVACNV2-B9ObtIrc.js +0 -1
  120. package/dist/assets/classDiagram-v2-COTLJTTW-B9ObtIrc.js +0 -1
  121. package/dist/assets/clone-UOttdbrS.js +0 -1
  122. package/dist/assets/create-D-Wjvs-T.js +0 -6
  123. package/dist/assets/create-DpzlgYHc.js +0 -4
  124. package/dist/assets/cytoscape.esm-BY7v1xhs.js +0 -331
  125. package/dist/assets/dagre-OKDRZEBW-C4q12sCc.js +0 -4
  126. package/dist/assets/delete-DwAmDeAN.js +0 -4
  127. package/dist/assets/delete-cbziNMWs.js +0 -5
  128. package/dist/assets/diagram-SSKATNLV-BxNC6sGs.js +0 -43
  129. package/dist/assets/diagram-VNBRO52H-CukGDk3b.js +0 -24
  130. package/dist/assets/dory.jpeg +0 -0
  131. package/dist/assets/erDiagram-Q7BY3M3F-TiiVq0dv.js +0 -60
  132. package/dist/assets/favicon-Z67lNtJu.svg +0 -75
  133. package/dist/assets/features-6EEoDloV.js +0 -269
  134. package/dist/assets/features-EZwrzTnN.js +0 -441
  135. package/dist/assets/flowDiagram-4HSFHLVR-DykkGbol.js +0 -161
  136. package/dist/assets/ganttDiagram-APWFNJXF-Bqp95-S3.js +0 -257
  137. package/dist/assets/get-BeAg4Qrr.js +0 -5
  138. package/dist/assets/get-Dj1eDs2i.js +0 -4
  139. package/dist/assets/gitGraphDiagram-7IBYFJ6S-BiYVs9VI.js +0 -65
  140. package/dist/assets/graph-LkKKMaDZ.js +0 -1
  141. package/dist/assets/index-CGd7uPvh.css +0 -1
  142. package/dist/assets/index-vOROtq-e.js +0 -9596
  143. package/dist/assets/infoDiagram-PH2N3AL5-EA7h3wZa.js +0 -2
  144. package/dist/assets/init-Gi6I4Gst.js +0 -1
  145. package/dist/assets/introduction-CzXlzjWa.js +0 -38
  146. package/dist/assets/introduction-ylYJcPz3.js +0 -45
  147. package/dist/assets/journeyDiagram-U35MCT3I-BZiVuCZu.js +0 -138
  148. package/dist/assets/kanban-definition-NDS4AKOZ-SCdQ8OjR.js +0 -88
  149. package/dist/assets/layout-C9-9-M2q.js +0 -1
  150. package/dist/assets/linear-CTbdhYd1.js +0 -1
  151. package/dist/assets/mermaid.core-DUFqLK_I.js +0 -213
  152. package/dist/assets/mindmap-definition-ALO5MXBD-BPbKEbjk.js +0 -95
  153. package/dist/assets/ordinal-Cboi1Yqb.js +0 -1
  154. package/dist/assets/pieDiagram-IB7DONF6-DPg1sNm8.js +0 -30
  155. package/dist/assets/quadrantDiagram-7GDLP6J5-DmtJM50d.js +0 -7
  156. package/dist/assets/radar-MK3ICKWK-DnO5LA4B.js +0 -128
  157. package/dist/assets/receive-chat-message-B2jsY1P6.js +0 -4
  158. package/dist/assets/receive-chat-message-BeaC4eqS.js +0 -5
  159. package/dist/assets/receive-notifications-BouRLPFj.js +0 -4
  160. package/dist/assets/receive-notifications-DYnXRRBz.js +0 -5
  161. package/dist/assets/receive-presence-update-CRgeSUpk.js +0 -5
  162. package/dist/assets/receive-presence-update-UEm47KAG.js +0 -4
  163. package/dist/assets/requirementDiagram-KVF5MWMF-iNwUJLq2.js +0 -64
  164. package/dist/assets/sankeyDiagram-QLVOVGJD-DWLyAD59.js +0 -10
  165. package/dist/assets/send-chat-message-Bvf2XJiv.js +0 -5
  166. package/dist/assets/send-chat-message-FDmVETeD.js +0 -4
  167. package/dist/assets/send-presence-update-26clGQ0z.js +0 -5
  168. package/dist/assets/send-presence-update-DeywSKYu.js +0 -4
  169. package/dist/assets/sequenceDiagram-X6HHIX6F-HyRN2_g-.js +0 -122
  170. package/dist/assets/stateDiagram-DGXRK772-DdMr0V93.js +0 -1
  171. package/dist/assets/stateDiagram-v2-YXO3MK2T-D6kpXRiR.js +0 -1
  172. package/dist/assets/timeline-definition-BDJGKUSR-CDf8nWgC.js +0 -61
  173. package/dist/assets/update-BEeNDeXY.js +0 -4
  174. package/dist/assets/update-CykJMYvN.js +0 -5
  175. package/dist/assets/websocket-playground-demo-4pj7mj19.js +0 -135
  176. package/dist/assets/websocket-playground-demo-F71LN60e.js +0 -61
  177. package/dist/assets/xychartDiagram-VJFVF3MP-BY_uTq9r.js +0 -7
  178. package/docs/assets/dory.jpeg +0 -0
  179. package/src/components/dark-mode-toggle.tsx +0 -25
  180. package/src/index.css +0 -24
  181. package/src/utils/hooks.ts +0 -46
package/bin/dory.ts CHANGED
@@ -99,7 +99,7 @@ const commands = {
99
99
  console.log('👀 Starting your docs preview...');
100
100
  const currentDir = process.cwd();
101
101
  const distDir = resolve(currentDir, 'dist');
102
- const port = process.env.PORT || 3000;
102
+ let port = parseInt(process.env.PORT || '3000', 10);
103
103
 
104
104
  const serve = sirv(distDir, {
105
105
  dev: false,
@@ -113,9 +113,23 @@ const commands = {
113
113
  serve(req, res);
114
114
  });
115
115
 
116
- server.listen(port, () => {
117
- console.log(`🚀 Your docs are live at http://localhost:${port}`);
118
- });
116
+ const tryPort = (currentPort: number) => {
117
+ server.listen(currentPort)
118
+ .on('listening', () => {
119
+ console.log(`🚀 Your docs are live at http://localhost:${currentPort}`);
120
+ })
121
+ .on('error', (err: any) => {
122
+ if (err.code === 'EADDRINUSE') {
123
+ console.log(`⚠️ Port ${currentPort} is busy, trying ${currentPort + 1}...`);
124
+ tryPort(currentPort + 1);
125
+ } else {
126
+ console.error('❌ Failed to start server:', err.message);
127
+ process.exit(1);
128
+ }
129
+ });
130
+ };
131
+
132
+ tryPort(port);
119
133
  },
120
134
 
121
135
  'verify:content': async () => {
package/dist/dory.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "Docucod",
3
3
  "favicon": "./favicon.svg",
4
+ "colors": {
5
+ "primary": "#0ea5e9",
6
+ "light": "#0C8BC6",
7
+ "dark": "#0284c7"
8
+ },
4
9
  "fonts": {
5
10
  "family": "Montserrat",
6
11
  "source": "https://fonts.gstatic.com/s/googlesansflex/v5/t5sJIQcYNIWbFgDgAAzZ34auoVyXkJCOvp3SFWJbN5hF8Ju1x6sKCyp0l9sI40swNJwGpVd4AZzz0v6lJ4qFXNZhGjLvDSkV4USKMo6qQzwliVdHAy9jxTDHg_ugnAakpwGc-cxgUqDCIUI.woff2",
package/dist/favicon.svg CHANGED
@@ -8,7 +8,7 @@
8
8
  version="1.1"
9
9
  id="svg1"
10
10
  inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
11
- sodipodi:docname="docucod-logo.svg"
11
+ sodipodi:docname="dory-logo.svg"
12
12
  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
13
  xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
14
  xmlns="http://www.w3.org/2000/svg"
package/dist/index.html CHANGED
@@ -2,7 +2,7 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
- <link rel="icon" href="/assets/favicon-Z67lNtJu.svg" />
5
+ <link rel="icon" href="/assets/favicon-nLquwUQp.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
7
  <meta name="theme-color" content="#000000" />
8
8
 
@@ -15,7 +15,7 @@
15
15
  <!-- Open Graph / Facebook -->
16
16
  <meta property="og:title" content="Docucod: Generate and Maintain Documentation With No Work" />
17
17
  <meta property="og:description" content="Docucod auto-generates and maintains up-to-date documentation from your codebase so your team can move fast, onboard quickly, and stay focused on building." />
18
- <meta property="og:image" content="/assets/favicon-Z67lNtJu.svg" />
18
+ <meta property="og:image" content="/assets/favicon-nLquwUQp.svg" />
19
19
  <meta property="og:url" content="https://docucod.com/" />
20
20
  <meta property="og:type" content="website" />
21
21
  <meta property="og:site_name" content="Docucod" />
@@ -25,11 +25,11 @@
25
25
  <meta name="twitter:card" content="summary_large_image" />
26
26
  <meta name="twitter:title" content="Docucod: Generate and Maintain Documentation With No Work" />
27
27
  <meta name="twitter:description" content="Docucod auto-generates and maintains up-to-date documentation from your codebase so your team can move fast, onboard quickly, and stay focused on building." />
28
- <meta name="twitter:image" content="/assets/favicon-Z67lNtJu.svg" />
28
+ <meta name="twitter:image" content="/assets/favicon-nLquwUQp.svg" />
29
29
  <meta name="twitter:site" content="@ClideyOfficial" />
30
30
  <meta name="twitter:creator" content="@ClideyOfficial" />
31
31
 
32
- <link rel="apple-touch-icon" href="/assets/favicon-Z67lNtJu.svg" />
32
+ <link rel="apple-touch-icon" href="/assets/favicon-nLquwUQp.svg" />
33
33
  <link rel="manifest" href="/manifest.json" />
34
34
 
35
35
  <title>Docucod - Instantly Generate and Maintain Your Documentation</title>
@@ -45,8 +45,8 @@
45
45
  person_profiles: 'identified_only', // or 'always' to create profiles for anonymous users as well
46
46
  })
47
47
  </script>
48
- <script type="module" crossorigin src="/assets/index-vOROtq-e.js"></script>
49
- <link rel="stylesheet" crossorigin href="/assets/index-CGd7uPvh.css">
48
+ <script type="module" crossorigin src="/assets/index-CrsN5P5J.js"></script>
49
+ <link rel="stylesheet" crossorigin href="/assets/index-DfQ0BTd7.css">
50
50
  </head>
51
51
  <body>
52
52
  <noscript>You need to enable JavaScript to run this app.</noscript>
@@ -10,7 +10,7 @@ description: 'Welcome to Docucod and Dory documentation'
10
10
  This documentation is powered by two complementary tools:
11
11
 
12
12
  1. **Docucod** - An AI-powered documentation assistant that automatically generates and maintains documentation
13
- 2. **Dory** - A lightweight static site generator specifically designed to deploy Docucod-generated documentation
13
+ 2. **Dory** - A lightweight static site generator specifically designed to deploy dory-generated documentation
14
14
 
15
15
  ## What is Docucod?
16
16
 
@@ -22,7 +22,7 @@ Docucod analyzes your codebase and automatically:
22
22
 
23
23
  ## What is Dory?
24
24
 
25
- Dory is a lightweight static site generator built for developers who want fast, clean, and customizable documentation. It was created specifically to deploy Docucod-generated documentation with:
25
+ Dory is a lightweight static site generator built for developers who want fast, clean, and customizable documentation. It was created specifically to deploy dory-generated documentation with:
26
26
 
27
27
  - 🧠 **Simple** — Drop in `.mdx` files and configure one `dory.json`
28
28
  - ⚡ **Fast** — Instant hot reload in dev, quick static builds for prod
package/dist/llms.txt CHANGED
@@ -10,7 +10,7 @@ Welcome to Docucod and Dory documentation
10
10
  This documentation is powered by two complementary tools:
11
11
 
12
12
  1. **Docucod** - An AI-powered documentation assistant that automatically generates and maintains documentation
13
- 2. **Dory** - A lightweight static site generator specifically designed to deploy Docucod-generated documentation
13
+ 2. **Dory** - A lightweight static site generator specifically designed to deploy dory-generated documentation
14
14
 
15
15
  ## What is Docucod?
16
16
 
@@ -22,7 +22,7 @@ Docucod analyzes your codebase and automatically:
22
22
 
23
23
  ## What is Dory?
24
24
 
25
- Dory is a lightweight static site generator built for developers who want fast, clean, and customizable documentation. It was created specifically to deploy Docucod-generated documentation with:
25
+ Dory is a lightweight static site generator built for developers who want fast, clean, and customizable documentation. It was created specifically to deploy dory-generated documentation with:
26
26
 
27
27
  - 🧠 **Simple** — Drop in `.mdx` files and configure one `dory.json`
28
28
  - ⚡ **Fast** — Instant hot reload in dev, quick static builds for prod
package/docs/dory.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "Docucod",
3
3
  "favicon": "./favicon.svg",
4
+ "colors": {
5
+ "primary": "#0ea5e9",
6
+ "light": "#0C8BC6",
7
+ "dark": "#0284c7"
8
+ },
4
9
  "fonts": {
5
10
  "family": "Montserrat",
6
11
  "source": "https://fonts.gstatic.com/s/googlesansflex/v5/t5sJIQcYNIWbFgDgAAzZ34auoVyXkJCOvp3SFWJbN5hF8Ju1x6sKCyp0l9sI40swNJwGpVd4AZzz0v6lJ4qFXNZhGjLvDSkV4USKMo6qQzwliVdHAy9jxTDHg_ugnAakpwGc-cxgUqDCIUI.woff2",
package/docs/favicon.svg CHANGED
@@ -8,7 +8,7 @@
8
8
  version="1.1"
9
9
  id="svg1"
10
10
  inkscape:version="1.4 (e7c3feb1, 2024-10-09)"
11
- sodipodi:docname="docucod-logo.svg"
11
+ sodipodi:docname="dory-logo.svg"
12
12
  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
13
  xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
14
  xmlns="http://www.w3.org/2000/svg"
@@ -10,7 +10,7 @@ description: 'Welcome to Docucod and Dory documentation'
10
10
  This documentation is powered by two complementary tools:
11
11
 
12
12
  1. **Docucod** - An AI-powered documentation assistant that automatically generates and maintains documentation
13
- 2. **Dory** - A lightweight static site generator specifically designed to deploy Docucod-generated documentation
13
+ 2. **Dory** - A lightweight static site generator specifically designed to deploy dory-generated documentation
14
14
 
15
15
  ## What is Docucod?
16
16
 
@@ -22,7 +22,7 @@ Docucod analyzes your codebase and automatically:
22
22
 
23
23
  ## What is Dory?
24
24
 
25
- Dory is a lightweight static site generator built for developers who want fast, clean, and customizable documentation. It was created specifically to deploy Docucod-generated documentation with:
25
+ Dory is a lightweight static site generator built for developers who want fast, clean, and customizable documentation. It was created specifically to deploy dory-generated documentation with:
26
26
 
27
27
  - 🧠 **Simple** — Drop in `.mdx` files and configure one `dory.json`
28
28
  - ⚡ **Fast** — Instant hot reload in dev, quick static builds for prod
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@clidey/dory",
3
3
  "private": false,
4
- "version": "0.22.0",
4
+ "version": "0.23.0",
5
5
  "type": "module",
6
6
  "description": "A CLI tool for building and previewing documentation sites",
7
7
  "keywords": [
@@ -24,20 +24,27 @@
24
24
  "bugs": {
25
25
  "url": "https://github.com/clidey/dory/issues"
26
26
  },
27
+ "scripts": {
28
+ "dev": "vite",
29
+ "build": "tsc -b && vite build",
30
+ "preview": "vite preview",
31
+ "publish": "npm publish --access public"
32
+ },
27
33
  "dependencies": {
28
34
  "@algolia/autocomplete-core": "^1.19.2",
35
+ "@clidey/ux": "^0.36.0",
29
36
  "@fortawesome/fontawesome-svg-core": "^6.7.2",
30
37
  "@fortawesome/free-brands-svg-icons": "^6.7.2",
31
38
  "@fortawesome/free-regular-svg-icons": "^6.7.2",
32
39
  "@fortawesome/free-solid-svg-icons": "^6.7.2",
33
40
  "@fortawesome/react-fontawesome": "^0.2.2",
34
- "@headlessui/react": "^2.2.4",
41
+ "@headlessui/react": "^2.2.9",
35
42
  "@heroicons/react": "^2.2.0",
36
43
  "@mdx-js/mdx": "^3.1.0",
37
44
  "@mdx-js/preact": "^3.1.0",
38
45
  "@mdx-js/rollup": "^3.1.0",
39
46
  "@preact/preset-vite": "^2.10.1",
40
- "@tailwindcss/vite": "^4.1.8",
47
+ "@tailwindcss/vite": "^4.1.16",
41
48
  "@types/react-highlight-words": "^0.20.0",
42
49
  "classnames": "^2.5.1",
43
50
  "flexsearch": "^0.8.205",
@@ -54,7 +61,7 @@
54
61
  "saas": "^1.0.0",
55
62
  "sass-embedded": "^1.89.2",
56
63
  "sirv": "^3.0.1",
57
- "tailwindcss": "^4.1.8",
64
+ "tailwindcss": "^4.1.16",
58
65
  "tsx": "^4.20.4",
59
66
  "typescript": "~5.8.3",
60
67
  "unist-util-visit": "^5.0.0",
@@ -62,12 +69,8 @@
62
69
  "vite-plugin-mdx": "^3.6.1",
63
70
  "wouter-preact": "^3.7.1"
64
71
  },
72
+ "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39",
65
73
  "devDependencies": {
66
74
  "@types/node": "^24.0.12"
67
- },
68
- "scripts": {
69
- "dev": "vite",
70
- "build": "tsc -b && vite build",
71
- "preview": "vite preview"
72
75
  }
73
- }
76
+ }
package/src/app.css CHANGED
@@ -1,3 +1,5 @@
1
1
  @import "tailwindcss";
2
+
2
3
  @custom-variant dark (&:where(.dark, .dark *));
3
4
 
5
+
@@ -1,6 +1,14 @@
1
- import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'
1
+ import {
2
+ DropdownMenu,
3
+ DropdownMenuTrigger,
4
+ DropdownMenuContent,
5
+ DropdownMenuItem,
6
+ DropdownMenuSeparator,
7
+ Button
8
+ } from '@clidey/ux'
2
9
  import { ChevronDownIcon } from '@heroicons/react/20/solid'
3
10
  import type { ComponentChildren } from 'preact'
11
+ import type { ReactNode } from 'preact/compat'
4
12
 
5
13
  interface DropdownItem {
6
14
  icon?: ComponentChildren
@@ -11,39 +19,35 @@ interface DropdownItem {
11
19
  }
12
20
 
13
21
  interface DropdownProps {
14
- buttonLabel: string
22
+ buttonLabel: string | ReactNode;
15
23
  items: DropdownItem[]
16
24
  className?: string
17
25
  }
18
26
 
19
27
  export default function Dropdown({ buttonLabel, items, className = '' }: DropdownProps) {
20
28
  return (
21
- <Menu as="div" className={`relative inline-block text-left ${className}`}>
22
- <div>
23
- <MenuButton className="inline-flex w-full justify-center gap-x-1.5 rounded-md bg-[#1e1e1e] px-3 py-2 text-sm font-semibold text-[#ffffff] shadow-xs ring-1 ring-[#444444] ring-inset hover:bg-[#2a2a2a]">
29
+ <DropdownMenu>
30
+ <DropdownMenuTrigger>
31
+ <Button className={className}>
24
32
  {buttonLabel}
25
- <ChevronDownIcon aria-hidden="true" className="-mr-1 size-5 text-[#aaaaaa]" />
26
- </MenuButton>
27
- </div>
28
-
29
- <MenuItems
30
- transition
31
- className="absolute left-0 right-0 z-10 mt-2 w-full origin-top-right divide-y divide-[#444444] rounded-md bg-[#1e1e1e] shadow-lg ring-1 ring-[#444444]/50 transition focus:outline-hidden data-closed:scale-95 data-closed:transform data-closed:opacity-0 data-enter:duration-100 data-enter:ease-out data-leave:duration-75 data-leave:ease-in">
33
+ <ChevronDownIcon className="ml-2 h-4 w-4" />
34
+ </Button>
35
+ </DropdownMenuTrigger>
36
+ <DropdownMenuContent>
32
37
  {items.map((item, index) => (
33
- <div key={index} className={item.divider ? 'py-1' : ''}>
34
- <MenuItem className="group">
35
- <a href={item.href} onClick={item.onClick} className="group flex items-center px-4 py-2 text-sm text-[#ffffff] data-focus:bg-[#2a2a2a] data-focus:text-[#ffffff] data-focus:outline-hidden cursor-pointer">
36
- {item.icon && (
37
- <span className="mr-3 size-5 text-[#aaaaaa] group-data-focus:text-[#cccccc]">
38
- {item.icon}
39
- </span>
40
- )}
41
- {item.label}
42
- </a>
43
- </MenuItem>
44
- </div>
38
+ <>
39
+ {item.divider && index > 0 && <DropdownMenuSeparator />}
40
+ <DropdownMenuItem
41
+ key={index}
42
+ onClick={item.onClick}
43
+ className="cursor-pointer"
44
+ >
45
+ {item.icon && <span className="mr-2">{item.icon}</span>}
46
+ {item.label}
47
+ </DropdownMenuItem>
48
+ </>
45
49
  ))}
46
- </MenuItems>
47
- </Menu>
50
+ </DropdownMenuContent>
51
+ </DropdownMenu>
48
52
  )
49
53
  }
@@ -1,21 +1,19 @@
1
+ import { Spinner } from '@clidey/ux';
1
2
  import classNames from "classnames";
2
3
 
3
4
  type ILoadingProps = {
4
5
  className?: string;
5
- hideText?: boolean;
6
+ showText?: boolean;
6
7
  loadingText?: string;
7
8
  textClassName?: string;
8
9
  }
9
10
 
10
- export const Loading = ({ className, hideText, loadingText, textClassName }: ILoadingProps) => {
11
+ export const Loading = ({ className, showText = false, loadingText, textClassName }: ILoadingProps) => {
11
12
  return (
12
- <div className="h-full w-full flex flex-col justify-center items-center gap-2" role="status">
13
- <svg aria-hidden="true" className={classNames("w-8 h-8 text-gray-200 animate-spin fill-black/50", className)} viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
14
- <path d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z" fill="currentColor"/>
15
- <path d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z" fill="currentFill"/>
16
- </svg>
13
+ <div className="h-full w-full flex flex-col justify-center items-center gap-2 min-h-[400px]" role="status">
14
+ <Spinner className={className} />
17
15
  {
18
- !hideText &&
16
+ showText &&
19
17
  <div className={classNames("text-sm text-gray-500", textClassName)}>{ loadingText ?? "Loading..."}</div>
20
18
  }
21
19
  </div>
@@ -1,8 +1,8 @@
1
1
  import classNames from 'classnames';
2
2
  import { useMemo } from 'preact/hooks';
3
+ import { Link } from 'wouter-preact';
3
4
  import { usePathname } from './hooks';
4
5
  import { ALL_NAVIGATION } from './store';
5
- import { Link } from 'wouter-preact';
6
6
 
7
7
  export function Navigation() {
8
8
  const pathname = usePathname();
@@ -20,23 +20,25 @@ export function Navigation() {
20
20
  }, [effectivePath]);
21
21
 
22
22
  return (
23
- <nav className="docucod-navigation text-base lg:text-sm">
23
+ <nav className="dory-navigation text-base lg:text-sm">
24
24
  <ul role="list" className="space-y-9">
25
25
  {currentTab && (
26
26
  <li key={currentTab.title}>
27
- <h2 className="font-display font-medium text-slate-900 dark:text-white">{currentTab.title}</h2>
27
+ <h2 className="font-display font-medium text-xs">{currentTab.title}</h2>
28
28
  {currentTab.groups.map(group => (
29
29
  <div key={group.title}>
30
- <h3 className="mt-4 text-sm font-semibold text-slate-900 dark:text-white">{group.title}</h3>
30
+ <h3 className="mt-4 text-sm font-semibold">{group.title}</h3>
31
31
  <ul role="list" className="mt-2 space-y-2 border-l-2 border-slate-100 lg:mt-4 lg:space-y-4 lg:border-slate-200 dark:border-slate-800">
32
32
  {group.pages.map((page) => {
33
33
  const isActive = effectivePath === page.href;
34
34
  return (
35
35
  <li key={page.href} className="relative">
36
- <Link to={page.href} className={classNames(
36
+ <Link
37
+ href={page.href}
38
+ className={classNames(
37
39
  'block w-full pl-3.5 before:pointer-events-none before:absolute before:top-1/2 before:-left-1 before:h-1.5 before:w-1.5 before:-translate-y-1/2 before:rounded-full',
38
40
  {
39
- 'font-semibold text-sky-500 before:bg-sky-500': isActive,
41
+ 'font-semibold text-brand-foreground': isActive,
40
42
  'text-slate-500 before:hidden before:bg-slate-300 hover:text-slate-600 hover:before:block dark:text-slate-400 dark:before:bg-slate-700 dark:hover:text-slate-300': !isActive
41
43
  },
42
44
  )}>
@@ -1,97 +1,13 @@
1
- import { Transition } from '@headlessui/react';
2
- import { CheckCircleIcon } from '@heroicons/react/24/outline';
3
- import { createContext, type ComponentChildren } from 'preact';
4
- import { useContext, useState } from 'preact/hooks';
5
-
6
- interface Notification {
7
- id: number;
8
- message: string;
9
- description?: string;
10
- }
11
-
12
- interface NotificationContextType {
13
- showNotification: (message: string, description?: string) => void;
14
- }
15
-
16
- const NotificationContext = createContext<NotificationContextType | null>(null);
1
+ import { toast } from '@clidey/ux';
2
+ import { InfoIcon } from 'lucide-react';
17
3
 
18
4
  export function useNotification() {
19
- const context = useContext(NotificationContext);
20
- if (!context) {
21
- throw new Error('useNotification must be used within a NotificationProvider');
22
- }
23
- return context;
24
- }
25
-
26
- interface NotificationProviderProps {
27
- children: ComponentChildren;
28
- }
29
-
30
- export function NotificationProvider({ children }: NotificationProviderProps) {
31
- const [notifications, setNotifications] = useState<Notification[]>([]);
32
-
33
- const showNotification = (message: string, description?: string) => {
34
- const id = Date.now();
35
- setNotifications(prev => [...prev, { id, message, description }]);
36
-
37
- // Auto-dismiss after 5 seconds
38
- setTimeout(() => {
39
- setNotifications(prev => prev.filter(notif => notif.id !== id));
40
- }, 5000);
5
+ return {
6
+ showNotification: (message: string, description?: string) => {
7
+ toast(message, {
8
+ icon: <InfoIcon className="h-4 w-4" />,
9
+ description: description,
10
+ });
11
+ }
41
12
  };
42
-
43
- // const dismissNotification = (id: number) => {
44
- // setNotifications(prev => prev.filter(notif => notif.id !== id));
45
- // };
46
-
47
- return (
48
- <NotificationContext.Provider value={{ showNotification }}>
49
- <div
50
- aria-live="assertive"
51
- className="pointer-events-none fixed inset-0 flex items-start justify-end px-8 py-6 sm:p-6 z-[100]"
52
- >
53
- <div className="flex w-full flex-col items-end space-y-4">
54
- {notifications.map((notif) => (
55
- <Transition
56
- key={notif.id}
57
- show={true}
58
- enter="transform ease-out duration-300 transition"
59
- enterFrom="translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2"
60
- enterTo="translate-y-0 opacity-100 sm:translate-x-0"
61
- leave="transition ease-in duration-100"
62
- leaveFrom="opacity-100"
63
- leaveTo="opacity-0"
64
- >
65
- <div className="pointer-events-auto w-full max-w-sm overflow-hidden rounded-lg bg-[#222222] shadow-lg ring-1 ring-[#444444]/5">
66
- <div className="p-4">
67
- <div className="flex items-start">
68
- <div className="shrink-0">
69
- <CheckCircleIcon aria-hidden="true" className="size-6 text-green-400" />
70
- </div>
71
- <div className="ml-3 w-0 flex-1 pt-0.5">
72
- <p className="text-sm font-medium text-[#ffffff]">{notif.message}</p>
73
- {notif.description && (
74
- <p className="mt-1 text-sm text-[#aaaaaa]">{notif.description}</p>
75
- )}
76
- </div>
77
- {/* <div className="ml-4 flex shrink-0">
78
- <button
79
- type="button"
80
- onClick={() => dismissNotification(notif.id)}
81
- className="inline-flex rounded-md bg-transparent text-[#aaaaaa] hover:text-[#ffffff] focus:ring-2 focus:ring-[#444444] focus:ring-offset-2 focus:outline-hidden"
82
- >
83
- <span className="sr-only">Close</span>
84
- <XMarkIcon aria-hidden="true" className="size-5" />
85
- </button>
86
- </div> */}
87
- </div>
88
- </div>
89
- </div>
90
- </Transition>
91
- ))}
92
- </div>
93
- </div>
94
- {children}
95
- </NotificationContext.Provider>
96
- );
97
13
  }
@@ -12,7 +12,7 @@ export default function Routes() {
12
12
  const [loading, setLoading] = useState(true);
13
13
 
14
14
  useEffect(() => {
15
- const links = document.querySelectorAll('.docucod-navigation a');
15
+ const links = document.querySelectorAll('.dory-navigation a');
16
16
  const listeners: (() => void)[] = [];
17
17
  const preloaded = new Set();
18
18