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.
Files changed (102) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CLAUDE.md +2 -3
  3. package/README.md +1 -2
  4. package/bun.lock +1 -1
  5. package/docs/architecture.drawio +0 -16
  6. package/docs/architecture.mermaid +1 -7
  7. package/package.json +42 -42
  8. package/packages/cli/bin/index.js +0 -4
  9. package/packages/cli/src/commands/add-integration.js +1 -14
  10. package/packages/cli/src/commands/create.js +28 -5
  11. package/packages/create-basement-app/src/mergers/config.js +4 -26
  12. package/packages/create-basement-app/src/mergers/index.js +2 -5
  13. package/packages/create-basement-app/templates/webgl/components/webgl/canvas/index.tsx +3 -8
  14. package/packages/create-basement-app/templates/webgl/components/webgl/components/scene/index.tsx +11 -3
  15. package/packages/create-basement-app/templates/webgl/lib/renderer.ts +7 -0
  16. package/packages/create-basement-app/templates/webgl/package.json +2 -2
  17. package/packages/create-basement-app/integrations/basehub/config.js +0 -21
  18. package/packages/create-basement-app/integrations/basehub/files/README.md +0 -3
  19. package/packages/create-basement-app/templates/webgpu/.biome/plugins/README.md +0 -21
  20. package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-anchor-element.grit +0 -12
  21. package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-relative-parent-imports.grit +0 -10
  22. package/packages/create-basement-app/templates/webgpu/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
  23. package/packages/create-basement-app/templates/webgpu/.cursor/rules/README.md +0 -184
  24. package/packages/create-basement-app/templates/webgpu/.cursor/rules/architecture.mdc +0 -437
  25. package/packages/create-basement-app/templates/webgpu/.cursor/rules/components.mdc +0 -436
  26. package/packages/create-basement-app/templates/webgpu/.cursor/rules/integrations.mdc +0 -447
  27. package/packages/create-basement-app/templates/webgpu/.cursor/rules/main.mdc +0 -278
  28. package/packages/create-basement-app/templates/webgpu/.cursor/rules/styling.mdc +0 -433
  29. package/packages/create-basement-app/templates/webgpu/.editorconfig +0 -40
  30. package/packages/create-basement-app/templates/webgpu/.env.example +0 -81
  31. package/packages/create-basement-app/templates/webgpu/.gitattributes +0 -19
  32. package/packages/create-basement-app/templates/webgpu/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  33. package/packages/create-basement-app/templates/webgpu/.github/workflows/lighthouse-to-slack.yml +0 -136
  34. package/packages/create-basement-app/templates/webgpu/.vscode/extensions.json +0 -20
  35. package/packages/create-basement-app/templates/webgpu/.vscode/settings.json +0 -105
  36. package/packages/create-basement-app/templates/webgpu/README.md +0 -221
  37. package/packages/create-basement-app/templates/webgpu/_gitignore +0 -67
  38. package/packages/create-basement-app/templates/webgpu/app/favicon.ico +0 -0
  39. package/packages/create-basement-app/templates/webgpu/app/layout.tsx +0 -104
  40. package/packages/create-basement-app/templates/webgpu/app/page.tsx +0 -275
  41. package/packages/create-basement-app/templates/webgpu/app/robots.ts +0 -15
  42. package/packages/create-basement-app/templates/webgpu/app/sitemap.ts +0 -16
  43. package/packages/create-basement-app/templates/webgpu/biome.json +0 -250
  44. package/packages/create-basement-app/templates/webgpu/components/basement.svg +0 -1
  45. package/packages/create-basement-app/templates/webgpu/components/layout/footer/index.tsx +0 -27
  46. package/packages/create-basement-app/templates/webgpu/components/layout/header/index.tsx +0 -11
  47. package/packages/create-basement-app/templates/webgpu/components/layout/theme/index.tsx +0 -66
  48. package/packages/create-basement-app/templates/webgpu/components/layout/wrapper/index.tsx +0 -65
  49. package/packages/create-basement-app/templates/webgpu/components/ui/README.md +0 -77
  50. package/packages/create-basement-app/templates/webgpu/components/ui/image/README.md +0 -37
  51. package/packages/create-basement-app/templates/webgpu/components/ui/image/index.tsx +0 -224
  52. package/packages/create-basement-app/templates/webgpu/components/ui/link/index.tsx +0 -146
  53. package/packages/create-basement-app/templates/webgpu/lib/README.md +0 -33
  54. package/packages/create-basement-app/templates/webgpu/lib/hooks/index.ts +0 -12
  55. package/packages/create-basement-app/templates/webgpu/lib/hooks/use-device-detection.ts +0 -81
  56. package/packages/create-basement-app/templates/webgpu/lib/hooks/use-media-breakpoint.ts +0 -15
  57. package/packages/create-basement-app/templates/webgpu/lib/hooks/use-prefetch.ts +0 -74
  58. package/packages/create-basement-app/templates/webgpu/lib/integrations/.gitkeep +0 -0
  59. package/packages/create-basement-app/templates/webgpu/lib/scripts/dev.ts +0 -52
  60. package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-component.ts +0 -322
  61. package/packages/create-basement-app/templates/webgpu/lib/scripts/generate-page.ts +0 -193
  62. package/packages/create-basement-app/templates/webgpu/lib/scripts/generate.ts +0 -79
  63. package/packages/create-basement-app/templates/webgpu/lib/scripts/utils.ts +0 -246
  64. package/packages/create-basement-app/templates/webgpu/lib/store/app.ts +0 -11
  65. package/packages/create-basement-app/templates/webgpu/lib/store/index.ts +0 -11
  66. package/packages/create-basement-app/templates/webgpu/lib/styles/README.md +0 -64
  67. package/packages/create-basement-app/templates/webgpu/lib/styles/cn.ts +0 -7
  68. package/packages/create-basement-app/templates/webgpu/lib/styles/colors.ts +0 -63
  69. package/packages/create-basement-app/templates/webgpu/lib/styles/config.ts +0 -34
  70. package/packages/create-basement-app/templates/webgpu/lib/styles/css/global.css +0 -85
  71. package/packages/create-basement-app/templates/webgpu/lib/styles/css/index.css +0 -6
  72. package/packages/create-basement-app/templates/webgpu/lib/styles/css/reset.css +0 -166
  73. package/packages/create-basement-app/templates/webgpu/lib/styles/css/root.css +0 -68
  74. package/packages/create-basement-app/templates/webgpu/lib/styles/css/tailwind.css +0 -132
  75. package/packages/create-basement-app/templates/webgpu/lib/styles/easings.ts +0 -21
  76. package/packages/create-basement-app/templates/webgpu/lib/styles/fonts.ts +0 -28
  77. package/packages/create-basement-app/templates/webgpu/lib/styles/index.ts +0 -12
  78. package/packages/create-basement-app/templates/webgpu/lib/styles/layout.mjs +0 -27
  79. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/README.md +0 -29
  80. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-root.ts +0 -57
  81. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/generate-tailwind.ts +0 -162
  82. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/postcss-functions.mjs +0 -168
  83. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/setup-styles.ts +0 -24
  84. package/packages/create-basement-app/templates/webgpu/lib/styles/scripts/utils.ts +0 -20
  85. package/packages/create-basement-app/templates/webgpu/lib/styles/typography.ts +0 -36
  86. package/packages/create-basement-app/templates/webgpu/lib/utils/README.md +0 -40
  87. package/packages/create-basement-app/templates/webgpu/lib/utils/css.d.ts +0 -21
  88. package/packages/create-basement-app/templates/webgpu/lib/utils/easings.ts +0 -240
  89. package/packages/create-basement-app/templates/webgpu/lib/utils/fetch.ts +0 -84
  90. package/packages/create-basement-app/templates/webgpu/lib/utils/math.test.ts +0 -221
  91. package/packages/create-basement-app/templates/webgpu/lib/utils/math.ts +0 -236
  92. package/packages/create-basement-app/templates/webgpu/lib/utils/metadata.ts +0 -126
  93. package/packages/create-basement-app/templates/webgpu/lib/utils/strings.test.ts +0 -166
  94. package/packages/create-basement-app/templates/webgpu/lib/utils/strings.ts +0 -246
  95. package/packages/create-basement-app/templates/webgpu/lib/utils/types.d.ts +0 -15
  96. package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.test.ts +0 -256
  97. package/packages/create-basement-app/templates/webgpu/lib/utils/viewport.ts +0 -193
  98. package/packages/create-basement-app/templates/webgpu/next.config.ts +0 -142
  99. package/packages/create-basement-app/templates/webgpu/package.json +0 -69
  100. package/packages/create-basement-app/templates/webgpu/postcss.config.mjs +0 -42
  101. package/packages/create-basement-app/templates/webgpu/public/fonts/geist/Geist-Mono.woff2 +0 -0
  102. package/packages/create-basement-app/templates/webgpu/tsconfig.json +0 -43
