@camox/cli 0.41.0 → 0.42.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camox/cli",
3
- "version": "0.41.0",
3
+ "version": "0.42.0",
4
4
  "license": "MIT",
5
5
  "bin": {
6
6
  "camox": "./dist/index.mjs"
@@ -31,7 +31,7 @@
31
31
  "@types/node": "^24.12.4",
32
32
  "@typescript/native-preview": "7.0.0-dev.20260412.1",
33
33
  "vite-plus": "^0.1.21",
34
- "@camox/api-contract": "0.41.0"
34
+ "@camox/api-contract": "0.42.0"
35
35
  },
36
36
  "nx": {
37
37
  "tags": [
@@ -16,12 +16,12 @@ const faq = createBlock({
16
16
  items: Type.Repeater({
17
17
  content: {
18
18
  question: Type.String({
19
- default: "What is your refund policy?",
19
+ default: "How do I make this website my own?",
20
20
  title: "Question",
21
21
  }),
22
22
  answer: Type.String({
23
23
  default:
24
- "We offer a 30-day money-back guarantee. If you're not satisfied, contact support and we'll process your refund right away.",
24
+ "Tell your coding agent what you're building, who it's for, and the style you want. Your agent has access to the Camox skill and will use it to create your own blocks, update your content, and manage your pages.",
25
25
  title: "Answer",
26
26
  }),
27
27
  },
@@ -15,7 +15,7 @@ const hero = createBlock({
15
15
  title: "Title",
16
16
  }),
17
17
  description: Type.String({
18
- default: "Press ⌘+Enter to access Camox Studio and edit content.",
18
+ default: "Press ⌘+Enter to edit this page.",
19
19
  maxLength: 280,
20
20
  title: "Description",
21
21
  }),
@@ -4,8 +4,6 @@ import { block as faqBlock } from "../blocks/faq";
4
4
  import { block as footerBlock } from "../blocks/footer";
5
5
  import { block as heroBlock } from "../blocks/hero";
6
6
  import { block as navbarBlock } from "../blocks/navbar";
7
- import { block as statisticsBlock } from "../blocks/statistics";
8
- import { block as testimonialBlock } from "../blocks/testimonial";
9
7
 
10
8
  const defaultLayout = createLayout({
11
9
  id: "default",
@@ -14,7 +12,7 @@ const defaultLayout = createLayout({
14
12
  blocks: {
15
13
  before: [navbarBlock],
16
14
  after: [footerBlock],
17
- initial: [heroBlock, testimonialBlock, statisticsBlock, faqBlock],
15
+ initial: [heroBlock, faqBlock],
18
16
  },
19
17
  component: DefaultLayout,
20
18
  buildMetaTitle: ({ pageMetaTitle, projectName }) => `${pageMetaTitle} | ${projectName}`,
@@ -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.Repeater({
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-12 sm:py-16 md:py-20">
48
- <div className="container mx-auto">
49
- <div className="mb-16">
50
- <statistics.Field name="title">
51
- {(props) => (
52
- <div
53
- {...props}
54
- className="text-accent-foreground mb-4 text-sm font-semibold tracking-wider uppercase"
55
- />
56
- )}
57
- </statistics.Field>
58
- <statistics.Field name="subtitle">
59
- {(props) => (
60
- <h2 {...props} className="text-foreground mb-6 text-3xl font-bold sm:text-5xl" />
61
- )}
62
- </statistics.Field>
63
- <statistics.Field name="description">
64
- {(props) => (
65
- <p {...props} className="text-muted-foreground max-w-3xl text-lg leading-relaxed" />
66
- )}
67
- </statistics.Field>
68
- </div>
69
- <div className="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4">
70
- <statistics.Repeater name="statistics">
71
- {(stat) => (
72
- <div className="flex gap-3">
73
- <div className="from-chart-1 to-chart-2 w-0.5 bg-linear-to-b" />
74
- <div className="flex flex-col">
75
- <stat.Field name="number">
76
- {(props) => (
77
- <div
78
- {...props}
79
- className="text-foreground mb-2 text-3xl font-bold sm:text-4xl"
80
- />
81
- )}
82
- </stat.Field>
83
- <stat.Field name="label">
84
- {(props) => (
85
- <p {...props} className="text-muted-foreground text-sm leading-relaxed" />
86
- )}
87
- </stat.Field>
88
- </div>
89
- </div>
90
- )}
91
- </statistics.Repeater>
92
- </div>
93
- </div>
94
- </section>
95
- );
96
- }
97
-
98
- export { statistics as block };
@@ -1,55 +0,0 @@
1
- import { Type, createBlock } from "camox/createBlock";
2
-
3
- const testimonial = createBlock({
4
- id: "testimonial",
5
- title: "Testimonial",
6
- description:
7
- "Display a customer testimonial or user review. Ideal for building trust and social proof.",
8
- content: {
9
- quote: Type.String({
10
- default:
11
- "This platform has transformed how we build and manage our website. The developer experience is exceptional.",
12
- title: "Quote",
13
- }),
14
- author: Type.String({ default: "Kai Doe", title: "Author" }),
15
- title: Type.String({ default: "Senior Developer", title: "Title" }),
16
- company: Type.String({ default: "E Corp", title: "Company" }),
17
- },
18
- component: TestimonialComponent,
19
- toMarkdown: (c) => [`> ${c.quote}`, `— ${c.author}, ${c.title}, ${c.company}`],
20
- });
21
-
22
- function TestimonialComponent() {
23
- return (
24
- <section className="bg-background py-12 sm:py-16 md:py-24">
25
- <div className="container mx-auto px-4">
26
- <div className="mx-auto max-w-4xl text-center">
27
- <testimonial.Field name="quote">
28
- {(props) => (
29
- <blockquote
30
- {...props}
31
- className="text-foreground mb-8 text-xl leading-relaxed font-medium sm:text-3xl"
32
- >
33
- "{props.children}"
34
- </blockquote>
35
- )}
36
- </testimonial.Field>
37
- <div className="flex flex-col items-center">
38
- <testimonial.Field name="author">
39
- {(props) => (
40
- <cite {...props} className="text-foreground text-lg font-semibold not-italic" />
41
- )}
42
- </testimonial.Field>
43
- <div className="text-muted-foreground flex flex-col sm:flex-row sm:items-center sm:gap-2">
44
- <testimonial.Field name="title">{(props) => <span {...props} />}</testimonial.Field>
45
- <span className="hidden sm:inline">&bull;</span>
46
- <testimonial.Field name="company">{(props) => <span {...props} />}</testimonial.Field>
47
- </div>
48
- </div>
49
- </div>
50
- </div>
51
- </section>
52
- );
53
- }
54
-
55
- export { testimonial as block };