bsmnt 0.1.0 → 0.1.2
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/CHANGELOG.md +16 -0
- package/CLAUDE.md +2 -3
- package/README.md +1 -2
- package/bun.lock +1 -1
- package/docs/architecture.drawio +0 -16
- package/docs/architecture.mermaid +1 -7
- package/package.json +42 -42
- package/packages/cli/bin/index.js +0 -4
- package/packages/cli/src/commands/add-integration.js +1 -14
- package/packages/cli/src/commands/create.js +28 -5
- package/packages/create-basement-app/src/mergers/config.js +4 -26
- package/packages/create-basement-app/src/mergers/index.js +2 -5
- package/packages/create-basement-app/templates/webgl/components/webgl/canvas/index.tsx +3 -8
- package/packages/create-basement-app/templates/webgl/components/webgl/components/scene/index.tsx +11 -3
- package/packages/create-basement-app/templates/webgl/lib/renderer.ts +7 -0
- package/packages/create-basement-app/templates/webgl/package.json +2 -2
- package/packages/create-basement-app/integrations/basehub/config.js +0 -21
- package/packages/create-basement-app/integrations/basehub/files/README.md +0 -3
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/README.md +0 -21
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-anchor-element.grit +0 -12
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-relative-parent-imports.grit +0 -10
- package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/README.md +0 -184
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/architecture.mdc +0 -437
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/components.mdc +0 -436
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/integrations.mdc +0 -447
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/main.mdc +0 -278
- package/packages/create-basement-app/templates/webgpu/.cursor/rules/styling.mdc +0 -433
- package/packages/create-basement-app/templates/webgpu/.editorconfig +0 -40
- package/packages/create-basement-app/templates/webgpu/.env.example +0 -81
- package/packages/create-basement-app/templates/webgpu/.gitattributes +0 -19
- package/packages/create-basement-app/templates/webgpu/.github/PULL_REQUEST_TEMPLATE.md +0 -14
- package/packages/create-basement-app/templates/webgpu/.github/workflows/lighthouse-to-slack.yml +0 -136
- package/packages/create-basement-app/templates/webgpu/.vscode/extensions.json +0 -20
- package/packages/create-basement-app/templates/webgpu/.vscode/settings.json +0 -105
- package/packages/create-basement-app/templates/webgpu/README.md +0 -221
- package/packages/create-basement-app/templates/webgpu/_gitignore +0 -67
- package/packages/create-basement-app/templates/webgpu/app/favicon.ico +0 -0
- package/packages/create-basement-app/templates/webgpu/app/layout.tsx +0 -104
- package/packages/create-basement-app/templates/webgpu/app/page.tsx +0 -275
- package/packages/create-basement-app/templates/webgpu/app/robots.ts +0 -15
- package/packages/create-basement-app/templates/webgpu/app/sitemap.ts +0 -16
- package/packages/create-basement-app/templates/webgpu/biome.json +0 -250
- package/packages/create-basement-app/templates/webgpu/components/basement.svg +0 -1
- package/packages/create-basement-app/templates/webgpu/components/layout/footer/index.tsx +0 -27
- package/packages/create-basement-app/templates/webgpu/components/layout/header/index.tsx +0 -11
- package/packages/create-basement-app/templates/webgpu/components/layout/theme/index.tsx +0 -66
- package/packages/create-basement-app/templates/webgpu/components/layout/wrapper/index.tsx +0 -65
- package/packages/create-basement-app/templates/webgpu/components/ui/README.md +0 -77
- package/packages/create-basement-app/templates/webgpu/components/ui/image/README.md +0 -37
- package/packages/create-basement-app/templates/webgpu/components/ui/image/index.tsx +0 -224
- package/packages/create-basement-app/templates/webgpu/components/ui/link/index.tsx +0 -146
- package/packages/create-basement-app/templates/webgpu/lib/README.md +0 -33
- package/packages/create-basement-app/templates/webgpu/lib/hooks/index.ts +0 -12
- package/packages/create-basement-app/templates/webgpu/lib/hooks/use-device-detection.ts +0 -81
- package/packages/create-basement-app/templates/webgpu/lib/hooks/use-media-breakpoint.ts +0 -15
- package/packages/create-basement-app/templates/webgpu/lib/hooks/use-prefetch.ts +0 -74
- package/packages/create-basement-app/templates/webgpu/lib/integrations/.gitkeep +0 -0
- package/packages/create-basement-app/templates/webgpu/lib/scripts/dev.ts +0 -52
- package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-component.ts +0 -322
- package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-page.ts +0 -193
- package/packages/create-basement-app/templates/webgpu/lib/scripts/generate.ts +0 -79
- package/packages/create-basement-app/templates/webgpu/lib/scripts/utils.ts +0 -246
- package/packages/create-basement-app/templates/webgpu/lib/store/app.ts +0 -11
- package/packages/create-basement-app/templates/webgpu/lib/store/index.ts +0 -11
- package/packages/create-basement-app/templates/webgpu/lib/styles/README.md +0 -64
- package/packages/create-basement-app/templates/webgpu/lib/styles/cn.ts +0 -7
- package/packages/create-basement-app/templates/webgpu/lib/styles/colors.ts +0 -63
- package/packages/create-basement-app/templates/webgpu/lib/styles/config.ts +0 -34
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/global.css +0 -85
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/index.css +0 -6
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/reset.css +0 -166
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/root.css +0 -68
- package/packages/create-basement-app/templates/webgpu/lib/styles/css/tailwind.css +0 -132
- package/packages/create-basement-app/templates/webgpu/lib/styles/easings.ts +0 -21
- package/packages/create-basement-app/templates/webgpu/lib/styles/fonts.ts +0 -28
- package/packages/create-basement-app/templates/webgpu/lib/styles/index.ts +0 -12
- package/packages/create-basement-app/templates/webgpu/lib/styles/layout.mjs +0 -27
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/README.md +0 -29
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-root.ts +0 -57
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-tailwind.ts +0 -162
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/postcss-functions.mjs +0 -168
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/setup-styles.ts +0 -24
- package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/utils.ts +0 -20
- package/packages/create-basement-app/templates/webgpu/lib/styles/typography.ts +0 -36
- package/packages/create-basement-app/templates/webgpu/lib/utils/README.md +0 -40
- package/packages/create-basement-app/templates/webgpu/lib/utils/css.d.ts +0 -21
- package/packages/create-basement-app/templates/webgpu/lib/utils/easings.ts +0 -240
- package/packages/create-basement-app/templates/webgpu/lib/utils/fetch.ts +0 -84
- package/packages/create-basement-app/templates/webgpu/lib/utils/math.test.ts +0 -221
- package/packages/create-basement-app/templates/webgpu/lib/utils/math.ts +0 -236
- package/packages/create-basement-app/templates/webgpu/lib/utils/metadata.ts +0 -126
- package/packages/create-basement-app/templates/webgpu/lib/utils/strings.test.ts +0 -166
- package/packages/create-basement-app/templates/webgpu/lib/utils/strings.ts +0 -246
- package/packages/create-basement-app/templates/webgpu/lib/utils/types.d.ts +0 -15
- package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.test.ts +0 -256
- package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.ts +0 -193
- package/packages/create-basement-app/templates/webgpu/next.config.ts +0 -142
- package/packages/create-basement-app/templates/webgpu/package.json +0 -69
- package/packages/create-basement-app/templates/webgpu/postcss.config.mjs +0 -42
- package/packages/create-basement-app/templates/webgpu/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/packages/create-basement-app/templates/webgpu/tsconfig.json +0 -43
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared Script Utilities
|
|
3
|
-
*
|
|
4
|
-
* Cross-platform utilities for CLI scripts.
|
|
5
|
-
* Works on Windows, macOS, and Linux.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { access, mkdir, rm } from "node:fs/promises"
|
|
9
|
-
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// Path Utilities
|
|
12
|
-
// ============================================================================
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Get the project root directory
|
|
16
|
-
*/
|
|
17
|
-
export const projectRoot = process.cwd()
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Resolve a path relative to the project root
|
|
21
|
-
*/
|
|
22
|
-
export const resolvePath = (path: string): string => `${projectRoot}/${path}`
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Check if a file or directory exists
|
|
26
|
-
*/
|
|
27
|
-
export const pathExists = async (path: string): Promise<boolean> => {
|
|
28
|
-
try {
|
|
29
|
-
await access(path)
|
|
30
|
-
return true
|
|
31
|
-
} catch {
|
|
32
|
-
return false
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// ============================================================================
|
|
37
|
-
// File System Operations (Cross-platform)
|
|
38
|
-
// ============================================================================
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Remove a directory recursively
|
|
42
|
-
* @param path - Relative path from project root
|
|
43
|
-
* @param dryRun - If true, skip actual deletion
|
|
44
|
-
*/
|
|
45
|
-
export const removeDir = async (
|
|
46
|
-
path: string,
|
|
47
|
-
dryRun = false
|
|
48
|
-
): Promise<boolean> => {
|
|
49
|
-
try {
|
|
50
|
-
const fullPath = resolvePath(path)
|
|
51
|
-
|
|
52
|
-
// Check if path exists
|
|
53
|
-
if (!(await pathExists(fullPath))) {
|
|
54
|
-
return false
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (!dryRun) {
|
|
58
|
-
await rm(fullPath, { recursive: true, force: true })
|
|
59
|
-
}
|
|
60
|
-
return true
|
|
61
|
-
} catch {
|
|
62
|
-
return false
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Remove a file
|
|
68
|
-
* @param path - Relative path from project root
|
|
69
|
-
* @param dryRun - If true, skip actual deletion
|
|
70
|
-
*/
|
|
71
|
-
export const removeFile = async (
|
|
72
|
-
path: string,
|
|
73
|
-
dryRun = false
|
|
74
|
-
): Promise<boolean> => {
|
|
75
|
-
try {
|
|
76
|
-
const fullPath = resolvePath(path)
|
|
77
|
-
const file = Bun.file(fullPath)
|
|
78
|
-
const exists = await file.exists()
|
|
79
|
-
|
|
80
|
-
if (!exists) return false
|
|
81
|
-
|
|
82
|
-
if (!dryRun) {
|
|
83
|
-
await rm(fullPath, { force: true })
|
|
84
|
-
}
|
|
85
|
-
return true
|
|
86
|
-
} catch {
|
|
87
|
-
return false
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Create a directory (and parent directories if needed)
|
|
93
|
-
* @param path - Relative path from project root
|
|
94
|
-
*/
|
|
95
|
-
export const createDir = async (path: string): Promise<void> => {
|
|
96
|
-
await mkdir(resolvePath(path), { recursive: true })
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// ============================================================================
|
|
100
|
-
// Process Utilities
|
|
101
|
-
// ============================================================================
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Get the current Bun executable path (cross-platform)
|
|
105
|
-
*/
|
|
106
|
-
export const bunExecutable = process.execPath
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Current platform
|
|
110
|
-
*/
|
|
111
|
-
export const platform = process.platform
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Check if running on Windows
|
|
115
|
-
*/
|
|
116
|
-
export const isWindows = platform === "win32"
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Check if running on macOS
|
|
120
|
-
*/
|
|
121
|
-
export const isMacOS = platform === "darwin"
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Check if running on Linux
|
|
125
|
-
*/
|
|
126
|
-
export const isLinux = platform === "linux"
|
|
127
|
-
|
|
128
|
-
// ============================================================================
|
|
129
|
-
// CLI Argument Utilities
|
|
130
|
-
// ============================================================================
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Parse common CLI flags from process.argv
|
|
134
|
-
*/
|
|
135
|
-
export const parseCliFlags = (
|
|
136
|
-
argv: string[] = process.argv.slice(2)
|
|
137
|
-
): {
|
|
138
|
-
dryRun: boolean
|
|
139
|
-
verbose: boolean
|
|
140
|
-
help: boolean
|
|
141
|
-
args: string[]
|
|
142
|
-
} => {
|
|
143
|
-
return {
|
|
144
|
-
dryRun: argv.includes("--dry-run") || argv.includes("-d"),
|
|
145
|
-
verbose: argv.includes("--verbose") || argv.includes("-v"),
|
|
146
|
-
help: argv.includes("--help") || argv.includes("-h"),
|
|
147
|
-
args: argv.filter(
|
|
148
|
-
(arg) =>
|
|
149
|
-
!["--dry-run", "-d", "--verbose", "-v", "--help", "-h"].includes(arg)
|
|
150
|
-
),
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// ============================================================================
|
|
155
|
-
// Clipboard Utilities (Cross-platform)
|
|
156
|
-
// ============================================================================
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Copy text to clipboard (cross-platform)
|
|
160
|
-
* @returns true if successful, false otherwise
|
|
161
|
-
*/
|
|
162
|
-
export const copyToClipboard = async (text: string): Promise<boolean> => {
|
|
163
|
-
try {
|
|
164
|
-
if (isMacOS) {
|
|
165
|
-
const proc = Bun.spawn(["pbcopy"], { stdin: "pipe" })
|
|
166
|
-
proc.stdin.write(text)
|
|
167
|
-
proc.stdin.end()
|
|
168
|
-
await proc.exited
|
|
169
|
-
return proc.exitCode === 0
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (isLinux) {
|
|
173
|
-
// Try xclip first, then xsel
|
|
174
|
-
for (const cmd of [
|
|
175
|
-
["xclip", "-selection", "clipboard"],
|
|
176
|
-
["xsel", "--clipboard", "--input"],
|
|
177
|
-
]) {
|
|
178
|
-
try {
|
|
179
|
-
const proc = Bun.spawn(cmd, { stdin: "pipe" })
|
|
180
|
-
proc.stdin.write(text)
|
|
181
|
-
proc.stdin.end()
|
|
182
|
-
await proc.exited
|
|
183
|
-
if (proc.exitCode === 0) return true
|
|
184
|
-
} catch {
|
|
185
|
-
// Silently try next clipboard command
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return false
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
if (isWindows) {
|
|
192
|
-
const proc = Bun.spawn(["clip"], { stdin: "pipe" })
|
|
193
|
-
proc.stdin.write(text)
|
|
194
|
-
proc.stdin.end()
|
|
195
|
-
await proc.exited
|
|
196
|
-
return proc.exitCode === 0
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
return false
|
|
200
|
-
} catch {
|
|
201
|
-
return false
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// ============================================================================
|
|
206
|
-
// Spawn Utilities
|
|
207
|
-
// ============================================================================
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
* Spawn a process with inherited stdio (cross-platform)
|
|
211
|
-
* Uses Bun.spawn with proper defaults
|
|
212
|
-
*/
|
|
213
|
-
export const spawn = (
|
|
214
|
-
args: string[],
|
|
215
|
-
options: {
|
|
216
|
-
env?: Record<string, string | undefined>
|
|
217
|
-
cwd?: string
|
|
218
|
-
stdin?: "inherit" | "pipe"
|
|
219
|
-
stdout?: "inherit" | "pipe"
|
|
220
|
-
stderr?: "inherit" | "pipe"
|
|
221
|
-
} = {}
|
|
222
|
-
) => {
|
|
223
|
-
const spawnOptions: Parameters<typeof Bun.spawn>[1] = {
|
|
224
|
-
stdin: options.stdin ?? "inherit",
|
|
225
|
-
stdout: options.stdout ?? "inherit",
|
|
226
|
-
stderr: options.stderr ?? "inherit",
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (options.cwd) spawnOptions.cwd = options.cwd
|
|
230
|
-
if (options.env) spawnOptions.env = options.env
|
|
231
|
-
|
|
232
|
-
return Bun.spawn(args, spawnOptions)
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Build environment with FORCE_COLOR enabled
|
|
237
|
-
* Removes NO_COLOR to prevent warnings
|
|
238
|
-
*/
|
|
239
|
-
export const colorEnv = (): Record<string, string | undefined> => {
|
|
240
|
-
const env = { ...process.env, FORCE_COLOR: "1" } as Record<
|
|
241
|
-
string,
|
|
242
|
-
string | undefined
|
|
243
|
-
>
|
|
244
|
-
delete env.NO_COLOR
|
|
245
|
-
return env
|
|
246
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { create } from "zustand"
|
|
2
|
-
|
|
3
|
-
type Store = {
|
|
4
|
-
isNavOpened: boolean
|
|
5
|
-
setIsNavOpened: (value: boolean) => void
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export const useStore = create<Store>((set) => ({
|
|
9
|
-
isNavOpened: false,
|
|
10
|
-
setIsNavOpened: (value: boolean) => set({ isNavOpened: value }),
|
|
11
|
-
}))
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# Styles
|
|
2
|
-
|
|
3
|
-
Hybrid styling with Tailwind CSS v4 and custom PostCSS functions.
|
|
4
|
-
|
|
5
|
-
## PostCSS Functions
|
|
6
|
-
|
|
7
|
-
```css
|
|
8
|
-
/* Viewport-relative sizing */
|
|
9
|
-
.element {
|
|
10
|
-
width: tovw(100); /* 6.94vw (100px at 1440px) */
|
|
11
|
-
width: tovw(100, 50); /* max(50px, 6.94vw) */
|
|
12
|
-
width: tovw(16, undefined, 'mobile'); /* 4.27vw (16px at 375px) */
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/* Relative units */
|
|
16
|
-
.text {
|
|
17
|
-
font-size: torem(24); /* 1.5rem (24px / 16px) */
|
|
18
|
-
padding: toem(16, 14); /* 1.14em (16px / 14px) */
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/* Grid columns */
|
|
22
|
-
.sidebar {
|
|
23
|
-
width: columns(3); /* Spans 3 columns + gaps */
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Custom Utilities (`dr-*`)
|
|
28
|
-
|
|
29
|
-
```tsx
|
|
30
|
-
// Responsive sizing (scales with viewport)
|
|
31
|
-
<div className="dr-w-150 dr-h-100" />
|
|
32
|
-
|
|
33
|
-
// Column-based sizing
|
|
34
|
-
<div className="dr-w-col-4" /> {/* 4 columns wide */}
|
|
35
|
-
|
|
36
|
-
// Grid layout
|
|
37
|
-
<div className="dr-grid" /> {/* 4 cols mobile, 12 cols desktop */}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Breakpoints
|
|
41
|
-
|
|
42
|
-
```css
|
|
43
|
-
@media (--mobile) { /* <= 799px */ }
|
|
44
|
-
@media (--desktop) { /* >= 800px */ }
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Configuration
|
|
48
|
-
|
|
49
|
-
| File | Purpose |
|
|
50
|
-
|------|---------|
|
|
51
|
-
| `colors.ts` | Color palette & themes |
|
|
52
|
-
| `typography.ts` | Font sizes & weights |
|
|
53
|
-
| `layout.mjs` | Grid, breakpoints, spacing |
|
|
54
|
-
| `easings.ts` | Animation curves |
|
|
55
|
-
| `fonts.ts` | Font loading |
|
|
56
|
-
|
|
57
|
-
After changing config: `bun setup:styles`
|
|
58
|
-
|
|
59
|
-
## Generated Files (Don't Edit)
|
|
60
|
-
|
|
61
|
-
- `css/root.css` — CSS custom properties
|
|
62
|
-
- `css/tailwind.css` — Tailwind utilities
|
|
63
|
-
|
|
64
|
-
See [scripts/README.md](scripts/README.md) for generation details.
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
const palettes = {
|
|
2
|
-
gray: {
|
|
3
|
-
50: "#F5F5F5",
|
|
4
|
-
100: "#E0E0E0",
|
|
5
|
-
200: "#C2C2C2",
|
|
6
|
-
300: "#A3A3A3",
|
|
7
|
-
400: "#858585",
|
|
8
|
-
500: "#666666",
|
|
9
|
-
600: "#4D4D4D",
|
|
10
|
-
700: "#333333",
|
|
11
|
-
800: "#1A1A1A",
|
|
12
|
-
},
|
|
13
|
-
blue: {
|
|
14
|
-
500: "#487CFF",
|
|
15
|
-
},
|
|
16
|
-
green: {
|
|
17
|
-
500: "#00FF9B",
|
|
18
|
-
},
|
|
19
|
-
violet: {
|
|
20
|
-
500: "#F101A5",
|
|
21
|
-
},
|
|
22
|
-
pink: {
|
|
23
|
-
500: "#FF73A6",
|
|
24
|
-
},
|
|
25
|
-
orange: {
|
|
26
|
-
500: "#FF4D00",
|
|
27
|
-
},
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const colors = {
|
|
31
|
-
black: "#000000",
|
|
32
|
-
white: "#ffffff",
|
|
33
|
-
orange: palettes.orange[500],
|
|
34
|
-
blue: palettes.blue[500],
|
|
35
|
-
green: palettes.green[500],
|
|
36
|
-
violet: palettes.violet[500],
|
|
37
|
-
pink: palettes.pink[500],
|
|
38
|
-
gray: palettes.gray[500],
|
|
39
|
-
} as const
|
|
40
|
-
|
|
41
|
-
const themeNames = ["light", "dark"] as const
|
|
42
|
-
const colorNames = ["primary", "secondary", "contrast"] as const
|
|
43
|
-
|
|
44
|
-
const themes = {
|
|
45
|
-
light: {
|
|
46
|
-
primary: colors.white,
|
|
47
|
-
secondary: colors.black,
|
|
48
|
-
contrast: colors.orange,
|
|
49
|
-
},
|
|
50
|
-
dark: {
|
|
51
|
-
primary: colors.black,
|
|
52
|
-
secondary: colors.white,
|
|
53
|
-
contrast: colors.orange,
|
|
54
|
-
},
|
|
55
|
-
} as const satisfies Themes
|
|
56
|
-
|
|
57
|
-
export { colors, palettes, themeNames, themes }
|
|
58
|
-
|
|
59
|
-
// UTIL TYPES
|
|
60
|
-
export type Themes = Record<
|
|
61
|
-
(typeof themeNames)[number],
|
|
62
|
-
Record<(typeof colorNames)[number], string>
|
|
63
|
-
>
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { colors, palettes, themeNames, themes } from "./colors"
|
|
2
|
-
import { easings } from "./easings"
|
|
3
|
-
import { breakpoints, customSizes, layout, screens } from "./layout.mjs"
|
|
4
|
-
import { fonts, typography } from "./typography"
|
|
5
|
-
|
|
6
|
-
const config = {
|
|
7
|
-
breakpoints,
|
|
8
|
-
colors,
|
|
9
|
-
customSizes,
|
|
10
|
-
easings,
|
|
11
|
-
fonts,
|
|
12
|
-
layout,
|
|
13
|
-
palettes,
|
|
14
|
-
screens,
|
|
15
|
-
themeNames,
|
|
16
|
-
themes,
|
|
17
|
-
typography,
|
|
18
|
-
} as const
|
|
19
|
-
|
|
20
|
-
export {
|
|
21
|
-
breakpoints,
|
|
22
|
-
colors,
|
|
23
|
-
customSizes,
|
|
24
|
-
easings,
|
|
25
|
-
fonts,
|
|
26
|
-
layout,
|
|
27
|
-
palettes,
|
|
28
|
-
screens,
|
|
29
|
-
themeNames,
|
|
30
|
-
themes,
|
|
31
|
-
typography,
|
|
32
|
-
}
|
|
33
|
-
export type ThemeName = keyof typeof themes
|
|
34
|
-
export type Config = typeof config
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/* GLOBAL CSS FILE - Contains global styles that shouldn't be reset */
|
|
2
|
-
|
|
3
|
-
html {
|
|
4
|
-
--scrollbar-gutter: 0px;
|
|
5
|
-
scrollbar-gutter: stable; /* This is needed to prevent the scrollbar from jumping */
|
|
6
|
-
|
|
7
|
-
&.lenis-stopped {
|
|
8
|
-
--scrollbar-gutter: var(--scrollbar-width);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
html.overflow-hidden {
|
|
13
|
-
overflow: hidden;
|
|
14
|
-
touch-action: none;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
body {
|
|
18
|
-
min-height: 100vh;
|
|
19
|
-
overscroll-behavior: none;
|
|
20
|
-
background-color: var(--color-primary);
|
|
21
|
-
color: var(--color-secondary);
|
|
22
|
-
display: flex;
|
|
23
|
-
flex-direction: column;
|
|
24
|
-
-webkit-font-smoothing: antialiased;
|
|
25
|
-
-moz-osx-font-smoothing: grayscale;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/* Selection styling */
|
|
29
|
-
*::selection {
|
|
30
|
-
background-color: var(--color-contrast);
|
|
31
|
-
color: var(--color-primary);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/* SVG icon colors */
|
|
35
|
-
svg.icon {
|
|
36
|
-
path[fill],
|
|
37
|
-
rect[fill],
|
|
38
|
-
circle[fill] {
|
|
39
|
-
fill: currentColor;
|
|
40
|
-
}
|
|
41
|
-
path[stroke],
|
|
42
|
-
rect[stroke],
|
|
43
|
-
circle[stroke] {
|
|
44
|
-
stroke: currentColor;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* Hover states */
|
|
49
|
-
.link {
|
|
50
|
-
@media (--hover) {
|
|
51
|
-
&:hover {
|
|
52
|
-
text-decoration: underline;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* Focus states */
|
|
58
|
-
*:focus-visible {
|
|
59
|
-
outline: 2px solid var(--color-contrast);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
html.scrollbar-grabbing,
|
|
63
|
-
img {
|
|
64
|
-
-webkit-touch-callout: none;
|
|
65
|
-
-webkit-user-select: none;
|
|
66
|
-
-moz-user-select: none;
|
|
67
|
-
-ms-user-select: none;
|
|
68
|
-
-o-user-select: none;
|
|
69
|
-
user-select: none;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
button {
|
|
73
|
-
cursor: pointer;
|
|
74
|
-
/* Fix vertical text centering by trimming font metric space */
|
|
75
|
-
text-box-trim: both;
|
|
76
|
-
text-box-edge: cap alphabetic;
|
|
77
|
-
user-select: none;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
html.screenshot {
|
|
81
|
-
*:not(:has(canvas), canvas, :has(#orchestra), #orchestra, #orchestra *) {
|
|
82
|
-
/* biome-ignore lint: it's all good */
|
|
83
|
-
opacity: 0 !important;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/***
|
|
2
|
-
The new CSS reset - version 1.11.3 (last updated 25.08.2024)
|
|
3
|
-
GitHub page: https://github.com/elad2412/the-new-css-reset
|
|
4
|
-
***/
|
|
5
|
-
|
|
6
|
-
/*
|
|
7
|
-
Remove all the styles of the "User-Agent-Stylesheet", except for the 'display' property
|
|
8
|
-
- The "symbol *" part is to solve Firefox SVG sprite bug
|
|
9
|
-
- The "html" element is excluded, otherwise a bug in Chrome breaks the CSS hyphens property (https://github.com/elad2412/the-new-css-reset/issues/36)
|
|
10
|
-
*/
|
|
11
|
-
*:where(
|
|
12
|
-
:not(
|
|
13
|
-
html,
|
|
14
|
-
iframe,
|
|
15
|
-
canvas,
|
|
16
|
-
img,
|
|
17
|
-
svg,
|
|
18
|
-
video,
|
|
19
|
-
audio,
|
|
20
|
-
dialog,
|
|
21
|
-
vercel-live-feedback,
|
|
22
|
-
nextjs-portal,
|
|
23
|
-
:where(select, option)
|
|
24
|
-
):not(svg *, symbol *)
|
|
25
|
-
) {
|
|
26
|
-
all: unset;
|
|
27
|
-
display: revert;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/* Preferred box-sizing value */
|
|
31
|
-
*,
|
|
32
|
-
*::before,
|
|
33
|
-
*::after {
|
|
34
|
-
box-sizing: border-box;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/* Fix mobile Safari increase font-size on landscape mode */
|
|
38
|
-
html {
|
|
39
|
-
-moz-text-size-adjust: none;
|
|
40
|
-
-webkit-text-size-adjust: none;
|
|
41
|
-
text-size-adjust: none;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* Reapply the pointer cursor for anchor tags */
|
|
45
|
-
a,
|
|
46
|
-
button {
|
|
47
|
-
cursor: revert;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/* Remove list styles (bullets/numbers) */
|
|
51
|
-
ol,
|
|
52
|
-
ul,
|
|
53
|
-
menu,
|
|
54
|
-
summary {
|
|
55
|
-
list-style: none;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/* Firefox: solve issue where nested ordered lists continue numbering from parent (https://bugzilla.mozilla.org/show_bug.cgi?id=1881517) */
|
|
59
|
-
ol {
|
|
60
|
-
counter-reset: revert;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/* For images to not be able to exceed their container */
|
|
64
|
-
img {
|
|
65
|
-
max-inline-size: 100%;
|
|
66
|
-
max-block-size: 100%;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/* removes spacing between cells in tables */
|
|
70
|
-
table {
|
|
71
|
-
border-collapse: collapse;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/* Safari - solving issue when using user-select:none on the <body> text input doesn't working */
|
|
75
|
-
input,
|
|
76
|
-
textarea {
|
|
77
|
-
-webkit-user-select: auto;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/* revert the 'white-space' property for textarea elements on Safari */
|
|
81
|
-
textarea {
|
|
82
|
-
white-space: revert;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/* minimum style to allow to style meter element */
|
|
86
|
-
meter {
|
|
87
|
-
-webkit-appearance: revert;
|
|
88
|
-
appearance: revert;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/* preformatted text - use only for this feature */
|
|
92
|
-
:where(pre) {
|
|
93
|
-
all: revert;
|
|
94
|
-
box-sizing: border-box;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/* reset default text opacity of input placeholder */
|
|
98
|
-
::placeholder {
|
|
99
|
-
color: unset;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/* fix the feature of 'hidden' attribute.
|
|
103
|
-
display:revert; revert to element instead of attribute */
|
|
104
|
-
:where([hidden]) {
|
|
105
|
-
display: none;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/* revert for bug in Chromium browsers
|
|
109
|
-
- fix for the content editable attribute will work properly.
|
|
110
|
-
- webkit-user-select: auto; added for Safari in case of using user-select:none on wrapper element*/
|
|
111
|
-
:where([contenteditable]:not([contenteditable="false"])) {
|
|
112
|
-
-moz-user-modify: read-write;
|
|
113
|
-
-webkit-user-modify: read-write;
|
|
114
|
-
overflow-wrap: break-word;
|
|
115
|
-
-webkit-line-break: after-white-space;
|
|
116
|
-
-webkit-user-select: auto;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/* apply back the draggable feature - exist only in Chromium and Safari */
|
|
120
|
-
:where([draggable="true"]) {
|
|
121
|
-
-webkit-user-drag: element;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/* Revert Modal native behavior */
|
|
125
|
-
:where(dialog:modal) {
|
|
126
|
-
all: revert;
|
|
127
|
-
box-sizing: border-box;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/* Remove details summary webkit styles */
|
|
131
|
-
::-webkit-details-marker {
|
|
132
|
-
display: none;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/* Add support for color-scheme */
|
|
136
|
-
:root {
|
|
137
|
-
color-scheme: light dark;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/* Add support for newer form controls */
|
|
141
|
-
:where(input[type="file"]) {
|
|
142
|
-
cursor: default;
|
|
143
|
-
-webkit-appearance: none;
|
|
144
|
-
appearance: none;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/* Improve text rendering */
|
|
148
|
-
html {
|
|
149
|
-
text-size-adjust: 100%;
|
|
150
|
-
-webkit-text-size-adjust: 100%;
|
|
151
|
-
-moz-text-size-adjust: 100%;
|
|
152
|
-
text-rendering: optimizeLegibility;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/* Remove tap highlight on iOS */
|
|
156
|
-
a,
|
|
157
|
-
button {
|
|
158
|
-
-webkit-tap-highlight-color: transparent;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/* Improve media defaults */
|
|
162
|
-
video,
|
|
163
|
-
audio {
|
|
164
|
-
max-inline-size: 100%;
|
|
165
|
-
max-block-size: 100%;
|
|
166
|
-
}
|