@prenta/admin 2.6.1 → 2.7.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 (794) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/design-system/tokens.css +179 -85
  3. package/design-system/tokens.json +276 -85
  4. package/design-system/tokens.scss +148 -44
  5. package/design-system/tokens.tailwind.cjs +50 -1
  6. package/dist/AdminRoot.d.ts.map +1 -1
  7. package/dist/AdminRoot.js +42 -20
  8. package/dist/AdminRoot.js.map +1 -1
  9. package/dist/LoginRoot.d.ts.map +1 -1
  10. package/dist/LoginRoot.js +2 -1
  11. package/dist/LoginRoot.js.map +1 -1
  12. package/dist/__tests__/components/author-avatar.test.js +3 -17
  13. package/dist/__tests__/components/author-avatar.test.js.map +1 -1
  14. package/dist/__tests__/components/notification-bell.test.js +86 -15
  15. package/dist/__tests__/components/notification-bell.test.js.map +1 -1
  16. package/dist/__tests__/components/responsive-tiers.render.test.d.ts +2 -0
  17. package/dist/__tests__/components/responsive-tiers.render.test.d.ts.map +1 -0
  18. package/dist/__tests__/components/responsive-tiers.render.test.js +313 -0
  19. package/dist/__tests__/components/responsive-tiers.render.test.js.map +1 -0
  20. package/dist/__tests__/components/serp-preview.render.test.js +6 -3
  21. package/dist/__tests__/components/serp-preview.render.test.js.map +1 -1
  22. package/dist/__tests__/components/shell-primitives.render.test.d.ts +2 -0
  23. package/dist/__tests__/components/shell-primitives.render.test.d.ts.map +1 -0
  24. package/dist/__tests__/components/shell-primitives.render.test.js +716 -0
  25. package/dist/__tests__/components/shell-primitives.render.test.js.map +1 -0
  26. package/dist/__tests__/components/theme-provider-accent.test.js +49 -7
  27. package/dist/__tests__/components/theme-provider-accent.test.js.map +1 -1
  28. package/dist/__tests__/components/toggle.test.js +10 -3
  29. package/dist/__tests__/components/toggle.test.js.map +1 -1
  30. package/dist/__tests__/components/ui-primitives.test.js +3 -7
  31. package/dist/__tests__/components/ui-primitives.test.js.map +1 -1
  32. package/dist/__tests__/layout/build-nav-items.test.js +1 -1
  33. package/dist/__tests__/layout/build-nav-items.test.js.map +1 -1
  34. package/dist/__tests__/layout/shell-nav.render.test.d.ts +2 -0
  35. package/dist/__tests__/layout/shell-nav.render.test.d.ts.map +1 -0
  36. package/dist/__tests__/layout/shell-nav.render.test.js +736 -0
  37. package/dist/__tests__/layout/shell-nav.render.test.js.map +1 -0
  38. package/dist/__tests__/layout/sidebar-forms-submenu.render.test.js +8 -4
  39. package/dist/__tests__/layout/sidebar-forms-submenu.render.test.js.map +1 -1
  40. package/dist/__tests__/layout/sidebar-groups.render.test.d.ts +2 -0
  41. package/dist/__tests__/layout/sidebar-groups.render.test.d.ts.map +1 -0
  42. package/dist/__tests__/layout/sidebar-groups.render.test.js +56 -0
  43. package/dist/__tests__/layout/sidebar-groups.render.test.js.map +1 -0
  44. package/dist/__tests__/layout/sidebar-menus.render.test.d.ts +2 -0
  45. package/dist/__tests__/layout/sidebar-menus.render.test.d.ts.map +1 -0
  46. package/dist/__tests__/layout/sidebar-menus.render.test.js +82 -0
  47. package/dist/__tests__/layout/sidebar-menus.render.test.js.map +1 -0
  48. package/dist/__tests__/layout/sidebar-plugin-nav.test.js +1 -1
  49. package/dist/__tests__/layout/sidebar-plugin-nav.test.js.map +1 -1
  50. package/dist/__tests__/layout/sidebar-posts.test.js +48 -38
  51. package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -1
  52. package/dist/__tests__/layout/sidebar-submenu.render.test.js +26 -10
  53. package/dist/__tests__/layout/sidebar-submenu.render.test.js.map +1 -1
  54. package/dist/__tests__/layout/topbar.render.test.d.ts +2 -0
  55. package/dist/__tests__/layout/topbar.render.test.d.ts.map +1 -0
  56. package/dist/__tests__/layout/topbar.render.test.js +406 -0
  57. package/dist/__tests__/layout/topbar.render.test.js.map +1 -0
  58. package/dist/__tests__/lib/api.test.js +2 -0
  59. package/dist/__tests__/lib/api.test.js.map +1 -1
  60. package/dist/__tests__/lib/job-drawer.test.d.ts +2 -0
  61. package/dist/__tests__/lib/job-drawer.test.d.ts.map +1 -0
  62. package/dist/__tests__/lib/job-drawer.test.js +393 -0
  63. package/dist/__tests__/lib/job-drawer.test.js.map +1 -0
  64. package/dist/__tests__/lib/job-view.test.d.ts +2 -0
  65. package/dist/__tests__/lib/job-view.test.d.ts.map +1 -0
  66. package/dist/__tests__/lib/job-view.test.js +387 -0
  67. package/dist/__tests__/lib/job-view.test.js.map +1 -0
  68. package/dist/__tests__/lib/jobs-service.test.d.ts +2 -0
  69. package/dist/__tests__/lib/jobs-service.test.d.ts.map +1 -0
  70. package/dist/__tests__/lib/jobs-service.test.js +88 -0
  71. package/dist/__tests__/lib/jobs-service.test.js.map +1 -0
  72. package/dist/__tests__/router/admin-route-order.test.d.ts +2 -0
  73. package/dist/__tests__/router/admin-route-order.test.d.ts.map +1 -0
  74. package/dist/__tests__/router/admin-route-order.test.js +36 -0
  75. package/dist/__tests__/router/admin-route-order.test.js.map +1 -0
  76. package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts +2 -0
  77. package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts.map +1 -0
  78. package/dist/__tests__/styles/ai-gradient-contrast.test.js +110 -0
  79. package/dist/__tests__/styles/ai-gradient-contrast.test.js.map +1 -0
  80. package/dist/__tests__/styles/breakpoint-order.test.d.ts +2 -0
  81. package/dist/__tests__/styles/breakpoint-order.test.d.ts.map +1 -0
  82. package/dist/__tests__/styles/breakpoint-order.test.js +52 -0
  83. package/dist/__tests__/styles/breakpoint-order.test.js.map +1 -0
  84. package/dist/__tests__/styles/responsive-layer.test.js +303 -12
  85. package/dist/__tests__/styles/responsive-layer.test.js.map +1 -1
  86. package/dist/__tests__/styles/tailwind-preset.test.d.ts +2 -0
  87. package/dist/__tests__/styles/tailwind-preset.test.d.ts.map +1 -0
  88. package/dist/__tests__/styles/tailwind-preset.test.js +147 -0
  89. package/dist/__tests__/styles/tailwind-preset.test.js.map +1 -0
  90. package/dist/__tests__/styles/theme-token-scope.test.js +9 -3
  91. package/dist/__tests__/styles/theme-token-scope.test.js.map +1 -1
  92. package/dist/__tests__/styles/tiers.test.d.ts +2 -0
  93. package/dist/__tests__/styles/tiers.test.d.ts.map +1 -0
  94. package/dist/__tests__/styles/tiers.test.js +121 -0
  95. package/dist/__tests__/styles/tiers.test.js.map +1 -0
  96. package/dist/__tests__/styles/tokens-drift.test.js +57 -6
  97. package/dist/__tests__/styles/tokens-drift.test.js.map +1 -1
  98. package/dist/__tests__/views/admin-lazy-route.render.test.js +27 -1
  99. package/dist/__tests__/views/admin-lazy-route.render.test.js.map +1 -1
  100. package/dist/__tests__/views/ai-settings.render.test.js +4 -4
  101. package/dist/__tests__/views/appearance-menus-route.render.test.d.ts +2 -0
  102. package/dist/__tests__/views/appearance-menus-route.render.test.d.ts.map +1 -0
  103. package/dist/__tests__/views/appearance-menus-route.render.test.js +50 -0
  104. package/dist/__tests__/views/appearance-menus-route.render.test.js.map +1 -0
  105. package/dist/__tests__/views/appearance-settings.render.test.js +8 -6
  106. package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
  107. package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts +2 -0
  108. package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts.map +1 -0
  109. package/dist/__tests__/views/appearance-theme-provider.render.test.js +286 -0
  110. package/dist/__tests__/views/appearance-theme-provider.render.test.js.map +1 -0
  111. package/dist/__tests__/views/dashboard.test.js +37 -0
  112. package/dist/__tests__/views/dashboard.test.js.map +1 -1
  113. package/dist/__tests__/views/document-edit-navigation.render.test.d.ts +2 -0
  114. package/dist/__tests__/views/document-edit-navigation.render.test.d.ts.map +1 -0
  115. package/dist/__tests__/views/document-edit-navigation.render.test.js +101 -0
  116. package/dist/__tests__/views/document-edit-navigation.render.test.js.map +1 -0
  117. package/dist/__tests__/views/document-edit-routes.render.test.d.ts +2 -0
  118. package/dist/__tests__/views/document-edit-routes.render.test.d.ts.map +1 -0
  119. package/dist/__tests__/views/document-edit-routes.render.test.js +113 -0
  120. package/dist/__tests__/views/document-edit-routes.render.test.js.map +1 -0
  121. package/dist/__tests__/views/email-settings.render.test.js +2 -2
  122. package/dist/__tests__/views/form-entries.render.test.js +15 -0
  123. package/dist/__tests__/views/form-entries.render.test.js.map +1 -1
  124. package/dist/__tests__/views/form-submissions.render.test.js +18 -0
  125. package/dist/__tests__/views/form-submissions.render.test.js.map +1 -1
  126. package/dist/__tests__/views/forms-list.render.test.js +12 -0
  127. package/dist/__tests__/views/forms-list.render.test.js.map +1 -1
  128. package/dist/__tests__/views/general-settings.render.test.js +26 -10
  129. package/dist/__tests__/views/general-settings.render.test.js.map +1 -1
  130. package/dist/__tests__/views/jobs-drawer.render.test.d.ts +2 -0
  131. package/dist/__tests__/views/jobs-drawer.render.test.d.ts.map +1 -0
  132. package/dist/__tests__/views/jobs-drawer.render.test.js +908 -0
  133. package/dist/__tests__/views/jobs-drawer.render.test.js.map +1 -0
  134. package/dist/__tests__/views/jobs-list.render.test.d.ts +2 -0
  135. package/dist/__tests__/views/jobs-list.render.test.d.ts.map +1 -0
  136. package/dist/__tests__/views/jobs-list.render.test.js +695 -0
  137. package/dist/__tests__/views/jobs-list.render.test.js.map +1 -0
  138. package/dist/__tests__/views/kpi-grid.test.d.ts +2 -0
  139. package/dist/__tests__/views/kpi-grid.test.d.ts.map +1 -0
  140. package/dist/__tests__/views/kpi-grid.test.js +26 -0
  141. package/dist/__tests__/views/kpi-grid.test.js.map +1 -0
  142. package/dist/__tests__/views/post-section-editor.test.js +3 -1
  143. package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
  144. package/dist/__tests__/views/script-tags.render.test.js +25 -0
  145. package/dist/__tests__/views/script-tags.render.test.js.map +1 -1
  146. package/dist/__tests__/views/security-settings.render.test.js +9 -8
  147. package/dist/__tests__/views/security-settings.render.test.js.map +1 -1
  148. package/dist/__tests__/views/seo-settings.render.test.js +7 -7
  149. package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
  150. package/dist/__tests__/views/settings-save-bar.render.test.d.ts +2 -0
  151. package/dist/__tests__/views/settings-save-bar.render.test.d.ts.map +1 -0
  152. package/dist/__tests__/views/settings-save-bar.render.test.js +68 -0
  153. package/dist/__tests__/views/settings-save-bar.render.test.js.map +1 -0
  154. package/dist/__tests__/views/settings-save-footer.render.test.js +23 -15
  155. package/dist/__tests__/views/settings-save-footer.render.test.js.map +1 -1
  156. package/dist/__tests__/views/settings-tabs.render.test.d.ts +2 -0
  157. package/dist/__tests__/views/settings-tabs.render.test.d.ts.map +1 -0
  158. package/dist/__tests__/views/settings-tabs.render.test.js +319 -0
  159. package/dist/__tests__/views/settings-tabs.render.test.js.map +1 -0
  160. package/dist/__tests__/views/updates-tab.render.test.js +4 -3
  161. package/dist/__tests__/views/updates-tab.render.test.js.map +1 -1
  162. package/dist/components/Breadcrumbs.d.ts +8 -1
  163. package/dist/components/Breadcrumbs.d.ts.map +1 -1
  164. package/dist/components/Breadcrumbs.js +6 -0
  165. package/dist/components/Breadcrumbs.js.map +1 -1
  166. package/dist/components/CommandPalette.d.ts.map +1 -1
  167. package/dist/components/CommandPalette.js +40 -4
  168. package/dist/components/CommandPalette.js.map +1 -1
  169. package/dist/components/LocaleSwitcher.d.ts.map +1 -1
  170. package/dist/components/LocaleSwitcher.js +1 -1
  171. package/dist/components/LocaleSwitcher.js.map +1 -1
  172. package/dist/components/NotificationBell.d.ts.map +1 -1
  173. package/dist/components/NotificationBell.js +44 -3
  174. package/dist/components/NotificationBell.js.map +1 -1
  175. package/dist/components/OfflineStatus.js +1 -1
  176. package/dist/components/OfflineStatus.js.map +1 -1
  177. package/dist/components/PresenceIndicator.d.ts.map +1 -1
  178. package/dist/components/PresenceIndicator.js +2 -1
  179. package/dist/components/PresenceIndicator.js.map +1 -1
  180. package/dist/components/ReflowMeter.js +2 -2
  181. package/dist/components/ReflowMeter.js.map +1 -1
  182. package/dist/components/SEOPanel.js +2 -2
  183. package/dist/components/SEOPanel.js.map +1 -1
  184. package/dist/components/ThemeProvider.d.ts +24 -4
  185. package/dist/components/ThemeProvider.d.ts.map +1 -1
  186. package/dist/components/ThemeProvider.js +80 -22
  187. package/dist/components/ThemeProvider.js.map +1 -1
  188. package/dist/components/TipTapEditor.d.ts.map +1 -1
  189. package/dist/components/TipTapEditor.js +3 -4
  190. package/dist/components/TipTapEditor.js.map +1 -1
  191. package/dist/components/forms/EmbedPanel.js +1 -1
  192. package/dist/components/forms/EmbedPanel.js.map +1 -1
  193. package/dist/components/forms/FormEntryDetailPane.js +6 -1
  194. package/dist/components/forms/FormEntryDetailPane.js.map +1 -1
  195. package/dist/components/forms/ShortcodeGlossary.d.ts.map +1 -1
  196. package/dist/components/forms/ShortcodeGlossary.js +6 -1
  197. package/dist/components/forms/ShortcodeGlossary.js.map +1 -1
  198. package/dist/components/forms/primitives.d.ts +15 -5
  199. package/dist/components/forms/primitives.d.ts.map +1 -1
  200. package/dist/components/forms/primitives.js +11 -11
  201. package/dist/components/forms/primitives.js.map +1 -1
  202. package/dist/components/pages/tag-badges.d.ts +2 -1
  203. package/dist/components/pages/tag-badges.d.ts.map +1 -1
  204. package/dist/components/pages/tag-badges.js +4 -3
  205. package/dist/components/pages/tag-badges.js.map +1 -1
  206. package/dist/components/seo/PageAuditPanel.js +2 -2
  207. package/dist/components/seo/PageAuditPanel.js.map +1 -1
  208. package/dist/components/seo/SerpPreview.d.ts +4 -4
  209. package/dist/components/seo/SerpPreview.js +1 -1
  210. package/dist/components/seo/SerpPreview.js.map +1 -1
  211. package/dist/components/seo/primitives.js +2 -2
  212. package/dist/components/seo/primitives.js.map +1 -1
  213. package/dist/components/ui/AuthorAvatar.d.ts +4 -4
  214. package/dist/components/ui/AuthorAvatar.d.ts.map +1 -1
  215. package/dist/components/ui/AuthorAvatar.js +11 -10
  216. package/dist/components/ui/AuthorAvatar.js.map +1 -1
  217. package/dist/components/ui/Badge.d.ts +1 -1
  218. package/dist/components/ui/Badge.js +1 -1
  219. package/dist/components/ui/Badge.js.map +1 -1
  220. package/dist/components/ui/Breadcrumb.d.ts +27 -0
  221. package/dist/components/ui/Breadcrumb.d.ts.map +1 -0
  222. package/dist/components/ui/Breadcrumb.js +41 -0
  223. package/dist/components/ui/Breadcrumb.js.map +1 -0
  224. package/dist/components/ui/Button.d.ts +2 -2
  225. package/dist/components/ui/Button.d.ts.map +1 -1
  226. package/dist/components/ui/Button.js +31 -16
  227. package/dist/components/ui/Button.js.map +1 -1
  228. package/dist/components/ui/Card.d.ts +8 -4
  229. package/dist/components/ui/Card.d.ts.map +1 -1
  230. package/dist/components/ui/Card.js +21 -13
  231. package/dist/components/ui/Card.js.map +1 -1
  232. package/dist/components/ui/CardListControls.d.ts +34 -0
  233. package/dist/components/ui/CardListControls.d.ts.map +1 -0
  234. package/dist/components/ui/CardListControls.js +25 -0
  235. package/dist/components/ui/CardListControls.js.map +1 -0
  236. package/dist/components/ui/CountChip.d.ts +20 -0
  237. package/dist/components/ui/CountChip.d.ts.map +1 -0
  238. package/dist/components/ui/CountChip.js +48 -0
  239. package/dist/components/ui/CountChip.js.map +1 -0
  240. package/dist/components/ui/FilterPill.d.ts +2 -1
  241. package/dist/components/ui/FilterPill.d.ts.map +1 -1
  242. package/dist/components/ui/FilterPill.js +3 -2
  243. package/dist/components/ui/FilterPill.js.map +1 -1
  244. package/dist/components/ui/Input.d.ts +1 -1
  245. package/dist/components/ui/InspectorPane.d.ts +1 -1
  246. package/dist/components/ui/InspectorPane.d.ts.map +1 -1
  247. package/dist/components/ui/InspectorPane.js +15 -4
  248. package/dist/components/ui/InspectorPane.js.map +1 -1
  249. package/dist/components/ui/Modal.d.ts.map +1 -1
  250. package/dist/components/ui/Modal.js +10 -2
  251. package/dist/components/ui/Modal.js.map +1 -1
  252. package/dist/components/ui/PageHeader.d.ts +28 -0
  253. package/dist/components/ui/PageHeader.d.ts.map +1 -0
  254. package/dist/components/ui/PageHeader.js +18 -0
  255. package/dist/components/ui/PageHeader.js.map +1 -0
  256. package/dist/components/ui/RowActions.d.ts +5 -0
  257. package/dist/components/ui/RowActions.d.ts.map +1 -1
  258. package/dist/components/ui/RowActions.js +7 -2
  259. package/dist/components/ui/RowActions.js.map +1 -1
  260. package/dist/components/ui/Segmented.d.ts +21 -0
  261. package/dist/components/ui/Segmented.d.ts.map +1 -0
  262. package/dist/components/ui/Segmented.js +41 -0
  263. package/dist/components/ui/Segmented.js.map +1 -0
  264. package/dist/components/ui/Toaster.d.ts +12 -0
  265. package/dist/components/ui/Toaster.d.ts.map +1 -0
  266. package/dist/components/ui/Toaster.js +103 -0
  267. package/dist/components/ui/Toaster.js.map +1 -0
  268. package/dist/components/ui/Toggle.d.ts +4 -3
  269. package/dist/components/ui/Toggle.d.ts.map +1 -1
  270. package/dist/components/ui/Toggle.js +16 -12
  271. package/dist/components/ui/Toggle.js.map +1 -1
  272. package/dist/components/ui/UnderlineTabs.d.ts +56 -0
  273. package/dist/components/ui/UnderlineTabs.d.ts.map +1 -0
  274. package/dist/components/ui/UnderlineTabs.js +205 -0
  275. package/dist/components/ui/UnderlineTabs.js.map +1 -0
  276. package/dist/components/ui/UnsavedBar.d.ts +25 -0
  277. package/dist/components/ui/UnsavedBar.d.ts.map +1 -0
  278. package/dist/components/ui/UnsavedBar.js +22 -0
  279. package/dist/components/ui/UnsavedBar.js.map +1 -0
  280. package/dist/components/ui/admin-links.d.ts +11 -0
  281. package/dist/components/ui/admin-links.d.ts.map +1 -0
  282. package/dist/components/ui/admin-links.js +10 -0
  283. package/dist/components/ui/admin-links.js.map +1 -0
  284. package/dist/components/ui/card-table.d.ts +43 -0
  285. package/dist/components/ui/card-table.d.ts.map +1 -0
  286. package/dist/components/ui/card-table.js +31 -0
  287. package/dist/components/ui/card-table.js.map +1 -0
  288. package/dist/components/virtual-window.d.ts +7 -0
  289. package/dist/components/virtual-window.d.ts.map +1 -1
  290. package/dist/components/virtual-window.js +5 -2
  291. package/dist/components/virtual-window.js.map +1 -1
  292. package/dist/fields/RelationshipField.js +1 -1
  293. package/dist/fields/RelationshipField.js.map +1 -1
  294. package/dist/files/dm-mono-latin-400-normal.woff +0 -0
  295. package/dist/files/dm-mono-latin-400-normal.woff2 +0 -0
  296. package/dist/files/dm-mono-latin-500-normal.woff +0 -0
  297. package/dist/files/dm-mono-latin-500-normal.woff2 +0 -0
  298. package/dist/files/dm-mono-latin-ext-400-normal.woff +0 -0
  299. package/dist/files/dm-mono-latin-ext-400-normal.woff2 +0 -0
  300. package/dist/files/dm-mono-latin-ext-500-normal.woff +0 -0
  301. package/dist/files/dm-mono-latin-ext-500-normal.woff2 +0 -0
  302. package/dist/files/dm-sans-latin-400-normal.woff +0 -0
  303. package/dist/files/dm-sans-latin-400-normal.woff2 +0 -0
  304. package/dist/files/dm-sans-latin-500-normal.woff +0 -0
  305. package/dist/files/dm-sans-latin-500-normal.woff2 +0 -0
  306. package/dist/files/dm-sans-latin-600-normal.woff +0 -0
  307. package/dist/files/dm-sans-latin-600-normal.woff2 +0 -0
  308. package/dist/files/dm-sans-latin-700-normal.woff +0 -0
  309. package/dist/files/dm-sans-latin-700-normal.woff2 +0 -0
  310. package/dist/files/dm-sans-latin-ext-400-normal.woff +0 -0
  311. package/dist/files/dm-sans-latin-ext-400-normal.woff2 +0 -0
  312. package/dist/files/dm-sans-latin-ext-500-normal.woff +0 -0
  313. package/dist/files/dm-sans-latin-ext-500-normal.woff2 +0 -0
  314. package/dist/files/dm-sans-latin-ext-600-normal.woff +0 -0
  315. package/dist/files/dm-sans-latin-ext-600-normal.woff2 +0 -0
  316. package/dist/files/dm-sans-latin-ext-700-normal.woff +0 -0
  317. package/dist/files/dm-sans-latin-ext-700-normal.woff2 +0 -0
  318. package/dist/hooks/useAppearanceBootstrap.d.ts.map +1 -1
  319. package/dist/hooks/useAppearanceBootstrap.js +9 -3
  320. package/dist/hooks/useAppearanceBootstrap.js.map +1 -1
  321. package/dist/index.d.ts +15 -0
  322. package/dist/index.d.ts.map +1 -1
  323. package/dist/index.js +8 -0
  324. package/dist/index.js.map +1 -1
  325. package/dist/layout/Header.d.ts +14 -5
  326. package/dist/layout/Header.d.ts.map +1 -1
  327. package/dist/layout/Header.js +78 -13
  328. package/dist/layout/Header.js.map +1 -1
  329. package/dist/layout/Layout.d.ts +5 -3
  330. package/dist/layout/Layout.d.ts.map +1 -1
  331. package/dist/layout/Layout.js +45 -54
  332. package/dist/layout/Layout.js.map +1 -1
  333. package/dist/layout/MobileTabBar.d.ts +20 -0
  334. package/dist/layout/MobileTabBar.d.ts.map +1 -0
  335. package/dist/layout/MobileTabBar.js +29 -0
  336. package/dist/layout/MobileTabBar.js.map +1 -0
  337. package/dist/layout/Sidebar.d.ts +8 -26
  338. package/dist/layout/Sidebar.d.ts.map +1 -1
  339. package/dist/layout/Sidebar.js +309 -345
  340. package/dist/layout/Sidebar.js.map +1 -1
  341. package/dist/layout/nav-config.d.ts +101 -0
  342. package/dist/layout/nav-config.d.ts.map +1 -0
  343. package/dist/layout/nav-config.js +297 -0
  344. package/dist/layout/nav-config.js.map +1 -0
  345. package/dist/layout/primitives/AdminShell.d.ts +10 -2
  346. package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
  347. package/dist/layout/primitives/AdminShell.js +114 -6
  348. package/dist/layout/primitives/AdminShell.js.map +1 -1
  349. package/dist/layout/topbar-classes.d.ts +8 -0
  350. package/dist/layout/topbar-classes.d.ts.map +1 -0
  351. package/dist/layout/topbar-classes.js +8 -0
  352. package/dist/layout/topbar-classes.js.map +1 -0
  353. package/dist/layout/use-nav-items.d.ts +10 -0
  354. package/dist/layout/use-nav-items.d.ts.map +1 -0
  355. package/dist/layout/use-nav-items.js +39 -0
  356. package/dist/layout/use-nav-items.js.map +1 -0
  357. package/dist/lib/api.d.ts +6 -0
  358. package/dist/lib/api.d.ts.map +1 -1
  359. package/dist/lib/api.js +1 -1
  360. package/dist/lib/api.js.map +1 -1
  361. package/dist/lib/appearance-api.d.ts +3 -1
  362. package/dist/lib/appearance-api.d.ts.map +1 -1
  363. package/dist/lib/appearance-api.js +1 -0
  364. package/dist/lib/appearance-api.js.map +1 -1
  365. package/dist/lib/job-drawer.d.ts +128 -0
  366. package/dist/lib/job-drawer.d.ts.map +1 -0
  367. package/dist/lib/job-drawer.js +351 -0
  368. package/dist/lib/job-drawer.js.map +1 -0
  369. package/dist/lib/job-view.d.ts +187 -0
  370. package/dist/lib/job-view.d.ts.map +1 -0
  371. package/dist/lib/job-view.js +363 -0
  372. package/dist/lib/job-view.js.map +1 -0
  373. package/dist/lib/jobs-service.d.ts +134 -0
  374. package/dist/lib/jobs-service.d.ts.map +1 -0
  375. package/dist/lib/jobs-service.js +179 -0
  376. package/dist/lib/jobs-service.js.map +1 -0
  377. package/dist/lib/sheet-focus.d.ts +24 -0
  378. package/dist/lib/sheet-focus.d.ts.map +1 -0
  379. package/dist/lib/sheet-focus.js +61 -0
  380. package/dist/lib/sheet-focus.js.map +1 -0
  381. package/dist/lib/tiers.d.ts +30 -0
  382. package/dist/lib/tiers.d.ts.map +1 -0
  383. package/dist/lib/tiers.js +43 -0
  384. package/dist/lib/tiers.js.map +1 -0
  385. package/dist/prenta-admin.css +1 -1
  386. package/dist/router/admin-routes.d.ts.map +1 -1
  387. package/dist/router/admin-routes.js +8 -0
  388. package/dist/router/admin-routes.js.map +1 -1
  389. package/dist/router/index.d.ts +5 -1
  390. package/dist/router/index.d.ts.map +1 -1
  391. package/dist/router/index.js +7 -0
  392. package/dist/router/index.js.map +1 -1
  393. package/dist/views/ApiKeys.js +2 -2
  394. package/dist/views/ApiKeys.js.map +1 -1
  395. package/dist/views/AppearanceChrome.d.ts +6 -0
  396. package/dist/views/AppearanceChrome.d.ts.map +1 -0
  397. package/dist/views/AppearanceChrome.js +25 -0
  398. package/dist/views/AppearanceChrome.js.map +1 -0
  399. package/dist/views/CollectionList.d.ts.map +1 -1
  400. package/dist/views/CollectionList.js +73 -53
  401. package/dist/views/CollectionList.js.map +1 -1
  402. package/dist/views/Dashboard.d.ts.map +1 -1
  403. package/dist/views/Dashboard.js +14 -8
  404. package/dist/views/Dashboard.js.map +1 -1
  405. package/dist/views/DocumentEdit.d.ts +6 -1
  406. package/dist/views/DocumentEdit.d.ts.map +1 -1
  407. package/dist/views/DocumentEdit.js +44 -8
  408. package/dist/views/DocumentEdit.js.map +1 -1
  409. package/dist/views/FormDeliveries.d.ts.map +1 -1
  410. package/dist/views/FormDeliveries.js +7 -1
  411. package/dist/views/FormDeliveries.js.map +1 -1
  412. package/dist/views/FormEntries.d.ts.map +1 -1
  413. package/dist/views/FormEntries.js +11 -2
  414. package/dist/views/FormEntries.js.map +1 -1
  415. package/dist/views/FormSubmissions.d.ts +1 -1
  416. package/dist/views/FormSubmissions.d.ts.map +1 -1
  417. package/dist/views/FormSubmissions.js +15 -4
  418. package/dist/views/FormSubmissions.js.map +1 -1
  419. package/dist/views/Forms.d.ts.map +1 -1
  420. package/dist/views/Forms.js +6 -4
  421. package/dist/views/Forms.js.map +1 -1
  422. package/dist/views/FormsSettings.d.ts +2 -0
  423. package/dist/views/FormsSettings.d.ts.map +1 -0
  424. package/dist/views/FormsSettings.js +37 -0
  425. package/dist/views/FormsSettings.js.map +1 -0
  426. package/dist/views/Jobs/BusyButton.d.ts +15 -0
  427. package/dist/views/Jobs/BusyButton.d.ts.map +1 -0
  428. package/dist/views/Jobs/BusyButton.js +26 -0
  429. package/dist/views/Jobs/BusyButton.js.map +1 -0
  430. package/dist/views/Jobs/CancelJobDialog.d.ts +21 -0
  431. package/dist/views/Jobs/CancelJobDialog.d.ts.map +1 -0
  432. package/dist/views/Jobs/CancelJobDialog.js +66 -0
  433. package/dist/views/Jobs/CancelJobDialog.js.map +1 -0
  434. package/dist/views/Jobs/DrawerActivity.d.ts +16 -0
  435. package/dist/views/Jobs/DrawerActivity.d.ts.map +1 -0
  436. package/dist/views/Jobs/DrawerActivity.js +59 -0
  437. package/dist/views/Jobs/DrawerActivity.js.map +1 -0
  438. package/dist/views/Jobs/DrawerOverview.d.ts +28 -0
  439. package/dist/views/Jobs/DrawerOverview.d.ts.map +1 -0
  440. package/dist/views/Jobs/DrawerOverview.js +32 -0
  441. package/dist/views/Jobs/DrawerOverview.js.map +1 -0
  442. package/dist/views/Jobs/DrawerResults.d.ts +25 -0
  443. package/dist/views/Jobs/DrawerResults.d.ts.map +1 -0
  444. package/dist/views/Jobs/DrawerResults.js +50 -0
  445. package/dist/views/Jobs/DrawerResults.js.map +1 -0
  446. package/dist/views/Jobs/DrawerReview.d.ts +44 -0
  447. package/dist/views/Jobs/DrawerReview.d.ts.map +1 -0
  448. package/dist/views/Jobs/DrawerReview.js +110 -0
  449. package/dist/views/Jobs/DrawerReview.js.map +1 -0
  450. package/dist/views/Jobs/JobDrawer.d.ts +31 -0
  451. package/dist/views/Jobs/JobDrawer.d.ts.map +1 -0
  452. package/dist/views/Jobs/JobDrawer.js +353 -0
  453. package/dist/views/Jobs/JobDrawer.js.map +1 -0
  454. package/dist/views/Jobs/JobsTable.d.ts +19 -0
  455. package/dist/views/Jobs/JobsTable.d.ts.map +1 -0
  456. package/dist/views/Jobs/JobsTable.js +80 -0
  457. package/dist/views/Jobs/JobsTable.js.map +1 -0
  458. package/dist/views/Jobs/WorkerStrip.d.ts +22 -0
  459. package/dist/views/Jobs/WorkerStrip.d.ts.map +1 -0
  460. package/dist/views/Jobs/WorkerStrip.js +63 -0
  461. package/dist/views/Jobs/WorkerStrip.js.map +1 -0
  462. package/dist/views/Jobs/atoms.d.ts +19 -0
  463. package/dist/views/Jobs/atoms.d.ts.map +1 -0
  464. package/dist/views/Jobs/atoms.js +52 -0
  465. package/dist/views/Jobs/atoms.js.map +1 -0
  466. package/dist/views/Jobs/focus.d.ts +23 -0
  467. package/dist/views/Jobs/focus.d.ts.map +1 -0
  468. package/dist/views/Jobs/focus.js +54 -0
  469. package/dist/views/Jobs/focus.js.map +1 -0
  470. package/dist/views/Jobs/icons.d.ts +22 -0
  471. package/dist/views/Jobs/icons.d.ts.map +1 -0
  472. package/dist/views/Jobs/icons.js +23 -0
  473. package/dist/views/Jobs/icons.js.map +1 -0
  474. package/dist/views/Jobs/placeholders.d.ts +6 -0
  475. package/dist/views/Jobs/placeholders.d.ts.map +1 -0
  476. package/dist/views/Jobs/placeholders.js +20 -0
  477. package/dist/views/Jobs/placeholders.js.map +1 -0
  478. package/dist/views/Jobs/useJobDetail.d.ts +21 -0
  479. package/dist/views/Jobs/useJobDetail.d.ts.map +1 -0
  480. package/dist/views/Jobs/useJobDetail.js +39 -0
  481. package/dist/views/Jobs/useJobDetail.js.map +1 -0
  482. package/dist/views/Jobs/useJobsFeed.d.ts +35 -0
  483. package/dist/views/Jobs/useJobsFeed.d.ts.map +1 -0
  484. package/dist/views/Jobs/useJobsFeed.js +231 -0
  485. package/dist/views/Jobs/useJobsFeed.js.map +1 -0
  486. package/dist/views/Jobs/useReviewItems.d.ts +39 -0
  487. package/dist/views/Jobs/useReviewItems.d.ts.map +1 -0
  488. package/dist/views/Jobs/useReviewItems.js +140 -0
  489. package/dist/views/Jobs/useReviewItems.js.map +1 -0
  490. package/dist/views/Jobs.d.ts +10 -1
  491. package/dist/views/Jobs.d.ts.map +1 -1
  492. package/dist/views/Jobs.js +126 -35
  493. package/dist/views/Jobs.js.map +1 -1
  494. package/dist/views/MediaBrowser.d.ts.map +1 -1
  495. package/dist/views/MediaBrowser.js +37 -9
  496. package/dist/views/MediaBrowser.js.map +1 -1
  497. package/dist/views/Pages/PagesListView.d.ts +1 -1
  498. package/dist/views/Pages/PagesListView.d.ts.map +1 -1
  499. package/dist/views/Pages/PagesListView.js +34 -5
  500. package/dist/views/Pages/PagesListView.js.map +1 -1
  501. package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -1
  502. package/dist/views/Posts/NewPostTypeInstructions.js +12 -2
  503. package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -1
  504. package/dist/views/Posts/PostTypesView.d.ts.map +1 -1
  505. package/dist/views/Posts/PostTypesView.js +10 -1
  506. package/dist/views/Posts/PostTypesView.js.map +1 -1
  507. package/dist/views/Posts/PostsListView.d.ts +1 -2
  508. package/dist/views/Posts/PostsListView.d.ts.map +1 -1
  509. package/dist/views/Posts/PostsListView.js +31 -3
  510. package/dist/views/Posts/PostsListView.js.map +1 -1
  511. package/dist/views/SEO.d.ts.map +1 -1
  512. package/dist/views/SEO.js +3 -3
  513. package/dist/views/SEO.js.map +1 -1
  514. package/dist/views/ScriptTags.d.ts.map +1 -1
  515. package/dist/views/ScriptTags.js +20 -15
  516. package/dist/views/ScriptTags.js.map +1 -1
  517. package/dist/views/Settings.d.ts.map +1 -1
  518. package/dist/views/Settings.js +115 -51
  519. package/dist/views/Settings.js.map +1 -1
  520. package/dist/views/SpamFolder.d.ts +2 -0
  521. package/dist/views/SpamFolder.d.ts.map +1 -0
  522. package/dist/views/SpamFolder.js +14 -0
  523. package/dist/views/SpamFolder.js.map +1 -0
  524. package/dist/views/Trash.d.ts +6 -1
  525. package/dist/views/Trash.d.ts.map +1 -1
  526. package/dist/views/Trash.js +7 -2
  527. package/dist/views/Trash.js.map +1 -1
  528. package/dist/views/Users.js +2 -2
  529. package/dist/views/Users.js.map +1 -1
  530. package/dist/views/WidgetsPlaceholder.d.ts +2 -0
  531. package/dist/views/WidgetsPlaceholder.d.ts.map +1 -0
  532. package/dist/views/WidgetsPlaceholder.js +15 -0
  533. package/dist/views/WidgetsPlaceholder.js.map +1 -0
  534. package/dist/views/dashboard/kpi-grid.d.ts +18 -0
  535. package/dist/views/dashboard/kpi-grid.d.ts.map +1 -0
  536. package/dist/views/dashboard/kpi-grid.js +36 -0
  537. package/dist/views/dashboard/kpi-grid.js.map +1 -0
  538. package/dist/views/lazy-views.d.ts +4 -0
  539. package/dist/views/lazy-views.d.ts.map +1 -1
  540. package/dist/views/lazy-views.js +4 -0
  541. package/dist/views/lazy-views.js.map +1 -1
  542. package/dist/views/page-editor/PageTab.js +1 -1
  543. package/dist/views/page-editor/PageTab.js.map +1 -1
  544. package/dist/views/page-editor/ReviewBar.js +1 -1
  545. package/dist/views/page-editor/ReviewBar.js.map +1 -1
  546. package/dist/views/page-editor/VersionHistoryPanel.js +1 -1
  547. package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -1
  548. package/dist/views/seo/AuditTab.js +1 -1
  549. package/dist/views/seo/AuditTab.js.map +1 -1
  550. package/dist/views/seo/OverviewTab.d.ts.map +1 -1
  551. package/dist/views/seo/OverviewTab.js +2 -2
  552. package/dist/views/seo/OverviewTab.js.map +1 -1
  553. package/dist/views/seo/ProposalsTab.js +1 -1
  554. package/dist/views/seo/ProposalsTab.js.map +1 -1
  555. package/dist/views/settings/AISettingsTab.d.ts.map +1 -1
  556. package/dist/views/settings/AISettingsTab.js +4 -2
  557. package/dist/views/settings/AISettingsTab.js.map +1 -1
  558. package/dist/views/settings/AccessProtectionCard.js +1 -1
  559. package/dist/views/settings/AccessProtectionCard.js.map +1 -1
  560. package/dist/views/settings/AdminThemeCard.d.ts.map +1 -1
  561. package/dist/views/settings/AdminThemeCard.js +63 -15
  562. package/dist/views/settings/AdminThemeCard.js.map +1 -1
  563. package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
  564. package/dist/views/settings/AppearanceTab.js +4 -2
  565. package/dist/views/settings/AppearanceTab.js.map +1 -1
  566. package/dist/views/settings/BrandPreviewCard.js +1 -1
  567. package/dist/views/settings/BrandPreviewCard.js.map +1 -1
  568. package/dist/views/settings/BrandVoiceCard.js +1 -1
  569. package/dist/views/settings/BrandVoiceCard.js.map +1 -1
  570. package/dist/views/settings/EmailSettingsTab.d.ts.map +1 -1
  571. package/dist/views/settings/EmailSettingsTab.js +5 -3
  572. package/dist/views/settings/EmailSettingsTab.js.map +1 -1
  573. package/dist/views/settings/GeneralSettingsTab.d.ts.map +1 -1
  574. package/dist/views/settings/GeneralSettingsTab.js +4 -2
  575. package/dist/views/settings/GeneralSettingsTab.js.map +1 -1
  576. package/dist/views/settings/ProviderConnectionCard.js +1 -1
  577. package/dist/views/settings/ProviderConnectionCard.js.map +1 -1
  578. package/dist/views/settings/SearchDataCard.js +1 -1
  579. package/dist/views/settings/SearchDataCard.js.map +1 -1
  580. package/dist/views/settings/SecurityStatusCard.js +2 -2
  581. package/dist/views/settings/SecurityStatusCard.js.map +1 -1
  582. package/dist/views/settings/SecurityTab.d.ts.map +1 -1
  583. package/dist/views/settings/SecurityTab.js +4 -2
  584. package/dist/views/settings/SecurityTab.js.map +1 -1
  585. package/dist/views/settings/SeoAutopilotCard.js +2 -2
  586. package/dist/views/settings/SeoAutopilotCard.js.map +1 -1
  587. package/dist/views/settings/SeoSettingsTab.d.ts.map +1 -1
  588. package/dist/views/settings/SeoSettingsTab.js +5 -3
  589. package/dist/views/settings/SeoSettingsTab.js.map +1 -1
  590. package/dist/views/settings/SiteIndexStatusCard.js +1 -1
  591. package/dist/views/settings/SiteIndexStatusCard.js.map +1 -1
  592. package/dist/views/settings/SiteThemeCard.js +1 -1
  593. package/dist/views/settings/UpdatesTab.d.ts.map +1 -1
  594. package/dist/views/settings/UpdatesTab.js +6 -5
  595. package/dist/views/settings/UpdatesTab.js.map +1 -1
  596. package/dist/views/settings/components.d.ts +7 -11
  597. package/dist/views/settings/components.d.ts.map +1 -1
  598. package/dist/views/settings/components.js +18 -12
  599. package/dist/views/settings/components.js.map +1 -1
  600. package/dist/views/settings/useAppearanceSettings.d.ts +7 -1
  601. package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
  602. package/dist/views/settings/useAppearanceSettings.js +89 -22
  603. package/dist/views/settings/useAppearanceSettings.js.map +1 -1
  604. package/dist/views/users/UserDetailDrawer.js +1 -1
  605. package/dist/views/users/UserDetailDrawer.js.map +1 -1
  606. package/package.json +10 -8
  607. package/src/AdminRoot.tsx +88 -30
  608. package/src/LoginRoot.tsx +2 -1
  609. package/src/__tests__/components/author-avatar.test.tsx +3 -20
  610. package/src/__tests__/components/notification-bell.test.tsx +146 -14
  611. package/src/__tests__/components/responsive-tiers.render.test.tsx +461 -0
  612. package/src/__tests__/components/serp-preview.render.test.tsx +6 -3
  613. package/src/__tests__/components/shell-primitives.render.test.tsx +951 -0
  614. package/src/__tests__/components/theme-provider-accent.test.tsx +83 -8
  615. package/src/__tests__/components/toggle.test.tsx +11 -3
  616. package/src/__tests__/components/ui-primitives.test.tsx +5 -8
  617. package/src/__tests__/layout/build-nav-items.test.ts +1 -1
  618. package/src/__tests__/layout/shell-nav.render.test.tsx +983 -0
  619. package/src/__tests__/layout/sidebar-forms-submenu.render.test.tsx +8 -4
  620. package/src/__tests__/layout/sidebar-groups.render.test.tsx +116 -0
  621. package/src/__tests__/layout/sidebar-menus.render.test.tsx +116 -0
  622. package/src/__tests__/layout/sidebar-plugin-nav.test.ts +1 -1
  623. package/src/__tests__/layout/sidebar-posts.test.ts +48 -40
  624. package/src/__tests__/layout/sidebar-submenu.render.test.tsx +35 -10
  625. package/src/__tests__/layout/topbar.render.test.tsx +464 -0
  626. package/src/__tests__/lib/api.test.ts +2 -0
  627. package/src/__tests__/lib/job-drawer.test.ts +493 -0
  628. package/src/__tests__/lib/job-view.test.ts +437 -0
  629. package/src/__tests__/lib/jobs-service.test.ts +98 -0
  630. package/src/__tests__/router/admin-route-order.test.ts +39 -0
  631. package/src/__tests__/styles/ai-gradient-contrast.test.ts +135 -0
  632. package/src/__tests__/styles/breakpoint-order.test.ts +68 -0
  633. package/src/__tests__/styles/responsive-layer.test.ts +367 -12
  634. package/src/__tests__/styles/tailwind-preset.test.ts +154 -0
  635. package/src/__tests__/styles/theme-token-scope.test.ts +10 -3
  636. package/src/__tests__/styles/tiers.test.ts +136 -0
  637. package/src/__tests__/styles/tokens-drift.test.ts +67 -6
  638. package/src/__tests__/views/admin-lazy-route.render.test.tsx +41 -1
  639. package/src/__tests__/views/ai-settings.render.test.tsx +4 -4
  640. package/src/__tests__/views/appearance-menus-route.render.test.tsx +58 -0
  641. package/src/__tests__/views/appearance-settings.render.test.tsx +10 -8
  642. package/src/__tests__/views/appearance-theme-provider.render.test.tsx +347 -0
  643. package/src/__tests__/views/dashboard.test.tsx +48 -0
  644. package/src/__tests__/views/document-edit-navigation.render.test.tsx +130 -0
  645. package/src/__tests__/views/document-edit-routes.render.test.tsx +130 -0
  646. package/src/__tests__/views/email-settings.render.test.tsx +2 -2
  647. package/src/__tests__/views/form-entries.render.test.tsx +22 -0
  648. package/src/__tests__/views/form-submissions.render.test.tsx +22 -0
  649. package/src/__tests__/views/forms-list.render.test.tsx +13 -0
  650. package/src/__tests__/views/general-settings.render.test.tsx +38 -11
  651. package/src/__tests__/views/jobs-drawer.render.test.tsx +1047 -0
  652. package/src/__tests__/views/jobs-list.render.test.tsx +850 -0
  653. package/src/__tests__/views/kpi-grid.test.ts +29 -0
  654. package/src/__tests__/views/post-section-editor.test.tsx +5 -1
  655. package/src/__tests__/views/script-tags.render.test.tsx +29 -0
  656. package/src/__tests__/views/security-settings.render.test.tsx +9 -10
  657. package/src/__tests__/views/seo-settings.render.test.tsx +7 -9
  658. package/src/__tests__/views/settings-save-bar.render.test.tsx +91 -0
  659. package/src/__tests__/views/settings-save-footer.render.test.tsx +25 -15
  660. package/src/__tests__/views/settings-tabs.render.test.tsx +371 -0
  661. package/src/__tests__/views/updates-tab.render.test.tsx +4 -3
  662. package/src/components/Breadcrumbs.tsx +7 -1
  663. package/src/components/CommandPalette.tsx +51 -3
  664. package/src/components/LocaleSwitcher.tsx +5 -6
  665. package/src/components/NotificationBell.tsx +74 -18
  666. package/src/components/OfflineStatus.tsx +1 -1
  667. package/src/components/PresenceIndicator.tsx +2 -1
  668. package/src/components/ReflowMeter.tsx +3 -3
  669. package/src/components/SEOPanel.tsx +2 -2
  670. package/src/components/ThemeProvider.tsx +122 -42
  671. package/src/components/TipTapEditor.tsx +3 -4
  672. package/src/components/forms/EmbedPanel.tsx +1 -1
  673. package/src/components/forms/FormEntryDetailPane.tsx +7 -1
  674. package/src/components/forms/ShortcodeGlossary.tsx +7 -1
  675. package/src/components/forms/primitives.tsx +37 -21
  676. package/src/components/pages/tag-badges.tsx +4 -3
  677. package/src/components/seo/PageAuditPanel.tsx +2 -2
  678. package/src/components/seo/SerpPreview.tsx +5 -5
  679. package/src/components/seo/primitives.tsx +2 -2
  680. package/src/components/ui/AuthorAvatar.tsx +11 -10
  681. package/src/components/ui/Badge.tsx +1 -1
  682. package/src/components/ui/Breadcrumb.tsx +109 -0
  683. package/src/components/ui/Button.tsx +40 -15
  684. package/src/components/ui/Card.tsx +35 -32
  685. package/src/components/ui/CardListControls.tsx +90 -0
  686. package/src/components/ui/CountChip.tsx +90 -0
  687. package/src/components/ui/FilterPill.tsx +5 -3
  688. package/src/components/ui/InspectorPane.tsx +21 -7
  689. package/src/components/ui/Modal.tsx +20 -6
  690. package/src/components/ui/PageHeader.tsx +63 -0
  691. package/src/components/ui/RowActions.tsx +7 -2
  692. package/src/components/ui/Segmented.tsx +97 -0
  693. package/src/components/ui/Toaster.tsx +139 -0
  694. package/src/components/ui/Toggle.tsx +18 -14
  695. package/src/components/ui/UnderlineTabs.tsx +373 -0
  696. package/src/components/ui/UnsavedBar.tsx +119 -0
  697. package/src/components/ui/admin-links.tsx +20 -0
  698. package/src/components/ui/card-table.ts +34 -0
  699. package/src/components/virtual-window.tsx +13 -2
  700. package/src/fields/RelationshipField.tsx +1 -1
  701. package/src/hooks/useAppearanceBootstrap.ts +9 -3
  702. package/src/index.ts +19 -0
  703. package/src/layout/Header.tsx +210 -135
  704. package/src/layout/Layout.tsx +61 -108
  705. package/src/layout/MobileTabBar.tsx +92 -0
  706. package/src/layout/Sidebar.tsx +555 -593
  707. package/src/layout/nav-config.tsx +425 -0
  708. package/src/layout/primitives/AdminShell.tsx +154 -6
  709. package/src/layout/topbar-classes.ts +8 -0
  710. package/src/layout/use-nav-items.ts +40 -0
  711. package/src/lib/api.ts +7 -1
  712. package/src/lib/appearance-api.ts +4 -0
  713. package/src/lib/job-drawer.ts +424 -0
  714. package/src/lib/job-view.ts +456 -0
  715. package/src/lib/jobs-service.ts +290 -0
  716. package/src/lib/sheet-focus.ts +71 -0
  717. package/src/lib/tiers.ts +43 -0
  718. package/src/router/admin-routes.ts +8 -0
  719. package/src/router/index.ts +9 -1
  720. package/src/styles/prenta-tokens.css +263 -82
  721. package/src/styles/responsive.css +460 -22
  722. package/src/styles/theme.css +177 -28
  723. package/src/views/ApiKeys.tsx +2 -2
  724. package/src/views/AppearanceChrome.tsx +74 -0
  725. package/src/views/CollectionList.tsx +264 -205
  726. package/src/views/Dashboard.tsx +26 -13
  727. package/src/views/DocumentEdit.tsx +111 -56
  728. package/src/views/FormDeliveries.tsx +30 -17
  729. package/src/views/FormEntries.tsx +28 -20
  730. package/src/views/FormSubmissions.tsx +32 -34
  731. package/src/views/Forms.tsx +55 -34
  732. package/src/views/FormsSettings.tsx +94 -0
  733. package/src/views/Jobs/BusyButton.tsx +56 -0
  734. package/src/views/Jobs/CancelJobDialog.tsx +127 -0
  735. package/src/views/Jobs/DrawerActivity.tsx +142 -0
  736. package/src/views/Jobs/DrawerOverview.tsx +139 -0
  737. package/src/views/Jobs/DrawerResults.tsx +155 -0
  738. package/src/views/Jobs/DrawerReview.tsx +464 -0
  739. package/src/views/Jobs/JobDrawer.tsx +556 -0
  740. package/src/views/Jobs/JobsTable.tsx +260 -0
  741. package/src/views/Jobs/WorkerStrip.tsx +144 -0
  742. package/src/views/Jobs/atoms.tsx +93 -0
  743. package/src/views/Jobs/focus.ts +56 -0
  744. package/src/views/Jobs/icons.tsx +111 -0
  745. package/src/views/Jobs/placeholders.tsx +66 -0
  746. package/src/views/Jobs/useJobDetail.ts +64 -0
  747. package/src/views/Jobs/useJobsFeed.ts +249 -0
  748. package/src/views/Jobs/useReviewItems.ts +187 -0
  749. package/src/views/Jobs.tsx +282 -105
  750. package/src/views/MediaBrowser.tsx +71 -21
  751. package/src/views/Pages/PagesListView.tsx +115 -39
  752. package/src/views/Posts/NewPostTypeInstructions.tsx +15 -10
  753. package/src/views/Posts/PostTypesView.tsx +28 -6
  754. package/src/views/Posts/PostsListView.tsx +130 -40
  755. package/src/views/SEO.tsx +23 -8
  756. package/src/views/ScriptTags.tsx +233 -153
  757. package/src/views/Settings.tsx +215 -256
  758. package/src/views/SpamFolder.tsx +32 -0
  759. package/src/views/Trash.tsx +12 -1
  760. package/src/views/Users.tsx +2 -2
  761. package/src/views/WidgetsPlaceholder.tsx +33 -0
  762. package/src/views/dashboard/kpi-grid.ts +38 -0
  763. package/src/views/lazy-views.tsx +12 -0
  764. package/src/views/page-editor/PageTab.tsx +2 -2
  765. package/src/views/page-editor/ReviewBar.tsx +1 -1
  766. package/src/views/page-editor/VersionHistoryPanel.tsx +1 -1
  767. package/src/views/seo/AuditTab.tsx +1 -1
  768. package/src/views/seo/OverviewTab.tsx +6 -5
  769. package/src/views/seo/ProposalsTab.tsx +1 -1
  770. package/src/views/settings/AISettingsTab.tsx +10 -6
  771. package/src/views/settings/AccessProtectionCard.tsx +1 -1
  772. package/src/views/settings/AdminThemeCard.tsx +228 -35
  773. package/src/views/settings/AppearanceTab.tsx +10 -6
  774. package/src/views/settings/BrandPreviewCard.tsx +1 -1
  775. package/src/views/settings/BrandVoiceCard.tsx +1 -1
  776. package/src/views/settings/EmailSettingsTab.tsx +11 -7
  777. package/src/views/settings/GeneralSettingsTab.tsx +10 -6
  778. package/src/views/settings/ProviderConnectionCard.tsx +1 -1
  779. package/src/views/settings/SearchDataCard.tsx +1 -1
  780. package/src/views/settings/SecurityStatusCard.tsx +2 -2
  781. package/src/views/settings/SecurityTab.tsx +10 -6
  782. package/src/views/settings/SeoAutopilotCard.tsx +2 -2
  783. package/src/views/settings/SeoSettingsTab.tsx +13 -9
  784. package/src/views/settings/SiteIndexStatusCard.tsx +1 -1
  785. package/src/views/settings/SiteThemeCard.tsx +1 -1
  786. package/src/views/settings/UpdatesTab.tsx +107 -101
  787. package/src/views/settings/components.tsx +26 -62
  788. package/src/views/settings/useAppearanceSettings.ts +116 -25
  789. package/src/views/users/UserDetailDrawer.tsx +1 -1
  790. package/dist/components/ui/StatPill.d.ts +0 -18
  791. package/dist/components/ui/StatPill.d.ts.map +0 -1
  792. package/dist/components/ui/StatPill.js +0 -5
  793. package/dist/components/ui/StatPill.js.map +0 -1
  794. package/src/components/ui/StatPill.tsx +0 -37
