@gradial/aci 0.1.20-preview.3 → 0.1.20

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 (224) hide show
  1. package/README.md +48 -108
  2. package/bin/{aci → aci-darwin-arm64} +0 -0
  3. package/bin/aci.js +99 -6
  4. package/dist/assets/index.d.ts +3 -3
  5. package/dist/assets/index.js +3 -3
  6. package/dist/astro/index.d.ts +12 -3
  7. package/dist/astro/index.js +20 -5
  8. package/dist/content/assets.d.ts +17 -0
  9. package/dist/content/assets.js +65 -0
  10. package/dist/content/index.d.ts +1 -0
  11. package/dist/content/index.js +1 -0
  12. package/dist/define-component.d.ts +1 -2
  13. package/dist/define-component.js +73 -5
  14. package/dist/dev/content-watch.d.ts +37 -0
  15. package/dist/dev/content-watch.js +154 -0
  16. package/dist/dev/index.d.ts +24 -43
  17. package/dist/dev/index.js +4 -169
  18. package/dist/index.d.ts +14 -6
  19. package/dist/index.js +8 -9
  20. package/dist/next/asset-route.js +2 -2
  21. package/dist/next/config.d.ts +2 -2
  22. package/dist/next/config.js +5 -5
  23. package/dist/next/content-watch.js +6 -1
  24. package/dist/next/index.d.ts +2 -2
  25. package/dist/next/index.js +2 -2
  26. package/dist/next/middleware.d.ts +2 -2
  27. package/dist/next/middleware.js +6 -6
  28. package/dist/next/page.d.ts +1 -1
  29. package/dist/next/page.js +14 -12
  30. package/dist/next/render.d.ts +3 -3
  31. package/dist/next/render.js +11 -9
  32. package/dist/next/server.d.ts +12 -12
  33. package/dist/next/server.js +1 -1
  34. package/dist/react/Media.d.ts +24 -0
  35. package/dist/react/Media.js +30 -0
  36. package/dist/react/Picture.d.ts +12 -0
  37. package/dist/react/Picture.js +11 -0
  38. package/dist/react/VideoPlayer.d.ts +13 -0
  39. package/dist/react/{GradialVideoPlayer.js → VideoPlayer.js} +6 -5
  40. package/dist/react/index.d.ts +333 -3
  41. package/dist/react/index.js +89 -3
  42. package/dist/registry.d.ts +2 -2
  43. package/dist/registry.js +3 -3
  44. package/dist/types/block-ref.d.ts +26 -0
  45. package/dist/types/block-ref.js +28 -0
  46. package/dist/types/component.d.ts +36 -32
  47. package/dist/types/config.d.ts +1 -1
  48. package/dist/types/image.d.ts +33 -20
  49. package/dist/types/image.js +42 -50
  50. package/dist/types/index.d.ts +1 -0
  51. package/dist/types/index.js +1 -0
  52. package/dist/types/link.d.ts +38 -0
  53. package/dist/types/link.js +58 -0
  54. package/dist/types/media.d.ts +16 -35
  55. package/dist/types/media.js +15 -84
  56. package/dist/types/renderer.d.ts +1 -1
  57. package/dist/types/rich-text.d.ts +40 -0
  58. package/dist/types/rich-text.js +39 -0
  59. package/dist/types/video.d.ts +7 -13
  60. package/dist/types/video.js +3 -3
  61. package/package.json +28 -76
  62. package/src/cli/compile-registry.mjs +120 -63
  63. package/src/cli/validate-content.mjs +38 -75
  64. package/src/types/image.ts +79 -60
  65. package/templates/astro/template/.aci.yaml +27 -0
  66. package/templates/astro/template/.storybook/main.ts +79 -0
  67. package/templates/astro/template/.storybook/manager.ts +6 -0
  68. package/templates/astro/template/.storybook/preview.ts +33 -0
  69. package/templates/astro/template/astro.config.mjs +37 -0
  70. package/templates/astro/template/package.json.tmpl +41 -0
  71. package/templates/astro/template/src/cms/contracts/layouts/index.ts +18 -0
  72. package/templates/astro/template/src/cms/registry.ts +28 -0
  73. package/templates/astro/template/src/components/chrome/Footer.astro +107 -0
  74. package/templates/astro/template/src/components/chrome/Header.astro +94 -0
  75. package/templates/astro/template/src/components/elements/AtomicBlock.astro +15 -0
  76. package/templates/astro/template/src/components/elements/AtomicBlocks.astro +16 -0
  77. package/templates/astro/template/src/components/elements/Button.astro +51 -0
  78. package/templates/astro/template/src/components/elements/ButtonBlock.astro +25 -0
  79. package/templates/astro/template/src/components/elements/Container.astro +11 -0
  80. package/templates/astro/template/src/components/elements/Icon.astro +31 -0
  81. package/templates/astro/template/src/components/elements/Logo.astro +29 -0
  82. package/templates/astro/template/src/components/elements/RemoteImage.astro +41 -0
  83. package/templates/astro/template/src/components/sections/ContainerSection.astro +32 -0
  84. package/templates/astro/template/src/components/sections/FeatureCard.astro +23 -0
  85. package/templates/astro/template/src/components/sections/FeatureGrid.astro +35 -0
  86. package/templates/astro/template/src/components/sections/HomeHero.astro +51 -0
  87. package/templates/astro/template/src/components/sections/StatsBar.astro +33 -0
  88. package/templates/astro/template/src/design-system/styles.css +399 -0
  89. package/templates/astro/template/src/design-system/tokens/colors.css +60 -0
  90. package/templates/astro/template/src/design-system/tokens/components.css +69 -0
  91. package/templates/astro/template/src/design-system/tokens/index.css +6 -0
  92. package/templates/astro/template/src/design-system/tokens/radii.css +5 -0
  93. package/templates/astro/template/src/design-system/tokens/shadows.css +5 -0
  94. package/templates/astro/template/src/design-system/tokens/spacing.css +13 -0
  95. package/templates/astro/template/src/design-system/tokens/typography.css +24 -0
  96. package/templates/astro/template/src/env.d.ts +1 -0
  97. package/templates/astro/template/src/fixtures/atomicBlocks.ts +33 -0
  98. package/templates/astro/template/src/fixtures/composition.ts +31 -0
  99. package/templates/astro/template/src/fixtures/index.ts +17 -0
  100. package/templates/astro/template/src/fixtures/sections.ts +39 -0
  101. package/templates/astro/template/src/layouts/SiteLayout.astro +30 -0
  102. package/templates/astro/template/src/pages/[...slug].astro +61 -0
  103. package/templates/astro/template/src/render/RenderPage.astro +66 -0
  104. package/templates/astro/template/src/stories/CompositionStoryFrame.astro +15 -0
  105. package/templates/astro/template/src/stories/HomeHero.stories.ts +24 -0
  106. package/templates/astro/template/src/stories/SectionStoryFrame.astro +16 -0
  107. package/templates/astro/template/src/stories/StoryDocFrame.astro +31 -0
  108. package/templates/astro/template/tsconfig.json +11 -0
  109. package/templates/common/.agents/AGENTS.md +37 -0
  110. package/templates/common/.agents/skills/aci/SKILL.md +162 -0
  111. package/templates/common/.agents/skills/authoring/SKILL.md +590 -0
  112. package/templates/common/.agents/skills/authoring/references/block-registry.md +151 -0
  113. package/templates/common/.agents/skills/authoring/references/contracts.md +153 -0
  114. package/templates/common/.agents/skills/authoring/references/design-system.md +171 -0
  115. package/templates/common/.agents/skills/authoring/references/image-assets.md +73 -0
  116. package/templates/common/.agents/skills/authoring/references/repo-structure.md +157 -0
  117. package/templates/common/.agents/skills/migration/SKILL.md +160 -0
  118. package/templates/common/.agents/skills/migration/references/analyzing-source.md +215 -0
  119. package/templates/common/.agents/skills/migration/references/component-migration.md +200 -0
  120. package/templates/common/.agents/skills/migration/references/selector-map.md +31 -0
  121. package/templates/common/.content/.gradial-dam/blobs/sha256/7f/bf/7fbfc7fe230ff12688c496f660119e41d9725c4504d82e310c15665c73c09292 +0 -0
  122. package/templates/common/.content/.gradial-dam/blobs/sha256/a0/f5/a0f506689de9b15a7055f70103a3f02cd3ba105771ae2de6754df2ede1210d3a +0 -0
  123. package/templates/common/.content/.gradial-dam/blobs/sha256/dd/b7/ddb7e9642be08317bcd4b2bd26b58ba8d0d34dd7239e03e684a4f3634fa3845b +0 -0
  124. package/templates/common/.content/.gradial-dam/blobs/sha256/fb/32/fb3260e8286ea8231ea1c77b9c0be92d6edd9026565731eb14cfdcfd6b1b75b3 +0 -0
  125. package/templates/common/.content/config/site.json +192 -0
  126. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/asset.json +9 -0
  127. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/editorial.json +14 -0
  128. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/governance.json +23 -0
  129. package/templates/common/.content/dam/folders/seed/ast_site_about_hero/versions/v0001.json +37 -0
  130. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/asset.json +9 -0
  131. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/editorial.json +14 -0
  132. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/governance.json +23 -0
  133. package/templates/common/.content/dam/folders/seed/ast_site_home_hero/versions/v0001.json +37 -0
  134. package/templates/common/.content/fragments/navbar/_index.json +25 -0
  135. package/templates/common/.content/fragments/site-footer/_index.json +62 -0
  136. package/templates/common/.content/pages/about/_index.json +51 -0
  137. package/templates/common/.content/pages/home/_index.json +112 -0
  138. package/templates/common/.content/schemas/site.schema.json +123 -0
  139. package/templates/common/README.md.tmpl +45 -0
  140. package/templates/common/contracts/components/button.contract.ts +19 -0
  141. package/templates/common/contracts/components/container.contract.ts +19 -0
  142. package/templates/common/contracts/components/featureCard.contract.ts +15 -0
  143. package/templates/common/contracts/components/featureGrid.contract.ts +16 -0
  144. package/templates/common/contracts/components/homeHero.contract.ts +36 -0
  145. package/templates/common/contracts/components/index.ts +21 -0
  146. package/templates/common/contracts/components/siteFooter.contract.ts +45 -0
  147. package/templates/common/contracts/components/siteNavigation.contract.ts +30 -0
  148. package/templates/common/contracts/components/statsBar.contract.ts +19 -0
  149. package/templates/common/design-system/styles.css +346 -0
  150. package/templates/common/design-system/tokens/colors.css +110 -0
  151. package/templates/common/design-system/tokens/components.css +86 -0
  152. package/templates/common/design-system/tokens/index.css +6 -0
  153. package/templates/common/design-system/tokens/radii.css +5 -0
  154. package/templates/common/design-system/tokens/shadows.css +9 -0
  155. package/templates/common/design-system/tokens/spacing.css +26 -0
  156. package/templates/common/design-system/tokens/typography.css +32 -0
  157. package/templates/common/eslint-rules/no-raw-tailwind-values.js +127 -0
  158. package/templates/common/public/assets/Dwire-model.png +0 -0
  159. package/templates/common/public/assets/bare-metal-logo.png +0 -0
  160. package/templates/common/public/assets/meridian-logo.svg +8 -0
  161. package/templates/common/public/assets/seattle.avif +0 -0
  162. package/templates/nextjs/template/.aci.yaml +25 -0
  163. package/templates/nextjs/template/.storybook/main.ts +13 -0
  164. package/templates/nextjs/template/.storybook/preview.ts +34 -0
  165. package/templates/nextjs/template/eslint.config.mjs +36 -0
  166. package/templates/nextjs/template/next-env.d.ts +6 -0
  167. package/templates/nextjs/template/next.config.ts +8 -0
  168. package/templates/nextjs/template/package.json.tmpl +46 -0
  169. package/templates/nextjs/template/postcss.config.mjs +7 -0
  170. package/templates/nextjs/template/src/app/[[...slug]]/page.tsx +8 -0
  171. package/templates/nextjs/template/src/app/gradial/assets/[releaseId]/[...path]/route.ts +31 -0
  172. package/templates/nextjs/template/src/app/layout.tsx +29 -0
  173. package/templates/nextjs/template/src/cms/contracts/components/button.contract.ts +19 -0
  174. package/templates/nextjs/template/src/cms/contracts/components/container.contract.ts +20 -0
  175. package/templates/nextjs/template/src/cms/contracts/components/homeHero.contract.ts +36 -0
  176. package/templates/nextjs/template/src/cms/contracts/components/index.ts +15 -0
  177. package/templates/nextjs/template/src/cms/contracts/components/siteFooter.contract.ts +45 -0
  178. package/templates/nextjs/template/src/cms/contracts/components/siteNavigation.contract.ts +30 -0
  179. package/templates/nextjs/template/src/cms/contracts/layouts/index.ts +16 -0
  180. package/templates/nextjs/template/src/cms/registry.ts +28 -0
  181. package/templates/nextjs/template/src/components/chrome/Footer.tsx +86 -0
  182. package/templates/nextjs/template/src/components/chrome/Header.tsx +74 -0
  183. package/templates/nextjs/template/src/components/elements/AtomicBlock.tsx +13 -0
  184. package/templates/nextjs/template/src/components/elements/Button.tsx +40 -0
  185. package/templates/nextjs/template/src/components/elements/ButtonBlock.tsx +18 -0
  186. package/templates/nextjs/template/src/components/elements/Container.tsx +14 -0
  187. package/templates/nextjs/template/src/components/elements/Icon.tsx +29 -0
  188. package/templates/nextjs/template/src/components/elements/Logo.tsx +38 -0
  189. package/templates/nextjs/template/src/components/sections/ContainerSection.tsx +28 -0
  190. package/templates/nextjs/template/src/components/sections/FeatureCard.tsx +25 -0
  191. package/templates/nextjs/template/src/components/sections/FeatureGrid.tsx +36 -0
  192. package/templates/nextjs/template/src/components/sections/HomeHero.tsx +62 -0
  193. package/templates/nextjs/template/src/components/sections/StatsBar.tsx +30 -0
  194. package/templates/nextjs/template/src/middleware.ts +4 -0
  195. package/templates/nextjs/template/src/stories/Button.stories.tsx +38 -0
  196. package/templates/nextjs/template/src/stories/Header.stories.tsx +30 -0
  197. package/templates/nextjs/template/src/stories/HomeHero.stories.tsx +33 -0
  198. package/templates/nextjs/template/tsconfig.json +23 -0
  199. package/templates/nextjs/template/vercel.json +6 -0
  200. package/dist/content/contract.d.ts +0 -83
  201. package/dist/content/contract.js +0 -104
  202. package/dist/content/tailwind-validator.d.ts +0 -6
  203. package/dist/content/tailwind-validator.js +0 -31
  204. package/dist/content/validation.d.ts +0 -108
  205. package/dist/content/validation.js +0 -183
  206. package/dist/react/GradialMedia.d.ts +0 -24
  207. package/dist/react/GradialMedia.js +0 -31
  208. package/dist/react/GradialPicture.d.ts +0 -14
  209. package/dist/react/GradialPicture.js +0 -30
  210. package/dist/react/GradialVideoPlayer.d.ts +0 -13
  211. package/dist/sveltekit/index.d.ts +0 -25
  212. package/dist/sveltekit/index.js +0 -66
  213. package/dist/sveltekit/preview.d.ts +0 -5
  214. package/dist/sveltekit/preview.js +0 -33
  215. package/src/types/component.ts +0 -49
  216. package/src/types/config.ts +0 -37
  217. package/src/types/data.ts +0 -47
  218. package/src/types/index.ts +0 -10
  219. package/src/types/layout.ts +0 -29
  220. package/src/types/media.ts +0 -125
  221. package/src/types/page.ts +0 -47
  222. package/src/types/render-mode.ts +0 -10
  223. package/src/types/renderer.ts +0 -83
  224. package/src/types/video.ts +0 -66
