@avocadostudio-ai/blocks 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/dist/block-error-boundary.d.ts +18 -0
- package/dist/block-error-boundary.js +36 -0
- package/dist/blocks/_base.css +108 -0
- package/dist/blocks/_layout.css +47 -0
- package/dist/blocks/_shared.d.ts +24 -0
- package/dist/blocks/_shared.js +153 -0
- package/dist/blocks/_tokens.css +127 -0
- package/dist/blocks/banner/renderer.d.ts +2 -0
- package/dist/blocks/banner/renderer.js +21 -0
- package/dist/blocks/banner/styles.css +72 -0
- package/dist/blocks/block-image.d.ts +14 -0
- package/dist/blocks/block-image.js +10 -0
- package/dist/blocks/block-types.d.ts +2 -0
- package/dist/blocks/block-types.js +22 -0
- package/dist/blocks/card/renderer.d.ts +1 -0
- package/dist/blocks/card/renderer.js +11 -0
- package/dist/blocks/card/styles.css +94 -0
- package/dist/blocks/card-grid/renderer.d.ts +1 -0
- package/dist/blocks/card-grid/renderer.js +17 -0
- package/dist/blocks/card-grid/styles.css +38 -0
- package/dist/blocks/carousel/init.d.ts +8 -0
- package/dist/blocks/carousel/init.js +35 -0
- package/dist/blocks/carousel/renderer.d.ts +2 -0
- package/dist/blocks/carousel/renderer.js +19 -0
- package/dist/blocks/carousel/styles.css +136 -0
- package/dist/blocks/cta/renderer.d.ts +1 -0
- package/dist/blocks/cta/renderer.js +7 -0
- package/dist/blocks/cta/styles.css +111 -0
- package/dist/blocks/embed/renderer.d.ts +2 -0
- package/dist/blocks/embed/renderer.js +16 -0
- package/dist/blocks/embed/styles.css +58 -0
- package/dist/blocks/faq-accordion/renderer.d.ts +1 -0
- package/dist/blocks/faq-accordion/renderer.js +11 -0
- package/dist/blocks/faq-accordion/styles.css +68 -0
- package/dist/blocks/feature-grid/renderer.d.ts +1 -0
- package/dist/blocks/feature-grid/renderer.js +12 -0
- package/dist/blocks/feature-grid/styles.css +62 -0
- package/dist/blocks/footer/renderer.d.ts +1 -0
- package/dist/blocks/footer/renderer.js +19 -0
- package/dist/blocks/footer/styles.css +64 -0
- package/dist/blocks/gallery/renderer.d.ts +2 -0
- package/dist/blocks/gallery/renderer.js +21 -0
- package/dist/blocks/gallery/styles.css +59 -0
- package/dist/blocks/hero/renderer.d.ts +1 -0
- package/dist/blocks/hero/renderer.js +20 -0
- package/dist/blocks/hero/styles.css +137 -0
- package/dist/blocks/index.d.ts +5 -0
- package/dist/blocks/index.js +47 -0
- package/dist/blocks/quote/renderer.d.ts +2 -0
- package/dist/blocks/quote/renderer.js +9 -0
- package/dist/blocks/quote/styles.css +97 -0
- package/dist/blocks/rich-text/renderer.d.ts +1 -0
- package/dist/blocks/rich-text/renderer.js +15 -0
- package/dist/blocks/rich-text/styles.css +64 -0
- package/dist/blocks/site-header/renderer.d.ts +1 -0
- package/dist/blocks/site-header/renderer.js +64 -0
- package/dist/blocks/site-header/styles.css +345 -0
- package/dist/blocks/stats/renderer.d.ts +1 -0
- package/dist/blocks/stats/renderer.js +13 -0
- package/dist/blocks/stats/styles.css +64 -0
- package/dist/blocks/styles.css +23 -0
- package/dist/blocks/table/renderer.d.ts +2 -0
- package/dist/blocks/table/renderer.js +14 -0
- package/dist/blocks/table/styles.css +87 -0
- package/dist/blocks/tabs/init.d.ts +5 -0
- package/dist/blocks/tabs/init.js +38 -0
- package/dist/blocks/tabs/renderer.d.ts +2 -0
- package/dist/blocks/tabs/renderer.js +30 -0
- package/dist/blocks/tabs/styles.css +147 -0
- package/dist/blocks/testimonials/renderer.d.ts +1 -0
- package/dist/blocks/testimonials/renderer.js +15 -0
- package/dist/blocks/testimonials/styles.css +92 -0
- package/dist/blocks/two-column/renderer.d.ts +1 -0
- package/dist/blocks/two-column/renderer.js +41 -0
- package/dist/blocks/two-column/styles.css +83 -0
- package/dist/blocks/video/renderer.d.ts +2 -0
- package/dist/blocks/video/renderer.js +52 -0
- package/dist/blocks/video/styles.css +84 -0
- package/dist/blocks-hydrator.d.ts +5 -0
- package/dist/blocks-hydrator.js +15 -0
- package/dist/catalogue.d.ts +1 -0
- package/dist/catalogue.js +741 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +5 -0
- package/dist/renderer.d.ts +12 -0
- package/dist/renderer.js +35 -0
- package/package.json +54 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SharedBlockRenderer, registerCustomRenderer, hasRenderer, getCustomRenderer } from "./renderer.tsx";
|
|
2
|
+
export type { BlockRenderer } from "./renderer.tsx";
|
|
3
|
+
export { BlockCatalogue } from "./catalogue.tsx";
|
|
4
|
+
export { BlocksHydrator } from "./blocks-hydrator.tsx";
|
|
5
|
+
export { BlockErrorBoundary } from "./block-error-boundary.tsx";
|
|
6
|
+
export { rendererTypes } from "./blocks/index.ts";
|
|
7
|
+
export type { BlockImageProps } from "./blocks/block-image.tsx";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { SharedBlockRenderer, registerCustomRenderer, hasRenderer, getCustomRenderer } from "./renderer.js";
|
|
2
|
+
export { BlockCatalogue } from "./catalogue.js";
|
|
3
|
+
export { BlocksHydrator } from "./blocks-hydrator.js";
|
|
4
|
+
export { BlockErrorBoundary } from "./block-error-boundary.js";
|
|
5
|
+
export { rendererTypes } from "./blocks/index.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { JSX } from "react";
|
|
2
|
+
import type { BlockInstance } from "@avocadostudio-ai/shared";
|
|
3
|
+
export type BlockRenderer = (props: Record<string, unknown>) => JSX.Element | null;
|
|
4
|
+
/** Register a custom block renderer (for site-specific blocks not in the standard library). */
|
|
5
|
+
export declare function registerCustomRenderer(blockType: string, renderer: BlockRenderer): void;
|
|
6
|
+
/** Check if a block type has a renderer (standard or custom). */
|
|
7
|
+
export declare function hasRenderer(blockType: string): boolean;
|
|
8
|
+
/** Get a custom renderer by block type (for server-side resolution before client boundary). */
|
|
9
|
+
export declare function getCustomRenderer(blockType: string): BlockRenderer | undefined;
|
|
10
|
+
export declare function SharedBlockRenderer({ block }: {
|
|
11
|
+
block: BlockInstance;
|
|
12
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
package/dist/renderer.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { isRendererBlockType, renderers } from "./blocks/index.js";
|
|
3
|
+
import { normalizeSoftHyphenEntities } from "./blocks/_shared.js";
|
|
4
|
+
// Custom renderers registered by site-specific blocks (e.g. migration-generated blocks).
|
|
5
|
+
// Use globalThis to ensure a single Map instance survives Next.js webpack module duplication
|
|
6
|
+
// across RSC / SSR / client layers — without this, registerCustomRenderer and getCustomRenderer
|
|
7
|
+
// may reference different Map copies and custom blocks render as empty.
|
|
8
|
+
const GLOBAL_KEY = "__ai_site_editor_custom_renderers__";
|
|
9
|
+
const customRenderers = globalThis[GLOBAL_KEY] ??
|
|
10
|
+
(globalThis[GLOBAL_KEY] = new Map());
|
|
11
|
+
/** Register a custom block renderer (for site-specific blocks not in the standard library). */
|
|
12
|
+
export function registerCustomRenderer(blockType, renderer) {
|
|
13
|
+
customRenderers.set(blockType, renderer);
|
|
14
|
+
}
|
|
15
|
+
/** Check if a block type has a renderer (standard or custom). */
|
|
16
|
+
export function hasRenderer(blockType) {
|
|
17
|
+
return isRendererBlockType(blockType) || customRenderers.has(blockType);
|
|
18
|
+
}
|
|
19
|
+
/** Get a custom renderer by block type (for server-side resolution before client boundary). */
|
|
20
|
+
export function getCustomRenderer(blockType) {
|
|
21
|
+
return customRenderers.get(blockType);
|
|
22
|
+
}
|
|
23
|
+
export function SharedBlockRenderer({ block }) {
|
|
24
|
+
const props = normalizeSoftHyphenEntities(block.props);
|
|
25
|
+
// Try standard renderer first
|
|
26
|
+
if (isRendererBlockType(block.type)) {
|
|
27
|
+
const Renderer = renderers[block.type];
|
|
28
|
+
return _jsx(Renderer, { ...props });
|
|
29
|
+
}
|
|
30
|
+
// Fall back to custom renderer
|
|
31
|
+
const Custom = customRenderers.get(block.type);
|
|
32
|
+
if (Custom)
|
|
33
|
+
return _jsx(Custom, { ...props });
|
|
34
|
+
return null;
|
|
35
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@avocadostudio-ai/blocks",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
"./package.json": "./package.json",
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./styles.css": "./dist/blocks/styles.css"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/avocadostudio-ai/avocado.git",
|
|
18
|
+
"directory": "packages/blocks"
|
|
19
|
+
},
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"registry": "https://registry.npmjs.org",
|
|
22
|
+
"access": "public"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist"
|
|
26
|
+
],
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@avocadostudio-ai/shared": "0.1.0"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"next": ">=14.0.0",
|
|
32
|
+
"react": ">=19.0.0",
|
|
33
|
+
"react-dom": ">=19.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/react": "^19.0.10",
|
|
37
|
+
"@types/react-dom": "^19.0.10",
|
|
38
|
+
"next": "^15.5.15",
|
|
39
|
+
"tsx": "^4.21.0",
|
|
40
|
+
"typescript": "^5.7.3"
|
|
41
|
+
},
|
|
42
|
+
"description": "Built-in React block renderers and block catalogue for Avocado Studio",
|
|
43
|
+
"license": "Apache-2.0",
|
|
44
|
+
"homepage": "https://github.com/avocadostudio-ai/avocado/tree/main/packages/blocks#readme",
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/avocadostudio-ai/avocado/issues"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"build": "tsc -p tsconfig.build.json && node ./scripts/copy-css.mjs",
|
|
50
|
+
"test": "NODE_ENV=test tsx --test src/blocks/*/renderer.test.ts src/blocks/*.test.ts",
|
|
51
|
+
"test:unit": "NODE_ENV=test tsx --test src/blocks/*/renderer.test.ts src/blocks/*.test.ts",
|
|
52
|
+
"typecheck": "tsc --noEmit"
|
|
53
|
+
}
|
|
54
|
+
}
|