mordoc 0.1.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 (243) hide show
  1. package/README.md +240 -0
  2. package/bin/cli.js +81 -0
  3. package/dist/build/Builder.d.ts +91 -0
  4. package/dist/build/Builder.d.ts.map +1 -0
  5. package/dist/build/Builder.js +391 -0
  6. package/dist/build/Builder.js.map +1 -0
  7. package/dist/build/ClientBundler.d.ts +36 -0
  8. package/dist/build/ClientBundler.d.ts.map +1 -0
  9. package/dist/build/ClientBundler.js +132 -0
  10. package/dist/build/ClientBundler.js.map +1 -0
  11. package/dist/build/HtmlGenerator.d.ts +46 -0
  12. package/dist/build/HtmlGenerator.d.ts.map +1 -0
  13. package/dist/build/HtmlGenerator.js +200 -0
  14. package/dist/build/HtmlGenerator.js.map +1 -0
  15. package/dist/build/SearchIndexer.d.ts +31 -0
  16. package/dist/build/SearchIndexer.d.ts.map +1 -0
  17. package/dist/build/SearchIndexer.js +116 -0
  18. package/dist/build/SearchIndexer.js.map +1 -0
  19. package/dist/cli/build.d.ts +20 -0
  20. package/dist/cli/build.d.ts.map +1 -0
  21. package/dist/cli/build.js +111 -0
  22. package/dist/cli/build.js.map +1 -0
  23. package/dist/cli/create-app.d.ts +14 -0
  24. package/dist/cli/create-app.d.ts.map +1 -0
  25. package/dist/cli/create-app.js +216 -0
  26. package/dist/cli/create-app.js.map +1 -0
  27. package/dist/cli/dev.d.ts +20 -0
  28. package/dist/cli/dev.d.ts.map +1 -0
  29. package/dist/cli/dev.js +169 -0
  30. package/dist/cli/dev.js.map +1 -0
  31. package/dist/client/App.d.ts +17 -0
  32. package/dist/client/App.d.ts.map +1 -0
  33. package/dist/client/App.js +94 -0
  34. package/dist/client/App.js.map +1 -0
  35. package/dist/client/contexts/ConfigContext.d.ts +22 -0
  36. package/dist/client/contexts/ConfigContext.d.ts.map +1 -0
  37. package/dist/client/contexts/ConfigContext.js +27 -0
  38. package/dist/client/contexts/ConfigContext.js.map +1 -0
  39. package/dist/client/contexts/ContentContext.d.ts +31 -0
  40. package/dist/client/contexts/ContentContext.d.ts.map +1 -0
  41. package/dist/client/contexts/ContentContext.js +46 -0
  42. package/dist/client/contexts/ContentContext.js.map +1 -0
  43. package/dist/client/contexts/SearchContext.d.ts +38 -0
  44. package/dist/client/contexts/SearchContext.d.ts.map +1 -0
  45. package/dist/client/contexts/SearchContext.js +207 -0
  46. package/dist/client/contexts/SearchContext.js.map +1 -0
  47. package/dist/client/contexts/ThemeContext.d.ts +23 -0
  48. package/dist/client/contexts/ThemeContext.d.ts.map +1 -0
  49. package/dist/client/contexts/ThemeContext.js +62 -0
  50. package/dist/client/contexts/ThemeContext.js.map +1 -0
  51. package/dist/client/hooks/useContent.d.ts +12 -0
  52. package/dist/client/hooks/useContent.d.ts.map +1 -0
  53. package/dist/client/hooks/useContent.js +74 -0
  54. package/dist/client/hooks/useContent.js.map +1 -0
  55. package/dist/client/hooks/useNavigation.d.ts +15 -0
  56. package/dist/client/hooks/useNavigation.d.ts.map +1 -0
  57. package/dist/client/hooks/useNavigation.js +101 -0
  58. package/dist/client/hooks/useNavigation.js.map +1 -0
  59. package/dist/client/hooks/useSearch.d.ts +22 -0
  60. package/dist/client/hooks/useSearch.d.ts.map +1 -0
  61. package/dist/client/hooks/useSearch.js +64 -0
  62. package/dist/client/hooks/useSearch.js.map +1 -0
  63. package/dist/client/main.d.ts +5 -0
  64. package/dist/client/main.d.ts.map +1 -0
  65. package/dist/client/main.js +66 -0
  66. package/dist/client/main.js.map +1 -0
  67. package/dist/components/Callout.d.ts +9 -0
  68. package/dist/components/Callout.d.ts.map +1 -0
  69. package/dist/components/Callout.js +24 -0
  70. package/dist/components/Callout.js.map +1 -0
  71. package/dist/components/Card.d.ts +10 -0
  72. package/dist/components/Card.d.ts.map +1 -0
  73. package/dist/components/Card.js +15 -0
  74. package/dist/components/Card.js.map +1 -0
  75. package/dist/components/CardGrid.d.ts +8 -0
  76. package/dist/components/CardGrid.d.ts.map +1 -0
  77. package/dist/components/CardGrid.js +9 -0
  78. package/dist/components/CardGrid.js.map +1 -0
  79. package/dist/components/CodeBlock.d.ts +24 -0
  80. package/dist/components/CodeBlock.d.ts.map +1 -0
  81. package/dist/components/CodeBlock.js +76 -0
  82. package/dist/components/CodeBlock.js.map +1 -0
  83. package/dist/components/ContentPage.d.ts +9 -0
  84. package/dist/components/ContentPage.d.ts.map +1 -0
  85. package/dist/components/ContentPage.js +36 -0
  86. package/dist/components/ContentPage.js.map +1 -0
  87. package/dist/components/Header.d.ts +14 -0
  88. package/dist/components/Header.d.ts.map +1 -0
  89. package/dist/components/Header.js +30 -0
  90. package/dist/components/Header.js.map +1 -0
  91. package/dist/components/Heading.d.ts +16 -0
  92. package/dist/components/Heading.d.ts.map +1 -0
  93. package/dist/components/Heading.js +31 -0
  94. package/dist/components/Heading.js.map +1 -0
  95. package/dist/components/Image.d.ts +8 -0
  96. package/dist/components/Image.d.ts.map +1 -0
  97. package/dist/components/Image.js +24 -0
  98. package/dist/components/Image.js.map +1 -0
  99. package/dist/components/Layout.d.ts +14 -0
  100. package/dist/components/Layout.d.ts.map +1 -0
  101. package/dist/components/Layout.js +32 -0
  102. package/dist/components/Layout.js.map +1 -0
  103. package/dist/components/MarkdocRenderer.d.ts +15 -0
  104. package/dist/components/MarkdocRenderer.d.ts.map +1 -0
  105. package/dist/components/MarkdocRenderer.js +73 -0
  106. package/dist/components/MarkdocRenderer.js.map +1 -0
  107. package/dist/components/MobileMenu.d.ts +14 -0
  108. package/dist/components/MobileMenu.d.ts.map +1 -0
  109. package/dist/components/MobileMenu.js +45 -0
  110. package/dist/components/MobileMenu.js.map +1 -0
  111. package/dist/components/PageNavigation.d.ts +9 -0
  112. package/dist/components/PageNavigation.d.ts.map +1 -0
  113. package/dist/components/PageNavigation.js +23 -0
  114. package/dist/components/PageNavigation.js.map +1 -0
  115. package/dist/components/SearchModal.d.ts +9 -0
  116. package/dist/components/SearchModal.d.ts.map +1 -0
  117. package/dist/components/SearchModal.js +74 -0
  118. package/dist/components/SearchModal.js.map +1 -0
  119. package/dist/components/SideNav.d.ts +9 -0
  120. package/dist/components/SideNav.d.ts.map +1 -0
  121. package/dist/components/SideNav.js +66 -0
  122. package/dist/components/SideNav.js.map +1 -0
  123. package/dist/components/TableOfContents.d.ts +10 -0
  124. package/dist/components/TableOfContents.d.ts.map +1 -0
  125. package/dist/components/TableOfContents.js +151 -0
  126. package/dist/components/TableOfContents.js.map +1 -0
  127. package/dist/config/ConfigLoader.d.ts +50 -0
  128. package/dist/config/ConfigLoader.d.ts.map +1 -0
  129. package/dist/config/ConfigLoader.js +214 -0
  130. package/dist/config/ConfigLoader.js.map +1 -0
  131. package/dist/config/StyleCompiler.d.ts +17 -0
  132. package/dist/config/StyleCompiler.d.ts.map +1 -0
  133. package/dist/config/StyleCompiler.js +116 -0
  134. package/dist/config/StyleCompiler.js.map +1 -0
  135. package/dist/config/ThemeGenerator.d.ts +14 -0
  136. package/dist/config/ThemeGenerator.d.ts.map +1 -0
  137. package/dist/config/ThemeGenerator.js +129 -0
  138. package/dist/config/ThemeGenerator.js.map +1 -0
  139. package/dist/content/ContentLoader.d.ts +70 -0
  140. package/dist/content/ContentLoader.d.ts.map +1 -0
  141. package/dist/content/ContentLoader.js +146 -0
  142. package/dist/content/ContentLoader.js.map +1 -0
  143. package/dist/content/ContentProcessor.d.ts +84 -0
  144. package/dist/content/ContentProcessor.d.ts.map +1 -0
  145. package/dist/content/ContentProcessor.js +380 -0
  146. package/dist/content/ContentProcessor.js.map +1 -0
  147. package/dist/content/RouteManager.d.ts +69 -0
  148. package/dist/content/RouteManager.d.ts.map +1 -0
  149. package/dist/content/RouteManager.js +143 -0
  150. package/dist/content/RouteManager.js.map +1 -0
  151. package/dist/styles/components/callout.d.ts +11 -0
  152. package/dist/styles/components/callout.d.ts.map +1 -0
  153. package/dist/styles/components/callout.js +83 -0
  154. package/dist/styles/components/callout.js.map +1 -0
  155. package/dist/styles/components/card.d.ts +11 -0
  156. package/dist/styles/components/card.d.ts.map +1 -0
  157. package/dist/styles/components/card.js +179 -0
  158. package/dist/styles/components/card.js.map +1 -0
  159. package/dist/styles/components/codeblock.d.ts +11 -0
  160. package/dist/styles/components/codeblock.d.ts.map +1 -0
  161. package/dist/styles/components/codeblock.js +249 -0
  162. package/dist/styles/components/codeblock.js.map +1 -0
  163. package/dist/styles/components/content.d.ts +11 -0
  164. package/dist/styles/components/content.d.ts.map +1 -0
  165. package/dist/styles/components/content.js +198 -0
  166. package/dist/styles/components/content.js.map +1 -0
  167. package/dist/styles/components/fonts.d.ts +11 -0
  168. package/dist/styles/components/fonts.d.ts.map +1 -0
  169. package/dist/styles/components/fonts.js +34 -0
  170. package/dist/styles/components/fonts.js.map +1 -0
  171. package/dist/styles/components/header.d.ts +11 -0
  172. package/dist/styles/components/header.d.ts.map +1 -0
  173. package/dist/styles/components/header.js +293 -0
  174. package/dist/styles/components/header.js.map +1 -0
  175. package/dist/styles/components/heading.d.ts +11 -0
  176. package/dist/styles/components/heading.d.ts.map +1 -0
  177. package/dist/styles/components/heading.js +115 -0
  178. package/dist/styles/components/heading.js.map +1 -0
  179. package/dist/styles/components/layout.d.ts +11 -0
  180. package/dist/styles/components/layout.d.ts.map +1 -0
  181. package/dist/styles/components/layout.js +79 -0
  182. package/dist/styles/components/layout.js.map +1 -0
  183. package/dist/styles/components/mobilemenu.d.ts +11 -0
  184. package/dist/styles/components/mobilemenu.d.ts.map +1 -0
  185. package/dist/styles/components/mobilemenu.js +112 -0
  186. package/dist/styles/components/mobilemenu.js.map +1 -0
  187. package/dist/styles/components/reset.d.ts +11 -0
  188. package/dist/styles/components/reset.d.ts.map +1 -0
  189. package/dist/styles/components/reset.js +131 -0
  190. package/dist/styles/components/reset.js.map +1 -0
  191. package/dist/styles/components/searchmodal.d.ts +11 -0
  192. package/dist/styles/components/searchmodal.d.ts.map +1 -0
  193. package/dist/styles/components/searchmodal.js +333 -0
  194. package/dist/styles/components/searchmodal.js.map +1 -0
  195. package/dist/styles/components/sidenav.d.ts +11 -0
  196. package/dist/styles/components/sidenav.d.ts.map +1 -0
  197. package/dist/styles/components/sidenav.js +209 -0
  198. package/dist/styles/components/sidenav.js.map +1 -0
  199. package/dist/styles/components/toc.d.ts +11 -0
  200. package/dist/styles/components/toc.d.ts.map +1 -0
  201. package/dist/styles/components/toc.js +112 -0
  202. package/dist/styles/components/toc.js.map +1 -0
  203. package/dist/styles/components/typography.d.ts +11 -0
  204. package/dist/styles/components/typography.d.ts.map +1 -0
  205. package/dist/styles/components/typography.js +247 -0
  206. package/dist/styles/components/typography.js.map +1 -0
  207. package/dist/styles/components/utility.d.ts +11 -0
  208. package/dist/styles/components/utility.d.ts.map +1 -0
  209. package/dist/styles/components/utility.js +231 -0
  210. package/dist/styles/components/utility.js.map +1 -0
  211. package/dist/styles/types.d.ts +79 -0
  212. package/dist/styles/types.d.ts.map +1 -0
  213. package/dist/styles/types.js +7 -0
  214. package/dist/styles/types.js.map +1 -0
  215. package/dist/styles/utils.d.ts +21 -0
  216. package/dist/styles/utils.d.ts.map +1 -0
  217. package/dist/styles/utils.js +50 -0
  218. package/dist/styles/utils.js.map +1 -0
  219. package/dist/styles/variables/main.d.ts +15 -0
  220. package/dist/styles/variables/main.d.ts.map +1 -0
  221. package/dist/styles/variables/main.js +116 -0
  222. package/dist/styles/variables/main.js.map +1 -0
  223. package/dist/types/config.d.ts +43 -0
  224. package/dist/types/config.d.ts.map +1 -0
  225. package/dist/types/config.js +7 -0
  226. package/dist/types/config.js.map +1 -0
  227. package/dist/types/content.d.ts +46 -0
  228. package/dist/types/content.d.ts.map +1 -0
  229. package/dist/types/content.js +7 -0
  230. package/dist/types/content.js.map +1 -0
  231. package/dist/types/navigation.d.ts +45 -0
  232. package/dist/types/navigation.d.ts.map +1 -0
  233. package/dist/types/navigation.js +7 -0
  234. package/dist/types/navigation.js.map +1 -0
  235. package/dist/utils/language-utils.d.ts +41 -0
  236. package/dist/utils/language-utils.d.ts.map +1 -0
  237. package/dist/utils/language-utils.js +79 -0
  238. package/dist/utils/language-utils.js.map +1 -0
  239. package/dist/utils/slugify.d.ts +20 -0
  240. package/dist/utils/slugify.d.ts.map +1 -0
  241. package/dist/utils/slugify.js +44 -0
  242. package/dist/utils/slugify.js.map +1 -0
  243. package/package.json +58 -0
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ /**
3
+ * Create App command - Scaffolds a new Mordoc project
4
+ * Usage: createApp(projectName, options)
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createApp = createApp;
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const child_process_1 = require("child_process");
14
+ /**
15
+ * Create a new Mordoc documentation project
16
+ */
17
+ async function createApp(projectName, options = {}) {
18
+ const startTime = Date.now();
19
+ try {
20
+ // Validate project name
21
+ validateProjectName(projectName);
22
+ // Determine project directory
23
+ const projectDir = path_1.default.resolve(process.cwd(), projectName);
24
+ // Check if directory already exists
25
+ if (fs_1.default.existsSync(projectDir)) {
26
+ console.error(`❌ Error: Directory "${projectName}" already exists`);
27
+ process.exit(1);
28
+ }
29
+ console.log(`\n📦 Creating new Mordoc project: ${projectName}\n`);
30
+ // Create project directory
31
+ console.log('Creating project directory...');
32
+ fs_1.default.mkdirSync(projectDir, { recursive: true });
33
+ // Copy template files
34
+ console.log('Copying template files...');
35
+ const templateName = options.template || 'default';
36
+ await copyTemplate(projectDir, templateName);
37
+ // Update package.json with project name
38
+ console.log('Configuring package.json...');
39
+ updatePackageJson(projectDir, projectName);
40
+ // Initialize git repository (unless --skip-git)
41
+ if (options.skipGit !== true) {
42
+ console.log('Initializing git repository...');
43
+ initGitRepo(projectDir);
44
+ }
45
+ // Install dependencies (unless --skip-install)
46
+ if (!options.skipInstall) {
47
+ console.log('Installing dependencies...');
48
+ installDependencies(projectDir);
49
+ }
50
+ // Calculate time
51
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
52
+ // Show success message
53
+ showSuccessMessage(projectName, options.skipInstall || false, duration);
54
+ process.exit(0);
55
+ }
56
+ catch (error) {
57
+ console.error('\n❌ Failed to create project:');
58
+ console.error(error.message);
59
+ process.exit(1);
60
+ }
61
+ }
62
+ /**
63
+ * Validate project name
64
+ */
65
+ function validateProjectName(name) {
66
+ if (!name || name.trim() === '') {
67
+ throw new Error('Project name cannot be empty');
68
+ }
69
+ // Check for invalid characters
70
+ if (!/^[a-zA-Z0-9-_]+$/.test(name)) {
71
+ throw new Error('Project name can only contain letters, numbers, hyphens, and underscores');
72
+ }
73
+ // Check for reserved names
74
+ const reservedNames = ['node_modules', 'dist', 'build', 'public', 'src'];
75
+ if (reservedNames.includes(name.toLowerCase())) {
76
+ throw new Error(`"${name}" is a reserved name and cannot be used`);
77
+ }
78
+ }
79
+ /**
80
+ * Copy template files to project directory
81
+ */
82
+ async function copyTemplate(projectDir, templateName) {
83
+ // Get template directory
84
+ const templateDir = path_1.default.join(__dirname, '../../templates', templateName);
85
+ if (!fs_1.default.existsSync(templateDir)) {
86
+ throw new Error(`Template "${templateName}" not found`);
87
+ }
88
+ // Copy all files from template
89
+ copyDirectory(templateDir, projectDir);
90
+ }
91
+ /**
92
+ * Recursively copy directory
93
+ */
94
+ function copyDirectory(src, dest) {
95
+ // Create destination directory
96
+ if (!fs_1.default.existsSync(dest)) {
97
+ fs_1.default.mkdirSync(dest, { recursive: true });
98
+ }
99
+ // Read source directory
100
+ const entries = fs_1.default.readdirSync(src, { withFileTypes: true });
101
+ for (const entry of entries) {
102
+ const srcPath = path_1.default.join(src, entry.name);
103
+ const destPath = path_1.default.join(dest, entry.name);
104
+ if (entry.isDirectory()) {
105
+ // Recursively copy subdirectory
106
+ copyDirectory(srcPath, destPath);
107
+ }
108
+ else {
109
+ // Copy file
110
+ fs_1.default.copyFileSync(srcPath, destPath);
111
+ }
112
+ }
113
+ }
114
+ /**
115
+ * Update package.json with project name
116
+ */
117
+ function updatePackageJson(projectDir, projectName) {
118
+ const packageJsonPath = path_1.default.join(projectDir, 'package.json');
119
+ if (!fs_1.default.existsSync(packageJsonPath)) {
120
+ throw new Error('package.json not found in template');
121
+ }
122
+ // Read package.json
123
+ const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf8'));
124
+ // Update name
125
+ packageJson.name = projectName;
126
+ // Write back
127
+ fs_1.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf8');
128
+ }
129
+ /**
130
+ * Initialize git repository
131
+ */
132
+ function initGitRepo(projectDir) {
133
+ try {
134
+ (0, child_process_1.execSync)('git init', {
135
+ cwd: projectDir,
136
+ stdio: 'ignore',
137
+ });
138
+ // Create initial commit
139
+ (0, child_process_1.execSync)('git add .', {
140
+ cwd: projectDir,
141
+ stdio: 'ignore',
142
+ });
143
+ (0, child_process_1.execSync)('git commit -m "Initial commit"', {
144
+ cwd: projectDir,
145
+ stdio: 'ignore',
146
+ });
147
+ }
148
+ catch (error) {
149
+ console.warn('Warning: Failed to initialize git repository');
150
+ console.warn('You can initialize it manually later with: git init');
151
+ }
152
+ }
153
+ /**
154
+ * Install npm dependencies
155
+ */
156
+ function installDependencies(projectDir) {
157
+ try {
158
+ console.log('\n Installing packages. This might take a moment...\n');
159
+ (0, child_process_1.execSync)('npm install', {
160
+ cwd: projectDir,
161
+ stdio: 'inherit', // Show npm output
162
+ });
163
+ console.log('');
164
+ }
165
+ catch (error) {
166
+ console.warn('\nWarning: Failed to install dependencies');
167
+ console.warn('You can install them manually later with: npm install\n');
168
+ }
169
+ }
170
+ /**
171
+ * Show success message with next steps
172
+ */
173
+ function showSuccessMessage(projectName, skipInstall, duration) {
174
+ console.log(`\n✨ Success! Created ${projectName} in ${duration}s\n`);
175
+ console.log('Your documentation project is ready!\n');
176
+ console.log('Get started with:\n');
177
+ console.log(` cd ${projectName}`);
178
+ if (skipInstall) {
179
+ console.log(' npm install');
180
+ }
181
+ console.log(' npm run build');
182
+ console.log(' npm run dev\n');
183
+ console.log('Project structure:\n');
184
+ console.log(' content/ # Your markdown files');
185
+ console.log(' config/ # Configuration files');
186
+ console.log(' public/ # Static assets');
187
+ console.log(' dist/ # Generated site (after build)\n');
188
+ console.log('Next steps:\n');
189
+ console.log(' 1. Edit content in content/en/');
190
+ console.log(' 2. Customize navigation in config/sidenav.yaml');
191
+ console.log(' 3. Run npm run build to generate your site');
192
+ console.log(' 4. Run npm run dev to preview locally\n');
193
+ console.log('Happy documenting! 📚\n');
194
+ }
195
+ // Execute if run directly (not imported)
196
+ if (require.main === module) {
197
+ const args = process.argv.slice(2);
198
+ const projectName = args[0];
199
+ if (!projectName) {
200
+ console.error('Please specify a project name:');
201
+ console.error(' node dist/cli/create-app.js my-docs');
202
+ process.exit(1);
203
+ }
204
+ const options = {};
205
+ for (let i = 1; i < args.length; i++) {
206
+ const arg = args[i];
207
+ if (arg === '--skip-install') {
208
+ options.skipInstall = true;
209
+ }
210
+ else if (arg === '--skip-git') {
211
+ options.skipGit = true;
212
+ }
213
+ }
214
+ createApp(projectName, options);
215
+ }
216
+ //# sourceMappingURL=create-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../src/cli/create-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Dev command - Starts development server
3
+ * Serves the pre-built dist/ folder (MVP: no live reload, manual rebuild)
4
+ * Usage: mordoc dev [options]
5
+ */
6
+ export interface DevCommandOptions {
7
+ projectRoot?: string;
8
+ port?: number;
9
+ host?: string;
10
+ open?: boolean;
11
+ }
12
+ /**
13
+ * Execute the dev command
14
+ */
15
+ export declare function dev(options?: DevCommandOptions): Promise<void>;
16
+ /**
17
+ * Parse command-line arguments for dev command
18
+ */
19
+ export declare function parseDevArgs(args: string[]): DevCommandOptions;
20
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAyC9D"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ /**
3
+ * Dev command - Starts development server
4
+ * Serves the pre-built dist/ folder (MVP: no live reload, manual rebuild)
5
+ * Usage: mordoc dev [options]
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.dev = dev;
12
+ exports.parseDevArgs = parseDevArgs;
13
+ const path_1 = __importDefault(require("path"));
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const http_1 = __importDefault(require("http"));
16
+ const sirv_1 = __importDefault(require("sirv"));
17
+ /**
18
+ * Execute the dev command
19
+ */
20
+ async function dev(options = {}) {
21
+ try {
22
+ // Get project root
23
+ const projectRoot = options.projectRoot || process.cwd();
24
+ const distDir = path_1.default.join(projectRoot, 'dist');
25
+ // Check if dist/ exists
26
+ if (!fs_1.default.existsSync(distDir)) {
27
+ console.error('❌ Error: dist/ directory not found');
28
+ console.error('Please run "mordoc build" first to generate the static site.');
29
+ process.exit(1);
30
+ }
31
+ // Server configuration
32
+ const port = options.port || 3000;
33
+ const host = options.host || 'localhost';
34
+ // Create static file server using sirv
35
+ const serve = (0, sirv_1.default)(distDir, {
36
+ dev: true, // Development mode (no caching)
37
+ single: true, // SPA mode: serve index.html for 404s
38
+ etag: true,
39
+ });
40
+ // Create HTTP server
41
+ const server = http_1.default.createServer((req, res) => {
42
+ serve(req, res, () => {
43
+ // Fallback for 404s
44
+ res.statusCode = 404;
45
+ res.end('Not found');
46
+ });
47
+ });
48
+ // Start server
49
+ server.listen(port, host, () => {
50
+ console.log('\n🚀 Mordoc dev server started\n');
51
+ console.log(` Local: http://${host}:${port}`);
52
+ console.log(` Network: http://${getLocalIpAddress()}:${port}`);
53
+ console.log('\n📝 Note: This is serving the pre-built dist/ folder.');
54
+ console.log(' Run "mordoc build" to rebuild after making changes.\n');
55
+ console.log('Press Ctrl+C to stop the server');
56
+ });
57
+ // Handle server errors
58
+ server.on('error', (error) => {
59
+ if (error.code === 'EADDRINUSE') {
60
+ console.error(`❌ Error: Port ${port} is already in use`);
61
+ console.error(`Try a different port: mordoc dev --port ${port + 1}`);
62
+ }
63
+ else {
64
+ console.error('❌ Server error:', error.message);
65
+ }
66
+ process.exit(1);
67
+ });
68
+ // Graceful shutdown
69
+ process.on('SIGINT', () => {
70
+ console.log('\n\n👋 Shutting down dev server...');
71
+ server.close(() => {
72
+ console.log('✓ Server stopped');
73
+ process.exit(0);
74
+ });
75
+ });
76
+ process.on('SIGTERM', () => {
77
+ server.close(() => {
78
+ process.exit(0);
79
+ });
80
+ });
81
+ }
82
+ catch (error) {
83
+ console.error('\n❌ Failed to start dev server:');
84
+ console.error(error.message);
85
+ process.exit(1);
86
+ }
87
+ }
88
+ /**
89
+ * Parse command-line arguments for dev command
90
+ */
91
+ function parseDevArgs(args) {
92
+ const options = {};
93
+ for (let i = 0; i < args.length; i++) {
94
+ const arg = args[i];
95
+ switch (arg) {
96
+ case '--port':
97
+ case '-p':
98
+ const portValue = parseInt(args[++i], 10);
99
+ if (isNaN(portValue)) {
100
+ console.error('Error: Invalid port number');
101
+ process.exit(1);
102
+ }
103
+ options.port = portValue;
104
+ break;
105
+ case '--host':
106
+ case '-h':
107
+ options.host = args[++i];
108
+ break;
109
+ case '--open':
110
+ case '-o':
111
+ options.open = true;
112
+ break;
113
+ case '--help':
114
+ showDevHelp();
115
+ process.exit(0);
116
+ break;
117
+ default:
118
+ if (arg.startsWith('-')) {
119
+ console.warn(`Warning: Unknown option ${arg}`);
120
+ }
121
+ break;
122
+ }
123
+ }
124
+ return options;
125
+ }
126
+ /**
127
+ * Show help text for dev command
128
+ */
129
+ function showDevHelp() {
130
+ console.log(`
131
+ mordoc dev - Start development server
132
+
133
+ Usage:
134
+ mordoc dev [options]
135
+
136
+ Options:
137
+ -p, --port <number> Port number (default: 3000)
138
+ -h, --host <host> Host address (default: localhost)
139
+ -o, --open Open browser automatically
140
+ --help Show this help message
141
+
142
+ Note:
143
+ The dev server serves the pre-built dist/ folder.
144
+ Run "mordoc build" first to generate the site.
145
+ Rebuild manually after making changes.
146
+
147
+ Examples:
148
+ mordoc dev
149
+ mordoc dev --port 8080
150
+ mordoc dev --host 0.0.0.0
151
+ `);
152
+ }
153
+ /**
154
+ * Get local IP address for network access
155
+ */
156
+ function getLocalIpAddress() {
157
+ const { networkInterfaces } = require('os');
158
+ const nets = networkInterfaces();
159
+ for (const name of Object.keys(nets)) {
160
+ for (const net of nets[name]) {
161
+ // Skip internal and non-IPv4 addresses
162
+ if (net.family === 'IPv4' && !net.internal) {
163
+ return net.address;
164
+ }
165
+ }
166
+ }
167
+ return 'localhost';
168
+ }
169
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/cli/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Main App component - Sets up routing and providers
3
+ */
4
+ import { SiteConfig } from '../types/config';
5
+ import { ProcessedContent } from '../types/content';
6
+ interface AppProps {
7
+ siteConfig: SiteConfig;
8
+ initialContent: ProcessedContent | null;
9
+ isServerRender?: boolean;
10
+ }
11
+ /**
12
+ * Main App component
13
+ * Works on both server (SSR) and client (hydration + SPA)
14
+ */
15
+ declare function App({ siteConfig, initialContent, isServerRender }: AppProps): import("react/jsx-runtime").JSX.Element;
16
+ export default App;
17
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/client/App.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMpD,UAAU,QAAQ;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,iBAAS,GAAG,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,cAAsB,EAAE,EAAE,QAAQ,2CAY5E;AAmDD,eAAe,GAAG,CAAC"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const jsx_runtime_1 = require("react/jsx-runtime");
40
+ /**
41
+ * Main App component - Sets up routing and providers
42
+ */
43
+ const react_1 = __importStar(require("react"));
44
+ const react_router_dom_1 = require("react-router-dom");
45
+ const ConfigContext_1 = require("./contexts/ConfigContext");
46
+ const ContentContext_1 = require("./contexts/ContentContext");
47
+ const SearchContext_1 = require("./contexts/SearchContext");
48
+ const ThemeContext_1 = require("./contexts/ThemeContext");
49
+ const useContent_1 = require("./hooks/useContent");
50
+ const Layout_1 = __importDefault(require("../components/Layout"));
51
+ const ContentPage_1 = __importDefault(require("../components/ContentPage"));
52
+ const SearchModal_1 = __importDefault(require("../components/SearchModal"));
53
+ /**
54
+ * Main App component
55
+ * Works on both server (SSR) and client (hydration + SPA)
56
+ */
57
+ function App({ siteConfig, initialContent, isServerRender = false }) {
58
+ return ((0, jsx_runtime_1.jsx)(ConfigContext_1.ConfigProvider, { config: siteConfig, children: (0, jsx_runtime_1.jsx)(ThemeContext_1.ThemeProvider, { children: (0, jsx_runtime_1.jsx)(ContentContext_1.ContentProvider, { initialContent: initialContent, children: (0, jsx_runtime_1.jsx)(SearchContext_1.SearchProvider, { children: (0, jsx_runtime_1.jsx)(AppContent, { isServerRender: isServerRender }) }) }) }) }));
59
+ }
60
+ /**
61
+ * App content with routing (inside providers)
62
+ */
63
+ function AppContent({ isServerRender }) {
64
+ const location = (0, react_router_dom_1.useLocation)();
65
+ const { fetchContent } = (0, useContent_1.useContentData)();
66
+ const hasHydratedRef = react_1.default.useRef(false);
67
+ // Scroll to top on route change (unless there's a hash)
68
+ (0, react_1.useEffect)(() => {
69
+ if (!window.location.hash) {
70
+ // Check if using a scroll container or window
71
+ const scrollContainer = document.querySelector('.layout-main');
72
+ if (scrollContainer) {
73
+ scrollContainer.scrollTo(0, 0);
74
+ }
75
+ else {
76
+ window.scrollTo(0, 0);
77
+ }
78
+ }
79
+ }, [location.pathname]); // Runs whenever the path changes
80
+ // Fetch content when route changes (for SPA navigation)
81
+ (0, react_1.useEffect)(() => {
82
+ // Skip on server render
83
+ if (isServerRender)
84
+ return;
85
+ if (!hasHydratedRef.current) {
86
+ hasHydratedRef.current = true; // skip only the initial hydration run
87
+ return;
88
+ }
89
+ fetchContent(location.pathname);
90
+ }, [location.pathname, fetchContent, isServerRender]);
91
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Layout_1.default, { children: (0, jsx_runtime_1.jsx)(react_router_dom_1.Routes, { children: (0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { path: "*", element: (0, jsx_runtime_1.jsx)(ContentPage_1.default, {}) }) }) }), !isServerRender && (0, jsx_runtime_1.jsx)(SearchModal_1.default, {})] }));
92
+ }
93
+ exports.default = App;
94
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/client/App.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;GAEG;AAEH,+CAAyC;AACzC,uDAA8D;AAC9D,4DAA0D;AAC1D,8DAA4D;AAC5D,4DAA0D;AAC1D,0DAAwD;AAGxD,mDAAoD;AACpD,kEAA0C;AAC1C,4EAAoD;AACpD,4EAAoD;AAQpD;;;GAGG;AACH,SAAS,GAAG,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,GAAG,KAAK,EAAY;IAC3E,OAAO,CACL,uBAAC,8BAAc,IAAC,MAAM,EAAE,UAAU,YAChC,uBAAC,4BAAa,cACZ,uBAAC,gCAAe,IAAC,cAAc,EAAE,cAAc,YAC7C,uBAAC,8BAAc,cACb,uBAAC,UAAU,IAAC,cAAc,EAAE,cAAc,GAAI,GAC/B,GACD,GACJ,GACD,CAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,EAAE,cAAc,EAA+B;IACjE,MAAM,QAAQ,GAAG,IAAA,8BAAW,GAAE,CAAC;IAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,2BAAc,GAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE3C,wDAAwD;IACxD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1B,8CAA8C;YAC9C,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAuB,CAAC;YAErF,IAAI,eAAe,EAAE,CAAC;gBACpB,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iCAAiC;IAE1D,wDAAwD;IACxD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,wBAAwB;QACxB,IAAI,cAAc;YAAE,OAAO;QAE3B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC5B,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,sCAAsC;YACrE,OAAO;QACT,CAAC;QAED,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAEtD,OAAO,CACL,6DACE,uBAAC,gBAAM,cACL,uBAAC,yBAAM,cACL,uBAAC,wBAAK,IAAC,IAAI,EAAC,GAAG,EAAC,OAAO,EAAE,uBAAC,qBAAW,KAAG,GAAI,GACrC,GACF,EAGR,CAAC,cAAc,IAAI,uBAAC,qBAAW,KAAG,IAClC,CACJ,CAAC;AACJ,CAAC;AAED,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * ConfigContext - Provides site configuration to the app
3
+ */
4
+ import { ReactNode } from 'react';
5
+ import { SiteConfig } from '../../types/config';
6
+ interface ConfigContextValue {
7
+ config: SiteConfig;
8
+ }
9
+ interface ConfigProviderProps {
10
+ config: SiteConfig;
11
+ children: ReactNode;
12
+ }
13
+ /**
14
+ * ConfigProvider - Wraps the app with site configuration
15
+ */
16
+ export declare function ConfigProvider({ config, children }: ConfigProviderProps): import("react/jsx-runtime").JSX.Element;
17
+ /**
18
+ * useConfig - Hook to access site configuration
19
+ */
20
+ export declare function useConfig(): ConfigContextValue;
21
+ export {};
22
+ //# sourceMappingURL=ConfigContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigContext.d.ts","sourceRoot":"","sources":["../../../src/client/contexts/ConfigContext.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,UAAU,kBAAkB;IAC1B,MAAM,EAAE,UAAU,CAAC;CACpB;AAID,UAAU,mBAAmB;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAMvE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,kBAAkB,CAQ9C"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigProvider = ConfigProvider;
4
+ exports.useConfig = useConfig;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * ConfigContext - Provides site configuration to the app
8
+ */
9
+ const react_1 = require("react");
10
+ const ConfigContext = (0, react_1.createContext)(undefined);
11
+ /**
12
+ * ConfigProvider - Wraps the app with site configuration
13
+ */
14
+ function ConfigProvider({ config, children }) {
15
+ return ((0, jsx_runtime_1.jsx)(ConfigContext.Provider, { value: { config }, children: children }));
16
+ }
17
+ /**
18
+ * useConfig - Hook to access site configuration
19
+ */
20
+ function useConfig() {
21
+ const context = (0, react_1.useContext)(ConfigContext);
22
+ if (context === undefined) {
23
+ throw new Error('useConfig must be used within a ConfigProvider');
24
+ }
25
+ return context;
26
+ }
27
+ //# sourceMappingURL=ConfigContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigContext.js","sourceRoot":"","sources":["../../../src/client/contexts/ConfigContext.tsx"],"names":[],"mappings":";;AAqBA,wCAMC;AAKD,8BAQC;;AAxCD;;GAEG;AAEH,iCAAoE;AAOpE,MAAM,aAAa,GAAG,IAAA,qBAAa,EAAiC,SAAS,CAAC,CAAC;AAO/E;;GAEG;AACH,SAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAuB;IACtE,OAAO,CACL,uBAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,MAAM,EAAE,YACtC,QAAQ,GACc,CAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC;IAE1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ContentContext - Manages current page content and navigation state
3
+ */
4
+ import { ReactNode } from 'react';
5
+ import { ProcessedContent } from '../../types/content';
6
+ import { NavigationContext } from '../../types/navigation';
7
+ interface ContentContextValue {
8
+ currentContent: ProcessedContent | null;
9
+ setCurrentContent: (content: ProcessedContent) => void;
10
+ navigationContext: NavigationContext | null;
11
+ setNavigationContext: (navContext: NavigationContext) => void;
12
+ isLoading: boolean;
13
+ setIsLoading: (loading: boolean) => void;
14
+ error: Error | null;
15
+ setError: (error: Error | null) => void;
16
+ }
17
+ interface ContentProviderProps {
18
+ children: ReactNode;
19
+ initialContent?: ProcessedContent | null;
20
+ initialNavigationContext?: NavigationContext | null;
21
+ }
22
+ /**
23
+ * ContentProvider - Manages content and navigation state
24
+ */
25
+ export declare function ContentProvider({ children, initialContent, initialNavigationContext }: ContentProviderProps): import("react/jsx-runtime").JSX.Element;
26
+ /**
27
+ * useContent - Hook to access content state
28
+ */
29
+ export declare function useContent(): ContentContextValue;
30
+ export {};
31
+ //# sourceMappingURL=ContentContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentContext.d.ts","sourceRoot":"","sources":["../../../src/client/contexts/ContentContext.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAAuC,SAAS,EAAe,MAAM,OAAO,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,UAAU,mBAAmB;IAE3B,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,iBAAiB,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAGvD,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,oBAAoB,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAG9D,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAGzC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;CACzC;AAID,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,cAAc,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,wBAAwB,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,cAAqB,EACrB,wBAA+B,EAChC,EAAE,oBAAoB,2CA6BtB;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,mBAAmB,CAQhD"}