@upstart.gg/sdk 0.0.137 → 0.0.138

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 (232) hide show
  1. package/dist/shared/ai/schemas.js +2 -2
  2. package/dist/shared/ai/schemas.js.map +1 -1
  3. package/dist/shared/ai/types.d.ts +2 -2
  4. package/dist/shared/ai/types.d.ts.map +1 -1
  5. package/dist/shared/ajv.js +26 -25
  6. package/dist/shared/ajv.js.map +1 -1
  7. package/dist/shared/attributes.d.ts +8 -0
  8. package/dist/shared/attributes.d.ts.map +1 -1
  9. package/dist/shared/attributes.js +15 -14
  10. package/dist/shared/brick-manifest.js +2 -2
  11. package/dist/shared/bricks/manifests/accordion.manifest.js +8 -7
  12. package/dist/shared/bricks/manifests/all-manifests.js +38 -37
  13. package/dist/shared/bricks/manifests/all-props.d.ts +32 -22
  14. package/dist/shared/bricks/manifests/all-props.d.ts.map +1 -1
  15. package/dist/shared/bricks/manifests/all-props.js +40 -39
  16. package/dist/shared/bricks/manifests/all-props.js.map +1 -1
  17. package/dist/shared/bricks/manifests/box.manifest.js +11 -10
  18. package/dist/shared/bricks/manifests/button.manifest.js +10 -9
  19. package/dist/shared/bricks/manifests/card.manifest.d.ts +2 -0
  20. package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
  21. package/dist/shared/bricks/manifests/card.manifest.js +13 -12
  22. package/dist/shared/bricks/manifests/carousel.manifest.d.ts +1 -0
  23. package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
  24. package/dist/shared/bricks/manifests/carousel.manifest.js +11 -10
  25. package/dist/shared/bricks/manifests/footer.manifest.d.ts +2 -0
  26. package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
  27. package/dist/shared/bricks/manifests/footer.manifest.js +9 -8
  28. package/dist/shared/bricks/manifests/form.manifest.js +9 -8
  29. package/dist/shared/bricks/manifests/hero.manifest.d.ts +2 -4
  30. package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
  31. package/dist/shared/bricks/manifests/hero.manifest.js +10 -9
  32. package/dist/shared/bricks/manifests/html.manifest.d.ts +1 -0
  33. package/dist/shared/bricks/manifests/html.manifest.d.ts.map +1 -1
  34. package/dist/shared/bricks/manifests/html.manifest.js +6 -5
  35. package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
  36. package/dist/shared/bricks/manifests/icon.manifest.js +9 -8
  37. package/dist/shared/bricks/manifests/image.manifest.d.ts +1 -0
  38. package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
  39. package/dist/shared/bricks/manifests/image.manifest.js +12 -11
  40. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +2 -0
  41. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
  42. package/dist/shared/bricks/manifests/images-gallery.manifest.js +11 -10
  43. package/dist/shared/bricks/manifests/map.manifest.d.ts +1 -0
  44. package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
  45. package/dist/shared/bricks/manifests/map.manifest.js +9 -8
  46. package/dist/shared/bricks/manifests/navbar.manifest.d.ts +2 -0
  47. package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
  48. package/dist/shared/bricks/manifests/navbar.manifest.js +11 -10
  49. package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
  50. package/dist/shared/bricks/manifests/sidebar.manifest.js +11 -10
  51. package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
  52. package/dist/shared/bricks/manifests/social-links.manifest.js +10 -9
  53. package/dist/shared/bricks/manifests/spacer.manifest.d.ts.map +1 -1
  54. package/dist/shared/bricks/manifests/spacer.manifest.js +6 -5
  55. package/dist/shared/bricks/manifests/table.manifest.d.ts +1 -0
  56. package/dist/shared/bricks/manifests/table.manifest.d.ts.map +1 -1
  57. package/dist/shared/bricks/manifests/table.manifest.js +10 -9
  58. package/dist/shared/bricks/manifests/tabs.manifest.d.ts +1 -1
  59. package/dist/shared/bricks/manifests/tabs.manifest.d.ts.map +1 -1
  60. package/dist/shared/bricks/manifests/tabs.manifest.js +11 -10
  61. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +3 -1
  62. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -1
  63. package/dist/shared/bricks/manifests/testimonials.manifest.js +13 -12
  64. package/dist/shared/bricks/manifests/text.manifest.d.ts +2 -5
  65. package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
  66. package/dist/shared/bricks/manifests/text.manifest.js +10 -9
  67. package/dist/shared/bricks/manifests/timeline.manifest.js +11 -10
  68. package/dist/shared/bricks/manifests/video.manifest.js +9 -8
  69. package/dist/shared/bricks/props/background.d.ts.map +1 -1
  70. package/dist/shared/bricks/props/background.js +1 -1
  71. package/dist/shared/bricks/props/border.js +2 -2
  72. package/dist/shared/bricks/props/color.d.ts.map +1 -1
  73. package/dist/shared/bricks/props/color.js +1 -1
  74. package/dist/shared/bricks/props/common.d.ts.map +1 -1
  75. package/dist/shared/bricks/props/common.js +2 -1
  76. package/dist/shared/bricks/props/grow.d.ts +3 -0
  77. package/dist/shared/bricks/props/grow.d.ts.map +1 -0
  78. package/dist/shared/bricks/props/grow.js +10 -0
  79. package/dist/shared/bricks/props/grow.js.map +1 -0
  80. package/dist/shared/bricks/props/helpers.js +3 -2
  81. package/dist/shared/bricks/props/image.d.ts +1 -0
  82. package/dist/shared/bricks/props/image.d.ts.map +1 -1
  83. package/dist/shared/bricks/props/image.js +1 -1
  84. package/dist/shared/bricks/props/string.d.ts.map +1 -1
  85. package/dist/shared/bricks/props/string.js +1 -1
  86. package/dist/shared/bricks.d.ts +18 -17
  87. package/dist/shared/bricks.d.ts.map +1 -1
  88. package/dist/shared/bricks.js +39 -38
  89. package/dist/shared/chunk-2EOCK66Z.js +19 -0
  90. package/dist/shared/chunk-2EOCK66Z.js.map +1 -0
  91. package/dist/shared/{chunk-XXPSM6UA.js → chunk-2UEPTT5J.js} +5 -9
  92. package/dist/shared/chunk-2UEPTT5J.js.map +1 -0
  93. package/dist/shared/{chunk-DRQKKPTX.js → chunk-2Z5WOCFS.js} +41 -1
  94. package/dist/shared/chunk-2Z5WOCFS.js.map +1 -0
  95. package/dist/shared/{chunk-7U5WPHXB.js → chunk-34IUWNRX.js} +7 -7
  96. package/dist/shared/chunk-57NRTXRA.js +309 -0
  97. package/dist/shared/chunk-57NRTXRA.js.map +1 -0
  98. package/dist/shared/{chunk-T6C3NG2L.js → chunk-5HJT5NJ3.js} +8 -8
  99. package/dist/shared/{chunk-BZTWZC77.js → chunk-5J4Y43RM.js} +37 -179
  100. package/dist/shared/chunk-5J4Y43RM.js.map +1 -0
  101. package/dist/shared/{chunk-KKWT3OXF.js → chunk-5OVOXUFX.js} +3 -2
  102. package/dist/shared/{chunk-KKWT3OXF.js.map → chunk-5OVOXUFX.js.map} +1 -1
  103. package/dist/shared/{chunk-XK2CERPB.js → chunk-5SNSUC6Q.js} +7 -7
  104. package/dist/shared/{chunk-JLDAS3VE.js → chunk-B5T2LFV2.js} +10 -14
  105. package/dist/shared/chunk-B5T2LFV2.js.map +1 -0
  106. package/dist/shared/{chunk-PF75LW33.js → chunk-E3ZW57HF.js} +18 -9
  107. package/dist/shared/chunk-E3ZW57HF.js.map +1 -0
  108. package/dist/shared/{chunk-JSDKK5QN.js → chunk-EUFVTHAG.js} +5 -3
  109. package/dist/shared/chunk-EUFVTHAG.js.map +1 -0
  110. package/dist/shared/{chunk-U4KZUX37.js → chunk-FC52EHCC.js} +8 -8
  111. package/dist/shared/chunk-FC52EHCC.js.map +1 -0
  112. package/dist/shared/{chunk-JW7MQAU4.js → chunk-FVV27R73.js} +9 -94
  113. package/dist/shared/chunk-FVV27R73.js.map +1 -0
  114. package/dist/shared/{chunk-SQXZNGQF.js → chunk-FYGFB5U5.js} +3 -1
  115. package/dist/shared/chunk-FYGFB5U5.js.map +1 -0
  116. package/dist/shared/{chunk-J45LSQT6.js → chunk-GNTJT7MR.js} +2 -2
  117. package/dist/shared/chunk-HHUFGV7J.js +259 -0
  118. package/dist/shared/chunk-HHUFGV7J.js.map +1 -0
  119. package/dist/shared/{chunk-W2RFDII5.js → chunk-IMDOF55E.js} +12 -4
  120. package/dist/shared/chunk-IMDOF55E.js.map +1 -0
  121. package/dist/shared/{chunk-KQH6V22E.js → chunk-IPWYNE6Y.js} +25 -25
  122. package/dist/shared/{chunk-H6TMBELF.js → chunk-J6R3GSKS.js} +46 -34
  123. package/dist/shared/chunk-J6R3GSKS.js.map +1 -0
  124. package/dist/shared/{chunk-TBT2PTGB.js → chunk-KRODRZNS.js} +9 -9
  125. package/dist/shared/chunk-KTA7XES3.js +168 -0
  126. package/dist/shared/chunk-KTA7XES3.js.map +1 -0
  127. package/dist/shared/{chunk-SK2O7GFC.js → chunk-L4W4B2RQ.js} +15 -70
  128. package/dist/shared/chunk-L4W4B2RQ.js.map +1 -0
  129. package/dist/shared/{chunk-MYOLWTB2.js → chunk-NTP6BKRU.js} +9 -9
  130. package/dist/shared/chunk-NTP6BKRU.js.map +1 -0
  131. package/dist/shared/{chunk-JF52BBFD.js → chunk-O53V22BK.js} +18 -10
  132. package/dist/shared/chunk-O53V22BK.js.map +1 -0
  133. package/dist/shared/{chunk-ZVJNRKT4.js → chunk-ORIUCOED.js} +7 -7
  134. package/dist/shared/{chunk-LGDDJJHK.js → chunk-PFZMRSHJ.js} +11 -11
  135. package/dist/shared/{chunk-6AE7UD73.js → chunk-QHKOAIOK.js} +31 -60
  136. package/dist/shared/chunk-QHKOAIOK.js.map +1 -0
  137. package/dist/shared/{chunk-LPAQ47C6.js → chunk-RDOCVLCF.js} +11 -11
  138. package/dist/shared/{chunk-VSLRTXLF.js → chunk-RFH7PEVS.js} +5 -4
  139. package/dist/shared/chunk-RFH7PEVS.js.map +1 -0
  140. package/dist/shared/{chunk-XNRSL6FL.js → chunk-T3UPW5OW.js} +5 -4
  141. package/dist/shared/{chunk-XNRSL6FL.js.map → chunk-T3UPW5OW.js.map} +1 -1
  142. package/dist/shared/{chunk-FUUSAMN3.js → chunk-TGKNA2JS.js} +8 -8
  143. package/dist/shared/{chunk-HY7JOP3J.js → chunk-TZ6X7ZM5.js} +19 -11
  144. package/dist/shared/chunk-TZ6X7ZM5.js.map +1 -0
  145. package/dist/shared/{chunk-VTCHJT4O.js → chunk-UC75KRLX.js} +2 -2
  146. package/dist/shared/{chunk-4KY7OZWD.js → chunk-VMIJ6MG5.js} +13 -13
  147. package/dist/shared/{chunk-SRYBJ6NQ.js → chunk-VYA2FCTY.js} +2 -2
  148. package/dist/shared/{chunk-LGGPCCCY.js → chunk-XYWSIMZ6.js} +3 -3
  149. package/dist/shared/chunk-XYWSIMZ6.js.map +1 -0
  150. package/dist/shared/{chunk-FHA4DFIM.js → chunk-ZYQZUWF7.js} +10 -10
  151. package/dist/shared/{chunk-2O5HVPID.js → chunk-ZZVYD4BG.js} +3 -3
  152. package/dist/shared/context.d.ts +4 -0
  153. package/dist/shared/context.d.ts.map +1 -1
  154. package/dist/shared/context.js +43 -42
  155. package/dist/shared/context.js.map +1 -1
  156. package/dist/shared/page.d.ts +2 -0
  157. package/dist/shared/page.d.ts.map +1 -1
  158. package/dist/shared/page.js +41 -40
  159. package/dist/shared/site.d.ts +7 -0
  160. package/dist/shared/site.d.ts.map +1 -1
  161. package/dist/shared/site.js +43 -42
  162. package/dist/shared/sitemap.js +42 -41
  163. package/dist/shared/utils/schema.d.ts +0 -5
  164. package/dist/shared/utils/schema.d.ts.map +1 -1
  165. package/dist/shared/utils/schema.js +1 -3
  166. package/package.json +2 -2
  167. package/src/shared/ai/schemas.ts +1 -1
  168. package/src/shared/ai/types.ts +2 -2
  169. package/src/shared/bricks/manifests/card.manifest.ts +25 -168
  170. package/src/shared/bricks/manifests/hero.manifest.ts +44 -249
  171. package/src/shared/bricks/manifests/html.manifest.ts +6 -0
  172. package/src/shared/bricks/manifests/icon.manifest.ts +1 -89
  173. package/src/shared/bricks/manifests/image.manifest.ts +0 -4
  174. package/src/shared/bricks/manifests/images-gallery.manifest.ts +8 -0
  175. package/src/shared/bricks/manifests/map.manifest.ts +9 -65
  176. package/src/shared/bricks/manifests/sidebar.manifest.ts +0 -1
  177. package/src/shared/bricks/manifests/social-links.manifest.ts +0 -1
  178. package/src/shared/bricks/manifests/spacer.manifest.ts +0 -1
  179. package/src/shared/bricks/manifests/table.manifest.ts +6 -0
  180. package/src/shared/bricks/manifests/tabs.manifest.ts +12 -429
  181. package/src/shared/bricks/manifests/testimonials.manifest.ts +28 -226
  182. package/src/shared/bricks/manifests/text.manifest.ts +16 -44
  183. package/src/shared/bricks/props/background.ts +2 -1
  184. package/src/shared/bricks/props/color.ts +5 -2
  185. package/src/shared/bricks/props/common.ts +2 -8
  186. package/src/shared/bricks/props/grow.ts +11 -0
  187. package/src/shared/bricks/props/image.ts +40 -0
  188. package/src/shared/bricks/props/string.ts +2 -0
  189. package/src/shared/bricks.ts +33 -23
  190. package/src/shared/page.ts +1 -0
  191. package/src/shared/site.ts +1 -0
  192. package/src/shared/utils/schema.ts +28 -18
  193. package/src/shared/utils/tests/schema.test.ts +211 -4
  194. package/dist/shared/chunk-6AE7UD73.js.map +0 -1
  195. package/dist/shared/chunk-BZTWZC77.js.map +0 -1
  196. package/dist/shared/chunk-DRQKKPTX.js.map +0 -1
  197. package/dist/shared/chunk-H6TMBELF.js.map +0 -1
  198. package/dist/shared/chunk-HUWMIXNN.js +0 -570
  199. package/dist/shared/chunk-HUWMIXNN.js.map +0 -1
  200. package/dist/shared/chunk-HY7JOP3J.js.map +0 -1
  201. package/dist/shared/chunk-JF52BBFD.js.map +0 -1
  202. package/dist/shared/chunk-JLDAS3VE.js.map +0 -1
  203. package/dist/shared/chunk-JSDKK5QN.js.map +0 -1
  204. package/dist/shared/chunk-JW7MQAU4.js.map +0 -1
  205. package/dist/shared/chunk-LGGPCCCY.js.map +0 -1
  206. package/dist/shared/chunk-MYOLWTB2.js.map +0 -1
  207. package/dist/shared/chunk-O24RDXZS.js +0 -505
  208. package/dist/shared/chunk-O24RDXZS.js.map +0 -1
  209. package/dist/shared/chunk-PF75LW33.js.map +0 -1
  210. package/dist/shared/chunk-QEJGPYTB.js +0 -462
  211. package/dist/shared/chunk-QEJGPYTB.js.map +0 -1
  212. package/dist/shared/chunk-SK2O7GFC.js.map +0 -1
  213. package/dist/shared/chunk-SQXZNGQF.js.map +0 -1
  214. package/dist/shared/chunk-U4KZUX37.js.map +0 -1
  215. package/dist/shared/chunk-VSLRTXLF.js.map +0 -1
  216. package/dist/shared/chunk-W2RFDII5.js.map +0 -1
  217. package/dist/shared/chunk-XXPSM6UA.js.map +0 -1
  218. /package/dist/shared/{chunk-7U5WPHXB.js.map → chunk-34IUWNRX.js.map} +0 -0
  219. /package/dist/shared/{chunk-T6C3NG2L.js.map → chunk-5HJT5NJ3.js.map} +0 -0
  220. /package/dist/shared/{chunk-XK2CERPB.js.map → chunk-5SNSUC6Q.js.map} +0 -0
  221. /package/dist/shared/{chunk-J45LSQT6.js.map → chunk-GNTJT7MR.js.map} +0 -0
  222. /package/dist/shared/{chunk-KQH6V22E.js.map → chunk-IPWYNE6Y.js.map} +0 -0
  223. /package/dist/shared/{chunk-TBT2PTGB.js.map → chunk-KRODRZNS.js.map} +0 -0
  224. /package/dist/shared/{chunk-ZVJNRKT4.js.map → chunk-ORIUCOED.js.map} +0 -0
  225. /package/dist/shared/{chunk-LGDDJJHK.js.map → chunk-PFZMRSHJ.js.map} +0 -0
  226. /package/dist/shared/{chunk-LPAQ47C6.js.map → chunk-RDOCVLCF.js.map} +0 -0
  227. /package/dist/shared/{chunk-FUUSAMN3.js.map → chunk-TGKNA2JS.js.map} +0 -0
  228. /package/dist/shared/{chunk-VTCHJT4O.js.map → chunk-UC75KRLX.js.map} +0 -0
  229. /package/dist/shared/{chunk-4KY7OZWD.js.map → chunk-VMIJ6MG5.js.map} +0 -0
  230. /package/dist/shared/{chunk-SRYBJ6NQ.js.map → chunk-VYA2FCTY.js.map} +0 -0
  231. /package/dist/shared/{chunk-FHA4DFIM.js.map → chunk-ZYQZUWF7.js.map} +0 -0
  232. /package/dist/shared/{chunk-2O5HVPID.js.map → chunk-ZZVYD4BG.js.map} +0 -0
