nucleus-core-ts 0.10.147 → 0.10.151
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/LICENSE +48 -48
- package/dist/.build-ok +1 -1
- package/dist/fe/components/AuthorizationPage/labels.js +13 -13
- package/dist/fe/components/Captcha/labels.js +17 -17
- package/dist/fe/components/ChatPanel/helpers.js +17 -17
- package/dist/fe/components/ChatPanel/labels.js +16 -16
- package/dist/fe/components/DataTable/labels.js +16 -16
- package/dist/fe/components/DevicesPage/components/DeviceCard.js +15 -15
- package/dist/fe/components/DevicesPage/components/DevicesPage.js +9 -9
- package/dist/fe/components/DevicesPage/labels.js +12 -12
- package/dist/fe/components/ForgotPasswordPage/labels.js +8 -8
- package/dist/fe/components/FormBuilder/components/FormField.js +5 -5
- package/dist/fe/components/FormBuilder/utils/fieldMapping.js +9 -9
- package/dist/fe/components/IntegrationsPage/components/ConnectionAuthFields.js +8 -8
- package/dist/fe/components/IntegrationsPage/components/ConnectionBasicFields.js +3 -3
- package/dist/fe/components/IntegrationsPage/components/ConnectionExport.js +23 -23
- package/dist/fe/components/IntegrationsPage/components/ConnectionForm.js +22 -22
- package/dist/fe/components/IntegrationsPage/components/ConnectionList.js +7 -7
- package/dist/fe/components/IntegrationsPage/components/ConnectionOauthFields.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/ConnectionSettingsTab.js +24 -24
- package/dist/fe/components/IntegrationsPage/components/ConnectionSwitcher.js +19 -19
- package/dist/fe/components/IntegrationsPage/components/ConnectionTabs.js +15 -15
- package/dist/fe/components/IntegrationsPage/components/ConnectionTest.js +21 -21
- package/dist/fe/components/IntegrationsPage/components/ConnectionTransfer.js +18 -18
- package/dist/fe/components/IntegrationsPage/components/CredentialFields.js +19 -19
- package/dist/fe/components/IntegrationsPage/components/CredentialSlotRow.js +8 -8
- package/dist/fe/components/IntegrationsPage/components/EndpointForm.js +7 -7
- package/dist/fe/components/IntegrationsPage/components/EndpointFormFields.js +12 -12
- package/dist/fe/components/IntegrationsPage/components/EndpointList.js +7 -7
- package/dist/fe/components/IntegrationsPage/components/EndpointSample.js +36 -36
- package/dist/fe/components/IntegrationsPage/components/EndpointsTab.js +29 -29
- package/dist/fe/components/IntegrationsPage/components/FieldMappingRow.js +7 -7
- package/dist/fe/components/IntegrationsPage/components/FieldMappingRows.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/IntegrationsPage.js +60 -60
- package/dist/fe/components/IntegrationsPage/components/MappingAccountFields.js +15 -15
- package/dist/fe/components/IntegrationsPage/components/MappingEditor.js +9 -9
- package/dist/fe/components/IntegrationsPage/components/MappingList.js +23 -23
- package/dist/fe/components/IntegrationsPage/components/MappingPasswordField.js +12 -12
- package/dist/fe/components/IntegrationsPage/components/MappingScheduleFields.js +23 -23
- package/dist/fe/components/IntegrationsPage/components/MappingWriteModeFields.js +31 -31
- package/dist/fe/components/IntegrationsPage/components/MappingsTab.js +56 -56
- package/dist/fe/components/IntegrationsPage/components/PaginationFields.js +11 -11
- package/dist/fe/components/IntegrationsPage/components/ParamBindingRows.js +15 -15
- package/dist/fe/components/IntegrationsPage/components/Primitives.js +28 -28
- package/dist/fe/components/IntegrationsPage/components/ReferenceCheckRows.js +9 -9
- package/dist/fe/components/IntegrationsPage/components/RunConfirmStep.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/RunHistory.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/RunHistoryRow.js +9 -9
- package/dist/fe/components/IntegrationsPage/components/RunPanel.js +40 -40
- package/dist/fe/components/IntegrationsPage/components/RunPasswordField.js +18 -18
- package/dist/fe/components/IntegrationsPage/components/RunPlanIssues.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/RunPlanReferences.js +12 -12
- package/dist/fe/components/IntegrationsPage/components/RunPlanSuggestions.js +11 -11
- package/dist/fe/components/IntegrationsPage/components/RunPlanSummary.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/RunProgressBar.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/RunRevertConflicts.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/Skeletons.js +7 -7
- package/dist/fe/components/IntegrationsPage/components/authOptions.js +4 -4
- package/dist/fe/components/IntegrationsPage/components/connectionDraft.js +27 -27
- package/dist/fe/components/IntegrationsPage/components/credentialSlots.js +25 -25
- package/dist/fe/components/IntegrationsPage/components/deleteIsConfirmed.js +9 -9
- package/dist/fe/components/IntegrationsPage/components/fieldMappingOptions.js +4 -4
- package/dist/fe/components/IntegrationsPage/components/formSupport.js +34 -34
- package/dist/fe/components/IntegrationsPage/components/jsonArray.js +14 -14
- package/dist/fe/components/IntegrationsPage/components/jsonObjectField.js +15 -15
- package/dist/fe/components/IntegrationsPage/components/mappingDraft.js +10 -10
- package/dist/fe/components/IntegrationsPage/components/mappingStaleness.js +22 -22
- package/dist/fe/components/IntegrationsPage/components/nextRuns.js +8 -8
- package/dist/fe/components/IntegrationsPage/components/passwordIsNeeded.js +13 -13
- package/dist/fe/components/IntegrationsPage/components/pathParams.js +6 -6
- package/dist/fe/components/IntegrationsPage/components/runFormat.js +18 -18
- package/dist/fe/components/IntegrationsPage/components/settleOwnership.js +18 -18
- package/dist/fe/components/IntegrationsPage/components/useInfiniteList.js +8 -8
- package/dist/fe/components/IntegrationsPage/store/index.js +20 -20
- package/dist/fe/components/IntegrationsPage/store/upsertInto.js +12 -12
- package/dist/fe/components/IntegrationsPage/text/context.js +6 -6
- package/dist/fe/components/IntegrationsPage/text/index.js +18 -18
- package/dist/fe/components/IntegrationsPage/theme/index.js +29 -29
- package/dist/fe/components/IntegrationsPage/types/records.js +10 -10
- package/dist/fe/components/IntegrationsPage/types/results.js +3 -3
- package/dist/fe/components/NotificationCenter/labels.js +17 -17
- package/dist/fe/components/ProfilePage/labels.js +10 -10
- package/dist/fe/components/ResetPasswordPage/labels.js +4 -4
- package/dist/fe/components/SetPasswordPage/labels.js +11 -11
- package/dist/fe/components/UsersPage/labels.js +14 -14
- package/dist/fe/utils/columnUtils.js +24 -24
- package/dist/fe/utils/searchFold.js +36 -36
- package/dist/index.js +6 -6
- package/dist/server.js +6 -6
- package/dist/src/Client/Proxy/authz.js +4 -4
- package/dist/src/Client/Proxy/httpProxy.js +136 -136
- package/dist/src/Client/Proxy/largeBody.js +29 -29
- package/dist/src/Client/Proxy/utils.js +32 -32
- package/dist/src/Client/Proxy/wsProxy.js +59 -59
- package/dist/src/Managers/Redis/index.d.ts +14 -0
- package/dist/src/Nucleus/routes/auth/admin/impersonationStore.d.ts +3 -4
- package/dist/src/Nucleus/routes/auth/refresh/issuedPair.d.ts +67 -0
- package/dist/src/Nucleus/routes/auth/refresh/recordIssued.d.ts +15 -6
- package/dist/src/Nucleus/routes/auth/refresh/refreshChain.d.ts +56 -0
- package/dist/src/Services/Auth/SessionStore/utils.d.ts +2 -0
- package/dist/src/Shared/cron.js +71 -71
- package/dist/src/Shared/redactSecrets.js +156 -156
- package/dist/src/Shared/redaction/bare.js +61 -61
- package/dist/src/Shared/redaction/floor.js +48 -48
- package/dist/src/Shared/redaction/freeText.js +70 -70
- package/dist/src/Shared/redaction/json.js +30 -30
- package/dist/src/Shared/redaction/lists.js +23 -23
- package/dist/src/Shared/redaction/markers.js +28 -28
- package/dist/src/Shared/redaction/names.js +49 -49
- package/dist/src/Shared/redaction/pairs.js +54 -54
- package/dist/src/Shared/redaction/secretString.js +29 -29
- package/dist/src/Shared/redaction/structured.js +52 -52
- package/dist/src/Shared/redaction/walk.js +25 -25
- package/infra/scripts/generate-project.ts +766 -766
- package/infra/templates/README.md +57 -57
- package/infra/templates/backend/.dockerignore +9 -9
- package/infra/templates/backend/.env.example +15 -15
- package/infra/templates/backend/README.md +28 -28
- package/infra/templates/backend/azure-pipelines.yml +135 -135
- package/infra/templates/backend/k8s/Dockerfile +31 -31
- package/infra/templates/backend/k8s/configmap.yaml +26 -26
- package/infra/templates/backend/k8s/deployment.yaml +85 -85
- package/infra/templates/backend/k8s/pvc.yaml +12 -12
- package/infra/templates/backend/k8s/service.yaml +13 -13
- package/infra/templates/backend/tsconfig.json +22 -22
- package/infra/templates/frontend/.dockerignore +10 -10
- package/infra/templates/frontend/.env.example +8 -8
- package/infra/templates/frontend/.env.local.example +10 -10
- package/infra/templates/frontend/README.md +69 -69
- package/infra/templates/frontend/app/[tablename]/page.tsx +37 -37
- package/infra/templates/frontend/app/_components/AuthWrapper/index.tsx +63 -63
- package/infra/templates/frontend/app/authorization/page.tsx +43 -43
- package/infra/templates/frontend/app/change-password/page.tsx +23 -23
- package/infra/templates/frontend/app/devices/page.tsx +127 -127
- package/infra/templates/frontend/app/forgot-password/page.tsx +20 -20
- package/infra/templates/frontend/app/globals.css +28 -28
- package/infra/templates/frontend/app/layout.tsx +35 -35
- package/infra/templates/frontend/app/login/page.tsx +33 -33
- package/infra/templates/frontend/app/page.tsx +565 -565
- package/infra/templates/frontend/app/profile/page.tsx +92 -92
- package/infra/templates/frontend/app/register/page.tsx +27 -27
- package/infra/templates/frontend/app/reset-password/page.tsx +60 -60
- package/infra/templates/frontend/app/set-password/page.tsx +43 -43
- package/infra/templates/frontend/app/ui-docs/page.tsx +52 -52
- package/infra/templates/frontend/app/users/page.tsx +52 -52
- package/infra/templates/frontend/app/verify-email/page.tsx +41 -41
- package/infra/templates/frontend/app/verify-magic-link/page.tsx +46 -46
- package/infra/templates/frontend/azure-pipelines.yml +137 -137
- package/infra/templates/frontend/code-and-design-principles.md +438 -438
- package/infra/templates/frontend/k8s/Dockerfile +50 -50
- package/infra/templates/frontend/k8s/configmap.yaml +18 -18
- package/infra/templates/frontend/k8s/deployment.yaml +72 -72
- package/infra/templates/frontend/k8s/ingress.yaml +36 -36
- package/infra/templates/frontend/k8s/service.yaml +14 -14
- package/infra/templates/frontend/lib/api/endpoints.ts +37 -37
- package/infra/templates/frontend/lib/api/factory.ts +44 -44
- package/infra/templates/frontend/lib/api/hook.ts +10 -10
- package/infra/templates/frontend/next.config.ts +19 -19
- package/infra/templates/frontend/package.json +34 -34
- package/infra/templates/frontend/postcss.config.mjs +5 -5
- package/infra/templates/frontend/server.ts +114 -114
- package/infra/templates/frontend/tsconfig.json +23 -23
- package/package.json +1 -1
- package/public/components/CTA.tsx +25 -25
- package/public/components/Capabilities.tsx +67 -67
- package/public/components/Features.tsx +107 -107
- package/public/components/Footer.tsx +58 -58
- package/public/components/Hero.tsx +51 -51
- package/public/components/Managers.tsx +55 -55
- package/public/components/Nav.tsx +91 -91
- package/public/components/Stack.tsx +36 -36
- package/public/components/docs/Docs.tsx +60 -60
- package/public/components/docs/DocsContent.tsx +176 -176
- package/public/components/docs/DocsRightSidebar.tsx +53 -53
- package/public/components/docs/DocsSidebar.tsx +54 -54
- package/public/components/docs/content/authentication.ts +836 -836
- package/public/components/docs/content/authorization.ts +268 -268
- package/public/components/docs/content/backupRestore.ts +173 -173
- package/public/components/docs/content/clientModule.ts +287 -287
- package/public/components/docs/content/entityCrud.ts +682 -682
- package/public/components/docs/content/monitoring.ts +313 -313
- package/public/components/docs/content/multiTenant.ts +269 -269
- package/public/components/docs/content/oauthApiKeys.ts +325 -325
- package/public/components/docs/content/pubsub.ts +131 -131
- package/public/components/docs/content/storageCdn.ts +171 -171
- package/public/components/docs/content/verification.ts +289 -289
- package/public/components/docs/docsData.ts +113 -113
- package/public/components/docs/index.ts +6 -6
- package/public/components/index.ts +9 -9
- package/public/docs.css +629 -629
- package/public/index.html +81 -81
- package/public/index.tsx +42 -42
- package/public/store.ts +76 -76
- package/public/styles.css +858 -858
- package/schemas/config.nucleus.json +2651 -2651
- package/scripts/audit-purge-noise.ts +120 -120
- package/scripts/build.ts +582 -582
- package/scripts/generate-system-tables-types.ts +18 -18
- package/scripts/generate-types-schema.test.ts +73 -73
- package/scripts/generate-types-schema.ts +1284 -1284
- package/scripts/packagedScripts.test.ts +87 -87
- package/scripts/publish.ts +276 -276
- package/scripts/skillCitations.test.ts +107 -107
- package/scripts/verify-publishable.ts +40 -40
package/public/index.html
CHANGED
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<title>Nucleus Core - Enterprise Backend Framework</title>
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
-
<meta name="description" content="A powerful, type-safe backend framework for building enterprise applications with Bun, Elysia, and Drizzle ORM">
|
|
8
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
-
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
11
|
-
<link rel="stylesheet" href="./styles.css">
|
|
12
|
-
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
|
|
13
|
-
<script>
|
|
14
|
-
function initMermaid() {
|
|
15
|
-
const isDark = document.documentElement.getAttribute('data-theme') === 'dark' ||
|
|
16
|
-
(!document.documentElement.getAttribute('data-theme') && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
17
|
-
|
|
18
|
-
mermaid.initialize({
|
|
19
|
-
startOnLoad: false,
|
|
20
|
-
theme: isDark ? 'dark' : 'default',
|
|
21
|
-
themeVariables: isDark ? {
|
|
22
|
-
primaryColor: '#3b82f6',
|
|
23
|
-
primaryTextColor: '#fff',
|
|
24
|
-
primaryBorderColor: '#3b82f6',
|
|
25
|
-
lineColor: '#64748b',
|
|
26
|
-
secondaryColor: '#1e293b',
|
|
27
|
-
tertiaryColor: '#334155',
|
|
28
|
-
background: '#1e293b',
|
|
29
|
-
mainBkg: '#1e293b',
|
|
30
|
-
nodeBorder: '#3b82f6',
|
|
31
|
-
clusterBkg: '#334155',
|
|
32
|
-
titleColor: '#fff',
|
|
33
|
-
edgeLabelBackground: '#1e293b'
|
|
34
|
-
} : {
|
|
35
|
-
primaryColor: '#3b82f6',
|
|
36
|
-
primaryTextColor: '#1e293b',
|
|
37
|
-
primaryBorderColor: '#3b82f6',
|
|
38
|
-
lineColor: '#64748b',
|
|
39
|
-
secondaryColor: '#f1f5f9',
|
|
40
|
-
tertiaryColor: '#e2e8f0',
|
|
41
|
-
background: '#ffffff',
|
|
42
|
-
mainBkg: '#f8fafc',
|
|
43
|
-
nodeBorder: '#3b82f6',
|
|
44
|
-
clusterBkg: '#f1f5f9',
|
|
45
|
-
titleColor: '#1e293b',
|
|
46
|
-
edgeLabelBackground: '#ffffff'
|
|
47
|
-
},
|
|
48
|
-
flowchart: {
|
|
49
|
-
useMaxWidth: true,
|
|
50
|
-
htmlLabels: true,
|
|
51
|
-
curve: 'basis'
|
|
52
|
-
},
|
|
53
|
-
sequence: {
|
|
54
|
-
useMaxWidth: true
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
initMermaid();
|
|
59
|
-
|
|
60
|
-
const observer = new MutationObserver((mutations) => {
|
|
61
|
-
mutations.forEach((mutation) => {
|
|
62
|
-
if (mutation.attributeName === 'data-theme') {
|
|
63
|
-
initMermaid();
|
|
64
|
-
document.querySelectorAll('.mermaid').forEach(el => {
|
|
65
|
-
const code = el.getAttribute('data-original') || el.textContent;
|
|
66
|
-
el.setAttribute('data-original', code);
|
|
67
|
-
el.removeAttribute('data-processed');
|
|
68
|
-
el.innerHTML = code;
|
|
69
|
-
});
|
|
70
|
-
mermaid.run();
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
observer.observe(document.documentElement, { attributes: true });
|
|
75
|
-
</script>
|
|
76
|
-
</head>
|
|
77
|
-
<body>
|
|
78
|
-
<div id="root"></div>
|
|
79
|
-
<script type="module" src="./index.tsx"></script>
|
|
80
|
-
</body>
|
|
81
|
-
</html>
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Nucleus Core - Enterprise Backend Framework</title>
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<meta name="description" content="A powerful, type-safe backend framework for building enterprise applications with Bun, Elysia, and Drizzle ORM">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
11
|
+
<link rel="stylesheet" href="./styles.css">
|
|
12
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
|
|
13
|
+
<script>
|
|
14
|
+
function initMermaid() {
|
|
15
|
+
const isDark = document.documentElement.getAttribute('data-theme') === 'dark' ||
|
|
16
|
+
(!document.documentElement.getAttribute('data-theme') && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
17
|
+
|
|
18
|
+
mermaid.initialize({
|
|
19
|
+
startOnLoad: false,
|
|
20
|
+
theme: isDark ? 'dark' : 'default',
|
|
21
|
+
themeVariables: isDark ? {
|
|
22
|
+
primaryColor: '#3b82f6',
|
|
23
|
+
primaryTextColor: '#fff',
|
|
24
|
+
primaryBorderColor: '#3b82f6',
|
|
25
|
+
lineColor: '#64748b',
|
|
26
|
+
secondaryColor: '#1e293b',
|
|
27
|
+
tertiaryColor: '#334155',
|
|
28
|
+
background: '#1e293b',
|
|
29
|
+
mainBkg: '#1e293b',
|
|
30
|
+
nodeBorder: '#3b82f6',
|
|
31
|
+
clusterBkg: '#334155',
|
|
32
|
+
titleColor: '#fff',
|
|
33
|
+
edgeLabelBackground: '#1e293b'
|
|
34
|
+
} : {
|
|
35
|
+
primaryColor: '#3b82f6',
|
|
36
|
+
primaryTextColor: '#1e293b',
|
|
37
|
+
primaryBorderColor: '#3b82f6',
|
|
38
|
+
lineColor: '#64748b',
|
|
39
|
+
secondaryColor: '#f1f5f9',
|
|
40
|
+
tertiaryColor: '#e2e8f0',
|
|
41
|
+
background: '#ffffff',
|
|
42
|
+
mainBkg: '#f8fafc',
|
|
43
|
+
nodeBorder: '#3b82f6',
|
|
44
|
+
clusterBkg: '#f1f5f9',
|
|
45
|
+
titleColor: '#1e293b',
|
|
46
|
+
edgeLabelBackground: '#ffffff'
|
|
47
|
+
},
|
|
48
|
+
flowchart: {
|
|
49
|
+
useMaxWidth: true,
|
|
50
|
+
htmlLabels: true,
|
|
51
|
+
curve: 'basis'
|
|
52
|
+
},
|
|
53
|
+
sequence: {
|
|
54
|
+
useMaxWidth: true
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
initMermaid();
|
|
59
|
+
|
|
60
|
+
const observer = new MutationObserver((mutations) => {
|
|
61
|
+
mutations.forEach((mutation) => {
|
|
62
|
+
if (mutation.attributeName === 'data-theme') {
|
|
63
|
+
initMermaid();
|
|
64
|
+
document.querySelectorAll('.mermaid').forEach(el => {
|
|
65
|
+
const code = el.getAttribute('data-original') || el.textContent;
|
|
66
|
+
el.setAttribute('data-original', code);
|
|
67
|
+
el.removeAttribute('data-processed');
|
|
68
|
+
el.innerHTML = code;
|
|
69
|
+
});
|
|
70
|
+
mermaid.run();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
observer.observe(document.documentElement, { attributes: true });
|
|
75
|
+
</script>
|
|
76
|
+
</head>
|
|
77
|
+
<body>
|
|
78
|
+
<div id="root"></div>
|
|
79
|
+
<script type="module" src="./index.tsx"></script>
|
|
80
|
+
</body>
|
|
81
|
+
</html>
|
package/public/index.tsx
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { useEffect } from 'react'
|
|
2
|
-
import { createRoot } from 'react-dom/client'
|
|
3
|
-
import { Capabilities, CTA, Docs, Features, Footer, Hero, Managers, Nav, Stack } from './components'
|
|
4
|
-
import { useStore } from './store'
|
|
5
|
-
import './styles.css'
|
|
6
|
-
import './docs.css'
|
|
7
|
-
|
|
8
|
-
function HomePage() {
|
|
9
|
-
return (
|
|
10
|
-
<>
|
|
11
|
-
<Hero />
|
|
12
|
-
<Features />
|
|
13
|
-
<Managers />
|
|
14
|
-
<Stack />
|
|
15
|
-
<Capabilities />
|
|
16
|
-
<CTA />
|
|
17
|
-
<Footer />
|
|
18
|
-
</>
|
|
19
|
-
)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function App() {
|
|
23
|
-
const store = useStore()
|
|
24
|
-
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
store.initTheme()
|
|
27
|
-
store.initRouter()
|
|
28
|
-
}, [])
|
|
29
|
-
|
|
30
|
-
return (
|
|
31
|
-
<>
|
|
32
|
-
<Nav />
|
|
33
|
-
{store.currentPage === 'home' && <HomePage />}
|
|
34
|
-
{store.currentPage === 'docs' && <Docs />}
|
|
35
|
-
</>
|
|
36
|
-
)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const container = document.getElementById('root')
|
|
40
|
-
if (container) {
|
|
41
|
-
createRoot(container).render(<App />)
|
|
42
|
-
}
|
|
1
|
+
import { useEffect } from 'react'
|
|
2
|
+
import { createRoot } from 'react-dom/client'
|
|
3
|
+
import { Capabilities, CTA, Docs, Features, Footer, Hero, Managers, Nav, Stack } from './components'
|
|
4
|
+
import { useStore } from './store'
|
|
5
|
+
import './styles.css'
|
|
6
|
+
import './docs.css'
|
|
7
|
+
|
|
8
|
+
function HomePage() {
|
|
9
|
+
return (
|
|
10
|
+
<>
|
|
11
|
+
<Hero />
|
|
12
|
+
<Features />
|
|
13
|
+
<Managers />
|
|
14
|
+
<Stack />
|
|
15
|
+
<Capabilities />
|
|
16
|
+
<CTA />
|
|
17
|
+
<Footer />
|
|
18
|
+
</>
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function App() {
|
|
23
|
+
const store = useStore()
|
|
24
|
+
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
store.initTheme()
|
|
27
|
+
store.initRouter()
|
|
28
|
+
}, [])
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<>
|
|
32
|
+
<Nav />
|
|
33
|
+
{store.currentPage === 'home' && <HomePage />}
|
|
34
|
+
{store.currentPage === 'docs' && <Docs />}
|
|
35
|
+
</>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const container = document.getElementById('root')
|
|
40
|
+
if (container) {
|
|
41
|
+
createRoot(container).render(<App />)
|
|
42
|
+
}
|
package/public/store.ts
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
import { createStore } from 'h-state'
|
|
2
|
-
|
|
3
|
-
type Theme = 'light' | 'dark'
|
|
4
|
-
type Page = 'home' | 'docs'
|
|
5
|
-
|
|
6
|
-
interface AppState extends Record<string, unknown> {
|
|
7
|
-
theme: Theme
|
|
8
|
-
currentPage: Page
|
|
9
|
-
docsSidebarOpen: boolean
|
|
10
|
-
activeSection: string
|
|
11
|
-
activeItem: string
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface AppMethods extends Record<string, unknown> {
|
|
15
|
-
toggleTheme: () => void
|
|
16
|
-
initTheme: () => void
|
|
17
|
-
navigate: (page: Page) => void
|
|
18
|
-
initRouter: () => void
|
|
19
|
-
toggleDocsSidebar: () => void
|
|
20
|
-
setActiveDoc: (section: string, item: string) => void
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export const { useStore } = createStore<AppState, AppMethods>(
|
|
24
|
-
{
|
|
25
|
-
theme: 'light',
|
|
26
|
-
currentPage: 'home',
|
|
27
|
-
docsSidebarOpen: false,
|
|
28
|
-
activeSection: 'getting-started',
|
|
29
|
-
activeItem: 'what-is-nucleus',
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
toggleTheme: (store) => () => {
|
|
33
|
-
const newTheme = store.theme === 'light' ? 'dark' : 'light'
|
|
34
|
-
store.theme = newTheme
|
|
35
|
-
localStorage.setItem('theme', newTheme)
|
|
36
|
-
document.documentElement.setAttribute('data-theme', newTheme)
|
|
37
|
-
},
|
|
38
|
-
initTheme: (store) => () => {
|
|
39
|
-
const saved = localStorage.getItem('theme') as Theme | null
|
|
40
|
-
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
41
|
-
const theme = saved || (prefersDark ? 'dark' : 'light')
|
|
42
|
-
store.theme = theme
|
|
43
|
-
document.documentElement.setAttribute('data-theme', theme)
|
|
44
|
-
},
|
|
45
|
-
navigate: (store) => (page: Page) => {
|
|
46
|
-
store.currentPage = page
|
|
47
|
-
const url = page === 'home' ? '/' : `/${page}`
|
|
48
|
-
window.history.pushState({}, '', url)
|
|
49
|
-
window.scrollTo(0, 0)
|
|
50
|
-
},
|
|
51
|
-
initRouter: (store) => () => {
|
|
52
|
-
const path = window.location.pathname
|
|
53
|
-
if (path === '/docs' || path.startsWith('/docs')) {
|
|
54
|
-
store.currentPage = 'docs'
|
|
55
|
-
} else {
|
|
56
|
-
store.currentPage = 'home'
|
|
57
|
-
}
|
|
58
|
-
window.addEventListener('popstate', () => {
|
|
59
|
-
const p = window.location.pathname
|
|
60
|
-
store.currentPage = p === '/docs' || p.startsWith('/docs') ? 'docs' : 'home'
|
|
61
|
-
})
|
|
62
|
-
},
|
|
63
|
-
toggleDocsSidebar: (store) => () => {
|
|
64
|
-
store.docsSidebarOpen = !store.docsSidebarOpen
|
|
65
|
-
},
|
|
66
|
-
setActiveDoc: (store) => (section: string, item: string) => {
|
|
67
|
-
store.activeSection = section
|
|
68
|
-
store.activeItem = item
|
|
69
|
-
store.docsSidebarOpen = false
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
enabled: true,
|
|
74
|
-
key: 'nucleus-app',
|
|
75
|
-
}
|
|
76
|
-
)
|
|
1
|
+
import { createStore } from 'h-state'
|
|
2
|
+
|
|
3
|
+
type Theme = 'light' | 'dark'
|
|
4
|
+
type Page = 'home' | 'docs'
|
|
5
|
+
|
|
6
|
+
interface AppState extends Record<string, unknown> {
|
|
7
|
+
theme: Theme
|
|
8
|
+
currentPage: Page
|
|
9
|
+
docsSidebarOpen: boolean
|
|
10
|
+
activeSection: string
|
|
11
|
+
activeItem: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface AppMethods extends Record<string, unknown> {
|
|
15
|
+
toggleTheme: () => void
|
|
16
|
+
initTheme: () => void
|
|
17
|
+
navigate: (page: Page) => void
|
|
18
|
+
initRouter: () => void
|
|
19
|
+
toggleDocsSidebar: () => void
|
|
20
|
+
setActiveDoc: (section: string, item: string) => void
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const { useStore } = createStore<AppState, AppMethods>(
|
|
24
|
+
{
|
|
25
|
+
theme: 'light',
|
|
26
|
+
currentPage: 'home',
|
|
27
|
+
docsSidebarOpen: false,
|
|
28
|
+
activeSection: 'getting-started',
|
|
29
|
+
activeItem: 'what-is-nucleus',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
toggleTheme: (store) => () => {
|
|
33
|
+
const newTheme = store.theme === 'light' ? 'dark' : 'light'
|
|
34
|
+
store.theme = newTheme
|
|
35
|
+
localStorage.setItem('theme', newTheme)
|
|
36
|
+
document.documentElement.setAttribute('data-theme', newTheme)
|
|
37
|
+
},
|
|
38
|
+
initTheme: (store) => () => {
|
|
39
|
+
const saved = localStorage.getItem('theme') as Theme | null
|
|
40
|
+
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
41
|
+
const theme = saved || (prefersDark ? 'dark' : 'light')
|
|
42
|
+
store.theme = theme
|
|
43
|
+
document.documentElement.setAttribute('data-theme', theme)
|
|
44
|
+
},
|
|
45
|
+
navigate: (store) => (page: Page) => {
|
|
46
|
+
store.currentPage = page
|
|
47
|
+
const url = page === 'home' ? '/' : `/${page}`
|
|
48
|
+
window.history.pushState({}, '', url)
|
|
49
|
+
window.scrollTo(0, 0)
|
|
50
|
+
},
|
|
51
|
+
initRouter: (store) => () => {
|
|
52
|
+
const path = window.location.pathname
|
|
53
|
+
if (path === '/docs' || path.startsWith('/docs')) {
|
|
54
|
+
store.currentPage = 'docs'
|
|
55
|
+
} else {
|
|
56
|
+
store.currentPage = 'home'
|
|
57
|
+
}
|
|
58
|
+
window.addEventListener('popstate', () => {
|
|
59
|
+
const p = window.location.pathname
|
|
60
|
+
store.currentPage = p === '/docs' || p.startsWith('/docs') ? 'docs' : 'home'
|
|
61
|
+
})
|
|
62
|
+
},
|
|
63
|
+
toggleDocsSidebar: (store) => () => {
|
|
64
|
+
store.docsSidebarOpen = !store.docsSidebarOpen
|
|
65
|
+
},
|
|
66
|
+
setActiveDoc: (store) => (section: string, item: string) => {
|
|
67
|
+
store.activeSection = section
|
|
68
|
+
store.activeItem = item
|
|
69
|
+
store.docsSidebarOpen = false
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
enabled: true,
|
|
74
|
+
key: 'nucleus-app',
|
|
75
|
+
}
|
|
76
|
+
)
|