@actuate-media/cms-admin 0.14.1 → 0.16.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 (304) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +148 -2
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/__tests__/components/posts-badges.test.d.ts +2 -0
  5. package/dist/__tests__/components/posts-badges.test.d.ts.map +1 -0
  6. package/dist/__tests__/components/posts-badges.test.js +68 -0
  7. package/dist/__tests__/components/posts-badges.test.js.map +1 -0
  8. package/dist/__tests__/layout/sidebar-posts.test.d.ts +2 -0
  9. package/dist/__tests__/layout/sidebar-posts.test.d.ts.map +1 -0
  10. package/dist/__tests__/layout/sidebar-posts.test.js +162 -0
  11. package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -0
  12. package/dist/__tests__/lib/page-editor-service.test.d.ts +2 -0
  13. package/dist/__tests__/lib/page-editor-service.test.d.ts.map +1 -0
  14. package/dist/__tests__/lib/page-editor-service.test.js +137 -0
  15. package/dist/__tests__/lib/page-editor-service.test.js.map +1 -0
  16. package/dist/__tests__/lib/pages-service.test.d.ts +2 -0
  17. package/dist/__tests__/lib/pages-service.test.d.ts.map +1 -0
  18. package/dist/__tests__/lib/pages-service.test.js +140 -0
  19. package/dist/__tests__/lib/pages-service.test.js.map +1 -0
  20. package/dist/__tests__/lib/post-editor-service.test.d.ts +2 -0
  21. package/dist/__tests__/lib/post-editor-service.test.d.ts.map +1 -0
  22. package/dist/__tests__/lib/post-editor-service.test.js +185 -0
  23. package/dist/__tests__/lib/post-editor-service.test.js.map +1 -0
  24. package/dist/__tests__/lib/posts-service.test.d.ts +2 -0
  25. package/dist/__tests__/lib/posts-service.test.d.ts.map +1 -0
  26. package/dist/__tests__/lib/posts-service.test.js +244 -0
  27. package/dist/__tests__/lib/posts-service.test.js.map +1 -0
  28. package/dist/__tests__/views/posts-list-view.test.d.ts +2 -0
  29. package/dist/__tests__/views/posts-list-view.test.d.ts.map +1 -0
  30. package/dist/__tests__/views/posts-list-view.test.js +98 -0
  31. package/dist/__tests__/views/posts-list-view.test.js.map +1 -0
  32. package/dist/actuate-admin.css +1 -1
  33. package/dist/components/pages/tag-badges.d.ts +21 -0
  34. package/dist/components/pages/tag-badges.d.ts.map +1 -0
  35. package/dist/components/pages/tag-badges.js +56 -0
  36. package/dist/components/pages/tag-badges.js.map +1 -0
  37. package/dist/components/posts/badges.d.ts +25 -0
  38. package/dist/components/posts/badges.d.ts.map +1 -0
  39. package/dist/components/posts/badges.js +123 -0
  40. package/dist/components/posts/badges.js.map +1 -0
  41. package/dist/components/posts/icons.d.ts +12 -0
  42. package/dist/components/posts/icons.d.ts.map +1 -0
  43. package/dist/components/posts/icons.js +26 -0
  44. package/dist/components/posts/icons.js.map +1 -0
  45. package/dist/layout/Header.d.ts +14 -1
  46. package/dist/layout/Header.d.ts.map +1 -1
  47. package/dist/layout/Header.js +10 -3
  48. package/dist/layout/Header.js.map +1 -1
  49. package/dist/layout/Layout.d.ts.map +1 -1
  50. package/dist/layout/Layout.js +78 -2
  51. package/dist/layout/Layout.js.map +1 -1
  52. package/dist/layout/Sidebar.d.ts +16 -0
  53. package/dist/layout/Sidebar.d.ts.map +1 -1
  54. package/dist/layout/Sidebar.js +176 -49
  55. package/dist/layout/Sidebar.js.map +1 -1
  56. package/dist/lib/page-editor-service.d.ts +45 -0
  57. package/dist/lib/page-editor-service.d.ts.map +1 -0
  58. package/dist/lib/page-editor-service.js +153 -0
  59. package/dist/lib/page-editor-service.js.map +1 -0
  60. package/dist/lib/pages-service.d.ts +143 -0
  61. package/dist/lib/pages-service.d.ts.map +1 -0
  62. package/dist/lib/pages-service.js +444 -0
  63. package/dist/lib/pages-service.js.map +1 -0
  64. package/dist/lib/post-editor-service.d.ts +57 -0
  65. package/dist/lib/post-editor-service.d.ts.map +1 -0
  66. package/dist/lib/post-editor-service.js +234 -0
  67. package/dist/lib/post-editor-service.js.map +1 -0
  68. package/dist/lib/posts-service.d.ts +73 -0
  69. package/dist/lib/posts-service.d.ts.map +1 -0
  70. package/dist/lib/posts-service.js +245 -0
  71. package/dist/lib/posts-service.js.map +1 -0
  72. package/dist/lib/preview-link.d.ts +32 -0
  73. package/dist/lib/preview-link.d.ts.map +1 -0
  74. package/dist/lib/preview-link.js +40 -0
  75. package/dist/lib/preview-link.js.map +1 -0
  76. package/dist/router/index.d.ts +1 -0
  77. package/dist/router/index.d.ts.map +1 -1
  78. package/dist/router/index.js +9 -1
  79. package/dist/router/index.js.map +1 -1
  80. package/dist/views/Dashboard.d.ts.map +1 -1
  81. package/dist/views/Dashboard.js +147 -62
  82. package/dist/views/Dashboard.js.map +1 -1
  83. package/dist/views/Pages/PageTagManager.d.ts +14 -0
  84. package/dist/views/Pages/PageTagManager.d.ts.map +1 -0
  85. package/dist/views/Pages/PageTagManager.js +145 -0
  86. package/dist/views/Pages/PageTagManager.js.map +1 -0
  87. package/dist/views/Pages/PagesListView.d.ts +18 -0
  88. package/dist/views/Pages/PagesListView.d.ts.map +1 -0
  89. package/dist/views/Pages/PagesListView.js +287 -0
  90. package/dist/views/Pages/PagesListView.js.map +1 -0
  91. package/dist/views/Posts/NewPostPicker.d.ts +16 -0
  92. package/dist/views/Posts/NewPostPicker.d.ts.map +1 -0
  93. package/dist/views/Posts/NewPostPicker.js +59 -0
  94. package/dist/views/Posts/NewPostPicker.js.map +1 -0
  95. package/dist/views/Posts/NewPostTypeInstructions.d.ts +18 -0
  96. package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -0
  97. package/dist/views/Posts/NewPostTypeInstructions.js +147 -0
  98. package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -0
  99. package/dist/views/Posts/PostTypesView.d.ts +26 -0
  100. package/dist/views/Posts/PostTypesView.d.ts.map +1 -0
  101. package/dist/views/Posts/PostTypesView.js +52 -0
  102. package/dist/views/Posts/PostTypesView.js.map +1 -0
  103. package/dist/views/Posts/PostsListView.d.ts +25 -0
  104. package/dist/views/Posts/PostsListView.d.ts.map +1 -0
  105. package/dist/views/Posts/PostsListView.js +239 -0
  106. package/dist/views/Posts/PostsListView.js.map +1 -0
  107. package/dist/views/Posts/post-type-presets.d.ts +32 -0
  108. package/dist/views/Posts/post-type-presets.d.ts.map +1 -0
  109. package/dist/views/Posts/post-type-presets.js +72 -0
  110. package/dist/views/Posts/post-type-presets.js.map +1 -0
  111. package/dist/views/page-builder/Widgets.d.ts +13 -0
  112. package/dist/views/page-builder/Widgets.d.ts.map +1 -0
  113. package/dist/views/page-builder/Widgets.js +15 -0
  114. package/dist/views/page-builder/Widgets.js.map +1 -0
  115. package/dist/views/page-editor/AddSectionModal.d.ts +20 -0
  116. package/dist/views/page-editor/AddSectionModal.d.ts.map +1 -0
  117. package/dist/views/page-editor/AddSectionModal.js +22 -0
  118. package/dist/views/page-editor/AddSectionModal.js.map +1 -0
  119. package/dist/views/page-editor/EditorCanvas.d.ts +18 -0
  120. package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -0
  121. package/dist/views/page-editor/EditorCanvas.js +64 -0
  122. package/dist/views/page-editor/EditorCanvas.js.map +1 -0
  123. package/dist/views/page-editor/EditorTopBar.d.ts +30 -0
  124. package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -0
  125. package/dist/views/page-editor/EditorTopBar.js +42 -0
  126. package/dist/views/page-editor/EditorTopBar.js.map +1 -0
  127. package/dist/views/page-editor/PagePreview.d.ts +13 -0
  128. package/dist/views/page-editor/PagePreview.d.ts.map +1 -0
  129. package/dist/views/page-editor/PagePreview.js +37 -0
  130. package/dist/views/page-editor/PagePreview.js.map +1 -0
  131. package/dist/views/page-editor/PageSectionEditor.d.ts +16 -0
  132. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -0
  133. package/dist/views/page-editor/PageSectionEditor.js +272 -0
  134. package/dist/views/page-editor/PageSectionEditor.js.map +1 -0
  135. package/dist/views/page-editor/PageSettingsModal.d.ts +12 -0
  136. package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -0
  137. package/dist/views/page-editor/PageSettingsModal.js +52 -0
  138. package/dist/views/page-editor/PageSettingsModal.js.map +1 -0
  139. package/dist/views/page-editor/SectionInspector.d.ts +17 -0
  140. package/dist/views/page-editor/SectionInspector.d.ts.map +1 -0
  141. package/dist/views/page-editor/SectionInspector.js +98 -0
  142. package/dist/views/page-editor/SectionInspector.js.map +1 -0
  143. package/dist/views/page-editor/SectionsPanel.d.ts +15 -0
  144. package/dist/views/page-editor/SectionsPanel.d.ts.map +1 -0
  145. package/dist/views/page-editor/SectionsPanel.js +43 -0
  146. package/dist/views/page-editor/SectionsPanel.js.map +1 -0
  147. package/dist/views/page-editor/ValidationSummary.d.ts +9 -0
  148. package/dist/views/page-editor/ValidationSummary.d.ts.map +1 -0
  149. package/dist/views/page-editor/ValidationSummary.js +10 -0
  150. package/dist/views/page-editor/ValidationSummary.js.map +1 -0
  151. package/dist/views/page-editor/section-icons.d.ts +4 -0
  152. package/dist/views/page-editor/section-icons.d.ts.map +1 -0
  153. package/dist/views/page-editor/section-icons.js +20 -0
  154. package/dist/views/page-editor/section-icons.js.map +1 -0
  155. package/dist/views/page-editor/section-types.d.ts +11 -0
  156. package/dist/views/page-editor/section-types.d.ts.map +1 -0
  157. package/dist/views/page-editor/section-types.js +10 -0
  158. package/dist/views/page-editor/section-types.js.map +1 -0
  159. package/dist/views/page-editor/sections/ArticleBodySection.d.ts +13 -0
  160. package/dist/views/page-editor/sections/ArticleBodySection.d.ts.map +1 -0
  161. package/dist/views/page-editor/sections/ArticleBodySection.js +23 -0
  162. package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -0
  163. package/dist/views/page-editor/sections/AuthorBioSection.d.ts +8 -0
  164. package/dist/views/page-editor/sections/AuthorBioSection.d.ts.map +1 -0
  165. package/dist/views/page-editor/sections/AuthorBioSection.js +21 -0
  166. package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -0
  167. package/dist/views/page-editor/sections/ByTheNumbersSection.d.ts +5 -0
  168. package/dist/views/page-editor/sections/ByTheNumbersSection.d.ts.map +1 -0
  169. package/dist/views/page-editor/sections/ByTheNumbersSection.js +10 -0
  170. package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -0
  171. package/dist/views/page-editor/sections/CtaBannerSection.d.ts +5 -0
  172. package/dist/views/page-editor/sections/CtaBannerSection.d.ts.map +1 -0
  173. package/dist/views/page-editor/sections/CtaBannerSection.js +10 -0
  174. package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -0
  175. package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts +5 -0
  176. package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts.map +1 -0
  177. package/dist/views/page-editor/sections/FeatureHighlightSection.js +18 -0
  178. package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -0
  179. package/dist/views/page-editor/sections/GallerySection.d.ts +6 -0
  180. package/dist/views/page-editor/sections/GallerySection.d.ts.map +1 -0
  181. package/dist/views/page-editor/sections/GallerySection.js +17 -0
  182. package/dist/views/page-editor/sections/GallerySection.js.map +1 -0
  183. package/dist/views/page-editor/sections/HeroBannerSection.d.ts +5 -0
  184. package/dist/views/page-editor/sections/HeroBannerSection.d.ts.map +1 -0
  185. package/dist/views/page-editor/sections/HeroBannerSection.js +11 -0
  186. package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -0
  187. package/dist/views/page-editor/sections/MissionSection.d.ts +6 -0
  188. package/dist/views/page-editor/sections/MissionSection.d.ts.map +1 -0
  189. package/dist/views/page-editor/sections/MissionSection.js +12 -0
  190. package/dist/views/page-editor/sections/MissionSection.js.map +1 -0
  191. package/dist/views/page-editor/sections/PullQuoteSection.d.ts +6 -0
  192. package/dist/views/page-editor/sections/PullQuoteSection.d.ts.map +1 -0
  193. package/dist/views/page-editor/sections/PullQuoteSection.js +13 -0
  194. package/dist/views/page-editor/sections/PullQuoteSection.js.map +1 -0
  195. package/dist/views/page-editor/sections/RelatedPostsSection.d.ts +12 -0
  196. package/dist/views/page-editor/sections/RelatedPostsSection.d.ts.map +1 -0
  197. package/dist/views/page-editor/sections/RelatedPostsSection.js +23 -0
  198. package/dist/views/page-editor/sections/RelatedPostsSection.js.map +1 -0
  199. package/dist/views/page-editor/sections/SectionRenderer.d.ts +22 -0
  200. package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -0
  201. package/dist/views/page-editor/sections/SectionRenderer.js +52 -0
  202. package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -0
  203. package/dist/views/page-editor/sections/index.d.ts +14 -0
  204. package/dist/views/page-editor/sections/index.d.ts.map +1 -0
  205. package/dist/views/page-editor/sections/index.js +12 -0
  206. package/dist/views/page-editor/sections/index.js.map +1 -0
  207. package/dist/views/page-editor/sections/parts.d.ts +55 -0
  208. package/dist/views/page-editor/sections/parts.d.ts.map +1 -0
  209. package/dist/views/page-editor/sections/parts.js +60 -0
  210. package/dist/views/page-editor/sections/parts.js.map +1 -0
  211. package/dist/views/page-editor/viewports.d.ts +14 -0
  212. package/dist/views/page-editor/viewports.d.ts.map +1 -0
  213. package/dist/views/page-editor/viewports.js +12 -0
  214. package/dist/views/page-editor/viewports.js.map +1 -0
  215. package/dist/views/post-editor/PostEditorCanvas.d.ts +21 -0
  216. package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -0
  217. package/dist/views/post-editor/PostEditorCanvas.js +58 -0
  218. package/dist/views/post-editor/PostEditorCanvas.js.map +1 -0
  219. package/dist/views/post-editor/PostFieldsModal.d.ts +12 -0
  220. package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -0
  221. package/dist/views/post-editor/PostFieldsModal.js +53 -0
  222. package/dist/views/post-editor/PostFieldsModal.js.map +1 -0
  223. package/dist/views/post-editor/PostHeader.d.ts +15 -0
  224. package/dist/views/post-editor/PostHeader.d.ts.map +1 -0
  225. package/dist/views/post-editor/PostHeader.js +27 -0
  226. package/dist/views/post-editor/PostHeader.js.map +1 -0
  227. package/dist/views/post-editor/PostHeaderPanel.d.ts +11 -0
  228. package/dist/views/post-editor/PostHeaderPanel.d.ts.map +1 -0
  229. package/dist/views/post-editor/PostHeaderPanel.js +21 -0
  230. package/dist/views/post-editor/PostHeaderPanel.js.map +1 -0
  231. package/dist/views/post-editor/PostPreview.d.ts +14 -0
  232. package/dist/views/post-editor/PostPreview.d.ts.map +1 -0
  233. package/dist/views/post-editor/PostPreview.js +53 -0
  234. package/dist/views/post-editor/PostPreview.js.map +1 -0
  235. package/dist/views/post-editor/PostSectionEditor.d.ts +17 -0
  236. package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -0
  237. package/dist/views/post-editor/PostSectionEditor.js +290 -0
  238. package/dist/views/post-editor/PostSectionEditor.js.map +1 -0
  239. package/dist/views/post-editor/PostTemplateEditor.d.ts +9 -0
  240. package/dist/views/post-editor/PostTemplateEditor.d.ts.map +1 -0
  241. package/dist/views/post-editor/PostTemplateEditor.js +144 -0
  242. package/dist/views/post-editor/PostTemplateEditor.js.map +1 -0
  243. package/package.json +2 -2
  244. package/src/AdminRoot.tsx +213 -2
  245. package/src/__tests__/components/posts-badges.test.tsx +77 -0
  246. package/src/__tests__/layout/sidebar-posts.test.ts +179 -0
  247. package/src/__tests__/lib/page-editor-service.test.ts +173 -0
  248. package/src/__tests__/lib/pages-service.test.ts +157 -0
  249. package/src/__tests__/lib/post-editor-service.test.ts +215 -0
  250. package/src/__tests__/lib/posts-service.test.ts +279 -0
  251. package/src/__tests__/views/posts-list-view.test.ts +110 -0
  252. package/src/components/pages/tag-badges.tsx +104 -0
  253. package/src/components/posts/badges.tsx +170 -0
  254. package/src/components/posts/icons.ts +40 -0
  255. package/src/layout/Header.tsx +90 -43
  256. package/src/layout/Layout.tsx +166 -1
  257. package/src/layout/Sidebar.tsx +287 -101
  258. package/src/lib/page-editor-service.ts +233 -0
  259. package/src/lib/pages-service.ts +599 -0
  260. package/src/lib/post-editor-service.ts +342 -0
  261. package/src/lib/posts-service.ts +366 -0
  262. package/src/lib/preview-link.ts +63 -0
  263. package/src/router/index.ts +10 -1
  264. package/src/views/Dashboard.tsx +270 -131
  265. package/src/views/Pages/PageTagManager.tsx +436 -0
  266. package/src/views/Pages/PagesListView.tsx +944 -0
  267. package/src/views/Posts/NewPostPicker.tsx +147 -0
  268. package/src/views/Posts/NewPostTypeInstructions.tsx +344 -0
  269. package/src/views/Posts/PostTypesView.tsx +194 -0
  270. package/src/views/Posts/PostsListView.tsx +869 -0
  271. package/src/views/Posts/post-type-presets.ts +105 -0
  272. package/src/views/page-builder/Widgets.tsx +44 -0
  273. package/src/views/page-editor/AddSectionModal.tsx +56 -0
  274. package/src/views/page-editor/EditorCanvas.tsx +127 -0
  275. package/src/views/page-editor/EditorTopBar.tsx +233 -0
  276. package/src/views/page-editor/PagePreview.tsx +96 -0
  277. package/src/views/page-editor/PageSectionEditor.tsx +476 -0
  278. package/src/views/page-editor/PageSettingsModal.tsx +154 -0
  279. package/src/views/page-editor/SectionInspector.tsx +599 -0
  280. package/src/views/page-editor/SectionsPanel.tsx +270 -0
  281. package/src/views/page-editor/ValidationSummary.tsx +53 -0
  282. package/src/views/page-editor/section-icons.ts +33 -0
  283. package/src/views/page-editor/section-types.ts +27 -0
  284. package/src/views/page-editor/sections/ArticleBodySection.tsx +57 -0
  285. package/src/views/page-editor/sections/AuthorBioSection.tsx +61 -0
  286. package/src/views/page-editor/sections/ByTheNumbersSection.tsx +41 -0
  287. package/src/views/page-editor/sections/CtaBannerSection.tsx +29 -0
  288. package/src/views/page-editor/sections/FeatureHighlightSection.tsx +63 -0
  289. package/src/views/page-editor/sections/GallerySection.tsx +54 -0
  290. package/src/views/page-editor/sections/HeroBannerSection.tsx +44 -0
  291. package/src/views/page-editor/sections/MissionSection.tsx +22 -0
  292. package/src/views/page-editor/sections/PullQuoteSection.tsx +27 -0
  293. package/src/views/page-editor/sections/RelatedPostsSection.tsx +55 -0
  294. package/src/views/page-editor/sections/SectionRenderer.tsx +102 -0
  295. package/src/views/page-editor/sections/index.ts +13 -0
  296. package/src/views/page-editor/sections/parts.tsx +113 -0
  297. package/src/views/page-editor/viewports.ts +25 -0
  298. package/src/views/post-editor/PostEditorCanvas.tsx +123 -0
  299. package/src/views/post-editor/PostFieldsModal.tsx +196 -0
  300. package/src/views/post-editor/PostHeader.tsx +87 -0
  301. package/src/views/post-editor/PostHeaderPanel.tsx +107 -0
  302. package/src/views/post-editor/PostPreview.tsx +114 -0
  303. package/src/views/post-editor/PostSectionEditor.tsx +506 -0
  304. package/src/views/post-editor/PostTemplateEditor.tsx +347 -0
