@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 @@
1
+ {"version":3,"file":"useKeyboardShortcuts.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyboardShortcuts.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,QAuB1D"}
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+ export function useKeyboardShortcuts(shortcuts) {
4
+ useEffect(() => {
5
+ function handleKeyDown(e) {
6
+ const meta = e.metaKey || e.ctrlKey;
7
+ const parts = [];
8
+ if (meta)
9
+ parts.push('mod');
10
+ if (e.shiftKey)
11
+ parts.push('shift');
12
+ if (e.altKey)
13
+ parts.push('alt');
14
+ parts.push(e.key.toLowerCase());
15
+ const combo = parts.join('+');
16
+ const handler = shortcuts[combo];
17
+ if (handler) {
18
+ e.preventDefault();
19
+ handler(e);
20
+ }
21
+ }
22
+ document.addEventListener('keydown', handleKeyDown);
23
+ return () => document.removeEventListener('keydown', handleKeyDown);
24
+ }, [shortcuts]);
25
+ }
26
+ //# sourceMappingURL=useKeyboardShortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardShortcuts.js","sourceRoot":"","sources":["../../src/hooks/useKeyboardShortcuts.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMlC,MAAM,UAAU,oBAAoB,CAAC,SAAsB;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,aAAa,CAAC,CAAgB;YACrC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;YACpC,MAAM,KAAK,GAAa,EAAE,CAAC;YAE3B,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAEhC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAEjC,IAAI,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,CAAC,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,52 @@
1
+ export { AdminRoot } from './AdminRoot';
2
+ export type { AdminRootProps } from './AdminRoot';
3
+ export { Layout } from './layout/Layout';
4
+ export type { LayoutProps } from './layout/Layout';
5
+ export { Sidebar } from './layout/Sidebar';
6
+ export type { SidebarProps } from './layout/Sidebar';
7
+ export { Header } from './layout/Header';
8
+ export type { HeaderProps } from './layout/Header';
9
+ export { Dashboard } from './views/Dashboard';
10
+ export { Posts } from './views/Posts';
11
+ export { Pages } from './views/Pages';
12
+ export { PostEditor } from './views/PostEditor';
13
+ export { PageEditor } from './views/PageEditor';
14
+ export { MediaBrowser } from './views/MediaBrowser';
15
+ export { Forms } from './views/Forms';
16
+ export { FormEditor } from './views/FormEditor';
17
+ export type { FormEditorProps } from './views/FormEditor';
18
+ export { FormSubmissions } from './views/FormSubmissions';
19
+ export { Redirects } from './views/Redirects';
20
+ export { Users } from './views/Users';
21
+ export { Settings } from './views/Settings';
22
+ export { SEO } from './views/SEO';
23
+ export { SetupWizard } from './views/SetupWizard';
24
+ export type { SetupWizardProps } from './views/SetupWizard';
25
+ export { Login } from './views/Login';
26
+ export type { LoginProps } from './views/Login';
27
+ export { CollectionList } from './views/CollectionList';
28
+ export { DocumentEdit } from './views/DocumentEdit';
29
+ export { Breadcrumbs } from './components/Breadcrumbs';
30
+ export { CommandPalette } from './components/CommandPalette';
31
+ export { ErrorBoundary } from './components/ErrorBoundary';
32
+ export { FolderTree } from './components/FolderTree';
33
+ export type { FolderTreeProps, FolderNode, FolderSelection, SmartFolder } from './components/FolderTree';
34
+ export { TipTapEditor } from './components/TipTapEditor';
35
+ export { SEOPanel } from './components/SEOPanel';
36
+ export type { SEOData, SEOPanelProps } from './components/SEOPanel';
37
+ export { LivePreview } from './components/LivePreview';
38
+ export { VersionHistory } from './components/VersionHistory';
39
+ export type { VersionHistoryProps } from './components/VersionHistory';
40
+ export { MediaPickerModal } from './components/MediaPickerModal';
41
+ export type { MediaPickerModalProps } from './components/MediaPickerModal';
42
+ export { ThemeProvider, useTheme } from './components/ThemeProvider';
43
+ export { FocalPointPicker } from './components/FocalPointPicker';
44
+ export { PresenceIndicator } from './components/PresenceIndicator';
45
+ export { LocaleProvider, useLocale } from './components/LocaleProvider';
46
+ export type { LocaleProviderProps } from './components/LocaleProvider';
47
+ export { LocaleSwitcher } from './components/LocaleSwitcher';
48
+ export { useKeyboardShortcuts } from './hooks/useKeyboardShortcuts';
49
+ export { cmsApi, setApiBase, ensureCsrfToken } from './lib/api';
50
+ export { useApiData } from './lib/useApiData';
51
+ export type { UseApiDataResult } from './lib/useApiData';
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ export { AdminRoot } from './AdminRoot';
2
+ export { Layout } from './layout/Layout';
3
+ export { Sidebar } from './layout/Sidebar';
4
+ export { Header } from './layout/Header';
5
+ export { Dashboard } from './views/Dashboard';
6
+ export { Posts } from './views/Posts';
7
+ export { Pages } from './views/Pages';
8
+ export { PostEditor } from './views/PostEditor';
9
+ export { PageEditor } from './views/PageEditor';
10
+ export { MediaBrowser } from './views/MediaBrowser';
11
+ export { Forms } from './views/Forms';
12
+ export { FormEditor } from './views/FormEditor';
13
+ export { FormSubmissions } from './views/FormSubmissions';
14
+ export { Redirects } from './views/Redirects';
15
+ export { Users } from './views/Users';
16
+ export { Settings } from './views/Settings';
17
+ export { SEO } from './views/SEO';
18
+ export { SetupWizard } from './views/SetupWizard';
19
+ export { Login } from './views/Login';
20
+ export { CollectionList } from './views/CollectionList';
21
+ export { DocumentEdit } from './views/DocumentEdit';
22
+ export { Breadcrumbs } from './components/Breadcrumbs';
23
+ export { CommandPalette } from './components/CommandPalette';
24
+ export { ErrorBoundary } from './components/ErrorBoundary';
25
+ export { FolderTree } from './components/FolderTree';
26
+ export { TipTapEditor } from './components/TipTapEditor';
27
+ export { SEOPanel } from './components/SEOPanel';
28
+ export { LivePreview } from './components/LivePreview';
29
+ export { VersionHistory } from './components/VersionHistory';
30
+ export { MediaPickerModal } from './components/MediaPickerModal';
31
+ export { ThemeProvider, useTheme } from './components/ThemeProvider';
32
+ export { FocalPointPicker } from './components/FocalPointPicker';
33
+ export { PresenceIndicator } from './components/PresenceIndicator';
34
+ export { LocaleProvider, useLocale } from './components/LocaleProvider';
35
+ export { LocaleSwitcher } from './components/LocaleSwitcher';
36
+ export { useKeyboardShortcuts } from './hooks/useKeyboardShortcuts';
37
+ export { cmsApi, setApiBase, ensureCsrfToken } from './lib/api';
38
+ export { useApiData } from './lib/useApiData';
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface HeaderProps {
2
+ onToggleSidebar: () => void;
3
+ session?: any;
4
+ onNavigate: (path: string) => void;
5
+ }
6
+ export declare function Header({ onToggleSidebar, session, onNavigate }: HeaderProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,WAAW,2CAuH3E"}
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { Search, Bell, User, ChevronDown, Menu, Sun, Moon } from 'lucide-react';
5
+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
6
+ import { CommandPalette } from '../components/CommandPalette';
7
+ import { useTheme } from '../components/ThemeProvider';
8
+ import { LocaleSwitcher } from '../components/LocaleSwitcher';
9
+ export function Header({ onToggleSidebar, session, onNavigate }) {
10
+ const [showCommandPalette, setShowCommandPalette] = useState(false);
11
+ const [searchQuery, setSearchQuery] = useState('');
12
+ const { resolvedTheme, setTheme } = useTheme();
13
+ const toggleTheme = () => {
14
+ setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');
15
+ };
16
+ return (_jsxs(_Fragment, { children: [_jsxs("header", { className: "h-14 border-b border-border bg-background flex items-center justify-between px-4 gap-4", children: [_jsx("button", { onClick: onToggleSidebar, className: "lg:hidden p-2 hover:bg-accent rounded-lg transition-colors", "aria-label": "Toggle sidebar", children: _jsx(Menu, { className: "w-5 h-5 text-foreground", strokeWidth: 2 }) }), _jsx("div", { className: "flex items-center lg:hidden", children: _jsx("span", { className: "text-lg font-semibold text-foreground", children: "Actuate" }) }), _jsx("div", { className: "flex-1" }), _jsxs("div", { className: "flex items-center gap-2 sm:gap-3", children: [_jsxs("div", { className: "hidden md:block relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none" }), _jsx("input", { type: "text", placeholder: "Search... (\u2318K)", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), onFocus: () => setShowCommandPalette(true), className: "w-64 pl-9 pr-3 py-1.5 text-sm border border-border rounded-lg bg-input-background text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent" })] }), _jsx("button", { onClick: () => setShowCommandPalette(true), className: "md:hidden p-2 hover:bg-accent rounded-lg transition-colors", "aria-label": "Search", children: _jsx(Search, { className: "w-5 h-5 text-muted-foreground" }) }), _jsx(LocaleSwitcher, {}), _jsx("button", { onClick: toggleTheme, className: "p-2 hover:bg-accent rounded-lg transition-colors", "aria-label": "Toggle theme", children: resolvedTheme === 'dark' ? (_jsx(Sun, { className: "w-5 h-5 text-muted-foreground" })) : (_jsx(Moon, { className: "w-5 h-5 text-muted-foreground" })) }), _jsxs("button", { className: "p-2 hover:bg-accent rounded-lg transition-colors relative", "aria-label": "Notifications", children: [_jsx(Bell, { className: "w-5 h-5 text-muted-foreground" }), _jsx("span", { className: "absolute top-1.5 right-1.5 w-2 h-2 bg-destructive rounded-full" })] }), _jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsxs("button", { className: "flex items-center gap-2 p-1.5 hover:bg-accent rounded-lg transition-colors", children: [_jsx("div", { className: "w-8 h-8 bg-linear-to-br from-blue-500 to-purple-600 rounded-full flex items-center justify-center", children: _jsx("span", { className: "text-white text-sm font-medium", children: session?.user?.name?.charAt(0)?.toUpperCase() ?? 'A' }) }), _jsx(ChevronDown, { className: "w-4 h-4 text-muted-foreground hidden sm:block" })] }) }), _jsx(DropdownMenu.Portal, { children: _jsxs(DropdownMenu.Content, { className: "min-w-[200px] bg-popover text-popover-foreground rounded-lg border border-border shadow-lg p-1 z-50", align: "end", sideOffset: 5, children: [_jsxs("div", { className: "px-3 py-2 border-b border-border", children: [_jsx("p", { className: "text-sm font-medium", children: session?.user?.name ?? 'Admin User' }), _jsx("p", { className: "text-xs text-muted-foreground", children: session?.user?.email ?? 'admin@example.com' })] }), _jsxs(DropdownMenu.Item, { className: "flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent rounded cursor-pointer outline-none", children: [_jsx(User, { className: "w-4 h-4" }), "Profile"] }), _jsx(DropdownMenu.Item, { className: "flex items-center gap-2 px-3 py-2 text-sm hover:bg-accent rounded cursor-pointer outline-none", onSelect: () => onNavigate('/settings'), children: "Settings" }), _jsx(DropdownMenu.Separator, { className: "h-px bg-border my-1" }), _jsx(DropdownMenu.Item, { className: "flex items-center gap-2 px-3 py-2 text-sm text-destructive hover:bg-accent rounded cursor-pointer outline-none", children: "Logout" })] }) })] })] })] }), _jsx(CommandPalette, { open: showCommandPalette, onOpenChange: setShowCommandPalette, onNavigate: onNavigate })] }));
17
+ }
18
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/layout/Header.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface LayoutProps {
3
+ config: any;
4
+ session: any;
5
+ currentPath: string;
6
+ onNavigate: (path: string) => void;
7
+ children: ReactNode;
8
+ }
9
+ export declare function Layout({ config, session, currentPath, onNavigate, children }: LayoutProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=Layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM5D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,WAAW,2CA4DzF"}
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useEffect } from 'react';
4
+ import { Sidebar } from './Sidebar';
5
+ import { Header } from './Header';
6
+ import { Breadcrumbs } from '../components/Breadcrumbs';
7
+ import { Toaster } from 'sonner';
8
+ export function Layout({ config, session, currentPath, onNavigate, children }) {
9
+ const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
10
+ const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
11
+ useEffect(() => {
12
+ setMobileSidebarOpen(false);
13
+ }, [currentPath]);
14
+ useEffect(() => {
15
+ const handleResize = () => {
16
+ if (window.innerWidth < 1024) {
17
+ setMobileSidebarOpen(false);
18
+ }
19
+ };
20
+ window.addEventListener('resize', handleResize);
21
+ return () => window.removeEventListener('resize', handleResize);
22
+ }, []);
23
+ return (_jsxs("div", { className: "h-screen flex overflow-hidden bg-background text-foreground", children: [_jsx(Toaster, { position: "bottom-right" }), mobileSidebarOpen && (_jsx("div", { className: "fixed inset-0 bg-black/50 z-40 lg:hidden", onClick: () => setMobileSidebarOpen(false) })), _jsx("div", { className: `fixed lg:static inset-y-0 left-0 z-50 transform transition-transform duration-300 lg:transform-none ${mobileSidebarOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0'}`, children: _jsx(Sidebar, { collapsed: sidebarCollapsed, onToggleCollapse: () => setSidebarCollapsed(!sidebarCollapsed), currentPath: currentPath, onNavigate: onNavigate, config: config }) }), _jsxs("div", { className: "flex-1 flex flex-col overflow-hidden", children: [_jsx(Header, { onToggleSidebar: () => setMobileSidebarOpen(!mobileSidebarOpen), session: session, onNavigate: onNavigate }), _jsx(Breadcrumbs, { currentPath: currentPath, onNavigate: onNavigate }), _jsx("main", { className: "flex-1 overflow-auto bg-background", children: _jsx("div", { className: "h-full", children: children }) })] })] }));
24
+ }
25
+ //# sourceMappingURL=Layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/layout/Layout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAUjC,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAe;IACxF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElE,SAAS,CAAC,GAAG,EAAE;QACb,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;gBAC7B,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,eAAK,SAAS,EAAC,6DAA6D,aAC1E,KAAC,OAAO,IAAC,QAAQ,EAAC,cAAc,GAAG,EAElC,iBAAiB,IAAI,CACpB,cACE,SAAS,EAAC,0CAA0C,EACpD,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAC1C,CACH,EAED,cACE,SAAS,EAAE,uGACT,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,oCACxC,EAAE,YAEF,KAAC,OAAO,IACN,SAAS,EAAE,gBAAgB,EAC3B,gBAAgB,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,CAAC,EAC9D,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACd,GACE,EAEN,eAAK,SAAS,EAAC,sCAAsC,aACnD,KAAC,MAAM,IACL,eAAe,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,iBAAiB,CAAC,EAC/D,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,GACtB,EAEF,KAAC,WAAW,IAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAAI,EAEjE,eAAM,SAAS,EAAC,oCAAoC,YAClD,cAAK,SAAS,EAAC,QAAQ,YACpB,QAAQ,GACL,GACD,IACH,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface SidebarProps {
2
+ collapsed: boolean;
3
+ onToggleCollapse: () => void;
4
+ currentPath: string;
5
+ onNavigate: (path: string) => void;
6
+ config?: any;
7
+ }
8
+ export declare function Sidebar({ collapsed, onToggleCollapse, currentPath, onNavigate, config }: SidebarProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=Sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"AA0CA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,2CA6DrG"}
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { LayoutDashboard, FileText, File, Image, Settings, ChevronLeft, ChevronRight, ClipboardList, Users, Search as SearchIcon, Briefcase, FolderOpen, BookOpen, HelpCircle, Newspaper, } from 'lucide-react';
4
+ const ICON_MAP = {
5
+ file: File,
6
+ 'file-text': FileText,
7
+ briefcase: Briefcase,
8
+ folder: FolderOpen,
9
+ book: BookOpen,
10
+ help: HelpCircle,
11
+ newspaper: Newspaper,
12
+ };
13
+ const defaultNavItems = [
14
+ { path: '/', label: 'Dashboard', icon: LayoutDashboard },
15
+ { path: '/pages', label: 'Pages', icon: File },
16
+ { path: '/posts', label: 'Posts', icon: FileText },
17
+ { path: '/media', label: 'Media', icon: Image },
18
+ { path: '/forms', label: 'Forms', icon: ClipboardList },
19
+ { path: '/seo', label: 'SEO', icon: SearchIcon },
20
+ { path: '/users', label: 'Users', icon: Users },
21
+ { path: '/settings', label: 'Settings', icon: Settings },
22
+ ];
23
+ export function Sidebar({ collapsed, onToggleCollapse, currentPath, onNavigate, config }) {
24
+ const navItems = buildNavItems(config);
25
+ return (_jsxs("aside", { className: `h-full bg-sidebar border-r border-sidebar-border transition-all duration-200 ${collapsed ? 'w-20' : 'w-64'}`, children: [_jsxs("div", { className: `flex items-center h-14 border-b border-sidebar-border px-4 ${collapsed ? 'justify-center' : 'justify-between'}`, children: [!collapsed && (_jsx("h1", { className: "text-xl font-semibold text-sidebar-foreground", children: "Actuate" })), collapsed && (_jsx("h1", { className: "text-xl font-bold text-sidebar-primary", children: "A" })), _jsx("button", { onClick: onToggleCollapse, className: "hidden lg:block p-2 hover:bg-sidebar-accent rounded-lg transition-colors", "aria-label": collapsed ? 'Expand sidebar' : 'Collapse sidebar', children: collapsed ? (_jsx(ChevronRight, { className: "w-4 h-4 text-sidebar-foreground" })) : (_jsx(ChevronLeft, { className: "w-4 h-4 text-sidebar-foreground" })) })] }), _jsx("nav", { className: "p-3 space-y-1", children: navItems.map((item) => {
26
+ const Icon = item.icon;
27
+ const isActive = currentPath === item.path ||
28
+ (item.path !== '/' && currentPath.startsWith(item.path));
29
+ return (_jsxs("button", { onClick: () => onNavigate(item.path), className: `flex items-center gap-3 px-3 py-2.5 rounded-lg transition-colors w-full text-left ${isActive
30
+ ? 'bg-sidebar-accent text-sidebar-primary'
31
+ : 'text-sidebar-foreground hover:bg-sidebar-accent'} ${collapsed ? 'justify-center' : ''}`, title: collapsed ? item.label : '', children: [_jsx(Icon, { className: "w-5 h-5 shrink-0" }), !collapsed && (_jsx("span", { className: "text-sm font-medium", children: item.label }))] }, item.path));
32
+ }) })] }));
33
+ }
34
+ function resolveIcon(collection) {
35
+ const mapped = collection.admin?.icon ? ICON_MAP[collection.admin.icon] : undefined;
36
+ if (mapped)
37
+ return mapped;
38
+ return collection.type === 'page' ? File : FileText;
39
+ }
40
+ function buildNavItems(config) {
41
+ if (!config?.collections)
42
+ return defaultNavItems;
43
+ const raw = config.collections;
44
+ const collectionsList = Array.isArray(raw) ? raw : Object.values(raw);
45
+ const visible = collectionsList.filter((c) => !c.admin?.hidden);
46
+ const pages = visible.filter((c) => c.type === 'page');
47
+ const posts = visible.filter((c) => c.type === 'post');
48
+ const other = visible.filter((c) => c.type !== 'page' && c.type !== 'post');
49
+ const sorted = [...pages, ...posts, ...other];
50
+ const items = [
51
+ { path: '/', label: 'Dashboard', icon: LayoutDashboard },
52
+ ];
53
+ for (const collection of sorted) {
54
+ items.push({
55
+ label: collection.labels?.plural ?? collection.slug,
56
+ path: `/${collection.slug}`,
57
+ icon: resolveIcon(collection),
58
+ });
59
+ }
60
+ items.push({ path: '/media', label: 'Media', icon: Image }, { path: '/forms', label: 'Forms', icon: ClipboardList }, { path: '/seo', label: 'SEO', icon: SearchIcon }, { path: '/users', label: 'Users', icon: Users }, { path: '/settings', label: 'Settings', icon: Settings });
61
+ return items;
62
+ }
63
+ //# sourceMappingURL=Sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../src/layout/Sidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function setApiBase(path: string): void;
2
+ export declare function ensureCsrfToken(): Promise<void>;
3
+ export declare function cmsApi<T = unknown>(endpoint: string, options?: RequestInit): Promise<{
4
+ data?: T;
5
+ error?: string;
6
+ status: number;
7
+ }>;
8
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,QAEtC;AAQD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD;AAcD,wBAAsB,MAAM,CAAC,CAAC,GAAG,OAAO,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BvD"}
@@ -0,0 +1,59 @@
1
+ const DEFAULT_BASE = '/api/cms';
2
+ let basePath = DEFAULT_BASE;
3
+ export function setApiBase(path) {
4
+ basePath = path;
5
+ }
6
+ function getCsrfToken() {
7
+ if (typeof document === 'undefined')
8
+ return '';
9
+ const match = document.cookie.match(/(?:^|;\s*)actuate_csrf=([^;]*)/);
10
+ return match?.[1] ?? '';
11
+ }
12
+ export async function ensureCsrfToken() {
13
+ if (getCsrfToken())
14
+ return;
15
+ try {
16
+ await fetch(`${basePath}/auth/csrf`, { credentials: 'include' });
17
+ }
18
+ catch { /* best-effort */ }
19
+ }
20
+ function getActiveLocale() {
21
+ if (typeof localStorage === 'undefined')
22
+ return null;
23
+ return localStorage.getItem('actuate-locale');
24
+ }
25
+ function appendLocaleParam(endpoint) {
26
+ const locale = getActiveLocale();
27
+ if (!locale)
28
+ return endpoint;
29
+ const separator = endpoint.includes('?') ? '&' : '?';
30
+ return `${endpoint}${separator}locale=${encodeURIComponent(locale)}`;
31
+ }
32
+ export async function cmsApi(endpoint, options = {}) {
33
+ const url = `${basePath}${appendLocaleParam(endpoint)}`;
34
+ const isFormData = typeof FormData !== 'undefined' && options.body instanceof FormData;
35
+ const headers = {
36
+ ...(options.headers || {}),
37
+ };
38
+ if (!isFormData) {
39
+ headers['Content-Type'] = 'application/json';
40
+ }
41
+ const method = (options.method ?? 'GET').toUpperCase();
42
+ if (method !== 'GET' && method !== 'HEAD') {
43
+ const csrf = getCsrfToken();
44
+ if (csrf)
45
+ headers['x-csrf-token'] = csrf;
46
+ }
47
+ try {
48
+ const res = await fetch(url, { ...options, headers, credentials: 'include' });
49
+ const json = await res.json().catch(() => ({}));
50
+ if (!res.ok) {
51
+ return { error: json.error || `Request failed (${res.status})`, status: res.status };
52
+ }
53
+ return { data: json.data ?? json, status: res.status };
54
+ }
55
+ catch (err) {
56
+ return { error: err instanceof Error ? err.message : 'Network error', status: 0 };
57
+ }
58
+ }
59
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ type SortDirection = 'asc' | 'desc';
2
+ export interface SortConfig<K extends string = string> {
3
+ key: K;
4
+ direction: SortDirection;
5
+ }
6
+ export declare function scoreRelevance(text: string, query: string): number;
7
+ export declare function sortByRelevance<T>(items: T[], query: string, getSearchFields: (item: T) => string[]): T[];
8
+ export declare function sortByColumn<T>(items: T[], sortConfig: SortConfig | null, getValue: (item: T, key: string) => string | number): T[];
9
+ export declare function toggleSort<K extends string>(current: SortConfig<K> | null, key: K): SortConfig<K>;
10
+ export {};
11
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpC,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACnD,GAAG,EAAE,CAAC,CAAC;IACP,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUlE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAAE,GACrC,CAAC,EAAE,CAOL;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAClD,CAAC,EAAE,CAUL;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAC7B,GAAG,EAAE,CAAC,GACL,UAAU,CAAC,CAAC,CAAC,CAOf"}
@@ -0,0 +1,46 @@
1
+ export function scoreRelevance(text, query) {
2
+ if (!query)
3
+ return 0;
4
+ const lower = text.toLowerCase();
5
+ const q = query.toLowerCase();
6
+ if (lower === q)
7
+ return 100;
8
+ if (lower.startsWith(q))
9
+ return 80;
10
+ const wordBoundary = new RegExp(`\\b${q.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`);
11
+ if (wordBoundary.test(lower))
12
+ return 60;
13
+ if (lower.includes(q))
14
+ return 40;
15
+ return 0;
16
+ }
17
+ export function sortByRelevance(items, query, getSearchFields) {
18
+ if (!query.trim())
19
+ return items;
20
+ return [...items].sort((a, b) => {
21
+ const scoreA = Math.max(...getSearchFields(a).map(f => scoreRelevance(f, query)));
22
+ const scoreB = Math.max(...getSearchFields(b).map(f => scoreRelevance(f, query)));
23
+ return scoreB - scoreA;
24
+ });
25
+ }
26
+ export function sortByColumn(items, sortConfig, getValue) {
27
+ if (!sortConfig)
28
+ return items;
29
+ return [...items].sort((a, b) => {
30
+ const aVal = getValue(a, sortConfig.key);
31
+ const bVal = getValue(b, sortConfig.key);
32
+ const cmp = typeof aVal === 'number' && typeof bVal === 'number'
33
+ ? aVal - bVal
34
+ : String(aVal).localeCompare(String(bVal));
35
+ return sortConfig.direction === 'asc' ? cmp : -cmp;
36
+ });
37
+ }
38
+ export function toggleSort(current, key) {
39
+ if (current?.key === key) {
40
+ return current.direction === 'asc'
41
+ ? { key, direction: 'desc' }
42
+ : { key, direction: 'asc' };
43
+ }
44
+ return { key, direction: 'asc' };
45
+ }
46
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAa;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAClF,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAU,EACV,KAAa,EACb,eAAsC;IAEtC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAClF,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAU,EACV,UAA6B,EAC7B,QAAmD;IAEnD,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;YAC9D,CAAC,CAAC,IAAI,GAAG,IAAI;YACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,OAAO,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,OAA6B,EAC7B,GAAM;IAEN,IAAI,OAAO,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,SAAS,KAAK,KAAK;YAChC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE;YAC5B,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface UseApiDataResult<T> {
2
+ data: T | null;
3
+ loading: boolean;
4
+ error: string | null;
5
+ refetch: () => void;
6
+ }
7
+ export declare function useApiData<T>(endpoint: string | null, defaultValue?: T | null): UseApiDataResult<T>;
8
+ //# sourceMappingURL=useApiData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApiData.d.ts","sourceRoot":"","sources":["../../src/lib/useApiData.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,GAAE,CAAC,GAAG,IAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAqCzG"}
@@ -0,0 +1,36 @@
1
+ 'use client';
2
+ import { useState, useEffect, useCallback, useRef } from 'react';
3
+ import { cmsApi } from './api';
4
+ export function useApiData(endpoint, defaultValue = null) {
5
+ const [data, setData] = useState(defaultValue);
6
+ const [loading, setLoading] = useState(endpoint !== null);
7
+ const [error, setError] = useState(null);
8
+ const abortRef = useRef(null);
9
+ const fetchData = useCallback(async () => {
10
+ if (!endpoint) {
11
+ setLoading(false);
12
+ return;
13
+ }
14
+ abortRef.current?.abort();
15
+ const controller = new AbortController();
16
+ abortRef.current = controller;
17
+ setLoading(true);
18
+ setError(null);
19
+ const res = await cmsApi(endpoint, { signal: controller.signal });
20
+ if (controller.signal.aborted)
21
+ return;
22
+ if (res.error) {
23
+ setError(res.error);
24
+ }
25
+ else {
26
+ setData(res.data ?? null);
27
+ }
28
+ setLoading(false);
29
+ }, [endpoint]);
30
+ useEffect(() => {
31
+ fetchData();
32
+ return () => { abortRef.current?.abort(); };
33
+ }, [fetchData]);
34
+ return { data, loading, error, refetch: fetchData };
35
+ }
36
+ //# sourceMappingURL=useApiData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApiData.js","sourceRoot":"","sources":["../../src/lib/useApiData.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAS/B,MAAM,UAAU,UAAU,CAAI,QAAuB,EAAE,eAAyB,IAAI;IAClF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW,YAAY,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC;QAE9B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,MAAM,GAAG,GAAG,MAAM,MAAM,CAAI,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAErE,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAEtC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,6 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
6
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,10 @@
1
+ interface RouteParams {
2
+ [key: string]: string;
3
+ }
4
+ export declare function useAdminRouter(basePath?: string, serverPath?: string): {
5
+ currentPath: string;
6
+ navigate: (path: string) => void;
7
+ matchRoute: (pattern: string) => RouteParams | null;
8
+ };
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAUD,wBAAgB,cAAc,CAAC,QAAQ,SAAW,EAAE,UAAU,SAAM;;qBAsB9B,MAAM;0BAW9B,MAAM,KAAG,WAAW,GAAG,IAAI;EA+BxC"}