@upstart.gg/sdk 0.0.135 → 0.0.136
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/dist/shared/ai/schemas.d.ts +11 -2
- package/dist/shared/ai/schemas.d.ts.map +1 -1
- package/dist/shared/ai/schemas.js +43 -8
- package/dist/shared/ai/schemas.js.map +1 -1
- package/dist/shared/ai/types.d.ts +125 -65
- package/dist/shared/ai/types.d.ts.map +1 -1
- package/dist/shared/ajv.js +2 -2
- package/dist/shared/attributes.d.ts +3 -1
- package/dist/shared/attributes.d.ts.map +1 -1
- package/dist/shared/attributes.js +9 -9
- package/dist/shared/brick-manifest.js +4 -4
- package/dist/shared/bricks/manifests/_types.d.ts +9 -0
- package/dist/shared/bricks/manifests/_types.d.ts.map +1 -0
- package/dist/shared/bricks/manifests/_types.js +3 -0
- package/dist/shared/bricks/manifests/_types.js.map +1 -0
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/accordion.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/accordion.manifest.js +5 -5
- package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/all-manifests.js +28 -28
- package/dist/shared/bricks/manifests/box.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/box.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/box.manifest.js +5 -5
- package/dist/shared/bricks/manifests/button.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/button.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/button.manifest.js +5 -5
- package/dist/shared/bricks/manifests/card.manifest.d.ts +8 -7
- package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/card.manifest.js +5 -5
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/carousel.manifest.js +5 -5
- package/dist/shared/bricks/manifests/footer.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/footer.manifest.js +5 -5
- package/dist/shared/bricks/manifests/form.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/form.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/form.manifest.js +5 -5
- package/dist/shared/bricks/manifests/hero.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/hero.manifest.js +5 -5
- package/dist/shared/bricks/manifests/html.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/html.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/html.manifest.js +5 -5
- package/dist/shared/bricks/manifests/icon.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/icon.manifest.js +5 -5
- package/dist/shared/bricks/manifests/image.manifest.d.ts +1 -0
- package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/image.manifest.js +5 -5
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/images-gallery.manifest.js +5 -5
- package/dist/shared/bricks/manifests/map.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/map.manifest.js +5 -5
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/navbar.manifest.js +5 -5
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/sidebar.manifest.js +5 -5
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/social-links.manifest.js +5 -5
- package/dist/shared/bricks/manifests/spacer.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/spacer.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/spacer.manifest.js +5 -5
- package/dist/shared/bricks/manifests/table.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/table.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/table.manifest.js +5 -5
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/tabs.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/tabs.manifest.js +5 -5
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/testimonials.manifest.js +5 -5
- package/dist/shared/bricks/manifests/text.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/text.manifest.js +5 -5
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/timeline.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/timeline.manifest.js +5 -5
- package/dist/shared/bricks/manifests/video.manifest.d.ts +2 -6
- package/dist/shared/bricks/manifests/video.manifest.d.ts.map +1 -1
- package/dist/shared/bricks/manifests/video.manifest.js +5 -5
- package/dist/shared/bricks/props/dynamic.js +2 -2
- package/dist/shared/bricks/props/geolocation.js +1 -1
- package/dist/shared/bricks/props/string.js +1 -1
- package/dist/shared/bricks.d.ts +5 -3
- package/dist/shared/bricks.d.ts.map +1 -1
- package/dist/shared/bricks.js +31 -29
- package/dist/shared/{chunk-CKFRSHR2.js → chunk-2IHKVMKW.js} +3 -3
- package/dist/shared/chunk-2IHKVMKW.js.map +1 -0
- package/dist/shared/{chunk-P3RH5URN.js → chunk-2VDR4ZYY.js} +3 -3
- package/dist/shared/chunk-2VDR4ZYY.js.map +1 -0
- package/dist/shared/{chunk-MLZT7MRQ.js → chunk-36PLZKMW.js} +4 -4
- package/dist/shared/chunk-36PLZKMW.js.map +1 -0
- package/dist/shared/{chunk-QQQ3FYPG.js → chunk-42OUNI7C.js} +123 -5
- package/dist/shared/chunk-42OUNI7C.js.map +1 -0
- package/dist/shared/{chunk-2HO4FHLM.js → chunk-4MNWMEMM.js} +118 -152
- package/dist/shared/chunk-4MNWMEMM.js.map +1 -0
- package/dist/shared/chunk-CRS7QCPZ.js +308 -0
- package/dist/shared/chunk-CRS7QCPZ.js.map +1 -0
- package/dist/shared/{chunk-WGDUJSSS.js → chunk-DFAFDBYZ.js} +4 -4
- package/dist/shared/chunk-DFAFDBYZ.js.map +1 -0
- package/dist/shared/{chunk-FVU5PXRC.js → chunk-DV3G7X34.js} +2 -2
- package/dist/shared/{chunk-TB3X4LRQ.js → chunk-EVLRH6VG.js} +2 -2
- package/dist/shared/{chunk-Z35I5JM5.js → chunk-F247VKAE.js} +3 -3
- package/dist/shared/chunk-F247VKAE.js.map +1 -0
- package/dist/shared/{chunk-QL3T5HJQ.js → chunk-FOGAVJC2.js} +2 -2
- package/dist/shared/chunk-FOGAVJC2.js.map +1 -0
- package/dist/shared/{chunk-4WI23M7W.js → chunk-FQDR2BBZ.js} +3 -3
- package/dist/shared/chunk-FQDR2BBZ.js.map +1 -0
- package/dist/shared/{chunk-3KLRW4I2.js → chunk-GFAQWQER.js} +182 -124
- package/dist/shared/chunk-GFAQWQER.js.map +1 -0
- package/dist/shared/{chunk-DRTGM2UJ.js → chunk-GIGFNQBO.js} +2 -2
- package/dist/shared/chunk-GIGFNQBO.js.map +1 -0
- package/dist/shared/{chunk-SHUGHJ7V.js → chunk-GQTZPN5D.js} +3 -3
- package/dist/shared/chunk-GQTZPN5D.js.map +1 -0
- package/dist/shared/{chunk-D4YQ6ABM.js → chunk-H5JM2M2T.js} +211 -34
- package/dist/shared/chunk-H5JM2M2T.js.map +1 -0
- package/dist/shared/{chunk-NT3IW52F.js → chunk-HTUSL2U7.js} +2 -2
- package/dist/shared/{chunk-BW6EFRSF.js → chunk-IQIISR22.js} +2 -2
- package/dist/shared/{chunk-BW6EFRSF.js.map → chunk-IQIISR22.js.map} +1 -1
- package/dist/shared/{chunk-Z2NTDFB4.js → chunk-KEM5N6GJ.js} +4 -4
- package/dist/shared/chunk-KEM5N6GJ.js.map +1 -0
- package/dist/shared/{chunk-V3UA3LRK.js → chunk-KIDICX3Y.js} +32 -7
- package/dist/shared/chunk-KIDICX3Y.js.map +1 -0
- package/dist/shared/chunk-KILJYJFE.js +354 -0
- package/dist/shared/chunk-KILJYJFE.js.map +1 -0
- package/dist/shared/{chunk-GRMY35BU.js → chunk-L6C7HUSA.js} +148 -20
- package/dist/shared/chunk-L6C7HUSA.js.map +1 -0
- package/dist/shared/{chunk-GCQURRVB.js → chunk-LCJ2VFPM.js} +4 -4
- package/dist/shared/chunk-LCJ2VFPM.js.map +1 -0
- package/dist/shared/{chunk-QSND5IWT.js → chunk-LLNPH3XR.js} +19 -36
- package/dist/shared/chunk-LLNPH3XR.js.map +1 -0
- package/dist/shared/{chunk-LXAO3JA6.js → chunk-LTIJI7Y3.js} +4 -4
- package/dist/shared/chunk-LTIJI7Y3.js.map +1 -0
- package/dist/shared/{chunk-6E42XWFH.js → chunk-MFNHFN2B.js} +3 -3
- package/dist/shared/{chunk-6E42XWFH.js.map → chunk-MFNHFN2B.js.map} +1 -1
- package/dist/shared/{chunk-TEO6TJOM.js → chunk-N3BEBLWF.js} +27 -26
- package/dist/shared/{chunk-TEO6TJOM.js.map → chunk-N3BEBLWF.js.map} +1 -1
- package/dist/shared/{chunk-UQF52PWK.js → chunk-N3ZTQD5I.js} +2 -2
- package/dist/shared/chunk-N3ZTQD5I.js.map +1 -0
- package/dist/shared/{chunk-EQMU6NIU.js → chunk-TNTFKLCR.js} +16 -13
- package/dist/shared/chunk-TNTFKLCR.js.map +1 -0
- package/dist/shared/{chunk-EWSPTRDL.js → chunk-U5ZECCJM.js} +102 -16
- package/dist/shared/chunk-U5ZECCJM.js.map +1 -0
- package/dist/shared/{chunk-O5PLB3YB.js → chunk-UXTASZ23.js} +16 -10
- package/dist/shared/chunk-UXTASZ23.js.map +1 -0
- package/dist/shared/{chunk-BMWRR4DI.js → chunk-YWOTQWIQ.js} +3 -3
- package/dist/shared/chunk-YWOTQWIQ.js.map +1 -0
- package/dist/shared/{chunk-GPCI2N2A.js → chunk-ZR6R6Z6O.js} +106 -5
- package/dist/shared/chunk-ZR6R6Z6O.js.map +1 -0
- package/dist/shared/{chunk-U7TVEPKA.js → chunk-ZRRAK5NS.js} +3 -3
- package/dist/shared/chunk-ZRRAK5NS.js.map +1 -0
- package/dist/shared/context.d.ts +1 -0
- package/dist/shared/context.d.ts.map +1 -1
- package/dist/shared/datarecords/types.d.ts +7 -60
- package/dist/shared/datarecords/types.d.ts.map +1 -1
- package/dist/shared/datarecords/types.js +3 -5
- package/dist/shared/datasources/external/threads/media/fetcher.js +3 -3
- package/dist/shared/datasources/types.js +2 -2
- package/dist/shared/datasources.d.ts +1 -1
- package/dist/shared/datasources.d.ts.map +1 -1
- package/dist/shared/datasources.js +1 -3
- package/dist/shared/datasources.js.map +1 -1
- package/dist/shared/page.d.ts.map +1 -1
- package/dist/shared/page.js +31 -31
- package/dist/shared/site.d.ts +6 -6
- package/dist/shared/site.js +36 -36
- package/dist/shared/site.js.map +1 -1
- package/dist/shared/sitemap.d.ts +6 -5
- package/dist/shared/sitemap.d.ts.map +1 -1
- package/dist/shared/sitemap.js +32 -32
- package/dist/shared/theme.js +3 -3
- package/dist/shared/utils/llm.js +2 -2
- package/dist/shared/utils/schema-registry.js +2 -2
- package/dist/shared/utils/schema.js +3 -3
- package/package.json +2 -2
- package/src/shared/ai/schemas.ts +46 -10
- package/src/shared/ai/types.ts +128 -60
- package/src/shared/attributes.ts +11 -3
- package/src/shared/bricks/manifests/_types.ts +9 -0
- package/src/shared/bricks/manifests/accordion.manifest.ts +128 -161
- package/src/shared/bricks/manifests/all-manifests.ts +1 -0
- package/src/shared/bricks/manifests/box.manifest.ts +195 -129
- package/src/shared/bricks/manifests/button.manifest.ts +158 -71
- package/src/shared/bricks/manifests/card.manifest.ts +200 -28
- package/src/shared/bricks/manifests/carousel.manifest.ts +154 -22
- package/src/shared/bricks/manifests/footer.manifest.ts +2 -5
- package/src/shared/bricks/manifests/form.manifest.ts +122 -7
- package/src/shared/bricks/manifests/hero.manifest.ts +103 -18
- package/src/shared/bricks/manifests/html.manifest.ts +2 -5
- package/src/shared/bricks/manifests/icon.manifest.ts +216 -36
- package/src/shared/bricks/manifests/image.manifest.ts +103 -2
- package/src/shared/bricks/manifests/images-gallery.manifest.ts +2 -5
- package/src/shared/bricks/manifests/map.manifest.ts +2 -5
- package/src/shared/bricks/manifests/navbar.manifest.ts +2 -5
- package/src/shared/bricks/manifests/sidebar.manifest.ts +2 -5
- package/src/shared/bricks/manifests/social-links.manifest.ts +2 -5
- package/src/shared/bricks/manifests/spacer.manifest.ts +2 -5
- package/src/shared/bricks/manifests/table.manifest.ts +2 -5
- package/src/shared/bricks/manifests/tabs.manifest.ts +2 -5
- package/src/shared/bricks/manifests/testimonials.manifest.ts +2 -5
- package/src/shared/bricks/manifests/text.manifest.ts +31 -10
- package/src/shared/bricks/manifests/timeline.manifest.ts +2 -5
- package/src/shared/bricks/manifests/video.manifest.ts +2 -5
- package/src/shared/bricks/props/string.ts +1 -1
- package/src/shared/bricks.ts +12 -9
- package/src/shared/context.ts +1 -0
- package/src/shared/datarecords/types.ts +47 -37
- package/src/shared/datasources.ts +2 -4
- package/src/shared/page.ts +0 -1
- package/src/shared/site.ts +3 -3
- package/src/shared/sitemap.ts +2 -0
- package/src/shared/tests/schema-registry.test.ts +0 -2
- package/src/shared/utils/schema-registry.ts +5 -5
- package/src/shared/utils/tests/schema.test.ts +43 -2
- package/dist/shared/chunk-2HO4FHLM.js.map +0 -1
- package/dist/shared/chunk-3KLRW4I2.js.map +0 -1
- package/dist/shared/chunk-4WI23M7W.js.map +0 -1
- package/dist/shared/chunk-BMWRR4DI.js.map +0 -1
- package/dist/shared/chunk-CKFRSHR2.js.map +0 -1
- package/dist/shared/chunk-D4YQ6ABM.js.map +0 -1
- package/dist/shared/chunk-DRTGM2UJ.js.map +0 -1
- package/dist/shared/chunk-EQMU6NIU.js.map +0 -1
- package/dist/shared/chunk-EWSPTRDL.js.map +0 -1
- package/dist/shared/chunk-GCQURRVB.js.map +0 -1
- package/dist/shared/chunk-GPCI2N2A.js.map +0 -1
- package/dist/shared/chunk-GRMY35BU.js.map +0 -1
- package/dist/shared/chunk-LXAO3JA6.js.map +0 -1
- package/dist/shared/chunk-MLZT7MRQ.js.map +0 -1
- package/dist/shared/chunk-O5PLB3YB.js.map +0 -1
- package/dist/shared/chunk-P3RH5URN.js.map +0 -1
- package/dist/shared/chunk-QL3T5HJQ.js.map +0 -1
- package/dist/shared/chunk-QQQ3FYPG.js.map +0 -1
- package/dist/shared/chunk-QSND5IWT.js.map +0 -1
- package/dist/shared/chunk-SHUGHJ7V.js.map +0 -1
- package/dist/shared/chunk-U7TVEPKA.js.map +0 -1
- package/dist/shared/chunk-UQF52PWK.js.map +0 -1
- package/dist/shared/chunk-V3UA3LRK.js.map +0 -1
- package/dist/shared/chunk-WGDUJSSS.js.map +0 -1
- package/dist/shared/chunk-X6N463D4.js +0 -222
- package/dist/shared/chunk-X6N463D4.js.map +0 -1
- package/dist/shared/chunk-X75YV73Q.js +0 -178
- package/dist/shared/chunk-X75YV73Q.js.map +0 -1
- package/dist/shared/chunk-Z2NTDFB4.js.map +0 -1
- package/dist/shared/chunk-Z35I5JM5.js.map +0 -1
- package/dist/shared/schema-registry.d.ts +0 -5
- package/dist/shared/schema-registry.d.ts.map +0 -1
- package/dist/shared/schema-registry.js +0 -119
- package/dist/shared/schema-registry.js.map +0 -1
- package/src/shared/schema-registry.ts +0 -82
- /package/dist/shared/{chunk-FVU5PXRC.js.map → chunk-DV3G7X34.js.map} +0 -0
- /package/dist/shared/{chunk-TB3X4LRQ.js.map → chunk-EVLRH6VG.js.map} +0 -0
- /package/dist/shared/{chunk-NT3IW52F.js.map → chunk-HTUSL2U7.js.map} +0 -0
|
@@ -10,13 +10,15 @@ import { borderRef, roundingRef } from "../props/border";
|
|
|
10
10
|
import { colorPresetRef } from "../props/color-preset";
|
|
11
11
|
import { loopRef } from "../props/dynamic";
|
|
12
12
|
import { StringEnum } from "~/shared/utils/string-enum";
|
|
13
|
+
import { urlOrPageIdRef } from "../props/string";
|
|
14
|
+
import type { BrickExample } from "./_types";
|
|
13
15
|
|
|
14
16
|
export const manifest = defineBrickManifest({
|
|
15
17
|
type: "card",
|
|
16
18
|
name: "Card",
|
|
17
19
|
description: "A card that can have a title, image, and content.",
|
|
18
20
|
aiInstructions:
|
|
19
|
-
"Use this brick to create
|
|
21
|
+
"Use this brick to create visually distinct content blocks (product, feature, testimonial, event, article, CTA, etc.).\n\nGuidelines:\n- Button is REQUIRED. Always provide a short action label (1–3 words) and pick a color matching semantic weight (primary/accent for primary actions, neutral/secondary for low emphasis).\n- Image is OPTIONAL. If present you may set imagePosition to top | middle | bottom. Default is top. Pick middle for vertically centered feature highlights, bottom for caption-first layouts.\n- Set noTitle: true when the card is intentionally title-less (e.g. a quote card or pure media focus). Do NOT include an empty title string alongside noTitle.\n- Use dynamic tokens (e.g. {{products.price}}) instead of duplicating literal values.\n- Prefer gradient presets for more visual emphasis (e.g. primary-gradient-400 with gradientDirection).\n- border + rounding + shadow should be cohesive: stronger borders pair well with larger rounding + moderate shadow; minimal / flat cards may use border-0 + no shadow.\n- For internal navigation you can supply a page ID (e.g. 'about') OR a relative/absolute URL (e.g. '/pricing', 'https://example.com').\n- Keep HTML inside text minimal (<strong>, <em>, <br>) — for richer structure consider multiple bricks instead.\n- Avoid mixing noTitle with large heading text embedded inside the text field — in that case keep a proper title.\n\nReturn ONLY valid properties defined in the schema; do not invent new ones.",
|
|
20
22
|
icon: BsCardText,
|
|
21
23
|
defaultWidth: { desktop: "400px", mobile: "100%" },
|
|
22
24
|
minWidth: { desktop: 300 },
|
|
@@ -39,8 +41,8 @@ export const manifest = defineBrickManifest({
|
|
|
39
41
|
}),
|
|
40
42
|
),
|
|
41
43
|
imagePosition: Type.Optional(
|
|
42
|
-
StringEnum(["top", "middle", "bottom"
|
|
43
|
-
enumNames: ["Top", "Middle", "Bottom"
|
|
44
|
+
StringEnum(["top", "middle", "bottom"], {
|
|
45
|
+
enumNames: ["Top", "Middle", "Bottom"],
|
|
44
46
|
title: "Image Position",
|
|
45
47
|
description: "Where the image should be placed in the card",
|
|
46
48
|
default: "top",
|
|
@@ -79,34 +81,147 @@ export const manifest = defineBrickManifest({
|
|
|
79
81
|
}),
|
|
80
82
|
),
|
|
81
83
|
loop: Type.Optional(loopRef()),
|
|
84
|
+
button: Type.Object(
|
|
85
|
+
{
|
|
86
|
+
label: Type.String({
|
|
87
|
+
title: "Button label",
|
|
88
|
+
default: "Click me",
|
|
89
|
+
examples: ["Learn more", "Buy now", "Sign up"],
|
|
90
|
+
metadata: {
|
|
91
|
+
category: "content",
|
|
92
|
+
},
|
|
93
|
+
}),
|
|
94
|
+
url: urlOrPageIdRef({
|
|
95
|
+
title: "Button URL",
|
|
96
|
+
description: "The URL the button should link to.",
|
|
97
|
+
metadata: {
|
|
98
|
+
category: "content",
|
|
99
|
+
},
|
|
100
|
+
}),
|
|
101
|
+
color: Type.Optional(
|
|
102
|
+
StringEnum(["btn-neutral", "btn-primary", "btn-secondary", "btn-accent"], {
|
|
103
|
+
enumNames: ["Neutral", "Primary", "Secondary", "Accent"],
|
|
104
|
+
title: "Color",
|
|
105
|
+
default: "btn-primary",
|
|
106
|
+
}),
|
|
107
|
+
),
|
|
108
|
+
},
|
|
109
|
+
{ title: "Button", description: "Button displayed at the bottom of the card" },
|
|
110
|
+
),
|
|
82
111
|
}),
|
|
83
112
|
});
|
|
84
113
|
|
|
85
114
|
export type Manifest = typeof manifest;
|
|
86
115
|
|
|
87
|
-
export const examples:
|
|
88
|
-
description: string;
|
|
89
|
-
type: string;
|
|
90
|
-
props: BrickProps<Manifest>["brick"]["props"];
|
|
91
|
-
}[] = [
|
|
116
|
+
export const examples: BrickExample<Manifest>[] = [
|
|
92
117
|
{
|
|
93
118
|
description: "A simple card with a title and content",
|
|
94
119
|
type: "card",
|
|
95
120
|
props: {
|
|
96
121
|
title: "Card Title",
|
|
97
122
|
text: "This is the body of the card.",
|
|
123
|
+
button: {
|
|
124
|
+
label: "Learn more",
|
|
125
|
+
url: "/learn-more",
|
|
126
|
+
color: "btn-primary",
|
|
127
|
+
},
|
|
98
128
|
},
|
|
99
129
|
},
|
|
130
|
+
// IMAGE POSITION MIDDLE VARIANT
|
|
100
131
|
{
|
|
101
|
-
description: "
|
|
132
|
+
description: "Feature highlight card with centered image (imagePosition=middle)",
|
|
102
133
|
type: "card",
|
|
103
134
|
props: {
|
|
104
|
-
cardImage: {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
135
|
+
cardImage: { src: "https://via.placeholder.com/420x240", alt: "Feature visual" },
|
|
136
|
+
imagePosition: "middle",
|
|
137
|
+
title: "Blazing Performance",
|
|
138
|
+
text: "Our new engine reduces processing time by 45% while maintaining reliability.",
|
|
139
|
+
colorPreset: { color: "primary-100" },
|
|
140
|
+
border: { width: "border", color: "border-primary-200" },
|
|
141
|
+
rounding: "rounded-lg",
|
|
142
|
+
shadow: "shadow-sm",
|
|
143
|
+
button: { label: "Learn More", url: "/features/performance", color: "btn-primary" },
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
// IMAGE POSITION BOTTOM VARIANT
|
|
147
|
+
{
|
|
148
|
+
description: "Case study card with image at the bottom (imagePosition=bottom)",
|
|
149
|
+
type: "card",
|
|
150
|
+
props: {
|
|
151
|
+
title: "Case Study: ScaleOps",
|
|
152
|
+
text: "How ScaleOps handled 10x growth with zero downtime using our platform.",
|
|
153
|
+
cardImage: { src: "https://via.placeholder.com/600x260", alt: "Scale graph" },
|
|
154
|
+
imagePosition: "bottom",
|
|
155
|
+
colorPreset: { color: "secondary-50" },
|
|
156
|
+
rounding: "rounded-md",
|
|
157
|
+
shadow: "shadow-sm",
|
|
158
|
+
button: { label: "Read Study", url: "/cases/scaleops", color: "btn-secondary" },
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
// NO TITLE VARIANT
|
|
162
|
+
{
|
|
163
|
+
description: "Quote / testimonial style card without a title (uses noTitle=true)",
|
|
164
|
+
type: "card",
|
|
165
|
+
props: {
|
|
166
|
+
noTitle: true,
|
|
167
|
+
text: '"This toolkit accelerated our launch by weeks — the component quality is outstanding."<br><em>— CTO, FinEdge</em>',
|
|
168
|
+
colorPreset: { color: "neutral-100" },
|
|
169
|
+
border: { width: "border", color: "border-neutral-300" },
|
|
170
|
+
rounding: "rounded-xl",
|
|
171
|
+
shadow: "shadow-sm",
|
|
172
|
+
button: { label: "See More", url: "/testimonials", color: "btn-neutral" },
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
// INTERNAL PAGE ID LINK VARIANT
|
|
176
|
+
{
|
|
177
|
+
description: "Internal navigation card using a page ID instead of a URL",
|
|
178
|
+
type: "card",
|
|
179
|
+
props: {
|
|
180
|
+
title: "About Our Mission",
|
|
181
|
+
text: "Learn how we're building an open, extensible site generation platform for modern teams.",
|
|
182
|
+
colorPreset: { color: "base-100" },
|
|
183
|
+
rounding: "rounded-md",
|
|
184
|
+
button: { label: "About Us", url: "about", color: "btn-primary" },
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
// GRADIENT & STRONG BORDER VARIANT
|
|
188
|
+
{
|
|
189
|
+
description: "High-emphasis promotional card using gradient background and thick border",
|
|
190
|
+
type: "card",
|
|
191
|
+
props: {
|
|
192
|
+
title: "Limited Time Offer",
|
|
193
|
+
text: "Upgrade now and receive a complimentary strategy session plus extended analytics access.",
|
|
194
|
+
colorPreset: { color: "primary-gradient-400", gradientDirection: "bg-gradient-to-tr" },
|
|
195
|
+
border: { width: "border-4", color: "border-primary-400" },
|
|
196
|
+
rounding: "rounded-xl",
|
|
197
|
+
shadow: "shadow-lg",
|
|
198
|
+
button: { label: "Upgrade", url: "/pricing", color: "btn-accent" },
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
// MINIMAL / FLAT VARIANT (no border, no shadow, subtle preset)
|
|
202
|
+
{
|
|
203
|
+
description: "Minimal flat information card (border-0, no shadow)",
|
|
204
|
+
type: "card",
|
|
205
|
+
props: {
|
|
206
|
+
title: "Maintenance Window",
|
|
207
|
+
text: "Scheduled maintenance on Saturday 02:00–03:00 UTC. API responses may be delayed.",
|
|
208
|
+
colorPreset: { color: "neutral-50" },
|
|
209
|
+
border: { width: "border-0", color: "border-neutral-200" },
|
|
210
|
+
button: { label: "Status Page", url: "/status", color: "btn-neutral" },
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
// DARK / INVERTED VARIANT
|
|
214
|
+
{
|
|
215
|
+
description: "Dark themed spotlight card (primary-800 background)",
|
|
216
|
+
type: "card",
|
|
217
|
+
props: {
|
|
218
|
+
title: "Night Mode Preview",
|
|
219
|
+
text: "Experience the new adaptive dark theme optimized for low ambient light environments.",
|
|
220
|
+
colorPreset: { color: "primary-800" },
|
|
221
|
+
border: { width: "border", color: "border-primary-600" },
|
|
222
|
+
rounding: "rounded-lg",
|
|
223
|
+
shadow: "shadow-md",
|
|
224
|
+
button: { label: "Preview", url: "/themes/dark", color: "btn-primary" },
|
|
110
225
|
},
|
|
111
226
|
},
|
|
112
227
|
{
|
|
@@ -115,29 +230,31 @@ export const examples: {
|
|
|
115
230
|
props: {
|
|
116
231
|
title: "Key Feature",
|
|
117
232
|
text: "This feature provides exceptional value and enhances user experience significantly.",
|
|
233
|
+
colorPreset: { color: "primary-50" },
|
|
234
|
+
border: { width: "border", color: "border-primary-200" },
|
|
235
|
+
rounding: "rounded-lg",
|
|
236
|
+
shadow: "shadow-sm",
|
|
237
|
+
button: {
|
|
238
|
+
label: "Discover More",
|
|
239
|
+
url: "/features",
|
|
240
|
+
color: "btn-primary",
|
|
241
|
+
},
|
|
118
242
|
},
|
|
119
243
|
},
|
|
120
244
|
{
|
|
121
245
|
description: "Blog post card with image at the bottom",
|
|
122
246
|
type: "card",
|
|
123
247
|
props: {
|
|
124
|
-
title: "
|
|
248
|
+
title: "Future of Tech",
|
|
125
249
|
text: "Exploring emerging trends and innovations that will shape our digital landscape in the coming decade.",
|
|
126
250
|
cardImage: {
|
|
127
251
|
src: "https://via.placeholder.com/400x200",
|
|
128
252
|
alt: "Technology concept",
|
|
129
253
|
},
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
type: "card",
|
|
135
|
-
props: {
|
|
136
|
-
title: "Customer Review",
|
|
137
|
-
text: '"This product exceeded my expectations. The quality is outstanding and the customer service is top-notch!"',
|
|
138
|
-
cardImage: {
|
|
139
|
-
src: "https://via.placeholder.com/150x150",
|
|
140
|
-
alt: "Customer photo",
|
|
254
|
+
button: {
|
|
255
|
+
label: "Read More",
|
|
256
|
+
url: "/blog/{{ blogPosts.$slug }}",
|
|
257
|
+
color: "btn-primary",
|
|
141
258
|
},
|
|
142
259
|
},
|
|
143
260
|
},
|
|
@@ -147,6 +264,11 @@ export const examples: {
|
|
|
147
264
|
props: {
|
|
148
265
|
title: "Simple Announcement",
|
|
149
266
|
text: "Important updates will be posted here regularly.",
|
|
267
|
+
button: {
|
|
268
|
+
label: "View Updates",
|
|
269
|
+
url: "/updates",
|
|
270
|
+
color: "btn-neutral",
|
|
271
|
+
},
|
|
150
272
|
},
|
|
151
273
|
},
|
|
152
274
|
{
|
|
@@ -159,6 +281,11 @@ export const examples: {
|
|
|
159
281
|
},
|
|
160
282
|
title: "Annual Conference 2025",
|
|
161
283
|
text: "Join us for three days of inspiring talks, networking opportunities, and hands-on workshops.",
|
|
284
|
+
button: {
|
|
285
|
+
label: "Register Now",
|
|
286
|
+
url: "/events/conference-2025",
|
|
287
|
+
color: "btn-primary",
|
|
288
|
+
},
|
|
162
289
|
},
|
|
163
290
|
},
|
|
164
291
|
{
|
|
@@ -171,6 +298,11 @@ export const examples: {
|
|
|
171
298
|
},
|
|
172
299
|
title: "Breaking News Update",
|
|
173
300
|
text: "Latest developments in the ongoing story with expert analysis and community reactions.",
|
|
301
|
+
button: {
|
|
302
|
+
label: "Read Full Article",
|
|
303
|
+
url: "/news/breaking-update",
|
|
304
|
+
color: "btn-secondary",
|
|
305
|
+
},
|
|
174
306
|
},
|
|
175
307
|
},
|
|
176
308
|
{
|
|
@@ -179,6 +311,11 @@ export const examples: {
|
|
|
179
311
|
props: {
|
|
180
312
|
title: "Get Started Today",
|
|
181
313
|
text: "Transform your workflow with our powerful tools. Sign up now and get 30 days free!",
|
|
314
|
+
button: {
|
|
315
|
+
label: "Sign Up Now",
|
|
316
|
+
url: "/signup",
|
|
317
|
+
color: "btn-primary",
|
|
318
|
+
},
|
|
182
319
|
},
|
|
183
320
|
},
|
|
184
321
|
{
|
|
@@ -195,6 +332,11 @@ export const examples: {
|
|
|
195
332
|
border: { width: "border", color: "border-primary-200" },
|
|
196
333
|
rounding: "rounded-lg",
|
|
197
334
|
shadow: "shadow-md",
|
|
335
|
+
button: {
|
|
336
|
+
label: "Buy Now",
|
|
337
|
+
url: "{{products.purchaseUrl}}",
|
|
338
|
+
color: "btn-primary",
|
|
339
|
+
},
|
|
198
340
|
loop: {
|
|
199
341
|
over: "products",
|
|
200
342
|
},
|
|
@@ -214,6 +356,11 @@ export const examples: {
|
|
|
214
356
|
colorPreset: { color: "neutral-100" },
|
|
215
357
|
rounding: "rounded-xl",
|
|
216
358
|
shadow: "shadow-lg",
|
|
359
|
+
button: {
|
|
360
|
+
label: "Contact",
|
|
361
|
+
url: "mailto:{{teamMembers.email}}",
|
|
362
|
+
color: "btn-neutral",
|
|
363
|
+
},
|
|
217
364
|
loop: {
|
|
218
365
|
over: "teamMembers",
|
|
219
366
|
},
|
|
@@ -234,6 +381,11 @@ export const examples: {
|
|
|
234
381
|
border: { width: "border", color: "border-secondary-300" },
|
|
235
382
|
rounding: "rounded-md",
|
|
236
383
|
shadow: "shadow-sm",
|
|
384
|
+
button: {
|
|
385
|
+
label: "Read More",
|
|
386
|
+
url: "{{blogPosts.url}}",
|
|
387
|
+
color: "btn-secondary",
|
|
388
|
+
},
|
|
237
389
|
loop: {
|
|
238
390
|
over: "blogPosts",
|
|
239
391
|
},
|
|
@@ -254,6 +406,11 @@ export const examples: {
|
|
|
254
406
|
border: { width: "border-2", color: "border-accent-400" },
|
|
255
407
|
rounding: "rounded-lg",
|
|
256
408
|
shadow: "shadow-md",
|
|
409
|
+
button: {
|
|
410
|
+
label: "Book Tickets",
|
|
411
|
+
url: "{{upcomingEvents.ticketUrl}}",
|
|
412
|
+
color: "btn-accent",
|
|
413
|
+
},
|
|
257
414
|
loop: {
|
|
258
415
|
over: "upcomingEvents",
|
|
259
416
|
},
|
|
@@ -267,12 +424,17 @@ export const examples: {
|
|
|
267
424
|
src: "{{customerReviews.customerPhoto}}",
|
|
268
425
|
alt: "{{customerReviews.customerName}}",
|
|
269
426
|
},
|
|
270
|
-
imagePosition: "
|
|
427
|
+
imagePosition: "top",
|
|
271
428
|
title: "{{customerReviews.customerName}}",
|
|
272
429
|
text: '"{{customerReviews.review}}"<br><br><strong>Rating: {{customerReviews.rating}}/5 stars</strong><br>{{customerReviews.company}} • {{customerReviews.position}}',
|
|
273
430
|
colorPreset: { color: "neutral-50" },
|
|
274
431
|
rounding: "rounded-xl",
|
|
275
432
|
shadow: "shadow-lg",
|
|
433
|
+
button: {
|
|
434
|
+
label: "See All Reviews",
|
|
435
|
+
url: "/reviews",
|
|
436
|
+
color: "btn-neutral",
|
|
437
|
+
},
|
|
276
438
|
loop: {
|
|
277
439
|
over: "customerReviews",
|
|
278
440
|
},
|
|
@@ -293,6 +455,11 @@ export const examples: {
|
|
|
293
455
|
border: { width: "border", color: "border-primary-300" },
|
|
294
456
|
rounding: "rounded-lg",
|
|
295
457
|
shadow: "shadow-md",
|
|
458
|
+
button: {
|
|
459
|
+
label: "Learn More",
|
|
460
|
+
url: "{{companyServices.detailsUrl}}",
|
|
461
|
+
color: "btn-primary",
|
|
462
|
+
},
|
|
296
463
|
loop: {
|
|
297
464
|
over: "companyServices",
|
|
298
465
|
},
|
|
@@ -312,6 +479,11 @@ export const examples: {
|
|
|
312
479
|
colorPreset: { color: "secondary-100" },
|
|
313
480
|
rounding: "rounded-md",
|
|
314
481
|
shadow: "shadow-sm",
|
|
482
|
+
button: {
|
|
483
|
+
label: "View Project",
|
|
484
|
+
url: "{{portfolioWork.projectUrl}}",
|
|
485
|
+
color: "btn-secondary",
|
|
486
|
+
},
|
|
315
487
|
loop: {
|
|
316
488
|
over: "portfolioWork",
|
|
317
489
|
},
|
|
@@ -9,13 +9,54 @@ import { roundingRef } from "../props/border";
|
|
|
9
9
|
import { colorPresetRef } from "../props/color-preset";
|
|
10
10
|
import { loopRef } from "../props/dynamic";
|
|
11
11
|
import { cssLengthRef } from "../props/css-length";
|
|
12
|
+
import type { BrickExample } from "./_types";
|
|
12
13
|
|
|
13
14
|
export const manifest = defineBrickManifest({
|
|
14
15
|
type: "carousel",
|
|
15
16
|
name: "Carousel",
|
|
16
17
|
description: "An image carousel with navigation arrows and dots or numbers indicator",
|
|
17
|
-
aiInstructions:
|
|
18
|
-
|
|
18
|
+
aiInstructions: `Use the carousel component for showcasing sequential visual content with smooth navigation between images.
|
|
19
|
+
|
|
20
|
+
WHEN TO USE:
|
|
21
|
+
- Product galleries with multiple angles or variations
|
|
22
|
+
- Portfolio showcases with project images
|
|
23
|
+
- Step-by-step tutorials or processes (recipes, instructions)
|
|
24
|
+
- Before/after comparisons or transformations
|
|
25
|
+
- Team member profiles with photos
|
|
26
|
+
- Event photo galleries or highlights
|
|
27
|
+
- Feature demonstrations or software screenshots
|
|
28
|
+
- Travel destinations or location showcases
|
|
29
|
+
|
|
30
|
+
CONTENT GUIDELINES:
|
|
31
|
+
- Optimal range: 2-8 images for best user engagement (max 12 supported)
|
|
32
|
+
- Single image allowed only as placeholder for future expansion
|
|
33
|
+
- Each image needs: { src: { src, alt }, legend }
|
|
34
|
+
- Alt text MUST be descriptive and never empty
|
|
35
|
+
- Legend text should be concise (≤90 characters) and informative
|
|
36
|
+
- Use empty string ("") for legend only when no caption is intentionally desired
|
|
37
|
+
|
|
38
|
+
IMAGE CONSISTENCY:
|
|
39
|
+
- Keep aspect ratios similar across slides to prevent layout jumps
|
|
40
|
+
- Avoid mixing very tall portrait with very wide landscape images
|
|
41
|
+
- Use consistent image quality and style throughout carousel
|
|
42
|
+
- Consider loading performance with image optimization
|
|
43
|
+
|
|
44
|
+
STYLING OPTIONS:
|
|
45
|
+
- padding: "0" for edge-to-edge, "1rem" for standard, "2rem+" for generous spacing
|
|
46
|
+
- borderRadius: "rounded-none" for sharp/modern, "rounded-md" for standard, "rounded-xl" for friendly, "rounded-full" for circular (avatars)
|
|
47
|
+
- colorPreset: Use sparingly - "neutral-50"/"primary-50" for subtle framing, gradients for premium feel
|
|
48
|
+
|
|
49
|
+
DYNAMIC CONTENT:
|
|
50
|
+
- Use loop property with single template object for data-driven carousels
|
|
51
|
+
- Template variables in src and legend: "{{product.image}}", "{{team.name}} - {{team.role}}"
|
|
52
|
+
- Perfect for: product catalogs, team directories, portfolio projects, event galleries
|
|
53
|
+
|
|
54
|
+
AVOID:
|
|
55
|
+
- Including unrelated properties (buttons, titles outside legend)
|
|
56
|
+
- Heavy background colors that distract from images
|
|
57
|
+
- Inconsistent aspect ratios that cause jarring transitions
|
|
58
|
+
- More than 12 images (reduces focus and performance)
|
|
59
|
+
- Empty or placeholder alt text (accessibility requirement)`,
|
|
19
60
|
category: "media",
|
|
20
61
|
defaultInspectorTab: "content",
|
|
21
62
|
consumesMultipleQueryRows: true,
|
|
@@ -74,13 +115,10 @@ export const manifest = defineBrickManifest({
|
|
|
74
115
|
|
|
75
116
|
export type Manifest = typeof manifest;
|
|
76
117
|
|
|
77
|
-
export const examples:
|
|
78
|
-
|
|
79
|
-
type: string;
|
|
80
|
-
props: BrickProps<Manifest>["brick"]["props"];
|
|
81
|
-
}[] = [
|
|
118
|
+
export const examples: BrickExample<Manifest>[] = [
|
|
119
|
+
// BASIC CAROUSEL EXAMPLES
|
|
82
120
|
{
|
|
83
|
-
description: "Basic image carousel with legends",
|
|
121
|
+
description: "Basic image carousel with legends - Simple content showcase",
|
|
84
122
|
type: "carousel",
|
|
85
123
|
props: {
|
|
86
124
|
images: [
|
|
@@ -108,8 +146,10 @@ export const examples: {
|
|
|
108
146
|
],
|
|
109
147
|
},
|
|
110
148
|
},
|
|
149
|
+
|
|
150
|
+
// PRODUCT & COMMERCIAL
|
|
111
151
|
{
|
|
112
|
-
description: "Product showcase carousel with rounded corners and padding",
|
|
152
|
+
description: "Product showcase carousel with rounded corners and padding - E-commerce gallery style",
|
|
113
153
|
type: "carousel",
|
|
114
154
|
props: {
|
|
115
155
|
images: [
|
|
@@ -144,11 +184,13 @@ export const examples: {
|
|
|
144
184
|
],
|
|
145
185
|
borderRadius: "rounded-xl",
|
|
146
186
|
padding: "2rem",
|
|
147
|
-
colorPreset: { color: "
|
|
187
|
+
colorPreset: { color: "neutral-50" },
|
|
148
188
|
},
|
|
149
189
|
},
|
|
190
|
+
|
|
191
|
+
// PORTFOLIO & CREATIVE
|
|
150
192
|
{
|
|
151
|
-
description: "Portfolio carousel with minimal styling",
|
|
193
|
+
description: "Portfolio carousel with minimal styling - Clean professional presentation",
|
|
152
194
|
type: "carousel",
|
|
153
195
|
props: {
|
|
154
196
|
images: [
|
|
@@ -178,8 +220,10 @@ export const examples: {
|
|
|
178
220
|
padding: "0",
|
|
179
221
|
},
|
|
180
222
|
},
|
|
223
|
+
|
|
224
|
+
// EVENTS & EXPERIENCES
|
|
181
225
|
{
|
|
182
|
-
description: "Event photos carousel with primary color theme",
|
|
226
|
+
description: "Event photos carousel with primary color theme - Conference or gathering highlights",
|
|
183
227
|
type: "carousel",
|
|
184
228
|
props: {
|
|
185
229
|
images: [
|
|
@@ -262,8 +306,10 @@ export const examples: {
|
|
|
262
306
|
padding: "1rem",
|
|
263
307
|
},
|
|
264
308
|
},
|
|
309
|
+
|
|
310
|
+
// TEAM & PEOPLE
|
|
265
311
|
{
|
|
266
|
-
description: "Team members carousel with
|
|
312
|
+
description: "Team members carousel with circular images - Professional team showcase",
|
|
267
313
|
type: "carousel",
|
|
268
314
|
props: {
|
|
269
315
|
images: [
|
|
@@ -296,13 +342,15 @@ export const examples: {
|
|
|
296
342
|
legend: "Emily Chen - Marketing Director",
|
|
297
343
|
},
|
|
298
344
|
],
|
|
299
|
-
colorPreset: { color: "
|
|
345
|
+
colorPreset: { color: "primary-50" },
|
|
300
346
|
borderRadius: "rounded-full",
|
|
301
347
|
padding: "2rem",
|
|
302
348
|
},
|
|
303
349
|
},
|
|
350
|
+
|
|
351
|
+
// TUTORIALS & PROCESSES
|
|
304
352
|
{
|
|
305
|
-
description: "Recipe steps carousel with detailed descriptions",
|
|
353
|
+
description: "Recipe steps carousel with detailed descriptions - Step-by-step instructional content",
|
|
306
354
|
type: "carousel",
|
|
307
355
|
props: {
|
|
308
356
|
images: [
|
|
@@ -335,7 +383,7 @@ export const examples: {
|
|
|
335
383
|
legend: "Step 4: Season and serve hot",
|
|
336
384
|
},
|
|
337
385
|
],
|
|
338
|
-
colorPreset: { color: "
|
|
386
|
+
colorPreset: { color: "accent-50" },
|
|
339
387
|
borderRadius: "rounded-md",
|
|
340
388
|
padding: "1.5rem",
|
|
341
389
|
},
|
|
@@ -374,7 +422,7 @@ export const examples: {
|
|
|
374
422
|
legend: "Living Room - After",
|
|
375
423
|
},
|
|
376
424
|
],
|
|
377
|
-
colorPreset: { color: "
|
|
425
|
+
colorPreset: { color: "accent-100" },
|
|
378
426
|
borderRadius: "rounded-lg",
|
|
379
427
|
padding: "1rem",
|
|
380
428
|
},
|
|
@@ -406,7 +454,7 @@ export const examples: {
|
|
|
406
454
|
legend: "Color Study #7 - 2024",
|
|
407
455
|
},
|
|
408
456
|
],
|
|
409
|
-
colorPreset: { color: "
|
|
457
|
+
colorPreset: { color: "neutral-900" },
|
|
410
458
|
borderRadius: "rounded-sm",
|
|
411
459
|
padding: "3rem",
|
|
412
460
|
},
|
|
@@ -459,7 +507,7 @@ export const examples: {
|
|
|
459
507
|
legend: "Weekend Casual - Relaxed Fit",
|
|
460
508
|
},
|
|
461
509
|
],
|
|
462
|
-
colorPreset: { color: "
|
|
510
|
+
colorPreset: { color: "secondary-100" },
|
|
463
511
|
borderRadius: "rounded-xl",
|
|
464
512
|
padding: "2rem",
|
|
465
513
|
},
|
|
@@ -491,7 +539,7 @@ export const examples: {
|
|
|
491
539
|
legend: "Electric Sedan",
|
|
492
540
|
},
|
|
493
541
|
],
|
|
494
|
-
colorPreset: { color: "
|
|
542
|
+
colorPreset: { color: "accent-50" },
|
|
495
543
|
borderRadius: "rounded-lg",
|
|
496
544
|
padding: "0.5rem",
|
|
497
545
|
},
|
|
@@ -530,13 +578,13 @@ export const examples: {
|
|
|
530
578
|
legend: "Security - Enterprise-grade protection",
|
|
531
579
|
},
|
|
532
580
|
],
|
|
533
|
-
colorPreset: { color: "
|
|
581
|
+
colorPreset: { color: "primary-50" },
|
|
534
582
|
borderRadius: "rounded-2xl",
|
|
535
583
|
padding: "4rem",
|
|
536
584
|
},
|
|
537
585
|
},
|
|
538
586
|
{
|
|
539
|
-
description: "Dynamic product gallery using products query
|
|
587
|
+
description: "Dynamic product gallery using products query - Data-driven product showcase",
|
|
540
588
|
type: "carousel",
|
|
541
589
|
props: {
|
|
542
590
|
images: [
|
|
@@ -556,6 +604,90 @@ export const examples: {
|
|
|
556
604
|
},
|
|
557
605
|
},
|
|
558
606
|
},
|
|
607
|
+
|
|
608
|
+
// DYNAMIC CONTENT EXAMPLES
|
|
609
|
+
{
|
|
610
|
+
description: "Loop template for portfolioProjects query (one object will repeat per row)",
|
|
611
|
+
type: "carousel",
|
|
612
|
+
props: {
|
|
613
|
+
images: [
|
|
614
|
+
{
|
|
615
|
+
src: {
|
|
616
|
+
src: "{{portfolioProjects.featuredImage}}",
|
|
617
|
+
alt: "{{portfolioProjects.projectName}} featured image",
|
|
618
|
+
},
|
|
619
|
+
legend:
|
|
620
|
+
"{{portfolioProjects.projectName}} – {{portfolioProjects.clientName}} ({{portfolioProjects.year}})",
|
|
621
|
+
},
|
|
622
|
+
],
|
|
623
|
+
colorPreset: { color: "neutral-50" },
|
|
624
|
+
borderRadius: "rounded-md",
|
|
625
|
+
padding: "1rem",
|
|
626
|
+
loop: {
|
|
627
|
+
over: "portfolioProjects",
|
|
628
|
+
},
|
|
629
|
+
},
|
|
630
|
+
},
|
|
631
|
+
|
|
632
|
+
// SPECIAL STYLING VARIATIONS
|
|
633
|
+
{
|
|
634
|
+
description: "Showcase carousel with subtle gradient background frame",
|
|
635
|
+
type: "carousel",
|
|
636
|
+
props: {
|
|
637
|
+
images: [
|
|
638
|
+
{
|
|
639
|
+
src: { src: "https://via.placeholder.com/900x500.png?text=Showcase+1", alt: "Showcase slide 1" },
|
|
640
|
+
legend: "Launch Dashboard",
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
src: { src: "https://via.placeholder.com/900x500.png?text=Showcase+2", alt: "Showcase slide 2" },
|
|
644
|
+
legend: "Collaboration Tools",
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
src: { src: "https://via.placeholder.com/900x500.png?text=Showcase+3", alt: "Showcase slide 3" },
|
|
648
|
+
legend: "Usage Analytics",
|
|
649
|
+
},
|
|
650
|
+
],
|
|
651
|
+
colorPreset: { color: "primary-gradient-300", gradientDirection: "bg-gradient-to-br" },
|
|
652
|
+
borderRadius: "rounded-xl",
|
|
653
|
+
padding: "2rem",
|
|
654
|
+
},
|
|
655
|
+
},
|
|
656
|
+
// MINIMAL EDGE (no padding, square corners)
|
|
657
|
+
{
|
|
658
|
+
description: "Minimal edge-to-edge carousel (no padding, no rounding)",
|
|
659
|
+
type: "carousel",
|
|
660
|
+
props: {
|
|
661
|
+
images: [
|
|
662
|
+
{
|
|
663
|
+
src: { src: "https://via.placeholder.com/800x400.png?text=Edge+1", alt: "Edge slide 1" },
|
|
664
|
+
legend: "",
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
src: { src: "https://via.placeholder.com/800x400.png?text=Edge+2", alt: "Edge slide 2" },
|
|
668
|
+
legend: "",
|
|
669
|
+
},
|
|
670
|
+
],
|
|
671
|
+
borderRadius: "rounded-none",
|
|
672
|
+
padding: "0",
|
|
673
|
+
},
|
|
674
|
+
},
|
|
675
|
+
// SINGLE IMAGE (acts as prepared placeholder carousel)
|
|
676
|
+
{
|
|
677
|
+
description: "Single-image carousel (placeholder for future expansion)",
|
|
678
|
+
type: "carousel",
|
|
679
|
+
props: {
|
|
680
|
+
images: [
|
|
681
|
+
{
|
|
682
|
+
src: { src: "https://via.placeholder.com/1000x420.png?text=Banner", alt: "Promotional banner" },
|
|
683
|
+
legend: "Early Access Program",
|
|
684
|
+
},
|
|
685
|
+
],
|
|
686
|
+
colorPreset: { color: "secondary-50" },
|
|
687
|
+
borderRadius: "rounded-lg",
|
|
688
|
+
padding: "1.25rem",
|
|
689
|
+
},
|
|
690
|
+
},
|
|
559
691
|
{
|
|
560
692
|
description: "Team member carousel using teamMembers query with roles and departments",
|
|
561
693
|
type: "carousel",
|
|
@@ -9,6 +9,7 @@ import { fontSizeRef } from "../props/text";
|
|
|
9
9
|
import type { BrickProps } from "../props/types";
|
|
10
10
|
import { toLLMSchema } from "~/shared/utils/llm";
|
|
11
11
|
import { cssLengthRef } from "../props/css-length";
|
|
12
|
+
import type { BrickExample } from "./_types";
|
|
12
13
|
|
|
13
14
|
export const manifest = defineBrickManifest({
|
|
14
15
|
type: "footer",
|
|
@@ -107,11 +108,7 @@ export const footerSchemaPropsLLM = toLLMSchema(manifest.props);
|
|
|
107
108
|
|
|
108
109
|
export type FooterProps = Static<Manifest["props"]>;
|
|
109
110
|
|
|
110
|
-
export const examples:
|
|
111
|
-
description: string;
|
|
112
|
-
type: string;
|
|
113
|
-
props: BrickProps<Manifest>["brick"]["props"];
|
|
114
|
-
}[] = [
|
|
111
|
+
export const examples: BrickExample<Manifest>[] = [
|
|
115
112
|
{
|
|
116
113
|
description: "Simple footer with logo on the left",
|
|
117
114
|
type: "footer",
|