@airdraft/react-content 0.1.0 → 0.1.2

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 ADDED
@@ -0,0 +1,81 @@
1
+ # Changelog
2
+
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
+
5
+ ### 0.1.1 (2026-05-22)
6
+
7
+
8
+ ### Features
9
+
10
+ * add Airdraft CMS and revalidation webhook support ([6d6313c](https://github.com/aevrHQ/airdraft/commit/6d6313c246df7561bf3e84073182bf668e37c2fd))
11
+ * add Airdraft Media Support specification document ([9025235](https://github.com/aevrHQ/airdraft/commit/902523544b3f560da55d1fbea3accca51f8aad76))
12
+ * add architecture specification for Airdraft Cloud App and enhance database types ([68e1eeb](https://github.com/aevrHQ/airdraft/commit/68e1eeb8a53c9786062d7e75c22fa419349d3c2b))
13
+ * add Checkbox component for enhanced input handling; update FieldRelationInput to use Checkbox ([db09c44](https://github.com/aevrHQ/airdraft/commit/db09c44b966aa7acf0209e9e862db6913b1040d3))
14
+ * add CLI JWT helpers for signing and verifying tokens ([b6b5755](https://github.com/aevrHQ/airdraft/commit/b6b57551963f891b15dc21f8d0db4dc3effe9195))
15
+ * add cover image uploader and initial post content for Airdraft ([b2b80a1](https://github.com/aevrHQ/airdraft/commit/b2b80a12192f9627c95c3f38eb46627c888229ff))
16
+ * add Dialog, DropdownMenu, Sheet, Sidebar, and Skeleton components ([6e889f1](https://github.com/aevrHQ/airdraft/commit/6e889f15826bb09a17665345ab21517841db1664))
17
+ * add login command for Airdraft Cloud authentication ([0d40f9f](https://github.com/aevrHQ/airdraft/commit/0d40f9f6ac42073dbaf3c84242cdb04925a68285))
18
+ * add MediaManager and TeamManager components ([eda3ad6](https://github.com/aevrHQ/airdraft/commit/eda3ad6dc8c51910b0cb74dd80b629e2714cf643))
19
+ * add new property image to media uploads ([b22c70c](https://github.com/aevrHQ/airdraft/commit/b22c70c260bfdce9d4b21e8b0ebfdffad057fffd))
20
+ * add new UI components ([f04fc15](https://github.com/aevrHQ/airdraft/commit/f04fc156f8c09353a2f5ee7d40883580a21c2eaf))
21
+ * add Next.js app detection and prompt for app directory in init commands ([2ed1afd](https://github.com/aevrHQ/airdraft/commit/2ed1afdd1ba3142fd50a9bfd4133f01c2ad22ae9))
22
+ * add PKCS[#1](https://github.com/aevrHQ/airdraft/issues/1) to PKCS[#8](https://github.com/aevrHQ/airdraft/issues/8) conversion helpers for Web Crypto compatibility ([2c29abe](https://github.com/aevrHQ/airdraft/commit/2c29abe0523ad0bb71b0fbec14270f47846f0b36))
23
+ * add Schema Editor components and utilities ([77d45a9](https://github.com/aevrHQ/airdraft/commit/77d45a9032f060a79d63e51ab934f601f46bb4e2))
24
+ * add schema editor plugin and GitHub schema adapter for managing airdraft.schema.json ([46fd7f2](https://github.com/aevrHQ/airdraft/commit/46fd7f271afe8bc562d5f2fe72b94390cb257161))
25
+ * add TagInput component for tag management in forms; update EntryEditor to utilize TagInput ([303fe01](https://github.com/aevrHQ/airdraft/commit/303fe01b24c722544a02c12d80cd3077d7d6571a))
26
+ * add TypeScript type generation and enhance CMS documentation ([ac8c965](https://github.com/aevrHQ/airdraft/commit/ac8c965ee3fc3264ce895e818b068211837a4bef))
27
+ * add versioning and changelog support for all packages ([d6c85df](https://github.com/aevrHQ/airdraft/commit/d6c85dfed37f11c42151c93b49a80ede90699616))
28
+ * **audit-log:** implement audit logging plugin with persisters and event emission ([3dd6efc](https://github.com/aevrHQ/airdraft/commit/3dd6efc986aa11a4fdcbc528a7a0def6d992b1c6))
29
+ * **auth:** implement session, API key, and embed token issuance with middleware support ([41dad48](https://github.com/aevrHQ/airdraft/commit/41dad4813d29a629fae1151a5ec6e812df7bd6fb))
30
+ * **cli,core,docs:** implement local filesystem mode with enhanced initialization and error handling ([1848408](https://github.com/aevrHQ/airdraft/commit/1848408738ee3d2bfa0ef532e6dec7a3beef0fb1))
31
+ * **cli:** add CMS client template and optional blog scaffolding to initialization ([cf7bda8](https://github.com/aevrHQ/airdraft/commit/cf7bda8137777aa319acd8edf55fb2cd718a9cd1))
32
+ * **cli:** add create-user command for user management in local UserStore ([c46161a](https://github.com/aevrHQ/airdraft/commit/c46161a2e5565d0c0862529d5bcc37d529799c0f))
33
+ * **cli:** add GitHub App integration helpers and manifest flow ([0905549](https://github.com/aevrHQ/airdraft/commit/09055493cd32b5f9bcd93cf54bc455b2fe600649))
34
+ * **cli:** enhance project initialization templates with schema path support ([a3b20c9](https://github.com/aevrHQ/airdraft/commit/a3b20c9d0dbf0e23594079f1685be8d688e7779b))
35
+ * **client:** add convenience methods for listing and retrieving entries ([c48e3f6](https://github.com/aevrHQ/airdraft/commit/c48e3f6848772bf1ed860785e1e3f9eadffb5ddc))
36
+ * **cloud:** implement CSRF state token signing and verification ([85759ec](https://github.com/aevrHQ/airdraft/commit/85759ec2a235c07ff0f591c7bfd6de4ff442b722))
37
+ * **content:** update content package with new field components and type changes ([e1bd5fa](https://github.com/aevrHQ/airdraft/commit/e1bd5fa8af9b2903024c39a0fa945e49f87754d3))
38
+ * **docs:** add .github and doc files to Git ignore, update SPEC documentation ([6e13ce1](https://github.com/aevrHQ/airdraft/commit/6e13ce1c1367e5131c38c76e068d4d7fb83deef4))
39
+ * **docs:** enhance SPEC documentation with new revalidation and slugSource details ([0725f9a](https://github.com/aevrHQ/airdraft/commit/0725f9af0e50e77561d2cf8629e6a4d390253308))
40
+ * **docs:** update SPEC documentation to reflect rebranding from Neutrino to Airdraft ([67b3eb6](https://github.com/aevrHQ/airdraft/commit/67b3eb6ae13cb0f150a848dfa8b20d0ed8bce2c5))
41
+ * **docs:** update SPEC documentation with new API key authentication and publish workflow details ([6fb3657](https://github.com/aevrHQ/airdraft/commit/6fb3657238c41c9e8e20e27d6117ee45e496f196))
42
+ * enhance AcceptInvitePage to utilize token from promise; improve invite handling ([663731e](https://github.com/aevrHQ/airdraft/commit/663731e8ab9e0c35a0caece36882e86b029fd5a4))
43
+ * enhance authentication plugin to support API key alongside JWT sessions ([5adecd4](https://github.com/aevrHQ/airdraft/commit/5adecd4a0574278c443a0e65520d3be70700cc49))
44
+ * enhance media input components and add scoped media adapter for project isolation ([e599cf2](https://github.com/aevrHQ/airdraft/commit/e599cf2c488cf73164d1cb7b1ce479d6005cf923))
45
+ * enhance withAuth to support public paths and improve API key verification logic ([fc7b657](https://github.com/aevrHQ/airdraft/commit/fc7b6579bc01fe99d961753beba9fdff8a4ce751))
46
+ * implement AcceptInvitePage for user account setup; add invite handling and validation ([e757d3a](https://github.com/aevrHQ/airdraft/commit/e757d3ab1207c94a4b8b9690eff04e795e303d8b))
47
+ * implement audit log viewer and entry editor components; enhance content manager with dynamic field handling ([6023656](https://github.com/aevrHQ/airdraft/commit/60236569139504aedfe8fbb56c57073962abd698))
48
+ * implement authentication flow with login form and session management ([498f7ef](https://github.com/aevrHQ/airdraft/commit/498f7ef9fa8803f8d1022b6f56f78e1044ab3429))
49
+ * implement auto-auth and auto-media plugins with environment variable support ([7db0ac6](https://github.com/aevrHQ/airdraft/commit/7db0ac6a326cb291ec138e24bf81448f1dfc4db6))
50
+ * implement blog post page and CMS client integration ([446df2a](https://github.com/aevrHQ/airdraft/commit/446df2a534b7f10fe73dc25a704581e8df9eda65))
51
+ * implement CMS proxy middleware and update related components for cloud integration ([cf912ca](https://github.com/aevrHQ/airdraft/commit/cf912ca68a8908e9f24b4da5ab5dd9c9002ec13e))
52
+ * implement ContentManager component and update CmsPage layout ([823eb6a](https://github.com/aevrHQ/airdraft/commit/823eb6a5f0d6dddcd8174ecd4eaf614a1cf44d47))
53
+ * implement media upload support with GitHub and Cloudinary providers ([15b2daa](https://github.com/aevrHQ/airdraft/commit/15b2daa8f85880d12aedbdb1fb1b426d0e881615))
54
+ * implement terminal UI helpers for improved user interaction ([0e0dca4](https://github.com/aevrHQ/airdraft/commit/0e0dca4a4e06196abea22e99c9a350fdd202a948))
55
+ * **media-adapter-local:** implement LocalMediaAdapter with upload, url, list, and delete functionalities ([83fbb13](https://github.com/aevrHQ/airdraft/commit/83fbb133629629d5c06969f17975a14f7f52e413))
56
+ * **media:** add new media files for property thumbnails and update post content ([534fee7](https://github.com/aevrHQ/airdraft/commit/534fee731cda2676bc52a1c82e6877e944e2b3ce))
57
+ * **media:** enhance media handling with library mode support ([752d63a](https://github.com/aevrHQ/airdraft/commit/752d63af7270ec0c6cfd2608599c5bc1f1be8041))
58
+ * **media:** implement media management features including upload, delete, and listing functionalities ([68929ee](https://github.com/aevrHQ/airdraft/commit/68929ee40d4d12c3fa53e02e0412f6523491e6df))
59
+ * **media:** implement media picker component and update cover image handling ([1a084ac](https://github.com/aevrHQ/airdraft/commit/1a084acff4caa8db41e3605db384643ed2c9d58b))
60
+ * **react-ui:** add CMSAdmin component and update related files for new admin functionality ([50f1459](https://github.com/aevrHQ/airdraft/commit/50f14598c268823615f61428ee1e0e399c610630))
61
+ * refactor AcceptInvitePage to use AcceptInviteForm; implement invite handling with AirdraftProvider ([fa4e0ec](https://github.com/aevrHQ/airdraft/commit/fa4e0ec3ad3b11f1d498b905789db3f0743ce6ca))
62
+ * replace CollectionManager with ContentManager and CollectionsIndex components ([0621d57](https://github.com/aevrHQ/airdraft/commit/0621d5754cb1451fd9c023ae2c917906d83a1cb9))
63
+ * **schema-editor:** add Many-Relations, Content Type Editor specification with decision reference and feature details ([9a6a552](https://github.com/aevrHQ/airdraft/commit/9a6a552fd87805358841ce85cd7ef4c13cd83cb2))
64
+ * **schema-editor:** add schema editor plugin with API routes for collection management ([fc991b6](https://github.com/aevrHQ/airdraft/commit/fc991b6862b4b339315aa73bb99ca34cefcc5fc9))
65
+ * update authentication handling in AirdraftClient and hooks; consolidate auth state management ([6acbee2](https://github.com/aevrHQ/airdraft/commit/6acbee25d32f718f24ad6d20358b5bb5c4d87e53))
66
+ * update author file paths to use JSON format; enhance TeamManager for admin role handling ([b106aad](https://github.com/aevrHQ/airdraft/commit/b106aadcd356860d828c00ee1393dd4e2575a520))
67
+ * update item component styles and improve collection settings accordion layout ([d476c8f](https://github.com/aevrHQ/airdraft/commit/d476c8ff68deb2cf684107de2c715a293bcf7a7a))
68
+ * update schema references from `airdraft.config.json` to `airdraft.schema.json` across documentation ([ad1eeb7](https://github.com/aevrHQ/airdraft/commit/ad1eeb7b79c4b0b74f768b69053a3b3b0a44ae07))
69
+ * update schema to use slugSource for title fields; add author entry for Miracle ([11b6746](https://github.com/aevrHQ/airdraft/commit/11b6746634184100b22069c30e3f9db0a4c9621c))
70
+
71
+
72
+ ### Bug Fixes
73
+
74
+ * improve error handling for missing schema file in buildProjectHandler ([4c3d318](https://github.com/aevrHQ/airdraft/commit/4c3d3184c9c454062fd2d9b33fb0593d5e91b71c))
75
+ * standardize quotation marks and improve formatting in CollectionsIndex and SchemaEditor components ([64f4884](https://github.com/aevrHQ/airdraft/commit/64f4884f14700b72663828a271ac6ca4a2d03e09))
76
+ * standardize quotation marks and improve formatting in next.config.mjs and CmsAdminHeader component ([bec5702](https://github.com/aevrHQ/airdraft/commit/bec5702bf7200db76600797e60c5a007512e5ad1))
77
+ * standardize quotation marks and improve layout in layout and search command components ([23cf9dd](https://github.com/aevrHQ/airdraft/commit/23cf9ddab09c4d944d9de377819cd1563ed61eff))
78
+ * update cloud package version to 0.1.4 and enhance audit log persistence logic ([e1fb0e5](https://github.com/aevrHQ/airdraft/commit/e1fb0e5509c7f95c4e659495bcdbd1339da20cea))
79
+ * update import path for utility function in Checkbox component ([cd8eb12](https://github.com/aevrHQ/airdraft/commit/cd8eb1225c8e67e03d52631aaffff0983c6c9901))
80
+ * update package versions and enhance schema cache handling ([7f4f395](https://github.com/aevrHQ/airdraft/commit/7f4f39572168b4e75dd6f1d756ebd5ef2d7ddbe1))
81
+ * update schema URL from airdraft.dev to airdraft.space ([dbace6e](https://github.com/aevrHQ/airdraft/commit/dbace6e13334f915feace70661810d5dc919f69b))
@@ -1,4 +1,4 @@
1
- import type { ReactNode, ComponentProps } from 'react';
1
+ import { type ReactNode, type ComponentProps } from 'react';
2
2
  import type { Entry } from '@airdraft/core';
3
3
  import { type ExpandedAuthor } from '../fields/AuthorByline.js';
4
4
  interface PostData {
@@ -32,7 +32,7 @@ export interface PostCardProps extends ComponentProps<'article'> {
32
32
  *
33
33
  * RSC-compatible — no `"use client"`.
34
34
  */
35
- export declare function PostCard({ post, className, ...rest }: PostCardProps): ReactNode;
35
+ export declare function PostCard({ post, className, children, ...rest }: PostCardProps): ReactNode;
36
36
  export declare namespace PostCard {
37
37
  var Root: ({ className, children }: {
38
38
  className?: string;
@@ -42,13 +42,15 @@ export declare namespace PostCard {
42
42
  post: PostEntry;
43
43
  className?: string;
44
44
  }) => import("react/jsx-runtime").JSX.Element;
45
- var Title: ({ className, children }: {
45
+ var Title: ({ className, children, post }: {
46
46
  className?: string;
47
47
  children?: ReactNode;
48
+ post?: PostEntry;
48
49
  }) => import("react/jsx-runtime").JSX.Element;
49
- var Excerpt: ({ className, children }: {
50
+ var Excerpt: ({ className, children, post }: {
50
51
  className?: string;
51
52
  children?: ReactNode;
53
+ post?: PostEntry;
52
54
  }) => import("react/jsx-runtime").JSX.Element;
53
55
  var Tags: ({ post, className, tagClassName }: {
54
56
  post: PostEntry;
@@ -1 +1 @@
1
- {"version":3,"file":"PostCard.d.ts","sourceRoot":"","sources":["../../src/blog/PostCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAI3C,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAM7E,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;IAC9C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,KAAK,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;AA0BhC,iBAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAS7E;AAMD,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,SAAS,CAAC;IAC9D,IAAI,EAAE,SAAS,CAAA;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,GAAG,SAAS,CAU/E;yBAVe,QAAQ;wCA/Ce;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE;qCAI/C;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;yCAInC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE;2CAI1C;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE;kDAIrC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE"}
1
+ {"version":3,"file":"PostCard.d.ts","sourceRoot":"","sources":["../../src/blog/PostCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAA0C,MAAM,OAAO,CAAA;AACnG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAI3C,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAM7E,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;IAC9C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,KAAK,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;AA0BhC,iBAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAS7E;AAMD,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,SAAS,CAAC;IAC9D,IAAI,EAAE,SAAS,CAAA;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,GAAG,SAAS,CAgBzF;yBAhBe,QAAQ;wCA/Ce;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;KAAE;qCAI/C;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;+CAI7B;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE;iDAI5D;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE;kDAI7D;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,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 { TagList } from '../fields/TagList.js';
4
5
  import { DateField } from '../fields/DateField.js';
@@ -12,11 +13,11 @@ function Root({ className, children }) {
12
13
  function Cover({ post, className }) {
13
14
  return _jsx(ImageField, { field: "cover", entry: post, className: className, alt: post.data.title ?? '' });
14
15
  }
15
- function Title({ className, children }) {
16
- return _jsx("h2", { className: className, children: children });
16
+ function Title({ className, children, post }) {
17
+ return _jsx("h2", { className: className, children: children ?? post?.data.title });
17
18
  }
18
- function Excerpt({ className, children }) {
19
- return _jsx("p", { className: className, children: children });
19
+ function Excerpt({ className, children, post }) {
20
+ return _jsx("p", { className: className, children: children ?? post?.data.excerpt });
20
21
  }
21
22
  function Tags({ post, className, tagClassName }) {
22
23
  return _jsx(TagList, { tags: post.data.tags ?? [], className: className, tagClassName: tagClassName });
@@ -32,7 +33,11 @@ function PostMeta({ post, className }) {
32
33
  *
33
34
  * RSC-compatible — no `"use client"`.
34
35
  */
35
- export function PostCard({ post, className, ...rest }) {
36
+ export function PostCard({ post, className, children, ...rest }) {
37
+ if (children !== undefined) {
38
+ const injected = Children.map(children, (child) => isValidElement(child) ? cloneElement(child, { post }) : child);
39
+ return _jsx("article", { className: className, ...rest, children: injected });
40
+ }
36
41
  return (_jsxs("article", { className: className, ...rest, children: [_jsx(Cover, { post: post }), post.data.title && _jsx(Title, { children: post.data.title }), post.data.excerpt && _jsx(Excerpt, { children: post.data.excerpt }), _jsx(Tags, { post: post }), _jsx(PostMeta, { post: post })] }));
37
42
  }
38
43
  PostCard.Root = Root;
@@ -1 +1 @@
1
- {"version":3,"file":"PostCard.js","sourceRoot":"","sources":["../../src/blog/PostCard.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAuB,MAAM,2BAA2B,CAAA;AAoB7E,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,SAAS,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAgD;IACjF,OAAO,kBAAS,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAW,CAAA;AAC5D,CAAC;AAED,SAAS,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAA2C;IACzE,OAAO,KAAC,UAAU,IAAC,KAAK,EAAC,OAAO,EAAC,KAAK,EAAE,IAAa,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,GAAI,CAAA;AAC7G,CAAC;AAED,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAgD;IAClF,OAAO,aAAI,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAM,CAAA;AAClD,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAgD;IACpF,OAAO,YAAG,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAK,CAAA;AAChD,CAAC;AAED,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAkE;IAC7G,OAAO,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,GAAI,CAAA;AAClG,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAA2C;IAC5E,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,aACtB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAC,SAAS,IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAI,EACpE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CACpB,KAAC,YAAY,IAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAA+C,GAAI,CACrF,IACG,CACP,CAAA;AACH,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAiB;IAClE,OAAO,CACL,mBAAS,SAAS,EAAE,SAAS,KAAM,IAAI,aACrC,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,GAAI,EACpB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAC,KAAK,cAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAS,EACnD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAC,OAAO,cAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAW,EAC5D,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,EACpB,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,GAAI,IAChB,CACX,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AACpB,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;AACtB,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;AACtB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAA;AAC1B,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AACpB,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAA"}
1
+ {"version":3,"file":"PostCard.js","sourceRoot":"","sources":["../../src/blog/PostCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { ReactNode } from 'react';
2
+ import { resolveImageDimensions } from '@airdraft/content';
3
+ import type { Entry } from '@airdraft/core';
4
+ export interface MediaFieldProps {
5
+ /** The field name in the entry's data (e.g. 'cover', 'attachment'). */
6
+ field: string;
7
+ /** The entry whose data is searched for the media value. */
8
+ entry: Entry;
9
+ alt?: string;
10
+ className?: string;
11
+ /** Class applied to the rendered `<img>` when no children render prop is given. */
12
+ imgClassName?: string;
13
+ /**
14
+ * Render prop — receives the resolved URL and MIME type hint (if known) and
15
+ * renders a custom element. Use this to plug in `next/image`, `<video>`, etc.
16
+ *
17
+ * @example
18
+ * <MediaField field="attachment" entry={entry}>
19
+ * {(url, mimeType) => <a href={url}>{mimeType ?? 'Download'}</a>}
20
+ * </MediaField>
21
+ */
22
+ children?: (url: string, mimeType: string | undefined) => ReactNode;
23
+ }
24
+ /**
25
+ * Renders a media asset resolved from an Airdraft entry field.
26
+ *
27
+ * - Images: `<img>`
28
+ * - Videos: `<video>`
29
+ * - Audio: `<audio>`
30
+ * - Other: `<a>` link
31
+ *
32
+ * Resolution chain: `{field}_media.url` → `{field}_url` → `/{field}` key.
33
+ * Returns `null` when no URL can be resolved.
34
+ *
35
+ * RSC-compatible — no `"use client"`.
36
+ */
37
+ export declare function MediaField({ field, entry, alt, className, imgClassName, children, }: MediaFieldProps): ReactNode;
38
+ export { resolveImageDimensions };
39
+ //# sourceMappingURL=MediaField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaField.d.ts","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAmB,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,SAAS,CAAA;CACpE;AAkCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,GAAQ,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,GACT,EAAE,eAAe,GAAG,SAAS,CAU7B;AAGD,OAAO,EAAE,sBAAsB,EAAE,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { resolveMediaUrl, resolveImageDimensions } from '@airdraft/content';
3
+ function getMimeType(field, data) {
4
+ const mediaObj = data[`${field}_media`];
5
+ if (mediaObj && typeof mediaObj === 'object' && 'mimeType' in mediaObj) {
6
+ const m = mediaObj['mimeType'];
7
+ if (typeof m === 'string' && m)
8
+ return m;
9
+ }
10
+ return undefined;
11
+ }
12
+ function renderByMime(url, mimeType, alt, className) {
13
+ if (!mimeType || mimeType.startsWith('image/')) {
14
+ // eslint-disable-next-line @next/next/no-img-element
15
+ return _jsx("img", { src: url, alt: alt, className: className });
16
+ }
17
+ if (mimeType.startsWith('video/')) {
18
+ return (_jsx("video", { src: url, controls: true, className: className, children: _jsx("track", { kind: "captions" }) }));
19
+ }
20
+ if (mimeType.startsWith('audio/')) {
21
+ return _jsx("audio", { src: url, controls: true, className: className });
22
+ }
23
+ // Generic file — render a link
24
+ return (_jsx("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: className, children: url.split('/').pop() ?? url }));
25
+ }
26
+ /**
27
+ * Renders a media asset resolved from an Airdraft entry field.
28
+ *
29
+ * - Images: `<img>`
30
+ * - Videos: `<video>`
31
+ * - Audio: `<audio>`
32
+ * - Other: `<a>` link
33
+ *
34
+ * Resolution chain: `{field}_media.url` → `{field}_url` → `/{field}` key.
35
+ * Returns `null` when no URL can be resolved.
36
+ *
37
+ * RSC-compatible — no `"use client"`.
38
+ */
39
+ export function MediaField({ field, entry, alt = '', className, imgClassName, children, }) {
40
+ const data = entry.data;
41
+ const url = resolveMediaUrl(field, data);
42
+ if (!url)
43
+ return null;
44
+ const mimeType = getMimeType(field, data);
45
+ if (children)
46
+ return children(url, mimeType);
47
+ return renderByMime(url, mimeType, alt, imgClassName ?? className);
48
+ }
49
+ // Re-export resolveImageDimensions for convenience when using MediaField with next/image
50
+ export { resolveImageDimensions };
51
+ //# sourceMappingURL=MediaField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaField.js","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAwB3E,SAAS,WAAW,CAAC,KAAa,EAAE,IAA6B;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAA;IACvC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QACvE,MAAM,CAAC,GAAI,QAAoC,CAAC,UAAU,CAAC,CAAA;QAC3D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,QAA4B,EAAE,GAAW,EAAE,SAAkB;IAC9F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,qDAAqD;QACrD,OAAO,cAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,GAAI,CAAA;IAC1D,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,CACL,gBAAO,GAAG,EAAE,GAAG,EAAE,QAAQ,QAAC,SAAS,EAAE,SAAS,YAC5C,gBAAO,IAAI,EAAC,UAAU,GAAG,GACnB,CACT,CAAA;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,gBAAO,GAAG,EAAE,GAAG,EAAE,QAAQ,QAAC,SAAS,EAAE,SAAS,GAAI,CAAA;IAC3D,CAAC;IACD,+BAA+B;IAC/B,OAAO,CACL,YAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAAC,SAAS,EAAE,SAAS,YACzE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,GAC1B,CACL,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,GAAG,GAAG,EAAE,EACR,SAAS,EACT,YAAY,EACZ,QAAQ,GACQ;IAChB,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAA;IAClD,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAEzC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE5C,OAAO,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,IAAI,SAAS,CAAC,CAAA;AACpE,CAAC;AAED,yFAAyF;AACzF,OAAO,EAAE,sBAAsB,EAAE,CAAA"}
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Entry } from '@airdraft/core';
3
+ export interface MediaListFieldProps {
4
+ /** The field name in the entry's data (e.g. 'gallery', 'attachments'). */
5
+ field: string;
6
+ /** The entry whose data is searched for the media array. */
7
+ entry: Entry;
8
+ className?: string;
9
+ /** Class applied to each rendered item's wrapper element. */
10
+ itemClassName?: string;
11
+ /**
12
+ * Render prop — receives the resolved URL, index, and MIME type hint for each item.
13
+ * Use this to render custom thumbnails, cards, links, etc.
14
+ *
15
+ * @example
16
+ * <MediaListField field="gallery" entry={entry}>
17
+ * {(url, i) => <img key={i} src={url} alt={`Gallery ${i + 1}`} />}
18
+ * </MediaListField>
19
+ */
20
+ children?: (url: string, index: number, mimeType: string | undefined) => ReactNode;
21
+ }
22
+ /**
23
+ * Renders a list of media assets from a `media` field with `multiple: true`.
24
+ *
25
+ * Each item is rendered using the `children` render prop when provided,
26
+ * otherwise falls back to an `<img>` tag (for images) or an `<a>` link.
27
+ *
28
+ * Returns `null` when no URLs can be resolved.
29
+ *
30
+ * RSC-compatible — no `"use client"`.
31
+ */
32
+ export declare function MediaListField({ field, entry, className, itemClassName, children, }: MediaListFieldProps): ReactNode;
33
+ //# sourceMappingURL=MediaListField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaListField.d.ts","sourceRoot":"","sources":["../../src/fields/MediaListField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,SAAS,CAAA;CACnF;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,SAAS,EACT,aAAa,EACb,QAAQ,GACT,EAAE,mBAAmB,GAAG,SAAS,CA+CjC"}
@@ -0,0 +1,61 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { resolveMediaUrls } from '@airdraft/content';
3
+ function getMediaItems(field, data) {
4
+ const mediasRaw = data[`${field}_medias`];
5
+ if (Array.isArray(mediasRaw)) {
6
+ return mediasRaw.flatMap((item) => {
7
+ if (item && typeof item === 'object' && 'url' in item) {
8
+ const obj = item;
9
+ const url = typeof obj['url'] === 'string' ? obj['url'] : undefined;
10
+ if (!url)
11
+ return [];
12
+ const mimeType = typeof obj['mimeType'] === 'string' ? obj['mimeType'] : undefined;
13
+ return [{ url, mimeType }];
14
+ }
15
+ return [];
16
+ });
17
+ }
18
+ return [];
19
+ }
20
+ /**
21
+ * Renders a list of media assets from a `media` field with `multiple: true`.
22
+ *
23
+ * Each item is rendered using the `children` render prop when provided,
24
+ * otherwise falls back to an `<img>` tag (for images) or an `<a>` link.
25
+ *
26
+ * Returns `null` when no URLs can be resolved.
27
+ *
28
+ * RSC-compatible — no `"use client"`.
29
+ */
30
+ export function MediaListField({ field, entry, className, itemClassName, children, }) {
31
+ const data = entry.data;
32
+ const items = getMediaItems(field, data);
33
+ // Fall back to URL-only resolution when medias sidecar is absent
34
+ const urls = items.length > 0 ? null : resolveMediaUrls(field, data);
35
+ if (items.length === 0 && (!urls || urls.length === 0))
36
+ return null;
37
+ if (children) {
38
+ if (items.length > 0) {
39
+ return (_jsx(_Fragment, { children: items.map(({ url, mimeType }, i) => children(url, i, mimeType)) }));
40
+ }
41
+ return _jsx(_Fragment, { children: (urls ?? []).map((url, i) => children(url, i, undefined)) });
42
+ }
43
+ // Default render — img for each item inside a wrapper
44
+ const resolvedItems = items.length > 0
45
+ ? items
46
+ : (urls ?? []).map((url) => ({ url, mimeType: undefined }));
47
+ return (_jsx("div", { className: className, children: resolvedItems.map(({ url, mimeType }, i) => {
48
+ if (!mimeType || mimeType.startsWith('image/')) {
49
+ // eslint-disable-next-line @next/next/no-img-element
50
+ return _jsx("img", { src: url, alt: `Item ${i + 1}`, className: itemClassName }, i);
51
+ }
52
+ if (mimeType.startsWith('video/')) {
53
+ return (_jsx("video", { src: url, controls: true, className: itemClassName, children: _jsx("track", { kind: "captions" }) }, i));
54
+ }
55
+ if (mimeType.startsWith('audio/')) {
56
+ return _jsx("audio", { src: url, controls: true, className: itemClassName }, i);
57
+ }
58
+ return (_jsx("a", { href: url, target: "_blank", rel: "noopener noreferrer", className: itemClassName, children: url.split('/').pop() ?? url }, i));
59
+ }) }));
60
+ }
61
+ //# sourceMappingURL=MediaListField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaListField.js","sourceRoot":"","sources":["../../src/fields/MediaListField.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  export { ImageField } from './ImageField.js';
2
2
  export type { ImageFieldProps } from './ImageField.js';
3
+ export { MediaField } from './MediaField.js';
4
+ export type { MediaFieldProps } from './MediaField.js';
5
+ export { MediaListField } from './MediaListField.js';
6
+ export type { MediaListFieldProps } from './MediaListField.js';
3
7
  export { BodyField } from './BodyField.js';
4
8
  export type { BodyFieldProps } from './BodyField.js';
5
9
  export { TagList } from './TagList.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,4 +1,6 @@
1
1
  export { ImageField } from './ImageField.js';
2
+ export { MediaField } from './MediaField.js';
3
+ export { MediaListField } from './MediaListField.js';
2
4
  export { BodyField } from './BodyField.js';
3
5
  export { TagList } from './TagList.js';
4
6
  export { AuthorByline } from './AuthorByline.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,35 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { Entry } from '@airdraft/core';
3
+ export interface AirdraftMediaProps {
4
+ /** The field name in the entry's data (e.g. 'cover', 'attachment'). */
5
+ field: string;
6
+ /** The entry whose data is searched for the media value. */
7
+ entry: Entry;
8
+ alt?: string;
9
+ className?: string;
10
+ /** Passed through to next/image when rendering images. */
11
+ priority?: boolean;
12
+ /**
13
+ * Render prop — receives the resolved URL and MIME type hint.
14
+ * Use this to plug in custom rendering for non-image types.
15
+ *
16
+ * @example
17
+ * <AirdraftMedia field="attachment" entry={entry}>
18
+ * {(url, mimeType) => <a href={url}>{mimeType ?? 'Download'}</a>}
19
+ * </AirdraftMedia>
20
+ */
21
+ children?: (url: string, mimeType: string | undefined) => ReactNode;
22
+ }
23
+ /**
24
+ * Next.js-aware media component that handles all media types.
25
+ *
26
+ * - Images (image/* MIME or unknown type): uses `next/image` with dimensions when available
27
+ * - Videos: `<video controls>`
28
+ * - Audio: `<audio controls>`
29
+ * - Other: `<a>` download link
30
+ *
31
+ * Returns `null` when no URL can be resolved.
32
+ * RSC-compatible — no `"use client"`.
33
+ */
34
+ export declare function AirdraftMedia({ field, entry, alt, className, priority, children, }: AirdraftMediaProps): ReactNode;
35
+ //# sourceMappingURL=AirdraftMedia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AirdraftMedia.d.ts","sourceRoot":"","sources":["../../src/next/AirdraftMedia.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAG3C,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,KAAK,EAAE,KAAK,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,SAAS,CAAA;CACpE;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,GAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,GACT,EAAE,kBAAkB,GAAG,SAAS,CAiDhC"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import Image from 'next/image';
3
+ import { resolveMediaUrl, resolveImageDimensions } from '@airdraft/content';
4
+ function getMimeType(field, data) {
5
+ const mediaObj = data[`${field}_media`];
6
+ if (mediaObj && typeof mediaObj === 'object' && 'mimeType' in mediaObj) {
7
+ const m = mediaObj['mimeType'];
8
+ if (typeof m === 'string' && m)
9
+ return m;
10
+ }
11
+ return undefined;
12
+ }
13
+ /**
14
+ * Next.js-aware media component that handles all media types.
15
+ *
16
+ * - Images (image/* MIME or unknown type): uses `next/image` with dimensions when available
17
+ * - Videos: `<video controls>`
18
+ * - Audio: `<audio controls>`
19
+ * - Other: `<a>` download link
20
+ *
21
+ * Returns `null` when no URL can be resolved.
22
+ * RSC-compatible — no `"use client"`.
23
+ */
24
+ export function AirdraftMedia({ field, entry, alt = '', className, priority, children, }) {
25
+ const data = entry.data;
26
+ const src = resolveMediaUrl(field, data);
27
+ if (!src)
28
+ return null;
29
+ const mimeType = getMimeType(field, data);
30
+ if (children)
31
+ return children(src, mimeType);
32
+ // Images (or unknown MIME) — use next/image
33
+ if (!mimeType || mimeType.startsWith('image/')) {
34
+ const dims = resolveImageDimensions(field, data);
35
+ if (dims) {
36
+ return (_jsx(Image, { src: src, alt: alt, width: dims.width, height: dims.height, className: className, priority: priority }));
37
+ }
38
+ return (_jsx("div", { className: className, style: { position: 'relative' }, children: _jsx(Image, { src: src, alt: alt, fill: true, priority: priority }) }));
39
+ }
40
+ if (mimeType.startsWith('video/')) {
41
+ return (_jsx("video", { src: src, controls: true, className: className, children: _jsx("track", { kind: "captions" }) }));
42
+ }
43
+ if (mimeType.startsWith('audio/')) {
44
+ return _jsx("audio", { src: src, controls: true, className: className });
45
+ }
46
+ // Generic file — render a link
47
+ return (_jsx("a", { href: src, target: "_blank", rel: "noopener noreferrer", className: className, children: src.split('/').pop() ?? src }));
48
+ }
49
+ //# sourceMappingURL=AirdraftMedia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AirdraftMedia.js","sourceRoot":"","sources":["../../src/next/AirdraftMedia.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,YAAY,CAAA;AAE9B,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAuB3E,SAAS,WAAW,CAAC,KAAa,EAAE,IAA6B;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAA;IACvC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QACvE,MAAM,CAAC,GAAI,QAAoC,CAAC,UAAU,CAAC,CAAA;QAC3D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC;YAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,GAAG,GAAG,EAAE,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,GACW;IACnB,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAA;IAClD,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAEzC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE5C,4CAA4C;IAC5C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAChD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CACL,KAAC,KAAK,IACJ,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GAClB,CACH,CAAA;QACH,CAAC;QACD,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,YACxD,KAAC,KAAK,IAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,QAAC,QAAQ,EAAE,QAAQ,GAAI,GAClD,CACP,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,CACL,gBAAO,GAAG,EAAE,GAAG,EAAE,QAAQ,QAAC,SAAS,EAAE,SAAS,YAC5C,gBAAO,IAAI,EAAC,UAAU,GAAG,GACnB,CACT,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,gBAAO,GAAG,EAAE,GAAG,EAAE,QAAQ,QAAC,SAAS,EAAE,SAAS,GAAI,CAAA;IAC3D,CAAC;IAED,+BAA+B;IAC/B,OAAO,CACL,YAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAAC,SAAS,EAAE,SAAS,YACzE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,GAC1B,CACL,CAAA;AACH,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { AirdraftImage } from './AirdraftImage.js';
2
2
  export type { AirdraftImageProps } from './AirdraftImage.js';
3
+ export { AirdraftMedia } from './AirdraftMedia.js';
4
+ export type { AirdraftMediaProps } from './AirdraftMedia.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -1,2 +1,3 @@
1
1
  export { AirdraftImage } from './AirdraftImage.js';
2
+ export { AirdraftMedia } from './AirdraftMedia.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@airdraft/react-content",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Airdraft React components for rendering CMS content — field atoms, entry cards, and blog recipes",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -15,7 +15,11 @@
15
15
  "types": "./dist/next/index.d.ts"
16
16
  }
17
17
  },
18
- "files": ["dist", "README.md", "CHANGELOG.md"],
18
+ "files": [
19
+ "dist",
20
+ "README.md",
21
+ "CHANGELOG.md"
22
+ ],
19
23
  "scripts": {
20
24
  "build": "tsc",
21
25
  "dev": "tsc --watch",
@@ -27,18 +31,22 @@
27
31
  "release:minor": "standard-version --release-as minor",
28
32
  "release:major": "standard-version --release-as major"
29
33
  },
30
- "publishConfig": { "access": "public" },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
31
37
  "license": "MIT",
32
38
  "peerDependencies": {
33
39
  "react": ">=18.0.0",
34
40
  "next": ">=14.0.0"
35
41
  },
36
42
  "peerDependenciesMeta": {
37
- "next": { "optional": true }
43
+ "next": {
44
+ "optional": true
45
+ }
38
46
  },
39
47
  "devDependencies": {
40
48
  "@types/react": "^19.0.0",
41
- "next": "^15.0.0",
49
+ "next": "^16.1.7",
42
50
  "react": "^18.0.0",
43
51
  "typescript": "^5.7.2"
44
52
  },
@@ -46,5 +54,7 @@
46
54
  "@airdraft/content": "*",
47
55
  "@airdraft/core": "*"
48
56
  },
49
- "engines": { "node": ">=18.0.0" }
57
+ "engines": {
58
+ "node": ">=18.0.0"
59
+ }
50
60
  }