@@ -10,6 +10,8 @@ import { colorPreset } from "../props/color-preset";
10
10
  import { alignItems, justifyContent } from "../props/align";
11
11
  import { cssLength } from "../props/css-length";
12
12
  import type { BrickExample } from "./_types";
13
+ import { backgroundColor } from "../props/background";
14
+ import { color } from "../props/color";
13
15
 
14
16
  export const manifest = defineBrickManifest({
15
17
  type: "hero",
@@ -23,14 +25,14 @@ STRUCTURE
23
25
  1. Always supply 'content' (can be plain text or simple HTML like <h1>, <strong>, <br/>).
24
26
  2. 'tagline' is optional. Prefer concise value (1 short sentence). Omit if not needed.
25
27
  3. Do NOT add buttons, images, forms, lists, or unrelated HTML here (use dedicated bricks for that).
28
+ 4. Hero should be placed in vertical sections, except for very specific cases.
26
29
 
27
30
  COLOR & BACKGROUND
28
- Prefer omitting colorPreset so the hero inherits its parent layout background.
29
- When you need emphasis use semantic presets: primary-, secondary-, accent-, neutral-, base-*** or gradient variants like primary-gradient-400 (then add gradientDirection).
30
- • NEVER invent tokens like success-, warning-, danger-, blue-, orange- (they don't exist). Map them to semantic sets (e.g. success -> secondary, warning -> accent, danger -> accent or primary, blue -> primary, orange -> accent).
31
+ - Prefer omitting "colorPreset" so the hero inherits its parent section background.
32
+ - If you do set "colorPreset", ensure sufficient contrast between text and background.
31
33
 
32
34
  LAYOUT & SPACING
33
- • Use padding suited to visual weight: landing hero: 58rem desktop; simple page intro: 24rem.
35
+ • Use padding suited to visual weight: landing hero: 5-8rem desktop; simple page intro: 2-4rem.
34
36
  • You may provide a mobile override via mobileProps (e.g. smaller padding such as 2rem).
35
37
  • Keep justifyContent + alignItems consistent (usually center/center or start/start). Avoid mixing center with start.
36
38
 
@@ -43,7 +45,7 @@ DYNAMIC DATA
43
45
  • Ensure dynamic tokens exist in the referenced query context. Don't fabricate field names.
44
46
 
45
47
  RESPONSIVE
46
- • Use mobileProps only for necessary reductions (padding, alignment). Do not duplicate unchanged properties.
48
+ • Use "mobileProps" only for necessary reductions (padding, alignment). Do not duplicate unchanged properties.
47
49
 
48
50
  DON'TS
49
51
  ✗ Don't add properties that are not in the schema.
@@ -52,9 +54,7 @@ DON'TS
52
54
 
53
55
  DO
54
56
  ✓ Keep content focused.
55
- Use semantic colors thoughtfully.
56
- ✓ Use gradientDirection ONLY with gradient presets.
57
- ✓ Provide accessible plain text when not using HTML tags.
57
+ Wrap tagline in <p> for alignment control.
58
58
  `,
59
59
  icon: BsAlphabetUppercase,
60
60
 
@@ -74,12 +74,17 @@ DO
74
74
  // default: "<p style='text-align:center'>Use our platform to build your business with confidence.</p>",
75
75
  }),
76
76
  ),
77
- colorPreset: Type.Optional(
78
- colorPreset({
79
- title: "Color",
77
+ backgroundColor: Type.Optional(
78
+ backgroundColor({
79
+ title: "Background color",
80
+ }),
81
+ ),
82
+ color: Type.Optional(
83
+ color({
84
+ title: "Text color",
85
+ default: "text-inherit",
80
86
  }),
81
87
  ),
82
-
83
88
  textShadow: Type.Optional(
84
89
  textShadow({
85
90
  default: "text-shadow-sm",
@@ -99,7 +104,11 @@ DO
99
104
  rounding: rounding({
100
105
  default: "rounded-md",
101
106
  }),
102
- border: Type.Optional(border()),
107
+ border: Type.Optional(
108
+ border({
109
+ "ai:hidden": true,
110
+ }),
111
+ ),
103
112
  shadow: Type.Optional(shadow()),
104
113
  justifyContent: Type.Optional(
105
114
  justifyContent({
@@ -118,15 +127,12 @@ export type Manifest = typeof manifest;
118
127
 
119
128
  export const examples: BrickExample<Manifest>[] = [
120
129
  {
121
- description: "Simple welcome hero with primary background",
130
+ description: "Simple welcome hero with primary background, centered",
122
131
  type: "hero",
123
132
  props: {
124
133
  content: "Welcome to Our Platform",
125
- tagline: "The future of productivity starts here",
134
+ tagline: "<p style='text-align:center'>The future of productivity starts here</p>",
126
135
  padding: "3rem",
127
- colorPreset: {
128
- color: "primary-400",
129
- },
130
136
  },
131
137
  },
132
138
  {
@@ -134,12 +140,8 @@ export const examples: BrickExample<Manifest>[] = [
134
140
  type: "hero",
135
141
  props: {
136
142
  content: "Build Something Amazing",
137
- tagline: "Turn your ideas into reality with our cutting-edge tools",
143
+ tagline: "<p style='text-align:center'>Turn your ideas into reality with our cutting-edge tools</p>",
138
144
  padding: "3rem",
139
- colorPreset: {
140
- color: "primary-500",
141
- gradientDirection: "bg-gradient-to-br",
142
- },
143
145
  },
144
146
  },
145
147
  {
@@ -147,198 +149,52 @@ export const examples: BrickExample<Manifest>[] = [
147
149
  type: "hero",
148
150
  props: {
149
151
  content: "Building Tomorrow Today",
150
- tagline: "Quality construction services for residential and commercial projects",
151
- padding: "3rem",
152
- },
153
- },
154
- {
155
- description: "Fashion brand hero with modern appeal",
156
- type: "hero",
157
- props: {
158
- content: "Express Your Style",
159
- tagline: "Contemporary fashion that speaks to your individuality",
160
- padding: "6rem",
161
- },
162
- },
163
- {
164
- description: "Law firm hero with authoritative tone",
165
- type: "hero",
166
- props: {
167
- content: "Justice You Can Trust",
168
- tagline: "Experienced legal representation for individuals and businesses",
169
- padding: "6rem",
170
- colorPreset: {
171
- color: "neutral-800",
172
- },
173
- },
174
- },
175
- {
176
- description: "Photography studio hero with artistic flair",
177
- type: "hero",
178
- props: {
179
- content: "Capturing Life's Moments",
180
- tagline: "Professional photography services for weddings, portraits, and events",
181
- },
182
- },
183
- {
184
- description: "Restaurant hero with warm colors and rounded design (accent mapping for former 'orange')",
185
- type: "hero",
186
- props: {
187
- content: "Authentic Italian Cuisine",
188
- tagline: "Fresh ingredients, traditional recipes, unforgettable flavors",
189
- padding: "4rem",
190
- colorPreset: {
191
- color: "accent-600",
192
- },
193
- rounding: "rounded-xl",
194
- shadow: "shadow-lg",
195
- },
196
- },
197
- {
198
- description:
199
- "Tech company hero with secondary gradient (mapped from former 'success') and modern styling",
200
- type: "hero",
201
- props: {
202
- content: "Innovation Redefined",
203
- tagline: "Pushing the boundaries of what's possible with AI technology",
204
- padding: "5rem",
205
- colorPreset: {
206
- color: "secondary-gradient-400",
207
- gradientDirection: "bg-gradient-to-r",
208
- },
209
- textShadow: "text-shadow-lg",
210
- border: {
211
- width: "border-2",
212
- color: "border-success-300",
213
- },
214
- },
215
- },
216
- {
217
- description: "Medical practice hero with trust-inspiring design (primary mapping for former 'blue')",
218
- type: "hero",
219
- props: {
220
- content: "Your Health, Our Priority",
221
- tagline: "Comprehensive healthcare services with compassionate care",
222
- padding: "4rem",
223
- colorPreset: {
224
- color: "primary-500",
225
- },
226
- rounding: "rounded-lg",
227
- justifyContent: "justify-start",
228
- alignItems: "items-start",
229
- },
230
- },
231
- {
232
- description:
233
- "Creative agency hero with accent gradient (mapped from former 'warning') and diagonal gradient",
234
- type: "hero",
235
- props: {
236
- content: "Creative Solutions",
237
- tagline: "Bold designs that make your brand unforgettable",
152
+ tagline:
153
+ "<p style='text-align:center'>Quality construction services for residential and commercial projects</p>",
238
154
  padding: "3rem",
239
- colorPreset: {
240
- color: "accent-gradient-300",
241
- gradientDirection: "bg-gradient-to-tl",
242
- },
243
- shadow: "shadow-xl",
244
- border: {
245
- width: "border",
246
- color: "border-warning-200",
247
- },
248
155
  },
249
156
  },
250
157
  {
251
- description: "Fitness studio hero with accent strong presence (mapping former 'danger')",
158
+ description: "Fitness studio hero with accent strong presence",
252
159
  type: "hero",
253
160
  props: {
254
161
  content: "Transform Your Body",
255
- tagline: "High-intensity training programs that deliver real results",
162
+ tagline: "<p style='text-align:center'>High-intensity training programs that deliver real results</p>",
256
163
  padding: "5rem",
257
- colorPreset: {
258
- color: "accent-600",
259
- },
260
164
  textShadow: "text-shadow-md",
261
165
  rounding: "rounded-2xl",
262
166
  justifyContent: "justify-center",
263
167
  alignItems: "items-center",
264
168
  },
265
169
  },
266
- {
267
- description: "Minimalist hero with neutral tones and subtle effects",
268
- type: "hero",
269
- props: {
270
- content: "Simplicity Perfected",
271
- tagline: "Clean design solutions for modern businesses",
272
- padding: "8rem",
273
- colorPreset: {
274
- color: "neutral-100",
275
- },
276
- shadow: "shadow-sm",
277
- border: {
278
- width: "border",
279
- color: "border-neutral-300",
280
- },
281
- rounding: "rounded-md",
282
- },
283
- },
284
- {
285
- description: "Inverted dark hero using neutral-800 background and left alignment",
286
- type: "hero",
287
- props: {
288
- content: "Experience Powerful Automation",
289
- tagline: "Scale operations with intelligent workflows",
290
- padding: "5rem",
291
- colorPreset: { color: "neutral-800" },
292
- justifyContent: "justify-start",
293
- alignItems: "items-start",
294
- textShadow: "text-shadow-sm",
295
- },
296
- },
297
- {
298
- description: "Compact hero without tagline (no colorPreset to inherit parent)",
299
- type: "hero",
300
- props: {
301
- content: "Documentation",
302
- padding: "2rem",
303
- justifyContent: "justify-start",
304
- alignItems: "items-start",
305
- },
306
- },
307
170
  {
308
171
  description: "Responsive hero with large desktop padding and reduced mobile padding",
309
172
  type: "hero",
310
173
  props: {
311
174
  content: "All-In-One Platform",
312
- tagline: "Design • Launch • Grow",
175
+ tagline: "<p style='text-align:center'>Design • <i>Launch</i> • Grow</p>",
313
176
  padding: "8rem",
314
- colorPreset: { color: "primary-gradient-500", gradientDirection: "bg-gradient-to-br" },
315
177
  },
316
178
  mobileProps: {
317
- content: "All-In-One Platform",
318
179
  padding: "3rem",
319
180
  },
320
181
  },
321
182
  {
322
- description: "Hero using dynamic product dataset with gradient emphasis",
183
+ description: "Hero using dynamic product dataset with light text shadow for contrast",
323
184
  type: "hero",
324
185
  props: {
325
186
  content: "Introducing {{product.name}}",
326
- tagline: "{{product.shortTagline}}",
187
+ tagline: "<p style='text-align:center'>{{product.shortTagline}}</p>",
327
188
  padding: "5rem",
328
- colorPreset: { color: "accent-gradient-400", gradientDirection: "bg-gradient-to-r" },
329
- textShadow: "text-shadow-md",
189
+ textShadow: "text-shadow-sm",
330
190
  },
331
191
  },
332
192
  {
333
- description: "Dynamic company hero using business query data",
193
+ description: "Dynamic company hero using business query data; no tagline",
334
194
  type: "hero",
335
195
  props: {
336
196
  content: "Welcome to {{company.name}}",
337
- tagline: "{{company.tagline}} - Serving {{company.location}} since {{company.foundedYear}}",
338
197
  padding: "4rem",
339
- colorPreset: {
340
- color: "primary-500",
341
- },
342
198
  },
343
199
  },
344
200
  {
@@ -347,12 +203,8 @@ export const examples: BrickExample<Manifest>[] = [
347
203
  props: {
348
204
  content: "Meet {{employee.fullName}}",
349
205
  tagline:
350
- "{{employee.position}} at {{employee.department}} - {{employee.yearsExperience}} years of experience",
206
+ "<p style='text-align:center'>{{employee.position}} at {{employee.department}} - {{employee.yearsExperience}} years of experience</p>",
351
207
  padding: "3rem",
352
- colorPreset: {
353
- color: "secondary-400",
354
- gradientDirection: "bg-gradient-to-r",
355
- },
356
208
  },
357
209
  },
358
210
  {
@@ -360,88 +212,31 @@ export const examples: BrickExample<Manifest>[] = [
360
212
  type: "hero",
361
213
  props: {
362
214
  content: "Introducing {{product.name}}",
363
- tagline: "{{product.description}} - Starting at ${{product.price}}",
215
+ tagline: "<p style='text-align:center'>{{product.description}} - Starting at ${{product.price}}</p>",
364
216
  padding: "5rem",
365
- colorPreset: {
366
- color: "accent-600",
367
- },
368
- shadow: "shadow-lg",
369
- rounding: "rounded-xl",
370
217
  },
371
218
  },
372
219
  {
373
- description: "Dynamic event announcement using event query",
220
+ description: "Dynamic event announcement using 'allEvents' query, text shadow for contrast",
374
221
  type: "hero",
375
222
  props: {
376
- content: "{{event.title}}",
377
- tagline: "Join us on {{event.date}} at {{event.venue}} - {{event.city}}",
223
+ content: "{{allEvents.title}}",
224
+ tagline:
225
+ "<p style='text-align:center'>Join us on {{allEvents.date}} at {{allEvents.venue}} - {{allEvents.city}}</p>",
378
226
  padding: "4rem",
379
- colorPreset: {
380
- color: "primary-400",
381
- gradientDirection: "bg-gradient-to-br",
382
- },
383
227
  textShadow: "text-shadow-md",
384
228
  },
385
229
  },
386
230
  {
387
- description: "Dynamic blog post hero using article query",
231
+ description:
232
+ "Dynamic blog post hero using article query, alignment to left-center to be able to arrange a brick on its right",
388
233
  type: "hero",
389
234
  props: {
390
235
  content: "{{article.title}}",
391
- tagline: "By {{article.author}} • Published {{article.publishDate}} • {{article.readTime}} min read",
236
+ tagline:
237
+ "<p style='text-align:center'>By {{article.author}} • Published {{article.publishDate}} • {{article.readTime}} min read</p>",
392
238
  padding: "3rem",
393
- colorPreset: {
394
- color: "neutral-700",
395
- },
396
239
  justifyContent: "justify-start",
397
- alignItems: "items-start",
398
- },
399
- },
400
- {
401
- description: "Dynamic service promotion using service query",
402
- type: "hero",
403
- props: {
404
- content: "{{service.name}}",
405
- tagline: "{{service.description}} - {{service.duration}} • Starting at ${{service.price}}",
406
- padding: "6rem",
407
- colorPreset: {
408
- color: "secondary-500",
409
- gradientDirection: "bg-gradient-to-tl",
410
- },
411
- border: {
412
- width: "border-2",
413
- color: "border-secondary-300",
414
- },
415
- },
416
- },
417
- {
418
- description: "Dynamic property showcase using property query",
419
- type: "hero",
420
- props: {
421
- content: "{{property.address}}",
422
- tagline:
423
- "${{property.price}} • {{property.bedrooms}} bed, {{property.bathrooms}} bath • {{property.squareFootage}} sq ft",
424
- padding: "4rem",
425
- colorPreset: {
426
- color: "accent-500",
427
- },
428
- rounding: "rounded-lg",
429
- shadow: "shadow-md",
430
- },
431
- },
432
- {
433
- description: "Dynamic course announcement using course query",
434
- type: "hero",
435
- props: {
436
- content: "{{course.title}}",
437
- tagline:
438
- "Learn {{course.subject}} with {{course.instructor}} • {{course.duration}} • {{course.skillLevel}} level",
439
- padding: "5rem",
440
- colorPreset: {
441
- color: "primary-600",
442
- },
443
- textShadow: "text-shadow-lg",
444
- justifyContent: "justify-center",
445
240
  alignItems: "items-center",
446
241
  },
447
242
  },
@@ -5,6 +5,7 @@ import { BsCodeSquare } from "react-icons/bs";
5
5
 
6
6
  import { Type } from "@sinclair/typebox";
7
7
  import type { BrickExample } from "./_types";
8
+ import { grow } from "../props/grow";
8
9
 
9
10
  export const manifest = defineBrickManifest({
10
11
  type: "html",
@@ -31,6 +32,11 @@ export const manifest = defineBrickManifest({
31
32
  category: "content",
32
33
  },
33
34
  }),
35
+ grow: Type.Optional(
36
+ grow({
37
+ default: true,
38
+ }),
39
+ ),
34
40
  }),
35
41
  });
36
42
 
@@ -17,10 +17,8 @@ export const manifest = defineBrickManifest({
17
17
 
18
18
  WHEN TO USE:
19
19
  - Navigation elements (menu, close, arrow buttons)
20
- - Social media links (Facebook, Twitter, Instagram, LinkedIn)
21
20
  - Contact information (email, phone, location markers)
22
21
  - User interface actions (search, shopping cart, download)
23
- - Status indicators (success, warning, error, info)
24
22
  - Content enhancement (stars, hearts, thumbs up)
25
23
  - Feature highlights (checkmarks, shields, awards)
26
24
 
@@ -30,14 +28,11 @@ ICON SELECTION:
30
28
 
31
29
  SIZING GUIDELINES:
32
30
  - size: "1em" for inline text icons, "1.5em" for buttons, "2em" for headers
33
- - Common sizes: "16px", "20px", "24px", "32px" for pixel precision
34
31
  - Use "em" units to scale with text, "px" for fixed sizes
35
32
  - Large decorative icons: "3em", "4em", or "48px", "64px"
36
33
 
37
34
  COLOR OPTIONS:
38
35
  - color: "currentColor" inherits text color (default)
39
- - Hex colors: "#1877f2" (Facebook blue), "#ff0000" (red), "#10b981" (green)
40
- - Use brand colors for social media icons
41
36
  - Match color scheme: warnings (orange/yellow), errors (red), success (green)
42
37
 
43
38
  INTERACTIVE ICONS:
@@ -45,7 +40,7 @@ INTERACTIVE ICONS:
45
40
  - External links: "https://facebook.com/yourpage"
46
41
  - Email links: "mailto:contact@example.com"
47
42
  - Phone links: "tel:+1234567890"
48
- - Internal pages: "/contact", "/about"
43
+ - For internal pages, use page IDs: "page_12345"
49
44
 
50
45
  DYNAMIC CONTENT:
51
46
  - Use template variables: icon: "{{ service.iconName }}"
@@ -257,87 +252,4 @@ export const examples: BrickExample<Manifest>[] = [
257
252
  color: "#3b82f6",
258
253
  },
259
254
  },
260
-
261
- // ACTION ICONS
262
- {
263
- description: "Download icon with link - File downloads",
264
- type: "icon",
265
- props: {
266
- icon: "mdi:download",
267
- size: "1.4em",
268
- color: "#8b5cf6",
269
- link: "/files/brochure.pdf",
270
- },
271
- },
272
- {
273
- description: "Share icon - Content sharing functionality",
274
- type: "icon",
275
- props: {
276
- icon: "mdi:share-variant",
277
- size: "1.2em",
278
- color: "#6b7280",
279
- },
280
- },
281
- {
282
- description: "Print icon - Document printing",
283
- type: "icon",
284
- props: {
285
- icon: "mdi:printer",
286
- size: "1.3em",
287
- color: "#374151",
288
- },
289
- },
290
-
291
- // LARGE DECORATIVE ICONS
292
- {
293
- description: "Large security shield icon - Trust and safety messaging",
294
- type: "icon",
295
- props: {
296
- icon: "mdi:shield-check",
297
- size: "3em",
298
- color: "#10b981",
299
- },
300
- },
301
- {
302
- description: "Large rocket icon - Innovation and growth themes",
303
- type: "icon",
304
- props: {
305
- icon: "mdi:rocket",
306
- size: "2.5em",
307
- color: "#f59e0b",
308
- },
309
- },
310
-
311
- // DYNAMIC CONTENT EXAMPLES
312
- {
313
- description: "Dynamic service icon using template variables - Data-driven icons",
314
- type: "icon",
315
- props: {
316
- icon: "{{service.iconName}}",
317
- size: "2em",
318
- color: "{{service.brandColor}}",
319
- link: "/services/{{service.slug}}",
320
- },
321
- },
322
- {
323
- description: "Dynamic social media icon with loop - Multiple social platforms",
324
- type: "icon",
325
- props: {
326
- icon: "{{socialLinks.iconName}}",
327
- size: "1.6em",
328
- color: "{{socialLinks.brandColor}}",
329
- link: "{{socialLinks.url}}",
330
- loop: { over: "socialLinks" },
331
- },
332
- },
333
- {
334
- description: "Team member contact icon - Dynamic contact information",
335
- type: "icon",
336
- props: {
337
- icon: "mdi:email",
338
- size: "1.2em",
339
- color: "#4f46e5",
340
- link: "mailto:{{teamMember.email}}",
341
- },
342
- },
343
255
  ];
@@ -21,10 +21,6 @@ Display a single image with optional framing (padding, rounding, border, shadow,
21
21
  REQUIRED
22
22
  • 'image.src' and 'image.alt' (alt must be meaningful, not empty; may interpolate page queries fields).
23
23
 
24
- COLOR & BACKGROUND
25
- • colorPreset is optional – use when you need a frame or tone behind the image (neutral / accent / primary / secondary / base or gradient variants). Omit to keep a transparent/inherited background.
26
- • Only use gradientDirection when the preset is a gradient token (e.g. primary-gradient-400).
27
-
28
24
  STYLING
29
25
  • padding should be a single css length value (like '1rem' or '0.75rem').
30
26
  • rounding defaults to a modest radius; override for circular avatars (rounded-full) or strong accent (rounded-xl).
@@ -8,6 +8,7 @@ import { border, rounding } from "../props/border";
8
8
  import { loop } from "../props/dynamic";
9
9
  import { cssLength } from "../props/css-length";
10
10
  import type { BrickExample } from "./_types";
11
+ import { grow } from "../props/grow";
11
12
 
12
13
  export const manifest = defineBrickManifest({
13
14
  type: "images-gallery",
@@ -104,6 +105,13 @@ export const manifest = defineBrickManifest({
104
105
  ),
105
106
  rounding: rounding(),
106
107
  border: Type.Optional(border()),
108
+
109
+ // Override grow to default to true
110
+ grow: Type.Optional(
111
+ grow({
112
+ default: true,
113
+ }),
114
+ ),
107
115
  }),
108
116
  });
109
117