@cdmbase/wiki-browser 12.0.18-alpha.27 → 12.0.18-alpha.29

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 (79) hide show
  1. package/lib/components/markdown/CreateMarkdownDialog.d.ts +9 -0
  2. package/lib/components/markdown/CreateMarkdownDialog.d.ts.map +1 -0
  3. package/lib/components/markdown/CreateMarkdownDialog.js +222 -0
  4. package/lib/components/markdown/CreateMarkdownDialog.js.map +1 -0
  5. package/lib/components/markdown/GitHubSyncStatusDialog.d.ts +10 -0
  6. package/lib/components/markdown/GitHubSyncStatusDialog.d.ts.map +1 -0
  7. package/lib/components/markdown/GitHubSyncStatusDialog.js +72 -0
  8. package/lib/components/markdown/GitHubSyncStatusDialog.js.map +1 -0
  9. package/lib/components/markdown/MarkdownEditor.d.ts +11 -0
  10. package/lib/components/markdown/MarkdownEditor.d.ts.map +1 -0
  11. package/lib/components/markdown/MarkdownEditor.js +127 -0
  12. package/lib/components/markdown/MarkdownEditor.js.map +1 -0
  13. package/lib/compute.d.ts.map +1 -1
  14. package/lib/compute.js +13 -1
  15. package/lib/compute.js.map +1 -1
  16. package/lib/config/env-config.d.ts +4 -0
  17. package/lib/config/env-config.d.ts.map +1 -1
  18. package/lib/config/env-config.js +21 -1
  19. package/lib/config/env-config.js.map +1 -1
  20. package/lib/pages/Markdown/MarkdownPageLayout.d.ts.map +1 -1
  21. package/lib/pages/Markdown/MarkdownPageLayout.js +79 -15
  22. package/lib/pages/Markdown/MarkdownPageLayout.js.map +1 -1
  23. package/lib/pages/Markdown/MarkdownPageWithParams.d.ts.map +1 -1
  24. package/lib/pages/Markdown/MarkdownPageWithParams.js +310 -15
  25. package/lib/pages/Markdown/MarkdownPageWithParams.js.map +1 -1
  26. package/lib/routes/api.markdown.save.d.ts +29 -0
  27. package/lib/routes/api.markdown.save.d.ts.map +1 -0
  28. package/lib/routes/api.markdown.save.js +60 -0
  29. package/lib/routes/api.markdown.save.js.map +1 -0
  30. package/lib/routes.json +13 -0
  31. package/lib/templates/content/content-manifest.json +6287 -1113
  32. package/lib/templates/content/docs/adminide-modules/file-upload/assets/add-link-frontend.png +0 -0
  33. package/lib/templates/content/docs/adminide-modules/file-upload/assets/add-package-backend.png +0 -0
  34. package/lib/templates/content/docs/adminide-modules/file-upload/assets/add-to-backend-module.png +0 -0
  35. package/lib/templates/content/docs/adminide-modules/file-upload/assets/add-upload-client-frontend.png +0 -0
  36. package/lib/templates/content/docs/adminide-modules/file-upload/assets/modify-upload-false-server.png +0 -0
  37. package/lib/templates/content/docs/adminide-modules/file-upload/setup.md +535 -276
  38. package/lib/templates/content/docs/tests/github-sync-test.md +16 -0
  39. package/lib/utils/docsNavigation.d.ts +3 -2
  40. package/lib/utils/docsNavigation.d.ts.map +1 -1
  41. package/lib/utils/docsNavigation.js +121 -7
  42. package/lib/utils/docsNavigation.js.map +1 -1
  43. package/lib/utils/githubSync.d.ts +65 -0
  44. package/lib/utils/githubSync.d.ts.map +1 -0
  45. package/lib/utils/githubSync.js +206 -0
  46. package/lib/utils/githubSync.js.map +1 -0
  47. package/lib/utils/localFileSync.server.d.ts +44 -0
  48. package/lib/utils/localFileSync.server.d.ts.map +1 -0
  49. package/lib/utils/localFileSync.server.js +41 -0
  50. package/lib/utils/localFileSync.server.js.map +1 -0
  51. package/lib/utils/markdownLoader.d.ts +5 -1
  52. package/lib/utils/markdownLoader.d.ts.map +1 -1
  53. package/lib/utils/markdownLoader.js +78 -3
  54. package/lib/utils/markdownLoader.js.map +1 -1
  55. package/package.json +3 -3
  56. package/lib/templates/content/docs/adminide-modules/account/index.md +0 -14
  57. package/lib/templates/content/docs/adminide-modules/billing/payments/index.md +0 -14
  58. package/lib/templates/content/docs/adminide-modules/billing/payments/stripe/index.md +0 -14
  59. package/lib/templates/content/docs/adminide-modules/file-upload/index.md +0 -16
  60. package/lib/templates/content/docs/adminide-modules/preferences/index.md +0 -28
  61. package/lib/templates/content/docs/chrome-extension/index.md +0 -14
  62. package/lib/templates/content/docs/contributing/folder-setup/index.md +0 -30
  63. package/lib/templates/content/docs/contributing/index.md +0 -60
  64. package/lib/templates/content/docs/contributing/react/index.md +0 -14
  65. package/lib/templates/content/docs/contributing/third-party/index.md +0 -18
  66. package/lib/templates/content/docs/devops/index.md +0 -14
  67. package/lib/templates/content/docs/error-handler/index.md +0 -16
  68. package/lib/templates/content/docs/feature-api/feature-browser/index.md +0 -22
  69. package/lib/templates/content/docs/feature-api/feature-mobile/index.md +0 -18
  70. package/lib/templates/content/docs/feature-api/feature-server/index.md +0 -40
  71. package/lib/templates/content/docs/feature-api/index.md +0 -18
  72. package/lib/templates/content/docs/graphql/index.md +0 -14
  73. package/lib/templates/content/docs/help/index.md +0 -14
  74. package/lib/templates/content/docs/mailing/index.md +0 -14
  75. package/lib/templates/content/docs/mobile/index.md +0 -14
  76. package/lib/templates/content/docs/organization/index.md +0 -20
  77. package/lib/templates/content/docs/security/index.md +0 -18
  78. package/lib/templates/content/docs/server-side/index.md +0 -14
  79. package/lib/templates/content/docs/tests/index.md +0 -18
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface CreateMarkdownDialogProps {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ onCreate: (categoryId: string, slug: string, title: string, content: string, isNewCategory: boolean, categoryTitle?: string) => Promise<void>;
6
+ }
7
+ export declare const CreateMarkdownDialog: React.FC<CreateMarkdownDialogProps>;
8
+ export {};
9
+ //# sourceMappingURL=CreateMarkdownDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateMarkdownDialog.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/CreateMarkdownDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,UAAU,yBAAyB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CACN,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,aAAa,CAAC,EAAE,MAAM,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA8PpE,CAAC"}
@@ -0,0 +1,222 @@
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useState,useEffect}from'react';import {getAllCategoriesMetadataSync}from'../../utils/markdownLoader.js';const CreateMarkdownDialog = ({
2
+ isOpen,
3
+ onClose,
4
+ onCreate
5
+ }) => {
6
+ const [categoryId, setCategoryId] = useState('');
7
+ const [slug, setSlug] = useState('');
8
+ const [title, setTitle] = useState('');
9
+ const [isCreating, setIsCreating] = useState(false);
10
+ const [error, setError] = useState(null);
11
+ const [categories, setCategories] = useState([]);
12
+ const [isNewCategory, setIsNewCategory] = useState(false);
13
+ const [newCategoryName, setNewCategoryName] = useState('');
14
+ const [newCategoryId, setNewCategoryId] = useState('');
15
+ useEffect(() => {
16
+ if (isOpen) {
17
+ const cats = getAllCategoriesMetadataSync();
18
+ setCategories(cats);
19
+ if (cats.length > 0 && !categoryId && !isNewCategory) {
20
+ setCategoryId(cats[0].id);
21
+ }
22
+ }
23
+ }, [isOpen]);
24
+ // Generate category ID from category name
25
+ useEffect(() => {
26
+ if (newCategoryName && isNewCategory) {
27
+ const generatedId = newCategoryName.replace(/[^a-zA-Z0-9]+/g, '').replace(/^[0-9]+/, '') ||
28
+ // Remove leading numbers
29
+ newCategoryName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
30
+ setNewCategoryId(generatedId);
31
+ }
32
+ }, [newCategoryName, isNewCategory]);
33
+ // Generate slug from title
34
+ useEffect(() => {
35
+ if (title && !slug) {
36
+ const generatedSlug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
37
+ setSlug(generatedSlug);
38
+ }
39
+ }, [title, slug]);
40
+ const handleCreate = async () => {
41
+ const finalCategoryId = isNewCategory ? newCategoryId : categoryId;
42
+ if (!finalCategoryId || !slug || !title) {
43
+ setError('Please fill in all required fields');
44
+ return;
45
+ }
46
+ if (isNewCategory && !newCategoryName) {
47
+ setError('Please enter a category name');
48
+ return;
49
+ }
50
+ // Validate slug format
51
+ if (!/^[a-z0-9-]+$/.test(slug)) {
52
+ setError('Slug can only contain lowercase letters, numbers, and hyphens');
53
+ return;
54
+ }
55
+ // Validate category ID format (if new category)
56
+ if (isNewCategory && !/^[a-zA-Z0-9-]+$/.test(newCategoryId)) {
57
+ setError('Category ID can only contain letters, numbers, and hyphens');
58
+ return;
59
+ }
60
+ // Check if category ID already exists
61
+ if (isNewCategory && categories.some(cat => cat.id === newCategoryId)) {
62
+ setError('A category with this ID already exists');
63
+ return;
64
+ }
65
+ setIsCreating(true);
66
+ setError(null);
67
+ try {
68
+ // Create default markdown content with frontmatter
69
+ const content = `---
70
+ meta:
71
+ title: ${title}
72
+ description: ${title}
73
+ date: '${new Date().toISOString().split('T')[0]}T00:00:00'
74
+ updated: '${new Date().toISOString().split('T')[0]}T00:00:00'
75
+ excerpt: ${title} ...
76
+ headers:
77
+ Cache-Control: no-cache
78
+ ---
79
+
80
+ # ${title}
81
+
82
+ Start writing your content here...
83
+
84
+ `;
85
+ await onCreate(finalCategoryId, slug, title, content, isNewCategory, isNewCategory ? newCategoryName : undefined);
86
+ // Reset form
87
+ setIsNewCategory(false);
88
+ setNewCategoryName('');
89
+ setNewCategoryId('');
90
+ setCategoryId(categories.length > 0 ? categories[0].id : '');
91
+ setSlug('');
92
+ setTitle('');
93
+ onClose();
94
+ } catch (err) {
95
+ setError(err.message || 'Failed to create page');
96
+ } finally {
97
+ setIsCreating(false);
98
+ }
99
+ };
100
+ if (!isOpen) return null;
101
+ return jsx("div", {
102
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
103
+ onClick: onClose,
104
+ children: jsxs("div", {
105
+ className: "bg-background border border-gray-200 dark:border-gray-800 rounded-lg shadow-xl w-full max-w-md p-6",
106
+ onClick: e => e.stopPropagation(),
107
+ children: [jsx("h2", {
108
+ className: "text-xl font-semibold mb-4",
109
+ children: "Create New Markdown Page"
110
+ }), jsxs("div", {
111
+ className: "space-y-4",
112
+ children: [jsxs("div", {
113
+ children: [jsxs("div", {
114
+ className: "flex items-center justify-between mb-2",
115
+ children: [jsxs("label", {
116
+ className: "block text-sm font-medium",
117
+ children: ["Category ", jsx("span", {
118
+ className: "text-red-500",
119
+ children: "*"
120
+ })]
121
+ }), jsx("button", {
122
+ type: "button",
123
+ onClick: () => {
124
+ setIsNewCategory(!isNewCategory);
125
+ if (!isNewCategory) {
126
+ setCategoryId('');
127
+ setNewCategoryName('');
128
+ setNewCategoryId('');
129
+ } else {
130
+ setNewCategoryName('');
131
+ }
132
+ },
133
+ className: "text-xs text-primary hover:underline",
134
+ children: isNewCategory ? 'Select existing' : '+ Create new category'
135
+ })]
136
+ }), isNewCategory ? jsxs("div", {
137
+ className: "space-y-2",
138
+ children: [jsx("input", {
139
+ type: "text",
140
+ value: newCategoryName,
141
+ onChange: e => setNewCategoryName(e.target.value),
142
+ placeholder: "My New Category",
143
+ className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-700 rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary"
144
+ }), jsxs("div", {
145
+ children: [jsx("input", {
146
+ type: "text",
147
+ value: newCategoryId,
148
+ onChange: e => setNewCategoryId(e.target.value),
149
+ placeholder: "my-new-category",
150
+ className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-700 rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary font-mono text-sm"
151
+ }), jsx("p", {
152
+ className: "mt-1 text-xs text-gray-500 dark:text-gray-400",
153
+ children: "Category ID (auto-generated from name)"
154
+ })]
155
+ })]
156
+ }) : jsxs("select", {
157
+ value: categoryId,
158
+ onChange: e => setCategoryId(e.target.value),
159
+ className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-700 rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary",
160
+ children: [jsx("option", {
161
+ value: "",
162
+ children: "Select a category"
163
+ }), categories.map(cat => jsx("option", {
164
+ value: cat.id,
165
+ children: cat.title
166
+ }, cat.id))]
167
+ })]
168
+ }), jsxs("div", {
169
+ children: [jsxs("label", {
170
+ className: "block text-sm font-medium mb-1",
171
+ children: ["Title ", jsx("span", {
172
+ className: "text-red-500",
173
+ children: "*"
174
+ })]
175
+ }), jsx("input", {
176
+ type: "text",
177
+ value: title,
178
+ onChange: e => setTitle(e.target.value),
179
+ placeholder: "My New Page",
180
+ className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-700 rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary"
181
+ })]
182
+ }), jsxs("div", {
183
+ children: [jsxs("label", {
184
+ className: "block text-sm font-medium mb-1",
185
+ children: ["Slug ", jsx("span", {
186
+ className: "text-red-500",
187
+ children: "*"
188
+ })]
189
+ }), jsx("input", {
190
+ type: "text",
191
+ value: slug,
192
+ onChange: e => setSlug(e.target.value),
193
+ placeholder: "my-new-page",
194
+ className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-700 rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary font-mono text-sm"
195
+ }), jsx("p", {
196
+ className: "mt-1 text-xs text-gray-500 dark:text-gray-400",
197
+ children: "URL-friendly identifier (auto-generated from title)"
198
+ })]
199
+ }), error && jsx("div", {
200
+ className: "p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-md",
201
+ children: jsx("p", {
202
+ className: "text-sm text-red-600 dark:text-red-400",
203
+ children: error
204
+ })
205
+ })]
206
+ }), jsxs("div", {
207
+ className: "flex justify-end gap-2 mt-6",
208
+ children: [jsx("button", {
209
+ onClick: onClose,
210
+ disabled: isCreating,
211
+ className: "px-4 py-2 text-sm rounded-md bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 disabled:opacity-50",
212
+ children: "Cancel"
213
+ }), jsx("button", {
214
+ onClick: handleCreate,
215
+ disabled: isCreating || !isNewCategory && !categoryId || isNewCategory && !newCategoryId || !slug || !title,
216
+ className: "px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed",
217
+ children: isCreating ? 'Creating...' : 'Create'
218
+ })]
219
+ })]
220
+ })
221
+ });
222
+ };export{CreateMarkdownDialog};//# sourceMappingURL=CreateMarkdownDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateMarkdownDialog.js","sources":["../../../src/components/markdown/CreateMarkdownDialog.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ interface GitHubSyncStatusDialogProps {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ status: 'success' | 'error' | null;
6
+ message: string;
7
+ }
8
+ export declare const GitHubSyncStatusDialog: React.FC<GitHubSyncStatusDialogProps>;
9
+ export {};
10
+ //# sourceMappingURL=GitHubSyncStatusDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubSyncStatusDialog.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/GitHubSyncStatusDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,2BAA2B;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA+ExE,CAAC"}
@@ -0,0 +1,72 @@
1
+ import {jsx,jsxs}from'react/jsx-runtime';const GitHubSyncStatusDialog = ({
2
+ isOpen,
3
+ onClose,
4
+ status,
5
+ message
6
+ }) => {
7
+ if (!isOpen) return null;
8
+ const isSuccess = status === 'success';
9
+ const isError = status === 'error';
10
+ return jsx("div", {
11
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
12
+ onClick: onClose,
13
+ children: jsxs("div", {
14
+ className: "bg-background border border-gray-200 dark:border-gray-800 rounded-lg shadow-xl w-full max-w-md p-6",
15
+ onClick: e => e.stopPropagation(),
16
+ children: [jsxs("div", {
17
+ className: "flex items-start gap-4",
18
+ children: [isSuccess && jsx("div", {
19
+ className: "flex-shrink-0",
20
+ children: jsx("div", {
21
+ className: "w-10 h-10 rounded-full bg-green-100 dark:bg-green-900/20 flex items-center justify-center",
22
+ children: jsx("svg", {
23
+ className: "w-6 h-6 text-green-600 dark:text-green-400",
24
+ fill: "none",
25
+ stroke: "currentColor",
26
+ viewBox: "0 0 24 24",
27
+ children: jsx("path", {
28
+ strokeLinecap: "round",
29
+ strokeLinejoin: "round",
30
+ strokeWidth: 2,
31
+ d: "M5 13l4 4L19 7"
32
+ })
33
+ })
34
+ })
35
+ }), isError && jsx("div", {
36
+ className: "flex-shrink-0",
37
+ children: jsx("div", {
38
+ className: "w-10 h-10 rounded-full bg-red-100 dark:bg-red-900/20 flex items-center justify-center",
39
+ children: jsx("svg", {
40
+ className: "w-6 h-6 text-red-600 dark:text-red-400",
41
+ fill: "none",
42
+ stroke: "currentColor",
43
+ viewBox: "0 0 24 24",
44
+ children: jsx("path", {
45
+ strokeLinecap: "round",
46
+ strokeLinejoin: "round",
47
+ strokeWidth: 2,
48
+ d: "M6 18L18 6M6 6l12 12"
49
+ })
50
+ })
51
+ })
52
+ }), jsxs("div", {
53
+ className: "flex-1",
54
+ children: [jsx("h3", {
55
+ className: "text-lg font-semibold mb-2",
56
+ children: isSuccess ? 'Sync Successful' : isError ? 'Sync Failed' : 'Syncing...'
57
+ }), jsx("p", {
58
+ className: `text-sm ${isSuccess ? 'text-green-600 dark:text-green-400' : isError ? 'text-red-600 dark:text-red-400' : 'text-gray-600 dark:text-gray-400'}`,
59
+ children: message
60
+ })]
61
+ })]
62
+ }), jsx("div", {
63
+ className: "flex justify-end mt-6",
64
+ children: jsx("button", {
65
+ onClick: onClose,
66
+ className: "px-4 py-2 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90",
67
+ children: "OK"
68
+ })
69
+ })]
70
+ })
71
+ });
72
+ };export{GitHubSyncStatusDialog};//# sourceMappingURL=GitHubSyncStatusDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubSyncStatusDialog.js","sources":["../../../src/components/markdown/GitHubSyncStatusDialog.tsx"],"sourcesContent":[null],"names":[],"mappings":"yCASO,MAAM,sBAAsB,GAA0C,CAAC;AAC1E,EAAA,MAAI;AAAS,EAAA,OAAA;AAEb,EAAA,MAAA;AACA,EAAA;AAEA,CAAA,KAAA;AAoDgC,EAAA,IAAA,CAAA,MAAA,EAAA,OAAA,IAAA;AACA,EAAA,MAAA,SAAA,GAAA,MAAA,KAAA,SAAA;AACE,EAAA,MAAA,OAAA,GAAA,MAAA,KAAA,OAAA;;AAmBtC,IAAE,SAAA,EAAA,iEAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface MarkdownEditorProps {
3
+ initialContent: string;
4
+ onSave?: (content: string) => Promise<void>;
5
+ onCancel?: () => void;
6
+ filePath?: string;
7
+ className?: string;
8
+ }
9
+ export declare const MarkdownEditor: React.FC<MarkdownEditorProps>;
10
+ export {};
11
+ //# sourceMappingURL=MarkdownEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../../../src/components/markdown/MarkdownEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,UAAU,mBAAmB;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAoLxD,CAAC"}
@@ -0,0 +1,127 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {marked}from'marked';import {cn}from'../../utils/index.js';const MarkdownEditor = ({
2
+ initialContent,
3
+ onSave,
4
+ onCancel,
5
+ filePath,
6
+ className
7
+ }) => {
8
+ const [content, setContent] = useState(initialContent);
9
+ const [preview, setPreview] = useState('');
10
+ const [isSaving, setIsSaving] = useState(false);
11
+ const [error, setError] = useState(null);
12
+ const [viewMode, setViewMode] = useState('split');
13
+ const textareaRef = useRef(null);
14
+ const previewRef = useRef(null);
15
+ // Update preview when content changes
16
+ useEffect(() => {
17
+ const updatePreview = async () => {
18
+ try {
19
+ const html = await marked.parse(content);
20
+ setPreview(html);
21
+ } catch (err) {
22
+ console.error('Error parsing markdown:', err);
23
+ setError('Failed to parse markdown');
24
+ }
25
+ };
26
+ const timeoutId = setTimeout(updatePreview, 300); // Debounce
27
+ return () => clearTimeout(timeoutId);
28
+ }, [content]);
29
+ // Sync scroll between editor and preview
30
+ const handleScroll = e => {
31
+ if (viewMode === 'split' && previewRef.current) {
32
+ const scrollPercentage = e.currentTarget.scrollTop / (e.currentTarget.scrollHeight - e.currentTarget.clientHeight);
33
+ const previewScroll = scrollPercentage * (previewRef.current.scrollHeight - previewRef.current.clientHeight);
34
+ previewRef.current.scrollTop = previewScroll;
35
+ }
36
+ };
37
+ const handleSave = async () => {
38
+ if (!onSave) return;
39
+ setIsSaving(true);
40
+ setError(null);
41
+ try {
42
+ await onSave(content);
43
+ } catch (err) {
44
+ setError(err.message || 'Failed to save content');
45
+ } finally {
46
+ setIsSaving(false);
47
+ }
48
+ };
49
+ const handleCancel = () => {
50
+ setContent(initialContent);
51
+ setError(null);
52
+ if (onCancel) {
53
+ onCancel();
54
+ }
55
+ };
56
+ const hasChanges = content !== initialContent;
57
+ return jsxs("div", {
58
+ className: cn('flex flex-col h-full', className),
59
+ children: [jsxs("div", {
60
+ className: "flex items-center justify-between p-4 border-b border-gray-200 dark:border-gray-800 bg-background",
61
+ children: [jsxs("div", {
62
+ className: "flex items-center gap-2",
63
+ children: [jsx("button", {
64
+ onClick: () => setViewMode('edit'),
65
+ className: cn('px-3 py-1.5 text-sm rounded-md transition-colors', viewMode === 'edit' ? 'bg-primary text-primary-foreground' : 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700'),
66
+ children: "Edit"
67
+ }), jsx("button", {
68
+ onClick: () => setViewMode('preview'),
69
+ className: cn('px-3 py-1.5 text-sm rounded-md transition-colors', viewMode === 'preview' ? 'bg-primary text-primary-foreground' : 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700'),
70
+ children: "Preview"
71
+ }), jsx("button", {
72
+ onClick: () => setViewMode('split'),
73
+ className: cn('px-3 py-1.5 text-sm rounded-md transition-colors', viewMode === 'split' ? 'bg-primary text-primary-foreground' : 'bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700'),
74
+ children: "Split"
75
+ })]
76
+ }), jsxs("div", {
77
+ className: "flex items-center gap-2",
78
+ children: [filePath && jsx("span", {
79
+ className: "text-sm text-gray-500 dark:text-gray-400 px-2",
80
+ children: filePath
81
+ }), hasChanges && jsx("span", {
82
+ className: "text-sm text-yellow-600 dark:text-yellow-400 px-2",
83
+ children: "Unsaved changes"
84
+ }), onCancel && jsx("button", {
85
+ onClick: handleCancel,
86
+ disabled: isSaving,
87
+ className: "px-4 py-1.5 text-sm rounded-md bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 disabled:opacity-50",
88
+ children: "Cancel"
89
+ }), onSave && jsx("button", {
90
+ onClick: handleSave,
91
+ disabled: isSaving || !hasChanges,
92
+ className: "px-4 py-1.5 text-sm rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed",
93
+ children: isSaving ? 'Saving...' : 'Save'
94
+ })]
95
+ })]
96
+ }), error && jsx("div", {
97
+ className: "p-3 bg-red-50 dark:bg-red-900/20 border-b border-red-200 dark:border-red-800",
98
+ children: jsx("p", {
99
+ className: "text-sm text-red-600 dark:text-red-400",
100
+ children: error
101
+ })
102
+ }), jsxs("div", {
103
+ className: "flex-1 flex overflow-hidden",
104
+ children: [(viewMode === 'edit' || viewMode === 'split') && jsx("div", {
105
+ className: cn('flex flex-col border-r border-gray-200 dark:border-gray-800', viewMode === 'split' ? 'w-1/2' : 'w-full'),
106
+ children: jsx("textarea", {
107
+ ref: textareaRef,
108
+ value: content,
109
+ onChange: e => setContent(e.target.value),
110
+ onScroll: handleScroll,
111
+ className: "flex-1 w-full p-4 font-mono text-sm bg-background text-foreground border-0 resize-none focus:outline-none",
112
+ placeholder: "Start writing your markdown here...",
113
+ spellCheck: false
114
+ })
115
+ }), (viewMode === 'preview' || viewMode === 'split') && jsx("div", {
116
+ ref: previewRef,
117
+ className: cn('flex-1 overflow-y-auto p-4 bg-background', viewMode === 'split' ? 'w-1/2' : 'w-full'),
118
+ children: jsx("div", {
119
+ className: "prose dark:prose-invert max-w-none",
120
+ dangerouslySetInnerHTML: {
121
+ __html: preview
122
+ }
123
+ })
124
+ })]
125
+ })]
126
+ });
127
+ };export{MarkdownEditor};//# sourceMappingURL=MarkdownEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownEditor.js","sources":["../../../src/components/markdown/MarkdownEditor.tsx"],"sourcesContent":[null],"names":[],"mappings":"yJAYa,MAAA,cAAc,GAAkC,CAAC;gBAO5C;QACR;UACA;UACA;;AAEN,CAAA,KAAA;AACA,EAAA,MAAA,CAAA,mBAAmB,CAAM,GAAiB,QAAM,CAAA,cAAA,CAAA;QAEV,CAAA,OAAA,EAAA,UAAA,CAAA,GAAA,QAAA,CAAA,EAAA,CAAA;QAC7B,CAAA,QAAI,EAAE,WAAA,CAAA,GAAA,QAAA,CAAA,KAAA,CAAA;AACX,EAAA,MAAA,CAAA,KAAM,EAAa,QAAA,CAAA,GAAA,QAAQ,CAAA,IAAM,CAAA;AAC7B,EAAA,MAAA,CAAA,QAAK,EAAA,WAAA,CAAA,GAAA,QAAA,CAAA,OAAA,CAAA;mBACK,GAAA,OAAO,IAAM,CAAA;kBACT,GAAA,MAAC,CAAI,IAAC,CAAC;;YACnB,MAAO;AACL,IAAA,MAAA,aAAO,GAAM;;cAEhB,IAAA,GAAA,MAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AACL,QAAA,UAAE,CAAA,IAAA,CAAA;QAEF,OAAM,GAAA,EAAA;AACN,QAAA,OAAO,MAAM,0BAAwB,EAAA,GAAA,CAAA;AACzC,QAAI,QAAQ,CAAC,0BAAC,CAAA;;AAGd,KAAA;UACQ,SAAA,aAAoB,CAAA,aAAc,EAAC,GAAA,CAAA,CAAA;iBAC7B,YAAA,CAAA,SACA;AACN,GAAA,EAAA,CAAA,OAAA,CAAA,CAAA;AAEA;QACJ,YAAC,GAAA,CAAA,IAAA;AACL,IAAA,IAAE,QAAA,KAAA,OAAA,IAAA,UAAA,CAAA,OAAA,EAAA;AAEF,MAAA,MAAgB,gBAAQ,GAAA,CAAI,CAAE,aAAA,CAAA,SAAA,IAAA,CAAA,CAAA,aAAA,CAAA,YAAA,GAAA,CAAA,CAAA,aAAA,CAAA,YAAA,CAAA;AAC1B,MAAA,MAAI,aAAO,GAAA,gBAAA,IAAA,UAAA,CAAA,OAAA,CAAA,YAAA,GAAA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA;gBAAS,CAAA,OAAA,CAAA,SAAA,GAAA,aAAA;;;AAKpB,EAAA,MAAA,UAAK,GAAA,YAAA;AACD,IAAA,IAAA,CAAA,MAAA,EAAA;eACH,CAAA,IAAA,CAAA;YAAQ,CAAA,IAAA,CAAQ;AACb,IAAA,IAAA;YACH,MAAA,CAAA,OAAA,CAAA;gBAAS,EAAC;cACI,CAAA,GAAA,CAAA,OAAM,IAAC,wBAAC,CAAA;cACtB;AACL,MAAE,WAAA,CAAA,KAAA,CAAA;;;QAIE,YAAa,GAAE,MAAA;cACX,CAAA,cAAW,CAAA;AACX,IAAA,QAAA,CAAA,IAAA,CAAA;QACJ,QAAC,EAAA;AACL,MAAE,QAAA,EAAA;AAEF;AAEA,GAAA;AAU4B,EAAA,MAAA,UAAA,GAAA,OAAA,KAAA,cAAsC;;AAWtC,IAAA,SAAA,EAAA,EAAA,CAAA,sBAAsC,EAAA,SAAA,CAAA;;AAWtC,MAAA,SAAA,EAAA,mGAAsC;;AAiFtE,QAAE,SAAA,EAAA,yBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../src/compute.ts"],"names":[],"mappings":"AAmIA,QAAA,MAAM,cAAc,0CAAkC,CAAC;AACvD,QAAA,MAAM,aAAa,0CAAiC,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../src/compute.ts"],"names":[],"mappings":"AA+IA,QAAA,MAAM,cAAc,0CAAkC,CAAC;AACvD,QAAA,MAAM,aAAa,0CAAiC,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
package/lib/compute.js CHANGED
@@ -8,7 +8,8 @@ const browseWikikRoutes = {
8
8
  HELP_ARTICLE: '/help/:categoryId/:articleSlug',
9
9
  HELP_CENTER: '/help',
10
10
  VERIFY_USER: '/verify-user',
11
- ADMIN_APPROVAL: '/admin-approval'
11
+ ADMIN_APPROVAL: '/admin-approval',
12
+ SAVE_MARKDOWN: '/api/markdown/save'
12
13
  };
13
14
  // Generate routes dynamically from categoryMetadata
14
15
  const generateRoutesFromCategories = categories => {
@@ -119,6 +120,17 @@ const wikiDocsPage = [{
119
120
  hideInMenu: true,
120
121
  componentPath: "@cdmbase/wiki-browser/lib/pages/Help/HelpPage.js",
121
122
  hasComponent: true
123
+ }, {
124
+ key: 'docs.save.markdown',
125
+ path: `${config.LAYOUT_ROOT}${browseWikikRoutes.SAVE_MARKDOWN}`,
126
+ auth: false,
127
+ exact: true,
128
+ hasAction: true,
129
+ position: IMenuPosition.Lower,
130
+ hideInMenu: true,
131
+ isResourceRoute: true,
132
+ componentPath: "@cdmbase/wiki-browser/lib/routes/api.markdown.save.js",
133
+ hasAction: true
122
134
  }
123
135
  // Dynamically generated routes from categoryMetadata
124
136
  // Article routes are generated first (more specific), then category routes (less specific)
@@ -1 +1 @@
1
- {"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":[null],"names":[],"mappings":"wQAOA,MAAM,iBAAiB,GAAG;AACtB,EAAA,YAAA,EAAY,GAAK;AACjB,EAAA,aAAA,EAAa,mBAAqB;AAClC,EAAA,YAAA,EAAY,gCAAkC;AAC9C,EAAA,WAAA,EAAW,OAAS;AACpB,EAAA,WAAA,EAAW,cAAgB;AAC3B,EAAA,cAAA,EAAc;CACjB;AAED;AACA,MAAM,4BAA4B,GAAG,UAAC,IAAiC;QAC7D,MAAA,GAAgB,EAAA;MAClB,eAAA,GAAkB,CAAA;AAEtB,EAAA,UAAA,CAAA,OAAkB,CAAA,QAAE;;UAEV,CAAA,IAAC;YACH,QAAc,CAAA,KAAA;AACd,MAAA,GAAA,EAAA,CAAA,KAAK,EAAA,QAAgB,CAAA,EAAA,CAAA,CAAA;YACrB,CAAI,EAAA,MAAK,CAAM,kBAAqB,EAAA,QAAA,CAAA,EAAA,CAAA,CAAA;;YAEpC,KAAI;;AAEJ,MAAA,QAAA,EAAA,aAAW,CAAA,KAAA;aACH,IAAA;AACX,MAAA,QAAE,EAAA,eAAA;;;YAGC,CAAM,gBAAM,CAAA,CAAA,OAAA,EAAA,KAAA,KAAA;iBACJ,CAAA;qBACC;AACL,QAAA,GAAA,EAAA,CAAA,KAAA,EAAM,QAAS,CAAA,EAAC,CAAW,CAAA,EAAA,OAAA,CAAA,IAAA,CAAA,CAAA;iBACb,MAAA,CAAA,WAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,CAAA,EAAA,OAAA,CAAA,IAAA,CAAA,CAAA;;mBAEN;AACR;gBACA,EAAQ,aAAO,CAAA,KAAI;AACtB,QAAA,KAAA,EAAE,IAAA;AACP,QAAA,QAAG,EAAA,KAAA,GAAA;AACP,OAAG,CAAA;AAEH,KAAA,CAAA;AACJ,GAAE,CAAA;AAEF,EAAqC,OAAA,MAAA;AACrC,CAAA;AACA;AAEA,MAAM,aAAsB,4BAAA,EAAA;AACxB,4BAAA,CAAA,UAAA;AACI,MAAA,YAAmB,GAAA,CAAA;AACnB,EAAA,IAAA,EAAA,aAAkB;oBACH;AACf,EAAA,IAAA,EAAA,CAAA,EAAA,MAAW,CAAA,WAAA,CAAA,EAAA,iBAAA,CAAA,WAAA,CAAA,CAAA;QACX,KAAQ;AACR,EAAA,QAAA,EAAA,aAAW,CAAA,KAAA;AACX,EAAA,KAAA,EAAA,IAAA;AACA,EAAA,UAAA,EAAA;AACA,EAAA,SAAA,EAAA,MAAW,OAAA,6BAAA,CAAA;AACd,EAAA,QAAA,EAAA;AACD,CAAA,EAAA;AACI,EAAA,IAAA,EAAA,gBAAsB;AACtB,EAAA,GAAA,EAAA,gBAAqB;QACrB,CAAI,EAAA,MAAK,CAAM,+BAAe,CAAA,cAAkB,CAAA,CAAA;AAChD,EAAA,IAAA,EAAA;UACQ,EAAA,aAAe,CAAA,KAAA;AACvB,EAAA,KAAA,EAAA,IAAK;AACL,EAAA,UAAA,EAAA,IAAU;AACV,EAAA,SAAA,EAAA,MAAW,OAAY;AACvB,EAAA,QAAA,EAAA;AACH,CAAA,EAAA;AACD,EAAA,IAAA,EAAA,cAAA;AACI,EAAA,GAAA,EAAA,cAAoB;AACpB,EAAA,IAAA,EAAA,CAAA,EAAG,MAAgB,CAAA,WAAA,CAAA,EAAA,iBAAA,CAAA,YAAA,CAAA,CAAA;QACnB,KAAI;AACJ,EAAA,QAAA,EAAI,aAAO,CAAA,KAAA;SACH,IAAA;AACR,EAAA,UAAA,MAAW;AACX,EAAA,SAAA,EAAA,aAAgB,0BAAA,CAAA;AAChB,EAAA,KAAA,EAAA,IAAA;AACA,EAAA,QAAA,EAAA;AACA,CAAA,EAAA;AACH,EAAA,IAAA,EAAA,eAAA;AACD,EAAA,GAAA,EAAA,oBAAA;AACI,EAAA,IAAA,EAAA,CAAA,EAAA,MAAqB,CAAA,WAAA,CAAA,EAAA,iBAAA,CAAA,aAAA,CAAA,CAAA;AACrB;QACA,KAAI;;UAEA,EAAA,aAAmE,CAAA,KAAA;SAC/D,IAAA;AACR,EAAA,UAAA,MAAW;AACX,EAAA,QAAA,EAAA,CAAA;AACA,EAAA,SAAA,EAAA,MAAW,OAAA,qCAAA;AACX,CAAA,EAAA;AACH,EAAA,IAAA,EAAA,cAAA;AACD,EAAA,GAAA,EAAA,WAAA;AACI,EAAA,IAAA,EAAA,CAAA,EAAA,MAAoB,CAAA,WAAA,CAAA,EAAA,iBAAA,CAAA,YAAA,CAAA,CAAA;AACpB;QACA,KAAI;;UAEA,EAAA,aAAmE,CAAA,KAAA;SAC/D,IAAA;AACR,EAAA,UAAA,MAAW;AACX,EAAA,QAAA,EAAA,CAAA;AACA,EAAA,SAAA,EAAA,MAAW,OAAA,2BAAA;AACX,CAAA,EAAA;AACH,EAAA,IAAA,EAAA,aAAA;AACD,EAAA,GAAA,EAAA,kBAAA;AACI,EAAA,IAAA,EAAA,CAAA,EAAA,MAAmB,CAAA,WAAA,CAAA,EAAA,iBAAA,CAAA,WAAA,CAAA,CAAA;AACnB;QACA,KAAI;;UAEA,EAAA,aAAmE,CAAA,KAAA;WAC/D,EAAA,MAAe,OAAA,0BAAM,CAAA;AAC7B,EAAA,KAAA,EAAA,IAAA;AACA,EAAA,UAAA;AACA;AACH;;;;;AAM8B,MAAA,cAAA,GAAA,iBAAA,CAAA,YAAA;AACZ,gBAAA,CAAA,YAAkB"}
1
+ {"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -2,5 +2,9 @@ export declare const config: Readonly<{
2
2
  LAYOUT_ROOT: string;
3
3
  ALLOWED_EMAILS: string[];
4
4
  ADMIN_CONTACT_EMAIL: string;
5
+ GITHUB_OWNER: string;
6
+ GITHUB_REPO: string;
7
+ GITHUB_BRANCH: string;
8
+ GITHUB_TOKEN: string;
5
9
  } & import("envalid").CleanedEnvAccessors>;
6
10
  //# sourceMappingURL=env-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-config.d.ts","sourceRoot":"","sources":["../../src/config/env-config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM;;;;0CAYjB,CAAC"}
1
+ {"version":3,"file":"env-config.d.ts","sourceRoot":"","sources":["../../src/config/env-config.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM;;;;;;;;0CAgCjB,CAAC"}
@@ -11,7 +11,27 @@ const config = cleanEnv(env, {
11
11
  }),
12
12
  // Admin contact email for approval requests
13
13
  ADMIN_CONTACT_EMAIL: str({
14
- default: 'admin@cdebase.dev',
14
+ default: '',
15
15
  desc: 'Admin email address for approval requests'
16
+ }),
17
+ // GitHub repository owner (username or organization)
18
+ GITHUB_OWNER: str({
19
+ default: '',
20
+ desc: 'GitHub repository owner (username or organization name)'
21
+ }),
22
+ // GitHub repository name
23
+ GITHUB_REPO: str({
24
+ default: '',
25
+ desc: 'GitHub repository name for markdown file syncing'
26
+ }),
27
+ // GitHub branch name
28
+ GITHUB_BRANCH: str({
29
+ default: '',
30
+ desc: 'GitHub branch name for markdown file syncing (defaults to "develop")'
31
+ }),
32
+ // GitHub Personal Access Token
33
+ GITHUB_TOKEN: str({
34
+ default: '',
35
+ desc: 'GitHub Personal Access Token with repo scope for markdown file syncing'
16
36
  })
17
37
  });export{config};//# sourceMappingURL=env-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"env-config.js","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"wFAGA,MAAM,GAAG,GAAG,cAAc,EAAE;AAEf,MAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;AAChC,EAAA,WAAA,EAAW,GAAE,CAAA;IACb,OAA8D,EAAA,GAAA;IAC9D,IAAc,EAAA;;AAEV;gBACF,EAAA,IAAA,CAAA;IACF,OAA4C,EAAA,CAAA,sBAAA,CAAA;IAC5C,IAAmB,EAAA;AACf,GAAA,CAAA;AACA;qBACF,EAAA,GAAA,CAAA;AACL,IAAE,OAAA,EAAA,mBAAA;;;"}
1
+ {"version":3,"file":"env-config.js","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"wFAGA,MAAM,GAAG,GAAG,cAAc,EAAE;AAEf,MAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;AAChC,EAAA,WAAA,EAAW,GAAE,CAAA;IACb,OAA8D,EAAA,GAAA;IAC9D,IAAc,EAAA;;AAEV;gBACF,EAAA,IAAA,CAAA;IACF,OAA4C,EAAA,CAAA,sBAAA,CAAA;IAC5C,IAAmB,EAAA;AACf,GAAA,CAAA;AACA;qBACF,EAAA,GAAA,CAAA;IACF,OAAqD,EAAA,EAAA;IACrD,IAAY,EAAA;AACR,GAAA,CAAA;AACA;cACF,EAAA,GAAA,CAAA;IACF,OAAyB,EAAA,EAAA;IACzB,IAAW,EAAA;AACP,GAAA,CAAA;AACA;aACF,EAAA,GAAA,CAAA;IACF,OAAqB,EAAA,EAAA;IACrB,IAAa,EAAA;AACT,GAAA,CAAA;AACA;eACF,EAAA,GAAA,CAAA;IACF,OAA+B,EAAA,EAAA;IAC/B,IAAY,EAAA;AACR,GAAA,CAAA;AACA;cACF,EAAA,GAAA,CAAA;AACL,IAAE,OAAA,EAAA,EAAA;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownPageLayout.d.ts","sourceRoot":"","sources":["../../../src/pages/Markdown/MarkdownPageLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAO3D,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAyShE,CAAC"}
1
+ {"version":3,"file":"MarkdownPageLayout.d.ts","sourceRoot":"","sources":["../../../src/pages/Markdown/MarkdownPageLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAO3D,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAiYhE,CAAC"}