create-neutron 0.1.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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +201 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +45 -0
  8. package/templates/app/_gitignore +3 -0
  9. package/templates/app/index.html +12 -0
  10. package/templates/app/neutron.config.ts +5 -0
  11. package/templates/app/package.json +24 -0
  12. package/templates/app/src/main.tsx +5 -0
  13. package/templates/app/src/routes/_layout.tsx +18 -0
  14. package/templates/app/src/routes/api/session/refresh.tsx +28 -0
  15. package/templates/app/src/routes/app/dashboard.tsx +39 -0
  16. package/templates/app/src/routes/app/settings.tsx +68 -0
  17. package/templates/app/src/routes/index.tsx +26 -0
  18. package/templates/app/src/routes/login.tsx +14 -0
  19. package/templates/app/src/routes/protected.tsx +53 -0
  20. package/templates/app/src/routes/users/[id].tsx +26 -0
  21. package/templates/app/tsconfig.json +14 -0
  22. package/templates/app/vite.config.ts +7 -0
  23. package/templates/basic/_gitignore +3 -0
  24. package/templates/basic/index.html +12 -0
  25. package/templates/basic/neutron.config.ts +5 -0
  26. package/templates/basic/package.json +24 -0
  27. package/templates/basic/src/main.tsx +5 -0
  28. package/templates/basic/src/routes/_layout.tsx +16 -0
  29. package/templates/basic/src/routes/index.tsx +19 -0
  30. package/templates/basic/src/routes/users/[id].tsx +26 -0
  31. package/templates/basic/tsconfig.json +14 -0
  32. package/templates/basic/vite.config.ts +7 -0
  33. package/templates/docs/_gitignore +3 -0
  34. package/templates/docs/index.html +12 -0
  35. package/templates/docs/neutron.config.ts +8 -0
  36. package/templates/docs/package.json +22 -0
  37. package/templates/docs/public/favicon.svg +1 -0
  38. package/templates/docs/src/components/Breadcrumbs.tsx +47 -0
  39. package/templates/docs/src/components/Callout.tsx +40 -0
  40. package/templates/docs/src/components/Card.tsx +31 -0
  41. package/templates/docs/src/components/CopyButton.tsx +35 -0
  42. package/templates/docs/src/components/Footer.tsx +72 -0
  43. package/templates/docs/src/components/Search.tsx +139 -0
  44. package/templates/docs/src/components/Sidebar.tsx +59 -0
  45. package/templates/docs/src/components/SidebarToggle.tsx +47 -0
  46. package/templates/docs/src/components/Steps.tsx +9 -0
  47. package/templates/docs/src/components/Tabs.tsx +35 -0
  48. package/templates/docs/src/components/ThemeToggle.tsx +45 -0
  49. package/templates/docs/src/components/Toc.tsx +36 -0
  50. package/templates/docs/src/components/TocTracker.tsx +35 -0
  51. package/templates/docs/src/content/config.ts +13 -0
  52. package/templates/docs/src/content/docs/getting-started/installation.mdx +18 -0
  53. package/templates/docs/src/content/docs/getting-started/quick-start.mdx +19 -0
  54. package/templates/docs/src/content/docs/index.mdx +13 -0
  55. package/templates/docs/src/lib/pagination.ts +39 -0
  56. package/templates/docs/src/lib/sidebar.ts +100 -0
  57. package/templates/docs/src/main.tsx +8 -0
  58. package/templates/docs/src/routes/_layout.tsx +27 -0
  59. package/templates/docs/src/routes/docs/[...slug].tsx +85 -0
  60. package/templates/docs/src/routes/docs/_layout.tsx +47 -0
  61. package/templates/docs/src/styles/code.css +188 -0
  62. package/templates/docs/src/styles/components.css +264 -0
  63. package/templates/docs/src/styles/docs.css +416 -0
  64. package/templates/docs/src/styles/prose.css +224 -0
  65. package/templates/docs/src/styles/search.css +225 -0
  66. package/templates/docs/tsconfig.json +19 -0
  67. package/templates/docs/vite.config.ts +6 -0
  68. package/templates/full/_gitignore +3 -0
  69. package/templates/full/index.html +12 -0
  70. package/templates/full/neutron.config.ts +5 -0
  71. package/templates/full/package.json +24 -0
  72. package/templates/full/src/components/Counter.tsx +13 -0
  73. package/templates/full/src/main.tsx +5 -0
  74. package/templates/full/src/routes/(marketing)/pricing.tsx +15 -0
  75. package/templates/full/src/routes/_layout.tsx +17 -0
  76. package/templates/full/src/routes/app/dashboard.tsx +28 -0
  77. package/templates/full/src/routes/app/settings.tsx +42 -0
  78. package/templates/full/src/routes/index.tsx +31 -0
  79. package/templates/full/src/routes/users/[id].tsx +26 -0
  80. package/templates/full/tsconfig.json +14 -0
  81. package/templates/full/vite.config.ts +7 -0
  82. package/templates/marketing/_gitignore +3 -0
  83. package/templates/marketing/index.html +12 -0
  84. package/templates/marketing/neutron.config.ts +5 -0
  85. package/templates/marketing/package.json +24 -0
  86. package/templates/marketing/src/components/Counter.tsx +14 -0
  87. package/templates/marketing/src/main.tsx +5 -0
  88. package/templates/marketing/src/routes/_layout.tsx +16 -0
  89. package/templates/marketing/src/routes/about.tsx +10 -0
  90. package/templates/marketing/src/routes/blog/[slug].tsx +34 -0
  91. package/templates/marketing/src/routes/blog/index.tsx +27 -0
  92. package/templates/marketing/src/routes/index.tsx +26 -0
  93. package/templates/marketing/src/routes/users/index.tsx +10 -0
  94. package/templates/marketing/tsconfig.json +14 -0
  95. package/templates/marketing/vite.config.ts +7 -0