@@ -1,86 +1,17 @@
1
1
  import { z } from 'zod';
2
- import { GradialImageSchema, renderImageHTML } from './image.js';
3
- import { GradialVideoSchema } from './video.js';
4
- // ---------------------------------------------------------------------------
5
- // Zod schema discriminated on $type
6
- // ---------------------------------------------------------------------------
7
- export const GradialAssetSchema = z.discriminatedUnion('$type', [
8
- GradialImageSchema,
9
- GradialVideoSchema,
10
- ]);
11
- // ---------------------------------------------------------------------------
12
- // Type guards
13
- // ---------------------------------------------------------------------------
14
- export function isGradialImage(value) {
15
- return (typeof value === 'object' &&
16
- value !== null &&
17
- value.$type === 'gradial.image');
18
- }
19
- export function isGradialVideo(value) {
20
- return (typeof value === 'object' &&
21
- value !== null &&
22
- value.$type === 'gradial.video');
23
- }
24
- export function isGradialAsset(value) {
25
- return isGradialImage(value) || isGradialVideo(value);
26
- }
27
- // ---------------------------------------------------------------------------
28
- // HTML string renderers (framework-agnostic)
29
- // ---------------------------------------------------------------------------
30
- /**
31
- * Renders a GradialVideo to an HTML string.
32
- * Uses poster.fallback.src for the poster attribute.
33
- * Includes <source> elements for format variants.
34
- */
35
- export function renderVideoHTML(video, attrs = {}) {
36
- const posterSrc = video.poster?.fallback.src;
37
- const attrPairs = [
38
- ...Object.entries(attrs),
39
- ['src', video.sources?.length ? undefined : video.src],
40
- ['poster', posterSrc],
41
- ['width', video.width > 0 ? video.width : undefined],
42
- ['height', video.height > 0 ? video.height : undefined],
43
- ];
44
- const attrString = renderAttrs(attrPairs);
45
- const sources = (video.sources ?? [])
46
- .map((s) => `<source${renderAttrs([['src', s.src], ['type', s.type]])}>`)
47
- .join('');
48
- // If no format variants, src is on the <video> element itself
49
- if (!sources) {
50
- return `<video${attrString}></video>`;
51
- }
52
- return `<video${attrString}>${sources}</video>`;
53
- }
54
- /**
55
- * Renders any GradialAsset to an HTML string.
56
- * Delegates to renderImageHTML or renderVideoHTML based on $type.
57
- */
58
- export function renderAssetHTML(asset, attrs = {}) {
59
- if (asset.$type === 'gradial.image') {
60
- return renderImageHTML(asset, attrs);
61
- }
62
- return renderVideoHTML(asset, attrs);
63
- }
64
- // ---------------------------------------------------------------------------
65
- // Internal helpers
66
- // ---------------------------------------------------------------------------
67
- function renderAttrs(pairs) {
68
- const rendered = pairs
69
- .filter(([, value]) => value !== undefined && value !== null && value !== false)
70
- .map(([name, value]) => value === true
71
- ? escapeName(name)
72
- : `${escapeName(name)}="${escapeAttr(String(value))}"`);
73
- if (!rendered.length)
74
- return '';
75
- return ' ' + rendered.join(' ');
76
- }
77
- function escapeName(name) {
78
- return name.replace(/[^A-Za-z0-9_:-]/g, '');
79
- }
80
- function escapeAttr(value) {
81
- return value
82
- .replace(/&/g, '&amp;')
83
- .replace(/"/g, '&quot;')
84
- .replace(/</g, '&lt;')
85
- .replace(/>/g, '&gt;');
2
+ import { ImageSchema } from './image.js';
3
+ import { VideoSchema } from './video.js';
4
+ /** Zod schema for a resolved asset value. */
5
+ export const AssetSchema = z.union([ImageSchema, VideoSchema]);
6
+ /** Runtime guard: value is a resolved asset. */
7
+ export function isAsset(value) {
8
+ return ImageSchema.safeParse(value).success || VideoSchema.safeParse(value).success;
9
+ }
10
+ /** Runtime guard: value is a resolved image asset. */
11
+ export function isImage(value) {
12
+ return ImageSchema.safeParse(value).success;
13
+ }
14
+ /** Runtime guard: value is a resolved video asset. */
15
+ export function isVideo(value) {
16
+ return VideoSchema.safeParse(value).success;
86
17
  }
@@ -7,7 +7,7 @@ export interface RenderCapabilities {
7
7
  clientIslands: boolean;
8
8
  fragmentRender: boolean;
9
9
  }
10
- export interface GradialRenderer {
10
+ export interface Renderer {
11
11
  renderPage(request: RenderPageRequest): Promise<RenderPageResult>;
12
12
  renderFragment?(request: RenderFragmentRequest): Promise<RenderResult>;
13
13
  renderIsland?(request: RenderIslandRequest): Promise<RenderResult>;
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ export type InlineContent = {
3
+ type: 'text';
4
+ text: string;
5
+ } | {
6
+ type: 'span';
7
+ content: InlineContent[];
8
+ variant?: string;
9
+ } | {
10
+ type: 'strong';
11
+ content: InlineContent[];
12
+ } | {
13
+ type: 'em';
14
+ content: InlineContent[];
15
+ } | {
16
+ type: 'link';
17
+ href: string;
18
+ content: InlineContent[];
19
+ };
20
+ export type Heading = {
21
+ type: 'heading';
22
+ level: 1 | 2 | 3 | 4 | 5 | 6;
23
+ content: InlineContent[];
24
+ variant?: string;
25
+ };
26
+ export type RichTextValue = {
27
+ format: 'html';
28
+ html: string;
29
+ } | {
30
+ format: 'markdown';
31
+ markdown: string;
32
+ };
33
+ export declare const InlineContentSchema: z.ZodType<InlineContent>;
34
+ export declare const HeadingSchema: z.ZodObject<{
35
+ type: z.ZodLiteral<"heading">;
36
+ level: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
37
+ content: z.ZodArray<z.ZodType<InlineContent, unknown, z.core.$ZodTypeInternals<InlineContent, unknown>>>;
38
+ variant: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>;
40
+ export declare const RichTextValueSchema: z.ZodType<RichTextValue>;
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod';
2
+ export const InlineContentSchema = z.lazy(() => z.object({
3
+ type: z.literal('text'),
4
+ text: z.string(),
5
+ }).or(z.object({
6
+ type: z.literal('span'),
7
+ content: z.array(InlineContentSchema),
8
+ variant: z.string().optional(),
9
+ })).or(z.object({
10
+ type: z.literal('strong'),
11
+ content: z.array(InlineContentSchema),
12
+ })).or(z.object({
13
+ type: z.literal('em'),
14
+ content: z.array(InlineContentSchema),
15
+ })).or(z.object({
16
+ type: z.literal('link'),
17
+ href: z.string().min(1),
18
+ content: z.array(InlineContentSchema),
19
+ })));
20
+ export const HeadingSchema = z.object({
21
+ type: z.literal('heading'),
22
+ level: z.union([
23
+ z.literal(1),
24
+ z.literal(2),
25
+ z.literal(3),
26
+ z.literal(4),
27
+ z.literal(5),
28
+ z.literal(6),
29
+ ]),
30
+ content: z.array(InlineContentSchema),
31
+ variant: z.string().optional(),
32
+ });
33
+ export const RichTextValueSchema = z.object({
34
+ format: z.literal('html'),
35
+ html: z.string(),
36
+ }).or(z.object({
37
+ format: z.literal('markdown'),
38
+ markdown: z.string(),
39
+ }));
@@ -1,10 +1,10 @@
1
1
  import { z } from 'zod';
2
- import { type GradialImage } from './image.js';
2
+ import { type Image } from './image.js';
3
3
  export interface VideoSource {
4
4
  src: string;
5
5
  type: string;
6
6
  }
7
- export interface GradialVideo {
7
+ export interface Video {
8
8
  /** Discriminator — always 'gradial.video'. */
9
9
  $type: 'gradial.video';
10
10
  /** DAM asset identifier. */
@@ -22,10 +22,10 @@ export interface GradialVideo {
22
22
  /** Intrinsic height in pixels. */
23
23
  height: number;
24
24
  /**
25
- * Poster frame — a full GradialImage with responsive srcset.
25
+ * Poster frame — a full Image with responsive srcset.
26
26
  * The compiler extracts or generates this from the video asset.
27
27
  */
28
- poster?: GradialImage;
28
+ poster?: Image;
29
29
  /** Format variants (e.g. mp4 + webm). Maps to <video><source> elements. */
30
30
  sources?: VideoSource[];
31
31
  /** Duration in seconds (if known). */
@@ -35,7 +35,7 @@ export declare const VideoSourceSchema: z.ZodObject<{
35
35
  src: z.ZodString;
36
36
  type: z.ZodString;
37
37
  }, z.core.$strip>;
38
- export declare const GradialVideoSchema: z.ZodObject<{
38
+ export declare const VideoSchema: z.ZodObject<{
39
39
  $type: z.ZodLiteral<"gradial.video">;
40
40
  assetId: z.ZodString;
41
41
  versionId: z.ZodString;
@@ -49,18 +49,12 @@ export declare const GradialVideoSchema: z.ZodObject<{
49
49
  assetId: z.ZodString;
50
50
  versionId: z.ZodString;
51
51
  alt: z.ZodString;
52
- fallback: z.ZodObject<{
52
+ sources: z.ZodArray<z.ZodObject<{
53
53
  src: z.ZodString;
54
54
  width: z.ZodNumber;
55
55
  height: z.ZodNumber;
56
56
  type: z.ZodString;
57
- }, z.core.$strip>;
58
- sources: z.ZodDefault<z.ZodNullable<z.ZodArray<z.ZodObject<{
59
- media: z.ZodOptional<z.ZodString>;
60
- type: z.ZodString;
61
- srcset: z.ZodString;
62
- sizes: z.ZodOptional<z.ZodString>;
63
- }, z.core.$strip>>>>;
57
+ }, z.core.$strip>>;
64
58
  }, z.core.$strip>>;
65
59
  sources: z.ZodOptional<z.ZodArray<z.ZodObject<{
66
60
  src: z.ZodString;
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { GradialImageSchema } from './image.js';
2
+ import { ImageSchema } from './image.js';
3
3
  // ---------------------------------------------------------------------------
4
4
  // Zod schema
5
5
  // ---------------------------------------------------------------------------
@@ -7,7 +7,7 @@ export const VideoSourceSchema = z.object({
7
7
  src: z.string().min(1),
8
8
  type: z.string().min(1),
9
9
  });
10
- export const GradialVideoSchema = z.object({
10
+ export const VideoSchema = z.object({
11
11
  $type: z.literal('gradial.video'),
12
12
  assetId: z.string().min(1),
13
13
  versionId: z.string().min(1),
@@ -16,7 +16,7 @@ export const GradialVideoSchema = z.object({
16
16
  type: z.string().min(1),
17
17
  width: z.number().int().nonnegative(),
18
18
  height: z.number().int().nonnegative(),
19
- poster: GradialImageSchema.optional(),
19
+ poster: ImageSchema.optional(),
20
20
  sources: z.array(VideoSourceSchema).optional(),
21
21
  duration: z.number().nonnegative().optional(),
22
22
  });
package/package.json CHANGED
@@ -1,15 +1,18 @@
1
1
  {
2
2
  "name": "@gradial/aci",
3
- "version": "0.1.20-preview.3",
3
+ "version": "0.1.20",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "files": [
8
8
  "dist",
9
9
  "bin/aci.js",
10
- "bin/aci",
10
+ "bin/aci-*",
11
11
  "src/cli/*.mjs",
12
- "src/types/*.ts",
12
+ "src/types/image.ts",
13
+ "templates/common",
14
+ "templates/nextjs",
15
+ "templates/astro",
13
16
  "README.md"
14
17
  ],
15
18
  "bin": {
@@ -23,29 +26,13 @@
23
26
  "types": "./dist/index.d.ts",
24
27
  "import": "./dist/index.js"
25
28
  },
26
- "./compiler": {
27
- "types": "./dist/compiler/index.d.ts",
28
- "import": "./dist/compiler/index.js"
29
- },
30
29
  "./content": {
31
30
  "types": "./dist/content/index.d.ts",
32
31
  "import": "./dist/content/index.js"
33
32
  },
34
- "./content/contract": {
35
- "types": "./dist/content/contract.d.ts",
36
- "import": "./dist/content/contract.js"
37
- },
38
- "./content/cache": {
39
- "types": "./dist/content/cache.d.ts",
40
- "import": "./dist/content/cache.js"
41
- },
42
- "./content/validation": {
43
- "types": "./dist/content/validation.d.ts",
44
- "import": "./dist/content/validation.js"
45
- },
46
- "./content/tailwind-validator": {
47
- "types": "./dist/content/tailwind-validator.d.ts",
48
- "import": "./dist/content/tailwind-validator.js"
33
+ "./compiler": {
34
+ "types": "./dist/compiler/index.d.ts",
35
+ "import": "./dist/compiler/index.js"
49
36
  },
50
37
  "./providers/file": {
51
38
  "types": "./dist/providers/file.d.ts",
@@ -59,51 +46,19 @@
59
46
  "types": "./dist/dev/index.d.ts",
60
47
  "import": "./dist/dev/index.js"
61
48
  },
62
- "./assets": {
63
- "types": "./dist/assets/index.d.ts",
64
- "import": "./dist/assets/index.js"
65
- },
66
- "./runtime": {
67
- "types": "./dist/runtime/page.d.ts",
68
- "import": "./dist/runtime/page.js"
69
- },
70
49
  "./react": {
71
50
  "types": "./dist/react/index.d.ts",
72
51
  "import": "./dist/react/index.js"
73
52
  },
74
- "./astro": {
75
- "types": "./dist/astro/index.d.ts",
76
- "import": "./dist/astro/index.js"
77
- },
78
- "./preview": {
79
- "types": "./dist/preview/core.d.ts",
80
- "import": "./dist/preview/core.js",
81
- "default": "./dist/preview/core.js"
82
- },
83
53
  "./next": {
84
54
  "types": "./dist/next/index.d.ts",
85
55
  "import": "./dist/next/index.js",
86
56
  "default": "./dist/next/index.js"
87
57
  },
88
- "./next/page": {
89
- "types": "./dist/next/page.d.ts",
90
- "import": "./dist/next/page.js",
91
- "default": "./dist/next/page.js"
92
- },
93
- "./next/root-layout": {
94
- "types": "./dist/next/root-layout.d.ts",
95
- "import": "./dist/next/root-layout.js",
96
- "default": "./dist/next/root-layout.js"
97
- },
98
- "./next/render": {
99
- "types": "./dist/next/render.d.ts",
100
- "import": "./dist/next/render.js",
101
- "default": "./dist/next/render.js"
102
- },
103
- "./next/server": {
104
- "types": "./dist/next/server.d.ts",
105
- "import": "./dist/next/server.js",
106
- "default": "./dist/next/server.js"
58
+ "./next/config": {
59
+ "types": "./dist/next/config.d.ts",
60
+ "import": "./dist/next/config.js",
61
+ "default": "./dist/next/config.js"
107
62
  },
108
63
  "./next/middleware": {
109
64
  "types": "./dist/next/middleware.d.ts",
@@ -114,28 +69,22 @@
114
69
  "types": "./dist/next/dev-refresh.d.ts",
115
70
  "import": "./dist/next/dev-refresh.js"
116
71
  },
117
- "./next/asset-route": {
118
- "types": "./dist/next/asset-route.d.ts",
119
- "import": "./dist/next/asset-route.js"
120
- },
121
- "./sveltekit": {
122
- "types": "./dist/sveltekit/index.d.ts",
123
- "import": "./dist/sveltekit/index.js"
124
- },
125
- "./testing": {
126
- "types": "./dist/testing/index.d.ts",
127
- "import": "./dist/testing/index.js"
128
- },
129
- "./cli/compile-registry": "./src/cli/compile-registry.mjs",
130
- "./cli/validate-content": "./src/cli/validate-content.mjs",
131
- "./cli/verify-renderer": "./src/cli/verify-renderer.mjs"
72
+ "./astro": {
73
+ "types": "./dist/astro/index.d.ts",
74
+ "import": "./dist/astro/index.js",
75
+ "default": "./dist/astro/index.js"
76
+ }
132
77
  },
133
78
  "scripts": {
134
- "build": "tsc -p tsconfig.json",
79
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.json",
135
80
  "build:cli": "cd ../.. && ./scripts/build-cli.sh",
136
- "compile-registry": "tsx src/cli/compile-registry.mjs"
81
+ "generate-starters": "cd ../.. && tsx scripts/generate-starters.ts",
82
+ "compile-registry": "tsx src/cli/compile-registry.mjs",
83
+ "prepack": "npm run generate-starters && npm run build && npm run build:cli"
137
84
  },
138
85
  "dependencies": {
86
+ "markdown-it": "^14.1.0",
87
+ "sanitize-html": "^2.13.1",
139
88
  "ws": "^8.18.0"
140
89
  },
141
90
  "peerDependencies": {
@@ -162,13 +111,16 @@
162
111
  "devDependencies": {
163
112
  "@types/node": "^24.10.1",
164
113
  "@types/react": "^19.0.0",
114
+ "@types/markdown-it": "^14.1.2",
115
+ "@types/sanitize-html": "^2.16.0",
165
116
  "@types/ws": "^8.18.0",
166
117
  "@vercel/edge-config": "^1.4.3",
167
118
  "next": "^15.5.6",
168
119
  "react": "^19.0.0",
120
+ "react-dom": "^19.0.0",
169
121
  "tsx": "^4.20.0",
170
122
  "typescript": "^5.9.3",
171
123
  "ws": "^8.18.0",
172
124
  "zod": "^4.0.0"
173
125
  }
174
- }
126
+ }