@actuate-media/cms-admin 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.
Files changed (295) hide show
  1. package/dist/AdminRoot.d.ts +21 -0
  2. package/dist/AdminRoot.d.ts.map +1 -0
  3. package/dist/AdminRoot.js +136 -0
  4. package/dist/AdminRoot.js.map +1 -0
  5. package/dist/components/Breadcrumbs.d.ts +6 -0
  6. package/dist/components/Breadcrumbs.d.ts.map +1 -0
  7. package/dist/components/Breadcrumbs.js +52 -0
  8. package/dist/components/Breadcrumbs.js.map +1 -0
  9. package/dist/components/CommandPalette.d.ts +7 -0
  10. package/dist/components/CommandPalette.d.ts.map +1 -0
  11. package/dist/components/CommandPalette.js +152 -0
  12. package/dist/components/CommandPalette.js.map +1 -0
  13. package/dist/components/ErrorBoundary.d.ts +17 -0
  14. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  15. package/dist/components/ErrorBoundary.js +24 -0
  16. package/dist/components/ErrorBoundary.js.map +1 -0
  17. package/dist/components/FocalPointPicker.d.ts +9 -0
  18. package/dist/components/FocalPointPicker.d.ts.map +1 -0
  19. package/dist/components/FocalPointPicker.js +19 -0
  20. package/dist/components/FocalPointPicker.js.map +1 -0
  21. package/dist/components/FolderTree.d.ts +28 -0
  22. package/dist/components/FolderTree.d.ts.map +1 -0
  23. package/dist/components/FolderTree.js +198 -0
  24. package/dist/components/FolderTree.js.map +1 -0
  25. package/dist/components/LivePreview.d.ts +10 -0
  26. package/dist/components/LivePreview.d.ts.map +1 -0
  27. package/dist/components/LivePreview.js +62 -0
  28. package/dist/components/LivePreview.js.map +1 -0
  29. package/dist/components/LocaleProvider.d.ts +28 -0
  30. package/dist/components/LocaleProvider.d.ts.map +1 -0
  31. package/dist/components/LocaleProvider.js +29 -0
  32. package/dist/components/LocaleProvider.js.map +1 -0
  33. package/dist/components/LocaleSwitcher.d.ts +2 -0
  34. package/dist/components/LocaleSwitcher.d.ts.map +1 -0
  35. package/dist/components/LocaleSwitcher.js +13 -0
  36. package/dist/components/LocaleSwitcher.js.map +1 -0
  37. package/dist/components/MediaPickerModal.d.ts +8 -0
  38. package/dist/components/MediaPickerModal.d.ts.map +1 -0
  39. package/dist/components/MediaPickerModal.js +53 -0
  40. package/dist/components/MediaPickerModal.js.map +1 -0
  41. package/dist/components/PresenceIndicator.d.ts +7 -0
  42. package/dist/components/PresenceIndicator.d.ts.map +1 -0
  43. package/dist/components/PresenceIndicator.js +37 -0
  44. package/dist/components/PresenceIndicator.js.map +1 -0
  45. package/dist/components/SEOPanel.d.ts +26 -0
  46. package/dist/components/SEOPanel.d.ts.map +1 -0
  47. package/dist/components/SEOPanel.js +249 -0
  48. package/dist/components/SEOPanel.js.map +1 -0
  49. package/dist/components/ThemeProvider.d.ts +13 -0
  50. package/dist/components/ThemeProvider.d.ts.map +1 -0
  51. package/dist/components/ThemeProvider.js +62 -0
  52. package/dist/components/ThemeProvider.js.map +1 -0
  53. package/dist/components/TipTapEditor.d.ts +9 -0
  54. package/dist/components/TipTapEditor.d.ts.map +1 -0
  55. package/dist/components/TipTapEditor.js +167 -0
  56. package/dist/components/TipTapEditor.js.map +1 -0
  57. package/dist/components/VersionHistory.d.ts +9 -0
  58. package/dist/components/VersionHistory.d.ts.map +1 -0
  59. package/dist/components/VersionHistory.js +70 -0
  60. package/dist/components/VersionHistory.js.map +1 -0
  61. package/dist/components/ui/Avatar.d.ts +9 -0
  62. package/dist/components/ui/Avatar.d.ts.map +1 -0
  63. package/dist/components/ui/Avatar.js +21 -0
  64. package/dist/components/ui/Avatar.js.map +1 -0
  65. package/dist/components/ui/Badge.d.ts +5 -0
  66. package/dist/components/ui/Badge.d.ts.map +1 -0
  67. package/dist/components/ui/Badge.js +17 -0
  68. package/dist/components/ui/Badge.js.map +1 -0
  69. package/dist/components/ui/Button.d.ts +12 -0
  70. package/dist/components/ui/Button.d.ts.map +1 -0
  71. package/dist/components/ui/Button.js +17 -0
  72. package/dist/components/ui/Button.js.map +1 -0
  73. package/dist/components/ui/CommandPalette.d.ts +14 -0
  74. package/dist/components/ui/CommandPalette.d.ts.map +1 -0
  75. package/dist/components/ui/CommandPalette.js +52 -0
  76. package/dist/components/ui/CommandPalette.js.map +1 -0
  77. package/dist/components/ui/ConfirmDialog.d.ts +12 -0
  78. package/dist/components/ui/ConfirmDialog.d.ts.map +1 -0
  79. package/dist/components/ui/ConfirmDialog.js +11 -0
  80. package/dist/components/ui/ConfirmDialog.js.map +1 -0
  81. package/dist/components/ui/DataTable.d.ts +30 -0
  82. package/dist/components/ui/DataTable.d.ts.map +1 -0
  83. package/dist/components/ui/DataTable.js +40 -0
  84. package/dist/components/ui/DataTable.js.map +1 -0
  85. package/dist/components/ui/EmptyState.d.ts +10 -0
  86. package/dist/components/ui/EmptyState.d.ts.map +1 -0
  87. package/dist/components/ui/EmptyState.js +6 -0
  88. package/dist/components/ui/EmptyState.js.map +1 -0
  89. package/dist/components/ui/Modal.d.ts +10 -0
  90. package/dist/components/ui/Modal.d.ts.map +1 -0
  91. package/dist/components/ui/Modal.js +19 -0
  92. package/dist/components/ui/Modal.js.map +1 -0
  93. package/dist/components/ui/Pagination.d.ts +9 -0
  94. package/dist/components/ui/Pagination.d.ts.map +1 -0
  95. package/dist/components/ui/Pagination.js +21 -0
  96. package/dist/components/ui/Pagination.js.map +1 -0
  97. package/dist/components/ui/SearchInput.d.ts +7 -0
  98. package/dist/components/ui/SearchInput.d.ts.map +1 -0
  99. package/dist/components/ui/SearchInput.js +6 -0
  100. package/dist/components/ui/SearchInput.js.map +1 -0
  101. package/dist/components/ui/Skeleton.d.ts +9 -0
  102. package/dist/components/ui/Skeleton.d.ts.map +1 -0
  103. package/dist/components/ui/Skeleton.js +11 -0
  104. package/dist/components/ui/Skeleton.js.map +1 -0
  105. package/dist/components/ui/Toast.d.ts +18 -0
  106. package/dist/components/ui/Toast.d.ts.map +1 -0
  107. package/dist/components/ui/Toast.js +29 -0
  108. package/dist/components/ui/Toast.js.map +1 -0
  109. package/dist/components/ui/index.d.ts +25 -0
  110. package/dist/components/ui/index.d.ts.map +1 -0
  111. package/dist/components/ui/index.js +13 -0
  112. package/dist/components/ui/index.js.map +1 -0
  113. package/dist/fields/ArrayField.d.ts +9 -0
  114. package/dist/fields/ArrayField.d.ts.map +1 -0
  115. package/dist/fields/ArrayField.js +21 -0
  116. package/dist/fields/ArrayField.js.map +1 -0
  117. package/dist/fields/BlockBuilderField.d.ts +16 -0
  118. package/dist/fields/BlockBuilderField.d.ts.map +1 -0
  119. package/dist/fields/BlockBuilderField.js +110 -0
  120. package/dist/fields/BlockBuilderField.js.map +1 -0
  121. package/dist/fields/DateField.d.ts +9 -0
  122. package/dist/fields/DateField.d.ts.map +1 -0
  123. package/dist/fields/DateField.js +6 -0
  124. package/dist/fields/DateField.js.map +1 -0
  125. package/dist/fields/FieldRenderer.d.ts +22 -0
  126. package/dist/fields/FieldRenderer.d.ts.map +1 -0
  127. package/dist/fields/FieldRenderer.js +38 -0
  128. package/dist/fields/FieldRenderer.js.map +1 -0
  129. package/dist/fields/GroupField.d.ts +8 -0
  130. package/dist/fields/GroupField.d.ts.map +1 -0
  131. package/dist/fields/GroupField.js +8 -0
  132. package/dist/fields/GroupField.js.map +1 -0
  133. package/dist/fields/MediaField.d.ts +13 -0
  134. package/dist/fields/MediaField.d.ts.map +1 -0
  135. package/dist/fields/MediaField.js +6 -0
  136. package/dist/fields/MediaField.js.map +1 -0
  137. package/dist/fields/NavBuilderField.d.ts +15 -0
  138. package/dist/fields/NavBuilderField.d.ts.map +1 -0
  139. package/dist/fields/NavBuilderField.js +19 -0
  140. package/dist/fields/NavBuilderField.js.map +1 -0
  141. package/dist/fields/NumberField.d.ts +12 -0
  142. package/dist/fields/NumberField.d.ts.map +1 -0
  143. package/dist/fields/NumberField.js +6 -0
  144. package/dist/fields/NumberField.js.map +1 -0
  145. package/dist/fields/RelationshipField.d.ts +13 -0
  146. package/dist/fields/RelationshipField.d.ts.map +1 -0
  147. package/dist/fields/RelationshipField.js +119 -0
  148. package/dist/fields/RelationshipField.js.map +1 -0
  149. package/dist/fields/RichTextField.d.ts +9 -0
  150. package/dist/fields/RichTextField.d.ts.map +1 -0
  151. package/dist/fields/RichTextField.js +7 -0
  152. package/dist/fields/RichTextField.js.map +1 -0
  153. package/dist/fields/SelectField.d.ts +11 -0
  154. package/dist/fields/SelectField.d.ts.map +1 -0
  155. package/dist/fields/SelectField.js +31 -0
  156. package/dist/fields/SelectField.js.map +1 -0
  157. package/dist/fields/SlugField.d.ts +10 -0
  158. package/dist/fields/SlugField.d.ts.map +1 -0
  159. package/dist/fields/SlugField.js +15 -0
  160. package/dist/fields/SlugField.js.map +1 -0
  161. package/dist/fields/TextField.d.ts +11 -0
  162. package/dist/fields/TextField.d.ts.map +1 -0
  163. package/dist/fields/TextField.js +8 -0
  164. package/dist/fields/TextField.js.map +1 -0
  165. package/dist/fields/ToggleField.d.ts +8 -0
  166. package/dist/fields/ToggleField.d.ts.map +1 -0
  167. package/dist/fields/ToggleField.js +6 -0
  168. package/dist/fields/ToggleField.js.map +1 -0
  169. package/dist/fields/block-types.d.ts +18 -0
  170. package/dist/fields/block-types.d.ts.map +1 -0
  171. package/dist/fields/block-types.js +88 -0
  172. package/dist/fields/block-types.js.map +1 -0
  173. package/dist/fields/index.d.ts +18 -0
  174. package/dist/fields/index.d.ts.map +1 -0
  175. package/dist/fields/index.js +16 -0
  176. package/dist/fields/index.js.map +1 -0
  177. package/dist/hooks/useContentLock.d.ts +12 -0
  178. package/dist/hooks/useContentLock.d.ts.map +1 -0
  179. package/dist/hooks/useContentLock.js +38 -0
  180. package/dist/hooks/useContentLock.js.map +1 -0
  181. package/dist/hooks/useDebounce.d.ts +2 -0
  182. package/dist/hooks/useDebounce.d.ts.map +1 -0
  183. package/dist/hooks/useDebounce.js +11 -0
  184. package/dist/hooks/useDebounce.js.map +1 -0
  185. package/dist/hooks/useKeyboardShortcuts.d.ts +6 -0
  186. package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
  187. package/dist/hooks/useKeyboardShortcuts.js +26 -0
  188. package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
  189. package/dist/index.d.ts +52 -0
  190. package/dist/index.d.ts.map +1 -0
  191. package/dist/index.js +39 -0
  192. package/dist/index.js.map +1 -0
  193. package/dist/layout/Header.d.ts +7 -0
  194. package/dist/layout/Header.d.ts.map +1 -0
  195. package/dist/layout/Header.js +18 -0
  196. package/dist/layout/Header.js.map +1 -0
  197. package/dist/layout/Layout.d.ts +10 -0
  198. package/dist/layout/Layout.d.ts.map +1 -0
  199. package/dist/layout/Layout.js +25 -0
  200. package/dist/layout/Layout.js.map +1 -0
  201. package/dist/layout/Sidebar.d.ts +9 -0
  202. package/dist/layout/Sidebar.d.ts.map +1 -0
  203. package/dist/layout/Sidebar.js +63 -0
  204. package/dist/layout/Sidebar.js.map +1 -0
  205. package/dist/lib/api.d.ts +8 -0
  206. package/dist/lib/api.d.ts.map +1 -0
  207. package/dist/lib/api.js +59 -0
  208. package/dist/lib/api.js.map +1 -0
  209. package/dist/lib/search.d.ts +11 -0
  210. package/dist/lib/search.d.ts.map +1 -0
  211. package/dist/lib/search.js +46 -0
  212. package/dist/lib/search.js.map +1 -0
  213. package/dist/lib/useApiData.d.ts +8 -0
  214. package/dist/lib/useApiData.d.ts.map +1 -0
  215. package/dist/lib/useApiData.js +36 -0
  216. package/dist/lib/useApiData.js.map +1 -0
  217. package/dist/lib/utils.d.ts +3 -0
  218. package/dist/lib/utils.d.ts.map +1 -0
  219. package/dist/lib/utils.js +6 -0
  220. package/dist/lib/utils.js.map +1 -0
  221. package/dist/router/index.d.ts +10 -0
  222. package/dist/router/index.d.ts.map +1 -0
  223. package/dist/router/index.js +61 -0
  224. package/dist/router/index.js.map +1 -0
  225. package/dist/views/CollectionList.d.ts +7 -0
  226. package/dist/views/CollectionList.d.ts.map +1 -0
  227. package/dist/views/CollectionList.js +107 -0
  228. package/dist/views/CollectionList.js.map +1 -0
  229. package/dist/views/Dashboard.d.ts +5 -0
  230. package/dist/views/Dashboard.d.ts.map +1 -0
  231. package/dist/views/Dashboard.js +17 -0
  232. package/dist/views/Dashboard.js.map +1 -0
  233. package/dist/views/DocumentEdit.d.ts +8 -0
  234. package/dist/views/DocumentEdit.d.ts.map +1 -0
  235. package/dist/views/DocumentEdit.js +210 -0
  236. package/dist/views/DocumentEdit.js.map +1 -0
  237. package/dist/views/FormEditor.d.ts +6 -0
  238. package/dist/views/FormEditor.d.ts.map +1 -0
  239. package/dist/views/FormEditor.js +126 -0
  240. package/dist/views/FormEditor.js.map +1 -0
  241. package/dist/views/FormSubmissions.d.ts +6 -0
  242. package/dist/views/FormSubmissions.d.ts.map +1 -0
  243. package/dist/views/FormSubmissions.js +88 -0
  244. package/dist/views/FormSubmissions.js.map +1 -0
  245. package/dist/views/Forms.d.ts +5 -0
  246. package/dist/views/Forms.d.ts.map +1 -0
  247. package/dist/views/Forms.js +24 -0
  248. package/dist/views/Forms.js.map +1 -0
  249. package/dist/views/Login.d.ts +10 -0
  250. package/dist/views/Login.d.ts.map +1 -0
  251. package/dist/views/Login.js +83 -0
  252. package/dist/views/Login.js.map +1 -0
  253. package/dist/views/MediaBrowser.d.ts +5 -0
  254. package/dist/views/MediaBrowser.d.ts.map +1 -0
  255. package/dist/views/MediaBrowser.js +245 -0
  256. package/dist/views/MediaBrowser.js.map +1 -0
  257. package/dist/views/PageEditor.d.ts +6 -0
  258. package/dist/views/PageEditor.d.ts.map +1 -0
  259. package/dist/views/PageEditor.js +74 -0
  260. package/dist/views/PageEditor.js.map +1 -0
  261. package/dist/views/Pages.d.ts +5 -0
  262. package/dist/views/Pages.d.ts.map +1 -0
  263. package/dist/views/Pages.js +127 -0
  264. package/dist/views/Pages.js.map +1 -0
  265. package/dist/views/PostEditor.d.ts +6 -0
  266. package/dist/views/PostEditor.d.ts.map +1 -0
  267. package/dist/views/PostEditor.js +79 -0
  268. package/dist/views/PostEditor.js.map +1 -0
  269. package/dist/views/Posts.d.ts +5 -0
  270. package/dist/views/Posts.d.ts.map +1 -0
  271. package/dist/views/Posts.js +67 -0
  272. package/dist/views/Posts.js.map +1 -0
  273. package/dist/views/Redirects.d.ts +5 -0
  274. package/dist/views/Redirects.d.ts.map +1 -0
  275. package/dist/views/Redirects.js +79 -0
  276. package/dist/views/Redirects.js.map +1 -0
  277. package/dist/views/SEO.d.ts +6 -0
  278. package/dist/views/SEO.d.ts.map +1 -0
  279. package/dist/views/SEO.js +120 -0
  280. package/dist/views/SEO.js.map +1 -0
  281. package/dist/views/Settings.d.ts +5 -0
  282. package/dist/views/Settings.d.ts.map +1 -0
  283. package/dist/views/Settings.js +95 -0
  284. package/dist/views/Settings.js.map +1 -0
  285. package/dist/views/SetupWizard.d.ts +13 -0
  286. package/dist/views/SetupWizard.d.ts.map +1 -0
  287. package/dist/views/SetupWizard.js +68 -0
  288. package/dist/views/SetupWizard.js.map +1 -0
  289. package/dist/views/Users.d.ts +5 -0
  290. package/dist/views/Users.d.ts.map +1 -0
  291. package/dist/views/Users.js +69 -0
  292. package/dist/views/Users.js.map +1 -0
  293. package/package.json +71 -0
  294. package/src/styles/tailwind.css +2 -0
  295. package/src/styles/theme.css +175 -0
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import { useState, useCallback, useEffect, useRef } from 'react';
3
+ function stripBase(pathname, basePath) {
4
+ if (pathname.startsWith(basePath)) {
5
+ const rest = pathname.slice(basePath.length);
6
+ return rest === '' || rest === '/' ? '/' : rest.startsWith('/') ? rest : `/${rest}`;
7
+ }
8
+ return '/';
9
+ }
10
+ export function useAdminRouter(basePath = '/admin', serverPath = '/') {
11
+ const [currentPath, setCurrentPath] = useState(serverPath);
12
+ const baseRef = useRef(basePath);
13
+ baseRef.current = basePath;
14
+ useEffect(() => {
15
+ if (typeof window !== 'undefined') {
16
+ const browserPath = stripBase(window.location.pathname, basePath);
17
+ if (browserPath !== currentPath) {
18
+ setCurrentPath(browserPath);
19
+ }
20
+ }
21
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
22
+ useEffect(() => {
23
+ function onPopState() {
24
+ setCurrentPath(stripBase(window.location.pathname, baseRef.current));
25
+ }
26
+ window.addEventListener('popstate', onPopState);
27
+ return () => window.removeEventListener('popstate', onPopState);
28
+ }, []);
29
+ const navigate = useCallback((path) => {
30
+ const normalizedPath = path.startsWith('/') ? path : `/${path}`;
31
+ setCurrentPath(normalizedPath);
32
+ const fullUrl = normalizedPath === '/'
33
+ ? baseRef.current
34
+ : `${baseRef.current}${normalizedPath}`;
35
+ window.history.pushState({ adminPath: normalizedPath }, '', fullUrl);
36
+ }, []);
37
+ const matchRoute = useCallback((pattern) => {
38
+ const patternParts = pattern.split('/').filter(Boolean);
39
+ const pathParts = currentPath.split('/').filter(Boolean);
40
+ if (pattern === '/' && pathParts.length === 0) {
41
+ return {};
42
+ }
43
+ if (patternParts.length !== pathParts.length) {
44
+ return null;
45
+ }
46
+ const params = {};
47
+ for (let i = 0; i < patternParts.length; i++) {
48
+ const patternPart = patternParts[i];
49
+ const pathPart = pathParts[i];
50
+ if (patternPart.startsWith(':')) {
51
+ params[patternPart.slice(1)] = pathPart;
52
+ }
53
+ else if (patternPart !== pathPart) {
54
+ return null;
55
+ }
56
+ }
57
+ return params;
58
+ }, [currentPath]);
59
+ return { currentPath, navigate, matchRoute };
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface CollectionListProps {
2
+ collectionSlug: string;
3
+ config: any;
4
+ onNavigate: (path: string) => void;
5
+ }
6
+ export declare function CollectionList({ collectionSlug, config, onNavigate }: CollectionListProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=CollectionList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionList.d.ts","sourceRoot":"","sources":["../../src/views/CollectionList.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAwCD,wBAAgB,cAAc,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,mBAAmB,2CAyNzF"}
@@ -0,0 +1,107 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Search, Plus, Trash2, ChevronLeft, ChevronRight, Loader2, FileText, MoreHorizontal } from 'lucide-react';
4
+ import { useState, useMemo, useCallback, useEffect, useRef } from 'react';
5
+ import { toast } from 'sonner';
6
+ import { cmsApi } from '../lib/api.js';
7
+ import { useApiData } from '../lib/useApiData.js';
8
+ function resolveLabel(config, slug) {
9
+ const fallback = { singular: slug, plural: slug };
10
+ if (!config?.collections)
11
+ return fallback;
12
+ const list = Array.isArray(config.collections)
13
+ ? config.collections
14
+ : Object.values(config.collections);
15
+ const match = list.find((c) => c.slug === slug);
16
+ return match?.labels ?? fallback;
17
+ }
18
+ function statusColor(status) {
19
+ switch (status?.toUpperCase()) {
20
+ case 'PUBLISHED': return 'var(--actuate-success-bg, #dcfce7)';
21
+ case 'DRAFT': return 'var(--actuate-muted-bg, #f3f4f6)';
22
+ case 'ARCHIVED': return 'var(--actuate-warning-bg, #fef9c3)';
23
+ case 'SCHEDULED': return 'var(--actuate-info-bg, #dbeafe)';
24
+ default: return 'var(--actuate-muted-bg, #f3f4f6)';
25
+ }
26
+ }
27
+ function statusText(status) {
28
+ switch (status?.toUpperCase()) {
29
+ case 'PUBLISHED': return 'var(--actuate-success-text, #166534)';
30
+ case 'DRAFT': return 'var(--actuate-muted-text, #374151)';
31
+ case 'ARCHIVED': return 'var(--actuate-warning-text, #854d0e)';
32
+ case 'SCHEDULED': return 'var(--actuate-info-text, #1e40af)';
33
+ default: return 'var(--actuate-muted-text, #374151)';
34
+ }
35
+ }
36
+ function formatDate(d) {
37
+ if (!d)
38
+ return '—';
39
+ return new Date(d).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });
40
+ }
41
+ export function CollectionList({ collectionSlug, config, onNavigate }) {
42
+ const labels = useMemo(() => resolveLabel(config, collectionSlug), [config, collectionSlug]);
43
+ const [page, setPage] = useState(1);
44
+ const [search, setSearch] = useState('');
45
+ const [debouncedSearch, setDebouncedSearch] = useState('');
46
+ const [sort, setSort] = useState(null);
47
+ const [order, setOrder] = useState('asc');
48
+ const [selected, setSelected] = useState(new Set());
49
+ const searchTimer = useRef(undefined);
50
+ useEffect(() => {
51
+ clearTimeout(searchTimer.current);
52
+ searchTimer.current = setTimeout(() => {
53
+ setDebouncedSearch(search);
54
+ setPage(1);
55
+ }, 300);
56
+ return () => clearTimeout(searchTimer.current);
57
+ }, [search]);
58
+ const endpoint = useMemo(() => {
59
+ let url = `/collections/${collectionSlug}?page=${page}&pageSize=25`;
60
+ if (debouncedSearch)
61
+ url += `&search=${encodeURIComponent(debouncedSearch)}`;
62
+ if (sort)
63
+ url += `&sort=${sort}&order=${order}`;
64
+ return url;
65
+ }, [collectionSlug, page, debouncedSearch, sort, order]);
66
+ const { data, loading, error, refetch } = useApiData(endpoint);
67
+ const docs = data?.docs ?? [];
68
+ const total = data?.total ?? 0;
69
+ const totalPages = Math.max(1, Math.ceil(total / 25));
70
+ useEffect(() => { setPage(1); setSelected(new Set()); setSearch(''); }, [collectionSlug]);
71
+ const toggleSort = useCallback((field) => {
72
+ setSort(prev => {
73
+ if (prev === field) {
74
+ setOrder(o => o === 'asc' ? 'desc' : 'asc');
75
+ return field;
76
+ }
77
+ setOrder('asc');
78
+ return field;
79
+ });
80
+ }, []);
81
+ const toggleSelect = (id) => setSelected(prev => { const s = new Set(prev); s.has(id) ? s.delete(id) : s.add(id); return s; });
82
+ const toggleAll = (checked) => setSelected(checked ? new Set(docs.map((d) => String(d.id))) : new Set());
83
+ const bulkAction = async (action) => {
84
+ const ids = [...selected];
85
+ for (const id of ids) {
86
+ if (action === 'delete') {
87
+ await cmsApi(`/collections/${collectionSlug}/${id}`, { method: 'DELETE' });
88
+ }
89
+ else {
90
+ await cmsApi(`/collections/${collectionSlug}/${id}`, {
91
+ method: 'PUT',
92
+ body: JSON.stringify({ status: action === 'publish' ? 'PUBLISHED' : 'DRAFT' }),
93
+ });
94
+ }
95
+ }
96
+ const verb = action === 'delete' ? 'deleted' : action === 'publish' ? 'published' : 'unpublished';
97
+ toast.success(`${ids.length} ${ids.length === 1 ? labels.singular : labels.plural} ${verb}`);
98
+ setSelected(new Set());
99
+ refetch();
100
+ };
101
+ const SortCol = ({ field, children }) => (_jsxs("button", { type: "button", onClick: () => toggleSort(field), className: "flex items-center gap-1 text-xs font-medium hover:opacity-80 transition-opacity", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: [children, sort === field && _jsx("span", { children: order === 'asc' ? '↑' : '↓' })] }));
102
+ if (loading && docs.length === 0) {
103
+ return (_jsx("div", { className: "p-4 flex items-center justify-center h-64", children: _jsx(Loader2, { className: "w-6 h-6 animate-spin", style: { color: 'var(--actuate-primary, #2563eb)' } }) }));
104
+ }
105
+ return (_jsxs("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8 h-full flex flex-col", children: [_jsxs("div", { className: "flex items-center justify-between mb-4 gap-3 flex-wrap", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl sm:text-2xl font-semibold", style: { color: 'var(--actuate-text, #111827)' }, children: labels.plural }), _jsxs("p", { className: "text-sm", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: [total, " total"] })] }), _jsxs("button", { onClick: () => onNavigate(`/${collectionSlug}/new`), className: "flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors", style: { background: 'var(--actuate-primary, #2563eb)' }, children: [_jsx(Plus, { className: "w-4 h-4" }), " New ", labels.singular] })] }), _jsxs("div", { className: "relative mb-4", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4", style: { color: 'var(--actuate-text-muted, #9ca3af)' } }), _jsx("input", { type: "text", placeholder: `Search ${labels.plural.toLowerCase()}...`, value: search, onChange: e => setSearch(e.target.value), className: "w-full pl-9 pr-3 py-2 text-sm rounded-lg border focus:outline-none focus:ring-2", style: { borderColor: 'var(--actuate-border, #d1d5db)', color: 'var(--actuate-text, #111827)' } })] }), selected.size > 0 && (_jsxs("div", { className: "rounded-lg p-3 mb-4 flex flex-wrap items-center justify-between gap-2", style: { background: 'var(--actuate-info-bg, #eff6ff)', borderColor: 'var(--actuate-info-border, #bfdbfe)', borderWidth: 1, borderStyle: 'solid' }, children: [_jsxs("span", { className: "text-sm", style: { color: 'var(--actuate-info-text, #1e40af)' }, children: [selected.size, " selected"] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { onClick: () => bulkAction('publish'), className: "px-3 py-1.5 text-sm text-white rounded-lg", style: { background: 'var(--actuate-success, #16a34a)' }, children: "Publish" }), _jsx("button", { onClick: () => bulkAction('unpublish'), className: "px-3 py-1.5 text-sm text-white rounded-lg", style: { background: 'var(--actuate-warning, #ca8a04)' }, children: "Unpublish" }), _jsxs("button", { onClick: () => bulkAction('delete'), className: "px-3 py-1.5 text-sm text-white rounded-lg", style: { background: 'var(--actuate-danger, #dc2626)' }, children: [_jsx(Trash2, { className: "w-3.5 h-3.5 inline -mt-0.5 mr-1" }), "Delete"] })] })] })), error && (_jsxs("div", { className: "rounded-lg p-3 mb-4 text-sm", style: { background: 'var(--actuate-danger-bg, #fef2f2)', color: 'var(--actuate-danger-text, #991b1b)' }, children: [error, " \u2014 ", _jsx("button", { onClick: refetch, className: "underline", children: "retry" })] })), docs.length === 0 && !loading ? (_jsxs("div", { className: "flex-1 flex flex-col items-center justify-center rounded-lg border p-8", style: { borderColor: 'var(--actuate-border, #d1d5db)', color: 'var(--actuate-text-secondary, #6b7280)' }, children: [_jsx(FileText, { className: "w-10 h-10 mb-3 opacity-40" }), _jsxs("p", { className: "text-sm mb-3", children: ["No ", labels.plural.toLowerCase(), " found"] }), _jsxs("button", { onClick: () => onNavigate(`/${collectionSlug}/new`), className: "px-4 py-2 text-sm text-white rounded-lg", style: { background: 'var(--actuate-primary, #2563eb)' }, children: ["Create ", labels.singular] })] })) : (_jsx("div", { className: "flex-1 rounded-lg border overflow-auto", style: { borderColor: 'var(--actuate-border, #d1d5db)' }, children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "sticky top-0", style: { background: 'var(--actuate-surface-alt, #f9fafb)', borderBottom: '1px solid var(--actuate-border, #d1d5db)' }, children: _jsxs("tr", { children: [_jsx("th", { className: "w-10 px-3 py-2 text-left", children: _jsx("input", { type: "checkbox", checked: selected.size === docs.length && docs.length > 0, onChange: e => toggleAll(e.target.checked), className: "rounded" }) }), _jsx("th", { className: "px-3 py-2 text-left", children: _jsx(SortCol, { field: "title", children: "Title" }) }), _jsx("th", { className: "px-3 py-2 text-left", children: _jsx(SortCol, { field: "status", children: "Status" }) }), _jsx("th", { className: "px-3 py-2 text-left", children: _jsx(SortCol, { field: "updatedAt", children: "Updated" }) }), _jsx("th", { className: "px-3 py-2 text-left text-xs font-medium", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: "Actions" })] }) }), _jsx("tbody", { children: docs.map((doc) => (_jsxs("tr", { className: "transition-colors hover:opacity-95", style: { borderBottom: '1px solid var(--actuate-border, #e5e7eb)' }, children: [_jsx("td", { className: "px-3 py-2", children: _jsx("input", { type: "checkbox", checked: selected.has(String(doc.id)), onChange: () => toggleSelect(String(doc.id)), className: "rounded" }) }), _jsx("td", { className: "px-3 py-2", children: _jsx("button", { type: "button", onClick: () => onNavigate(`/${collectionSlug}/${doc.id}`), className: "font-medium text-left hover:underline", style: { color: 'var(--actuate-text, #111827)' }, children: doc.title || doc.name || `#${doc.id}` }) }), _jsx("td", { className: "px-3 py-2", children: _jsx("span", { className: "inline-block px-2 py-0.5 rounded-full text-xs font-medium", style: { background: statusColor(doc.status), color: statusText(doc.status) }, children: doc.status ?? 'DRAFT' }) }), _jsx("td", { className: "px-3 py-2", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: formatDate(doc.updatedAt) }), _jsx("td", { className: "px-3 py-2", children: _jsx("button", { type: "button", onClick: () => onNavigate(`/${collectionSlug}/${doc.id}`), className: "p-1.5 rounded hover:opacity-75 transition-opacity", title: "Edit", children: _jsx(MoreHorizontal, { className: "w-4 h-4", style: { color: 'var(--actuate-text-secondary, #6b7280)' } }) }) })] }, doc.id))) })] }) })), totalPages > 1 && (_jsxs("div", { className: "flex items-center justify-between mt-4 text-sm", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: [_jsxs("span", { children: ["Page ", page, " of ", totalPages] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs("button", { disabled: page <= 1, onClick: () => setPage(p => p - 1), className: "flex items-center gap-1 px-3 py-1.5 rounded-lg border disabled:opacity-40 transition-opacity", style: { borderColor: 'var(--actuate-border, #d1d5db)' }, children: [_jsx(ChevronLeft, { className: "w-4 h-4" }), " Previous"] }), _jsxs("button", { disabled: page >= totalPages, onClick: () => setPage(p => p + 1), className: "flex items-center gap-1 px-3 py-1.5 rounded-lg border disabled:opacity-40 transition-opacity", style: { borderColor: 'var(--actuate-border, #d1d5db)' }, children: ["Next ", _jsx(ChevronRight, { className: "w-4 h-4" })] })] })] }))] }));
106
+ }
107
+ //# sourceMappingURL=CollectionList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionList.js","sourceRoot":"","sources":["../../src/views/CollectionList.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAWlD,SAAS,YAAY,CAAC,MAAW,EAAE,IAAY;IAC7C,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,WAAW;QAAE,OAAO,QAAQ,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;QAC5C,CAAC,CAAC,MAAM,CAAC,WAAW;QACpB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,KAAK,GAAI,IAAc,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChE,OAAO,KAAK,EAAE,MAAM,IAAI,QAAQ,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,QAAQ,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;QAC9B,KAAK,WAAW,CAAC,CAAC,OAAO,oCAAoC,CAAC;QAC9D,KAAK,OAAO,CAAC,CAAC,OAAO,kCAAkC,CAAC;QACxD,KAAK,UAAU,CAAC,CAAC,OAAO,oCAAoC,CAAC;QAC7D,KAAK,WAAW,CAAC,CAAC,OAAO,iCAAiC,CAAC;QAC3D,OAAO,CAAC,CAAC,OAAO,kCAAkC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,QAAQ,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;QAC9B,KAAK,WAAW,CAAC,CAAC,OAAO,sCAAsC,CAAC;QAChE,KAAK,OAAO,CAAC,CAAC,OAAO,oCAAoC,CAAC;QAC1D,KAAK,UAAU,CAAC,CAAC,OAAO,sCAAsC,CAAC;QAC/D,KAAK,WAAW,CAAC,CAAC,OAAO,mCAAmC,CAAC;QAC7D,OAAO,CAAC,CAAC,OAAO,oCAAoC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAqB;IACvC,IAAI,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAuB;IACxF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAE7F,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAY,KAAK,CAAC,CAAC;IACrD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,MAAM,CAAgC,SAAS,CAAC,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,GAAG,GAAG,gBAAgB,cAAc,SAAS,IAAI,cAAc,CAAC;QACpE,IAAI,eAAe;YAAE,GAAG,IAAI,WAAW,kBAAkB,CAAC,eAAe,CAAC,EAAE,CAAC;QAC7E,IAAI,IAAI;YAAE,GAAG,IAAI,SAAS,IAAI,UAAU,KAAK,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAiC,QAAQ,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1F,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,KAAgB,EAAE,EAAE;QAClD,OAAO,CAAC,IAAI,CAAC,EAAE;YACb,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACnB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACf,CAAC;YACD,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpG,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,EAAE,CACrC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAEjF,MAAM,UAAU,GAAG,KAAK,EAAE,MAA0C,EAAE,EAAE;QACtE,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC1B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,MAAM,CAAC,gBAAgB,cAAc,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,CAAC,gBAAgB,cAAc,IAAI,EAAE,EAAE,EAAE;oBACnD,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;QAClG,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7F,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAA0C,EAAE,EAAE,CAAC,CAC/E,kBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EACpD,SAAS,EAAC,iFAAiF,EAC3F,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,aACzD,QAAQ,EACR,IAAI,KAAK,KAAK,IAAI,yBAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAQ,IACtD,CACV,CAAC;IAEF,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CACL,cAAK,SAAS,EAAC,2CAA2C,YACxD,KAAC,OAAO,IAAC,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,GAAI,GAC7F,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,8CAA8C,aAE3D,eAAK,SAAS,EAAC,wDAAwD,aACrE,0BACE,aAAI,SAAS,EAAC,mCAAmC,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,YAC/F,MAAM,CAAC,MAAM,GACX,EACL,aAAG,SAAS,EAAC,SAAS,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,aAAG,KAAK,cAAW,IAChG,EACN,kBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,cAAc,MAAM,CAAC,EACzD,SAAS,EAAC,+FAA+F,EACzG,KAAK,EAAE,EAAE,UAAU,EAAE,iCAAiC,EAAE,aACxD,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,WAAM,MAAM,CAAC,QAAQ,IAC1C,IACL,EAGN,eAAK,SAAS,EAAC,eAAe,aAC5B,KAAC,MAAM,IAAC,SAAS,EAAC,kDAAkD,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,GAAI,EAC/H,gBAAO,IAAI,EAAC,MAAM,EAAC,WAAW,EAAE,UAAU,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EACvF,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACxC,SAAS,EAAC,iFAAiF,EAC3F,KAAK,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,KAAK,EAAE,8BAA8B,EAAE,GAAI,IACjG,EAGL,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CACpB,eAAK,SAAS,EAAC,uEAAuE,EACpF,KAAK,EAAE,EAAE,UAAU,EAAE,iCAAiC,EAAE,WAAW,EAAE,qCAAqC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,aAClJ,gBAAM,SAAS,EAAC,SAAS,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,mCAAmC,EAAE,aAC5E,QAAQ,CAAC,IAAI,iBACT,EACP,eAAK,SAAS,EAAC,YAAY,aACzB,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,SAAS,EAAC,2CAA2C,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,iCAAiC,EAAE,wBAAkB,EAC9K,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,EAAC,2CAA2C,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,iCAAiC,EAAE,0BAAoB,EAClL,kBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAC,2CAA2C,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,gCAAgC,EAAE,aACxJ,KAAC,MAAM,IAAC,SAAS,EAAC,iCAAiC,GAAG,cAC/C,IACL,IACF,CACP,EAEA,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,6BAA6B,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,mCAAmC,EAAE,KAAK,EAAE,qCAAqC,EAAE,aAClJ,KAAK,cAAI,iBAAQ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,WAAW,sBAAe,IACpE,CACP,EAGA,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAC/B,eAAK,SAAS,EAAC,wEAAwE,EACrF,KAAK,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,KAAK,EAAE,wCAAwC,EAAE,aACzG,KAAC,QAAQ,IAAC,SAAS,EAAC,2BAA2B,GAAG,EAClD,aAAG,SAAS,EAAC,cAAc,oBAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAW,EACtE,kBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,cAAc,MAAM,CAAC,EACzD,SAAS,EAAC,yCAAyC,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,iCAAiC,EAAE,wBACpG,MAAM,CAAC,QAAQ,IAChB,IACL,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,YAC9G,iBAAO,SAAS,EAAC,gBAAgB,aAC/B,gBAAO,SAAS,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,qCAAqC,EAAE,YAAY,EAAE,0CAA0C,EAAE,YACpJ,yBACE,aAAI,SAAS,EAAC,0BAA0B,YACtC,gBAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAC9E,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAC,SAAS,GAAG,GACjE,EACL,aAAI,SAAS,EAAC,qBAAqB,YAAC,KAAC,OAAO,IAAC,KAAK,EAAC,OAAO,sBAAgB,GAAK,EAC/E,aAAI,SAAS,EAAC,qBAAqB,YAAC,KAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,uBAAiB,GAAK,EACjF,aAAI,SAAS,EAAC,qBAAqB,YAAC,KAAC,OAAO,IAAC,KAAK,EAAC,WAAW,wBAAkB,GAAK,EACrF,aAAI,SAAS,EAAC,yCAAyC,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,wBAAc,IAC7H,GACC,EACR,0BACG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CACtB,cAAiB,SAAS,EAAC,oCAAoC,EAC7D,KAAK,EAAE,EAAE,YAAY,EAAE,0CAA0C,EAAE,aACnE,aAAI,SAAS,EAAC,WAAW,YACvB,gBAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAC1D,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAC,SAAS,GAAG,GACnE,EACL,aAAI,SAAS,EAAC,WAAW,YACvB,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,cAAc,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,EAC7E,SAAS,EAAC,uCAAuC,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,8BAA8B,EAAE,YACjG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,GAC/B,GACN,EACL,aAAI,SAAS,EAAC,WAAW,YACvB,eAAM,SAAS,EAAC,2DAA2D,EACzE,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,YAC5E,GAAG,CAAC,MAAM,IAAI,OAAO,GACjB,GACJ,EACL,aAAI,SAAS,EAAC,WAAW,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,YACjF,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,GACvB,EACL,aAAI,SAAS,EAAC,WAAW,YACvB,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,cAAc,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,EAC7E,SAAS,EAAC,mDAAmD,EAAC,KAAK,EAAC,MAAM,YAC1E,KAAC,cAAc,IAAC,SAAS,EAAC,SAAS,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,GAAI,GAC3F,GACN,KA1BE,GAAG,CAAC,EAAE,CA2BV,CACN,CAAC,GACI,IACF,GACJ,CACP,EAGA,UAAU,GAAG,CAAC,IAAI,CACjB,eAAK,SAAS,EAAC,gDAAgD,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,aACxH,oCAAY,IAAI,UAAM,UAAU,IAAQ,EACxC,eAAK,SAAS,EAAC,YAAY,aACzB,kBAAQ,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAC7D,SAAS,EAAC,8FAA8F,EACxG,KAAK,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,aACxD,KAAC,WAAW,IAAC,SAAS,EAAC,SAAS,GAAG,iBAC5B,EACT,kBAAQ,QAAQ,EAAE,IAAI,IAAI,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EACtE,SAAS,EAAC,8FAA8F,EACxG,KAAK,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,sBACnD,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,GAAG,IAClC,IACL,IACF,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface DashboardProps {
2
+ onNavigate?: (path: string) => void;
3
+ }
4
+ export declare function Dashboard({ onNavigate }: DashboardProps): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=Dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/views/Dashboard.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,2CAoKvD"}
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { FileText, Layout, Image, Users, User, Calendar, Loader2, AlertTriangle } from 'lucide-react';
4
+ import { useApiData } from '../lib/useApiData';
5
+ export function Dashboard({ onNavigate }) {
6
+ const nav = (path) => onNavigate?.(path);
7
+ const { data, loading, error, refetch } = useApiData('/stats');
8
+ const totalPosts = data?.totalDocuments ?? 0;
9
+ const totalMedia = data?.totalMedia ?? 0;
10
+ const totalUsers = data?.totalUsers ?? 0;
11
+ const recentPosts = data?.recentDocuments ?? [];
12
+ if (loading) {
13
+ return (_jsx("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8 flex items-center justify-center h-64", children: _jsx(Loader2, { className: "w-6 h-6 animate-spin text-blue-600" }) }));
14
+ }
15
+ return (_jsxs("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8", children: [error && (_jsxs("div", { className: "mb-4 flex items-center gap-3 rounded-lg border border-red-200 bg-red-50 p-3", children: [_jsx(AlertTriangle, { className: "w-5 h-5 text-red-600 shrink-0" }), _jsx("span", { className: "text-sm text-red-800 flex-1", children: error }), _jsx("button", { onClick: refetch, className: "px-3 py-1 text-sm text-red-700 border border-red-300 rounded-lg hover:bg-red-100 transition-colors", children: "Retry" })] })), _jsxs("div", { className: "mb-4 sm:mb-6", children: [_jsx("h1", { className: "text-xl sm:text-2xl font-semibold text-gray-900 mb-1", children: "Dashboard" }), _jsx("p", { className: "text-sm text-gray-600", children: "Welcome back! Here's what's happening." })] }), _jsxs("div", { className: "grid grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4 mb-4 sm:mb-6", children: [_jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Total Posts" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: totalPosts }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-blue-100 rounded-lg flex items-center justify-center", children: _jsx(FileText, { className: "w-4 h-4 sm:w-5 sm:h-5 text-blue-600" }) })] }) }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Total Pages" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: "0" }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-purple-100 rounded-lg flex items-center justify-center", children: _jsx(Layout, { className: "w-4 h-4 sm:w-5 sm:h-5 text-purple-600" }) })] }) }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Media Files" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: totalMedia.toLocaleString() }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-green-100 rounded-lg flex items-center justify-center", children: _jsx(Image, { className: "w-4 h-4 sm:w-5 sm:h-5 text-green-600" }) })] }) }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Total Users" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: totalUsers }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-amber-100 rounded-lg flex items-center justify-center", children: _jsx(Users, { className: "w-4 h-4 sm:w-5 sm:h-5 text-amber-600" }) })] }) })] }), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-3 sm:gap-4", children: [_jsxs("div", { className: "lg:col-span-8 bg-white rounded-lg border border-gray-200", children: [_jsx("div", { className: "p-3 sm:p-4 border-b border-gray-200", children: _jsx("h2", { className: "text-sm sm:text-base font-semibold text-gray-900", children: "Recent Posts" }) }), _jsx("div", { className: "divide-y divide-gray-200", children: recentPosts.length === 0 ? (_jsxs("div", { className: "p-8 text-center", children: [_jsx("p", { className: "text-sm text-gray-500 mb-2", children: "No posts yet" }), _jsx("button", { onClick: () => nav('/posts/new'), className: "px-4 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors", children: "Create your first post" })] })) : recentPosts.map((post) => (_jsx("div", { className: "p-3 sm:p-4 hover:bg-gray-50 transition-colors", children: _jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h3", { className: "text-sm font-medium text-gray-900 mb-1 truncate", children: post.title }), _jsxs("div", { className: "flex flex-wrap items-center gap-2 sm:gap-3 text-xs text-gray-600", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(User, { className: "w-3 h-3" }), _jsx("span", { className: "hidden sm:inline", children: post.author })] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Calendar, { className: "w-3 h-3" }), post.date] }), _jsx("span", { className: `px-2 py-0.5 rounded-full text-xs font-medium ${post.status === 'Published' ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-800'}`, children: post.status })] })] }), _jsx("button", { onClick: () => nav(`/posts/${post.id}`), className: "text-xs sm:text-sm text-blue-600 hover:text-blue-700 whitespace-nowrap", children: "Edit" })] }) }, post.id))) })] }), _jsxs("div", { className: "lg:col-span-4 bg-white rounded-lg border border-gray-200", children: [_jsx("div", { className: "p-3 sm:p-4 border-b border-gray-200", children: _jsx("h2", { className: "text-sm sm:text-base font-semibold text-gray-900", children: "Quick Actions" }) }), _jsxs("div", { className: "p-3 sm:p-4 space-y-2", children: [_jsxs("button", { onClick: () => nav('/posts/new'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-blue-100 rounded-lg flex items-center justify-center group-hover:bg-blue-200 transition-colors", children: _jsx(FileText, { className: "w-4 h-4 text-blue-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "New Post" })] }), _jsxs("button", { onClick: () => nav('/pages/new'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-purple-100 rounded-lg flex items-center justify-center group-hover:bg-purple-200 transition-colors", children: _jsx(Layout, { className: "w-4 h-4 text-purple-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "New Page" })] }), _jsxs("button", { onClick: () => nav('/media'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-green-100 rounded-lg flex items-center justify-center group-hover:bg-green-200 transition-colors", children: _jsx(Image, { className: "w-4 h-4 text-green-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "Upload Media" })] }), _jsxs("button", { onClick: () => nav('/users'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-amber-100 rounded-lg flex items-center justify-center group-hover:bg-amber-200 transition-colors", children: _jsx(Users, { className: "w-4 h-4 text-amber-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "Manage Users" })] })] })] })] })] }));
16
+ }
17
+ //# sourceMappingURL=Dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/views/Dashboard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface DocumentEditProps {
2
+ collectionSlug: string;
3
+ documentId?: string;
4
+ config: any;
5
+ onNavigate?: (path: string) => void;
6
+ }
7
+ export declare function DocumentEdit({ collectionSlug, documentId, config, onNavigate }: DocumentEditProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=DocumentEdit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentEdit.d.ts","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,YAAY,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,iBAAiB,2CAkWjG"}
@@ -0,0 +1,210 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useEffect, useRef } from 'react';
4
+ import { AlertTriangle, Eye, EyeOff, Save, Copy, Loader2, Clock } from 'lucide-react';
5
+ import { toast } from 'sonner';
6
+ import { FieldRenderer } from '../fields/FieldRenderer';
7
+ import { Button } from '../components/ui/Button';
8
+ import { LivePreview } from '../components/LivePreview';
9
+ import { VersionHistory } from '../components/VersionHistory';
10
+ import { PresenceIndicator } from '../components/PresenceIndicator';
11
+ import { SEOPanel } from '../components/SEOPanel';
12
+ import { cmsApi } from '../lib/api';
13
+ export function DocumentEdit({ collectionSlug, documentId, config, onNavigate }) {
14
+ const isNew = !documentId;
15
+ const [values, setValues] = useState({});
16
+ const [initialValues, setInitialValues] = useState({});
17
+ const [seoData, setSeoData] = useState({});
18
+ const [initialSeoData, setInitialSeoData] = useState({});
19
+ const [saving, setSaving] = useState(false);
20
+ const [loading, setLoading] = useState(!isNew);
21
+ const [showPreview, setShowPreview] = useState(false);
22
+ const [showVersions, setShowVersions] = useState(false);
23
+ const [docStatus, setDocStatus] = useState('DRAFT');
24
+ const hasLoadedRef = useRef(false);
25
+ const collections = config?.collections;
26
+ const collection = Array.isArray(collections)
27
+ ? collections.find((c) => c.slug === collectionSlug)
28
+ : collections?.[collectionSlug];
29
+ const previewUrl = collection?.admin?.preview ? collection.admin.preview({}) : undefined;
30
+ const fields = collection?.fields
31
+ ? (Array.isArray(collection.fields)
32
+ ? collection.fields
33
+ : Object.entries(collection.fields).map(([name, def]) => ({ name, ...def })))
34
+ : [];
35
+ const useAsTitleField = collection?.admin?.useAsTitle ?? 'title';
36
+ const displayTitle = isNew
37
+ ? `New ${collection?.labels?.singular ?? collectionSlug}`
38
+ : `Edit ${values[useAsTitleField] ?? 'Document'}`;
39
+ const isDirty = JSON.stringify(values) !== JSON.stringify(initialValues)
40
+ || JSON.stringify(seoData) !== JSON.stringify(initialSeoData);
41
+ useEffect(() => {
42
+ if (!isNew && documentId && !hasLoadedRef.current) {
43
+ hasLoadedRef.current = true;
44
+ loadDocument();
45
+ }
46
+ }, [documentId, isNew]);
47
+ useEffect(() => {
48
+ if (!isDirty)
49
+ return;
50
+ const handler = (e) => {
51
+ e.preventDefault();
52
+ };
53
+ window.addEventListener('beforeunload', handler);
54
+ return () => window.removeEventListener('beforeunload', handler);
55
+ }, [isDirty]);
56
+ const SEO_FIELDS = [
57
+ 'metaTitle', 'metaDescription', 'focusKeyphrase', 'canonical',
58
+ 'noIndex', 'noFollow', 'ogTitle', 'ogDescription', 'ogImage',
59
+ 'twitterTitle', 'twitterDescription', 'twitterImage',
60
+ 'isCornerstone', 'schemaType',
61
+ ];
62
+ async function loadDocument() {
63
+ setLoading(true);
64
+ const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`);
65
+ if (res.data) {
66
+ const doc = res.data;
67
+ const docData = (doc.data && typeof doc.data === 'object') ? doc.data : {};
68
+ const merged = { ...docData, title: doc.title ?? docData.title, slug: doc.slug ?? docData.slug };
69
+ setValues(merged);
70
+ setInitialValues(merged);
71
+ setDocStatus(doc.status ?? 'DRAFT');
72
+ const loadedSeo = {};
73
+ for (const key of SEO_FIELDS) {
74
+ if (docData[key] !== undefined) {
75
+ loadedSeo[key] = docData[key];
76
+ }
77
+ }
78
+ setSeoData(loadedSeo);
79
+ setInitialSeoData(loadedSeo);
80
+ }
81
+ else if (res.error) {
82
+ toast.error(`Failed to load document: ${res.error}`);
83
+ }
84
+ setLoading(false);
85
+ }
86
+ function handleFieldChange(name, value) {
87
+ setValues((prev) => ({ ...prev, [name]: value }));
88
+ }
89
+ async function handleSave() {
90
+ setSaving(true);
91
+ const payload = { ...values, ...seoData };
92
+ try {
93
+ if (isNew) {
94
+ const res = await cmsApi(`/collections/${collectionSlug}`, {
95
+ method: 'POST',
96
+ body: JSON.stringify(payload),
97
+ });
98
+ if (res.error) {
99
+ toast.error(res.error);
100
+ }
101
+ else {
102
+ toast.success('Document created');
103
+ const newId = res.data?.id;
104
+ setInitialValues(values);
105
+ setInitialSeoData(seoData);
106
+ if (newId && onNavigate) {
107
+ onNavigate(`/${collectionSlug}/${newId}`);
108
+ }
109
+ }
110
+ }
111
+ else {
112
+ const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`, {
113
+ method: 'PUT',
114
+ body: JSON.stringify(payload),
115
+ });
116
+ if (res.error) {
117
+ toast.error(res.error);
118
+ }
119
+ else {
120
+ toast.success('Changes saved');
121
+ setInitialValues(values);
122
+ setInitialSeoData(seoData);
123
+ if (res.data?.status)
124
+ setDocStatus(res.data.status);
125
+ }
126
+ }
127
+ }
128
+ catch {
129
+ toast.error('An unexpected error occurred');
130
+ }
131
+ setSaving(false);
132
+ }
133
+ async function handlePublish() {
134
+ if (isNew)
135
+ return;
136
+ setSaving(true);
137
+ const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`, {
138
+ method: 'PUT',
139
+ body: JSON.stringify({ ...values, ...seoData, status: 'PUBLISHED' }),
140
+ });
141
+ if (res.error) {
142
+ toast.error(res.error);
143
+ }
144
+ else {
145
+ toast.success('Document published');
146
+ setDocStatus('PUBLISHED');
147
+ setInitialValues(values);
148
+ setInitialSeoData(seoData);
149
+ }
150
+ setSaving(false);
151
+ }
152
+ async function handleUnpublish() {
153
+ if (isNew)
154
+ return;
155
+ setSaving(true);
156
+ const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`, {
157
+ method: 'PUT',
158
+ body: JSON.stringify({ ...values, ...seoData, status: 'DRAFT' }),
159
+ });
160
+ if (res.error) {
161
+ toast.error(res.error);
162
+ }
163
+ else {
164
+ toast.success('Document unpublished');
165
+ setDocStatus('DRAFT');
166
+ setInitialValues(values);
167
+ setInitialSeoData(seoData);
168
+ }
169
+ setSaving(false);
170
+ }
171
+ async function handleDuplicate() {
172
+ if (isNew || !documentId)
173
+ return;
174
+ const res = await cmsApi(`/collections/${collectionSlug}`, {
175
+ method: 'POST',
176
+ body: JSON.stringify({
177
+ ...values,
178
+ title: values.title ? `${values.title} (Copy)` : undefined,
179
+ slug: values.slug ? `${values.slug}-copy` : undefined,
180
+ }),
181
+ });
182
+ if (res.error) {
183
+ toast.error(res.error);
184
+ }
185
+ else {
186
+ toast.success('Document duplicated');
187
+ const newId = res.data?.id;
188
+ if (newId && onNavigate) {
189
+ onNavigate(`/${collectionSlug}/${newId}`);
190
+ }
191
+ }
192
+ }
193
+ const mainFields = fields.filter((f) => !['status', 'publishedAt', 'featured', 'featuredImage'].includes(f.name));
194
+ const sidebarFields = fields.filter((f) => ['publishedAt', 'featured', 'featuredImage'].includes(f.name));
195
+ const contentField = fields.find((f) => f.type === 'richText' || f.name === 'content' || f.name === 'body');
196
+ const htmlContent = contentField ? (values[contentField.name] ?? '') : '';
197
+ const docSlug = values.slug ?? '';
198
+ const statusColor = docStatus === 'PUBLISHED' ? 'bg-green-100 text-green-800'
199
+ : docStatus === 'SCHEDULED' ? 'bg-blue-100 text-blue-800'
200
+ : 'bg-yellow-100 text-yellow-800';
201
+ if (loading) {
202
+ return (_jsx("div", { className: "flex items-center justify-center min-h-[300px]", children: _jsx(Loader2, { className: "w-8 h-8 animate-spin text-gray-400" }) }));
203
+ }
204
+ return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("h1", { className: "text-2xl font-bold", children: displayTitle }), _jsx("span", { className: `inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${statusColor}`, children: docStatus }), documentId && _jsx(PresenceIndicator, { documentId: documentId }), isDirty && (_jsx("span", { className: "text-xs text-amber-600 font-medium", children: "Unsaved changes" }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("button", { onClick: () => setShowPreview((v) => !v), className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: showPreview ? 'Hide preview' : 'Show preview', children: [showPreview ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }), "Preview"] }), !isNew && (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: () => setShowVersions(true), className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: "Version history", children: [_jsx(Clock, { className: "h-4 w-4" }), "History"] }), _jsxs("button", { onClick: handleDuplicate, className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: "Duplicate this document", children: [_jsx(Copy, { className: "h-4 w-4" }), "Duplicate"] })] }))] })] }), _jsxs("div", { className: showPreview ? 'grid grid-cols-2 gap-6' : '', children: [_jsxs("div", { className: "space-y-6", children: [fields.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-16 text-center rounded-lg border border-[var(--border)]", children: [_jsx("div", { className: "w-12 h-12 rounded-full bg-gray-100 flex items-center justify-center mb-4", children: _jsx(AlertTriangle, { className: "w-6 h-6 text-gray-400" }) }), _jsx("h3", { className: "text-sm font-medium text-gray-900 mb-1", children: "Collection schema not found" }), _jsx("p", { className: "text-sm text-gray-500", children: "No fields are defined for this collection." })] })) : (_jsxs("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-3", children: [_jsx("div", { className: "space-y-6 lg:col-span-2", children: mainFields.map((field) => (_jsx(FieldRenderer, { field: field, value: values[field.name], onChange: (val) => handleFieldChange(field.name, val) }, field.name))) }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-4 font-semibold", children: "Status" }), _jsxs("div", { className: "space-y-3", children: [!isNew && docStatus === 'DRAFT' && (_jsx(Button, { variant: "primary", className: "w-full", onClick: handlePublish, loading: saving, children: "Publish" })), !isNew && docStatus === 'PUBLISHED' && (_jsx(Button, { variant: "secondary", className: "w-full", onClick: handleUnpublish, loading: saving, children: "Unpublish" }))] })] }), sidebarFields.length > 0 && (_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-4 font-semibold", children: "Metadata" }), sidebarFields.map((field) => (_jsx("div", { className: "mb-4", children: _jsx(FieldRenderer, { field: field, value: values[field.name], onChange: (val) => handleFieldChange(field.name, val) }) }, field.name)))] })), _jsx(SEOPanel, { title: values[useAsTitleField] ?? values.title ?? '', slug: docSlug, content: htmlContent, seoData: seoData, onChange: setSeoData, siteUrl: config?.siteUrl })] })] })), _jsxs("div", { className: "sticky bottom-0 flex items-center justify-end gap-3 border-t border-[var(--border)] bg-[var(--background)] px-4 py-3", children: [_jsx(Button, { variant: "secondary", onClick: () => onNavigate?.(`/${collectionSlug}`), children: "Cancel" }), _jsxs(Button, { variant: "primary", loading: saving, onClick: handleSave, "data-shortcut": "save", children: [_jsx(Save, { className: "h-4 w-4 mr-1.5" }), isNew ? 'Create' : 'Save Changes'] })] })] }), showPreview && (_jsx(LivePreview, { collection: collectionSlug, documentId: documentId, previewUrl: previewUrl, values: values, onClose: () => setShowPreview(false) }))] }), !isNew && documentId && (_jsx(VersionHistory, { collectionSlug: collectionSlug, documentId: documentId, open: showVersions, onClose: () => setShowVersions(false), onRestore: (data) => {
205
+ const restoredData = data;
206
+ setValues(restoredData);
207
+ setInitialValues(restoredData);
208
+ } }))] }));
209
+ }
210
+ //# sourceMappingURL=DocumentEdit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface FormEditorProps {
2
+ formId?: string;
3
+ onNavigate?: (path: string) => void;
4
+ }
5
+ export declare function FormEditor({ formId, onNavigate }: FormEditorProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=FormEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormEditor.d.ts","sourceRoot":"","sources":["../../src/views/FormEditor.tsx"],"names":[],"mappings":"AAoDA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,eAAe,2CA2djE"}