vk-typescript-cli 1.0.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.
- package/Jenkinsfile +48 -0
- package/README.md +300 -0
- package/bin/sf.js +438 -0
- package/eslint.config.js +90 -0
- package/gulpfile.js +157 -0
- package/lib/commander.js +3370 -0
- package/lib/inquirer-prompts.js +2038 -0
- package/license +13 -0
- package/package.json +43 -0
- package/smoke-test.mjs +38 -0
- package/src/commands/add.js +276 -0
- package/src/commands/info.js +82 -0
- package/src/commands/interactive.js +493 -0
- package/src/commands/mcp.js +135 -0
- package/src/commands/new.js +264 -0
- package/src/commands/skills.js +42 -0
- package/src/commands/theme.js +200 -0
- package/src/commands/upgrade.js +219 -0
- package/src/constants.js +161 -0
- package/src/generators/angular.js +878 -0
- package/src/generators/nextjs.js +817 -0
- package/src/generators/react.js +769 -0
- package/src/generators/typescript.js +258 -0
- package/src/generators/vue.js +800 -0
- package/src/templates/angular/chart.component.html +23 -0
- package/src/templates/angular/chart.component.ts +172 -0
- package/src/templates/angular/diagram.component.html +13 -0
- package/src/templates/angular/diagram.component.ts +224 -0
- package/src/templates/angular/docx-editor.component.html +18 -0
- package/src/templates/angular/docx-editor.component.ts +37 -0
- package/src/templates/angular/filemanager.component.html +4 -0
- package/src/templates/angular/filemanager.component.ts +47 -0
- package/src/templates/angular/gantt.component.html +32 -0
- package/src/templates/angular/gantt.component.ts +95 -0
- package/src/templates/angular/grid.component.html +12 -0
- package/src/templates/angular/grid.component.ts +58 -0
- package/src/templates/angular/pdf-viewer.component.html +9 -0
- package/src/templates/angular/pdf-viewer.component.ts +48 -0
- package/src/templates/angular/rte.component.html +7 -0
- package/src/templates/angular/rte.component.ts +13 -0
- package/src/templates/angular/scheduler.component.html +17 -0
- package/src/templates/angular/scheduler.component.ts +75 -0
- package/src/templates/angular/spreadsheet-editor.component.html +42 -0
- package/src/templates/angular/spreadsheet-editor.component.ts +61 -0
- package/src/templates/chart-template.js +20 -0
- package/src/templates/diagram-template.js +26 -0
- package/src/templates/docx-template.js +20 -0
- package/src/templates/filemanager-template.js +20 -0
- package/src/templates/gantt-template.js +20 -0
- package/src/templates/grid-template.js +20 -0
- package/src/templates/pdfviewer-template.js +20 -0
- package/src/templates/react/Chart.jsx +81 -0
- package/src/templates/react/Chart.tsx +81 -0
- package/src/templates/react/DOCXEditor.jsx +37 -0
- package/src/templates/react/DOCXEditor.tsx +37 -0
- package/src/templates/react/Diagram.jsx +192 -0
- package/src/templates/react/Diagram.tsx +195 -0
- package/src/templates/react/FileManager.jsx +13 -0
- package/src/templates/react/FileManager.tsx +13 -0
- package/src/templates/react/Gantt.jsx +89 -0
- package/src/templates/react/Gantt.tsx +89 -0
- package/src/templates/react/Grid.jsx +45 -0
- package/src/templates/react/Grid.tsx +45 -0
- package/src/templates/react/PDFViewer.jsx +16 -0
- package/src/templates/react/PDFViewer.tsx +16 -0
- package/src/templates/react/RTE.jsx +14 -0
- package/src/templates/react/RTE.tsx +14 -0
- package/src/templates/react/Scheduler.jsx +55 -0
- package/src/templates/react/Scheduler.tsx +55 -0
- package/src/templates/react/SpreadsheetEditor.jsx +96 -0
- package/src/templates/react/SpreadsheetEditor.tsx +98 -0
- package/src/templates/rte-template.js +26 -0
- package/src/templates/scheduler-template.js +20 -0
- package/src/templates/spreadheet-template.js +20 -0
- package/src/templates/typescript/RTE.ts +33 -0
- package/src/templates/typescript/SpreadsheetEditor.ts +39 -0
- package/src/templates/typescript/chart.ts +37 -0
- package/src/templates/typescript/diagram.ts +30 -0
- package/src/templates/typescript/docxeditor.ts +30 -0
- package/src/templates/typescript/filemanager.ts +41 -0
- package/src/templates/typescript/gantt.ts +88 -0
- package/src/templates/typescript/grid.ts +30 -0
- package/src/templates/typescript/pdfviewer.ts +8 -0
- package/src/templates/typescript/scheduler.ts +39 -0
- package/src/templates/vue/Chart.vue +257 -0
- package/src/templates/vue/ChartView.vue +7 -0
- package/src/templates/vue/DOCXEditor.vue +61 -0
- package/src/templates/vue/DOCXEditorView.vue +7 -0
- package/src/templates/vue/Diagram.vue +245 -0
- package/src/templates/vue/DiagramView.vue +7 -0
- package/src/templates/vue/FileManager.vue +58 -0
- package/src/templates/vue/FileManagerView.vue +7 -0
- package/src/templates/vue/Gantt.vue +129 -0
- package/src/templates/vue/GanttView.vue +7 -0
- package/src/templates/vue/Grid.vue +141 -0
- package/src/templates/vue/GridView.vue +7 -0
- package/src/templates/vue/PDFViewer.vue +58 -0
- package/src/templates/vue/PDFViewerView.vue +7 -0
- package/src/templates/vue/RTE.vue +27 -0
- package/src/templates/vue/RTEView.vue +7 -0
- package/src/templates/vue/Scheduler.vue +94 -0
- package/src/templates/vue/SchedulerView.vue +7 -0
- package/src/templates/vue/SpreadsheetEditor.vue +115 -0
- package/src/templates/vue/SpreadsheetEditorView.vue +7 -0
- package/src/utils/ansi-colors.js +38 -0
- package/src/utils/banner.js +179 -0
- package/src/utils/common.js +64 -0
- package/src/utils/config-generator.js +73 -0
- package/src/utils/folder-structure.js +26 -0
- package/src/utils/logger.js +19 -0
- package/src/utils/mcp-generator.js +122 -0
- package/src/utils/package-manager.js +128 -0
- package/src/utils/project-bootstrap.js +98 -0
- package/src/utils/project-detector.js +195 -0
- package/src/utils/prompt-utils.js +29 -0
- package/src/utils/run-command.js +110 -0
- package/src/utils/skills-installer.js +69 -0
- package/src/utils/template-file.js +35 -0
- package/src/utils/theme-loader.js +47 -0
|
@@ -0,0 +1,769 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { runCommand } from '../utils/run-command.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import {
|
|
6
|
+
createProjectFolderStructure
|
|
7
|
+
} from '../utils/folder-structure.js';
|
|
8
|
+
import { generateSyncfusionConfig } from '../utils/config-generator.js';
|
|
9
|
+
import {
|
|
10
|
+
getThemePackages,
|
|
11
|
+
generateThemeImportStatement
|
|
12
|
+
} from '../utils/theme-loader.js';
|
|
13
|
+
import { addPackagesToJson } from '../utils/package-manager.js';
|
|
14
|
+
import { generateGridTemplate } from '../templates/grid-template.js';
|
|
15
|
+
import { generateChartTemplate } from '../templates/chart-template.js';
|
|
16
|
+
import { generateSchedulerTemplate } from '../templates/scheduler-template.js';
|
|
17
|
+
import { generateGanttTemplate } from '../templates/gantt-template.js';
|
|
18
|
+
import { generateFileManagerTemplate } from '../templates/filemanager-template.js';
|
|
19
|
+
import { generateDiagramTemplate } from '../templates/diagram-template.js';
|
|
20
|
+
import { generateRteTemplate } from '../templates/rte-template.js';
|
|
21
|
+
import { generatePDFTemplate } from '../templates/pdfviewer-template.js';
|
|
22
|
+
import { generateDOCXTemplate } from '../templates/docx-template.js';
|
|
23
|
+
import { generateSpreadsheetTemplate } from '../templates/spreadheet-template.js';
|
|
24
|
+
import { TEMPLATES, TEMPLATE_ROUTES } from '../constants.js';
|
|
25
|
+
import { addTemplatePackages } from '../utils/common.js';
|
|
26
|
+
|
|
27
|
+
const HOME_PAGE_STYLES = `@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100..900&family=Hanken+Grotesk:wght@100..900&display=swap');
|
|
28
|
+
|
|
29
|
+
html,
|
|
30
|
+
body,
|
|
31
|
+
#root {
|
|
32
|
+
width: 100%;
|
|
33
|
+
min-height: 100%;
|
|
34
|
+
margin: 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
body {
|
|
38
|
+
font-family: 'Hanken Grotesk', sans-serif;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.home-page,
|
|
42
|
+
.home-page *,
|
|
43
|
+
.home-page *::before,
|
|
44
|
+
.home-page *::after {
|
|
45
|
+
box-sizing: border-box;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.home-page {
|
|
49
|
+
min-height: 100vh;
|
|
50
|
+
margin: 0 auto;
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
overflow: hidden;
|
|
54
|
+
color: #252a33;
|
|
55
|
+
background: #ffffff;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.workspace-header {
|
|
59
|
+
height: 64px;
|
|
60
|
+
flex-shrink: 0;
|
|
61
|
+
display: flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
justify-content: space-between;
|
|
64
|
+
padding: 0 30px;
|
|
65
|
+
border-bottom: 1px solid #dfe3ea;
|
|
66
|
+
background: #ffffff;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.top-actions {
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
gap: 22px;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.top-actions a {
|
|
76
|
+
width: 18px;
|
|
77
|
+
height: 18px;
|
|
78
|
+
display: inline-flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
justify-content: center;
|
|
81
|
+
color: #111827;
|
|
82
|
+
text-decoration: none;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.home-page svg {
|
|
86
|
+
width: 20px;
|
|
87
|
+
height: 20px;
|
|
88
|
+
fill: currentColor;
|
|
89
|
+
stroke: none;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.sf-brand svg {
|
|
93
|
+
width: 180px;
|
|
94
|
+
height: 50px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.workspace-content {
|
|
98
|
+
flex: 1;
|
|
99
|
+
min-height: 0;
|
|
100
|
+
overflow-y: auto;
|
|
101
|
+
padding: 65px 30px 40px;
|
|
102
|
+
background: radial-gradient(100.37% 115.33% at 50% 0%, rgba(0, 95, 170, 0.04) 0%, rgba(0, 95, 170, 0) 70%);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.hero-section {
|
|
106
|
+
display: flex;
|
|
107
|
+
flex-direction: column;
|
|
108
|
+
align-items: center;
|
|
109
|
+
text-align: center;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.hero-section h1 {
|
|
113
|
+
margin: 0;
|
|
114
|
+
font-weight: 700;
|
|
115
|
+
font-size: 44px;
|
|
116
|
+
line-height: 56px;
|
|
117
|
+
letter-spacing: -0.96px;
|
|
118
|
+
text-align: center;
|
|
119
|
+
vertical-align: middle;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.hero-section .app-name {
|
|
123
|
+
color: rgba(0, 95, 170, 1);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.hero-section p {
|
|
127
|
+
font-family: Inter;
|
|
128
|
+
font-weight: 400;
|
|
129
|
+
font-size: 20px;
|
|
130
|
+
line-height: 28px;
|
|
131
|
+
letter-spacing: 0px;
|
|
132
|
+
text-align: center;
|
|
133
|
+
vertical-align: middle;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
.component-links {
|
|
138
|
+
width: 700px;
|
|
139
|
+
display: flex;
|
|
140
|
+
flex-wrap: wrap;
|
|
141
|
+
justify-content: center;
|
|
142
|
+
gap: 10px 18px;
|
|
143
|
+
margin-top: 34px;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.component-link-button {
|
|
147
|
+
min-width: 104px;
|
|
148
|
+
height: 42px;
|
|
149
|
+
display: inline-flex;
|
|
150
|
+
align-items: center;
|
|
151
|
+
justify-content: center;
|
|
152
|
+
gap: 8px;
|
|
153
|
+
padding: 0 16px;
|
|
154
|
+
border: 1px solid #c8d0dd;
|
|
155
|
+
border-radius: 999px;
|
|
156
|
+
color: rgba(0, 95, 170, 1);
|
|
157
|
+
background: #ffffff;
|
|
158
|
+
font-size: 16px;
|
|
159
|
+
line-height: 24px;
|
|
160
|
+
text-decoration: none;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.component-link-button svg {
|
|
164
|
+
width: 13px;
|
|
165
|
+
height: 13px;
|
|
166
|
+
stroke-width: 2.1;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.resource-heading {
|
|
170
|
+
margin: 65px 0 35px;
|
|
171
|
+
color: rgba(64, 71, 82, 1);
|
|
172
|
+
font-size: 23px;
|
|
173
|
+
line-height: 1.45;
|
|
174
|
+
font-weight: 600;
|
|
175
|
+
line-height: 32px;
|
|
176
|
+
letter-spacing: 0px;
|
|
177
|
+
text-align: center;
|
|
178
|
+
vertical-align: middle;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.quick-links {
|
|
182
|
+
display: grid;
|
|
183
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
184
|
+
gap: 17px;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.link-box {
|
|
188
|
+
min-height: 128px;
|
|
189
|
+
display: flex;
|
|
190
|
+
flex-direction: column;
|
|
191
|
+
align-items: flex-start;
|
|
192
|
+
padding: 18px;
|
|
193
|
+
border: 1px solid #ced5df;
|
|
194
|
+
border-radius: 7px;
|
|
195
|
+
color: #242629;
|
|
196
|
+
background: #ffffff;
|
|
197
|
+
text-decoration: none;
|
|
198
|
+
box-shadow: 0 2px 4px rgba(15, 23, 42, 0.04);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.link-header {
|
|
202
|
+
width: 100%;
|
|
203
|
+
display: flex;
|
|
204
|
+
align-items: center;
|
|
205
|
+
gap: 12px;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.link-icon {
|
|
209
|
+
width: 35px;
|
|
210
|
+
height: 35px;
|
|
211
|
+
flex: 0 0 35px;
|
|
212
|
+
display: inline-flex;
|
|
213
|
+
align-items: center;
|
|
214
|
+
justify-content: center;
|
|
215
|
+
border-radius: 6px;
|
|
216
|
+
font-size: 16px;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.link-icon.blue {
|
|
220
|
+
color: #0065b3;
|
|
221
|
+
background: #e6f4ff;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.link-icon.orange {
|
|
225
|
+
color: #a35e16;
|
|
226
|
+
background: #f8eddf;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.link-icon.cyan {
|
|
230
|
+
color: #0078d4;
|
|
231
|
+
background: #e6f5ff;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.link-icon.gray {
|
|
235
|
+
color: #6c6f75;
|
|
236
|
+
background: #eeeeee;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.link-icon svg {
|
|
240
|
+
width: 16px;
|
|
241
|
+
height: 16px;
|
|
242
|
+
stroke-width: 2.1;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.link-title {
|
|
246
|
+
max-width: none;
|
|
247
|
+
color: rgba(28, 27, 27, 1);
|
|
248
|
+
font-size: 22px;
|
|
249
|
+
line-height: 32px;
|
|
250
|
+
font-weight: 600;
|
|
251
|
+
letter-spacing: 0;
|
|
252
|
+
vertical-align: middle;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.link-description {
|
|
256
|
+
font-family: Inter;
|
|
257
|
+
max-width: 100%;
|
|
258
|
+
margin-top: 14px;
|
|
259
|
+
color: rgba(94, 94, 94, 1);
|
|
260
|
+
font-size: 14px;
|
|
261
|
+
line-height: 20px;
|
|
262
|
+
font-weight: 400;
|
|
263
|
+
letter-spacing: 0px;
|
|
264
|
+
vertical-align: middle;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.workspace-footer {
|
|
268
|
+
min-height: 53px;
|
|
269
|
+
flex-shrink: 0;
|
|
270
|
+
display: flex;
|
|
271
|
+
align-items: center;
|
|
272
|
+
justify-content: space-between;
|
|
273
|
+
padding: 0 30px;
|
|
274
|
+
border-top: 1px solid #d8dde5;
|
|
275
|
+
background: #ffffff;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.footer-left,
|
|
279
|
+
.footer-links {
|
|
280
|
+
display: flex;
|
|
281
|
+
align-items: center;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.footer-left {
|
|
285
|
+
gap: 17px;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.footer-left a,
|
|
289
|
+
.footer-links a {
|
|
290
|
+
margin: 0;
|
|
291
|
+
color: rgba(94, 94, 94, 1);
|
|
292
|
+
font-size: 14px;
|
|
293
|
+
font-weight: 400;
|
|
294
|
+
letter-spacing: 0px;
|
|
295
|
+
line-height: 20px;
|
|
296
|
+
text-decoration: none;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.footer-links {
|
|
300
|
+
gap: 27px;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.footer-links a {
|
|
304
|
+
color: rgba(94, 94, 94, 1);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.shady-divider {
|
|
308
|
+
width: min(100%, 920px);
|
|
309
|
+
height: 1px;
|
|
310
|
+
margin: 50px auto 30px;
|
|
311
|
+
background: linear-gradient(90deg, transparent,rgba(15, 108, 189, 0.28),rgba(124, 58, 237, 0.22), transparent);
|
|
312
|
+
box-shadow: 0 10px 26px rgba(15, 108, 189, 0.2);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
@media (max-width: 1100px) {
|
|
316
|
+
.quick-links {
|
|
317
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
@media (max-width: 640px) {
|
|
322
|
+
.workspace-header,
|
|
323
|
+
.workspace-footer {
|
|
324
|
+
padding: 0 16px;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.workspace-content {
|
|
328
|
+
padding: 48px 16px 32px;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.component-links {
|
|
332
|
+
width: 100%;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.quick-links {
|
|
336
|
+
grid-template-columns: 1fr;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.workspace-footer {
|
|
340
|
+
height: auto;
|
|
341
|
+
padding-top: 10px;
|
|
342
|
+
padding-bottom: 10px;
|
|
343
|
+
flex-direction: column;
|
|
344
|
+
align-items: flex-start;
|
|
345
|
+
gap: 8px;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.footer-left,
|
|
349
|
+
.footer-links {
|
|
350
|
+
flex-wrap: wrap;
|
|
351
|
+
gap: 12px;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
@media (max-width: 947px) {
|
|
356
|
+
.home-page {
|
|
357
|
+
width: 100vw;
|
|
358
|
+
margin-top: 0;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
`;
|
|
362
|
+
|
|
363
|
+
const HOME_PAGE_CONTENT = `__LINK_IMPORT__const resourceLinks = [
|
|
364
|
+
{
|
|
365
|
+
icon: (
|
|
366
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
367
|
+
<path d="M7.5 14.5L14.5 10L7.5 5.5V14.5ZM10 20C8.61667 20 7.31667 19.7375 6.1 19.2125C4.88333 18.6875 3.825 17.975 2.925 17.075C2.025 16.175 1.3125 15.1167 0.7875 13.9C0.2625 12.6833 0 11.3833 0 10C0 8.61667 0.2625 7.31667 0.7875 6.1C1.3125 4.88333 2.025 3.825 2.925 2.925C3.825 2.025 4.88333 1.3125 6.1 0.7875C7.31667 0.2625 8.61667 0 10 0C11.3833 0 12.6833 0.2625 13.9 0.7875C15.1167 1.3125 16.175 2.025 17.075 2.925C17.975 3.825 18.6875 4.88333 19.2125 6.1C19.7375 7.31667 20 8.61667 20 10C20 11.3833 19.7375 12.6833 19.2125 13.9C18.6875 15.1167 17.975 16.175 17.075 17.075C16.175 17.975 15.1167 18.6875 13.9 19.2125C12.6833 19.7375 11.3833 20 10 20ZM10 18C12.2333 18 14.125 17.225 15.675 15.675C17.225 14.125 18 12.2333 18 10C18 7.76667 17.225 5.875 15.675 4.325C14.125 2.775 12.2333 2 10 2C7.76667 2 5.875 2.775 4.325 4.325C2.775 5.875 2 7.76667 2 10C2 12.2333 2.775 14.125 4.325 15.675C5.875 17.225 7.76667 18 10 18Z" fill="#005FAA" />
|
|
368
|
+
</svg>
|
|
369
|
+
),
|
|
370
|
+
title: 'Explore the Demos',
|
|
371
|
+
description: 'See our UI components in action with real-world industry examples.',
|
|
372
|
+
link: 'https://ej2.syncfusion.com/react/demos/',
|
|
373
|
+
tone: 'blue',
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
icon: (
|
|
377
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="20" viewBox="0 0 16 20" fill="none">
|
|
378
|
+
<path d="M4 16H12V14H4V16ZM4 12H12V10H4V12ZM2 20C1.45 20 0.979167 19.8042 0.5875 19.4125C0.195833 19.0208 0 18.55 0 18V2C0 1.45 0.195833 0.979167 0.5875 0.5875C0.979167 0.195833 1.45 0 2 0H10L16 6V18C16 18.55 15.8042 19.0208 15.4125 19.4125C15.0208 19.8042 14.55 20 14 20H2ZM9 7V2H2V18H14V7H9ZM2 2V7V2V7V18V2Z" fill="#904C00" />
|
|
379
|
+
</svg>
|
|
380
|
+
),
|
|
381
|
+
title: 'Explore the Docs',
|
|
382
|
+
description: 'Comprehensive guides and API references for every control.',
|
|
383
|
+
link: 'https://ej2.syncfusion.com/react/documentation/introduction',
|
|
384
|
+
tone: 'orange',
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
icon: (
|
|
388
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22" fill="none">
|
|
389
|
+
<path d="M18 8L16.75 5.25L14 4L16.75 2.75L18 0L19.25 2.75L22 4L19.25 5.25L18 8ZM18 22L16.75 19.25L14 18L16.75 16.75L18 14L19.25 16.75L22 18L19.25 19.25L18 22ZM8 19L5.5 13.5L0 11L5.5 8.5L8 3L10.5 8.5L16 11L10.5 13.5L8 19Z" fill="#0078D4" />
|
|
390
|
+
</svg>
|
|
391
|
+
),
|
|
392
|
+
title: 'AI Prompting',
|
|
393
|
+
description: 'Harness the power of AI with our curated integration patterns.',
|
|
394
|
+
link: 'https://ej2.syncfusion.com/react/documentation/ai-tools/ai-powered-development',
|
|
395
|
+
tone: 'cyan',
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
icon: (
|
|
399
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="19" height="20" viewBox="0 0 19 20" fill="none">
|
|
400
|
+
<path d="M2 18H15V13.4L16.125 12.85C16.3917 12.7167 16.6042 12.5333 16.7625 12.3C16.9208 12.0667 17 11.8 17 11.5C17 11.2167 16.9208 10.9542 16.7625 10.7125C16.6042 10.4708 16.3917 10.2833 16.125 10.15L15 9.625V5H10.2L9.95 3.3C9.9 2.93333 9.7375 2.625 9.4625 2.375C9.1875 2.125 8.86667 2 8.5 2C8.11667 2 7.7875 2.125 7.5125 2.375C7.2375 2.625 7.075 2.93333 7.025 3.3L6.775 5H2V7.15C2.93333 7.5 3.66667 8.06667 4.2 8.85C4.73333 9.63333 5 10.5167 5 11.5C5 12.5 4.73333 13.3917 4.2 14.175C3.66667 14.9583 2.93333 15.525 2 15.875V18ZM2 20C1.43333 20 0.958333 19.8083 0.575 19.425C0.191667 19.0417 0 18.5667 0 18V14.2C0.8 14.2 1.5 13.9458 2.1 13.4375C2.7 12.9292 3 12.2833 3 11.5C3 10.7333 2.7 10.1 2.1 9.6C1.5 9.1 0.8 8.83333 0 8.8V5C0 4.45 0.195833 3.97917 0.5875 3.5875C0.979167 3.19583 1.45 3 2 3H5.05C5.16667 2.15 5.55 1.4375 6.2 0.8625C6.85 0.2875 7.61667 0 8.5 0C9.36667 0 10.125 0.2875 10.775 0.8625C11.425 1.4375 11.8167 2.15 11.95 3H15C15.55 3 16.0208 3.19583 16.4125 3.5875C16.8042 3.97917 17 4.45 17 5V8.35C17.6 8.65 18.0833 9.08333 18.45 9.65C18.8167 10.2167 19 10.8333 19 11.5C19 12.1833 18.8167 12.8083 18.45 13.375C18.0833 13.9417 17.6 14.3667 17 14.65V18C17 18.5667 16.8042 19.0417 16.4125 19.425C16.0208 19.8083 15.55 20 15 20H2Z" fill="#5E5E5E" />
|
|
401
|
+
</svg>
|
|
402
|
+
),
|
|
403
|
+
title: 'React UI Components',
|
|
404
|
+
description: 'Access 80+ high-performance React components today for faster development.',
|
|
405
|
+
link: 'https://www.syncfusion.com/react-components',
|
|
406
|
+
tone: 'gray',
|
|
407
|
+
},
|
|
408
|
+
];
|
|
409
|
+
|
|
410
|
+
export default function Home() {
|
|
411
|
+
return (
|
|
412
|
+
<main className="home-page" aria-label="Syncfusion workspace home">
|
|
413
|
+
<header className="workspace-header">
|
|
414
|
+
<div className="sf-brand">
|
|
415
|
+
<svg width="180" height="50px" viewBox="0 0 494 109" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
|
416
|
+
<title>syncfusion-logo</title>
|
|
417
|
+
<g id="syncfusion-logo" stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
|
|
418
|
+
<g id="Syncfusion-Logo" fillRule="nonzero">
|
|
419
|
+
<path d="M137.352583,50.8333224 L109.79444,50.8333224 C106.82897,50.8333224 104.658899,51.3828735 103.270994,52.4849143 C101.88897,53.5884245 101.197958,55.3384653 101.197958,57.7365061 C101.197958,59.6584653 101.784583,61.1028735 102.963714,62.0594449 C104.147256,63.0160163 105.905661,63.4979755 108.240399,63.4979755 L123.013351,63.4979755 C129.095726,63.4979755 133.429988,64.6470367 136.002905,66.948098 C138.577292,69.2491592 139.86375,73.0872 139.86375,78.4534041 C139.86375,83.8974857 138.375869,87.8942204 135.407458,90.4480163 C132.434637,93.0032816 127.76222,94.2831184 121.388738,94.2831184 L91.6943393,94.2831184 L91.6943393,84.8937306 L119.617101,84.8937306 C122.792815,84.8937306 125.033458,84.4294041 126.336089,83.5051592 C127.63578,82.5794449 128.287095,81.0468735 128.287095,78.9030367 C128.287095,76.6930776 127.691649,75.1193633 126.499286,74.186302 C125.308393,73.2488327 123.266232,72.7756898 120.377214,72.7756898 L107.19506,72.7756898 C101.106804,72.7756898 96.6534524,71.5605061 93.8423571,69.1257306 C91.025381,66.6953633 89.6183631,62.8632 89.6183631,57.6116082 C89.6183631,52.0044245 91.0974226,47.913649 94.0555417,45.3245878 C97.0166012,42.7399347 101.721363,41.4454041 108.166887,41.4454041 L137.352583,41.4454041 L137.352583,50.8333224 Z" id="Fill-26" fill="#2B357C"></path>
|
|
420
|
+
<path d="M162.661262,85.7649306 L170.86078,85.7649306 L170.86078,55.5249306 L181.127452,55.5249306 L181.127452,93.2411755 C181.127452,98.3796245 179.932149,102.183869 177.535661,104.658318 C175.136232,107.12689 171.466518,108.367053 166.532399,108.367053 L146.501728,108.367053 L146.501728,100.504359 L164.776935,100.504359 C166.732351,100.504359 168.233464,100.026808 169.290565,99.0746449 C170.337375,98.1195429 170.86078,96.7412571 170.86078,94.9250939 L170.86078,94.2829714 L161.837929,94.2829714 C156.04078,94.2829714 151.90794,93.1441959 149.443821,90.859298 C146.972204,88.5773388 145.735734,84.7657469 145.735734,79.4392163 L145.735734,55.5249306 L155.895226,55.5249306 L155.895226,78.6501551 C155.895226,81.5742367 156.334827,83.4903184 157.203738,84.4042776 C158.074119,85.3094204 159.892804,85.7649306 162.661262,85.7649306" id="Fill-27" fill="#2B357C"></path>
|
|
421
|
+
<path d="M189.185827,55.5255184 L208.459179,55.5255184 C214.287202,55.5255184 218.447976,56.6246204 220.93856,58.8140082 C223.436494,61.0092735 224.686196,64.6416 224.686196,69.7153959 L224.686196,94.2820898 L214.419524,94.2820898 L214.419524,70.9746612 C214.419524,68.0755592 213.96522,66.1962122 213.068375,65.3336816 C212.168589,64.4740898 210.374899,64.0420898 207.669661,64.0420898 L199.45397,64.0420898 L199.45397,94.2820898 L189.185827,94.2820898 L189.185827,55.5255184 Z" id="Fill-28" fill="#2B357C"></path>
|
|
422
|
+
<path d="M253.489631,85.9844571 L264.389976,85.9844571 L264.389976,94.2820898 L250.466821,94.2820898 C246.932369,94.2820898 244.036,93.9118041 241.770363,93.1888653 C239.492964,92.4571102 237.525786,91.2757224 235.845304,89.6491102 C234.039851,87.8829061 232.632833,85.7199673 231.608077,83.164702 C230.590673,80.6123755 230.08197,77.9189878 230.08197,75.0595592 C230.08197,72.0708245 230.587732,69.276049 231.596315,66.676702 C232.599018,64.084702 234.016327,61.9070694 235.845304,60.1599673 C237.544899,58.5318857 239.544423,57.3519673 241.842405,56.6202122 C244.133036,55.8899265 247.005881,55.5255184 250.466821,55.5255184 L264.389976,55.5255184 L264.389976,63.9304163 L253.489631,63.9304163 C248.66431,63.9304163 245.344512,64.7650286 243.522887,66.4254367 C241.702732,68.0887837 240.785304,70.9746612 240.785304,75.0860082 C240.785304,77.4531918 241.160214,79.4177633 241.901214,80.9650286 C242.646625,82.5122939 243.799292,83.767151 245.353333,84.7281306 C246.122268,85.1865796 247.014702,85.5069061 248.033577,85.6993959 C249.056863,85.8816 250.869667,85.9844571 253.489631,85.9844571" id="Fill-29" fill="#2B357C"></path>
|
|
423
|
+
<path d="M273.558381,63.2778612 L266.241006,63.2778612 L266.241006,55.5253714 L273.558381,55.5253714 L273.558381,51.4874939 C273.558381,47.5421878 274.286149,44.8811265 275.754917,43.5057796 C277.208982,42.131902 280.014196,41.445698 284.164679,41.445698 L293.884423,41.445698 L293.884423,48.8631673 L289.020875,48.8631673 C287.265411,48.8631673 286.017179,49.142351 285.280589,49.6860245 C284.527827,50.2311673 284.164679,51.1363102 284.164679,52.3970449 L284.164679,55.5253714 L293.884423,55.5253714 L293.884423,63.2778612 L284.164679,63.2778612 L284.164679,94.2834122 L273.558381,94.2834122 L273.558381,63.2778612 Z" id="Fill-30" fill="#2B357C"></path>
|
|
424
|
+
<path d="M332.89131,94.2828245 L313.56356,94.2828245 C307.901673,94.2828245 303.805589,93.1572735 301.287071,90.9135184 C298.765613,88.6653551 297.507089,85.0653551 297.507089,80.112049 L297.507089,55.5262531 L307.662024,55.5262531 L307.662024,79.2965388 C307.662024,81.8841306 308.119268,83.6047837 309.013173,84.4673143 C309.915899,85.3327837 311.709589,85.7647837 314.395714,85.7647837 L322.627577,85.7647837 L322.627577,55.5262531 L332.89131,55.5262531 L332.89131,94.2828245 Z" id="Fill-31" fill="#2B357C"></path>
|
|
425
|
+
<path d="M340.405696,86.2011918 L361.97997,86.2011918 C363.903042,86.2011918 365.298298,85.9058449 366.17897,85.3092735 C367.058173,84.7141714 367.502185,83.7649469 367.502185,82.4483755 C367.502185,81.1450286 367.055232,80.1825796 366.162798,79.5786612 C365.274774,78.9732735 363.882458,78.6691102 361.97997,78.6691102 L353.118845,78.6691102 C347.884798,78.6691102 344.354756,77.8682939 342.514018,76.2563755 C340.67181,74.6503347 339.75144,71.7953143 339.75144,67.6927837 C339.75144,63.5182531 340.86294,60.448702 343.08447,58.4782531 C345.30747,56.5092735 348.753708,55.5262531 353.408482,55.5262531 L375.473815,55.5262531 L375.473815,63.6078857 L357.336958,63.6078857 C354.377369,63.6078857 352.457238,63.8650286 351.567744,64.3896 C350.68119,64.9097633 350.234238,65.8398857 350.234238,67.1740898 C350.234238,68.3833959 350.631202,69.2767837 351.406018,69.8483755 C352.185244,70.4170286 353.421714,70.7020898 355.106607,70.7020898 L364.397042,70.7020898 C368.631327,70.7020898 371.864381,71.6851102 374.088851,73.651151 C376.325083,75.6245388 377.435113,78.4633959 377.435113,82.1868245 C377.435113,85.7647837 376.445643,88.6785796 374.469643,90.9193959 C372.498054,93.1572735 369.958952,94.2828245 366.846458,94.2828245 L340.405696,94.2828245 L340.405696,86.2011918 Z" id="Fill-32" fill="#2B357C"></path>
|
|
426
|
+
<path d="M394.309036,94.2835592 L383.605702,94.2835592 L383.605702,55.5269878 L394.309036,55.5269878 L394.309036,94.2835592 Z M394.309036,51.158498 L383.605702,51.158498 L383.605702,41.5501714 L394.309036,41.5501714 L394.309036,51.158498 Z" id="Fill-33" fill="#2B357C"></path>
|
|
427
|
+
<path d="M410.290524,74.9396571 C410.290524,78.6234122 411.159435,81.4990041 412.892845,83.5502694 C414.626256,85.6162286 417.044798,86.6403918 420.157292,86.6403918 C423.238911,86.6403918 425.660393,85.6162286 427.421738,83.5502694 C429.180143,81.4990041 430.060815,78.6234122 430.060815,74.9396571 C430.060815,71.255902 429.188964,68.3920653 427.437911,66.3466776 C425.689798,64.3012898 423.260964,63.2785959 420.157292,63.2785959 C417.071262,63.2785959 414.65419,64.3071673 412.910488,66.359902 C411.159435,68.4229224 410.290524,71.2808816 410.290524,74.9396571 M440.761208,74.9396571 C440.761208,81.0170449 438.910179,85.8704327 435.205179,89.4998204 C431.50606,93.1248 426.50578,94.9336163 420.227863,94.9336163 C413.947006,94.9336163 408.934964,93.1189224 405.193208,89.4807184 C401.451452,85.8454531 399.58425,81.002351 399.58425,74.9396571 C399.58425,68.8608 401.451452,63.9971265 405.193208,60.3442286 C408.934964,56.6942694 413.947006,54.8692898 420.227863,54.8692898 C426.461673,54.8692898 431.441369,56.6942694 435.174304,60.3442286 C438.899887,63.9971265 440.761208,68.8608 440.761208,74.9396571" id="Fill-34" fill="#2B357C"></path>
|
|
428
|
+
<path d="M445.826179,55.5255184 L465.10247,55.5255184 C470.929024,55.5255184 475.091268,56.6246204 477.581851,58.8140082 C480.078315,61.0092735 481.329488,64.6416 481.329488,69.7153959 L481.329488,94.2820898 L471.056935,94.2820898 L471.056935,70.9746612 C471.056935,68.0755592 470.609982,66.1962122 469.714607,65.3336816 C468.811881,64.4740898 467.019661,64.0420898 464.314423,64.0420898 L456.095792,64.0420898 L456.095792,94.2820898 L445.826179,94.2820898 L445.826179,55.5255184 Z" id="Fill-35" fill="#2B357C"></path>
|
|
429
|
+
<polygon id="Fill-36" fill="#2B357C" points="0 36.8613551 24.113375 36.8613551 24.113375 12.7369469 0 12.7369469"></polygon>
|
|
430
|
+
<polygon id="Fill-37" fill="#F6921E" points="97.4215048 15.9108245 81.5019137 34.6372898 62.7640232 18.7266122 78.6837613 0"></polygon>
|
|
431
|
+
<polygon id="Fill-38" fill="#2B357C" points="28.6814048 36.8613551 52.7947798 36.8613551 52.7947798 12.7369469 28.6814048 12.7369469"></polygon>
|
|
432
|
+
<polygon id="Fill-39" fill="#2B357C" points="0 65.5349878 24.113375 65.5349878 24.113375 41.4105796 0 41.4105796"></polygon>
|
|
433
|
+
<polygon id="Fill-40" fill="#2B357C" points="28.6814048 65.5349878 52.7947798 65.5349878 52.7947798 41.4105796 28.6814048 41.4105796"></polygon>
|
|
434
|
+
<polygon id="Fill-41" fill="#F6921E" points="57.4495536 65.5349878 81.5629286 65.5349878 81.5629286 41.4105796 57.4495536 41.4105796"></polygon>
|
|
435
|
+
<polygon id="Fill-42" fill="#2B357C" points="0.0352857143 94.2262531 24.1516012 94.2262531 24.1516012 70.1106612 0.0352857143 70.1106612"></polygon>
|
|
436
|
+
<polygon id="Fill-43" fill="#2B357C" points="28.7211012 94.2262531 52.8374167 94.2262531 52.8374167 70.1106612 28.7211012 70.1106612"></polygon>
|
|
437
|
+
<polygon id="Fill-44" fill="#2B357C" points="57.48925 94.2262531 81.5996845 94.2262531 81.5996845 70.1106612 57.48925 70.1106612"></polygon>
|
|
438
|
+
<path d="M487.322179,53.1636245 C488.119048,53.1636245 488.538065,52.7933388 488.538065,52.1115429 C488.538065,51.3797878 488.13669,51.0535837 487.226613,51.0535837 L486.986964,51.0535837 L486.986964,53.1636245 L487.322179,53.1636245 Z M490.142095,57.3366857 L488.87328,57.3366857 L486.986964,54.5845224 L486.986964,57.3366857 L485.950446,57.3366857 L485.950446,50.0470531 L487.192798,50.0470531 C488.763012,50.0470531 489.596637,50.7744 489.596637,52.1277061 C489.596637,53.2165224 488.976196,53.9321143 487.920565,54.112849 L490.142095,57.3366857 Z M483.642173,50.1205224 C482.779143,51.0682776 482.288083,52.3246041 482.288083,53.5794612 C482.288083,56.5344 484.619881,58.883951 487.550065,58.883951 C490.437613,58.883951 492.806167,56.5182367 492.806167,53.6161959 C492.806167,50.7744 490.437613,48.3675429 487.629458,48.3675429 C486.026899,48.3675429 484.690452,48.9523592 483.642173,50.1205224 L483.642173,50.1205224 Z M493.829452,53.6161959 C493.829452,57.0971755 491.024238,59.9081143 487.550065,59.9081143 C484.053839,59.9081143 481.266268,57.0971755 481.266268,53.5794612 C481.266268,50.1205224 484.109708,47.3536653 487.648571,47.3536653 C491.024238,47.3536653 493.829452,50.2101551 493.829452,53.6161959 L493.829452,53.6161959 Z" id="Fill-45" fill="#2B357C"></path>
|
|
439
|
+
<path d="M137.352583,50.8333224 L109.79444,50.8333224 C106.82897,50.8333224 104.658899,51.3828735 103.270994,52.4849143 C101.88897,53.5884245 101.197958,55.3384653 101.197958,57.7365061 C101.197958,59.6584653 101.784583,61.1028735 102.963714,62.0594449 C104.147256,63.0160163 105.905661,63.4979755 108.240399,63.4979755 L123.013351,63.4979755 C129.095726,63.4979755 133.429988,64.6470367 136.002905,66.948098 C138.577292,69.2491592 139.86375,73.0872 139.86375,78.4534041 C139.86375,83.8974857 138.375869,87.8942204 135.407458,90.4480163 C132.434637,93.0032816 127.76222,94.2831184 121.388738,94.2831184 L91.6943393,94.2831184 L91.6943393,84.8937306 L119.617101,84.8937306 C122.792815,84.8937306 125.033458,84.4294041 126.336089,83.5051592 C127.63578,82.5794449 128.287095,81.0468735 128.287095,78.9030367 C128.287095,76.6930776 127.691649,75.1193633 126.499286,74.186302 C125.308393,73.2488327 123.266232,72.7756898 120.377214,72.7756898 L107.19506,72.7756898 C101.106804,72.7756898 96.6534524,71.5605061 93.8423571,69.1257306 C91.025381,66.6953633 89.6183631,62.8632 89.6183631,57.6116082 C89.6183631,52.0044245 91.0974226,47.913649 94.0555417,45.3245878 C97.0166012,42.7399347 101.721363,41.4454041 108.166887,41.4454041 L137.352583,41.4454041 L137.352583,50.8333224 Z" id="Fill-72" fill="#2B357C"></path>
|
|
440
|
+
<path d="M162.661262,85.7649306 L170.86078,85.7649306 L170.86078,55.5249306 L181.127452,55.5249306 L181.127452,93.2411755 C181.127452,98.3796245 179.932149,102.183869 177.535661,104.658318 C175.136232,107.12689 171.466518,108.367053 166.532399,108.367053 L146.501728,108.367053 L146.501728,100.504359 L164.776935,100.504359 C166.732351,100.504359 168.233464,100.026808 169.290565,99.0746449 C170.337375,98.1195429 170.86078,96.7412571 170.86078,94.9250939 L170.86078,94.2829714 L161.837929,94.2829714 C156.04078,94.2829714 151.90794,93.1441959 149.443821,90.859298 C146.972204,88.5773388 145.735734,84.7657469 145.735734,79.4392163 L145.735734,55.5249306 L155.895226,55.5249306 L155.895226,78.6501551 C155.895226,81.5742367 156.334827,83.4903184 157.203738,84.4042776 C158.074119,85.3094204 159.892804,85.7649306 162.661262,85.7649306" id="Fill-73" fill="#2B357C"></path>
|
|
441
|
+
<path d="M189.185827,55.5255184 L208.459179,55.5255184 C214.287202,55.5255184 218.447976,56.6246204 220.93856,58.8140082 C223.436494,61.0092735 224.686196,64.6416 224.686196,69.7153959 L224.686196,94.2820898 L214.419524,94.2820898 L214.419524,70.9746612 C214.419524,68.0755592 213.96522,66.1962122 213.068375,65.3336816 C212.168589,64.4740898 210.374899,64.0420898 207.669661,64.0420898 L199.45397,64.0420898 L199.45397,94.2820898 L189.185827,94.2820898 L189.185827,55.5255184 Z" id="Fill-74" fill="#2B357C"></path>
|
|
442
|
+
<path d="M253.489631,85.9844571 L264.389976,85.9844571 L264.389976,94.2820898 L250.466821,94.2820898 C246.932369,94.2820898 244.036,93.9118041 241.770363,93.1888653 C239.492964,92.4571102 237.525786,91.2757224 235.845304,89.6491102 C234.039851,87.8829061 232.632833,85.7199673 231.608077,83.164702 C230.590673,80.6123755 230.08197,77.9189878 230.08197,75.0595592 C230.08197,72.0708245 230.587732,69.276049 231.596315,66.676702 C232.599018,64.084702 234.016327,61.9070694 235.845304,60.1599673 C237.544899,58.5318857 239.544423,57.3519673 241.842405,56.6202122 C244.133036,55.8899265 247.005881,55.5255184 250.466821,55.5255184 L264.389976,55.5255184 L264.389976,63.9304163 L253.489631,63.9304163 C248.66431,63.9304163 245.344512,64.7650286 243.522887,66.4254367 C241.702732,68.0887837 240.785304,70.9746612 240.785304,75.0860082 C240.785304,77.4531918 241.160214,79.4177633 241.901214,80.9650286 C242.646625,82.5122939 243.799292,83.767151 245.353333,84.7281306 C246.122268,85.1865796 247.014702,85.5069061 248.033577,85.6993959 C249.056863,85.8816 250.869667,85.9844571 253.489631,85.9844571" id="Fill-75" fill="#2B357C"></path>
|
|
443
|
+
<path d="M273.558381,63.2778612 L266.241006,63.2778612 L266.241006,55.5253714 L273.558381,55.5253714 L273.558381,51.4874939 C273.558381,47.5421878 274.286149,44.8811265 275.754917,43.5057796 C277.208982,42.131902 280.014196,41.445698 284.164679,41.445698 L293.884423,41.445698 L293.884423,48.8631673 L289.020875,48.8631673 C287.265411,48.8631673 286.017179,49.142351 285.280589,49.6860245 C284.527827,50.2311673 284.164679,51.1363102 284.164679,52.3970449 L284.164679,55.5253714 L293.884423,55.5253714 L293.884423,63.2778612 L284.164679,63.2778612 L284.164679,94.2834122 L273.558381,94.2834122 L273.558381,63.2778612 Z" id="Fill-76" fill="#2B357C"></path>
|
|
444
|
+
<path d="M332.89131,94.2828245 L313.56356,94.2828245 C307.901673,94.2828245 303.805589,93.1572735 301.287071,90.9135184 C298.765613,88.6653551 297.507089,85.0653551 297.507089,80.112049 L297.507089,55.5262531 L307.662024,55.5262531 L307.662024,79.2965388 C307.662024,81.8841306 308.119268,83.6047837 309.013173,84.4673143 C309.915899,85.3327837 311.709589,85.7647837 314.395714,85.7647837 L322.627577,85.7647837 L322.627577,55.5262531 L332.89131,55.5262531 L332.89131,94.2828245 Z" id="Fill-77" fill="#2B357C"></path>
|
|
445
|
+
<path d="M340.405696,86.2011918 L361.97997,86.2011918 C363.903042,86.2011918 365.298298,85.9058449 366.17897,85.3092735 C367.058173,84.7141714 367.502185,83.7649469 367.502185,82.4483755 C367.502185,81.1450286 367.055232,80.1825796 366.162798,79.5786612 C365.274774,78.9732735 363.882458,78.6691102 361.97997,78.6691102 L353.118845,78.6691102 C347.884798,78.6691102 344.354756,77.8682939 342.514018,76.2563755 C340.67181,74.6503347 339.75144,71.7953143 339.75144,67.6927837 C339.75144,63.5182531 340.86294,60.448702 343.08447,58.4782531 C345.30747,56.5092735 348.753708,55.5262531 353.408482,55.5262531 L375.473815,55.5262531 L375.473815,63.6078857 L357.336958,63.6078857 C354.377369,63.6078857 352.457238,63.8650286 351.567744,64.3896 C350.68119,64.9097633 350.234238,65.8398857 350.234238,67.1740898 C350.234238,68.3833959 350.631202,69.2767837 351.406018,69.8483755 C352.185244,70.4170286 353.421714,70.7020898 355.106607,70.7020898 L364.397042,70.7020898 C368.631327,70.7020898 371.864381,71.6851102 374.088851,73.651151 C376.325083,75.6245388 377.435113,78.4633959 377.435113,82.1868245 C377.435113,85.7647837 376.445643,88.6785796 374.469643,90.9193959 C372.498054,93.1572735 369.958952,94.2828245 366.846458,94.2828245 L340.405696,94.2828245 L340.405696,86.2011918 Z" id="Fill-78" fill="#2B357C"></path>
|
|
446
|
+
<path d="M394.309036,94.2835592 L383.605702,94.2835592 L383.605702,55.5269878 L394.309036,55.5269878 L394.309036,94.2835592 Z M394.309036,51.158498 L383.605702,51.158498 L383.605702,41.5501714 L394.309036,41.5501714 L394.309036,51.158498 Z" id="Fill-79" fill="#2B357C"></path>
|
|
447
|
+
<path d="M410.290524,74.9396571 C410.290524,78.6234122 411.159435,81.4990041 412.892845,83.5502694 C414.626256,85.6162286 417.044798,86.6403918 420.157292,86.6403918 C423.238911,86.6403918 425.660393,85.6162286 427.421738,83.5502694 C429.180143,81.4990041 430.060815,78.6234122 430.060815,74.9396571 C430.060815,71.255902 429.188964,68.3920653 427.437911,66.3466776 C425.689798,64.3012898 423.260964,63.2785959 420.157292,63.2785959 C417.071262,63.2785959 414.65419,64.3071673 412.910488,66.359902 C411.159435,68.4229224 410.290524,71.2808816 410.290524,74.9396571 M440.761208,74.9396571 C440.761208,81.0170449 438.910179,85.8704327 435.205179,89.4998204 C431.50606,93.1248 426.50578,94.9336163 420.227863,94.9336163 C413.947006,94.9336163 408.934964,93.1189224 405.193208,89.4807184 C401.451452,85.8454531 399.58425,81.002351 399.58425,74.9396571 C399.58425,68.8608 401.451452,63.9971265 405.193208,60.3442286 C408.934964,56.6942694 413.947006,54.8692898 420.227863,54.8692898 C426.461673,54.8692898 431.441369,56.6942694 435.174304,60.3442286 C438.899887,63.9971265 440.761208,68.8608 440.761208,74.9396571" id="Fill-80" fill="#2B357C"></path>
|
|
448
|
+
<path d="M445.826179,55.5255184 L465.10247,55.5255184 C470.929024,55.5255184 475.091268,56.6246204 477.581851,58.8140082 C480.078315,61.0092735 481.329488,64.6416 481.329488,69.7153959 L481.329488,94.2820898 L471.056935,94.2820898 L471.056935,70.9746612 C471.056935,68.0755592 470.609982,66.1962122 469.714607,65.3336816 C468.811881,64.4740898 467.019661,64.0420898 464.314423,64.0420898 L456.095792,64.0420898 L456.095792,94.2820898 L445.826179,94.2820898 L445.826179,55.5255184 Z" id="Fill-81" fill="#2B357C"></path>
|
|
449
|
+
<polygon id="Fill-82" fill="#2B357C" points="0 36.8613551 24.113375 36.8613551 24.113375 12.7369469 0 12.7369469"></polygon>
|
|
450
|
+
<polygon id="Fill-83" fill="#F6921E" points="97.4215048 15.9108245 81.5019137 34.6372898 62.7640232 18.7266122 78.6837613 0"></polygon>
|
|
451
|
+
<polygon id="Fill-84" fill="#2B357C" points="28.6814048 36.8613551 52.7947798 36.8613551 52.7947798 12.7369469 28.6814048 12.7369469"></polygon>
|
|
452
|
+
<polygon id="Fill-85" fill="#2B357C" points="0 65.5349878 24.113375 65.5349878 24.113375 41.4105796 0 41.4105796"></polygon>
|
|
453
|
+
<polygon id="Fill-86" fill="#2B357C" points="28.6814048 65.5349878 52.7947798 65.5349878 52.7947798 41.4105796 28.6814048 41.4105796"></polygon>
|
|
454
|
+
<polygon id="Fill-87" fill="#F6921E" points="57.4495536 65.5349878 81.5629286 65.5349878 81.5629286 41.4105796 57.4495536 41.4105796"></polygon>
|
|
455
|
+
<polygon id="Fill-88" fill="#2B357C" points="0.0352857143 94.2262531 24.1516012 94.2262531 24.1516012 70.1106612 0.0352857143 70.1106612"></polygon>
|
|
456
|
+
<polygon id="Fill-89" fill="#2B357C" points="28.7211012 94.2262531 52.8374167 94.2262531 52.8374167 70.1106612 28.7211012 70.1106612"></polygon>
|
|
457
|
+
<polygon id="Fill-90" fill="#2B357C" points="57.48925 94.2262531 81.5996845 94.2262531 81.5996845 70.1106612 57.48925 70.1106612"></polygon>
|
|
458
|
+
<path d="M487.322179,53.1636245 C488.119048,53.1636245 488.538065,52.7933388 488.538065,52.1115429 C488.538065,51.3797878 488.13669,51.0535837 487.226613,51.0535837 L486.986964,51.0535837 L486.986964,53.1636245 L487.322179,53.1636245 Z M490.142095,57.3366857 L488.87328,57.3366857 L486.986964,54.5845224 L486.986964,57.3366857 L485.950446,57.3366857 L485.950446,50.0470531 L487.192798,50.0470531 C488.763012,50.0470531 489.596637,50.7744 489.596637,52.1277061 C489.596637,53.2165224 488.976196,53.9321143 487.920565,54.112849 L490.142095,57.3366857 Z M483.642173,50.1205224 C482.779143,51.0682776 482.288083,52.3246041 482.288083,53.5794612 C482.288083,56.5344 484.619881,58.883951 487.550065,58.883951 C490.437613,58.883951 492.806167,56.5182367 492.806167,53.6161959 C492.806167,50.7744 490.437613,48.3675429 487.629458,48.3675429 C486.026899,48.3675429 484.690452,48.9523592 483.642173,50.1205224 L483.642173,50.1205224 Z M493.829452,53.6161959 C493.829452,57.0971755 491.024238,59.9081143 487.550065,59.9081143 C484.053839,59.9081143 481.266268,57.0971755 481.266268,53.5794612 C481.266268,50.1205224 484.109708,47.3536653 487.648571,47.3536653 C491.024238,47.3536653 493.829452,50.2101551 493.829452,53.6161959 L493.829452,53.6161959 Z" id="Fill-91" fill="#2B357C"></path>
|
|
459
|
+
</g>
|
|
460
|
+
</g>
|
|
461
|
+
</svg>
|
|
462
|
+
</div>
|
|
463
|
+
<nav className="top-actions" aria-label="Header links">
|
|
464
|
+
<a href="https://github.com/syncfusion/ej2-react-ui-components" aria-label="Source code">
|
|
465
|
+
<svg
|
|
466
|
+
width="25"
|
|
467
|
+
height="24"
|
|
468
|
+
viewBox="0 0 25 24"
|
|
469
|
+
fill="none"
|
|
470
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
471
|
+
aria-hidden="true"
|
|
472
|
+
focusable="false"
|
|
473
|
+
>
|
|
474
|
+
<path d="M12.3047 0C5.50634 0 0 5.50942 0 12.3047C0 17.7423 3.52529 22.3535 8.41332 23.9787C9.02856 24.0946 9.25414 23.7142 9.25414 23.3871C9.25414 23.0949 9.24389 22.3207 9.23876 21.2953C5.81601 22.0377 5.09414 19.6444 5.09414 19.6444C4.53427 18.2243 3.72524 17.8449 3.72524 17.8449C2.61064 17.082 3.81137 17.0973 3.81137 17.0973C5.04697 17.1835 5.69604 18.3647 5.69604 18.3647C6.79321 20.2463 8.57636 19.7029 9.27978 19.3881C9.39052 18.5924 9.70736 18.0499 10.0591 17.7423C7.32641 17.4347 4.45429 16.3765 4.45429 11.6618C4.45429 10.3185 4.9311 9.22133 5.72065 8.36C5.58222 8.04931 5.16694 6.79833 5.82831 5.10337C5.82831 5.10337 6.85883 4.77319 9.2121 6.36459C10.1965 6.09082 11.2424 5.95546 12.2883 5.94931C13.3342 5.95546 14.3801 6.09082 15.3644 6.36459C17.7023 4.77319 18.7328 5.10337 18.7328 5.10337C19.3942 6.79833 18.9789 8.04931 18.8559 8.36C19.6403 9.22133 20.1171 10.3185 20.1171 11.6618C20.1171 16.3888 17.2409 17.4296 14.5031 17.7321C14.9338 18.1012 15.3337 18.8559 15.3337 20.0084C15.3337 21.6552 15.3183 22.978 15.3183 23.3779C15.3183 23.7009 15.5336 24.0854 16.1642 23.9623C21.0871 22.3484 24.6094 17.7341 24.6094 12.3047C24.6094 5.50942 19.0999 0 12.3047 0Z" />
|
|
475
|
+
</svg>
|
|
476
|
+
</a>
|
|
477
|
+
<a href="https://twitter.com/Syncfusion" aria-label="Syncfusion on X">
|
|
478
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
479
|
+
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
|
|
480
|
+
</svg>
|
|
481
|
+
</a>
|
|
482
|
+
<a href="https://www.youtube.com/syncfusioninc" aria-label="Syncfusion videos">
|
|
483
|
+
<svg width="29" height="20" viewBox="0 0 29 20" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false">
|
|
484
|
+
<path fillRule="evenodd" clipRule="evenodd" d="M27.4896 1.52422C27.9301 1.96749 28.2463 2.51866 28.4068 3.12258C29.0004 5.35161 29.0004 10 29.0004 10C29.0004 10 29.0004 14.6484 28.4068 16.8774C28.2463 17.4813 27.9301 18.0325 27.4896 18.4758C27.0492 18.9191 26.5 19.2389 25.8972 19.4032C23.6778 20 14.8068 20 14.8068 20C14.8068 20 5.93586 20 3.71651 19.4032C3.11363 19.2389 2.56449 18.9191 2.12405 18.4758C1.68361 18.0325 1.36732 17.4813 1.20683 16.8774C0.613281 14.6484 0.613281 10 0.613281 10C0.613281 10 0.613281 5.35161 1.20683 3.12258C1.36732 2.51866 1.68361 1.96749 2.12405 1.52422C2.56449 1.08095 3.11363 0.76113 3.71651 0.596774C5.93586 0 14.8068 0 14.8068 0C14.8068 0 23.6778 0 25.8972 0.596774C26.5 0.76113 27.0492 1.08095 27.4896 1.52422ZM19.3229 10L11.9036 5.77905V14.221L19.3229 10Z" />
|
|
485
|
+
</svg>
|
|
486
|
+
</a>
|
|
487
|
+
</nav>
|
|
488
|
+
</header>
|
|
489
|
+
<section className="workspace-content">
|
|
490
|
+
<div className="hero-section">
|
|
491
|
+
<h1>Welcome to Your New <span className="app-name">React App</span></h1>
|
|
492
|
+
<p>Your application is running successfully.</p>
|
|
493
|
+
<div className="component-links">
|
|
494
|
+
__COMPONENT_LINK__
|
|
495
|
+
|
|
496
|
+
</div>
|
|
497
|
+
</div>
|
|
498
|
+
__SHADY_DIVIDER__
|
|
499
|
+
<p className="resource-heading">
|
|
500
|
+
Start exploring docs, live demos, AI guidance, and production-ready components.
|
|
501
|
+
</p>
|
|
502
|
+
<div className="quick-links">
|
|
503
|
+
{resourceLinks.map((item) => (
|
|
504
|
+
<a className="link-box" key={item.title} href={item.link}>
|
|
505
|
+
<span className="link-header">
|
|
506
|
+
<span className={\`link-icon \${item.tone}\`}>
|
|
507
|
+
{item.icon}
|
|
508
|
+
</span>
|
|
509
|
+
<span className="link-title">{item.title}</span>
|
|
510
|
+
</span>
|
|
511
|
+
<span className="link-description">{item.description}</span>
|
|
512
|
+
</a>
|
|
513
|
+
))}
|
|
514
|
+
</div>
|
|
515
|
+
</section>
|
|
516
|
+
<footer className="workspace-footer">
|
|
517
|
+
<div className="footer-left">
|
|
518
|
+
<a href="https://www.syncfusion.com/copyright">
|
|
519
|
+
Copyright © 2001 - 2026 Syncfusion®, Inc. All Rights Reserved.
|
|
520
|
+
</a>
|
|
521
|
+
</div>
|
|
522
|
+
<nav className="footer-links" aria-label="Footer links">
|
|
523
|
+
<a href="https://www.syncfusion.com/privacy">Privacy Policy</a>
|
|
524
|
+
<a href="https://www.syncfusion.com/terms-of-use">Terms of Service</a>
|
|
525
|
+
<a href="https://www.syncfusion.com/contact">Contact Us</a>
|
|
526
|
+
</nav>
|
|
527
|
+
</footer>
|
|
528
|
+
</main>
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
`;
|
|
532
|
+
const COMPONENT_LINK_ICONS = {
|
|
533
|
+
'grid': `
|
|
534
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none">
|
|
535
|
+
<path d="M1.66667 15C1.20833 15 0.815972 14.8368 0.489583 14.5104C0.163194 14.184 0 13.7917 0 13.3333V1.66667C0 1.20833 0.163194 0.815972 0.489583 0.489583C0.815972 0.163194 1.20833 0 1.66667 0H13.3333C13.7917 0 14.184 0.163194 14.5104 0.489583C14.8368 0.815972 15 1.20833 15 1.66667V13.3333C15 13.7917 14.8368 14.184 14.5104 14.5104C14.184 14.8368 13.7917 15 13.3333 15H1.66667ZM1.66667 13.3333H4.4375V10.5625H1.66667V13.3333ZM6.10417 13.3333H8.89583V10.5625H6.10417V13.3333ZM10.5625 13.3333H13.3333V10.5625H10.5625V13.3333ZM1.66667 8.89583H4.4375V6.10417H1.66667V8.89583ZM6.10417 8.89583H8.89583V6.10417H6.10417V8.89583ZM10.5625 8.89583H13.3333V6.10417H10.5625V8.89583ZM1.66667 4.4375H4.4375V1.66667H1.66667V4.4375ZM6.10417 4.4375H8.89583V1.66667H6.10417V4.4375ZM10.5625 4.4375H13.3333V1.66667H10.5625V4.4375Z" fill="#005FAA" />
|
|
536
|
+
</svg>
|
|
537
|
+
`,
|
|
538
|
+
'chart': `
|
|
539
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
|
|
540
|
+
<path d="M10 13.3333V7.5H13.3333V13.3333H10ZM5 13.3333V0H8.33333V13.3333H5ZM0 13.3333V4.16667H3.33333V13.3333H0Z" fill="#005FAA" />
|
|
541
|
+
</svg>
|
|
542
|
+
`,
|
|
543
|
+
'gantt': `
|
|
544
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none">
|
|
545
|
+
<path d="M3.33333 11.6667H5V3.33333H3.33333V11.6667ZM10 10H11.6667V3.33333H10V10ZM6.66667 7.5H8.33333V3.33333H6.66667V7.5ZM1.66667 15C1.20833 15 0.815972 14.8368 0.489583 14.5104C0.163194 14.184 0 13.7917 0 13.3333V1.66667C0 1.20833 0.163194 0.815972 0.489583 0.489583C0.815972 0.163194 1.20833 0 1.66667 0H13.3333C13.7917 0 14.184 0.163194 14.5104 0.489583C14.8368 0.815972 15 1.20833 15 1.66667V13.3333C15 13.7917 14.8368 14.184 14.5104 14.5104C14.184 14.8368 13.7917 15 13.3333 15H1.66667ZM1.66667 13.3333H13.3333V1.66667H1.66667V13.3333ZM1.66667 1.66667V13.3333V1.66667Z" fill="#005FAA" />
|
|
546
|
+
</svg>
|
|
547
|
+
`,
|
|
548
|
+
'file-manager': `
|
|
549
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14" viewBox="0 0 18 14" fill="none">
|
|
550
|
+
<path d="M1.66667 13.3333C1.20833 13.3333 0.815972 13.1701 0.489583 12.8438C0.163194 12.5174 0 12.125 0 11.6667V1.66667C0 1.20833 0.163194 0.815972 0.489583 0.489583C0.815972 0.163194 1.20833 0 1.66667 0H6.66667L8.33333 1.66667H15C15.4583 1.66667 15.8507 1.82986 16.1771 2.15625C16.5035 2.48264 16.6667 2.875 16.6667 3.33333H7.64583L5.97917 1.66667H1.66667V11.6667L3.66667 5H17.9167L15.7708 12.1458C15.6597 12.5069 15.4549 12.7951 15.1562 13.0104C14.8576 13.2257 14.5278 13.3333 14.1667 13.3333H1.66667ZM3.41667 11.6667H14.1667L15.6667 6.66667H4.91667L3.41667 11.6667ZM3.41667 11.6667L4.91667 6.66667L3.41667 11.6667ZM1.66667 3.33333V1.66667V3.33333Z" fill="#005FAA" />
|
|
551
|
+
</svg>
|
|
552
|
+
`,
|
|
553
|
+
'rich-text-editor': `
|
|
554
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="14" viewBox="0 0 15 14" fill="none">
|
|
555
|
+
<path d="M0 8.33333V6.66667H5.83333V8.33333H0ZM0 5V3.33333H9.16667V5H0ZM0 1.66667V0H9.16667V1.66667H0ZM7.5 13.3333V10.7708L12.1042 6.1875C12.2292 6.0625 12.3681 5.97222 12.5208 5.91667C12.6736 5.86111 12.8264 5.83333 12.9792 5.83333C13.1458 5.83333 13.3056 5.86458 13.4583 5.92708C13.6111 5.98958 13.75 6.08333 13.875 6.20833L14.6458 6.97917C14.7569 7.10417 14.8438 7.24306 14.9062 7.39583C14.9688 7.54861 15 7.70139 15 7.85417C15 8.00694 14.9722 8.16319 14.9167 8.32292C14.8611 8.48264 14.7708 8.625 14.6458 8.75L10.0625 13.3333H7.5ZM13.75 7.85417L12.9792 7.08333L13.75 7.85417ZM8.75 12.0833H9.54167L12.0625 9.54167L11.6875 9.14583L11.2917 8.77083L8.75 11.2917V12.0833ZM11.6875 9.14583L11.2917 8.77083L12.0625 9.54167L11.6875 9.14583Z" fill="#005FAA" />
|
|
556
|
+
</svg>
|
|
557
|
+
`,
|
|
558
|
+
'scheduler': `
|
|
559
|
+
<svg width="15" height="17" viewBox="0 0 15 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
560
|
+
<path d="M1.66667 16.6667C1.20833 16.6667 0.815972 16.5035 0.489583 16.1771C0.163194 15.8507 0 15.4583 0 15V3.33333C0 2.875 0.163194 2.48264 0.489583 2.15625C0.815972 1.82986 1.20833 1.66667 1.66667 1.66667H2.5V0H4.16667V1.66667H10.8333V0H12.5V1.66667H13.3333C13.7917 1.66667 14.184 1.82986 14.5104 2.15625C14.8368 2.48264 15 2.875 15 3.33333V15C15 15.4583 14.8368 15.8507 14.5104 16.1771C14.184 16.5035 13.7917 16.6667 13.3333 16.6667H1.66667ZM1.66667 15H13.3333V6.66667H1.66667V15ZM1.66667 5H13.3333V3.33333H1.66667V5ZM1.66667 5V3.33333V5ZM7.5 10C7.26389 10 7.06597 9.92014 6.90625 9.76042C6.74653 9.60069 6.66667 9.40278 6.66667 9.16667C6.66667 8.93056 6.74653 8.73264 6.90625 8.57292C7.06597 8.41319 7.26389 8.33333 7.5 8.33333C7.73611 8.33333 7.93403 8.41319 8.09375 8.57292C8.25347 8.73264 8.33333 8.93056 8.33333 9.16667C8.33333 9.40278 8.25347 9.60069 8.09375 9.76042C7.93403 9.92014 7.73611 10 7.5 10ZM4.16667 10C3.93056 10 3.73264 9.92014 3.57292 9.76042C3.41319 9.60069 3.33333 9.40278 3.33333 9.16667C3.33333 8.93056 3.41319 8.73264 3.57292 8.57292C3.73264 8.41319 3.93056 8.33333 4.16667 8.33333C4.40278 8.33333 4.60069 8.41319 4.76042 8.57292C4.92014 8.73264 5 8.93056 5 9.16667C5 9.40278 4.92014 9.60069 4.76042 9.76042C4.60069 9.92014 4.40278 10 4.16667 10ZM10.8333 10C10.5972 10 10.3993 9.92014 10.2396 9.76042C10.0799 9.60069 10 9.40278 10 9.16667C10 8.93056 10.0799 8.73264 10.2396 8.57292C10.3993 8.41319 10.5972 8.33333 10.8333 8.33333C11.0694 8.33333 11.2674 8.41319 11.4271 8.57292C11.5868 8.73264 11.6667 8.93056 11.6667 9.16667C11.6667 9.40278 11.5868 9.60069 11.4271 9.76042C11.2674 9.92014 11.0694 10 10.8333 10ZM7.5 13.3333C7.26389 13.3333 7.06597 13.2535 6.90625 13.0938C6.74653 12.934 6.66667 12.7361 6.66667 12.5C6.66667 12.2639 6.74653 12.066 6.90625 11.9062C7.06597 11.7465 7.26389 11.6667 7.5 11.6667C7.73611 11.6667 7.93403 11.7465 8.09375 11.9062C8.25347 12.066 8.33333 12.2639 8.33333 12.5C8.33333 12.7361 8.25347 12.934 8.09375 13.0938C7.93403 13.2535 7.73611 13.3333 7.5 13.3333ZM4.16667 13.3333C3.93056 13.3333 3.73264 13.2535 3.57292 13.0938C3.41319 12.934 3.33333 12.7361 3.33333 12.5C3.33333 12.2639 3.41319 12.066 3.57292 11.9062C3.73264 11.7465 3.93056 11.6667 4.16667 11.6667C4.40278 11.6667 4.60069 11.7465 4.76042 11.9062C4.92014 12.066 5 12.2639 5 12.5C5 12.7361 4.92014 12.934 4.76042 13.0938C4.60069 13.2535 4.40278 13.3333 4.16667 13.3333ZM10.8333 13.3333C10.5972 13.3333 10.3993 13.2535 10.2396 13.0938C10.0799 12.934 10 12.7361 10 12.5C10 12.2639 10.0799 12.066 10.2396 11.9062C10.3993 11.7465 10.5972 11.6667 10.8333 11.6667C11.0694 11.6667 11.2674 11.7465 11.4271 11.9062C11.5868 12.066 11.6667 12.2639 11.6667 12.5C11.6667 12.7361 11.5868 12.934 11.4271 13.0938C11.2674 13.2535 11.0694 13.3333 10.8333 13.3333Z" fill="#005FAA" />
|
|
561
|
+
</svg>
|
|
562
|
+
`,
|
|
563
|
+
'diagram': `
|
|
564
|
+
<svg width="17" height="15" viewBox="0 0 17 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
565
|
+
<path d="M10.8333 15V12.5H7.5V4.16667H5.83333V6.66667H0V0H5.83333V2.5H10.8333V0H16.6667V6.66667H10.8333V4.16667H9.16667V10.8333H10.8333V8.33333H16.6667V15H10.8333ZM1.66667 1.66667V5V1.66667ZM12.5 10V13.3333V10ZM12.5 1.66667V5V1.66667ZM12.5 5H15V1.66667H12.5V5ZM12.5 13.3333H15V10H12.5V13.3333ZM1.66667 5H4.16667V1.66667H1.66667V5Z" fill="#005FAA" />
|
|
566
|
+
</svg>
|
|
567
|
+
`,
|
|
568
|
+
'pdf-viewer': `
|
|
569
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="17" viewBox="0 0 15 17" fill="none">
|
|
570
|
+
<path d="M2.5 16.6667C2.04167 16.6667 1.64931 16.5035 1.32292 16.1771C0.996528 15.8507 0.833333 15.4583 0.833333 15V1.66667C0.833333 1.20833 0.996528 0.815972 1.32292 0.489583C1.64931 0.163194 2.04167 0 2.5 0H9.16667L14.1667 5V15C14.1667 15.4583 14.0035 15.8507 13.6771 16.1771C13.3507 16.5035 12.9583 16.6667 12.5 16.6667H2.5ZM8.33333 5.83333V1.66667H2.5V15H12.5V5.83333H8.33333ZM4.16667 12.5H5.83333V10.8333H6.66667C7.01389 10.8333 7.30903 10.7118 7.55208 10.4688C7.79514 10.2257 7.91667 9.93056 7.91667 9.58333C7.91667 9.23611 7.79514 8.94097 7.55208 8.69792C7.30903 8.45486 7.01389 8.33333 6.66667 8.33333H4.16667V12.5ZM5.83333 9.58333V9.16667H6.66667C6.77778 9.16667 6.875 9.20833 6.95833 9.29167C7.04167 9.375 7.08333 9.47222 7.08333 9.58333C7.08333 9.69444 7.04167 9.79167 6.95833 9.875C6.875 9.95833 6.77778 10 6.66667 10H5.83333V9.58333ZM8.33333 12.5H10C10.3472 12.5 10.6424 12.3785 10.8854 12.1354C11.1285 11.8924 11.25 11.5972 11.25 11.25V9.58333C11.25 9.23611 11.1285 8.94097 10.8854 8.69792C10.6424 8.45486 10.3472 8.33333 10 8.33333H8.33333V12.5ZM9.16667 11.6667V9.16667H10C10.1111 9.16667 10.2083 9.20833 10.2917 9.29167C10.375 9.375 10.4167 9.47222 10.4167 9.58333V11.25C10.4167 11.3611 10.375 11.4583 10.2917 11.5417C10.2083 11.625 10.1111 11.6667 10 11.6667H9.16667Z" fill="#005FAA"/>
|
|
571
|
+
</svg>
|
|
572
|
+
`,
|
|
573
|
+
'docx-editor': `
|
|
574
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="17" viewBox="0 0 15 17" fill="none">
|
|
575
|
+
<path d="M2.5 16.6667C2.04167 16.6667 1.64931 16.5035 1.32292 16.1771C0.996528 15.8507 0.833333 15.4583 0.833333 15V1.66667C0.833333 1.20833 0.996528 0.815972 1.32292 0.489583C1.64931 0.163194 2.04167 0 2.5 0H9.16667L14.1667 5V15C14.1667 15.4583 14.0035 15.8507 13.6771 16.1771C13.3507 16.5035 12.9583 16.6667 12.5 16.6667H2.5ZM8.33333 5.83333V1.66667H2.5V15H12.5V5.83333H8.33333ZM4.16667 7.5H10.8333V8.75H4.16667V7.5ZM4.16667 10H10.8333V11.25H4.16667V10ZM4.16667 12.5H8.33333V13.75H4.16667V12.5ZM11.25 1.45833V4.16667H13.9583L11.25 1.45833Z" fill="#005FAA"/>
|
|
576
|
+
</svg>
|
|
577
|
+
`,
|
|
578
|
+
'spreadsheet-editor': `
|
|
579
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15" fill="none">
|
|
580
|
+
<path d="M1.66667 15C1.20833 15 0.815972 14.8368 0.489583 14.5104C0.163194 14.184 0 13.7917 0 13.3333V1.66667C0 1.20833 0.163194 0.815972 0.489583 0.489583C0.815972 0.163194 1.20833 0 1.66667 0H13.3333C13.7917 0 14.184 0.163194 14.5104 0.489583C14.8368 0.815972 15 1.20833 15 1.66667V13.3333C15 13.7917 14.8368 14.184 14.5104 14.5104C14.184 14.8368 13.7917 15 13.3333 15H1.66667ZM1.66667 4.16667H4.16667V1.66667H1.66667V4.16667ZM5.83333 4.16667H9.16667V1.66667H5.83333V4.16667ZM10.8333 4.16667H13.3333V1.66667H10.8333V4.16667ZM1.66667 8.33333H4.16667V5.83333H1.66667V8.33333ZM5.83333 8.33333H9.16667V5.83333H5.83333V8.33333ZM10.8333 8.33333H13.3333V5.83333H10.8333V8.33333ZM1.66667 13.3333H4.16667V10H1.66667V13.3333ZM5.83333 13.3333H9.16667V10H5.83333V13.3333ZM10.8333 13.3333H13.3333V10H10.8333V13.3333ZM6.25 12.0833H8.75V11.25H6.25V12.0833ZM6.25 7.5H8.75V6.66667H6.25V7.5ZM6.25 3.33333H8.75V2.5H6.25V3.33333Z" fill="#005FAA"/>
|
|
581
|
+
</svg>
|
|
582
|
+
`
|
|
583
|
+
};
|
|
584
|
+
|
|
585
|
+
export async function createReactProject(appName, appPath, options) {
|
|
586
|
+
// Determine if TypeScript or JavaScript
|
|
587
|
+
const isTypeScript = options.type === 'ts';
|
|
588
|
+
const viteTemplate = isTypeScript ? 'react-ts' : 'react';
|
|
589
|
+
|
|
590
|
+
// Create Vite React project
|
|
591
|
+
await runCommand('npm', [
|
|
592
|
+
'create',
|
|
593
|
+
'vite@latest',
|
|
594
|
+
appName,
|
|
595
|
+
'--',
|
|
596
|
+
'--template',
|
|
597
|
+
viteTemplate,
|
|
598
|
+
'--no-interactive'
|
|
599
|
+
]);
|
|
600
|
+
|
|
601
|
+
const indexCSSPath = path.join(appPath, 'src', 'index.css');
|
|
602
|
+
await writeFile(indexCSSPath, '');
|
|
603
|
+
const assets = path.join(appPath, 'src', 'assets');
|
|
604
|
+
await rm(assets, { recursive: true, force: true });
|
|
605
|
+
|
|
606
|
+
const selectedTemplate = options.template || TEMPLATES.EMPTY;
|
|
607
|
+
|
|
608
|
+
if (options.styling === 'scss') {
|
|
609
|
+
await addPackagesToJson(appPath, ['sass']);
|
|
610
|
+
}
|
|
611
|
+
// Add theme package
|
|
612
|
+
const themePackageInfo = await getThemePackages(options.theme);
|
|
613
|
+
|
|
614
|
+
if (selectedTemplate === TEMPLATES.EMPTY) {
|
|
615
|
+
await createProjectFolderStructure(appPath, 'with-components');
|
|
616
|
+
await addTemplatePackages(appPath, selectedTemplate, 'react');
|
|
617
|
+
await addPackagesToJson(appPath, [themePackageInfo.base]);
|
|
618
|
+
|
|
619
|
+
await generateHomePage(appPath, isTypeScript, options.theme, options.styling);
|
|
620
|
+
await generateAppWithRouting(appPath, isTypeScript, [], options.styling);
|
|
621
|
+
} else {
|
|
622
|
+
// Always create components folder for routed templates
|
|
623
|
+
await createProjectFolderStructure(appPath, 'with-components');
|
|
624
|
+
await addTemplatePackages(appPath, selectedTemplate, 'react');
|
|
625
|
+
await addPackagesToJson(appPath, [themePackageInfo.base]);
|
|
626
|
+
|
|
627
|
+
// Generate Home page in components/
|
|
628
|
+
await generateHomePage(appPath, isTypeScript, options.theme, options.styling, selectedTemplate);
|
|
629
|
+
|
|
630
|
+
// Generate template-specific component pages
|
|
631
|
+
if (selectedTemplate === TEMPLATES.GRID) {
|
|
632
|
+
await generateGridTemplate(appPath, 'react', isTypeScript);
|
|
633
|
+
} else if (selectedTemplate === TEMPLATES.CHART) {
|
|
634
|
+
await generateChartTemplate(appPath, 'react', isTypeScript);
|
|
635
|
+
} else if (selectedTemplate === TEMPLATES.SCHEDULER) {
|
|
636
|
+
await generateSchedulerTemplate(appPath, 'react', isTypeScript);
|
|
637
|
+
} else if (selectedTemplate === TEMPLATES.GANTT) {
|
|
638
|
+
await generateGanttTemplate(appPath, 'react', isTypeScript);
|
|
639
|
+
} else if (selectedTemplate === TEMPLATES.FILEMANAGER) {
|
|
640
|
+
await generateFileManagerTemplate(appPath, 'react', isTypeScript);
|
|
641
|
+
} else if (selectedTemplate === TEMPLATES.DIAGRAM) {
|
|
642
|
+
await generateDiagramTemplate(appPath, 'react', isTypeScript);
|
|
643
|
+
} else if (selectedTemplate === TEMPLATES.RICHTEXTEDITOR) {
|
|
644
|
+
await generateRteTemplate(appPath, 'react', isTypeScript);
|
|
645
|
+
} else if (selectedTemplate === TEMPLATES.PDFVIEWER) {
|
|
646
|
+
await generatePDFTemplate(appPath, 'react', isTypeScript);
|
|
647
|
+
} else if (selectedTemplate === TEMPLATES.DOCXEDITOR) {
|
|
648
|
+
await generateDOCXTemplate(appPath, 'react', isTypeScript);
|
|
649
|
+
} else if (selectedTemplate === TEMPLATES.SPREADSHEETEDITOR) {
|
|
650
|
+
await generateSpreadsheetTemplate(appPath, 'react', isTypeScript);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
// Generate App.tsx with router
|
|
654
|
+
await generateAppWithRouting(appPath, isTypeScript, [selectedTemplate], options.styling);
|
|
655
|
+
}
|
|
656
|
+
// Generate Syncfusion config
|
|
657
|
+
try {
|
|
658
|
+
await generateSyncfusionConfig(appPath, options);
|
|
659
|
+
} catch {
|
|
660
|
+
logger.warning('Syncfusion config generation skipped');
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
export async function generateHomePage(appPath, isTypeScript, theme, styling, selectedTemplates = []) {
|
|
665
|
+
const ext = isTypeScript ? '.tsx' : '.jsx';
|
|
666
|
+
const file = path.join(appPath, 'src', 'components', `Home${ext}`);
|
|
667
|
+
|
|
668
|
+
const templates = Array.isArray(selectedTemplates)
|
|
669
|
+
? selectedTemplates
|
|
670
|
+
: selectedTemplates
|
|
671
|
+
? [selectedTemplates]
|
|
672
|
+
: [];
|
|
673
|
+
|
|
674
|
+
const routeEntries = Object.entries(TEMPLATE_ROUTES).filter(([key]) =>
|
|
675
|
+
templates.includes(key)
|
|
676
|
+
);
|
|
677
|
+
|
|
678
|
+
const linkImport = routeEntries.length
|
|
679
|
+
? `import { Link } from 'react-router';\n\n`
|
|
680
|
+
: '';
|
|
681
|
+
|
|
682
|
+
const componentLinks = routeEntries.length
|
|
683
|
+
? `${routeEntries
|
|
684
|
+
.map(([, cfg]) => {
|
|
685
|
+
const componentName = cfg.route.replace('/', '');
|
|
686
|
+
const componentIcon = COMPONENT_LINK_ICONS[componentName] || '';
|
|
687
|
+
return ` <Link className="component-link-button" to="${cfg.route}">
|
|
688
|
+
${componentIcon.trim()}
|
|
689
|
+
<span>${cfg.label}</span>
|
|
690
|
+
</Link>`;
|
|
691
|
+
})
|
|
692
|
+
.join('\n')}`
|
|
693
|
+
: '';
|
|
694
|
+
|
|
695
|
+
const shadyDivider = routeEntries.length === 0
|
|
696
|
+
? '<div className="shady-divider" aria-hidden="true" />'
|
|
697
|
+
: '';
|
|
698
|
+
|
|
699
|
+
const appContent = HOME_PAGE_CONTENT
|
|
700
|
+
.replace('__LINK_IMPORT__', linkImport)
|
|
701
|
+
.replace('__COMPONENT_LINK__', componentLinks)
|
|
702
|
+
.replace('__SHADY_DIVIDER__', shadyDivider);
|
|
703
|
+
|
|
704
|
+
await writeFile(file, appContent);
|
|
705
|
+
|
|
706
|
+
await writeFile(path.join(appPath, 'src', 'Home.css'), HOME_PAGE_STYLES);
|
|
707
|
+
if (styling === 'scss') {
|
|
708
|
+
const themeImport = generateThemeImportStatement(theme, 'scss');
|
|
709
|
+
const appSCSS = `${themeImport}`;
|
|
710
|
+
await writeFile(path.join(appPath, 'src', 'styles.scss'), appSCSS);
|
|
711
|
+
await writeFile(path.join(appPath, 'src', 'App.css'), '');
|
|
712
|
+
} else {
|
|
713
|
+
const themeImport = generateThemeImportStatement(theme);
|
|
714
|
+
const appCSS = `${themeImport}`;
|
|
715
|
+
await writeFile(path.join(appPath, 'src', 'App.css'), appCSS);
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
/**
|
|
719
|
+
* Generate/regenerate src/App.{jsx,tsx} with a nav + route for every entry in
|
|
720
|
+
* `selectedTemplates` (in addition to Home). Used both when scaffolding a new
|
|
721
|
+
* project and when `sf add <component>` extends an existing one.
|
|
722
|
+
*/
|
|
723
|
+
export async function generateAppWithRouting(appPath, isTypeScript, selectedTemplates, styling) {
|
|
724
|
+
const ext = isTypeScript ? '.tsx' : '.jsx';
|
|
725
|
+
const appFile = path.join(appPath, 'src', `App${ext}`);
|
|
726
|
+
const templates = Array.isArray(selectedTemplates) ? selectedTemplates : [selectedTemplates];
|
|
727
|
+
|
|
728
|
+
const styleImport = styling === 'scss' ? `import './styles.scss';` : `import './App.css';`;
|
|
729
|
+
const homeStyleImport = `import './Home.css';`;
|
|
730
|
+
// Build nav: Home is shown only when component routes are available.
|
|
731
|
+
// Empty template keeps routing, but does not render navigation links.
|
|
732
|
+
const routeEntries = Object.entries(TEMPLATE_ROUTES).filter(
|
|
733
|
+
([key]) => templates.includes(key)
|
|
734
|
+
);
|
|
735
|
+
const routeImports = routeEntries
|
|
736
|
+
.map(([, cfg]) => `import ${cfg.file} from './components/${cfg.file}';`)
|
|
737
|
+
.join('\n');
|
|
738
|
+
|
|
739
|
+
// Generate route definitions directly in JSX
|
|
740
|
+
const routeBlocks = routeEntries
|
|
741
|
+
.map(([, cfg]) => `<Route path="${cfg.route}" element={<${cfg.file} />} />`)
|
|
742
|
+
.join('\n ');
|
|
743
|
+
|
|
744
|
+
const appContent = `import { BrowserRouter as Router, Routes, Route } from 'react-router';
|
|
745
|
+
${styleImport}
|
|
746
|
+
${homeStyleImport}
|
|
747
|
+
import Home from './components/Home';
|
|
748
|
+
${routeImports}
|
|
749
|
+
|
|
750
|
+
function App() {
|
|
751
|
+
return (
|
|
752
|
+
<Router>
|
|
753
|
+
<div className="app-container">
|
|
754
|
+
<main className="app-main">
|
|
755
|
+
<Routes>
|
|
756
|
+
<Route path="/" element={<Home />} />
|
|
757
|
+
${routeBlocks}
|
|
758
|
+
</Routes>
|
|
759
|
+
</main>
|
|
760
|
+
</div>
|
|
761
|
+
</Router>
|
|
762
|
+
);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
export default App;
|
|
766
|
+
`;
|
|
767
|
+
|
|
768
|
+
await writeFile(appFile, appContent);
|
|
769
|
+
}
|