@@ -1,68 +0,0 @@
1
- /*
2
- * THIS FILE IS GENERATED BY setup-styles.ts
3
- * DO NOT EDIT IT DIRECTLY.
4
- */
5
-
6
- @custom-media --hover (hover: hover);
7
- @custom-media --reduced-motion (prefers-reduced-motion: reduce);
8
- @custom-media --mobile (width <= 767.98px);
9
- @custom-media --desktop-large (width >= 1920px);
10
- @custom-media --desktop (width >= 1440px);
11
- @custom-media --tablet-lg (width >= 1024px);
12
- @custom-media --tablet (width >= 768px);
13
- @custom-media --mobile (width >= 640px);
14
-
15
- :root {
16
- --device-width: 640;
17
- --device-height: 650;
18
-
19
- --columns: 4;
20
- --gap: 16px;
21
- --safe: 16px;
22
-
23
- --header-height: 58px;
24
-
25
- --layout-width: calc(100vw - (2 * var(--safe)));
26
- --column-width: calc((var(--layout-width) - (var(--columns) - 1) * var(--gap)) / var(--columns));
27
-
28
- --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);
29
- --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);
30
- --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);
31
- --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
32
- --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);
33
- --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);
34
- --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
35
- --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);
36
- --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
37
- --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
38
- --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
39
- --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);
40
- --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
41
- --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
42
- --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);
43
- --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
44
- --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
45
- --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);
46
- --ease-gleasing: cubic-bezier(0.4, 0, 0, 1);
47
-
48
- --color-black: #000000;
49
- --color-white: #ffffff;
50
- --color-orange: #FF4D00;
51
- --color-blue: #487CFF;
52
- --color-green: #00FF9B;
53
- --color-violet: #F101A5;
54
- --color-pink: #FF73A6;
55
- --color-gray: #666666;
56
-
57
- @variant desktop {
58
- --device-width: 1440;
59
- --device-height: 816;
60
-
61
- --columns: 12;
62
- --gap: 16px;
63
- --safe: 16px;
64
-
65
- --header-height: 98px;
66
- }
67
- }
68
-
@@ -1,132 +0,0 @@
1
- /*
2
- * THIS FILE IS GENERATED BY setup-styles.ts
3
- * DO NOT EDIT IT DIRECTLY.
4
- */
5
-
6
- /** Custom theme **/
7
- @theme {
8
- --breakpoint-*: initial;
9
- --breakpoint-desktop-large: 1920px;
10
- --breakpoint-desktop: 1440px;
11
- --breakpoint-tablet-lg: 1024px;
12
- --breakpoint-tablet: 768px;
13
- --breakpoint-mobile: 640px;
14
-
15
- --color-*: initial;
16
- --color-primary: #ffffff;
17
- --color-secondary: #000000;
18
- --color-contrast: #FF4D00;
19
- --color-black: #000000;
20
- --color-white: #ffffff;
21
- --color-orange: #FF4D00;
22
- --color-blue: #487CFF;
23
- --color-green: #00FF9B;
24
- --color-violet: #F101A5;
25
- --color-pink: #FF73A6;
26
- --color-gray: #666666;
27
-
28
- /* gray */
29
- --color-gray-50: #F5F5F5;
30
- --color-gray-100: #E0E0E0;
31
- --color-gray-200: #C2C2C2;
32
- --color-gray-300: #A3A3A3;
33
- --color-gray-400: #858585;
34
- --color-gray-500: #666666;
35
- --color-gray-600: #4D4D4D;
36
- --color-gray-700: #333333;
37
- --color-gray-800: #1A1A1A;
38
-
39
- --spacing: 0.25rem;
40
- --spacing-0: 0;
41
- --spacing-safe: var(--safe);
42
- --spacing-gap: var(--gap);
43
- --spacing-header-height: var(--header-height);
44
-
45
- --font-*: initial;
46
- --font-mono: var(--geist-mono);
47
-
48
- --ease-*: initial;
49
- --ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);
50
- --ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);
51
- --ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);
52
- --ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
53
- --ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);
54
- --ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);
55
- --ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
56
- --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);
57
- --ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
58
- --ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
59
- --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
60
- --ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);
61
- --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
62
- --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
63
- --ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);
64
- --ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
65
- --ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
66
- --ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);
67
- --ease-gleasing: cubic-bezier(0.4, 0, 0, 1);
68
- }
69
-
70
- /** Custom theme overwrites **/
71
- [data-theme=light] {
72
- --color-primary: #ffffff;
73
- --color-secondary: #000000;
74
- --color-contrast: #FF4D00;
75
- }
76
- [data-theme=dark] {
77
- --color-primary: #000000;
78
- --color-secondary: #ffffff;
79
- --color-contrast: #FF4D00;
80
- }
81
-
82
-
83
- /** Custom static utilities **/
84
- @utility test-mono {
85
- font-family: var(--geist-mono);
86
- font-style: normal;
87
- font-weight: 400;
88
- line-height: 90%;
89
- letter-spacing: 0em;
90
- font-size: 20px;
91
- @variant desktop { font-size: 24px; }
92
- }
93
-
94
- @utility desktop-only {
95
- @media (--mobile) {
96
- display: none !important;
97
- }
98
- }
99
-
100
- @utility mobile-only {
101
- @media (--desktop) {
102
- display: none !important;
103
- }
104
- }
105
-
106
- @utility b-grid {
107
- display: grid;
108
- grid-template-columns: repeat(var(--columns), 1fr);
109
- column-gap: var(--gap);
110
- }
111
-
112
- @utility b-layout-block {
113
- margin-inline: auto;
114
- width: calc(100% - 2 * var(--safe));
115
- }
116
-
117
- @utility b-layout-block-inner {
118
- padding-inline: var(--safe);
119
- width: 100%;
120
- }
121
-
122
- @utility b-layout-grid {
123
- @apply b-layout-block b-grid;
124
- }
125
-
126
- @utility b-layout-grid-inner {
127
- @apply b-layout-block-inner b-grid;
128
- }
129
-
130
- /** Custom variants **/
131
- @custom-variant light (&:where([data-theme=light], [data-theme=light] *));
132
- @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));
@@ -1,21 +0,0 @@
1
- export const easings = {
2
- "in-quad": "cubic-bezier(0.55, 0.085, 0.68, 0.53)",
3
- "in-cubic": "cubic-bezier(0.55, 0.055, 0.675, 0.19)",
4
- "in-quart": "cubic-bezier(0.895, 0.03, 0.685, 0.22)",
5
- "in-quint": "cubic-bezier(0.755, 0.05, 0.855, 0.06)",
6
- "in-expo": "cubic-bezier(0.95, 0.05, 0.795, 0.035)",
7
- "in-circ": "cubic-bezier(0.6, 0.04, 0.98, 0.335)",
8
- "out-quad": "cubic-bezier(0.25, 0.46, 0.45, 0.94)",
9
- "out-cubic": "cubic-bezier(0.215, 0.61, 0.355, 1)",
10
- "out-quart": "cubic-bezier(0.165, 0.84, 0.44, 1)",
11
- "out-quint": "cubic-bezier(0.23, 1, 0.32, 1)",
12
- "out-expo": "cubic-bezier(0.19, 1, 0.22, 1)",
13
- "out-circ": "cubic-bezier(0.075, 0.82, 0.165, 1)",
14
- "in-out-quad": "cubic-bezier(0.455, 0.03, 0.515, 0.955)",
15
- "in-out-cubic": "cubic-bezier(0.645, 0.045, 0.355, 1)",
16
- "in-out-quart": "cubic-bezier(0.77, 0, 0.175, 1)",
17
- "in-out-quint": "cubic-bezier(0.86, 0, 0.07, 1)",
18
- "in-out-expo": "cubic-bezier(1, 0, 0, 1)",
19
- "in-out-circ": "cubic-bezier(0.785, 0.135, 0.15, 0.86)",
20
- gleasing: "cubic-bezier(0.4, 0, 0, 1)",
21
- }
@@ -1,28 +0,0 @@
1
- import localFont from "next/font/local"
2
-
3
- const mono = localFont({
4
- src: [
5
- {
6
- path: "../../public/fonts/geist/Geist-Mono.woff2",
7
- weight: "400",
8
- style: "normal",
9
- },
10
- ],
11
- display: "swap",
12
- variable: "--geist-mono",
13
- preload: true,
14
- adjustFontFallback: "Arial",
15
- fallback: [
16
- "ui-monospace",
17
- "SFMono-Regular",
18
- "Consolas",
19
- "Liberation Mono",
20
- "Menlo",
21
- "monospace",
22
- ],
23
- })
24
-
25
- const fonts = [mono]
26
- const fontsVariable = fonts.map((font) => font.variable).join(" ")
27
-
28
- export { fontsVariable }
@@ -1,12 +0,0 @@
1
- /**
2
- * Styling System
3
- *
4
- * Import from barrel:
5
- * import { colors, themes, breakpoints } from '@/styles'
6
- */
7
-
8
- export { colors, type Themes, themeNames, themes } from "./colors"
9
- export type { ThemeName } from "./config"
10
- export { breakpoints, customSizes, layout, screens } from "./config"
11
- export { easings } from "./easings"
12
- export { fontsVariable } from "./fonts"
@@ -1,27 +0,0 @@
1
- // THIS FILE HAS TO STAY .mjs AS ITS CONSUMED BY POSTCSS
2
- // EDIT THIS AS NEEDED
3
-
4
- const breakpoints = {
5
- "desktop-large": 1920,
6
- desktop: 1440,
7
- "tablet-lg": 1024,
8
- tablet: 768,
9
- mobile: 640,
10
- }
11
-
12
- const screens = {
13
- mobile: { width: breakpoints.mobile, height: 650 },
14
- desktop: { width: breakpoints.desktop, height: 816 },
15
- }
16
-
17
- const layout = {
18
- columns: { mobile: 4, desktop: 12 },
19
- gap: { mobile: 16, desktop: 16 },
20
- safe: { mobile: 16, desktop: 16 },
21
- }
22
-
23
- const customSizes = {
24
- "header-height": { mobile: 58, desktop: 98 },
25
- }
26
-
27
- export { breakpoints, customSizes, layout, screens }
@@ -1,29 +0,0 @@
1
- # Style Generation Scripts
2
-
3
- Generate CSS from TypeScript config. Run with `bun setup:styles`.
4
-
5
- ## Scripts
6
-
7
- | Script | Output |
8
- |--------|--------|
9
- | `setup-styles.ts` | Orchestrates all generation |
10
- | `generate-root.ts` | → `css/root.css` |
11
- | `generate-tailwind.ts` | → `css/tailwind.css` |
12
- | `generate-scale.ts` | Scale utilities |
13
- | `postcss-functions.mjs` | `tovw()`, `torem()`, `toem()`, `columns()` |
14
-
15
- ## Build Flow
16
-
17
- ```
18
- TypeScript Config → Generation Scripts → CSS Variables → PostCSS → Output
19
- ```
20
-
21
- 1. Edit `colors.ts`, `typography.ts`, etc.
22
- 2. Run `bun setup:styles`
23
- 3. Generated CSS is used by PostCSS
24
-
25
- ## Best Practices
26
-
27
- - Always run `bun setup:styles` after config changes
28
- - Never edit `css/root.css` or `css/tailwind.css` directly
29
- - Use `bun dev` for development (includes style watching)
@@ -1,57 +0,0 @@
1
- import type { Config } from "../config"
2
- import { formatObject } from "./utils"
3
-
4
- export function generateRoot({
5
- breakpoints,
6
- colors,
7
- customSizes,
8
- easings,
9
- layout,
10
- screens,
11
- }: Pick<
12
- Config,
13
- "breakpoints" | "colors" | "customSizes" | "easings" | "layout" | "screens"
14
- >) {
15
- return `@custom-media --hover (hover: hover);
16
- @custom-media --reduced-motion (prefers-reduced-motion: reduce);
17
- @custom-media --mobile (width <= ${breakpoints.tablet - 0.02}px);
18
- ${formatObject(breakpoints, ([name, value]) => `@custom-media --${name} (width >= ${value}px);`, "\n")}
19
-
20
- :root {
21
- --device-width: ${screens.mobile.width};
22
- --device-height: ${screens.mobile.height};
23
-
24
- ${formatObject(layout, ([name, { mobile }]) => {
25
- if (name === "columns") return `--columns: ${mobile};`
26
-
27
- return `--${name}: ${mobile}px;`
28
- })}
29
-
30
- ${formatObject(customSizes, ([name, { mobile }]) => `--${name}: ${mobile}px;`)}
31
-
32
- --layout-width: calc(100vw - (2 * var(--safe)));
33
- --column-width: calc((var(--layout-width) - (var(--columns) - 1) * var(--gap)) / var(--columns));
34
-
35
- ${formatObject(easings, ([name, value]) => `--ease-${name}: ${value};`)}
36
-
37
- ${formatObject(colors, ([name, value]) => `--color-${name}: ${value};`)}
38
-
39
- @variant desktop {
40
- --device-width: ${screens.desktop.width};
41
- --device-height: ${screens.desktop.height};
42
-
43
- ${formatObject(
44
- layout,
45
- ([name, { desktop }]) => {
46
- if (name === "columns") return `--columns: ${desktop};`
47
-
48
- return `--${name}: ${desktop}px;`
49
- },
50
- "\n\t\t"
51
- )}
52
-
53
- ${formatObject(customSizes, ([name, { desktop }]) => `--${name}: ${desktop}px;`, "\n\t\t")}
54
- }
55
- }
56
- `
57
- }
@@ -1,162 +0,0 @@
1
- import type { Config } from "../config"
2
- import { formatObject } from "./utils"
3
-
4
- export function generateTailwind({
5
- breakpoints,
6
- colors,
7
- customSizes,
8
- easings,
9
- fonts,
10
- palettes,
11
- themes,
12
- typography,
13
- }: Pick<
14
- Config,
15
- | "breakpoints"
16
- | "colors"
17
- | "customSizes"
18
- | "easings"
19
- | "fonts"
20
- | "palettes"
21
- | "themes"
22
- | "typography"
23
- >) {
24
- // Theme
25
- const themeEntries = Object.entries(themes)
26
- const firstTheme = themeEntries[0]?.[1] ?? {}
27
- const theme = `/** Custom theme **/
28
- @theme {
29
- --breakpoint-*: initial;
30
- ${formatObject(breakpoints, ([name, value]) => `--breakpoint-${name}: ${value}px;`)}
31
-
32
- --color-*: initial;
33
- ${formatObject(firstTheme, ([key, value]) => `--color-${key}: ${value};`)}
34
- ${formatObject(colors, ([key, value]) => `--color-${key}: ${value};`)}
35
-
36
- ${Object.entries(palettes)
37
- .filter(([, scaleValues]) => Object.keys(scaleValues).length > 1)
38
- .map(
39
- ([paletteName, paletteValues]) =>
40
- `/* ${paletteName} */\n\t` +
41
- Object.entries(paletteValues)
42
- .map(([shade, value]) => `--color-${paletteName}-${shade}: ${value};`)
43
- .join("\n\t")
44
- )
45
- .join("\n\n\t")}
46
-
47
- --spacing: 0.25rem;
48
- --spacing-0: 0;
49
- --spacing-safe: var(--safe);
50
- --spacing-gap: var(--gap);
51
- ${formatObject(customSizes, ([key]) => `--spacing-${key}: var(--${key});`)}
52
-
53
- --font-*: initial;
54
- ${formatObject(fonts, ([name, variableName]) => `--font-${name}: var(${variableName});`)}
55
-
56
- --ease-*: initial;
57
- ${formatObject(easings, ([name, value]) => `--ease-${name}: ${value};`)}
58
- }`
59
-
60
- // Theme overwrites
61
- const themeOverwrites = `
62
- /** Custom theme overwrites **/
63
- ${formatObject(
64
- themes,
65
- ([name, value]) => `[data-theme=${name}] {
66
- ${formatObject(value, ([key, value]) => `--color-${key}: ${value};`)}
67
- }`,
68
- "\n"
69
- )}
70
- `
71
-
72
- // Utilities
73
- const utilities = `
74
- /** Custom static utilities **/
75
- ${Object.entries(typography)
76
- .map(
77
- ([name, value]) => `@utility ${name} {
78
- ${Object.entries(value)
79
- .filter((entry) => entry?.[0] && entry?.[1])
80
- .filter((entry) => entry !== undefined)
81
- .map(([key, value]) => {
82
- if (key === "font-size") {
83
- if (typeof value === "number") {
84
- return `font-size: ${value}px;`
85
- }
86
-
87
- if (
88
- typeof value === "object" &&
89
- "mobile" in value &&
90
- "desktop" in value
91
- ) {
92
- return [
93
- `font-size: ${(value?.mobile as number) ?? 0}px;`,
94
- `@variant desktop { font-size: ${(value?.desktop as number) ?? 0}px; }`,
95
- ].join("\n\t")
96
- }
97
-
98
- return `font-size: ${value as unknown as number}px;`
99
- }
100
-
101
- if (typeof value === "object") {
102
- return [
103
- `${key}: ${value.mobile};`,
104
- `@variant desktop { ${key}: ${value.desktop}; }`,
105
- ].join("\n\t")
106
- }
107
-
108
- return `${key}: ${value};`
109
- })
110
- .join("\n\t")}
111
- }`
112
- )
113
- .join("\n\n")}
114
-
115
- @utility desktop-only {
116
- @media (--mobile) {
117
- display: none !important;
118
- }
119
- }
120
-
121
- @utility mobile-only {
122
- @media (--desktop) {
123
- display: none !important;
124
- }
125
- }
126
-
127
- @utility b-grid {
128
- display: grid;
129
- grid-template-columns: repeat(var(--columns), 1fr);
130
- column-gap: var(--gap);
131
- }
132
-
133
- @utility b-layout-block {
134
- margin-inline: auto;
135
- width: calc(100% - 2 * var(--safe));
136
- }
137
-
138
- @utility b-layout-block-inner {
139
- padding-inline: var(--safe);
140
- width: 100%;
141
- }
142
-
143
- @utility b-layout-grid {
144
- @apply b-layout-block b-grid;
145
- }
146
-
147
- @utility b-layout-grid-inner {
148
- @apply b-layout-block-inner b-grid;
149
- }`
150
-
151
- // Variants
152
- const variants = `
153
- /** Custom variants **/
154
- ${Object.keys(themes)
155
- .map(
156
- (name) =>
157
- `@custom-variant ${name} (&:where([data-theme=${name}], [data-theme=${name}] *));`
158
- )
159
- .join("\n")}`
160
-
161
- return [theme, themeOverwrites, utilities, variants].join("\n")
162
- }