@airdraft/react-content 0.1.12 → 0.1.13
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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.1.13](https://github.com/aevrHQ/airdraft/compare/react-content@v0.1.12...react-content@v0.1.13) (2026-05-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **auth:** implement server-side silent token refresh and extend refresh token TTL to 30 days ([2418571](https://github.com/aevrHQ/airdraft/commit/2418571ec2aa037995dc9b5eb94fb06f79c949b8))
|
|
11
|
+
* **EntryDetail:** enhance component to support injected props and dynamic field resolution ([a65f19c](https://github.com/aevrHQ/airdraft/commit/a65f19c57c0f85ba6deb5d64b59592a82d614258))
|
|
12
|
+
* **README:** add documentation for @airdraft/content functions and usage examples ([b43ab62](https://github.com/aevrHQ/airdraft/commit/b43ab621da781056a32de816547d2b1ba7421ed3))
|
|
13
|
+
|
|
5
14
|
### [0.1.12](https://github.com/aevrHQ/airdraft/compare/react-content@v0.1.8...react-content@v0.1.12) (2026-05-23)
|
|
6
15
|
|
|
7
16
|
|
package/README.md
CHANGED
|
@@ -29,16 +29,73 @@ import { ImageField, MediaField, BodyField, DateField, TagList, AuthorByline, Ur
|
|
|
29
29
|
|
|
30
30
|
## Schema-Driven Compounds
|
|
31
31
|
|
|
32
|
-
Generic components that render any entry from its schema without hard-coding field names.
|
|
32
|
+
Generic components that render any entry from its collection schema without hard-coding field names.
|
|
33
|
+
|
|
34
|
+
### Auto-layout mode
|
|
35
|
+
|
|
36
|
+
Pass `entry` and `collection` — the components discover field names from the schema automatically.
|
|
33
37
|
|
|
34
38
|
```tsx
|
|
35
39
|
import { EntryCard, EntryDetail } from '@airdraft/react-content'
|
|
40
|
+
import { asCollectionConfig } from '@airdraft/core'
|
|
41
|
+
import schema from '@/airdraft.schema.json'
|
|
42
|
+
|
|
43
|
+
const postsCollection = asCollectionConfig(schema.collections.posts)
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
<
|
|
45
|
+
// Card: cover → title → excerpt → tags → date
|
|
46
|
+
<EntryCard entry={post} collection={postsCollection} />
|
|
47
|
+
|
|
48
|
+
// Detail: cover → header (title + date + url) → body → tags
|
|
49
|
+
<EntryDetail entry={post} collection={postsCollection} />
|
|
39
50
|
```
|
|
40
51
|
|
|
41
|
-
|
|
52
|
+
### Children injection mode
|
|
53
|
+
|
|
54
|
+
Pass children to take full control of layout. `entry` and `collection` are automatically injected into each sub-component — you don't need to pass them manually.
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
<EntryCard entry={post} collection={postsCollection}>
|
|
58
|
+
<EntryCard.Cover className="aspect-video object-cover" />
|
|
59
|
+
<EntryCard.Title className="text-xl font-bold" />
|
|
60
|
+
<EntryCard.Excerpt className="text-sm text-muted" />
|
|
61
|
+
<EntryCard.Tags />
|
|
62
|
+
<EntryCard.Date />
|
|
63
|
+
</EntryCard>
|
|
64
|
+
|
|
65
|
+
<EntryDetail entry={post} collection={postsCollection}>
|
|
66
|
+
<EntryDetail.Cover />
|
|
67
|
+
<EntryDetail.Header>
|
|
68
|
+
<EntryDetail.Tags />
|
|
69
|
+
{/* custom JSX mixed in freely */}
|
|
70
|
+
<h1 className="text-4xl">{post.data.title as string}</h1>
|
|
71
|
+
<EntryDetail.Link label="View project →" />
|
|
72
|
+
</EntryDetail.Header>
|
|
73
|
+
<EntryDetail.Body className="prose" />
|
|
74
|
+
</EntryDetail>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### `EntryCard` sub-components
|
|
78
|
+
|
|
79
|
+
| Sub-component | Auto-discovers | Explicit props |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| `EntryCard.Cover` | First `image`/`media` field | `field`, `multiple` |
|
|
82
|
+
| `EntryCard.Title` | First of `title`/`name`/`heading`/`label` | `children` |
|
|
83
|
+
| `EntryCard.Excerpt` | First `text`/`rich-text` field | `children` |
|
|
84
|
+
| `EntryCard.Tags` | First `multiselect`/`list` field | `tags` |
|
|
85
|
+
| `EntryCard.Date` | First `date`/`datetime` field | `value` |
|
|
86
|
+
| `EntryCard.Link` | First `url` field | `value`, `label` |
|
|
87
|
+
| `EntryCard.Meta` | — (layout wrapper) | `children` |
|
|
88
|
+
|
|
89
|
+
#### `EntryDetail` sub-components
|
|
90
|
+
|
|
91
|
+
| Sub-component | Auto-discovers | Explicit props |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `EntryDetail.Cover` | First `image`/`media` field | `field`, `multiple` |
|
|
94
|
+
| `EntryDetail.Header` | — (layout wrapper) | `children` |
|
|
95
|
+
| `EntryDetail.Body` | First `rich-text`/`text` field | `value`, `type` |
|
|
96
|
+
| `EntryDetail.Tags` | First `multiselect`/`list` field | `tags` |
|
|
97
|
+
| `EntryDetail.Link` | First `url` field | `value`, `label` |
|
|
98
|
+
| `EntryDetail.Meta` | — (layout wrapper) | `children` |
|
|
42
99
|
|
|
43
100
|
## Blog Recipes
|
|
44
101
|
|
|
@@ -69,6 +126,30 @@ import { AirdraftImage, AirdraftMedia } from '@airdraft/react-content/next'
|
|
|
69
126
|
|
|
70
127
|
Both components accept a `render` prop for fully custom rendering while keeping the resolution logic.
|
|
71
128
|
|
|
129
|
+
## Content Utilities
|
|
130
|
+
|
|
131
|
+
The pure functions that back the field components are available separately in [`@airdraft/content`](../content/README.md) — no React required. Use them in `generateMetadata`, server actions, API routes, or middleware.
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
import {
|
|
135
|
+
resolveMediaUrl, // single media/image field → URL string
|
|
136
|
+
resolveMediaUrls, // media field with multiple:true → string[]
|
|
137
|
+
resolveImageDimensions, // → { width, height } from media sidecar
|
|
138
|
+
parseMarkdown, // Markdown → sanitised HTML string
|
|
139
|
+
parseText, // plain text → string[] (paragraphs)
|
|
140
|
+
resolveRelation, // relation field → display label string
|
|
141
|
+
resolveRelations, // relations field → string[]
|
|
142
|
+
} from '@airdraft/content'
|
|
143
|
+
|
|
144
|
+
// Example: OG image metadata in Next.js
|
|
145
|
+
export async function generateMetadata({ params }) {
|
|
146
|
+
const post = await cms.getEntry('posts', params.slug)
|
|
147
|
+
const url = resolveMediaUrl('cover', post.data)
|
|
148
|
+
const dims = resolveImageDimensions('cover', post.data)
|
|
149
|
+
return { openGraph: { images: [{ url, ...dims }] } }
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
72
153
|
## Changelog
|
|
73
154
|
|
|
74
155
|
See [CHANGELOG.md](./CHANGELOG.md).
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { ReactNode, ComponentProps } from 'react';
|
|
2
2
|
import type { Entry, CollectionConfig } from '@airdraft/core';
|
|
3
|
+
interface InjectedProps {
|
|
4
|
+
entry?: Entry;
|
|
5
|
+
collection?: CollectionConfig;
|
|
6
|
+
}
|
|
3
7
|
export interface EntryDetailProps extends ComponentProps<'article'> {
|
|
4
8
|
entry: Entry;
|
|
5
9
|
collection: CollectionConfig;
|
|
@@ -8,18 +12,22 @@ export interface EntryDetailProps extends ComponentProps<'article'> {
|
|
|
8
12
|
* Generic schema-driven detail / full-page view component.
|
|
9
13
|
*
|
|
10
14
|
* Renders: Cover → Header (title + date) → Body → Tags.
|
|
11
|
-
* Override via compound sub-components for surgical control
|
|
15
|
+
* Override via compound sub-components for surgical control:
|
|
16
|
+
* <EntryDetail entry={e} collection={c}>
|
|
17
|
+
* <EntryDetail.Cover />
|
|
18
|
+
* <EntryDetail.Header>...</EntryDetail.Header>
|
|
19
|
+
* <EntryDetail.Body className="prose" />
|
|
20
|
+
* </EntryDetail>
|
|
12
21
|
*
|
|
13
22
|
* RSC-compatible — no `"use client"`.
|
|
14
23
|
*/
|
|
15
|
-
export declare function EntryDetail({ entry, collection, className, ...rest }: EntryDetailProps): ReactNode;
|
|
24
|
+
export declare function EntryDetail({ entry, collection, className, children, ...rest }: EntryDetailProps): ReactNode;
|
|
16
25
|
export declare namespace EntryDetail {
|
|
17
26
|
var Root: ({ className, children }: {
|
|
18
27
|
className?: string;
|
|
19
28
|
children?: ReactNode;
|
|
20
29
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
-
var Cover: ({ entry, field, multiple, className }: {
|
|
22
|
-
entry: Entry;
|
|
30
|
+
var Cover: ({ entry, collection, field, multiple, className, }: InjectedProps & {
|
|
23
31
|
field?: string;
|
|
24
32
|
multiple?: boolean;
|
|
25
33
|
className?: string;
|
|
@@ -28,12 +36,12 @@ export declare namespace EntryDetail {
|
|
|
28
36
|
className?: string;
|
|
29
37
|
children?: ReactNode;
|
|
30
38
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
31
|
-
var Body: ({ value, type, className, }: {
|
|
39
|
+
var Body: ({ entry, collection, value, type, className, }: InjectedProps & {
|
|
32
40
|
value?: string;
|
|
33
41
|
type?: "text" | "rich-text";
|
|
34
42
|
className?: string;
|
|
35
43
|
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
36
|
-
var Tags: ({ tags, className, tagClassName }: {
|
|
44
|
+
var Tags: ({ entry, collection, tags, className, tagClassName, }: InjectedProps & {
|
|
37
45
|
tags?: string[];
|
|
38
46
|
className?: string;
|
|
39
47
|
tagClassName?: string;
|
|
@@ -42,10 +50,11 @@ export declare namespace EntryDetail {
|
|
|
42
50
|
className?: string;
|
|
43
51
|
children?: ReactNode;
|
|
44
52
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
45
|
-
var Link: ({ value, label, className }: {
|
|
53
|
+
var Link: ({ entry, collection, value, label, className, }: InjectedProps & {
|
|
46
54
|
value?: string;
|
|
47
55
|
label?: string;
|
|
48
56
|
className?: string;
|
|
49
57
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
50
58
|
}
|
|
59
|
+
export {};
|
|
51
60
|
//# sourceMappingURL=EntryDetail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryDetail.d.ts","sourceRoot":"","sources":["../../src/compounds/EntryDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"EntryDetail.d.ts","sourceRoot":"","sources":["../../src/compounds/EntryDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAY7D,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B;AAmHD,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,SAAS,CAAC;IACjE,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,gBAAgB,CAAA;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,gBAAgB,GAAG,SAAS,CA2D5G;yBA3De,WAAW;wCA/HY;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE;oEAUhF,aAAa,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;0CA4CpC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE;+DAUlF,aAAa,GAAG;QACjB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB;sEAkBE,aAAa,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;wCAe1C;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE;gEA3DhF,aAAa,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Children, cloneElement, isValidElement } from 'react';
|
|
2
3
|
import { ImageField } from '../fields/ImageField.js';
|
|
3
4
|
import { MediaListField } from '../fields/MediaListField.js';
|
|
4
5
|
import { BodyField } from '../fields/BodyField.js';
|
|
@@ -11,31 +12,59 @@ import { UrlField } from '../fields/UrlField.js';
|
|
|
11
12
|
function Root({ className, children }) {
|
|
12
13
|
return _jsx("article", { className: className, children: children });
|
|
13
14
|
}
|
|
14
|
-
function Cover({ entry, field
|
|
15
|
+
function Cover({ entry, collection, field, multiple = false, className, }) {
|
|
16
|
+
if (!entry)
|
|
17
|
+
return null;
|
|
18
|
+
const resolvedField = field ?? (collection
|
|
19
|
+
? Object.entries(collection.fields).find(([, f]) => f.type === 'image' || f.type === 'media')?.[0]
|
|
20
|
+
: undefined);
|
|
21
|
+
if (!resolvedField)
|
|
22
|
+
return null;
|
|
23
|
+
const resolvedMultiple = multiple || (collection && resolvedField
|
|
24
|
+
? collection.fields[resolvedField]?.multiple === true
|
|
25
|
+
: false);
|
|
15
26
|
const data = entry.data;
|
|
16
|
-
const hasField = data[
|
|
27
|
+
const hasField = data[resolvedField] !== undefined || data[`${resolvedField}_media`] !== undefined || data[`${resolvedField}_medias`] !== undefined;
|
|
17
28
|
if (!hasField)
|
|
18
29
|
return null;
|
|
19
|
-
if (
|
|
20
|
-
return _jsx(MediaListField, { field:
|
|
30
|
+
if (resolvedMultiple) {
|
|
31
|
+
return _jsx(MediaListField, { field: resolvedField, entry: entry, className: className });
|
|
21
32
|
}
|
|
22
|
-
return _jsx(ImageField, { field:
|
|
33
|
+
return _jsx(ImageField, { field: resolvedField, entry: entry, className: className, alt: "" });
|
|
23
34
|
}
|
|
24
|
-
function Link({ value, label, className }) {
|
|
25
|
-
|
|
35
|
+
function Link({ entry, collection, value, label, className, }) {
|
|
36
|
+
const resolvedValue = value ?? (collection && entry
|
|
37
|
+
? (() => {
|
|
38
|
+
const urlFieldName = Object.entries(collection.fields).find(([, f]) => f.type === 'url')?.[0];
|
|
39
|
+
return urlFieldName ? entry.data[urlFieldName] : undefined;
|
|
40
|
+
})()
|
|
41
|
+
: undefined);
|
|
42
|
+
return _jsx(UrlField, { value: resolvedValue, label: label, className: className });
|
|
26
43
|
}
|
|
27
44
|
function Header({ className, children }) {
|
|
28
45
|
return _jsx("header", { className: className, children: children });
|
|
29
46
|
}
|
|
30
|
-
function Body({ value, type
|
|
31
|
-
|
|
47
|
+
function Body({ entry, collection, value, type, className, }) {
|
|
48
|
+
const resolvedEntry = entry?.data;
|
|
49
|
+
const bodyFieldEntry = collection
|
|
50
|
+
? Object.entries(collection.fields).find(([, f]) => f.type === 'rich-text' || f.type === 'text')
|
|
51
|
+
: undefined;
|
|
52
|
+
const resolvedValue = value ?? (bodyFieldEntry && resolvedEntry ? resolvedEntry[bodyFieldEntry[0]] : undefined);
|
|
53
|
+
const resolvedType = type ?? (bodyFieldEntry?.[1].type === 'rich-text' ? 'rich-text' : 'text');
|
|
54
|
+
if (!resolvedValue)
|
|
32
55
|
return null;
|
|
33
|
-
return _jsx(BodyField, { value:
|
|
56
|
+
return _jsx(BodyField, { value: resolvedValue, type: resolvedType, className: className });
|
|
34
57
|
}
|
|
35
|
-
function Tags({ tags, className, tagClassName }) {
|
|
36
|
-
|
|
58
|
+
function Tags({ entry, collection, tags, className, tagClassName, }) {
|
|
59
|
+
const resolvedTags = tags ?? (collection && entry
|
|
60
|
+
? (() => {
|
|
61
|
+
const tagsFieldName = Object.entries(collection.fields).find(([, f]) => f.type === 'multiselect' || f.type === 'list')?.[0];
|
|
62
|
+
return tagsFieldName ? entry.data[tagsFieldName] : undefined;
|
|
63
|
+
})()
|
|
64
|
+
: undefined);
|
|
65
|
+
if (!resolvedTags?.length)
|
|
37
66
|
return null;
|
|
38
|
-
return _jsx(TagList, { tags:
|
|
67
|
+
return _jsx(TagList, { tags: resolvedTags, className: className, tagClassName: tagClassName });
|
|
39
68
|
}
|
|
40
69
|
function Meta({ className, children }) {
|
|
41
70
|
return _jsx("div", { className: className, children: children });
|
|
@@ -44,19 +73,32 @@ function Meta({ className, children }) {
|
|
|
44
73
|
* Generic schema-driven detail / full-page view component.
|
|
45
74
|
*
|
|
46
75
|
* Renders: Cover → Header (title + date) → Body → Tags.
|
|
47
|
-
* Override via compound sub-components for surgical control
|
|
76
|
+
* Override via compound sub-components for surgical control:
|
|
77
|
+
* <EntryDetail entry={e} collection={c}>
|
|
78
|
+
* <EntryDetail.Cover />
|
|
79
|
+
* <EntryDetail.Header>...</EntryDetail.Header>
|
|
80
|
+
* <EntryDetail.Body className="prose" />
|
|
81
|
+
* </EntryDetail>
|
|
48
82
|
*
|
|
49
83
|
* RSC-compatible — no `"use client"`.
|
|
50
84
|
*/
|
|
51
|
-
export function EntryDetail({ entry, collection, className, ...rest }) {
|
|
85
|
+
export function EntryDetail({ entry, collection, className, children, ...rest }) {
|
|
86
|
+
// Children mode: inject entry + collection into each sub-component and skip auto-layout
|
|
87
|
+
if (children !== undefined) {
|
|
88
|
+
return (_jsx("article", { className: className, ...rest, children: Children.map(children, (child) => isValidElement(child)
|
|
89
|
+
? cloneElement(child, { entry, collection })
|
|
90
|
+
: child) }));
|
|
91
|
+
}
|
|
92
|
+
// Auto-layout mode: schema-driven field discovery
|
|
52
93
|
const data = entry.data;
|
|
53
94
|
const imageFieldEntry = Object.entries(collection.fields).find(([, f]) => f.type === 'image' || f.type === 'media');
|
|
54
95
|
const imageFieldName = imageFieldEntry?.[0];
|
|
55
96
|
const imageFieldMultiple = imageFieldEntry ? imageFieldEntry[1].multiple === true : false;
|
|
56
97
|
const urlFieldName = Object.entries(collection.fields).find(([, f]) => f.type === 'url')?.[0];
|
|
57
98
|
const titleFieldName = Object.keys(collection.fields).find((k) => ['title', 'name', 'heading', 'label'].includes(k));
|
|
58
|
-
const
|
|
59
|
-
const
|
|
99
|
+
const bodyFieldEntry = Object.entries(collection.fields).find(([, f]) => f.type === 'rich-text' || f.type === 'text');
|
|
100
|
+
const bodyFieldName = bodyFieldEntry?.[0];
|
|
101
|
+
const bodyFieldType = bodyFieldEntry?.[1].type;
|
|
60
102
|
const tagsFieldName = Object.entries(collection.fields).find(([, f]) => f.type === 'multiselect' || f.type === 'list')?.[0];
|
|
61
103
|
const dateFieldName = Object.entries(collection.fields).find(([, f]) => f.type === 'date' || f.type === 'datetime')?.[0];
|
|
62
104
|
const title = titleFieldName ? data[titleFieldName] : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntryDetail.js","sourceRoot":"","sources":["../../src/compounds/EntryDetail.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"EntryDetail.js","sourceRoot":"","sources":["../../src/compounds/EntryDetail.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED