@airdraft/react-ui 0.1.1 → 0.1.3

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,24 @@
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.3](https://github.com/aevrHQ/airdraft/compare/react-ui@v0.1.2...react-ui@v0.1.3) (2026-05-22)
6
+
7
+
8
+ ### Features
9
+
10
+ * **react-ui:** add CMSAdmin component and update related files for new admin functionality ([50f1459](https://github.com/aevrHQ/airdraft/commit/50f14598c268823615f61428ee1e0e399c610630))
11
+
12
+ ### [0.1.2](https://github.com/aevrHQ/airdraft/compare/react-ui@v0.1.1...react-ui@v0.1.2) (2026-05-22)
13
+
14
+
15
+ ### Features
16
+
17
+ * **cli,core,docs:** implement local filesystem mode with enhanced initialization and error handling ([1848408](https://github.com/aevrHQ/airdraft/commit/1848408738ee3d2bfa0ef532e6dec7a3beef0fb1))
18
+ * **cli:** add CMS client template and optional blog scaffolding to initialization ([cf7bda8](https://github.com/aevrHQ/airdraft/commit/cf7bda8137777aa319acd8edf55fb2cd718a9cd1))
19
+ * **cli:** enhance project initialization templates with schema path support ([a3b20c9](https://github.com/aevrHQ/airdraft/commit/a3b20c9d0dbf0e23594079f1685be8d688e7779b))
20
+ * **client:** add convenience methods for listing and retrieving entries ([c48e3f6](https://github.com/aevrHQ/airdraft/commit/c48e3f6848772bf1ed860785e1e3f9eadffb5ddc))
21
+ * **content:** update content package with new field components and type changes ([e1bd5fa](https://github.com/aevrHQ/airdraft/commit/e1bd5fa8af9b2903024c39a0fa945e49f87754d3))
22
+
5
23
  ### [0.1.1](https://github.com/aevrHQ/airdraft/compare/react-ui@v0.1.0...react-ui@v0.1.1) (2026-05-22)
6
24
 
7
25
 
@@ -0,0 +1,31 @@
1
+ import type { AuthConfig } from '@airdraft/react';
2
+ export interface CMSAdminProps {
3
+ /** Catch-all route segments from Next.js params — pass `params.route ?? []`. */
4
+ segments?: string[];
5
+ /** Mount point of the CMS admin. Default: "/cms" */
6
+ basePath?: string;
7
+ /** Airdraft API base URL. Default: "/api/cms" */
8
+ apiUrl?: string;
9
+ /** Auth config. Falls back to NEXT_PUBLIC_CMS_API_KEY env var, then session mode. */
10
+ auth?: AuthConfig;
11
+ /** Brand name shown in the header logo. Default: "Airdraft" */
12
+ brandName?: string;
13
+ /** Brand logo image URL. Default: Airdraft favicon */
14
+ brandLogoUrl?: string;
15
+ }
16
+ /**
17
+ * Drop-in CMS admin component for Next.js catch-all routes.
18
+ *
19
+ * Place in `app/cms/[[...route]]/page.tsx`:
20
+ *
21
+ * ```tsx
22
+ * import { CMSAdmin } from '@airdraft/react-ui'
23
+ *
24
+ * export default async function CmsPage({ params }: { params: Promise<{ route?: string[] }> }) {
25
+ * const { route } = await params
26
+ * return <CMSAdmin segments={route} />
27
+ * }
28
+ * ```
29
+ */
30
+ export declare function CMSAdmin({ segments, basePath, apiUrl, auth, brandName, brandLogoUrl, }: CMSAdminProps): import("react/jsx-runtime").JSX.Element;
31
+ //# sourceMappingURL=CMSAdmin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CMSAdmin.d.ts","sourceRoot":"","sources":["../src/CMSAdmin.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAgBjD,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AA0OD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAa,EACb,QAAiB,EACjB,MAAmB,EACnB,IAAI,EACJ,SAAsB,EACtB,YAAY,GACb,EAAE,aAAa,2CAgBf"}
@@ -0,0 +1,152 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect } from 'react';
4
+ import { useRouter } from 'next/navigation';
5
+ import { AirdraftProvider, useAuth } from '@airdraft/react';
6
+ import { CmsAdminHeader } from './components/CmsAdminHeader.js';
7
+ import { CollectionsIndex } from './CollectionsIndex.js';
8
+ import { ContentManager } from './ContentManager.js';
9
+ import { EntryEditor } from './EntryEditor.js';
10
+ import { MediaManager } from './MediaManager.js';
11
+ import { LoginForm } from './LoginForm.js';
12
+ import { SchemaEditor } from './SchemaEditor.js';
13
+ import { TeamManager } from './TeamManager.js';
14
+ import { AuditLogViewer } from './AuditLogViewer.js';
15
+ import { EmptyState } from './components/EmptyState.js';
16
+ // ---------------------------------------------------------------------------
17
+ // Resolve auth from prop → env var → session
18
+ // ---------------------------------------------------------------------------
19
+ function resolveAuth(auth) {
20
+ if (auth)
21
+ return auth;
22
+ const apiKey = typeof process !== 'undefined'
23
+ ? (process.env['NEXT_PUBLIC_CMS_API_KEY'] ?? '')
24
+ : '';
25
+ if (apiKey)
26
+ return { type: 'apiKey', token: apiKey };
27
+ return undefined; // falls back to { type: 'session' } implicitly
28
+ }
29
+ // ---------------------------------------------------------------------------
30
+ // Login view — no shell, centered card
31
+ // ---------------------------------------------------------------------------
32
+ function LoginView({ basePath, brandName, }) {
33
+ const router = useRouter();
34
+ return (_jsx("div", { className: "min-h-screen flex items-center justify-center p-4 bg-background", children: _jsxs("div", { className: "w-full max-w-sm space-y-6", children: [_jsxs("div", { className: "text-center", children: [_jsx("h1", { className: "text-2xl font-semibold tracking-tight", children: brandName }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Sign in to your account" })] }), _jsx("div", { className: "rounded-xl border bg-card p-6 shadow-sm", children: _jsx(LoginForm, { onSuccess: () => router.replace(basePath) }) })] }) }));
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // API-key shell — no auth guard
38
+ // ---------------------------------------------------------------------------
39
+ function ApiKeyShell({ children, basePath, brandName, brandLogoUrl, }) {
40
+ return (_jsxs(_Fragment, { children: [_jsx(CmsAdminHeader, { basePath: basePath, brandName: brandName, brandLogoUrl: brandLogoUrl }), _jsx("div", { className: "px-4", children: _jsx("main", { className: "mx-auto max-w-4xl space-y-6 py-6", children: children }) })] }));
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Session shell — auth guard + logout
44
+ // ---------------------------------------------------------------------------
45
+ function SessionShell({ children, basePath, brandName, brandLogoUrl, }) {
46
+ const router = useRouter();
47
+ const { user, isLoading, logout } = useAuth();
48
+ useEffect(() => {
49
+ if (!isLoading && !user) {
50
+ router.replace(`${basePath}/login`);
51
+ }
52
+ }, [isLoading, user, basePath, router]);
53
+ if (isLoading) {
54
+ return (_jsx("div", { className: "flex min-h-screen items-center justify-center", children: _jsx("p", { className: "text-sm text-muted-foreground", children: "Loading\u2026" }) }));
55
+ }
56
+ if (!user)
57
+ return null;
58
+ async function handleLogout() {
59
+ await logout();
60
+ router.replace(`${basePath}/login`);
61
+ }
62
+ return (_jsxs(_Fragment, { children: [_jsx(CmsAdminHeader, { user: user, onLogout: handleLogout, basePath: basePath, brandName: brandName, brandLogoUrl: brandLogoUrl }), _jsx("div", { className: "px-4", children: _jsx("main", { className: "mx-auto max-w-4xl space-y-6 py-6", children: children }) })] }));
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // View switcher — maps segments → component
66
+ // ---------------------------------------------------------------------------
67
+ function CmsView({ segments, basePath, apiUrl, brandName, brandLogoUrl, isApiKeyMode, }) {
68
+ const router = useRouter();
69
+ const Shell = isApiKeyMode ? ApiKeyShell : SessionShell;
70
+ const shellProps = { basePath, brandName, brandLogoUrl };
71
+ // Login page — rendered without a shell
72
+ if (segments[0] === 'login') {
73
+ if (isApiKeyMode) {
74
+ // API-key mode doesn't use login — redirect to base
75
+ router.replace(basePath);
76
+ return null;
77
+ }
78
+ return _jsx(LoginView, { basePath: basePath, brandName: brandName });
79
+ }
80
+ // Settings redirect: /settings → /settings/schema
81
+ if (segments[0] === 'settings' && segments.length === 1) {
82
+ router.replace(`${basePath}/settings/schema`);
83
+ return null;
84
+ }
85
+ // /collections → redirect to base (the collections index is the root)
86
+ if (segments[0] === 'collections' && segments.length === 1) {
87
+ router.replace(basePath);
88
+ return null;
89
+ }
90
+ // Determine view content
91
+ let content;
92
+ if (segments.length === 0) {
93
+ // Root → collections index
94
+ content = (_jsx(CollectionsIndex, { onSelect: (name) => router.push(`${basePath}/collections/${name}`) }));
95
+ }
96
+ else if (segments[0] === 'collections' && segments.length === 2) {
97
+ // /collections/[collection]
98
+ const collection = segments[1];
99
+ content = (_jsx(ContentManager, { collection: collection, onEdit: (slug) => router.push(`${basePath}/collections/${collection}/${slug}`) }));
100
+ }
101
+ else if (segments[0] === 'collections' && segments.length === 3) {
102
+ // /collections/[collection]/[slug]
103
+ const [, collection, slug] = segments;
104
+ content = (_jsx(EntryEditor, { collection: collection, slug: slug, onBack: () => router.push(`${basePath}/collections/${collection}`) }));
105
+ }
106
+ else if (segments[0] === 'media') {
107
+ content = _jsx(MediaManager, {});
108
+ }
109
+ else if (segments[0] === 'settings' && segments[1] === 'schema') {
110
+ content = _jsx(SchemaEditor, {});
111
+ }
112
+ else if (segments[0] === 'settings' && segments[1] === 'team') {
113
+ // TeamManager — only meaningful in session mode (useAuth inside Shell provides user)
114
+ content = _jsx(TeamManagerView, {});
115
+ }
116
+ else if (segments[0] === 'settings' && segments[1] === 'audit') {
117
+ content = _jsx(AuditLogViewer, { apiUrl: `${apiUrl}/audit` });
118
+ }
119
+ else {
120
+ // Unknown route
121
+ content = (_jsx(EmptyState, { title: "Page not found", description: `The path "/${segments.join('/')}" doesn't exist in the CMS admin.` }));
122
+ }
123
+ return _jsx(Shell, { ...shellProps, children: content });
124
+ }
125
+ // Thin wrapper so TeamManager can read useAuth inside the Shell's AirdraftProvider tree
126
+ function TeamManagerView() {
127
+ const { user } = useAuth();
128
+ return (_jsx(TeamManager, { isAdmin: user?.role === 'admin', currentUserEmail: user?.email }));
129
+ }
130
+ // ---------------------------------------------------------------------------
131
+ // CMSAdmin — public entry point
132
+ // ---------------------------------------------------------------------------
133
+ /**
134
+ * Drop-in CMS admin component for Next.js catch-all routes.
135
+ *
136
+ * Place in `app/cms/[[...route]]/page.tsx`:
137
+ *
138
+ * ```tsx
139
+ * import { CMSAdmin } from '@airdraft/react-ui'
140
+ *
141
+ * export default async function CmsPage({ params }: { params: Promise<{ route?: string[] }> }) {
142
+ * const { route } = await params
143
+ * return <CMSAdmin segments={route} />
144
+ * }
145
+ * ```
146
+ */
147
+ export function CMSAdmin({ segments = [], basePath = '/cms', apiUrl = '/api/cms', auth, brandName = 'Airdraft', brandLogoUrl, }) {
148
+ const resolvedAuth = resolveAuth(auth);
149
+ const isApiKeyMode = resolvedAuth?.type === 'apiKey';
150
+ return (_jsx(AirdraftProvider, { apiUrl: apiUrl, auth: resolvedAuth, children: _jsx(CmsView, { segments: segments, basePath: basePath, apiUrl: apiUrl, brandName: brandName, brandLogoUrl: brandLogoUrl, isApiKeyMode: isApiKeyMode }) }));
151
+ }
152
+ //# sourceMappingURL=CMSAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CMSAdmin.js","sourceRoot":"","sources":["../src/CMSAdmin.tsx"],"names":[],"mappings":"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"}
@@ -6,6 +6,12 @@ export interface CmsAdminHeaderProps {
6
6
  name?: string;
7
7
  } | null;
8
8
  onLogout?: () => void;
9
+ /** Mount point of the CMS admin. Default: "/cms" */
10
+ basePath?: string;
11
+ /** Brand name shown in the header logo. Default: "Airdraft" */
12
+ brandName?: string;
13
+ /** Brand logo image URL. Default: Airdraft favicon */
14
+ brandLogoUrl?: string;
9
15
  }
10
- export declare function CmsAdminHeader({ user, onLogout }: CmsAdminHeaderProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function CmsAdminHeader({ user, onLogout, basePath, brandName, brandLogoUrl, }: CmsAdminHeaderProps): import("react/jsx-runtime").JSX.Element;
11
17
  //# sourceMappingURL=CmsAdminHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CmsAdminHeader.d.ts","sourceRoot":"","sources":["../../src/components/CmsAdminHeader.tsx"],"names":[],"mappings":"AA4HA,MAAM,WAAW,mBAAmB;IAClC;4EACwE;IACxE,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CA8CrE"}
1
+ {"version":3,"file":"CmsAdminHeader.d.ts","sourceRoot":"","sources":["../../src/components/CmsAdminHeader.tsx"],"names":[],"mappings":"AAkGA,MAAM,WAAW,mBAAmB;IAClC;4EACwE;IACxE,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,QAAiB,EACjB,SAAsB,EACtB,YAAgC,GACjC,EAAE,mBAAmB,2CAgDrB"}
@@ -7,8 +7,8 @@ import { PageHeader } from "../ui/aevr/page-header.js";
7
7
  import { NavUser } from "../ui/aevr/nav-user.js";
8
8
  import { SearchCommand } from "../ui/aevr/search-command.js";
9
9
  import { ActivityIcon, Code2Icon, ImageIcon, LayoutListIcon, SettingsIcon, UsersIcon, } from "lucide-react";
10
+ const AIRDRAFT_LOGO_URL = "https://aevr.online/favicon.ico";
10
11
  // ── Segment config for CMS breadcrumbs ───────────────────────────────────────
11
- // The "cms" segment itself is skipped so breadcrumbs start from the sub-route.
12
12
  const CMS_SEGMENT_CONFIG = {
13
13
  collections: {
14
14
  label: "Content",
@@ -21,96 +21,73 @@ const CMS_SEGMENT_CONFIG = {
21
21
  team: { label: "Team", shortLabel: "Team", icon: UsersIcon },
22
22
  audit: { label: "Audit Log", shortLabel: "Audit", icon: ActivityIcon },
23
23
  };
24
- // ── Search command config ─────────────────────────────────────────────────────
25
- const CMS_SEARCH_GROUPS = [
26
- {
27
- heading: "Navigation",
28
- entries: [
29
- {
30
- title: "Content",
31
- description: "Manage collection entries",
32
- href: "/cms",
33
- icon: LayoutListIcon,
34
- shortcut: "gc",
35
- keywords: ["content", "entries", "collections"],
36
- },
37
- {
38
- title: "Media",
39
- description: "Upload and browse media files",
40
- href: "/cms/media",
41
- icon: ImageIcon,
42
- shortcut: "gm",
43
- keywords: ["media", "images", "files", "uploads"],
44
- },
45
- {
46
- title: "Schema",
47
- description: "Edit content schema and fields",
48
- href: "/cms/settings/schema",
49
- icon: Code2Icon,
50
- shortcut: "gs",
51
- keywords: ["schema", "fields", "types"],
52
- },
53
- {
54
- title: "Team",
55
- description: "Manage team members and invites",
56
- href: "/cms/settings/team",
57
- icon: UsersIcon,
58
- shortcut: "gt",
59
- keywords: ["team", "users", "members", "invites"],
60
- },
61
- {
62
- title: "Audit Log",
63
- description: "View content activity history",
64
- href: "/cms/settings/audit",
65
- icon: ActivityIcon,
66
- keywords: ["audit", "log", "activity", "history"],
67
- },
68
- ],
69
- },
70
- ];
71
- const CMS_KEY_SEQUENCES = {
72
- gc: "/cms",
73
- gm: "/cms/media",
74
- gs: "/cms/settings/schema",
75
- gt: "/cms/settings/team",
76
- };
77
- // ── Primary nav items ─────────────────────────────────────────────────────────
78
- const NAV_ITEMS = [
79
- {
80
- href: "/cms",
81
- label: "Content",
82
- match: (p) => p === "/cms" || p.startsWith("/cms/collections"),
83
- },
84
- {
85
- href: "/cms/media",
86
- label: "Media",
87
- match: (p) => p.startsWith("/cms/media"),
88
- },
89
- {
90
- href: "/cms/settings/schema",
91
- label: "Schema",
92
- match: (p) => p.startsWith("/cms/settings/schema"),
93
- },
94
- {
95
- href: "/cms/settings/team",
96
- label: "Team",
97
- match: (p) => p.startsWith("/cms/settings/team"),
98
- },
99
- {
100
- href: "/cms/settings/audit",
101
- label: "Audit",
102
- match: (p) => p.startsWith("/cms/settings/audit"),
103
- },
104
- ];
105
- export function CmsAdminHeader({ user, onLogout }) {
106
- const pathname = usePathname();
24
+ // ── basePath-aware helpers ────────────────────────────────────────────────────
25
+ function buildSearchGroups(b) {
26
+ return [
27
+ {
28
+ heading: "Navigation",
29
+ entries: [
30
+ {
31
+ title: "Content",
32
+ description: "Manage collection entries",
33
+ href: b,
34
+ icon: LayoutListIcon,
35
+ shortcut: "gc",
36
+ keywords: ["content", "entries", "collections"],
37
+ },
38
+ {
39
+ title: "Media",
40
+ description: "Upload and browse media files",
41
+ href: `${b}/media`,
42
+ icon: ImageIcon,
43
+ shortcut: "gm",
44
+ keywords: ["media", "images", "files", "uploads"],
45
+ },
46
+ {
47
+ title: "Schema",
48
+ description: "Edit content schema and fields",
49
+ href: `${b}/settings/schema`,
50
+ icon: Code2Icon,
51
+ shortcut: "gs",
52
+ keywords: ["schema", "fields", "types"],
53
+ },
54
+ {
55
+ title: "Team",
56
+ description: "Manage team members and invites",
57
+ href: `${b}/settings/team`,
58
+ icon: UsersIcon,
59
+ shortcut: "gt",
60
+ keywords: ["team", "users", "members", "invites"],
61
+ },
62
+ {
63
+ title: "Audit Log",
64
+ description: "View content activity history",
65
+ href: `${b}/settings/audit`,
66
+ icon: ActivityIcon,
67
+ keywords: ["audit", "log", "activity", "history"],
68
+ },
69
+ ],
70
+ },
71
+ ];
72
+ }
73
+ function buildKeySequences(b) {
74
+ return {
75
+ gc: b,
76
+ gm: `${b}/media`,
77
+ gs: `${b}/settings/schema`,
78
+ gt: `${b}/settings/team`,
79
+ };
80
+ }
81
+ export function CmsAdminHeader({ user, onLogout, basePath = "/cms", brandName = "Airdraft", brandLogoUrl = AIRDRAFT_LOGO_URL, }) {
82
+ usePathname(); // keep subscription for breadcrumb reactivity
83
+ const baseSegment = basePath.replace(/^\//, "").split("/").at(-1) ?? "cms";
107
84
  const navUser = user
108
85
  ? {
109
86
  displayName: user.name ?? user.email.split("@")[0],
110
87
  email: user.email,
111
88
  }
112
89
  : null;
113
- return (_jsx(PageHeader, { segmentConfig: CMS_SEGMENT_CONFIG, skipSegments: ["cms"], logoSlot: _jsxs(Link, { href: "/cms", className: "text-sm flex items-center gap-2 font-semibold whitespace-nowrap", children: [_jsx(Image, { src: "https://aevr.online/favicon.ico", alt: "Airdraft", width: 24, height: 24, className: "rounded-full" }), "Airdraft"] }), searchSlot: _jsx(SearchCommand, { groups: CMS_SEARCH_GROUPS, keySequenceRoutes: CMS_KEY_SEQUENCES, triggerLabel: "Search...", storageKey: "cms:search:recent" }), userSlot: navUser && (_jsx(NavUser, { variant: "header", user: navUser, onLogout: onLogout })), options: {
90
+ return (_jsx(PageHeader, { segmentConfig: CMS_SEGMENT_CONFIG, skipSegments: [baseSegment], logoSlot: _jsxs(Link, { href: basePath, className: "text-sm flex items-center gap-2 font-semibold whitespace-nowrap", children: [_jsx(Image, { src: brandLogoUrl, alt: brandName, width: 24, height: 24, className: "rounded-full" }), brandName] }), searchSlot: _jsx(SearchCommand, { groups: buildSearchGroups(basePath), keySequenceRoutes: buildKeySequences(basePath), triggerLabel: "Search...", storageKey: "cms:search:recent" }), userSlot: navUser && (_jsx(NavUser, { variant: "header", user: navUser, onLogout: onLogout })), options: {
114
91
  showBreadcrumbs: true,
115
92
  showThemeToggle: true,
116
93
  showSearch: true,
@@ -1 +1 @@
1
- {"version":3,"file":"CmsAdminHeader.js","sourceRoot":"","sources":["../../src/components/CmsAdminHeader.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CmsAdminHeader.js","sourceRoot":"","sources":["../../src/components/CmsAdminHeader.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { SchemaEditor } from './SchemaEditor.js';
2
2
  export type { SchemaEditorProps } from './SchemaEditor.js';
3
+ export { CMSAdmin } from './CMSAdmin.js';
4
+ export type { CMSAdminProps } from './CMSAdmin.js';
3
5
  export { SchemaEditorRoot, useSchemaEditorContext } from './SchemaEditorRoot.js';
4
6
  export type { SchemaEditorRootProps, SchemaEditorLabels } from './SchemaEditorRoot.js';
5
7
  export { SchemaEditorSidebar } from './SchemaEditorSidebar.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAChF,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAEtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAGhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAGlE,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,OAAO,EACP,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,aAAa,EACb,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGxD,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAGlD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAChF,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAEtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAGhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAGlE,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,OAAO,EACP,cAAc,EACd,SAAS,EACT,eAAe,EACf,QAAQ,EACR,aAAa,EACb,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGxD,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  // Schema editor — Tier 3 drop-in
2
2
  export { SchemaEditor } from './SchemaEditor.js';
3
+ // CMS Admin — Tier 3 drop-in catch-all
4
+ export { CMSAdmin } from './CMSAdmin.js';
3
5
  // Schema editor — Tier 2 composable slots
4
6
  export { SchemaEditorRoot, useSchemaEditorContext } from './SchemaEditorRoot.js';
5
7
  export { SchemaEditorSidebar } from './SchemaEditorSidebar.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,0CAA0C;AAC1C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,2BAA2B;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,uBAAuB,CAAA;AAqB9B,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,wGAAwG;AACxG,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,uCAAuC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,0CAA0C;AAC1C,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,2BAA2B;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxD,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,cAAc,GACf,MAAM,uBAAuB,CAAA;AAqB9B,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,wGAAwG;AACxG,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@airdraft/react-ui",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Airdraft React UI — schema editor and team management components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",