@@ -18,6 +18,15 @@ import { useApiData } from '../lib/useApiData.js'
18
18
  import { useVirtualWindow, VirtualTablePadding } from '../components/virtual-window.js'
19
19
  import { editPathForDoc, newPathForCollection } from '../lib/collection-routes.js'
20
20
  import { InspectorPane, SplitPaneLayout, SplitPaneList } from '../components/ui/InspectorPane.js'
21
+ import {
22
+ cardCell,
23
+ cardColumnHeader,
24
+ cardRow,
25
+ cardRowGroup,
26
+ cardTable,
27
+ } from '../components/ui/card-table.js'
28
+ import { TIER_MEDIA, useMediaQuery } from '../lib/tiers.js'
29
+ import { CardListControls, type CardSortOption } from '../components/ui/CardListControls.js'
21
30
  import { EntryDetailPane } from '../components/collections/EntryDetailPane.js'
22
31
 
23
32
  export interface CollectionListProps {
@@ -29,6 +38,13 @@ export interface CollectionListProps {
29
38
  type SortField = 'title' | 'status' | 'updatedAt'
30
39
  type SortOrder = 'asc' | 'desc'
31
40
 
41
+ /** The sortable columns, for the phone sort select (the header's labels). */
42
+ const COLLECTION_SORT_OPTIONS: CardSortOption<SortField>[] = [
43
+ { field: 'title', label: 'Title' },
44
+ { field: 'status', label: 'Status' },
45
+ { field: 'updatedAt', label: 'Updated' },
46
+ ]
47
+
32
48
  function resolveCollection(config: any, slug: string): any | undefined {
33
49
  if (!config?.collections) return undefined
34
50
  const list = Array.isArray(config.collections)
@@ -150,33 +166,28 @@ function listPickParam(config: any, slug: string, facets: FacetDef[]): string {
150
166
  return [...names].slice(0, 32).join(',')
151
167
  }
152
168
 
169
+ /** Status chip fill and ink, per the kit's `.s-pub` / `.s-dft` / `.s-sch` / `.s-arc`. */
153
170
  function statusColor(status: string): string {
154
171
  switch (status?.toUpperCase()) {
155
172
  case 'PUBLISHED':
156
- return 'var(--prenta-success-bg, #dcfce7)'
157
- case 'DRAFT':
158
- return 'var(--prenta-muted-bg, #f3f4f6)'
159
- case 'ARCHIVED':
160
- return 'var(--prenta-warning-bg, #fef9c3)'
173
+ return 'var(--suc-l)'
161
174
  case 'SCHEDULED':
162
- return 'var(--prenta-info-bg, #dbeafe)'
175
+ return 'var(--warn-l)'
163
176
  default:
164
- return 'var(--prenta-muted-bg, #f3f4f6)'
177
+ return 'var(--bg)'
165
178
  }
166
179
  }
167
180
 
168
181
  function statusText(status: string): string {
169
182
  switch (status?.toUpperCase()) {
170
183
  case 'PUBLISHED':
171
- return 'var(--prenta-success-text, #166534)'
172
- case 'DRAFT':
173
- return 'var(--prenta-muted-text, #374151)'
174
- case 'ARCHIVED':
175
- return 'var(--prenta-warning-text, #854d0e)'
184
+ return 'var(--suc)'
176
185
  case 'SCHEDULED':
177
- return 'var(--prenta-info-text, #1e40af)'
186
+ return 'var(--warn)'
187
+ case 'ARCHIVED':
188
+ return 'var(--muted)'
178
189
  default:
179
- return 'var(--prenta-muted-text, #374151)'
190
+ return 'var(--sub)'
180
191
  }
181
192
  }
182
193
 
@@ -257,10 +268,14 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
257
268
  }>(endpoint)
258
269
  const docs = data?.docs ?? []
259
270
  const listScrollRef = useRef<HTMLDivElement>(null)
271
+ // Below 769px the rows are cards (`table[data-cards]`), taller than the
272
+ // 52px estimate the window places them by, so every row is mounted.
273
+ const cards = useMediaQuery(TIER_MEDIA.mobile)
260
274
  const listWindow = useVirtualWindow({
261
275
  count: docs.length,
262
276
  scrollRef: listScrollRef,
263
277
  estimateSize: 52,
278
+ enabled: !cards,
264
279
  })
265
280
  const listColumns = 5 + facets.length
266
281
  const total = data?.total ?? 0
@@ -369,7 +384,7 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
369
384
  type="button"
370
385
  onClick={() => toggleSort(field)}
371
386
  className="flex items-center gap-1 text-xs font-medium transition-opacity hover:opacity-80"
372
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
387
+ style={{ color: 'var(--sub)' }}
373
388
  >
374
389
  {children}
375
390
  {sort === field && <span>{order === 'asc' ? '↑' : '↓'}</span>}
@@ -379,10 +394,7 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
379
394
  if (loading && docs.length === 0) {
380
395
  return (
381
396
  <div className="flex h-64 items-center justify-center p-4">
382
- <Loader2
383
- className="h-6 w-6 animate-spin"
384
- style={{ color: 'var(--prenta-primary, #2563eb)' }}
385
- />
397
+ <Loader2 className="h-6 w-6 animate-spin" style={{ color: 'var(--acc)' }} />
386
398
  </div>
387
399
  )
388
400
  }
@@ -394,23 +406,26 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
394
406
  {/* Header */}
395
407
  <div className="mb-4 flex shrink-0 flex-wrap items-center justify-between gap-3">
396
408
  <div>
397
- <h1
398
- className="text-xl font-medium sm:text-2xl"
399
- style={{ color: 'var(--prenta-text, #111827)' }}
400
- >
409
+ <h1 className="text-xl font-medium sm:text-2xl" style={{ color: 'var(--txt)' }}>
401
410
  {labels.plural}
402
411
  </h1>
403
- <p className="text-sm" style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}>
412
+ <p className="text-sm" style={{ color: 'var(--sub)' }}>
404
413
  {total} total
405
414
  </p>
406
415
  </div>
407
- <button
408
- onClick={() => onNavigate(newPath())}
409
- className="flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white transition-colors"
410
- style={{ background: 'var(--prenta-primary, #2563eb)' }}
411
- >
412
- <Plus className="h-4 w-4" /> New {labels.singular}
413
- </button>
416
+ {/* Below 769px the create action floats above the tab bar. */}
417
+ <div data-header-actions="" className="flex items-center gap-2">
418
+ <button
419
+ type="button"
420
+ onClick={() => onNavigate(newPath())}
421
+ data-variant="primary"
422
+ data-fab=""
423
+ className="flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors"
424
+ style={{ background: 'var(--acc)', color: 'var(--on-acc)' }}
425
+ >
426
+ <Plus className="h-4 w-4" aria-hidden /> New {labels.singular}
427
+ </button>
428
+ </div>
414
429
  </div>
415
430
 
416
431
  {/* Search + facet filters */}
@@ -418,7 +433,7 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
418
433
  <div className="relative min-w-[200px] flex-1">
419
434
  <Search
420
435
  className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2"
421
- style={{ color: 'var(--prenta-text-muted, #9ca3af)' }}
436
+ style={{ color: 'var(--muted)' }}
422
437
  />
423
438
  <input
424
439
  type="text"
@@ -427,8 +442,8 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
427
442
  onChange={(e) => setSearch(e.target.value)}
428
443
  className="w-full rounded-lg border py-2 pr-3 pl-9 text-sm focus:ring-2 focus:outline-none"
429
444
  style={{
430
- borderColor: 'var(--prenta-border, #d1d5db)',
431
- color: 'var(--prenta-text, #111827)',
445
+ borderColor: 'var(--bdr)',
446
+ color: 'var(--txt)',
432
447
  }}
433
448
  />
434
449
  </div>
@@ -446,10 +461,8 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
446
461
  onChange={(e) => setFilter(facet.name, e.target.value)}
447
462
  className="rounded-lg border px-3 py-2 text-sm focus:ring-2 focus:outline-none"
448
463
  style={{
449
- borderColor: 'var(--prenta-border, #d1d5db)',
450
- color: filters[facet.name]
451
- ? 'var(--prenta-text, #111827)'
452
- : 'var(--prenta-text-secondary, #6b7280)',
464
+ borderColor: 'var(--bdr)',
465
+ color: filters[facet.name] ? 'var(--txt)' : 'var(--sub)',
453
466
  }}
454
467
  >
455
468
  <option value="">All {facet.label.toLowerCase()}</option>
@@ -466,7 +479,7 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
466
479
  type="button"
467
480
  onClick={() => setFilters({})}
468
481
  className="rounded-lg px-2 py-2 text-sm underline transition-opacity hover:opacity-75"
469
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
482
+ style={{ color: 'var(--sub)' }}
470
483
  >
471
484
  Clear filters
472
485
  </button>
@@ -478,27 +491,27 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
478
491
  <div
479
492
  className="mb-4 flex shrink-0 flex-wrap items-center justify-between gap-2 rounded-lg p-3"
480
493
  style={{
481
- background: 'var(--prenta-info-bg, #eff6ff)',
482
- borderColor: 'var(--prenta-info-border, #bfdbfe)',
494
+ background: 'var(--info-l)',
495
+ borderColor: 'var(--bdr)',
483
496
  borderWidth: 1,
484
497
  borderStyle: 'solid',
485
498
  }}
486
499
  >
487
- <span className="text-sm" style={{ color: 'var(--prenta-info-text, #1e40af)' }}>
500
+ <span className="text-sm" style={{ color: 'var(--info)' }}>
488
501
  {selected.size} selected
489
502
  </span>
490
503
  <div className="flex gap-2">
491
504
  <button
492
505
  onClick={() => bulkAction('publish')}
493
- className="rounded-lg px-3 py-1.5 text-sm text-white"
494
- style={{ background: 'var(--prenta-success, #16a34a)' }}
506
+ className="rounded-lg px-3 py-1.5 text-sm"
507
+ style={{ background: 'var(--suc)', color: 'var(--on-acc)' }}
495
508
  >
496
509
  Publish
497
510
  </button>
498
511
  <button
499
512
  onClick={() => bulkAction('unpublish')}
500
- className="rounded-lg px-3 py-1.5 text-sm text-white"
501
- style={{ background: 'var(--prenta-warning, #ca8a04)' }}
513
+ className="rounded-lg px-3 py-1.5 text-sm"
514
+ style={{ background: 'var(--warn)', color: 'var(--on-acc)' }}
502
515
  >
503
516
  Unpublish
504
517
  </button>
@@ -509,8 +522,8 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
509
522
  />
510
523
  <button
511
524
  onClick={() => bulkAction('delete')}
512
- className="rounded-lg px-3 py-1.5 text-sm text-white"
513
- style={{ background: 'var(--prenta-danger, #dc2626)' }}
525
+ className="rounded-lg px-3 py-1.5 text-sm"
526
+ style={{ background: 'var(--err)', color: 'var(--on-acc)' }}
514
527
  >
515
528
  <Trash2 className="-mt-0.5 mr-1 inline h-3.5 w-3.5" />
516
529
  Delete
@@ -523,8 +536,8 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
523
536
  <div
524
537
  className="mb-4 rounded-lg p-3 text-sm"
525
538
  style={{
526
- background: 'var(--prenta-danger-bg, #fef2f2)',
527
- color: 'var(--prenta-danger-text, #991b1b)',
539
+ background: 'var(--err-l)',
540
+ color: 'var(--err)',
528
541
  }}
529
542
  >
530
543
  {error} —{' '}
@@ -539,184 +552,230 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
539
552
  <div
540
553
  className="flex min-h-0 flex-1 flex-col items-center justify-center rounded-lg border p-8"
541
554
  style={{
542
- borderColor: 'var(--prenta-border, #d1d5db)',
543
- color: 'var(--prenta-text-secondary, #6b7280)',
555
+ borderColor: 'var(--bdr)',
556
+ color: 'var(--sub)',
544
557
  }}
545
558
  >
546
559
  <FileText className="mb-3 h-10 w-10 opacity-40" />
547
560
  <p className="mb-3 text-sm">No {labels.plural.toLowerCase()} found</p>
548
561
  <button
549
562
  onClick={() => onNavigate(newPath())}
550
- className="rounded-lg px-4 py-2 text-sm text-white"
551
- style={{ background: 'var(--prenta-primary, #2563eb)' }}
563
+ className="rounded-lg px-4 py-2 text-sm"
564
+ style={{ background: 'var(--acc)', color: 'var(--on-acc)' }}
552
565
  >
553
566
  Create {labels.singular}
554
567
  </button>
555
568
  </div>
556
569
  ) : (
557
- <SplitPaneLayout className="min-h-0">
558
- <SplitPaneList>
559
- <div
560
- ref={listScrollRef}
561
- className="h-full min-h-0 overflow-auto rounded-lg border"
562
- style={{ borderColor: 'var(--prenta-border, #d1d5db)' }}
563
- >
564
- <table className="w-full text-sm">
565
- <thead
566
- className="sticky top-0"
567
- style={{
568
- background: 'var(--prenta-surface-alt, #f9fafb)',
569
- borderBottom: '1px solid var(--prenta-border, #d1d5db)',
570
- }}
571
- >
572
- <tr>
573
- <th className="w-10 px-3 py-2 text-left">
574
- <input
575
- type="checkbox"
576
- checked={selected.size === docs.length && docs.length > 0}
577
- onChange={(e) => toggleAll(e.target.checked)}
578
- className="rounded"
579
- />
580
- </th>
581
- <th className="px-3 py-2 text-left" aria-sort={ariaSortFor('title')}>
582
- <SortCol field="title">Title</SortCol>
583
- </th>
584
- {facets.map((facet) => (
570
+ <>
571
+ {/* Phones: the table header's sort and select-all, out of reach on cards. */}
572
+ <CardListControls
573
+ className="mb-3"
574
+ selectAll={{
575
+ checked: selected.size === docs.length && docs.length > 0,
576
+ onChange: toggleAll,
577
+ disabled: docs.length === 0,
578
+ }}
579
+ sort={{
580
+ options: COLLECTION_SORT_OPTIONS,
581
+ field: sort,
582
+ dir: order,
583
+ onChange: (field, nextOrder) => {
584
+ resetCursor()
585
+ setSort(field)
586
+ setOrder(nextOrder)
587
+ },
588
+ }}
589
+ />
590
+ <SplitPaneLayout className="min-h-0">
591
+ <SplitPaneList>
592
+ <div
593
+ ref={listScrollRef}
594
+ className="mobile:rounded-none mobile:border-0 h-full min-h-0 overflow-auto rounded-lg border"
595
+ style={{ borderColor: 'var(--bdr)' }}
596
+ >
597
+ <table {...cardTable} aria-label={labels.plural} className="w-full text-sm">
598
+ <thead
599
+ {...cardRowGroup}
600
+ className="sticky top-0"
601
+ style={{
602
+ background: 'var(--bg)',
603
+ borderBottom: '1px solid var(--bdr)',
604
+ }}
605
+ >
606
+ <tr {...cardRow}>
607
+ <th {...cardColumnHeader} className="w-10 px-3 py-2 text-left">
608
+ <input
609
+ type="checkbox"
610
+ aria-label={`Select all ${labels.plural.toLowerCase()} on this page`}
611
+ checked={selected.size === docs.length && docs.length > 0}
612
+ onChange={(e) => toggleAll(e.target.checked)}
613
+ className="rounded"
614
+ />
615
+ </th>
585
616
  <th
586
- key={facet.name}
587
- className="px-3 py-2 text-left text-xs font-medium"
588
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
617
+ {...cardColumnHeader}
618
+ className="px-3 py-2 text-left"
619
+ aria-sort={ariaSortFor('title')}
620
+ >
621
+ <SortCol field="title">Title</SortCol>
622
+ </th>
623
+ {facets.map((facet) => (
624
+ <th
625
+ {...cardColumnHeader}
626
+ key={facet.name}
627
+ className="px-3 py-2 text-left text-xs font-medium"
628
+ style={{ color: 'var(--sub)' }}
629
+ >
630
+ {facet.label}
631
+ </th>
632
+ ))}
633
+ <th
634
+ {...cardColumnHeader}
635
+ className="px-3 py-2 text-left"
636
+ aria-sort={ariaSortFor('status')}
589
637
  >
590
- {facet.label}
638
+ <SortCol field="status">Status</SortCol>
591
639
  </th>
592
- ))}
593
- <th className="px-3 py-2 text-left" aria-sort={ariaSortFor('status')}>
594
- <SortCol field="status">Status</SortCol>
595
- </th>
596
- <th className="px-3 py-2 text-left" aria-sort={ariaSortFor('updatedAt')}>
597
- <SortCol field="updatedAt">Updated</SortCol>
598
- </th>
599
- <th
600
- className="px-3 py-2 text-left text-xs font-medium"
601
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
602
- >
603
- Actions
604
- </th>
605
- </tr>
606
- </thead>
607
- <tbody>
608
- <VirtualTablePadding height={listWindow.paddingTop} columns={listColumns} />
609
- {listWindow.rows.map((row) => {
610
- const doc = docs[row.index]
611
- if (!doc) return null
612
- const isDetail = detailId === String(doc.id)
613
- return (
614
- <tr
615
- key={doc.id}
616
- className={`cursor-pointer transition-colors ${isDetail ? 'bg-[var(--acc-l)]' : 'hover:opacity-95'}`}
617
- style={{ borderBottom: '1px solid var(--prenta-border, #e5e7eb)' }}
618
- onClick={() => toggleDetail(String(doc.id))}
619
- onDoubleClick={() => onNavigate(editPath(doc.id))}
640
+ <th
641
+ {...cardColumnHeader}
642
+ className="px-3 py-2 text-left"
643
+ aria-sort={ariaSortFor('updatedAt')}
620
644
  >
621
- <td className="px-3 py-2" onClick={(e) => e.stopPropagation()}>
622
- <input
623
- type="checkbox"
624
- checked={selected.has(String(doc.id))}
625
- onChange={() => toggleSelect(String(doc.id))}
626
- className="rounded"
627
- />
628
- </td>
629
- <td className="px-3 py-2">
630
- <button
631
- type="button"
632
- onClick={(e) => {
633
- e.stopPropagation()
634
- toggleDetail(String(doc.id))
635
- }}
636
- aria-expanded={isDetail}
637
- className="text-left font-medium hover:underline"
638
- style={{ color: 'var(--prenta-text, #111827)' }}
639
- >
640
- {doc.title || doc.name || `#${doc.id}`}
641
- </button>
642
- </td>
643
- {facets.map((facet) => (
645
+ <SortCol field="updatedAt">Updated</SortCol>
646
+ </th>
647
+ <th
648
+ {...cardColumnHeader}
649
+ className="px-3 py-2 text-left text-xs font-medium"
650
+ style={{ color: 'var(--sub)' }}
651
+ >
652
+ Actions
653
+ </th>
654
+ </tr>
655
+ </thead>
656
+ <tbody {...cardRowGroup}>
657
+ <VirtualTablePadding height={listWindow.paddingTop} columns={listColumns} />
658
+ {listWindow.rows.map((row) => {
659
+ const doc = docs[row.index]
660
+ if (!doc) return null
661
+ const isDetail = detailId === String(doc.id)
662
+ return (
663
+ <tr
664
+ key={doc.id}
665
+ {...cardRow}
666
+ data-state={isDetail ? 'selected' : undefined}
667
+ className={`cursor-pointer transition-colors ${isDetail ? 'bg-[var(--acc-l)]' : 'hover:opacity-95'}`}
668
+ style={{ borderBottom: '1px solid var(--bdr)' }}
669
+ onClick={() => toggleDetail(String(doc.id))}
670
+ onDoubleClick={() => onNavigate(editPath(doc.id))}
671
+ >
644
672
  <td
645
- key={facet.name}
646
- className="max-w-[200px] truncate px-3 py-2"
647
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
648
- title={facetCellValue(doc, facet) || undefined}
673
+ {...cardCell({ role: 'check' })}
674
+ className="px-3 py-2"
675
+ onClick={(e) => e.stopPropagation()}
649
676
  >
650
- {facetCellValue(doc, facet) || '—'}
677
+ {/* The label is the card's 44px hit area on mobile. */}
678
+ <label className="inline-flex cursor-pointer">
679
+ <input
680
+ type="checkbox"
681
+ aria-label={`Select ${doc.title || doc.name || `#${doc.id}`}`}
682
+ checked={selected.has(String(doc.id))}
683
+ onChange={() => toggleSelect(String(doc.id))}
684
+ className="rounded"
685
+ />
686
+ </label>
651
687
  </td>
652
- ))}
653
- <td className="px-3 py-2">
654
- <span
655
- className="inline-block rounded-full px-2 py-0.5 text-xs font-medium"
656
- style={{
657
- background: statusColor(doc.status),
658
- color: statusText(doc.status),
659
- }}
660
- >
661
- {doc.status ?? 'DRAFT'}
662
- </span>
663
- </td>
664
- <td
665
- className="px-3 py-2"
666
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
667
- >
668
- {formatDate(doc.updatedAt)}
669
- </td>
670
- <td className="px-3 py-2">
671
- <button
672
- type="button"
673
- onClick={(e) => {
674
- e.stopPropagation()
675
- onNavigate(editPath(doc.id))
676
- }}
677
- className="rounded p-1.5 transition-opacity hover:opacity-75"
678
- title="Edit"
679
- aria-label={`Edit ${doc.title || doc.name || `#${doc.id}`}`}
688
+ <td {...cardCell({ role: 'title' })} className="px-3 py-2">
689
+ <button
690
+ type="button"
691
+ onClick={(e) => {
692
+ e.stopPropagation()
693
+ toggleDetail(String(doc.id))
694
+ }}
695
+ aria-expanded={isDetail}
696
+ className="text-left font-medium hover:underline"
697
+ style={{ color: 'var(--txt)' }}
698
+ >
699
+ {doc.title || doc.name || `#${doc.id}`}
700
+ </button>
701
+ </td>
702
+ {facets.map((facet) => (
703
+ <td
704
+ key={facet.name}
705
+ {...cardCell({ label: facet.label })}
706
+ className="max-w-[200px] truncate px-3 py-2"
707
+ style={{ color: 'var(--sub)' }}
708
+ title={facetCellValue(doc, facet) || undefined}
709
+ >
710
+ {facetCellValue(doc, facet) || '—'}
711
+ </td>
712
+ ))}
713
+ <td {...cardCell({ label: 'Status' })} className="px-3 py-2">
714
+ <span
715
+ className="inline-block rounded-full px-2 py-0.5 text-xs font-medium"
716
+ style={{
717
+ background: statusColor(doc.status),
718
+ color: statusText(doc.status),
719
+ }}
720
+ >
721
+ {doc.status ?? 'DRAFT'}
722
+ </span>
723
+ </td>
724
+ <td
725
+ {...cardCell({ label: 'Updated' })}
726
+ className="px-3 py-2"
727
+ style={{ color: 'var(--sub)' }}
680
728
  >
681
- <MoreHorizontal
682
- className="h-4 w-4"
683
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
684
- />
685
- </button>
686
- </td>
687
- </tr>
688
- )
689
- })}
690
- <VirtualTablePadding height={listWindow.paddingBottom} columns={listColumns} />
691
- </tbody>
692
- </table>
693
- </div>
694
- </SplitPaneList>
695
-
696
- <InspectorPane
697
- open={detailDoc !== null}
698
- width={400}
699
- aria-label={`${labels.singular} details`}
700
- >
701
- {detailDoc && (
702
- <EntryDetailPane
703
- key={String(detailDoc.id)}
704
- doc={detailDoc}
705
- collection={collectionDef}
706
- singularLabel={labels.singular}
707
- onClose={() => setDetailId(null)}
708
- onOpenEditor={() => onNavigate(editPath(detailDoc.id))}
709
- />
710
- )}
711
- </InspectorPane>
712
- </SplitPaneLayout>
729
+ {formatDate(doc.updatedAt)}
730
+ </td>
731
+ <td {...cardCell({ role: 'actions' })} className="px-3 py-2">
732
+ <button
733
+ type="button"
734
+ onClick={(e) => {
735
+ e.stopPropagation()
736
+ onNavigate(editPath(doc.id))
737
+ }}
738
+ className="rounded p-1.5 transition-opacity hover:opacity-75"
739
+ title="Edit"
740
+ aria-label={`Edit ${doc.title || doc.name || `#${doc.id}`}`}
741
+ >
742
+ <MoreHorizontal className="h-4 w-4" style={{ color: 'var(--sub)' }} />
743
+ </button>
744
+ </td>
745
+ </tr>
746
+ )
747
+ })}
748
+ <VirtualTablePadding height={listWindow.paddingBottom} columns={listColumns} />
749
+ </tbody>
750
+ </table>
751
+ </div>
752
+ </SplitPaneList>
753
+
754
+ <InspectorPane
755
+ open={detailDoc !== null}
756
+ width={400}
757
+ aria-label={`${labels.singular} details`}
758
+ >
759
+ {detailDoc && (
760
+ <EntryDetailPane
761
+ key={String(detailDoc.id)}
762
+ doc={detailDoc}
763
+ collection={collectionDef}
764
+ singularLabel={labels.singular}
765
+ onClose={() => setDetailId(null)}
766
+ onOpenEditor={() => onNavigate(editPath(detailDoc.id))}
767
+ />
768
+ )}
769
+ </InspectorPane>
770
+ </SplitPaneLayout>
771
+ </>
713
772
  )}
714
773
 
715
774
  {/* Pagination — shrink-0 so it stays visible below the scrolling table (#736). */}
716
775
  {totalPages > 1 && (
717
776
  <div
718
777
  className="mt-4 flex shrink-0 items-center justify-between text-sm"
719
- style={{ color: 'var(--prenta-text-secondary, #6b7280)' }}
778
+ style={{ color: 'var(--sub)' }}
720
779
  >
721
780
  <span>
722
781
  Page {pageNumber} of {totalPages}
@@ -733,7 +792,7 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
733
792
  })
734
793
  }}
735
794
  className="flex items-center gap-1 rounded-lg border px-3 py-1.5 transition-opacity disabled:opacity-40"
736
- style={{ borderColor: 'var(--prenta-border, #d1d5db)' }}
795
+ style={{ borderColor: 'var(--bdr)' }}
737
796
  >
738
797
  <ChevronLeft className="h-4 w-4" /> Previous
739
798
  </button>
@@ -746,7 +805,7 @@ export function CollectionList({ collectionSlug, config, onNavigate }: Collectio
746
805
  setCursor(nextCursor)
747
806
  }}
748
807
  className="flex items-center gap-1 rounded-lg border px-3 py-1.5 transition-opacity disabled:opacity-40"
749
- style={{ borderColor: 'var(--prenta-border, #d1d5db)' }}
808
+ style={{ borderColor: 'var(--bdr)' }}
750
809
  >
751
810
  Next <ChevronRight className="h-4 w-4" />
752
811
  </button>