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.
Files changed (204) hide show
  1. package/LICENSE +48 -48
  2. package/dist/.build-ok +1 -1
  3. package/dist/fe/components/AuthorizationPage/labels.js +13 -13
  4. package/dist/fe/components/Captcha/labels.js +17 -17
  5. package/dist/fe/components/ChatPanel/helpers.js +17 -17
  6. package/dist/fe/components/ChatPanel/labels.js +16 -16
  7. package/dist/fe/components/DataTable/labels.js +16 -16
  8. package/dist/fe/components/DevicesPage/components/DeviceCard.js +15 -15
  9. package/dist/fe/components/DevicesPage/components/DevicesPage.js +9 -9
  10. package/dist/fe/components/DevicesPage/labels.js +12 -12
  11. package/dist/fe/components/ForgotPasswordPage/labels.js +8 -8
  12. package/dist/fe/components/FormBuilder/components/FormField.js +5 -5
  13. package/dist/fe/components/FormBuilder/utils/fieldMapping.js +9 -9
  14. package/dist/fe/components/IntegrationsPage/components/ConnectionAuthFields.js +8 -8
  15. package/dist/fe/components/IntegrationsPage/components/ConnectionBasicFields.js +3 -3
  16. package/dist/fe/components/IntegrationsPage/components/ConnectionExport.js +23 -23
  17. package/dist/fe/components/IntegrationsPage/components/ConnectionForm.js +22 -22
  18. package/dist/fe/components/IntegrationsPage/components/ConnectionList.js +7 -7
  19. package/dist/fe/components/IntegrationsPage/components/ConnectionOauthFields.js +6 -6
  20. package/dist/fe/components/IntegrationsPage/components/ConnectionSettingsTab.js +24 -24
  21. package/dist/fe/components/IntegrationsPage/components/ConnectionSwitcher.js +19 -19
  22. package/dist/fe/components/IntegrationsPage/components/ConnectionTabs.js +15 -15
  23. package/dist/fe/components/IntegrationsPage/components/ConnectionTest.js +21 -21
  24. package/dist/fe/components/IntegrationsPage/components/ConnectionTransfer.js +18 -18
  25. package/dist/fe/components/IntegrationsPage/components/CredentialFields.js +19 -19
  26. package/dist/fe/components/IntegrationsPage/components/CredentialSlotRow.js +8 -8
  27. package/dist/fe/components/IntegrationsPage/components/EndpointForm.js +7 -7
  28. package/dist/fe/components/IntegrationsPage/components/EndpointFormFields.js +12 -12
  29. package/dist/fe/components/IntegrationsPage/components/EndpointList.js +7 -7
  30. package/dist/fe/components/IntegrationsPage/components/EndpointSample.js +36 -36
  31. package/dist/fe/components/IntegrationsPage/components/EndpointsTab.js +29 -29
  32. package/dist/fe/components/IntegrationsPage/components/FieldMappingRow.js +7 -7
  33. package/dist/fe/components/IntegrationsPage/components/FieldMappingRows.js +6 -6
  34. package/dist/fe/components/IntegrationsPage/components/IntegrationsPage.js +60 -60
  35. package/dist/fe/components/IntegrationsPage/components/MappingAccountFields.js +15 -15
  36. package/dist/fe/components/IntegrationsPage/components/MappingEditor.js +9 -9
  37. package/dist/fe/components/IntegrationsPage/components/MappingList.js +23 -23
  38. package/dist/fe/components/IntegrationsPage/components/MappingPasswordField.js +12 -12
  39. package/dist/fe/components/IntegrationsPage/components/MappingScheduleFields.js +23 -23
  40. package/dist/fe/components/IntegrationsPage/components/MappingWriteModeFields.js +31 -31
  41. package/dist/fe/components/IntegrationsPage/components/MappingsTab.js +56 -56
  42. package/dist/fe/components/IntegrationsPage/components/PaginationFields.js +11 -11
  43. package/dist/fe/components/IntegrationsPage/components/ParamBindingRows.js +15 -15
  44. package/dist/fe/components/IntegrationsPage/components/Primitives.js +28 -28
  45. package/dist/fe/components/IntegrationsPage/components/ReferenceCheckRows.js +9 -9
  46. package/dist/fe/components/IntegrationsPage/components/RunConfirmStep.js +6 -6
  47. package/dist/fe/components/IntegrationsPage/components/RunHistory.js +6 -6
  48. package/dist/fe/components/IntegrationsPage/components/RunHistoryRow.js +9 -9
  49. package/dist/fe/components/IntegrationsPage/components/RunPanel.js +40 -40
  50. package/dist/fe/components/IntegrationsPage/components/RunPasswordField.js +18 -18
  51. package/dist/fe/components/IntegrationsPage/components/RunPlanIssues.js +6 -6
  52. package/dist/fe/components/IntegrationsPage/components/RunPlanReferences.js +12 -12
  53. package/dist/fe/components/IntegrationsPage/components/RunPlanSuggestions.js +11 -11
  54. package/dist/fe/components/IntegrationsPage/components/RunPlanSummary.js +6 -6
  55. package/dist/fe/components/IntegrationsPage/components/RunProgressBar.js +6 -6
  56. package/dist/fe/components/IntegrationsPage/components/RunRevertConflicts.js +6 -6
  57. package/dist/fe/components/IntegrationsPage/components/Skeletons.js +7 -7
  58. package/dist/fe/components/IntegrationsPage/components/authOptions.js +4 -4
  59. package/dist/fe/components/IntegrationsPage/components/connectionDraft.js +27 -27
  60. package/dist/fe/components/IntegrationsPage/components/credentialSlots.js +25 -25
  61. package/dist/fe/components/IntegrationsPage/components/deleteIsConfirmed.js +9 -9
  62. package/dist/fe/components/IntegrationsPage/components/fieldMappingOptions.js +4 -4
  63. package/dist/fe/components/IntegrationsPage/components/formSupport.js +34 -34
  64. package/dist/fe/components/IntegrationsPage/components/jsonArray.js +14 -14
  65. package/dist/fe/components/IntegrationsPage/components/jsonObjectField.js +15 -15
  66. package/dist/fe/components/IntegrationsPage/components/mappingDraft.js +10 -10
  67. package/dist/fe/components/IntegrationsPage/components/mappingStaleness.js +22 -22
  68. package/dist/fe/components/IntegrationsPage/components/nextRuns.js +8 -8
  69. package/dist/fe/components/IntegrationsPage/components/passwordIsNeeded.js +13 -13
  70. package/dist/fe/components/IntegrationsPage/components/pathParams.js +6 -6
  71. package/dist/fe/components/IntegrationsPage/components/runFormat.js +18 -18
  72. package/dist/fe/components/IntegrationsPage/components/settleOwnership.js +18 -18
  73. package/dist/fe/components/IntegrationsPage/components/useInfiniteList.js +8 -8
  74. package/dist/fe/components/IntegrationsPage/store/index.js +20 -20
  75. package/dist/fe/components/IntegrationsPage/store/upsertInto.js +12 -12
  76. package/dist/fe/components/IntegrationsPage/text/context.js +6 -6
  77. package/dist/fe/components/IntegrationsPage/text/index.js +18 -18
  78. package/dist/fe/components/IntegrationsPage/theme/index.js +29 -29
  79. package/dist/fe/components/IntegrationsPage/types/records.js +10 -10
  80. package/dist/fe/components/IntegrationsPage/types/results.js +3 -3
  81. package/dist/fe/components/NotificationCenter/labels.js +17 -17
  82. package/dist/fe/components/ProfilePage/labels.js +10 -10
  83. package/dist/fe/components/ResetPasswordPage/labels.js +4 -4
  84. package/dist/fe/components/SetPasswordPage/labels.js +11 -11
  85. package/dist/fe/components/UsersPage/labels.js +14 -14
  86. package/dist/fe/utils/columnUtils.js +24 -24
  87. package/dist/fe/utils/searchFold.js +36 -36
  88. package/dist/index.js +6 -6
  89. package/dist/server.js +6 -6
  90. package/dist/src/Client/Proxy/authz.js +4 -4
  91. package/dist/src/Client/Proxy/httpProxy.js +136 -136
  92. package/dist/src/Client/Proxy/largeBody.js +29 -29
  93. package/dist/src/Client/Proxy/utils.js +32 -32
  94. package/dist/src/Client/Proxy/wsProxy.js +59 -59
  95. package/dist/src/Managers/Redis/index.d.ts +14 -0
  96. package/dist/src/Nucleus/routes/auth/admin/impersonationStore.d.ts +3 -4
  97. package/dist/src/Nucleus/routes/auth/refresh/issuedPair.d.ts +67 -0
  98. package/dist/src/Nucleus/routes/auth/refresh/recordIssued.d.ts +15 -6
  99. package/dist/src/Nucleus/routes/auth/refresh/refreshChain.d.ts +56 -0
  100. package/dist/src/Services/Auth/SessionStore/utils.d.ts +2 -0
  101. package/dist/src/Shared/cron.js +71 -71
  102. package/dist/src/Shared/redactSecrets.js +156 -156
  103. package/dist/src/Shared/redaction/bare.js +61 -61
  104. package/dist/src/Shared/redaction/floor.js +48 -48
  105. package/dist/src/Shared/redaction/freeText.js +70 -70
  106. package/dist/src/Shared/redaction/json.js +30 -30
  107. package/dist/src/Shared/redaction/lists.js +23 -23
  108. package/dist/src/Shared/redaction/markers.js +28 -28
  109. package/dist/src/Shared/redaction/names.js +49 -49
  110. package/dist/src/Shared/redaction/pairs.js +54 -54
  111. package/dist/src/Shared/redaction/secretString.js +29 -29
  112. package/dist/src/Shared/redaction/structured.js +52 -52
  113. package/dist/src/Shared/redaction/walk.js +25 -25
  114. package/infra/scripts/generate-project.ts +766 -766
  115. package/infra/templates/README.md +57 -57
  116. package/infra/templates/backend/.dockerignore +9 -9
  117. package/infra/templates/backend/.env.example +15 -15
  118. package/infra/templates/backend/README.md +28 -28
  119. package/infra/templates/backend/azure-pipelines.yml +135 -135
  120. package/infra/templates/backend/k8s/Dockerfile +31 -31
  121. package/infra/templates/backend/k8s/configmap.yaml +26 -26
  122. package/infra/templates/backend/k8s/deployment.yaml +85 -85
  123. package/infra/templates/backend/k8s/pvc.yaml +12 -12
  124. package/infra/templates/backend/k8s/service.yaml +13 -13
  125. package/infra/templates/backend/tsconfig.json +22 -22
  126. package/infra/templates/frontend/.dockerignore +10 -10
  127. package/infra/templates/frontend/.env.example +8 -8
  128. package/infra/templates/frontend/.env.local.example +10 -10
  129. package/infra/templates/frontend/README.md +69 -69
  130. package/infra/templates/frontend/app/[tablename]/page.tsx +37 -37
  131. package/infra/templates/frontend/app/_components/AuthWrapper/index.tsx +63 -63
  132. package/infra/templates/frontend/app/authorization/page.tsx +43 -43
  133. package/infra/templates/frontend/app/change-password/page.tsx +23 -23
  134. package/infra/templates/frontend/app/devices/page.tsx +127 -127
  135. package/infra/templates/frontend/app/forgot-password/page.tsx +20 -20
  136. package/infra/templates/frontend/app/globals.css +28 -28
  137. package/infra/templates/frontend/app/layout.tsx +35 -35
  138. package/infra/templates/frontend/app/login/page.tsx +33 -33
  139. package/infra/templates/frontend/app/page.tsx +565 -565
  140. package/infra/templates/frontend/app/profile/page.tsx +92 -92
  141. package/infra/templates/frontend/app/register/page.tsx +27 -27
  142. package/infra/templates/frontend/app/reset-password/page.tsx +60 -60
  143. package/infra/templates/frontend/app/set-password/page.tsx +43 -43
  144. package/infra/templates/frontend/app/ui-docs/page.tsx +52 -52
  145. package/infra/templates/frontend/app/users/page.tsx +52 -52
  146. package/infra/templates/frontend/app/verify-email/page.tsx +41 -41
  147. package/infra/templates/frontend/app/verify-magic-link/page.tsx +46 -46
  148. package/infra/templates/frontend/azure-pipelines.yml +137 -137
  149. package/infra/templates/frontend/code-and-design-principles.md +438 -438
  150. package/infra/templates/frontend/k8s/Dockerfile +50 -50
  151. package/infra/templates/frontend/k8s/configmap.yaml +18 -18
  152. package/infra/templates/frontend/k8s/deployment.yaml +72 -72
  153. package/infra/templates/frontend/k8s/ingress.yaml +36 -36
  154. package/infra/templates/frontend/k8s/service.yaml +14 -14
  155. package/infra/templates/frontend/lib/api/endpoints.ts +37 -37
  156. package/infra/templates/frontend/lib/api/factory.ts +44 -44
  157. package/infra/templates/frontend/lib/api/hook.ts +10 -10
  158. package/infra/templates/frontend/next.config.ts +19 -19
  159. package/infra/templates/frontend/package.json +34 -34
  160. package/infra/templates/frontend/postcss.config.mjs +5 -5
  161. package/infra/templates/frontend/server.ts +114 -114
  162. package/infra/templates/frontend/tsconfig.json +23 -23
  163. package/package.json +1 -1
  164. package/public/components/CTA.tsx +25 -25
  165. package/public/components/Capabilities.tsx +67 -67
  166. package/public/components/Features.tsx +107 -107
  167. package/public/components/Footer.tsx +58 -58
  168. package/public/components/Hero.tsx +51 -51
  169. package/public/components/Managers.tsx +55 -55
  170. package/public/components/Nav.tsx +91 -91
  171. package/public/components/Stack.tsx +36 -36
  172. package/public/components/docs/Docs.tsx +60 -60
  173. package/public/components/docs/DocsContent.tsx +176 -176
  174. package/public/components/docs/DocsRightSidebar.tsx +53 -53
  175. package/public/components/docs/DocsSidebar.tsx +54 -54
  176. package/public/components/docs/content/authentication.ts +836 -836
  177. package/public/components/docs/content/authorization.ts +268 -268
  178. package/public/components/docs/content/backupRestore.ts +173 -173
  179. package/public/components/docs/content/clientModule.ts +287 -287
  180. package/public/components/docs/content/entityCrud.ts +682 -682
  181. package/public/components/docs/content/monitoring.ts +313 -313
  182. package/public/components/docs/content/multiTenant.ts +269 -269
  183. package/public/components/docs/content/oauthApiKeys.ts +325 -325
  184. package/public/components/docs/content/pubsub.ts +131 -131
  185. package/public/components/docs/content/storageCdn.ts +171 -171
  186. package/public/components/docs/content/verification.ts +289 -289
  187. package/public/components/docs/docsData.ts +113 -113
  188. package/public/components/docs/index.ts +6 -6
  189. package/public/components/index.ts +9 -9
  190. package/public/docs.css +629 -629
  191. package/public/index.html +81 -81
  192. package/public/index.tsx +42 -42
  193. package/public/store.ts +76 -76
  194. package/public/styles.css +858 -858
  195. package/schemas/config.nucleus.json +2651 -2651
  196. package/scripts/audit-purge-noise.ts +120 -120
  197. package/scripts/build.ts +582 -582
  198. package/scripts/generate-system-tables-types.ts +18 -18
  199. package/scripts/generate-types-schema.test.ts +73 -73
  200. package/scripts/generate-types-schema.ts +1284 -1284
  201. package/scripts/packagedScripts.test.ts +87 -87
  202. package/scripts/publish.ts +276 -276
  203. package/scripts/skillCitations.test.ts +107 -107
  204. 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
+ )