@@ -0,0 +1,239 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Search, Settings, Trash2, X, } from 'lucide-react';
5
+ import { toast } from 'sonner';
6
+ import { bulkDeletePosts, bulkUpdatePosts, fetchPosts, } from '../../lib/posts-service.js';
7
+ import { PostStatusBadge, PostTypeBadge, SeoScoreIndicator, paletteFor, } from '../../components/posts/badges.js';
8
+ import { ConfirmDialog } from '../../components/ui/ConfirmDialog.js';
9
+ const PAGE_SIZE = 10;
10
+ export function PostsListView({ onNavigate }) {
11
+ const [activeType, setActiveType] = useState('all');
12
+ const [search, setSearch] = useState('');
13
+ const [debouncedSearch, setDebouncedSearch] = useState('');
14
+ const [status, setStatus] = useState('all');
15
+ const [author, setAuthor] = useState('all');
16
+ const [sortBy, setSortBy] = useState('date');
17
+ const [dir, setDir] = useState('desc');
18
+ const [page, setPage] = useState(1);
19
+ const [selected, setSelected] = useState(new Set());
20
+ const [data, setData] = useState(null);
21
+ const [loading, setLoading] = useState(true);
22
+ const [error, setError] = useState(null);
23
+ const [refreshToken, setRefreshToken] = useState(0);
24
+ const [pendingBulk, setPendingBulk] = useState(null);
25
+ const debounceTimer = useRef(null);
26
+ useEffect(() => {
27
+ if (debounceTimer.current)
28
+ clearTimeout(debounceTimer.current);
29
+ debounceTimer.current = setTimeout(() => {
30
+ setDebouncedSearch(search.trim());
31
+ setPage(1);
32
+ }, 250);
33
+ return () => {
34
+ if (debounceTimer.current)
35
+ clearTimeout(debounceTimer.current);
36
+ };
37
+ }, [search]);
38
+ // Re-fetch when any input that affects the result set changes.
39
+ useEffect(() => {
40
+ let cancelled = false;
41
+ setLoading(true);
42
+ setError(null);
43
+ fetchPosts({
44
+ postType: activeType,
45
+ status,
46
+ author,
47
+ search: debouncedSearch,
48
+ sortBy,
49
+ sortDirection: dir,
50
+ page,
51
+ pageSize: PAGE_SIZE,
52
+ })
53
+ .then((res) => {
54
+ if (cancelled)
55
+ return;
56
+ setData(res);
57
+ setLoading(false);
58
+ })
59
+ .catch((err) => {
60
+ if (cancelled)
61
+ return;
62
+ setError(err instanceof Error ? err.message : 'Failed to load posts');
63
+ setLoading(false);
64
+ });
65
+ return () => {
66
+ cancelled = true;
67
+ };
68
+ }, [activeType, status, author, debouncedSearch, sortBy, dir, page, refreshToken]);
69
+ // Whenever the active type tab changes, reset paging to page 1.
70
+ useEffect(() => {
71
+ setPage(1);
72
+ setSelected(new Set());
73
+ }, [activeType, debouncedSearch, status, author]);
74
+ const total = data?.total ?? 0;
75
+ const totalAll = useMemo(() => (data?.types ?? []).reduce((sum, t) => sum + t.postCount, 0), [data?.types]);
76
+ const totalPages = Math.max(1, Math.ceil(total / PAGE_SIZE));
77
+ const posts = data?.posts ?? [];
78
+ const types = data?.types ?? [];
79
+ const authors = data?.authors ?? [];
80
+ const handleSort = useCallback((field) => {
81
+ if (sortBy === field) {
82
+ setDir(dir === 'asc' ? 'desc' : 'asc');
83
+ }
84
+ else {
85
+ setSortBy(field);
86
+ setDir(field === 'date' || field === 'seo' ? 'desc' : 'asc');
87
+ }
88
+ }, [sortBy, dir]);
89
+ const clearFilters = () => {
90
+ setSearch('');
91
+ setStatus('all');
92
+ setAuthor('all');
93
+ setActiveType('all');
94
+ setPage(1);
95
+ };
96
+ const filtersAreActive = debouncedSearch !== '' || status !== 'all' || author !== 'all' || activeType !== 'all';
97
+ // ─── Selection / bulk actions ─────────────────────────────────────
98
+ const toggleOne = (id) => setSelected((s) => {
99
+ const next = new Set(s);
100
+ if (next.has(id))
101
+ next.delete(id);
102
+ else
103
+ next.add(id);
104
+ return next;
105
+ });
106
+ const allOnPageSelected = posts.length > 0 && posts.every((p) => selected.has(p.id));
107
+ const toggleAllOnPage = (checked) => setSelected((s) => {
108
+ const next = new Set(s);
109
+ if (checked)
110
+ for (const p of posts)
111
+ next.add(p.id);
112
+ else
113
+ for (const p of posts)
114
+ next.delete(p.id);
115
+ return next;
116
+ });
117
+ const selectedPosts = useMemo(() => posts.filter((p) => selected.has(p.id)), [posts, selected]);
118
+ const runBulkUpdate = async (target) => {
119
+ const ids = selectedPosts.map((p) => ({ postTypeId: p.postTypeId, id: p.id }));
120
+ if (ids.length === 0)
121
+ return;
122
+ const verb = target === 'PUBLISHED' ? 'Publishing' : 'Updating';
123
+ const promise = bulkUpdatePosts(ids, { status: target });
124
+ toast.promise(promise, {
125
+ loading: `${verb} ${ids.length} post${ids.length === 1 ? '' : 's'}…`,
126
+ success: (r) => `${r.ok} updated${r.failed ? `, ${r.failed} failed` : ''}`,
127
+ error: 'Bulk update failed',
128
+ });
129
+ await promise;
130
+ setSelected(new Set());
131
+ setRefreshToken((t) => t + 1);
132
+ };
133
+ const runBulkDelete = async () => {
134
+ const ids = selectedPosts.map((p) => ({ postTypeId: p.postTypeId, id: p.id }));
135
+ if (ids.length === 0)
136
+ return;
137
+ const promise = bulkDeletePosts(ids);
138
+ toast.promise(promise, {
139
+ loading: `Deleting ${ids.length} post${ids.length === 1 ? '' : 's'}…`,
140
+ success: (r) => `${r.ok} deleted${r.failed ? `, ${r.failed} failed` : ''}`,
141
+ error: 'Bulk delete failed',
142
+ });
143
+ await promise;
144
+ setSelected(new Set());
145
+ setRefreshToken((t) => t + 1);
146
+ };
147
+ // ─── Render ───────────────────────────────────────────────────────
148
+ return (_jsxs("div", { className: "flex h-full flex-col gap-4 p-4 sm:p-6", children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h1", { className: "text-foreground text-xl font-medium tracking-tight sm:text-2xl", children: "Posts" }), _jsxs("p", { className: "text-muted-foreground text-sm", children: [totalAll, " total post", totalAll === 1 ? '' : 's', " across all types"] })] }), _jsx(TypeTabs, { types: types, totalAll: totalAll, active: activeType, onChange: setActiveType }), _jsx(ControlsRow, { search: search, onSearchChange: setSearch, status: status, onStatusChange: (s) => {
149
+ setStatus(s);
150
+ setPage(1);
151
+ }, author: author, onAuthorChange: (a) => {
152
+ setAuthor(a);
153
+ setPage(1);
154
+ }, authors: authors, resultCount: total, onManageTypes: () => onNavigate('/posts/types') }), selected.size > 0 && (_jsx(BulkActionBar, { count: selected.size, onClear: () => setSelected(new Set()), onPublish: () => runBulkUpdate('PUBLISHED'), onDraft: () => runBulkUpdate('DRAFT'), onDelete: () => setPendingBulk('delete') })), _jsxs("div", { className: "bg-card border-border overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("table", { className: "w-full table-fixed", role: "table", "aria-label": "Posts", children: [_jsxs("colgroup", { children: [_jsx("col", { style: { width: '40px' } }), _jsx("col", {}), _jsx("col", { style: { width: '140px' } }), _jsx("col", { style: { width: '180px' } }), _jsx("col", { style: { width: '130px' } }), _jsx("col", { style: { width: '120px' } }), _jsx("col", { style: { width: '90px' } })] }), _jsx("thead", { className: "border-border bg-muted/40 border-b", children: _jsxs("tr", { className: "text-muted-foreground text-xs", children: [_jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx("input", { type: "checkbox", "aria-label": "Select all posts on this page", checked: allOnPageSelected, onChange: (e) => toggleAllOnPage(e.target.checked), className: "border-border accent-primary rounded" }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Title", field: "title", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Type", field: "type", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Author", field: "author", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Status", field: "status", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Date", field: "date", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "SEO", field: "seo", current: sortBy, dir: dir, onSort: handleSort }) })] }) }), _jsxs("tbody", { children: [loading && posts.length === 0 && _jsx(LoadingRows, {}), !loading && error && (_jsx("tr", { children: _jsxs("td", { colSpan: 7, className: "px-3 py-12 text-center", children: [_jsx("div", { className: "text-foreground mb-2 text-sm font-medium", children: error }), _jsx("button", { onClick: () => setRefreshToken((t) => t + 1), className: "text-primary text-sm hover:underline", children: "Try again" })] }) })), !loading && !error && posts.length === 0 && (_jsx(EmptyRow, { filtersActive: filtersAreActive, onClear: clearFilters, onNewPost: () => onNavigate('/posts/new') })), !loading &&
155
+ !error &&
156
+ posts.map((p) => (_jsx(PostRow, { post: p, selected: selected.has(p.id), onSelect: () => toggleOne(p.id), onOpen: () => onNavigate(`/posts/${p.postTypeId}/${p.id}/edit`) }, p.id)))] })] }), _jsx(PaginationFooter, { page: page, totalPages: totalPages, total: total, pageSize: PAGE_SIZE, onPage: setPage })] }), _jsx(ConfirmDialog, { open: pendingBulk === 'delete', title: `Delete ${selected.size} post${selected.size === 1 ? '' : 's'}?`, description: "This moves the selected posts to trash. They can be restored from the per-type list for 30 days.", confirmLabel: "Delete", destructive: true, onClose: () => setPendingBulk(null), onConfirm: () => {
157
+ void runBulkDelete();
158
+ } })] }));
159
+ }
160
+ // ─── Sub-components ──────────────────────────────────────────────────
161
+ function SortHeader({ label, field, current, dir, onSort, }) {
162
+ const active = current === field;
163
+ const ariaSort = active ? (dir === 'asc' ? 'ascending' : 'descending') : 'none';
164
+ return (_jsxs("button", { type: "button", onClick: () => onSort(field), "aria-sort": ariaSort, className: `hover:text-foreground inline-flex items-center gap-1 text-xs font-medium tracking-wider uppercase transition-colors ${active ? 'text-foreground' : 'text-muted-foreground'}`, children: [_jsx("span", { children: label }), active &&
165
+ (dir === 'asc' ? (_jsx(ChevronUp, { className: "h-3 w-3", "aria-hidden": true })) : (_jsx(ChevronDown, { className: "h-3 w-3", "aria-hidden": true })))] }));
166
+ }
167
+ function TypeTabs({ types, totalAll, active, onChange, }) {
168
+ return (_jsxs("div", { role: "tablist", "aria-label": "Filter posts by type", className: "border-border flex flex-wrap items-center gap-1 border-b pb-px", children: [_jsx(TabPill, { label: "All Posts", count: totalAll, active: active === 'all', onClick: () => onChange('all') }), types.map((t) => (_jsx(TabPill, { label: t.name, count: t.postCount, active: active === t.slug, onClick: () => onChange(t.slug) }, t.slug)))] }));
169
+ }
170
+ function TabPill({ label, count, active, onClick, }) {
171
+ return (_jsxs("button", { type: "button", role: "tab", "aria-selected": active, onClick: onClick, className: `relative inline-flex items-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors ${active
172
+ ? 'bg-primary/10 text-primary'
173
+ : 'text-muted-foreground hover:text-foreground hover:bg-accent'}`, children: [_jsx("span", { children: label }), _jsx("span", { className: `rounded-full px-1.5 text-xs tabular-nums ${active ? 'bg-primary/15 text-primary' : 'bg-muted text-muted-foreground'}`, children: count })] }));
174
+ }
175
+ function ControlsRow({ search, onSearchChange, status, onStatusChange, author, onAuthorChange, authors, resultCount, onManageTypes, }) {
176
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs("div", { className: "relative max-w-sm flex-1", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2", "aria-hidden": true }), _jsx("input", { type: "search", value: search, onChange: (e) => onSearchChange(e.target.value), "aria-label": "Search posts", placeholder: "Search posts\u2026", className: "border-border bg-card text-foreground placeholder:text-muted-foreground focus:border-primary focus:ring-primary/30 w-full rounded-lg border py-2 pr-3 pl-9 text-sm shadow-sm focus:ring-2 focus:outline-none" })] }), _jsx(FilterSelect, { label: "Status", value: status, onChange: (v) => onStatusChange(v), options: [
177
+ { value: 'all', label: 'All' },
178
+ { value: 'PUBLISHED', label: 'Published' },
179
+ { value: 'DRAFT', label: 'Draft' },
180
+ { value: 'SCHEDULED', label: 'Scheduled' },
181
+ ] }), _jsx(FilterSelect, { label: "Author", value: author, onChange: onAuthorChange, options: [
182
+ { value: 'all', label: 'All' },
183
+ ...authors.map((a) => ({ value: a.id, label: a.name })),
184
+ ] }), _jsxs("div", { className: "ml-auto flex items-center gap-3", children: [_jsxs("button", { type: "button", onClick: onManageTypes, className: "border-border bg-background text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors", children: [_jsx(Settings, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Manage types"] }), _jsxs("span", { className: "text-muted-foreground text-sm tabular-nums", children: [resultCount, " ", resultCount === 1 ? 'result' : 'results'] })] })] }));
185
+ }
186
+ function FilterSelect({ label, value, onChange, options, }) {
187
+ return (_jsxs("label", { className: "text-foreground inline-flex items-center gap-1.5 text-sm", children: [_jsxs("span", { className: "text-muted-foreground", children: [label, ":"] }), _jsx("select", { value: value, onChange: (e) => onChange(e.target.value), className: "border-border bg-card text-foreground focus:border-primary focus:ring-primary/30 rounded-lg border px-2.5 py-1.5 text-sm shadow-sm focus:ring-2 focus:outline-none", children: options.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) })] }));
188
+ }
189
+ function BulkActionBar({ count, onClear, onPublish, onDraft, onDelete, }) {
190
+ return (_jsxs("div", { className: "border-primary/30 bg-primary/5 flex items-center gap-2 rounded-lg border px-4 py-2", children: [_jsxs("span", { className: "text-foreground text-sm font-medium", children: [count, " selected"] }), _jsx("div", { className: "bg-border h-4 w-px", "aria-hidden": true }), _jsx("button", { type: "button", onClick: onPublish, className: "text-foreground hover:bg-accent rounded-md px-2 py-1 text-sm transition-colors", children: "Publish" }), _jsx("button", { type: "button", onClick: onDraft, className: "text-foreground hover:bg-accent rounded-md px-2 py-1 text-sm transition-colors", children: "Move to draft" }), _jsxs("button", { type: "button", onClick: onDelete, className: "text-destructive hover:bg-destructive/10 inline-flex items-center gap-1 rounded-md px-2 py-1 text-sm transition-colors", children: [_jsx(Trash2, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Delete"] }), _jsxs("button", { type: "button", onClick: onClear, className: "text-muted-foreground hover:text-foreground ml-auto inline-flex items-center gap-1 rounded-md px-2 py-1 text-sm transition-colors", children: [_jsx(X, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Clear"] })] }));
191
+ }
192
+ function PostRow({ post, selected, onSelect, onOpen, }) {
193
+ const p = paletteFor(post.postTypeAccentColor);
194
+ return (_jsxs("tr", { className: `border-border hover:bg-muted/30 group border-b transition-colors last:border-b-0 ${selected ? 'bg-primary/5' : ''}`, children: [_jsx("td", { className: "px-3 py-3", onClick: (e) => e.stopPropagation(), children: _jsx("input", { type: "checkbox", "aria-label": `Select "${post.title}"`, checked: selected, onChange: onSelect, className: "border-border accent-primary rounded" }) }), _jsx("td", { className: "px-3 py-3", children: _jsxs("button", { type: "button", onClick: onOpen, className: "flex w-full items-center gap-3 text-left", children: [_jsx("span", { "aria-hidden": true, className: `block h-9 w-9 shrink-0 rounded-md ${p.bg.split(' ')[0]}` }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "text-foreground group-hover:text-primary block truncate text-sm font-medium", children: post.title }), _jsxs("span", { className: "text-muted-foreground block truncate text-xs", children: ["/", post.postTypeId, "/", post.slug || '—'] })] })] }) }), _jsx("td", { className: "px-3 py-3", children: _jsx(PostTypeBadge, { label: post.postTypeName, color: post.postTypeAccentColor }) }), _jsx("td", { className: "px-3 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { "aria-hidden": true, className: "bg-muted text-muted-foreground inline-flex h-7 w-7 items-center justify-center rounded-full text-[11px] font-semibold", children: post.authorInitials }), _jsx("span", { className: "text-foreground truncate text-sm", children: post.authorName })] }) }), _jsx("td", { className: "px-3 py-3", children: _jsx(PostStatusBadge, { status: post.status }) }), _jsx("td", { className: "text-muted-foreground px-3 py-3 text-sm tabular-nums", children: formatDateShort(post.updatedDate) }), _jsx("td", { className: "px-3 py-3", children: _jsx(SeoScoreIndicator, { score: post.seoScore }) })] }));
195
+ }
196
+ function LoadingRows() {
197
+ const rows = Array.from({ length: 8 });
198
+ return (_jsx(_Fragment, { children: rows.map((_, i) => (_jsx("tr", { className: "border-border border-b last:border-b-0", children: Array.from({ length: 7 }).map((__, j) => (_jsx("td", { className: "px-3 py-3", children: _jsx("div", { className: "bg-muted h-4 w-full animate-pulse rounded" }) }, j))) }, i))) }));
199
+ }
200
+ function EmptyRow({ filtersActive, onClear, onNewPost, }) {
201
+ return (_jsx("tr", { children: _jsxs("td", { colSpan: 7, className: "px-3 py-16 text-center", children: [_jsx("div", { className: "text-foreground mb-2 text-sm font-medium", children: filtersActive ? 'No posts match the current filters.' : 'No posts yet.' }), _jsx("div", { className: "text-muted-foreground mb-4 text-sm", children: filtersActive
202
+ ? 'Try clearing the search or filters above.'
203
+ : 'Create your first post to get started.' }), filtersActive ? (_jsx("button", { type: "button", onClick: onClear, className: "text-primary text-sm hover:underline", children: "Clear filters" })) : (_jsx("button", { type: "button", onClick: onNewPost, className: "bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors", children: "New Post" }))] }) }));
204
+ }
205
+ function PaginationFooter({ page, totalPages, total, pageSize, onPage, }) {
206
+ const start = total === 0 ? 0 : (page - 1) * pageSize + 1;
207
+ const end = Math.min(total, page * pageSize);
208
+ return (_jsxs("div", { className: "border-border flex items-center justify-between border-t px-4 py-3 text-sm", children: [_jsxs("span", { className: "text-muted-foreground tabular-nums", children: [start, "\u2013", end, " of ", total, " post", total === 1 ? '' : 's'] }), _jsxs("nav", { className: "flex items-center gap-1", "aria-label": "Posts pagination", children: [_jsx("button", { type: "button", onClick: () => onPage(Math.max(1, page - 1)), disabled: page === 1, "aria-label": "Previous page", className: "border-border bg-background text-foreground hover:bg-accent inline-flex h-8 w-8 items-center justify-center rounded-md border transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: _jsx(ChevronLeft, { className: "h-4 w-4", "aria-hidden": true }) }), pageNumbers(page, totalPages).map((p, idx) => p === '…' ? (_jsx("span", { "aria-hidden": true, className: "text-muted-foreground inline-flex h-8 w-8 items-center justify-center text-sm", children: "\u2026" }, `gap-${idx}`)) : (_jsx("button", { type: "button", onClick: () => onPage(p), "aria-current": p === page ? 'page' : undefined, className: `inline-flex h-8 w-8 items-center justify-center rounded-md text-sm tabular-nums transition-colors ${p === page
209
+ ? 'bg-primary text-primary-foreground'
210
+ : 'border-border bg-background text-foreground hover:bg-accent border'}`, children: p }, p))), _jsx("button", { type: "button", onClick: () => onPage(Math.min(totalPages, page + 1)), disabled: page === totalPages, "aria-label": "Next page", className: "border-border bg-background text-foreground hover:bg-accent inline-flex h-8 w-8 items-center justify-center rounded-md border transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: _jsx(ChevronRight, { className: "h-4 w-4", "aria-hidden": true }) })] })] }));
211
+ }
212
+ // ─── Helpers ─────────────────────────────────────────────────────────
213
+ function formatDateShort(input) {
214
+ const d = new Date(input);
215
+ if (Number.isNaN(d.getTime()))
216
+ return '—';
217
+ return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });
218
+ }
219
+ /**
220
+ * Return up to 7 page-control entries: a sliding window around the
221
+ * current page with ellipsis markers. Keeps the footer narrow even on
222
+ * collections with hundreds of pages.
223
+ */
224
+ export function pageNumbers(current, total) {
225
+ if (total <= 7)
226
+ return Array.from({ length: total }, (_, i) => i + 1);
227
+ const out = [1];
228
+ const start = Math.max(2, current - 1);
229
+ const end = Math.min(total - 1, current + 1);
230
+ if (start > 2)
231
+ out.push('…');
232
+ for (let i = start; i <= end; i++)
233
+ out.push(i);
234
+ if (end < total - 1)
235
+ out.push('…');
236
+ out.push(total);
237
+ return out;
238
+ }
239
+ //# sourceMappingURL=PostsListView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostsListView.js","sourceRoot":"","sources":["../../../src/views/Posts/PostsListView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { PostTypeIconName } from '../../components/posts/icons.js';
2
+ /**
3
+ * Quick Post Type presets — curated starter templates surfaced on the
4
+ * New Post Type screen. Picking one pre-fills the form (slug, labels,
5
+ * icon, accent color, description) AND a tailored set of extra fields
6
+ * that get injected into the generated `actuate.config.ts` snippet
7
+ * after the shared base fields (title / slug / body / SEO / …).
8
+ *
9
+ * Presets are NOT a runtime data model — they only seed the snippet.
10
+ * Collections stay code-defined; this just saves the developer from
11
+ * hand-authoring common field sets.
12
+ */
13
+ export type PresetColor = 'purple' | 'green' | 'orange' | 'blue' | 'red' | 'pink';
14
+ export interface QuickPreset {
15
+ key: string;
16
+ /** Gallery card label, e.g. "Case Studies". */
17
+ label: string;
18
+ singular: string;
19
+ plural: string;
20
+ slug: string;
21
+ description: string;
22
+ color: PresetColor;
23
+ icon: PostTypeIconName;
24
+ /**
25
+ * Field definition lines injected after the shared base fields.
26
+ * Each entry is a complete `key: { … },` line (no leading indent —
27
+ * the snippet generator indents them).
28
+ */
29
+ extraFields: string[];
30
+ }
31
+ export declare const POST_TYPE_PRESETS: QuickPreset[];
32
+ //# sourceMappingURL=post-type-presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-type-presets.d.ts","sourceRoot":"","sources":["../../../src/views/Posts/post-type-presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAEjF,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,WAAW,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB;;;;OAIG;IACH,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,eAAO,MAAM,iBAAiB,EAAE,WAAW,EAsE1C,CAAA"}
@@ -0,0 +1,72 @@
1
+ export const POST_TYPE_PRESETS = [
2
+ {
3
+ key: 'case-studies',
4
+ label: 'Case Studies',
5
+ singular: 'Case Study',
6
+ plural: 'Case Studies',
7
+ slug: 'case-studies',
8
+ description: 'Client success stories and detailed project case studies.',
9
+ color: 'green',
10
+ icon: 'briefcase',
11
+ extraFields: [
12
+ "client: { type: 'text', label: 'Client Name' },",
13
+ "industry: { type: 'text', label: 'Industry' },",
14
+ "results: { type: 'richText', label: 'Results & Outcomes' },",
15
+ ],
16
+ },
17
+ {
18
+ key: 'news',
19
+ label: 'News',
20
+ singular: 'News Item',
21
+ plural: 'News',
22
+ slug: 'news',
23
+ description: 'Company announcements, press releases, and industry news.',
24
+ color: 'orange',
25
+ icon: 'newspaper',
26
+ extraFields: ["source: { type: 'text', label: 'Source' },"],
27
+ },
28
+ {
29
+ key: 'portfolio',
30
+ label: 'Portfolio',
31
+ singular: 'Portfolio Item',
32
+ plural: 'Portfolio',
33
+ slug: 'portfolio',
34
+ description: 'Showcase projects, work samples, and creative pieces.',
35
+ color: 'blue',
36
+ icon: 'image',
37
+ extraFields: [
38
+ "projectUrl: { type: 'url', label: 'Project URL' },",
39
+ "gallery: { type: 'media', label: 'Gallery' },",
40
+ ],
41
+ },
42
+ {
43
+ key: 'events',
44
+ label: 'Events',
45
+ singular: 'Event',
46
+ plural: 'Events',
47
+ slug: 'events',
48
+ description: 'Webinars, conferences, and scheduled happenings.',
49
+ color: 'pink',
50
+ icon: 'calendar',
51
+ extraFields: [
52
+ "startDate: { type: 'date', label: 'Start Date', includeTime: true },",
53
+ "endDate: { type: 'date', label: 'End Date', includeTime: true },",
54
+ "location: { type: 'text', label: 'Location' },",
55
+ ],
56
+ },
57
+ {
58
+ key: 'team',
59
+ label: 'Team Members',
60
+ singular: 'Team Member',
61
+ plural: 'Team',
62
+ slug: 'team',
63
+ description: 'Staff bios, headshots, and role information.',
64
+ color: 'purple',
65
+ icon: 'users',
66
+ extraFields: [
67
+ "role: { type: 'text', label: 'Role' },",
68
+ "headshot: { type: 'media', label: 'Headshot' },",
69
+ ],
70
+ },
71
+ ];
72
+ //# sourceMappingURL=post-type-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-type-presets.js","sourceRoot":"","sources":["../../../src/views/Posts/post-type-presets.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C;QACE,GAAG,EAAE,cAAc;QACnB,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,2DAA2D;QACxE,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE;YACX,iDAAiD;YACjD,gDAAgD;YAChD,6DAA6D;SAC9D;KACF;IACD;QACE,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,2DAA2D;QACxE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,CAAC,4CAA4C,CAAC;KAC5D;IACD;QACE,GAAG,EAAE,WAAW;QAChB,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,gBAAgB;QAC1B,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,uDAAuD;QACpE,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,OAAO;QACb,WAAW,EAAE;YACX,oDAAoD;YACpD,+CAA+C;SAChD;KACF;IACD;QACE,GAAG,EAAE,QAAQ;QACb,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kDAAkD;QAC/D,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE;YACX,sEAAsE;YACtE,kEAAkE;YAClE,gDAAgD;SACjD;KACF;IACD;QACE,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,OAAO;QACb,WAAW,EAAE;YACX,wCAAwC;YACxC,iDAAiD;SAClD;KACF;CACF,CAAA"}
@@ -0,0 +1,13 @@
1
+ export interface WidgetsProps {
2
+ onNavigate?: (path: string) => void;
3
+ }
4
+ /**
5
+ * /widgets — placeholder for the embeddable Widgets library.
6
+ *
7
+ * Widgets are reusable, embeddable components (forms, CTAs, banners)
8
+ * that can be dropped into pages and saved sections. The management UI
9
+ * ships in a later release; this view establishes the route and nav
10
+ * entry with an honest empty state rather than a dead link.
11
+ */
12
+ export declare function Widgets({ onNavigate }: WidgetsProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=Widgets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/Widgets.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,2CA2BnD"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { LayoutGrid } from 'lucide-react';
4
+ /**
5
+ * /widgets — placeholder for the embeddable Widgets library.
6
+ *
7
+ * Widgets are reusable, embeddable components (forms, CTAs, banners)
8
+ * that can be dropped into pages and saved sections. The management UI
9
+ * ships in a later release; this view establishes the route and nav
10
+ * entry with an honest empty state rather than a dead link.
11
+ */
12
+ export function Widgets({ onNavigate }) {
13
+ return (_jsxs("div", { className: "p-4 pr-8", children: [_jsxs("div", { className: "mb-4", children: [_jsx("h1", { className: "text-foreground mb-1 text-2xl font-medium", children: "Widgets" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Reusable, embeddable components for pages and saved sections." })] }), _jsxs("div", { className: "border-border bg-card rounded-lg border p-8 text-center", children: [_jsx(LayoutGrid, { className: "text-muted-foreground mx-auto mb-3 h-8 w-8", "aria-hidden": true }), _jsx("h2", { className: "text-foreground mb-1 text-lg font-medium", children: "Widgets are coming soon" }), _jsx("p", { className: "text-muted-foreground mx-auto mb-4 max-w-md text-sm", children: "The widget library lets you build embeddable components once and reuse them across pages. In the meantime, use Saved Sections for reusable content blocks." }), _jsx("button", { type: "button", onClick: () => onNavigate?.('/saved-sections'), className: "bg-primary text-primary-foreground rounded-md px-4 py-2 text-sm font-medium hover:opacity-90", children: "View Saved Sections" })] })] }));
14
+ }
15
+ //# sourceMappingURL=Widgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Widgets.js","sourceRoot":"","sources":["../../../src/views/page-builder/Widgets.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAMzC;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,UAAU,EAAgB;IAClD,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,2CAA2C,wBAAa,EACtE,YAAG,SAAS,EAAC,+BAA+B,8EAExC,IACA,EAEN,eAAK,SAAS,EAAC,yDAAyD,aACtE,KAAC,UAAU,IAAC,SAAS,EAAC,4CAA4C,wBAAe,EACjF,aAAI,SAAS,EAAC,0CAA0C,wCAA6B,EACrF,YAAG,SAAS,EAAC,qDAAqD,2KAG9D,EACJ,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAC9C,SAAS,EAAC,8FAA8F,oCAGjG,IACL,IACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type SectionScope, type SectionTypeId } from './section-types.js';
2
+ interface AddSectionModalProps {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ onAdd: (type: SectionTypeId) => void;
6
+ /** Which editor surface this gallery serves. Defaults to the page editor. */
7
+ scope?: SectionScope;
8
+ }
9
+ /**
10
+ * Predefined section gallery. Only types that have a working renderer +
11
+ * inspector are listed (the registry is the source of truth), so every
12
+ * card here actually inserts a usable section.
13
+ *
14
+ * (Saved-section / template insertion is a separate flow — deferred until
15
+ * the saved-section storage model is reconciled with the flat section
16
+ * model; see the page-editor changeset.)
17
+ */
18
+ export declare function AddSectionModal({ open, onClose, onAdd, scope }: AddSectionModalProps): import("react/jsx-runtime").JSX.Element;
19
+ export {};
20
+ //# sourceMappingURL=AddSectionModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddSectionModal.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/AddSectionModal.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGnG,UAAU,oBAAoB;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAA;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE,oBAAoB,2CAgC7F"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Modal } from '../../components/ui/Modal.js';
4
+ import { getSectionTypesForScope } from './section-types.js';
5
+ import { sectionIconFor } from './section-icons.js';
6
+ /**
7
+ * Predefined section gallery. Only types that have a working renderer +
8
+ * inspector are listed (the registry is the source of truth), so every
9
+ * card here actually inserts a usable section.
10
+ *
11
+ * (Saved-section / template insertion is a separate flow — deferred until
12
+ * the saved-section storage model is reconciled with the flat section
13
+ * model; see the page-editor changeset.)
14
+ */
15
+ export function AddSectionModal({ open, onClose, onAdd, scope = 'page' }) {
16
+ const types = getSectionTypesForScope(scope);
17
+ return (_jsxs(Modal, { open: open, onClose: onClose, title: "Add a section", children: [_jsx("p", { className: "text-muted-foreground mb-4 text-sm", children: "Choose a section type. It will be added to the bottom and selected for editing." }), _jsx("div", { className: "grid grid-cols-1 gap-2 sm:grid-cols-2", children: types.map((type) => {
18
+ const Icon = sectionIconFor(type.id);
19
+ return (_jsxs("button", { type: "button", onClick: () => onAdd(type.id), className: "border-border hover:border-primary hover:bg-accent/50 focus-visible:ring-ring flex items-start gap-3 rounded-lg border p-3 text-left transition-colors focus-visible:ring-2 focus-visible:outline-none", children: [_jsx("span", { className: "bg-muted text-foreground flex h-9 w-9 shrink-0 items-center justify-center rounded-md", children: _jsx(Icon, { className: "h-5 w-5", "aria-hidden": true }) }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "text-foreground block text-sm font-medium", children: type.name }), _jsx("span", { className: "text-muted-foreground mt-0.5 block text-xs leading-snug", children: type.description })] })] }, type.id));
20
+ }) })] }));
21
+ }
22
+ //# sourceMappingURL=AddSectionModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddSectionModal.js","sourceRoot":"","sources":["../../../src/views/page-editor/AddSectionModal.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAyC,MAAM,oBAAoB,CAAA;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAUnD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAwB;IAC5F,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;IAC5C,OAAO,CACL,MAAC,KAAK,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,eAAe,aACxD,YAAG,SAAS,EAAC,oCAAoC,gGAE7C,EACJ,cAAK,SAAS,EAAC,uCAAuC,YACnD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAClB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBACpC,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAC7B,SAAS,EAAC,wMAAwM,aAElN,eAAM,SAAS,EAAC,uFAAuF,YACrG,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,wBAAe,GACnC,EACP,gBAAM,SAAS,EAAC,SAAS,aACvB,eAAM,SAAS,EAAC,2CAA2C,YAAE,IAAI,CAAC,IAAI,GAAQ,EAC9E,eAAM,SAAS,EAAC,yDAAyD,YACtE,IAAI,CAAC,WAAW,GACZ,IACF,KAbF,IAAI,CAAC,EAAE,CAcL,CACV,CAAA;gBACH,CAAC,CAAC,GACE,IACA,CACT,CAAA;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { PageSection } from '../../lib/page-editor-service.js';
2
+ import { type ViewportId } from './viewports.js';
3
+ interface EditorCanvasProps {
4
+ sections: PageSection[];
5
+ selectedId: string | null;
6
+ viewport: ViewportId;
7
+ onSelect: (id: string) => void;
8
+ onAddSection: () => void;
9
+ }
10
+ /**
11
+ * The preview canvas. Renders the page at the selected viewport's logical
12
+ * width and scales it down with a CSS transform so wide viewports (1440px,
13
+ * 1920px) fit inside the available canvas column. Scale is recomputed from
14
+ * a ResizeObserver so it stays correct as panels open/close.
15
+ */
16
+ export declare function EditorCanvas({ sections, selectedId, viewport, onSelect, onAddSection, }: EditorCanvasProps): import("react/jsx-runtime").JSX.Element;
17
+ export {};
18
+ //# sourceMappingURL=EditorCanvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorCanvas.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/EditorCanvas.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAEnE,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE7D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,UAAU,CAAA;IACpB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,YAAY,GACb,EAAE,iBAAiB,2CA2EnB"}
@@ -0,0 +1,64 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
4
+ import { LayoutTemplate, Plus } from 'lucide-react';
5
+ import { SectionRenderer } from './sections/index.js';
6
+ import { getViewport } from './viewports.js';
7
+ /**
8
+ * The preview canvas. Renders the page at the selected viewport's logical
9
+ * width and scales it down with a CSS transform so wide viewports (1440px,
10
+ * 1920px) fit inside the available canvas column. Scale is recomputed from
11
+ * a ResizeObserver so it stays correct as panels open/close.
12
+ */
13
+ export function EditorCanvas({ sections, selectedId, viewport, onSelect, onAddSection, }) {
14
+ const vp = getViewport(viewport);
15
+ const containerRef = useRef(null);
16
+ const surfaceRef = useRef(null);
17
+ const sectionRefs = useRef(new Map());
18
+ const [scale, setScale] = useState(1);
19
+ const [surfaceHeight, setSurfaceHeight] = useState(null);
20
+ const registerRef = useCallback((id, el) => {
21
+ if (el)
22
+ sectionRefs.current.set(id, el);
23
+ else
24
+ sectionRefs.current.delete(id);
25
+ }, []);
26
+ // Recompute scale + scaled height from the container width.
27
+ useLayoutEffect(() => {
28
+ const container = containerRef.current;
29
+ if (!container)
30
+ return;
31
+ const recompute = () => {
32
+ // 48px breathing room so the surface never kisses the column edges.
33
+ const available = container.clientWidth - 48;
34
+ const next = Math.min(1, available / vp.width);
35
+ setScale(next > 0 ? next : 1);
36
+ if (surfaceRef.current) {
37
+ setSurfaceHeight(surfaceRef.current.offsetHeight * (next > 0 ? next : 1));
38
+ }
39
+ };
40
+ recompute();
41
+ const ro = new ResizeObserver(recompute);
42
+ ro.observe(container);
43
+ if (surfaceRef.current)
44
+ ro.observe(surfaceRef.current);
45
+ return () => ro.disconnect();
46
+ }, [vp.width, sections]);
47
+ // Scroll the selected section into view within the canvas.
48
+ useEffect(() => {
49
+ if (!selectedId)
50
+ return;
51
+ const el = sectionRefs.current.get(selectedId);
52
+ if (el)
53
+ el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
54
+ }, [selectedId]);
55
+ return (_jsx("div", { ref: containerRef, className: "bg-muted h-full overflow-auto p-6", children: sections.length === 0 ? (_jsx(EmptyCanvas, { onAddSection: onAddSection })) : (_jsx("div", { className: "mx-auto", style: { width: vp.width * scale, height: surfaceHeight ?? undefined }, children: _jsx("div", { ref: surfaceRef, className: "border-border origin-top overflow-hidden rounded-xl border bg-white shadow-sm", style: {
56
+ width: vp.width,
57
+ transform: `scale(${scale})`,
58
+ transformOrigin: 'top left',
59
+ }, children: sections.map((section) => (_jsx(SectionRenderer, { section: section, editable: true, selected: section.id === selectedId, onSelect: onSelect, registerRef: registerRef }, section.id))) }) })) }));
60
+ }
61
+ function EmptyCanvas({ onAddSection }) {
62
+ return (_jsxs("div", { className: "mx-auto flex h-full max-w-md flex-col items-center justify-center text-center", children: [_jsx("div", { className: "bg-card border-border mb-4 flex h-14 w-14 items-center justify-center rounded-full border", children: _jsx(LayoutTemplate, { className: "text-muted-foreground h-6 w-6", "aria-hidden": true }) }), _jsx("h2", { className: "text-foreground text-lg font-medium", children: "This page has no sections yet" }), _jsx("p", { className: "text-muted-foreground mt-1 mb-5 text-sm", children: "Add your first section to start building the page. You can reorder, hide, and edit sections at any time." }), _jsxs("button", { type: "button", onClick: onAddSection, className: "bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors", children: [_jsx(Plus, { className: "h-4 w-4", "aria-hidden": true }), "Add Section"] })] }));
63
+ }
64
+ //# sourceMappingURL=EditorCanvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorCanvas.js","sourceRoot":"","sources":["../../../src/views/page-editor/EditorCanvas.tsx"],"names":[],"mappings":"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"}