@@ -0,0 +1,188 @@
1
+ /* Code blocks */
2
+
3
+ .code-block {
4
+ position: relative;
5
+ margin-top: 1.5rem;
6
+ border-radius: var(--nd-radius);
7
+ background: var(--nd-code-bg);
8
+ border: 1px solid var(--nd-border);
9
+ overflow: hidden;
10
+ }
11
+
12
+ .code-block pre {
13
+ margin: 0;
14
+ padding: 1rem 1.25rem;
15
+ overflow-x: auto;
16
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
17
+ font-size: 0.875rem;
18
+ line-height: 1.7;
19
+ tab-size: 2;
20
+ -webkit-overflow-scrolling: touch;
21
+ scrollbar-width: thin;
22
+ scrollbar-color: var(--nd-border) transparent;
23
+ }
24
+
25
+ .code-block pre::-webkit-scrollbar {
26
+ height: 4px;
27
+ }
28
+
29
+ .code-block pre::-webkit-scrollbar-track {
30
+ background: transparent;
31
+ }
32
+
33
+ .code-block pre::-webkit-scrollbar-thumb {
34
+ background: var(--nd-border);
35
+ border-radius: 2px;
36
+ }
37
+
38
+ .code-block code {
39
+ font-family: inherit;
40
+ font-size: inherit;
41
+ background: none;
42
+ padding: 0;
43
+ border: none;
44
+ border-radius: 0;
45
+ }
46
+
47
+ /* Language label */
48
+ .code-block-lang {
49
+ position: absolute;
50
+ top: 0.5rem;
51
+ right: 0.5rem;
52
+ font-family: 'Inter', system-ui, sans-serif;
53
+ font-size: 0.75rem;
54
+ font-weight: 500;
55
+ color: var(--nd-muted);
56
+ padding: 0.125rem 0.5rem;
57
+ border-radius: 0.25rem;
58
+ background: var(--nd-card-bg);
59
+ pointer-events: none;
60
+ user-select: none;
61
+ transition: opacity 0.15s ease;
62
+ }
63
+
64
+ /* Copy button */
65
+ .code-block-copy {
66
+ position: absolute;
67
+ top: 0.5rem;
68
+ right: 0.5rem;
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ width: 2rem;
73
+ height: 2rem;
74
+ border: 1px solid var(--nd-border);
75
+ border-radius: 0.25rem;
76
+ background: var(--nd-code-bg);
77
+ color: var(--nd-muted);
78
+ cursor: pointer;
79
+ opacity: 0;
80
+ transition: opacity 0.15s ease, color 0.15s ease, border-color 0.15s ease;
81
+ }
82
+
83
+ .code-block-copy svg {
84
+ width: 1rem;
85
+ height: 1rem;
86
+ }
87
+
88
+ .code-block:hover .code-block-copy {
89
+ opacity: 1;
90
+ }
91
+
92
+ .code-block:hover .code-block-lang {
93
+ opacity: 0;
94
+ }
95
+
96
+ .code-block-copy:hover {
97
+ color: var(--nd-fg);
98
+ border-color: var(--nd-muted);
99
+ }
100
+
101
+ .code-block-copy[data-copied="true"] {
102
+ color: #4ade80;
103
+ border-color: #4ade80;
104
+ }
105
+
106
+ /* Title bar (optional filename) */
107
+ .code-block-title {
108
+ font-family: 'Inter', system-ui, sans-serif;
109
+ font-size: 0.875rem;
110
+ font-weight: 500;
111
+ padding: 0.5rem 1.25rem;
112
+ border-bottom: 1px solid var(--nd-border);
113
+ color: var(--nd-muted);
114
+ background: var(--nd-card-bg);
115
+ }
116
+
117
+ /* Line numbers */
118
+ .code-block--numbered pre {
119
+ counter-reset: line;
120
+ }
121
+
122
+ .code-block--numbered .code-line {
123
+ display: block;
124
+ counter-increment: line;
125
+ }
126
+
127
+ .code-block--numbered .code-line::before {
128
+ content: counter(line);
129
+ display: inline-block;
130
+ width: 2.5rem;
131
+ margin-right: 1rem;
132
+ text-align: right;
133
+ color: hsla(0, 0%, 40%, 0.35);
134
+ font-size: 0.8em;
135
+ user-select: none;
136
+ }
137
+
138
+ /* Line highlighting */
139
+ .code-line--highlighted {
140
+ display: block;
141
+ margin: 0 -1.25rem;
142
+ padding: 0 1.25rem;
143
+ background: hsla(0, 0%, 100%, 0.05);
144
+ border-left: 3px solid var(--nd-accent);
145
+ padding-left: calc(1.25rem - 3px);
146
+ }
147
+
148
+ [data-theme="light"] .code-line--highlighted {
149
+ background: hsla(0, 0%, 0%, 0.04);
150
+ }
151
+
152
+ /* Diff highlighting */
153
+ .code-line--added {
154
+ display: block;
155
+ margin: 0 -1.25rem;
156
+ padding: 0 1.25rem;
157
+ background: hsla(142, 71%, 45%, 0.1);
158
+ }
159
+
160
+ .code-line--removed {
161
+ display: block;
162
+ margin: 0 -1.25rem;
163
+ padding: 0 1.25rem;
164
+ background: hsla(0, 84%, 60%, 0.1);
165
+ }
166
+
167
+ /* Syntax token colors (dark) */
168
+ .token-keyword { color: #c084fc; }
169
+ .token-string { color: #86efac; }
170
+ .token-number { color: #fdba74; }
171
+ .token-comment { color: #71717a; font-style: italic; }
172
+ .token-function { color: #93c5fd; }
173
+ .token-operator { color: #f472b6; }
174
+ .token-punctuation { color: #a1a1aa; }
175
+ .token-type { color: #fde68a; }
176
+ .token-property { color: #67e8f9; }
177
+ .token-builtin { color: #c4b5fd; }
178
+
179
+ [data-theme="light"] .token-keyword { color: #7c3aed; }
180
+ [data-theme="light"] .token-string { color: #16a34a; }
181
+ [data-theme="light"] .token-number { color: #c2410c; }
182
+ [data-theme="light"] .token-comment { color: #a1a1aa; }
183
+ [data-theme="light"] .token-function { color: #2563eb; }
184
+ [data-theme="light"] .token-operator { color: #db2777; }
185
+ [data-theme="light"] .token-punctuation { color: #71717a; }
186
+ [data-theme="light"] .token-type { color: #ca8a04; }
187
+ [data-theme="light"] .token-property { color: #0891b2; }
188
+ [data-theme="light"] .token-builtin { color: #7c3aed; }
@@ -0,0 +1,264 @@
1
+ /* Callouts */
2
+
3
+ .callout {
4
+ display: flex;
5
+ gap: 0.75rem;
6
+ padding: 0.875rem 1rem;
7
+ margin-top: 1.5rem;
8
+ border-radius: var(--nd-radius);
9
+ border-left: 3px solid;
10
+ font-size: 0.875rem;
11
+ line-height: 1.6;
12
+ }
13
+
14
+ .callout-icon {
15
+ flex-shrink: 0;
16
+ width: 1.125rem;
17
+ height: 1.125rem;
18
+ margin-top: 0.125rem;
19
+ }
20
+
21
+ .callout-content {
22
+ min-width: 0;
23
+ }
24
+
25
+ .callout-title {
26
+ font-weight: 600;
27
+ margin-bottom: 0.25rem;
28
+ }
29
+
30
+ .callout-content p {
31
+ margin: 0;
32
+ }
33
+
34
+ .callout-content p + p {
35
+ margin-top: 0.5rem;
36
+ }
37
+
38
+ .callout-note {
39
+ border-left-color: #60a5fa;
40
+ background: hsla(217, 91%, 60%, 0.06);
41
+ }
42
+
43
+ .callout-note .callout-icon {
44
+ color: #60a5fa;
45
+ }
46
+
47
+ .callout-note .callout-title {
48
+ color: #60a5fa;
49
+ }
50
+
51
+ .callout-warning {
52
+ border-left-color: #fbbf24;
53
+ background: hsla(43, 96%, 56%, 0.06);
54
+ }
55
+
56
+ .callout-warning .callout-icon {
57
+ color: #fbbf24;
58
+ }
59
+
60
+ .callout-warning .callout-title {
61
+ color: #fbbf24;
62
+ }
63
+
64
+ .callout-tip {
65
+ border-left-color: #34d399;
66
+ background: hsla(160, 64%, 52%, 0.06);
67
+ }
68
+
69
+ .callout-tip .callout-icon {
70
+ color: #34d399;
71
+ }
72
+
73
+ .callout-tip .callout-title {
74
+ color: #34d399;
75
+ }
76
+
77
+ .callout-danger {
78
+ border-left-color: #f87171;
79
+ background: hsla(0, 91%, 71%, 0.06);
80
+ }
81
+
82
+ .callout-danger .callout-icon {
83
+ color: #f87171;
84
+ }
85
+
86
+ .callout-danger .callout-title {
87
+ color: #f87171;
88
+ }
89
+
90
+ [data-theme="light"] .callout-note { background: hsla(217, 91%, 60%, 0.05); }
91
+ [data-theme="light"] .callout-warning { background: hsla(43, 96%, 56%, 0.05); }
92
+ [data-theme="light"] .callout-tip { background: hsla(160, 64%, 52%, 0.05); }
93
+ [data-theme="light"] .callout-danger { background: hsla(0, 91%, 71%, 0.05); }
94
+
95
+ /* Tabs */
96
+
97
+ .tabs {
98
+ margin-top: 1.5rem;
99
+ border: 1px solid var(--nd-border);
100
+ border-radius: var(--nd-radius);
101
+ overflow: hidden;
102
+ }
103
+
104
+ .tabs-bar {
105
+ display: flex;
106
+ border-bottom: 1px solid var(--nd-border);
107
+ background: var(--nd-card-bg);
108
+ overflow-x: auto;
109
+ scrollbar-width: none;
110
+ }
111
+
112
+ .tabs-bar::-webkit-scrollbar {
113
+ display: none;
114
+ }
115
+
116
+ .tabs-trigger {
117
+ padding: 0.625rem 1rem;
118
+ font-family: inherit;
119
+ font-size: 0.875rem;
120
+ font-weight: 500;
121
+ color: var(--nd-muted);
122
+ background: none;
123
+ border: none;
124
+ border-bottom: 2px solid transparent;
125
+ cursor: pointer;
126
+ white-space: nowrap;
127
+ transition: color 0.15s ease, border-color 0.15s ease;
128
+ }
129
+
130
+ .tabs-trigger:hover {
131
+ color: var(--nd-fg);
132
+ }
133
+
134
+ .tabs-trigger[aria-selected="true"] {
135
+ color: var(--nd-fg);
136
+ border-bottom-color: var(--nd-accent);
137
+ }
138
+
139
+ .tabs-panel {
140
+ padding: 1rem 1.25rem;
141
+ }
142
+
143
+ .tabs-panel[hidden] {
144
+ display: none;
145
+ }
146
+
147
+ /* Steps */
148
+
149
+ .steps {
150
+ list-style: none;
151
+ padding-left: 0;
152
+ margin-top: 1.5rem;
153
+ counter-reset: steps;
154
+ }
155
+
156
+ .steps > li {
157
+ position: relative;
158
+ padding-left: 2.75rem;
159
+ padding-bottom: 1.5rem;
160
+ counter-increment: steps;
161
+ }
162
+
163
+ .steps > li:last-child {
164
+ padding-bottom: 0;
165
+ }
166
+
167
+ /* Numbered circle */
168
+ .steps > li::before {
169
+ content: counter(steps);
170
+ position: absolute;
171
+ left: 0;
172
+ top: 0.125rem;
173
+ display: flex;
174
+ align-items: center;
175
+ justify-content: center;
176
+ width: 1.75rem;
177
+ height: 1.75rem;
178
+ border-radius: 50%;
179
+ border: 1px solid var(--nd-border);
180
+ background: var(--nd-card-bg);
181
+ font-size: 0.875rem;
182
+ font-weight: 600;
183
+ color: var(--nd-fg);
184
+ }
185
+
186
+ /* Vertical line */
187
+ .steps > li::after {
188
+ content: '';
189
+ position: absolute;
190
+ left: calc(0.875rem - 0.5px);
191
+ top: 2.125rem;
192
+ bottom: 0;
193
+ width: 1px;
194
+ background: var(--nd-border);
195
+ }
196
+
197
+ .steps > li:last-child::after {
198
+ display: none;
199
+ }
200
+
201
+ .steps > li > h3,
202
+ .steps > li > strong {
203
+ display: block;
204
+ font-size: 1rem;
205
+ font-weight: 600;
206
+ margin-bottom: 0.5rem;
207
+ }
208
+
209
+ /* Cards */
210
+
211
+ .card {
212
+ display: flex;
213
+ flex-direction: column;
214
+ gap: 0.375rem;
215
+ padding: 1.25rem;
216
+ border: 1px solid var(--nd-border);
217
+ border-radius: var(--nd-radius);
218
+ background: var(--nd-card-bg);
219
+ transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.2s ease;
220
+ }
221
+
222
+ a.card:hover,
223
+ .card--link:hover {
224
+ background: var(--nd-card-hover);
225
+ border-color: hsla(0, 0%, 40%, 0.35);
226
+ box-shadow: 0 2px 8px hsla(0, 0%, 0%, 0.08);
227
+ }
228
+
229
+ .card-icon {
230
+ display: flex;
231
+ align-items: center;
232
+ justify-content: center;
233
+ width: 2.25rem;
234
+ height: 2.25rem;
235
+ border-radius: var(--nd-radius);
236
+ background: var(--nd-card-hover);
237
+ margin-bottom: 0.375rem;
238
+ color: var(--nd-accent);
239
+ }
240
+
241
+ .card-icon svg {
242
+ width: 1.25rem;
243
+ height: 1.25rem;
244
+ }
245
+
246
+ .card-title {
247
+ font-size: 1rem;
248
+ font-weight: 600;
249
+ color: var(--nd-fg);
250
+ }
251
+
252
+ .card-description {
253
+ font-size: 0.875rem;
254
+ color: var(--nd-muted);
255
+ line-height: 1.5;
256
+ }
257
+
258
+ /* Card grid helper */
259
+ .card-grid {
260
+ display: grid;
261
+ grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
262
+ gap: 1rem;
263
+ margin-top: 1.5rem;
264
+ }