@camox/cli 0.15.1 → 0.16.1

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 (35) hide show
  1. package/dist/index.mjs +79 -18
  2. package/package.json +8 -9
  3. package/{template → templates/default}/components.json +4 -1
  4. package/{template → templates/default}/package.json +4 -2
  5. package/{template → templates/default}/src/camox/blocks/footer.tsx +11 -12
  6. package/templates/default/src/camox/blocks/hero.tsx +98 -0
  7. package/{template → templates/default}/src/camox/blocks/navbar.tsx +1 -1
  8. package/templates/default/src/camox/blocks/statistics.tsx +95 -0
  9. package/templates/default/src/camox/blocks/youtube-video.tsx +158 -0
  10. package/{template → templates/default}/src/camox/layouts/default.tsx +2 -1
  11. package/templates/default/src/lib/utils.ts +6 -0
  12. package/templates/default/src/styles.css +152 -0
  13. package/{template → templates/default}/vite.config.ts +10 -1
  14. package/template/node_modules/.bin/camox +0 -21
  15. package/template/node_modules/.bin/intent +0 -21
  16. package/template/node_modules/.bin/nitro +0 -21
  17. package/template/node_modules/.bin/oxfmt +0 -21
  18. package/template/node_modules/.bin/oxlint +0 -21
  19. package/template/node_modules/.bin/shadcn +0 -21
  20. package/template/node_modules/.bin/tsgo +0 -21
  21. package/template/node_modules/.bin/vp +0 -21
  22. package/template/src/camox/blocks/hero.tsx +0 -55
  23. package/template/src/camox/blocks/statistics.tsx +0 -98
  24. package/template/src/lib/utils.ts +0 -7
  25. package/template/src/styles.css +0 -136
  26. /package/{template → templates/default}/.env.example +0 -0
  27. /package/{template → templates/default}/src/camox/blocks/faq.tsx +0 -0
  28. /package/{template → templates/default}/src/camox/blocks/testimonial.tsx +0 -0
  29. /package/{template → templates/default}/src/client.tsx +0 -0
  30. /package/{template → templates/default}/src/components/ui/accordion.tsx +0 -0
  31. /package/{template → templates/default}/src/components/ui/button.tsx +0 -0
  32. /package/{template → templates/default}/src/router.tsx +0 -0
  33. /package/{template → templates/default}/src/routes/__root.tsx +0 -0
  34. /package/{template → templates/default}/src/routes/sitemap[.]xml.ts +0 -0
  35. /package/{template → templates/default}/tsconfig.json +0 -0
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
@@ -0,0 +1,152 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+ @import "shadcn/tailwind.css";
4
+ @import "@fontsource-variable/inter";
5
+ @import "@fontsource-variable/noto-serif";
6
+
7
+ @custom-variant dark (&:is(.dark *));
8
+
9
+ body {
10
+ @apply m-0;
11
+ font-family:
12
+ -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell",
13
+ "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
14
+ -webkit-font-smoothing: antialiased;
15
+ -moz-osx-font-smoothing: grayscale;
16
+ }
17
+
18
+ :root {
19
+ --background: oklch(1 0 0);
20
+ --foreground: oklch(0.141 0.005 285.823);
21
+ --card: oklch(1 0 0);
22
+ --card-foreground: oklch(0.141 0.005 285.823);
23
+ --popover: oklch(1 0 0);
24
+ --popover-foreground: oklch(0.141 0.005 285.823);
25
+ --primary: oklch(0.62 0.19 260);
26
+ --primary-foreground: oklch(0.984 0.019 200.873);
27
+ --secondary: oklch(0.967 0.001 286.375);
28
+ --secondary-foreground: oklch(0.21 0.006 285.885);
29
+ --muted: oklch(0.967 0.001 286.375);
30
+ --muted-foreground: oklch(0.552 0.016 285.938);
31
+ --accent: oklch(0.967 0.001 286.375);
32
+ --accent-foreground: oklch(0.21 0.006 285.885);
33
+ --destructive: oklch(0.577 0.245 27.325);
34
+ --destructive-foreground: oklch(0.577 0.245 27.325);
35
+ --border: oklch(0.92 0.004 286.32);
36
+ --input: oklch(0.92 0.004 286.32);
37
+ --ring: oklch(0.705 0.015 286.067);
38
+ --chart-1: oklch(0.871 0.006 286.286);
39
+ --chart-2: oklch(0.552 0.016 285.938);
40
+ --chart-3: oklch(0.442 0.017 285.786);
41
+ --chart-4: oklch(0.37 0.013 285.805);
42
+ --chart-5: oklch(0.274 0.006 286.033);
43
+ --radius: 0.625rem;
44
+ --sidebar: oklch(0.985 0 0);
45
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
46
+ --sidebar-primary: oklch(0.609 0.126 221.723);
47
+ --sidebar-primary-foreground: oklch(0.984 0.019 200.873);
48
+ --sidebar-accent: oklch(0.967 0.001 286.375);
49
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
50
+ --sidebar-border: oklch(0.92 0.004 286.32);
51
+ --sidebar-ring: oklch(0.705 0.015 286.067);
52
+ }
53
+
54
+ .dark {
55
+ --background: oklch(0.141 0.005 285.823);
56
+ --foreground: oklch(0.985 0 0);
57
+ --card: oklch(0.21 0.006 285.885);
58
+ --card-foreground: oklch(0.985 0 0);
59
+ --popover: oklch(0.21 0.006 285.885);
60
+ --popover-foreground: oklch(0.985 0 0);
61
+ --primary: oklch(0.62 0.19 260);
62
+ --primary-foreground: oklch(0.984 0.019 200.873);
63
+ --secondary: oklch(0.274 0.006 286.033);
64
+ --secondary-foreground: oklch(0.985 0 0);
65
+ --muted: oklch(0.274 0.006 286.033);
66
+ --muted-foreground: oklch(0.705 0.015 286.067);
67
+ --accent: oklch(0.274 0.006 286.033);
68
+ --accent-foreground: oklch(0.985 0 0);
69
+ --destructive: oklch(0.704 0.191 22.216);
70
+ --destructive-foreground: oklch(0.637 0.237 25.331);
71
+ --border: oklch(1 0 0 / 10%);
72
+ --input: oklch(1 0 0 / 15%);
73
+ --ring: oklch(0.552 0.016 285.938);
74
+ --chart-1: oklch(0.871 0.006 286.286);
75
+ --chart-2: oklch(0.552 0.016 285.938);
76
+ --chart-3: oklch(0.442 0.017 285.786);
77
+ --chart-4: oklch(0.37 0.013 285.805);
78
+ --chart-5: oklch(0.274 0.006 286.033);
79
+ --sidebar: oklch(0.21 0.006 285.885);
80
+ --sidebar-foreground: oklch(0.985 0 0);
81
+ --sidebar-primary: oklch(0.715 0.143 215.221);
82
+ --sidebar-primary-foreground: oklch(0.302 0.056 229.695);
83
+ --sidebar-accent: oklch(0.274 0.006 286.033);
84
+ --sidebar-accent-foreground: oklch(0.985 0 0);
85
+ --sidebar-border: oklch(1 0 0 / 10%);
86
+ --sidebar-ring: oklch(0.552 0.016 285.938);
87
+ }
88
+
89
+ @theme inline {
90
+ --color-background: var(--background);
91
+ --color-foreground: var(--foreground);
92
+ --color-card: var(--card);
93
+ --color-card-foreground: var(--card-foreground);
94
+ --color-popover: var(--popover);
95
+ --color-popover-foreground: var(--popover-foreground);
96
+ --color-primary: var(--primary);
97
+ --color-primary-foreground: var(--primary-foreground);
98
+ --color-secondary: var(--secondary);
99
+ --color-secondary-foreground: var(--secondary-foreground);
100
+ --color-muted: var(--muted);
101
+ --color-muted-foreground: var(--muted-foreground);
102
+ --color-accent: var(--accent);
103
+ --color-accent-foreground: var(--accent-foreground);
104
+ --color-destructive: var(--destructive);
105
+ --color-destructive-foreground: var(--destructive-foreground);
106
+ --color-border: var(--border);
107
+ --color-input: var(--input);
108
+ --color-ring: var(--ring);
109
+ --color-chart-1: var(--chart-1);
110
+ --color-chart-2: var(--chart-2);
111
+ --color-chart-3: var(--chart-3);
112
+ --color-chart-4: var(--chart-4);
113
+ --color-chart-5: var(--chart-5);
114
+ --radius-sm: calc(var(--radius) - 4px);
115
+ --radius-md: calc(var(--radius) - 2px);
116
+ --radius-lg: var(--radius);
117
+ --radius-xl: calc(var(--radius) + 4px);
118
+ --color-sidebar: var(--sidebar);
119
+ --color-sidebar-foreground: var(--sidebar-foreground);
120
+ --color-sidebar-primary: var(--sidebar-primary);
121
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
122
+ --color-sidebar-accent: var(--sidebar-accent);
123
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
124
+ --color-sidebar-border: var(--sidebar-border);
125
+ --color-sidebar-ring: var(--sidebar-ring);
126
+ --font-sans: "Inter Variable", sans-serif;
127
+ --font-heading: "Inter Variable", sans-serif;
128
+ --radius-2xl: calc(var(--radius) * 1.8);
129
+ --radius-3xl: calc(var(--radius) * 2.2);
130
+ --radius-4xl: calc(var(--radius) * 2.6);
131
+ }
132
+
133
+ @layer base {
134
+ * {
135
+ @apply border-border outline-ring/50;
136
+ }
137
+ body {
138
+ @apply bg-background text-foreground;
139
+ }
140
+ a:focus-visible {
141
+ @apply border-ring ring-ring/50 rounded-md ring-3 outline-none;
142
+ }
143
+ html {
144
+ @apply font-sans;
145
+ }
146
+ }
147
+
148
+ @utility container {
149
+ margin-inline: auto;
150
+ padding-inline: 1rem;
151
+ max-width: 80rem;
152
+ }
@@ -13,7 +13,16 @@ export default defineConfig({
13
13
  plugins: [
14
14
  tailwindcss(),
15
15
  nitro(),
16
- camox({ projectSlug: "{{projectSlug}}", syncSecret: env.CAMOX_SYNC_SECRET }),
16
+ camox({
17
+ projectSlug: "camox-template-default-01", // camox-cli:replace-slug
18
+ syncSecret: env.CAMOX_SYNC_SECRET,
19
+ // camox-cli:dev-only-start
20
+ _internal: {
21
+ authenticationUrl: "http://localhost:3274",
22
+ apiUrl: "http://localhost:8787",
23
+ },
24
+ // camox-cli:dev-only-end
25
+ }),
17
26
  tanstackStart(),
18
27
  react(),
19
28
  babelPlugin({ presets: [reactCompilerPreset()] }),
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../camox/bin/camox.mjs" "$@"
19
- else
20
- exec node "$basedir/../camox/bin/camox.mjs" "$@"
21
- fi
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/@tanstack+router-plugin@1.167.18_@tanstack+react-router@1.168.18_react-dom@19.2.5_react_f2f9ae7a1065a6f93975c3fa53defc29/node_modules/@tanstack/router-plugin/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/@tanstack+router-plugin@1.167.18_@tanstack+react-router@1.168.18_react-dom@19.2.5_react_f2f9ae7a1065a6f93975c3fa53defc29/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/@tanstack+router-plugin@1.167.18_@tanstack+react-router@1.168.18_react-dom@19.2.5_react_f2f9ae7a1065a6f93975c3fa53defc29/node_modules/@tanstack/router-plugin/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/@tanstack+router-plugin@1.167.18_@tanstack+react-router@1.168.18_react-dom@19.2.5_react_f2f9ae7a1065a6f93975c3fa53defc29/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../@tanstack/router-plugin/bin/intent.js" "$@"
19
- else
20
- exec node "$basedir/../@tanstack/router-plugin/bin/intent.js" "$@"
21
- fi
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/nitro@3.0.260311-beta_@libsql+client@0.17.2_better-sqlite3@12.8.0_dotenv@17.4.2_drizzle_5fa6c7540198165a12d0aaffa3900f1f/node_modules/nitro/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/nitro@3.0.260311-beta_@libsql+client@0.17.2_better-sqlite3@12.8.0_dotenv@17.4.2_drizzle_5fa6c7540198165a12d0aaffa3900f1f/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/nitro@3.0.260311-beta_@libsql+client@0.17.2_better-sqlite3@12.8.0_dotenv@17.4.2_drizzle_5fa6c7540198165a12d0aaffa3900f1f/node_modules/nitro/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/nitro@3.0.260311-beta_@libsql+client@0.17.2_better-sqlite3@12.8.0_dotenv@17.4.2_drizzle_5fa6c7540198165a12d0aaffa3900f1f/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../nitro/dist/cli/index.mjs" "$@"
19
- else
20
- exec node "$basedir/../nitro/dist/cli/index.mjs" "$@"
21
- fi
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules/vite-plus/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules/vite-plus/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../vite-plus/bin/oxfmt" "$@"
19
- else
20
- exec node "$basedir/../vite-plus/bin/oxfmt" "$@"
21
- fi
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules/vite-plus/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules/vite-plus/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../vite-plus/bin/oxlint" "$@"
19
- else
20
- exec node "$basedir/../vite-plus/bin/oxlint" "$@"
21
- fi
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/shadcn@4.3.1_@types+node@24.12.2_typescript@5.9.2/node_modules/shadcn/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/shadcn@4.3.1_@types+node@24.12.2_typescript@5.9.2/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/shadcn@4.3.1_@types+node@24.12.2_typescript@5.9.2/node_modules/shadcn/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/shadcn@4.3.1_@types+node@24.12.2_typescript@5.9.2/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../shadcn/dist/index.js" "$@"
19
- else
20
- exec node "$basedir/../shadcn/dist/index.js" "$@"
21
- fi
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/@typescript+native-preview@7.0.0-dev.20260412.1/node_modules/@typescript/native-preview/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/@typescript+native-preview@7.0.0-dev.20260412.1/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/@typescript+native-preview@7.0.0-dev.20260412.1/node_modules/@typescript/native-preview/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/@typescript+native-preview@7.0.0-dev.20260412.1/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../@typescript/native-preview/bin/tsgo.js" "$@"
19
- else
20
- exec node "$basedir/../@typescript/native-preview/bin/tsgo.js" "$@"
21
- fi
@@ -1,21 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules/vite-plus/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules/vite-plus/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/vite-plus@0.1.19_@opentelemetry+api@1.9.0_@types+node@24.12.2_esbuild@0.27.4_jiti@2.6.1_33f3463065f7b1de4fbe98a97ee72736/node_modules:/home/runner/work/camox/camox/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../vite-plus/bin/vp" "$@"
19
- else
20
- exec node "$basedir/../vite-plus/bin/vp" "$@"
21
- fi
@@ -1,55 +0,0 @@
1
- import { Link } from "@tanstack/react-router";
2
- import { Type, createBlock } from "camox/createBlock";
3
-
4
- import { Button } from "@/components/ui/button";
5
-
6
- const hero = createBlock({
7
- id: "hero",
8
- title: "Hero",
9
- description:
10
- "Use this block as the main landing section at the top of a page. It should capture attention immediately with a clear value proposition.",
11
- content: {
12
- title: Type.String({
13
- default: "Welcome to {{projectName}}",
14
- title: "Title",
15
- }),
16
- description: Type.String({
17
- default: "Build something amazing with Camox.",
18
- maxLength: 280,
19
- title: "Description",
20
- }),
21
- cta: Type.Link({
22
- default: { text: "Get Started", href: "/", newTab: false },
23
- title: "CTA",
24
- }),
25
- },
26
- component: HeroComponent,
27
- toMarkdown: (c) => [`# ${c.title}`, c.description, c.cta],
28
- });
29
-
30
- function HeroComponent() {
31
- return (
32
- <section className="flex flex-col items-center justify-center py-32">
33
- <div className="container mx-auto px-4">
34
- <div className="mx-auto max-w-3xl text-center">
35
- <hero.Field name="title">
36
- {(props) => (
37
- <h1
38
- {...props}
39
- className="text-foreground mb-6 text-5xl font-bold tracking-tight sm:text-6xl"
40
- />
41
- )}
42
- </hero.Field>
43
- <hero.Field name="description">
44
- {(props) => <p {...props} className="text-muted-foreground mb-10 text-xl" />}
45
- </hero.Field>
46
- <hero.Link name="cta">
47
- {(props) => <Button size="lg" nativeButton={false} render={<Link {...props} />} />}
48
- </hero.Link>
49
- </div>
50
- </div>
51
- </section>
52
- );
53
- }
54
-
55
- export { hero as block };
@@ -1,98 +0,0 @@
1
- import { Type, createBlock } from "camox/createBlock";
2
-
3
- const statistics = createBlock({
4
- id: "statistics",
5
- title: "Statistics",
6
- description:
7
- "Showcase key metrics, achievements, or performance indicators. Ideal for displaying platform statistics or company milestones.",
8
- content: {
9
- title: Type.String({
10
- default: "By the numbers",
11
- maxLength: 30,
12
- title: "Title",
13
- }),
14
- subtitle: Type.String({
15
- default: "Trusted by teams worldwide",
16
- title: "Subtitle",
17
- }),
18
- description: Type.String({
19
- default:
20
- "Our platform empowers teams to build and ship faster. Here are some numbers we're proud of.",
21
- title: "Description",
22
- }),
23
- statistics: Type.RepeatableItem({
24
- content: {
25
- number: Type.String({
26
- default: "100+",
27
- maxLength: 7,
28
- title: "Number",
29
- }),
30
- label: Type.String({
31
- default: "projects launched",
32
- title: "Label",
33
- }),
34
- },
35
- minItems: 3,
36
- maxItems: 8,
37
- title: "Statistics",
38
- toMarkdown: (c) => [`**${c.number}** — ${c.label}`],
39
- }),
40
- },
41
- component: StatisticsComponent,
42
- toMarkdown: (c) => [`## ${c.subtitle}`, c.description, c.statistics],
43
- });
44
-
45
- function StatisticsComponent() {
46
- return (
47
- <section className="dark bg-background py-24">
48
- <div className="container mx-auto px-4">
49
- <div className="mx-auto max-w-6xl">
50
- <div className="mb-16">
51
- <statistics.Field name="title">
52
- {(props) => (
53
- <div
54
- {...props}
55
- className="text-primary mb-4 text-sm font-semibold tracking-wider uppercase"
56
- />
57
- )}
58
- </statistics.Field>
59
- <statistics.Field name="subtitle">
60
- {(props) => (
61
- <h2 {...props} className="text-foreground mb-6 text-4xl font-bold sm:text-5xl" />
62
- )}
63
- </statistics.Field>
64
- <statistics.Field name="description">
65
- {(props) => (
66
- <p {...props} className="text-muted-foreground max-w-3xl text-lg leading-relaxed" />
67
- )}
68
- </statistics.Field>
69
- </div>
70
-
71
- <div className="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4">
72
- <statistics.Repeater name="statistics">
73
- {(stat) => (
74
- <div className="flex gap-3">
75
- <div className="w-0.5 bg-linear-to-b from-teal-400 to-blue-500" />
76
- <div className="flex flex-col">
77
- <stat.Field name="number">
78
- {(props) => (
79
- <div {...props} className="text-foreground mb-2 text-4xl font-bold" />
80
- )}
81
- </stat.Field>
82
- <stat.Field name="label">
83
- {(props) => (
84
- <p {...props} className="text-muted-foreground text-sm leading-relaxed" />
85
- )}
86
- </stat.Field>
87
- </div>
88
- </div>
89
- )}
90
- </statistics.Repeater>
91
- </div>
92
- </div>
93
- </div>
94
- </section>
95
- );
96
- }
97
-
98
- export { statistics as block };
@@ -1,7 +0,0 @@
1
- import type { ClassValue } from "clsx";
2
- import { clsx } from "clsx";
3
- import { twMerge } from "tailwind-merge";
4
-
5
- export function cn(...inputs: Array<ClassValue>) {
6
- return twMerge(clsx(inputs));
7
- }
@@ -1,136 +0,0 @@
1
- @import "tailwindcss";
2
- @import "tw-animate-css";
3
- @import "shadcn/tailwind.css";
4
-
5
- @custom-variant dark (&:is(.dark *));
6
-
7
- body {
8
- @apply m-0;
9
- font-family:
10
- -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell",
11
- "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
12
- -webkit-font-smoothing: antialiased;
13
- -moz-osx-font-smoothing: grayscale;
14
- }
15
-
16
- :root {
17
- --background: oklch(1 0 0);
18
- --foreground: oklch(0.13 0.028 261.692);
19
- --card: oklch(1 0 0);
20
- --card-foreground: oklch(0.13 0.028 261.692);
21
- --popover: oklch(1 0 0);
22
- --popover-foreground: oklch(0.13 0.028 261.692);
23
- --primary: oklch(0.21 0.034 264.665);
24
- --primary-foreground: oklch(0.985 0.002 247.839);
25
- --secondary: oklch(0.967 0.003 264.542);
26
- --secondary-foreground: oklch(0.21 0.034 264.665);
27
- --muted: oklch(0.967 0.003 264.542);
28
- --muted-foreground: oklch(0.551 0.027 264.364);
29
- --accent: oklch(0.967 0.003 264.542);
30
- --accent-foreground: oklch(0.21 0.034 264.665);
31
- --destructive: oklch(0.577 0.245 27.325);
32
- --destructive-foreground: oklch(0.577 0.245 27.325);
33
- --border: oklch(0.928 0.006 264.531);
34
- --input: oklch(0.928 0.006 264.531);
35
- --ring: oklch(0.707 0.022 261.325);
36
- --chart-1: oklch(0.646 0.222 41.116);
37
- --chart-2: oklch(0.6 0.118 184.704);
38
- --chart-3: oklch(0.398 0.07 227.392);
39
- --chart-4: oklch(0.828 0.189 84.429);
40
- --chart-5: oklch(0.769 0.188 70.08);
41
- --radius: 0.4rem;
42
- --sidebar: oklch(0.985 0.002 247.839);
43
- --sidebar-foreground: oklch(0.13 0.028 261.692);
44
- --sidebar-primary: oklch(0.21 0.034 264.665);
45
- --sidebar-primary-foreground: oklch(0.985 0.002 247.839);
46
- --sidebar-accent: oklch(0.967 0.003 264.542);
47
- --sidebar-accent-foreground: oklch(0.21 0.034 264.665);
48
- --sidebar-border: oklch(0.928 0.006 264.531);
49
- --sidebar-ring: oklch(0.707 0.022 261.325);
50
- }
51
-
52
- .dark {
53
- --background: oklch(0.13 0.028 261.692);
54
- --foreground: oklch(0.985 0.002 247.839);
55
- --card: oklch(0.21 0.034 264.665);
56
- --card-foreground: oklch(0.985 0.002 247.839);
57
- --popover: oklch(0.21 0.034 264.665);
58
- --popover-foreground: oklch(0.985 0.002 247.839);
59
- --primary: oklch(0.928 0.006 264.531);
60
- --primary-foreground: oklch(0.21 0.034 264.665);
61
- --secondary: oklch(0.278 0.033 256.848);
62
- --secondary-foreground: oklch(0.985 0.002 247.839);
63
- --muted: oklch(0.278 0.033 256.848);
64
- --muted-foreground: oklch(0.707 0.022 261.325);
65
- --accent: oklch(0.278 0.033 256.848);
66
- --accent-foreground: oklch(0.985 0.002 247.839);
67
- --destructive: oklch(0.704 0.191 22.216);
68
- --destructive-foreground: oklch(0.637 0.237 25.331);
69
- --border: oklch(1 0 0 / 10%);
70
- --input: oklch(1 0 0 / 15%);
71
- --ring: oklch(0.551 0.027 264.364);
72
- --chart-1: oklch(0.488 0.243 264.376);
73
- --chart-2: oklch(0.696 0.17 162.48);
74
- --chart-3: oklch(0.769 0.188 70.08);
75
- --chart-4: oklch(0.627 0.265 303.9);
76
- --chart-5: oklch(0.645 0.246 16.439);
77
- --sidebar: oklch(0.21 0.034 264.665);
78
- --sidebar-foreground: oklch(0.985 0.002 247.839);
79
- --sidebar-primary: oklch(0.488 0.243 264.376);
80
- --sidebar-primary-foreground: oklch(0.985 0.002 247.839);
81
- --sidebar-accent: oklch(0.278 0.033 256.848);
82
- --sidebar-accent-foreground: oklch(0.985 0.002 247.839);
83
- --sidebar-border: oklch(1 0 0 / 10%);
84
- --sidebar-ring: oklch(0.551 0.027 264.364);
85
- }
86
-
87
- @theme inline {
88
- --color-background: var(--background);
89
- --color-foreground: var(--foreground);
90
- --color-card: var(--card);
91
- --color-card-foreground: var(--card-foreground);
92
- --color-popover: var(--popover);
93
- --color-popover-foreground: var(--popover-foreground);
94
- --color-primary: var(--primary);
95
- --color-primary-foreground: var(--primary-foreground);
96
- --color-secondary: var(--secondary);
97
- --color-secondary-foreground: var(--secondary-foreground);
98
- --color-muted: var(--muted);
99
- --color-muted-foreground: var(--muted-foreground);
100
- --color-accent: var(--accent);
101
- --color-accent-foreground: var(--accent-foreground);
102
- --color-destructive: var(--destructive);
103
- --color-destructive-foreground: var(--destructive-foreground);
104
- --color-border: var(--border);
105
- --color-input: var(--input);
106
- --color-ring: var(--ring);
107
- --color-chart-1: var(--chart-1);
108
- --color-chart-2: var(--chart-2);
109
- --color-chart-3: var(--chart-3);
110
- --color-chart-4: var(--chart-4);
111
- --color-chart-5: var(--chart-5);
112
- --radius-sm: calc(var(--radius) - 4px);
113
- --radius-md: calc(var(--radius) - 2px);
114
- --radius-lg: var(--radius);
115
- --radius-xl: calc(var(--radius) + 4px);
116
- --color-sidebar: var(--sidebar);
117
- --color-sidebar-foreground: var(--sidebar-foreground);
118
- --color-sidebar-primary: var(--sidebar-primary);
119
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
120
- --color-sidebar-accent: var(--sidebar-accent);
121
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
122
- --color-sidebar-border: var(--sidebar-border);
123
- --color-sidebar-ring: var(--sidebar-ring);
124
- }
125
-
126
- @layer base {
127
- * {
128
- @apply border-border outline-ring/50;
129
- }
130
- body {
131
- @apply bg-background text-foreground;
132
- }
133
- a:focus-visible {
134
- @apply border-ring ring-ring/50 rounded-md ring-3 outline-none;
135
- }
136
- }
File without changes