@prenta/admin 2.6.1 → 2.8.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 (864) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/design-system/tokens.css +196 -85
  3. package/design-system/tokens.json +310 -85
  4. package/design-system/tokens.scss +163 -44
  5. package/design-system/tokens.tailwind.cjs +64 -1
  6. package/dist/AdminRoot.d.ts.map +1 -1
  7. package/dist/AdminRoot.js +43 -21
  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/batch-wizard.test.d.ts +2 -0
  61. package/dist/__tests__/lib/batch-wizard.test.d.ts.map +1 -0
  62. package/dist/__tests__/lib/batch-wizard.test.js +144 -0
  63. package/dist/__tests__/lib/batch-wizard.test.js.map +1 -0
  64. package/dist/__tests__/lib/job-drawer.test.d.ts +2 -0
  65. package/dist/__tests__/lib/job-drawer.test.d.ts.map +1 -0
  66. package/dist/__tests__/lib/job-drawer.test.js +395 -0
  67. package/dist/__tests__/lib/job-drawer.test.js.map +1 -0
  68. package/dist/__tests__/lib/job-view.test.d.ts +2 -0
  69. package/dist/__tests__/lib/job-view.test.d.ts.map +1 -0
  70. package/dist/__tests__/lib/job-view.test.js +484 -0
  71. package/dist/__tests__/lib/job-view.test.js.map +1 -0
  72. package/dist/__tests__/lib/jobs-service.test.d.ts +2 -0
  73. package/dist/__tests__/lib/jobs-service.test.d.ts.map +1 -0
  74. package/dist/__tests__/lib/jobs-service.test.js +142 -0
  75. package/dist/__tests__/lib/jobs-service.test.js.map +1 -0
  76. package/dist/__tests__/router/admin-route-order.test.d.ts +2 -0
  77. package/dist/__tests__/router/admin-route-order.test.d.ts.map +1 -0
  78. package/dist/__tests__/router/admin-route-order.test.js +36 -0
  79. package/dist/__tests__/router/admin-route-order.test.js.map +1 -0
  80. package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts +2 -0
  81. package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts.map +1 -0
  82. package/dist/__tests__/styles/ai-gradient-contrast.test.js +110 -0
  83. package/dist/__tests__/styles/ai-gradient-contrast.test.js.map +1 -0
  84. package/dist/__tests__/styles/breakpoint-order.test.d.ts +2 -0
  85. package/dist/__tests__/styles/breakpoint-order.test.d.ts.map +1 -0
  86. package/dist/__tests__/styles/breakpoint-order.test.js +52 -0
  87. package/dist/__tests__/styles/breakpoint-order.test.js.map +1 -0
  88. package/dist/__tests__/styles/responsive-layer.test.js +303 -12
  89. package/dist/__tests__/styles/responsive-layer.test.js.map +1 -1
  90. package/dist/__tests__/styles/tailwind-preset.test.d.ts +2 -0
  91. package/dist/__tests__/styles/tailwind-preset.test.d.ts.map +1 -0
  92. package/dist/__tests__/styles/tailwind-preset.test.js +147 -0
  93. package/dist/__tests__/styles/tailwind-preset.test.js.map +1 -0
  94. package/dist/__tests__/styles/theme-token-scope.test.js +9 -3
  95. package/dist/__tests__/styles/theme-token-scope.test.js.map +1 -1
  96. package/dist/__tests__/styles/tiers.test.d.ts +2 -0
  97. package/dist/__tests__/styles/tiers.test.d.ts.map +1 -0
  98. package/dist/__tests__/styles/tiers.test.js +121 -0
  99. package/dist/__tests__/styles/tiers.test.js.map +1 -0
  100. package/dist/__tests__/styles/tokens-drift.test.js +57 -6
  101. package/dist/__tests__/styles/tokens-drift.test.js.map +1 -1
  102. package/dist/__tests__/views/admin-lazy-route.render.test.js +27 -1
  103. package/dist/__tests__/views/admin-lazy-route.render.test.js.map +1 -1
  104. package/dist/__tests__/views/ai-settings.render.test.js +4 -4
  105. package/dist/__tests__/views/appearance-chrome.render.test.d.ts +2 -0
  106. package/dist/__tests__/views/appearance-chrome.render.test.d.ts.map +1 -0
  107. package/dist/__tests__/views/appearance-chrome.render.test.js +688 -0
  108. package/dist/__tests__/views/appearance-chrome.render.test.js.map +1 -0
  109. package/dist/__tests__/views/appearance-menus-route.render.test.d.ts +2 -0
  110. package/dist/__tests__/views/appearance-menus-route.render.test.d.ts.map +1 -0
  111. package/dist/__tests__/views/appearance-menus-route.render.test.js +50 -0
  112. package/dist/__tests__/views/appearance-menus-route.render.test.js.map +1 -0
  113. package/dist/__tests__/views/appearance-settings.render.test.js +8 -6
  114. package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
  115. package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts +2 -0
  116. package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts.map +1 -0
  117. package/dist/__tests__/views/appearance-theme-provider.render.test.js +286 -0
  118. package/dist/__tests__/views/appearance-theme-provider.render.test.js.map +1 -0
  119. package/dist/__tests__/views/dashboard.test.js +37 -0
  120. package/dist/__tests__/views/dashboard.test.js.map +1 -1
  121. package/dist/__tests__/views/document-edit-navigation.render.test.d.ts +2 -0
  122. package/dist/__tests__/views/document-edit-navigation.render.test.d.ts.map +1 -0
  123. package/dist/__tests__/views/document-edit-navigation.render.test.js +101 -0
  124. package/dist/__tests__/views/document-edit-navigation.render.test.js.map +1 -0
  125. package/dist/__tests__/views/document-edit-routes.render.test.d.ts +2 -0
  126. package/dist/__tests__/views/document-edit-routes.render.test.d.ts.map +1 -0
  127. package/dist/__tests__/views/document-edit-routes.render.test.js +113 -0
  128. package/dist/__tests__/views/document-edit-routes.render.test.js.map +1 -0
  129. package/dist/__tests__/views/email-settings.render.test.js +2 -2
  130. package/dist/__tests__/views/form-entries.render.test.js +15 -0
  131. package/dist/__tests__/views/form-entries.render.test.js.map +1 -1
  132. package/dist/__tests__/views/form-submissions.render.test.js +18 -0
  133. package/dist/__tests__/views/form-submissions.render.test.js.map +1 -1
  134. package/dist/__tests__/views/forms-list.render.test.js +12 -0
  135. package/dist/__tests__/views/forms-list.render.test.js.map +1 -1
  136. package/dist/__tests__/views/general-settings.render.test.js +26 -10
  137. package/dist/__tests__/views/general-settings.render.test.js.map +1 -1
  138. package/dist/__tests__/views/header-footer-form.test.d.ts +2 -0
  139. package/dist/__tests__/views/header-footer-form.test.d.ts.map +1 -0
  140. package/dist/__tests__/views/header-footer-form.test.js +266 -0
  141. package/dist/__tests__/views/header-footer-form.test.js.map +1 -0
  142. package/dist/__tests__/views/jobs-drawer.render.test.d.ts +2 -0
  143. package/dist/__tests__/views/jobs-drawer.render.test.d.ts.map +1 -0
  144. package/dist/__tests__/views/jobs-drawer.render.test.js +1348 -0
  145. package/dist/__tests__/views/jobs-drawer.render.test.js.map +1 -0
  146. package/dist/__tests__/views/jobs-list.render.test.d.ts +2 -0
  147. package/dist/__tests__/views/jobs-list.render.test.d.ts.map +1 -0
  148. package/dist/__tests__/views/jobs-list.render.test.js +697 -0
  149. package/dist/__tests__/views/jobs-list.render.test.js.map +1 -0
  150. package/dist/__tests__/views/jobs-wizard.render.test.d.ts +2 -0
  151. package/dist/__tests__/views/jobs-wizard.render.test.d.ts.map +1 -0
  152. package/dist/__tests__/views/jobs-wizard.render.test.js +588 -0
  153. package/dist/__tests__/views/jobs-wizard.render.test.js.map +1 -0
  154. package/dist/__tests__/views/kpi-grid.test.d.ts +2 -0
  155. package/dist/__tests__/views/kpi-grid.test.d.ts.map +1 -0
  156. package/dist/__tests__/views/kpi-grid.test.js +26 -0
  157. package/dist/__tests__/views/kpi-grid.test.js.map +1 -0
  158. package/dist/__tests__/views/post-section-editor.test.js +3 -1
  159. package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
  160. package/dist/__tests__/views/script-tags.render.test.js +25 -0
  161. package/dist/__tests__/views/script-tags.render.test.js.map +1 -1
  162. package/dist/__tests__/views/security-settings.render.test.js +9 -8
  163. package/dist/__tests__/views/security-settings.render.test.js.map +1 -1
  164. package/dist/__tests__/views/seo-settings.render.test.js +7 -7
  165. package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
  166. package/dist/__tests__/views/settings-save-bar.render.test.d.ts +2 -0
  167. package/dist/__tests__/views/settings-save-bar.render.test.d.ts.map +1 -0
  168. package/dist/__tests__/views/settings-save-bar.render.test.js +68 -0
  169. package/dist/__tests__/views/settings-save-bar.render.test.js.map +1 -0
  170. package/dist/__tests__/views/settings-save-footer.render.test.js +23 -15
  171. package/dist/__tests__/views/settings-save-footer.render.test.js.map +1 -1
  172. package/dist/__tests__/views/settings-tabs.render.test.d.ts +2 -0
  173. package/dist/__tests__/views/settings-tabs.render.test.d.ts.map +1 -0
  174. package/dist/__tests__/views/settings-tabs.render.test.js +319 -0
  175. package/dist/__tests__/views/settings-tabs.render.test.js.map +1 -0
  176. package/dist/__tests__/views/updates-tab.render.test.js +4 -3
  177. package/dist/__tests__/views/updates-tab.render.test.js.map +1 -1
  178. package/dist/components/Breadcrumbs.d.ts +8 -1
  179. package/dist/components/Breadcrumbs.d.ts.map +1 -1
  180. package/dist/components/Breadcrumbs.js +6 -0
  181. package/dist/components/Breadcrumbs.js.map +1 -1
  182. package/dist/components/CommandPalette.d.ts.map +1 -1
  183. package/dist/components/CommandPalette.js +40 -4
  184. package/dist/components/CommandPalette.js.map +1 -1
  185. package/dist/components/LocaleSwitcher.d.ts.map +1 -1
  186. package/dist/components/LocaleSwitcher.js +1 -1
  187. package/dist/components/LocaleSwitcher.js.map +1 -1
  188. package/dist/components/NotificationBell.d.ts.map +1 -1
  189. package/dist/components/NotificationBell.js +44 -3
  190. package/dist/components/NotificationBell.js.map +1 -1
  191. package/dist/components/OfflineStatus.js +1 -1
  192. package/dist/components/OfflineStatus.js.map +1 -1
  193. package/dist/components/PresenceIndicator.d.ts.map +1 -1
  194. package/dist/components/PresenceIndicator.js +2 -1
  195. package/dist/components/PresenceIndicator.js.map +1 -1
  196. package/dist/components/ReflowMeter.js +2 -2
  197. package/dist/components/ReflowMeter.js.map +1 -1
  198. package/dist/components/SEOPanel.js +2 -2
  199. package/dist/components/SEOPanel.js.map +1 -1
  200. package/dist/components/ThemeProvider.d.ts +24 -4
  201. package/dist/components/ThemeProvider.d.ts.map +1 -1
  202. package/dist/components/ThemeProvider.js +80 -22
  203. package/dist/components/ThemeProvider.js.map +1 -1
  204. package/dist/components/TipTapEditor.d.ts.map +1 -1
  205. package/dist/components/TipTapEditor.js +3 -4
  206. package/dist/components/TipTapEditor.js.map +1 -1
  207. package/dist/components/forms/EmbedPanel.js +1 -1
  208. package/dist/components/forms/EmbedPanel.js.map +1 -1
  209. package/dist/components/forms/FormEntryDetailPane.js +6 -1
  210. package/dist/components/forms/FormEntryDetailPane.js.map +1 -1
  211. package/dist/components/forms/ShortcodeGlossary.d.ts.map +1 -1
  212. package/dist/components/forms/ShortcodeGlossary.js +6 -1
  213. package/dist/components/forms/ShortcodeGlossary.js.map +1 -1
  214. package/dist/components/forms/primitives.d.ts +15 -5
  215. package/dist/components/forms/primitives.d.ts.map +1 -1
  216. package/dist/components/forms/primitives.js +11 -11
  217. package/dist/components/forms/primitives.js.map +1 -1
  218. package/dist/components/pages/tag-badges.d.ts +2 -1
  219. package/dist/components/pages/tag-badges.d.ts.map +1 -1
  220. package/dist/components/pages/tag-badges.js +4 -3
  221. package/dist/components/pages/tag-badges.js.map +1 -1
  222. package/dist/components/seo/PageAuditPanel.js +2 -2
  223. package/dist/components/seo/PageAuditPanel.js.map +1 -1
  224. package/dist/components/seo/SerpPreview.d.ts +4 -4
  225. package/dist/components/seo/SerpPreview.js +1 -1
  226. package/dist/components/seo/SerpPreview.js.map +1 -1
  227. package/dist/components/seo/primitives.js +2 -2
  228. package/dist/components/seo/primitives.js.map +1 -1
  229. package/dist/components/ui/AuthorAvatar.d.ts +4 -4
  230. package/dist/components/ui/AuthorAvatar.d.ts.map +1 -1
  231. package/dist/components/ui/AuthorAvatar.js +11 -10
  232. package/dist/components/ui/AuthorAvatar.js.map +1 -1
  233. package/dist/components/ui/Badge.d.ts +1 -1
  234. package/dist/components/ui/Badge.js +1 -1
  235. package/dist/components/ui/Badge.js.map +1 -1
  236. package/dist/components/ui/Breadcrumb.d.ts +27 -0
  237. package/dist/components/ui/Breadcrumb.d.ts.map +1 -0
  238. package/dist/components/ui/Breadcrumb.js +41 -0
  239. package/dist/components/ui/Breadcrumb.js.map +1 -0
  240. package/dist/components/ui/Button.d.ts +2 -2
  241. package/dist/components/ui/Button.d.ts.map +1 -1
  242. package/dist/components/ui/Button.js +31 -16
  243. package/dist/components/ui/Button.js.map +1 -1
  244. package/dist/components/ui/Card.d.ts +8 -4
  245. package/dist/components/ui/Card.d.ts.map +1 -1
  246. package/dist/components/ui/Card.js +21 -13
  247. package/dist/components/ui/Card.js.map +1 -1
  248. package/dist/components/ui/CardListControls.d.ts +34 -0
  249. package/dist/components/ui/CardListControls.d.ts.map +1 -0
  250. package/dist/components/ui/CardListControls.js +25 -0
  251. package/dist/components/ui/CardListControls.js.map +1 -0
  252. package/dist/components/ui/CountChip.d.ts +20 -0
  253. package/dist/components/ui/CountChip.d.ts.map +1 -0
  254. package/dist/components/ui/CountChip.js +48 -0
  255. package/dist/components/ui/CountChip.js.map +1 -0
  256. package/dist/components/ui/FilterPill.d.ts +2 -1
  257. package/dist/components/ui/FilterPill.d.ts.map +1 -1
  258. package/dist/components/ui/FilterPill.js +3 -2
  259. package/dist/components/ui/FilterPill.js.map +1 -1
  260. package/dist/components/ui/Input.d.ts +1 -1
  261. package/dist/components/ui/InspectorPane.d.ts +1 -1
  262. package/dist/components/ui/InspectorPane.d.ts.map +1 -1
  263. package/dist/components/ui/InspectorPane.js +15 -4
  264. package/dist/components/ui/InspectorPane.js.map +1 -1
  265. package/dist/components/ui/Modal.d.ts.map +1 -1
  266. package/dist/components/ui/Modal.js +10 -2
  267. package/dist/components/ui/Modal.js.map +1 -1
  268. package/dist/components/ui/PageHeader.d.ts +28 -0
  269. package/dist/components/ui/PageHeader.d.ts.map +1 -0
  270. package/dist/components/ui/PageHeader.js +18 -0
  271. package/dist/components/ui/PageHeader.js.map +1 -0
  272. package/dist/components/ui/RowActions.d.ts +5 -0
  273. package/dist/components/ui/RowActions.d.ts.map +1 -1
  274. package/dist/components/ui/RowActions.js +7 -2
  275. package/dist/components/ui/RowActions.js.map +1 -1
  276. package/dist/components/ui/Segmented.d.ts +21 -0
  277. package/dist/components/ui/Segmented.d.ts.map +1 -0
  278. package/dist/components/ui/Segmented.js +41 -0
  279. package/dist/components/ui/Segmented.js.map +1 -0
  280. package/dist/components/ui/Toaster.d.ts +12 -0
  281. package/dist/components/ui/Toaster.d.ts.map +1 -0
  282. package/dist/components/ui/Toaster.js +103 -0
  283. package/dist/components/ui/Toaster.js.map +1 -0
  284. package/dist/components/ui/Toggle.d.ts +4 -3
  285. package/dist/components/ui/Toggle.d.ts.map +1 -1
  286. package/dist/components/ui/Toggle.js +16 -12
  287. package/dist/components/ui/Toggle.js.map +1 -1
  288. package/dist/components/ui/UnderlineTabs.d.ts +56 -0
  289. package/dist/components/ui/UnderlineTabs.d.ts.map +1 -0
  290. package/dist/components/ui/UnderlineTabs.js +205 -0
  291. package/dist/components/ui/UnderlineTabs.js.map +1 -0
  292. package/dist/components/ui/UnsavedBar.d.ts +25 -0
  293. package/dist/components/ui/UnsavedBar.d.ts.map +1 -0
  294. package/dist/components/ui/UnsavedBar.js +22 -0
  295. package/dist/components/ui/UnsavedBar.js.map +1 -0
  296. package/dist/components/ui/admin-links.d.ts +11 -0
  297. package/dist/components/ui/admin-links.d.ts.map +1 -0
  298. package/dist/components/ui/admin-links.js +10 -0
  299. package/dist/components/ui/admin-links.js.map +1 -0
  300. package/dist/components/ui/card-table.d.ts +43 -0
  301. package/dist/components/ui/card-table.d.ts.map +1 -0
  302. package/dist/components/ui/card-table.js +31 -0
  303. package/dist/components/ui/card-table.js.map +1 -0
  304. package/dist/components/virtual-window.d.ts +7 -0
  305. package/dist/components/virtual-window.d.ts.map +1 -1
  306. package/dist/components/virtual-window.js +5 -2
  307. package/dist/components/virtual-window.js.map +1 -1
  308. package/dist/fields/RelationshipField.js +1 -1
  309. package/dist/fields/RelationshipField.js.map +1 -1
  310. package/dist/files/dm-mono-latin-400-normal.woff +0 -0
  311. package/dist/files/dm-mono-latin-400-normal.woff2 +0 -0
  312. package/dist/files/dm-mono-latin-500-normal.woff +0 -0
  313. package/dist/files/dm-mono-latin-500-normal.woff2 +0 -0
  314. package/dist/files/dm-mono-latin-ext-400-normal.woff +0 -0
  315. package/dist/files/dm-mono-latin-ext-400-normal.woff2 +0 -0
  316. package/dist/files/dm-mono-latin-ext-500-normal.woff +0 -0
  317. package/dist/files/dm-mono-latin-ext-500-normal.woff2 +0 -0
  318. package/dist/files/dm-sans-latin-400-normal.woff +0 -0
  319. package/dist/files/dm-sans-latin-400-normal.woff2 +0 -0
  320. package/dist/files/dm-sans-latin-500-normal.woff +0 -0
  321. package/dist/files/dm-sans-latin-500-normal.woff2 +0 -0
  322. package/dist/files/dm-sans-latin-600-normal.woff +0 -0
  323. package/dist/files/dm-sans-latin-600-normal.woff2 +0 -0
  324. package/dist/files/dm-sans-latin-700-normal.woff +0 -0
  325. package/dist/files/dm-sans-latin-700-normal.woff2 +0 -0
  326. package/dist/files/dm-sans-latin-ext-400-normal.woff +0 -0
  327. package/dist/files/dm-sans-latin-ext-400-normal.woff2 +0 -0
  328. package/dist/files/dm-sans-latin-ext-500-normal.woff +0 -0
  329. package/dist/files/dm-sans-latin-ext-500-normal.woff2 +0 -0
  330. package/dist/files/dm-sans-latin-ext-600-normal.woff +0 -0
  331. package/dist/files/dm-sans-latin-ext-600-normal.woff2 +0 -0
  332. package/dist/files/dm-sans-latin-ext-700-normal.woff +0 -0
  333. package/dist/files/dm-sans-latin-ext-700-normal.woff2 +0 -0
  334. package/dist/hooks/useAppearanceBootstrap.d.ts.map +1 -1
  335. package/dist/hooks/useAppearanceBootstrap.js +9 -3
  336. package/dist/hooks/useAppearanceBootstrap.js.map +1 -1
  337. package/dist/index.d.ts +15 -0
  338. package/dist/index.d.ts.map +1 -1
  339. package/dist/index.js +8 -0
  340. package/dist/index.js.map +1 -1
  341. package/dist/layout/Header.d.ts +14 -5
  342. package/dist/layout/Header.d.ts.map +1 -1
  343. package/dist/layout/Header.js +78 -13
  344. package/dist/layout/Header.js.map +1 -1
  345. package/dist/layout/Layout.d.ts +5 -3
  346. package/dist/layout/Layout.d.ts.map +1 -1
  347. package/dist/layout/Layout.js +45 -54
  348. package/dist/layout/Layout.js.map +1 -1
  349. package/dist/layout/MobileTabBar.d.ts +20 -0
  350. package/dist/layout/MobileTabBar.d.ts.map +1 -0
  351. package/dist/layout/MobileTabBar.js +29 -0
  352. package/dist/layout/MobileTabBar.js.map +1 -0
  353. package/dist/layout/Sidebar.d.ts +8 -26
  354. package/dist/layout/Sidebar.d.ts.map +1 -1
  355. package/dist/layout/Sidebar.js +309 -345
  356. package/dist/layout/Sidebar.js.map +1 -1
  357. package/dist/layout/nav-config.d.ts +101 -0
  358. package/dist/layout/nav-config.d.ts.map +1 -0
  359. package/dist/layout/nav-config.js +297 -0
  360. package/dist/layout/nav-config.js.map +1 -0
  361. package/dist/layout/primitives/AdminShell.d.ts +10 -2
  362. package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
  363. package/dist/layout/primitives/AdminShell.js +114 -6
  364. package/dist/layout/primitives/AdminShell.js.map +1 -1
  365. package/dist/layout/topbar-classes.d.ts +8 -0
  366. package/dist/layout/topbar-classes.d.ts.map +1 -0
  367. package/dist/layout/topbar-classes.js +8 -0
  368. package/dist/layout/topbar-classes.js.map +1 -0
  369. package/dist/layout/use-nav-items.d.ts +10 -0
  370. package/dist/layout/use-nav-items.d.ts.map +1 -0
  371. package/dist/layout/use-nav-items.js +39 -0
  372. package/dist/layout/use-nav-items.js.map +1 -0
  373. package/dist/lib/api.d.ts +8 -0
  374. package/dist/lib/api.d.ts.map +1 -1
  375. package/dist/lib/api.js +8 -1
  376. package/dist/lib/api.js.map +1 -1
  377. package/dist/lib/appearance-api.d.ts +3 -1
  378. package/dist/lib/appearance-api.d.ts.map +1 -1
  379. package/dist/lib/appearance-api.js +1 -0
  380. package/dist/lib/appearance-api.js.map +1 -1
  381. package/dist/lib/batch-wizard.d.ts +84 -0
  382. package/dist/lib/batch-wizard.d.ts.map +1 -0
  383. package/dist/lib/batch-wizard.js +122 -0
  384. package/dist/lib/batch-wizard.js.map +1 -0
  385. package/dist/lib/chrome-service.d.ts +69 -0
  386. package/dist/lib/chrome-service.d.ts.map +1 -0
  387. package/dist/lib/chrome-service.js +108 -0
  388. package/dist/lib/chrome-service.js.map +1 -0
  389. package/dist/lib/job-drawer.d.ts +128 -0
  390. package/dist/lib/job-drawer.d.ts.map +1 -0
  391. package/dist/lib/job-drawer.js +351 -0
  392. package/dist/lib/job-drawer.js.map +1 -0
  393. package/dist/lib/job-view.d.ts +230 -0
  394. package/dist/lib/job-view.d.ts.map +1 -0
  395. package/dist/lib/job-view.js +419 -0
  396. package/dist/lib/job-view.js.map +1 -0
  397. package/dist/lib/jobs-service.d.ts +152 -0
  398. package/dist/lib/jobs-service.d.ts.map +1 -0
  399. package/dist/lib/jobs-service.js +220 -0
  400. package/dist/lib/jobs-service.js.map +1 -0
  401. package/dist/lib/sheet-focus.d.ts +24 -0
  402. package/dist/lib/sheet-focus.d.ts.map +1 -0
  403. package/dist/lib/sheet-focus.js +61 -0
  404. package/dist/lib/sheet-focus.js.map +1 -0
  405. package/dist/lib/tiers.d.ts +30 -0
  406. package/dist/lib/tiers.d.ts.map +1 -0
  407. package/dist/lib/tiers.js +43 -0
  408. package/dist/lib/tiers.js.map +1 -0
  409. package/dist/prenta-admin.css +1 -1
  410. package/dist/router/admin-routes.d.ts.map +1 -1
  411. package/dist/router/admin-routes.js +8 -0
  412. package/dist/router/admin-routes.js.map +1 -1
  413. package/dist/router/index.d.ts +5 -1
  414. package/dist/router/index.d.ts.map +1 -1
  415. package/dist/router/index.js +7 -0
  416. package/dist/router/index.js.map +1 -1
  417. package/dist/views/ApiKeys.js +2 -2
  418. package/dist/views/ApiKeys.js.map +1 -1
  419. package/dist/views/AppearanceChrome.d.ts +24 -0
  420. package/dist/views/AppearanceChrome.d.ts.map +1 -0
  421. package/dist/views/AppearanceChrome.js +461 -0
  422. package/dist/views/AppearanceChrome.js.map +1 -0
  423. package/dist/views/CollectionList.d.ts.map +1 -1
  424. package/dist/views/CollectionList.js +73 -53
  425. package/dist/views/CollectionList.js.map +1 -1
  426. package/dist/views/Dashboard.d.ts.map +1 -1
  427. package/dist/views/Dashboard.js +14 -8
  428. package/dist/views/Dashboard.js.map +1 -1
  429. package/dist/views/DocumentEdit.d.ts +6 -1
  430. package/dist/views/DocumentEdit.d.ts.map +1 -1
  431. package/dist/views/DocumentEdit.js +44 -8
  432. package/dist/views/DocumentEdit.js.map +1 -1
  433. package/dist/views/FormDeliveries.d.ts.map +1 -1
  434. package/dist/views/FormDeliveries.js +7 -1
  435. package/dist/views/FormDeliveries.js.map +1 -1
  436. package/dist/views/FormEntries.d.ts.map +1 -1
  437. package/dist/views/FormEntries.js +11 -2
  438. package/dist/views/FormEntries.js.map +1 -1
  439. package/dist/views/FormSubmissions.d.ts +1 -1
  440. package/dist/views/FormSubmissions.d.ts.map +1 -1
  441. package/dist/views/FormSubmissions.js +15 -4
  442. package/dist/views/FormSubmissions.js.map +1 -1
  443. package/dist/views/Forms.d.ts.map +1 -1
  444. package/dist/views/Forms.js +6 -4
  445. package/dist/views/Forms.js.map +1 -1
  446. package/dist/views/FormsSettings.d.ts +2 -0
  447. package/dist/views/FormsSettings.d.ts.map +1 -0
  448. package/dist/views/FormsSettings.js +37 -0
  449. package/dist/views/FormsSettings.js.map +1 -0
  450. package/dist/views/Jobs/BusyButton.d.ts +15 -0
  451. package/dist/views/Jobs/BusyButton.d.ts.map +1 -0
  452. package/dist/views/Jobs/BusyButton.js +26 -0
  453. package/dist/views/Jobs/BusyButton.js.map +1 -0
  454. package/dist/views/Jobs/CancelJobDialog.d.ts +27 -0
  455. package/dist/views/Jobs/CancelJobDialog.d.ts.map +1 -0
  456. package/dist/views/Jobs/CancelJobDialog.js +76 -0
  457. package/dist/views/Jobs/CancelJobDialog.js.map +1 -0
  458. package/dist/views/Jobs/DrawerActivity.d.ts +16 -0
  459. package/dist/views/Jobs/DrawerActivity.d.ts.map +1 -0
  460. package/dist/views/Jobs/DrawerActivity.js +59 -0
  461. package/dist/views/Jobs/DrawerActivity.js.map +1 -0
  462. package/dist/views/Jobs/DrawerOverview.d.ts +28 -0
  463. package/dist/views/Jobs/DrawerOverview.d.ts.map +1 -0
  464. package/dist/views/Jobs/DrawerOverview.js +32 -0
  465. package/dist/views/Jobs/DrawerOverview.js.map +1 -0
  466. package/dist/views/Jobs/DrawerResults.d.ts +25 -0
  467. package/dist/views/Jobs/DrawerResults.d.ts.map +1 -0
  468. package/dist/views/Jobs/DrawerResults.js +50 -0
  469. package/dist/views/Jobs/DrawerResults.js.map +1 -0
  470. package/dist/views/Jobs/DrawerReview.d.ts +51 -0
  471. package/dist/views/Jobs/DrawerReview.d.ts.map +1 -0
  472. package/dist/views/Jobs/DrawerReview.js +110 -0
  473. package/dist/views/Jobs/DrawerReview.js.map +1 -0
  474. package/dist/views/Jobs/JobDrawer.d.ts +51 -0
  475. package/dist/views/Jobs/JobDrawer.d.ts.map +1 -0
  476. package/dist/views/Jobs/JobDrawer.js +378 -0
  477. package/dist/views/Jobs/JobDrawer.js.map +1 -0
  478. package/dist/views/Jobs/JobsTable.d.ts +21 -0
  479. package/dist/views/Jobs/JobsTable.d.ts.map +1 -0
  480. package/dist/views/Jobs/JobsTable.js +81 -0
  481. package/dist/views/Jobs/JobsTable.js.map +1 -0
  482. package/dist/views/Jobs/NewBatchJob.d.ts +34 -0
  483. package/dist/views/Jobs/NewBatchJob.d.ts.map +1 -0
  484. package/dist/views/Jobs/NewBatchJob.js +282 -0
  485. package/dist/views/Jobs/NewBatchJob.js.map +1 -0
  486. package/dist/views/Jobs/WorkerStrip.d.ts +24 -0
  487. package/dist/views/Jobs/WorkerStrip.d.ts.map +1 -0
  488. package/dist/views/Jobs/WorkerStrip.js +63 -0
  489. package/dist/views/Jobs/WorkerStrip.js.map +1 -0
  490. package/dist/views/Jobs/atoms.d.ts +19 -0
  491. package/dist/views/Jobs/atoms.d.ts.map +1 -0
  492. package/dist/views/Jobs/atoms.js +52 -0
  493. package/dist/views/Jobs/atoms.js.map +1 -0
  494. package/dist/views/Jobs/focus.d.ts +29 -0
  495. package/dist/views/Jobs/focus.d.ts.map +1 -0
  496. package/dist/views/Jobs/focus.js +64 -0
  497. package/dist/views/Jobs/focus.js.map +1 -0
  498. package/dist/views/Jobs/icons.d.ts +22 -0
  499. package/dist/views/Jobs/icons.d.ts.map +1 -0
  500. package/dist/views/Jobs/icons.js +23 -0
  501. package/dist/views/Jobs/icons.js.map +1 -0
  502. package/dist/views/Jobs/useJobDetail.d.ts +21 -0
  503. package/dist/views/Jobs/useJobDetail.d.ts.map +1 -0
  504. package/dist/views/Jobs/useJobDetail.js +39 -0
  505. package/dist/views/Jobs/useJobDetail.js.map +1 -0
  506. package/dist/views/Jobs/useJobsFeed.d.ts +35 -0
  507. package/dist/views/Jobs/useJobsFeed.d.ts.map +1 -0
  508. package/dist/views/Jobs/useJobsFeed.js +231 -0
  509. package/dist/views/Jobs/useJobsFeed.js.map +1 -0
  510. package/dist/views/Jobs/useReviewItems.d.ts +39 -0
  511. package/dist/views/Jobs/useReviewItems.d.ts.map +1 -0
  512. package/dist/views/Jobs/useReviewItems.js +140 -0
  513. package/dist/views/Jobs/useReviewItems.js.map +1 -0
  514. package/dist/views/Jobs.d.ts +19 -1
  515. package/dist/views/Jobs.d.ts.map +1 -1
  516. package/dist/views/Jobs.js +204 -35
  517. package/dist/views/Jobs.js.map +1 -1
  518. package/dist/views/MediaBrowser.d.ts.map +1 -1
  519. package/dist/views/MediaBrowser.js +37 -9
  520. package/dist/views/MediaBrowser.js.map +1 -1
  521. package/dist/views/Pages/PagesListView.d.ts +1 -1
  522. package/dist/views/Pages/PagesListView.d.ts.map +1 -1
  523. package/dist/views/Pages/PagesListView.js +34 -5
  524. package/dist/views/Pages/PagesListView.js.map +1 -1
  525. package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -1
  526. package/dist/views/Posts/NewPostTypeInstructions.js +12 -2
  527. package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -1
  528. package/dist/views/Posts/PostTypesView.d.ts.map +1 -1
  529. package/dist/views/Posts/PostTypesView.js +10 -1
  530. package/dist/views/Posts/PostTypesView.js.map +1 -1
  531. package/dist/views/Posts/PostsListView.d.ts +1 -2
  532. package/dist/views/Posts/PostsListView.d.ts.map +1 -1
  533. package/dist/views/Posts/PostsListView.js +31 -3
  534. package/dist/views/Posts/PostsListView.js.map +1 -1
  535. package/dist/views/SEO.d.ts.map +1 -1
  536. package/dist/views/SEO.js +3 -3
  537. package/dist/views/SEO.js.map +1 -1
  538. package/dist/views/ScriptTags.d.ts.map +1 -1
  539. package/dist/views/ScriptTags.js +20 -15
  540. package/dist/views/ScriptTags.js.map +1 -1
  541. package/dist/views/Settings.d.ts.map +1 -1
  542. package/dist/views/Settings.js +115 -51
  543. package/dist/views/Settings.js.map +1 -1
  544. package/dist/views/SpamFolder.d.ts +2 -0
  545. package/dist/views/SpamFolder.d.ts.map +1 -0
  546. package/dist/views/SpamFolder.js +14 -0
  547. package/dist/views/SpamFolder.js.map +1 -0
  548. package/dist/views/Trash.d.ts +6 -1
  549. package/dist/views/Trash.d.ts.map +1 -1
  550. package/dist/views/Trash.js +7 -2
  551. package/dist/views/Trash.js.map +1 -1
  552. package/dist/views/Users.js +2 -2
  553. package/dist/views/Users.js.map +1 -1
  554. package/dist/views/WidgetsPlaceholder.d.ts +2 -0
  555. package/dist/views/WidgetsPlaceholder.d.ts.map +1 -0
  556. package/dist/views/WidgetsPlaceholder.js +15 -0
  557. package/dist/views/WidgetsPlaceholder.js.map +1 -0
  558. package/dist/views/dashboard/kpi-grid.d.ts +18 -0
  559. package/dist/views/dashboard/kpi-grid.d.ts.map +1 -0
  560. package/dist/views/dashboard/kpi-grid.js +36 -0
  561. package/dist/views/dashboard/kpi-grid.js.map +1 -0
  562. package/dist/views/header-footer/AnnouncementTab.d.ts +15 -0
  563. package/dist/views/header-footer/AnnouncementTab.d.ts.map +1 -0
  564. package/dist/views/header-footer/AnnouncementTab.js +43 -0
  565. package/dist/views/header-footer/AnnouncementTab.js.map +1 -0
  566. package/dist/views/header-footer/ChromeField.d.ts +25 -0
  567. package/dist/views/header-footer/ChromeField.d.ts.map +1 -0
  568. package/dist/views/header-footer/ChromeField.js +99 -0
  569. package/dist/views/header-footer/ChromeField.js.map +1 -0
  570. package/dist/views/header-footer/ChromePreview.d.ts +31 -0
  571. package/dist/views/header-footer/ChromePreview.d.ts.map +1 -0
  572. package/dist/views/header-footer/ChromePreview.js +195 -0
  573. package/dist/views/header-footer/ChromePreview.js.map +1 -0
  574. package/dist/views/header-footer/DeveloperTab.d.ts +17 -0
  575. package/dist/views/header-footer/DeveloperTab.d.ts.map +1 -0
  576. package/dist/views/header-footer/DeveloperTab.js +98 -0
  577. package/dist/views/header-footer/DeveloperTab.js.map +1 -0
  578. package/dist/views/header-footer/RegionTab.d.ts +27 -0
  579. package/dist/views/header-footer/RegionTab.d.ts.map +1 -0
  580. package/dist/views/header-footer/RegionTab.js +80 -0
  581. package/dist/views/header-footer/RegionTab.js.map +1 -0
  582. package/dist/views/header-footer/chrome-form.d.ts +137 -0
  583. package/dist/views/header-footer/chrome-form.d.ts.map +1 -0
  584. package/dist/views/header-footer/chrome-form.js +518 -0
  585. package/dist/views/header-footer/chrome-form.js.map +1 -0
  586. package/dist/views/header-footer/code-samples.d.ts +30 -0
  587. package/dist/views/header-footer/code-samples.d.ts.map +1 -0
  588. package/dist/views/header-footer/code-samples.js +127 -0
  589. package/dist/views/header-footer/code-samples.js.map +1 -0
  590. package/dist/views/header-footer/controls.d.ts +57 -0
  591. package/dist/views/header-footer/controls.d.ts.map +1 -0
  592. package/dist/views/header-footer/controls.js +43 -0
  593. package/dist/views/header-footer/controls.js.map +1 -0
  594. package/dist/views/lazy-views.d.ts +4 -0
  595. package/dist/views/lazy-views.d.ts.map +1 -1
  596. package/dist/views/lazy-views.js +4 -0
  597. package/dist/views/lazy-views.js.map +1 -1
  598. package/dist/views/page-editor/PageTab.js +1 -1
  599. package/dist/views/page-editor/PageTab.js.map +1 -1
  600. package/dist/views/page-editor/ReviewBar.js +1 -1
  601. package/dist/views/page-editor/ReviewBar.js.map +1 -1
  602. package/dist/views/page-editor/VersionHistoryPanel.js +1 -1
  603. package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -1
  604. package/dist/views/seo/AuditTab.js +1 -1
  605. package/dist/views/seo/AuditTab.js.map +1 -1
  606. package/dist/views/seo/OverviewTab.d.ts.map +1 -1
  607. package/dist/views/seo/OverviewTab.js +2 -2
  608. package/dist/views/seo/OverviewTab.js.map +1 -1
  609. package/dist/views/seo/ProposalsTab.js +1 -1
  610. package/dist/views/seo/ProposalsTab.js.map +1 -1
  611. package/dist/views/settings/AISettingsTab.d.ts.map +1 -1
  612. package/dist/views/settings/AISettingsTab.js +4 -2
  613. package/dist/views/settings/AISettingsTab.js.map +1 -1
  614. package/dist/views/settings/AccessProtectionCard.js +1 -1
  615. package/dist/views/settings/AccessProtectionCard.js.map +1 -1
  616. package/dist/views/settings/AdminThemeCard.d.ts.map +1 -1
  617. package/dist/views/settings/AdminThemeCard.js +63 -15
  618. package/dist/views/settings/AdminThemeCard.js.map +1 -1
  619. package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
  620. package/dist/views/settings/AppearanceTab.js +4 -2
  621. package/dist/views/settings/AppearanceTab.js.map +1 -1
  622. package/dist/views/settings/BrandPreviewCard.js +1 -1
  623. package/dist/views/settings/BrandPreviewCard.js.map +1 -1
  624. package/dist/views/settings/BrandVoiceCard.js +1 -1
  625. package/dist/views/settings/BrandVoiceCard.js.map +1 -1
  626. package/dist/views/settings/EmailSettingsTab.d.ts.map +1 -1
  627. package/dist/views/settings/EmailSettingsTab.js +5 -3
  628. package/dist/views/settings/EmailSettingsTab.js.map +1 -1
  629. package/dist/views/settings/GeneralSettingsTab.d.ts.map +1 -1
  630. package/dist/views/settings/GeneralSettingsTab.js +4 -2
  631. package/dist/views/settings/GeneralSettingsTab.js.map +1 -1
  632. package/dist/views/settings/ProviderConnectionCard.js +1 -1
  633. package/dist/views/settings/ProviderConnectionCard.js.map +1 -1
  634. package/dist/views/settings/SearchDataCard.js +1 -1
  635. package/dist/views/settings/SearchDataCard.js.map +1 -1
  636. package/dist/views/settings/SecurityStatusCard.js +2 -2
  637. package/dist/views/settings/SecurityStatusCard.js.map +1 -1
  638. package/dist/views/settings/SecurityTab.d.ts.map +1 -1
  639. package/dist/views/settings/SecurityTab.js +4 -2
  640. package/dist/views/settings/SecurityTab.js.map +1 -1
  641. package/dist/views/settings/SeoAutopilotCard.js +2 -2
  642. package/dist/views/settings/SeoAutopilotCard.js.map +1 -1
  643. package/dist/views/settings/SeoSettingsTab.d.ts.map +1 -1
  644. package/dist/views/settings/SeoSettingsTab.js +5 -3
  645. package/dist/views/settings/SeoSettingsTab.js.map +1 -1
  646. package/dist/views/settings/SiteIndexStatusCard.js +1 -1
  647. package/dist/views/settings/SiteIndexStatusCard.js.map +1 -1
  648. package/dist/views/settings/SiteThemeCard.js +1 -1
  649. package/dist/views/settings/UpdatesTab.d.ts.map +1 -1
  650. package/dist/views/settings/UpdatesTab.js +6 -5
  651. package/dist/views/settings/UpdatesTab.js.map +1 -1
  652. package/dist/views/settings/components.d.ts +7 -11
  653. package/dist/views/settings/components.d.ts.map +1 -1
  654. package/dist/views/settings/components.js +18 -12
  655. package/dist/views/settings/components.js.map +1 -1
  656. package/dist/views/settings/useAppearanceSettings.d.ts +7 -1
  657. package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
  658. package/dist/views/settings/useAppearanceSettings.js +89 -22
  659. package/dist/views/settings/useAppearanceSettings.js.map +1 -1
  660. package/dist/views/users/UserDetailDrawer.js +1 -1
  661. package/dist/views/users/UserDetailDrawer.js.map +1 -1
  662. package/package.json +10 -8
  663. package/src/AdminRoot.tsx +103 -31
  664. package/src/LoginRoot.tsx +2 -1
  665. package/src/__tests__/components/author-avatar.test.tsx +3 -20
  666. package/src/__tests__/components/notification-bell.test.tsx +146 -14
  667. package/src/__tests__/components/responsive-tiers.render.test.tsx +461 -0
  668. package/src/__tests__/components/serp-preview.render.test.tsx +6 -3
  669. package/src/__tests__/components/shell-primitives.render.test.tsx +951 -0
  670. package/src/__tests__/components/theme-provider-accent.test.tsx +83 -8
  671. package/src/__tests__/components/toggle.test.tsx +11 -3
  672. package/src/__tests__/components/ui-primitives.test.tsx +5 -8
  673. package/src/__tests__/layout/build-nav-items.test.ts +1 -1
  674. package/src/__tests__/layout/shell-nav.render.test.tsx +983 -0
  675. package/src/__tests__/layout/sidebar-forms-submenu.render.test.tsx +8 -4
  676. package/src/__tests__/layout/sidebar-groups.render.test.tsx +116 -0
  677. package/src/__tests__/layout/sidebar-menus.render.test.tsx +116 -0
  678. package/src/__tests__/layout/sidebar-plugin-nav.test.ts +1 -1
  679. package/src/__tests__/layout/sidebar-posts.test.ts +48 -40
  680. package/src/__tests__/layout/sidebar-submenu.render.test.tsx +35 -10
  681. package/src/__tests__/layout/topbar.render.test.tsx +464 -0
  682. package/src/__tests__/lib/api.test.ts +2 -0
  683. package/src/__tests__/lib/batch-wizard.test.ts +199 -0
  684. package/src/__tests__/lib/job-drawer.test.ts +495 -0
  685. package/src/__tests__/lib/job-view.test.ts +558 -0
  686. package/src/__tests__/lib/jobs-service.test.ts +167 -0
  687. package/src/__tests__/router/admin-route-order.test.ts +39 -0
  688. package/src/__tests__/styles/ai-gradient-contrast.test.ts +135 -0
  689. package/src/__tests__/styles/breakpoint-order.test.ts +68 -0
  690. package/src/__tests__/styles/responsive-layer.test.ts +367 -12
  691. package/src/__tests__/styles/tailwind-preset.test.ts +154 -0
  692. package/src/__tests__/styles/theme-token-scope.test.ts +10 -3
  693. package/src/__tests__/styles/tiers.test.ts +136 -0
  694. package/src/__tests__/styles/tokens-drift.test.ts +67 -6
  695. package/src/__tests__/views/admin-lazy-route.render.test.tsx +41 -1
  696. package/src/__tests__/views/ai-settings.render.test.tsx +4 -4
  697. package/src/__tests__/views/appearance-chrome.render.test.tsx +818 -0
  698. package/src/__tests__/views/appearance-menus-route.render.test.tsx +58 -0
  699. package/src/__tests__/views/appearance-settings.render.test.tsx +10 -8
  700. package/src/__tests__/views/appearance-theme-provider.render.test.tsx +347 -0
  701. package/src/__tests__/views/dashboard.test.tsx +48 -0
  702. package/src/__tests__/views/document-edit-navigation.render.test.tsx +130 -0
  703. package/src/__tests__/views/document-edit-routes.render.test.tsx +130 -0
  704. package/src/__tests__/views/email-settings.render.test.tsx +2 -2
  705. package/src/__tests__/views/form-entries.render.test.tsx +22 -0
  706. package/src/__tests__/views/form-submissions.render.test.tsx +22 -0
  707. package/src/__tests__/views/forms-list.render.test.tsx +13 -0
  708. package/src/__tests__/views/general-settings.render.test.tsx +38 -11
  709. package/src/__tests__/views/header-footer-form.test.ts +333 -0
  710. package/src/__tests__/views/jobs-drawer.render.test.tsx +1553 -0
  711. package/src/__tests__/views/jobs-list.render.test.tsx +853 -0
  712. package/src/__tests__/views/jobs-wizard.render.test.tsx +707 -0
  713. package/src/__tests__/views/kpi-grid.test.ts +29 -0
  714. package/src/__tests__/views/post-section-editor.test.tsx +5 -1
  715. package/src/__tests__/views/script-tags.render.test.tsx +29 -0
  716. package/src/__tests__/views/security-settings.render.test.tsx +9 -10
  717. package/src/__tests__/views/seo-settings.render.test.tsx +7 -9
  718. package/src/__tests__/views/settings-save-bar.render.test.tsx +91 -0
  719. package/src/__tests__/views/settings-save-footer.render.test.tsx +25 -15
  720. package/src/__tests__/views/settings-tabs.render.test.tsx +371 -0
  721. package/src/__tests__/views/updates-tab.render.test.tsx +4 -3
  722. package/src/components/Breadcrumbs.tsx +7 -1
  723. package/src/components/CommandPalette.tsx +51 -3
  724. package/src/components/LocaleSwitcher.tsx +5 -6
  725. package/src/components/NotificationBell.tsx +74 -18
  726. package/src/components/OfflineStatus.tsx +1 -1
  727. package/src/components/PresenceIndicator.tsx +2 -1
  728. package/src/components/ReflowMeter.tsx +3 -3
  729. package/src/components/SEOPanel.tsx +2 -2
  730. package/src/components/ThemeProvider.tsx +122 -42
  731. package/src/components/TipTapEditor.tsx +3 -4
  732. package/src/components/forms/EmbedPanel.tsx +1 -1
  733. package/src/components/forms/FormEntryDetailPane.tsx +7 -1
  734. package/src/components/forms/ShortcodeGlossary.tsx +7 -1
  735. package/src/components/forms/primitives.tsx +37 -21
  736. package/src/components/pages/tag-badges.tsx +4 -3
  737. package/src/components/seo/PageAuditPanel.tsx +2 -2
  738. package/src/components/seo/SerpPreview.tsx +5 -5
  739. package/src/components/seo/primitives.tsx +2 -2
  740. package/src/components/ui/AuthorAvatar.tsx +11 -10
  741. package/src/components/ui/Badge.tsx +1 -1
  742. package/src/components/ui/Breadcrumb.tsx +109 -0
  743. package/src/components/ui/Button.tsx +40 -15
  744. package/src/components/ui/Card.tsx +35 -32
  745. package/src/components/ui/CardListControls.tsx +90 -0
  746. package/src/components/ui/CountChip.tsx +90 -0
  747. package/src/components/ui/FilterPill.tsx +5 -3
  748. package/src/components/ui/InspectorPane.tsx +21 -7
  749. package/src/components/ui/Modal.tsx +20 -6
  750. package/src/components/ui/PageHeader.tsx +63 -0
  751. package/src/components/ui/RowActions.tsx +7 -2
  752. package/src/components/ui/Segmented.tsx +97 -0
  753. package/src/components/ui/Toaster.tsx +139 -0
  754. package/src/components/ui/Toggle.tsx +18 -14
  755. package/src/components/ui/UnderlineTabs.tsx +373 -0
  756. package/src/components/ui/UnsavedBar.tsx +119 -0
  757. package/src/components/ui/admin-links.tsx +20 -0
  758. package/src/components/ui/card-table.ts +34 -0
  759. package/src/components/virtual-window.tsx +13 -2
  760. package/src/fields/RelationshipField.tsx +1 -1
  761. package/src/hooks/useAppearanceBootstrap.ts +9 -3
  762. package/src/index.ts +19 -0
  763. package/src/layout/Header.tsx +210 -135
  764. package/src/layout/Layout.tsx +61 -108
  765. package/src/layout/MobileTabBar.tsx +92 -0
  766. package/src/layout/Sidebar.tsx +555 -593
  767. package/src/layout/nav-config.tsx +425 -0
  768. package/src/layout/primitives/AdminShell.tsx +154 -6
  769. package/src/layout/topbar-classes.ts +8 -0
  770. package/src/layout/use-nav-items.ts +40 -0
  771. package/src/lib/api.ts +18 -1
  772. package/src/lib/appearance-api.ts +4 -0
  773. package/src/lib/batch-wizard.ts +188 -0
  774. package/src/lib/chrome-service.ts +200 -0
  775. package/src/lib/job-drawer.ts +424 -0
  776. package/src/lib/job-view.ts +550 -0
  777. package/src/lib/jobs-service.ts +345 -0
  778. package/src/lib/sheet-focus.ts +71 -0
  779. package/src/lib/tiers.ts +43 -0
  780. package/src/router/admin-routes.ts +8 -0
  781. package/src/router/index.ts +9 -1
  782. package/src/styles/prenta-tokens.css +280 -82
  783. package/src/styles/responsive.css +460 -22
  784. package/src/styles/theme.css +192 -28
  785. package/src/views/ApiKeys.tsx +2 -2
  786. package/src/views/AppearanceChrome.tsx +732 -0
  787. package/src/views/CollectionList.tsx +264 -205
  788. package/src/views/Dashboard.tsx +26 -13
  789. package/src/views/DocumentEdit.tsx +111 -56
  790. package/src/views/FormDeliveries.tsx +30 -17
  791. package/src/views/FormEntries.tsx +28 -20
  792. package/src/views/FormSubmissions.tsx +32 -34
  793. package/src/views/Forms.tsx +55 -34
  794. package/src/views/FormsSettings.tsx +94 -0
  795. package/src/views/Jobs/BusyButton.tsx +56 -0
  796. package/src/views/Jobs/CancelJobDialog.tsx +145 -0
  797. package/src/views/Jobs/DrawerActivity.tsx +142 -0
  798. package/src/views/Jobs/DrawerOverview.tsx +139 -0
  799. package/src/views/Jobs/DrawerResults.tsx +155 -0
  800. package/src/views/Jobs/DrawerReview.tsx +464 -0
  801. package/src/views/Jobs/JobDrawer.tsx +636 -0
  802. package/src/views/Jobs/JobsTable.tsx +267 -0
  803. package/src/views/Jobs/NewBatchJob.tsx +857 -0
  804. package/src/views/Jobs/WorkerStrip.tsx +149 -0
  805. package/src/views/Jobs/atoms.tsx +93 -0
  806. package/src/views/Jobs/focus.ts +67 -0
  807. package/src/views/Jobs/icons.tsx +111 -0
  808. package/src/views/Jobs/useJobDetail.ts +64 -0
  809. package/src/views/Jobs/useJobsFeed.ts +249 -0
  810. package/src/views/Jobs/useReviewItems.ts +187 -0
  811. package/src/views/Jobs.tsx +396 -105
  812. package/src/views/MediaBrowser.tsx +71 -21
  813. package/src/views/Pages/PagesListView.tsx +115 -39
  814. package/src/views/Posts/NewPostTypeInstructions.tsx +15 -10
  815. package/src/views/Posts/PostTypesView.tsx +28 -6
  816. package/src/views/Posts/PostsListView.tsx +130 -40
  817. package/src/views/SEO.tsx +23 -8
  818. package/src/views/ScriptTags.tsx +233 -153
  819. package/src/views/Settings.tsx +215 -256
  820. package/src/views/SpamFolder.tsx +32 -0
  821. package/src/views/Trash.tsx +12 -1
  822. package/src/views/Users.tsx +2 -2
  823. package/src/views/WidgetsPlaceholder.tsx +33 -0
  824. package/src/views/dashboard/kpi-grid.ts +38 -0
  825. package/src/views/header-footer/AnnouncementTab.tsx +231 -0
  826. package/src/views/header-footer/ChromeField.tsx +358 -0
  827. package/src/views/header-footer/ChromePreview.tsx +497 -0
  828. package/src/views/header-footer/DeveloperTab.tsx +331 -0
  829. package/src/views/header-footer/RegionTab.tsx +398 -0
  830. package/src/views/header-footer/chrome-form.ts +603 -0
  831. package/src/views/header-footer/code-samples.ts +146 -0
  832. package/src/views/header-footer/controls.tsx +166 -0
  833. package/src/views/lazy-views.tsx +12 -0
  834. package/src/views/page-editor/PageTab.tsx +2 -2
  835. package/src/views/page-editor/ReviewBar.tsx +1 -1
  836. package/src/views/page-editor/VersionHistoryPanel.tsx +1 -1
  837. package/src/views/seo/AuditTab.tsx +1 -1
  838. package/src/views/seo/OverviewTab.tsx +6 -5
  839. package/src/views/seo/ProposalsTab.tsx +1 -1
  840. package/src/views/settings/AISettingsTab.tsx +10 -6
  841. package/src/views/settings/AccessProtectionCard.tsx +1 -1
  842. package/src/views/settings/AdminThemeCard.tsx +228 -35
  843. package/src/views/settings/AppearanceTab.tsx +10 -6
  844. package/src/views/settings/BrandPreviewCard.tsx +1 -1
  845. package/src/views/settings/BrandVoiceCard.tsx +1 -1
  846. package/src/views/settings/EmailSettingsTab.tsx +11 -7
  847. package/src/views/settings/GeneralSettingsTab.tsx +10 -6
  848. package/src/views/settings/ProviderConnectionCard.tsx +1 -1
  849. package/src/views/settings/SearchDataCard.tsx +1 -1
  850. package/src/views/settings/SecurityStatusCard.tsx +2 -2
  851. package/src/views/settings/SecurityTab.tsx +10 -6
  852. package/src/views/settings/SeoAutopilotCard.tsx +2 -2
  853. package/src/views/settings/SeoSettingsTab.tsx +13 -9
  854. package/src/views/settings/SiteIndexStatusCard.tsx +1 -1
  855. package/src/views/settings/SiteThemeCard.tsx +1 -1
  856. package/src/views/settings/UpdatesTab.tsx +107 -101
  857. package/src/views/settings/components.tsx +26 -62
  858. package/src/views/settings/useAppearanceSettings.ts +116 -25
  859. package/src/views/users/UserDetailDrawer.tsx +1 -1
  860. package/dist/components/ui/StatPill.d.ts +0 -18
  861. package/dist/components/ui/StatPill.d.ts.map +0 -1
  862. package/dist/components/ui/StatPill.js +0 -5
  863. package/dist/components/ui/StatPill.js.map +0 -1
  864. package/src/components/ui/StatPill.tsx +0 -37
@@ -0,0 +1,378 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useRef, useState } from 'react';
4
+ import * as Dialog from '@radix-ui/react-dialog';
5
+ import { toast } from 'sonner';
6
+ import { Button } from '../../components/ui/Button.js';
7
+ import { UnderlineTabPanel, UnderlineTabs } from '../../components/ui/UnderlineTabs.js';
8
+ import { approveAllMessage, approveAllStoppedMessage, detailsJson, drawerTabs, } from '../../lib/job-drawer.js';
9
+ import { active, retryPoint, view } from '../../lib/job-view.js';
10
+ import { approveAllReviewItems, decideReviewItem, reviewConflict, } from '../../lib/jobs-service.js';
11
+ import { adminPortalContainer } from '../../lib/portal-container.js';
12
+ import { Pill, TypeTile } from './atoms.js';
13
+ import { BusyButton } from './BusyButton.js';
14
+ import { DrawerActivity } from './DrawerActivity.js';
15
+ import { DrawerOverview } from './DrawerOverview.js';
16
+ import { DrawerResults } from './DrawerResults.js';
17
+ import { DrawerReview } from './DrawerReview.js';
18
+ import { focusJobDrawer, focusJobRow, useReturnFocus } from './focus.js';
19
+ import { JobIcons } from './icons.js';
20
+ import { useJobDetail, useJobEvents } from './useJobDetail.js';
21
+ import { useReviewItems } from './useReviewItems.js';
22
+ const NO_COUNTS = { pending: 0, approved: 0, rejected: 0 };
23
+ /** Approve-all answers within 20 seconds; this many calls is the most one press makes. */
24
+ const APPROVE_ALL_ROUNDS = 10;
25
+ /** Decisions in a row refresh the list (for its review counts) once they pause. */
26
+ const RELOAD_DELAY_MS = 400;
27
+ /**
28
+ * After Review opens, "Approve all" waits this long before it acts, so the
29
+ * second click of a double-click, or a second Enter, on the button that
30
+ * opened Review doesn't approve changes nobody has seen.
31
+ */
32
+ const APPROVE_ALL_ARM_MS = 600;
33
+ /**
34
+ * Refusals of an edited approval that the server's approve-all leaves alone
35
+ * as well, so it can't put the AI's text in place of the edit: a published
36
+ * document's change without Publish (it skips those too), and a change that
37
+ * was decided elsewhere or is gone (no longer pending).
38
+ */
39
+ const SKIPPED_BY_APPROVE_ALL = new Set([
40
+ 'published',
41
+ 'decided',
42
+ 'gone',
43
+ ]);
44
+ function without(record, key) {
45
+ const next = { ...record };
46
+ delete next[key];
47
+ return next;
48
+ }
49
+ /** "Copy" on the last error. */
50
+ async function copyText(text) {
51
+ try {
52
+ await navigator.clipboard.writeText(text);
53
+ return true;
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ /**
60
+ * The job detail drawer (jobs-drawer.jsx, JOBS.md "Drawer"): 620px from the
61
+ * right, a full-screen sheet on mobile. Radix gives it `role="dialog"`,
62
+ * `aria-modal`, the focus trap, Esc and the backdrop close; focus goes back to
63
+ * the control that opened it, or to the job's row.
64
+ *
65
+ * It reads `GET /jobs/:id` (results, the full error) and, per tab, the
66
+ * events and the review changes, each again only when the list's copy of the
67
+ * job changes. The Review badge and footer use the job's own counts, never
68
+ * the number of changes loaded. The footer's Cancel job and retries (P-19)
69
+ * use the list's handlers, so they act and report the same way from here.
70
+ */
71
+ export function JobDrawer({ job, row, tab, now, worker, actions, retrying, notice, onCancel, onRetry, onClose, onReload, onNavigate, }) {
72
+ const batch = job.type === 'batch-ai';
73
+ const counts = job.review ?? NO_COUNTS;
74
+ const total = counts.pending + counts.approved + counts.rejected;
75
+ const payload = job.payload;
76
+ const onApprove = payload.onApprove === 'publish' ? 'publish' : 'draft';
77
+ const [current, setCurrent] = useState(() => tab && drawerTabs(job.type, true).some((entry) => entry.id === tab)
78
+ ? tab
79
+ : view(row).k === 'review'
80
+ ? 'review'
81
+ : 'overview');
82
+ const detail = useJobDetail(job.id, job.updatedAt);
83
+ const review = useReviewItems(job.id, {
84
+ enabled: batch,
85
+ watching: current === 'review',
86
+ version: `${job.updatedAt}|${total}`,
87
+ });
88
+ const canReview = batch && review.status !== 'denied';
89
+ const tabs = drawerTabs(job.type, canReview);
90
+ const shown = tabs.some((entry) => entry.id === current) ? current : 'overview';
91
+ const events = useJobEvents(job.id, job.updatedAt, shown === 'activity');
92
+ // The detail answers for one version of the job; a newer list copy wins until it's read again.
93
+ const fresh = detail.detail && detail.detail.updatedAt === job.updatedAt ? detail.detail : null;
94
+ const shownJob = fresh ?? job;
95
+ const staleLock = row.status === 'running' && row.state !== 'running';
96
+ const error = !row.error ? null : staleLock ? row.error : (fresh?.lastError ?? row.error);
97
+ const content = useRef(null);
98
+ const returnFocus = useReturnFocus(() => focusJobRow(job.id));
99
+ const [announcement, setAnnouncement] = useState({ text: '', n: 0 });
100
+ const announce = useCallback((text) => setAnnouncement((prev) => ({ text, n: prev.n + 1 })), []);
101
+ // The screen clears its notice when a drawer opens or closes, so one here is this drawer's.
102
+ useEffect(() => {
103
+ if (notice)
104
+ announce(notice.text);
105
+ }, [notice, announce]);
106
+ const [itemState, setItemState] = useState({});
107
+ const [drafts, setDrafts] = useState({});
108
+ /** Documents known to be published or not, from decisions; keyed by document id. */
109
+ const [published, setPublished] = useState({});
110
+ const [approvingAll, setApprovingAll] = useState(false);
111
+ const focusAfter = useRef(null);
112
+ /** Bumped so the focus effect runs for a move asked for after an await. */
113
+ const [, setFocusTick] = useState(0);
114
+ const afterApproveAll = useRef(false);
115
+ /** A footer retry was answered; its button may have gone with the failure. */
116
+ const afterRetry = useRef(false);
117
+ /** "Approve all" ignores activations before this time (`APPROVE_ALL_ARM_MS`). */
118
+ const approveAllFrom = useRef(0);
119
+ /** A key held on the footer button is repeating, and each repeat clicks it. */
120
+ const keyRepeating = useRef(false);
121
+ const reloadTimer = useRef(null);
122
+ const reloadList = useRef(onReload);
123
+ useEffect(() => {
124
+ reloadList.current = onReload;
125
+ }, [onReload]);
126
+ // Closing right after a decision still refreshes the list's counts.
127
+ useEffect(() => () => {
128
+ if (reloadTimer.current === null)
129
+ return;
130
+ window.clearTimeout(reloadTimer.current);
131
+ reloadTimer.current = null;
132
+ reloadList.current();
133
+ }, []);
134
+ const scheduleReload = useCallback(() => {
135
+ if (reloadTimer.current !== null)
136
+ window.clearTimeout(reloadTimer.current);
137
+ reloadTimer.current = window.setTimeout(() => {
138
+ reloadTimer.current = null;
139
+ reloadList.current();
140
+ }, RELOAD_DELAY_MS);
141
+ }, []);
142
+ const showTab = (next) => {
143
+ // A focus move waiting for a change on the old tab no longer applies.
144
+ focusAfter.current = null;
145
+ if (next === 'review')
146
+ approveAllFrom.current = Date.now() + APPROVE_ALL_ARM_MS;
147
+ setCurrent(next);
148
+ };
149
+ // However Review opens (its tab, a list's Review button), a click or Enter
150
+ // meant for what was there before can't approve everything in it.
151
+ useEffect(() => {
152
+ if (shown === 'review')
153
+ approveAllFrom.current = Date.now() + APPROVE_ALL_ARM_MS;
154
+ }, [shown]);
155
+ const moveFocus = (move) => {
156
+ focusAfter.current = move;
157
+ setFocusTick((tick) => tick + 1);
158
+ };
159
+ // After a decision, focus moves to the control that took the place of the
160
+ // one pressed: Undo after a decision, Approve after an undo. It moves only
161
+ // if focus is still where the action began, inside that change, or lost;
162
+ // someone who has moved on to another change keeps their place.
163
+ useEffect(() => {
164
+ const want = focusAfter.current;
165
+ if (!want)
166
+ return;
167
+ const root = content.current;
168
+ const id = typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(want.id) : want.id;
169
+ const card = root?.querySelector(`[data-review-item="${id}"]`) ?? null;
170
+ let target = card?.querySelector(`[data-review-focus="${want.target}"]`) ?? null;
171
+ if (!target && want.fallback) {
172
+ target = card ?? root?.querySelector('[role="tabpanel"]') ?? null;
173
+ }
174
+ if (!target)
175
+ return;
176
+ focusAfter.current = null;
177
+ const focused = document.activeElement;
178
+ const free = !focused ||
179
+ focused === document.body ||
180
+ focused === root ||
181
+ focused === want.from ||
182
+ (card?.contains(focused) ?? false);
183
+ if (!free)
184
+ return;
185
+ target.focus();
186
+ if (target instanceof HTMLTextAreaElement) {
187
+ target.setSelectionRange(target.value.length, target.value.length);
188
+ }
189
+ });
190
+ // A retry's button goes away with the failure it answered. Focus lost with
191
+ // it (Radix puts it on the dialog itself) moves to the panel, which now
192
+ // shows the job queued again.
193
+ useEffect(() => {
194
+ if (!afterRetry.current)
195
+ return;
196
+ afterRetry.current = false;
197
+ const focused = document.activeElement;
198
+ if (focused && focused !== document.body && focused !== content.current && focused.isConnected)
199
+ return;
200
+ focusJobDrawer();
201
+ });
202
+ async function retryHere(retryNow) {
203
+ await onRetry(retryNow);
204
+ afterRetry.current = true;
205
+ setFocusTick((tick) => tick + 1);
206
+ }
207
+ // When approve-all leaves nothing to review its button goes away; focus
208
+ // moves to the changes rather than staying on the dialog itself.
209
+ useEffect(() => {
210
+ if (!afterApproveAll.current || counts.pending > 0)
211
+ return;
212
+ afterApproveAll.current = false;
213
+ const timer = window.setTimeout(() => {
214
+ const focused = document.activeElement;
215
+ if (focused && focused !== document.body && focused !== content.current)
216
+ return;
217
+ content.current?.querySelector('[role="tabpanel"]')?.focus();
218
+ }, 0);
219
+ return () => window.clearTimeout(timer);
220
+ }, [counts.pending]);
221
+ const patchItem = (id, next) => setItemState((prev) => ({ ...prev, [id]: next }));
222
+ /**
223
+ * Approve, reject or undo one change, and say whether it went through.
224
+ * `quiet` (approve-all) neither moves focus nor announces: the summary does.
225
+ */
226
+ async function decide(item, decision, options = {}) {
227
+ const from = document.activeElement;
228
+ const title = item.documentTitle;
229
+ patchItem(item.id, { busy: decision.action });
230
+ const res = await decideReviewItem(job.id, item.id, decision);
231
+ if (!res.ok) {
232
+ const conflict = reviewConflict(res.status, res.error);
233
+ // Approving without Publish leaves a published document's change in review.
234
+ if (conflict === 'published')
235
+ setPublished((prev) => ({ ...prev, [item.documentId]: true }));
236
+ // A published document's change staying in review, and a change someone else
237
+ // decided (the re-read below shows how), aren't errors in what was pressed.
238
+ patchItem(item.id, {
239
+ note: {
240
+ tone: conflict === 'published' || conflict === 'decided' ? 'info' : 'err',
241
+ text: res.error,
242
+ },
243
+ });
244
+ // The card's note appears with its text, which screen readers don't
245
+ // read out; the drawer's live region does.
246
+ if (!options.quiet)
247
+ announce(`${title}: ${res.error}`);
248
+ // Someone else decided it, or it's gone: show the changes and counts as they are now.
249
+ if (conflict === 'decided' || conflict === 'gone') {
250
+ scheduleReload();
251
+ await review.refresh();
252
+ // Its buttons were replaced (by Undo) or it went: focus follows, or
253
+ // lands on the change itself, or on the panel.
254
+ if (!options.quiet)
255
+ moveFocus({ id: item.id, target: 'undo', from, fallback: true });
256
+ }
257
+ return { ok: false, conflict, error: res.error };
258
+ }
259
+ const { item: next, documentStatus, notice } = res.value;
260
+ if (documentStatus) {
261
+ setPublished((prev) => ({ ...prev, [item.documentId]: documentStatus === 'PUBLISHED' }));
262
+ }
263
+ review.replace(next);
264
+ if (decision.action === 'approve')
265
+ setDrafts((prev) => without(prev, item.id));
266
+ patchItem(item.id, notice ? { note: { tone: 'info', text: notice } } : {});
267
+ if (!options.quiet) {
268
+ moveFocus({ id: item.id, target: next.status === 'pending' ? 'approve' : 'undo', from });
269
+ const outcome = decision.action === 'undo'
270
+ ? `${title} is back in review.`
271
+ : next.status === 'approved'
272
+ ? `Approved: ${title}.`
273
+ : `Rejected: ${title}.`;
274
+ announce(notice ? `${outcome} ${notice}` : outcome);
275
+ }
276
+ scheduleReload();
277
+ return { ok: true };
278
+ }
279
+ async function approveAll() {
280
+ setApprovingAll(true);
281
+ let approved = 0;
282
+ // An edit still open is approved as edited, not with the AI's text: those
283
+ // go first, one by one, and one that's refused keeps its edit and note.
284
+ // The server's approve-all would then apply the AI's text to any of them
285
+ // still pending, so it doesn't run after a refusal it wouldn't skip too.
286
+ const refused = [];
287
+ let editAtRisk = false;
288
+ for (const entry of review.items) {
289
+ const draft = drafts[entry.id];
290
+ if (draft === undefined || entry.status !== 'pending')
291
+ continue;
292
+ const outcome = await decide(entry, { action: 'approve', after: draft }, { quiet: true });
293
+ if (outcome.ok) {
294
+ approved++;
295
+ continue;
296
+ }
297
+ refused.push(`${entry.documentTitle}: ${outcome.error}`);
298
+ if (!SKIPPED_BY_APPROVE_ALL.has(outcome.conflict))
299
+ editAtRisk = true;
300
+ }
301
+ if (editAtRisk) {
302
+ setApprovingAll(false);
303
+ reloadList.current();
304
+ const message = approveAllStoppedMessage(approved, refused.length);
305
+ toast.error(message.title, { description: message.description });
306
+ announce([`${message.title}.`, message.description, ...refused].join(' '));
307
+ return;
308
+ }
309
+ let remaining = Math.max(0, counts.pending - approved);
310
+ let failure = null;
311
+ for (let round = 0; round < APPROVE_ALL_ROUNDS; round++) {
312
+ const res = await approveAllReviewItems(job.id);
313
+ if (!res.ok) {
314
+ failure = res.error;
315
+ break;
316
+ }
317
+ approved += res.value.approved;
318
+ remaining = res.value.remaining;
319
+ // Only skipped changes are left: another call would skip them again.
320
+ if (res.value.remaining <= res.value.skipped)
321
+ break;
322
+ }
323
+ setApprovingAll(false);
324
+ // Its button goes away once the list reads 0 pending.
325
+ afterApproveAll.current = failure === null && remaining === 0;
326
+ review.refresh();
327
+ reloadList.current();
328
+ if (failure !== null && approved === 0) {
329
+ toast.error(`Changes weren’t approved: ${failure}`);
330
+ announce(`Changes weren’t approved: ${failure}`);
331
+ return;
332
+ }
333
+ const message = approveAllMessage({ approved, remaining }, onApprove);
334
+ toast(message.title, message.description ? { description: message.description } : undefined);
335
+ announce([`${message.title}.`, message.description, ...refused].filter(Boolean).join(' '));
336
+ }
337
+ const isPublished = useCallback((documentId) => published[documentId] ?? payload.statusFilter === 'published', [published, payload.statusFilter]);
338
+ const idBase = `job-drawer-${job.id}`;
339
+ const v = view(row);
340
+ return (_jsx(Dialog.Root, { open: true, onOpenChange: (open) => (open ? undefined : onClose()), children: _jsxs(Dialog.Portal, { container: adminPortalContainer(), children: [_jsx(Dialog.Overlay, { className: "bg-scrim-drawer fixed inset-0 z-[var(--z-drawer-scrim)]" }), _jsxs(Dialog.Content, { ...returnFocus, ref: content, "aria-modal": "true", "data-job-drawer": "", className: "bg-card border-bdr shadow-shd2 mobile:inset-0 mobile:w-full mobile:border-l-0 mobile:shadow-none fixed inset-y-0 right-0 z-[var(--z-drawer)] flex w-[min(var(--jobs-drawer-w),100vw)] flex-col border-l leading-[normal] outline-none", children: [_jsxs("div", { className: "border-bdr mobile:pt-[max(16px,env(safe-area-inset-top,0px))] flex flex-col gap-3 border-b px-[18px] pt-4", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx(TypeTile, { type: job.type, size: 36 }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(Dialog.Title, { className: "text-drawer text-txt m-0 leading-[normal] break-words", children: job.title }), _jsxs(Dialog.Description, { className: "text-meta text-faint m-0 mt-0.5 break-words", children: [job.scope, " \u00B7 ", _jsx("code", { className: "text-hint font-mono", children: job.id })] })] }), _jsx(Pill, { v: v }), _jsx(Dialog.Close, { asChild: true, children: _jsx(Button, { variant: "icon", size: "icon", "aria-label": "Close", children: _jsx(JobIcons.x, { size: 15 }) }) })] }), _jsx(UnderlineTabs, { variant: "drawer", tabs: tabs.map((entry) => ({
341
+ id: entry.id,
342
+ label: entry.label,
343
+ badge: entry.id === 'review' && counts.pending > 0 ? (_jsxs("b", { className: "rounded-pill bg-acc text-acc-on text-count px-1.5 font-bold", children: [counts.pending, _jsx("span", { className: "sr-only", children: " waiting" })] })) : undefined,
344
+ })), value: shown, onChange: (id) => showTab(id), label: "Job details", idBase: idBase })] }), _jsxs(UnderlineTabPanel, { idBase: idBase, tabId: shown, className: "flex min-h-0 flex-1 flex-col gap-3.5 overflow-auto px-[18px] pt-4 pb-6 *:shrink-0", children: [shown === 'overview' ? (_jsx(DrawerOverview, { row: row, job: shownJob, error: error, now: now, worker: worker, onCopyError: (text) => {
345
+ void copyText(text).then((copied) => {
346
+ if (copied)
347
+ toast('Error copied');
348
+ else
349
+ toast.error('Couldn’t copy the error. Select it and copy it instead.');
350
+ announce(copied ? 'Error copied' : 'Couldn’t copy the error.');
351
+ });
352
+ } })) : null, shown === 'review' ? (_jsx(DrawerReview, { review: review, counts: counts, running: active(row), cancelled: row.state === 'cancelled', onApprove: onApprove, itemState: itemState, drafts: drafts, isPublished: isPublished, locked: approvingAll, onDecide: (item, decision) => void decide(item, decision), onEdit: (item) => {
353
+ setDrafts((prev) => ({ ...prev, [item.id]: item.editedAfter ?? item.after }));
354
+ moveFocus({ id: item.id, target: 'text', from: document.activeElement });
355
+ }, onDraft: (id, text) => setDrafts((prev) => ({ ...prev, [id]: text })), onCancelEdit: (id) => {
356
+ setDrafts((prev) => without(prev, id));
357
+ moveFocus({ id, target: 'edit', from: document.activeElement });
358
+ } })) : null, shown === 'results' ? (_jsx(DrawerResults, { type: job.type, results: detail.detail?.results, loaded: detail.detail !== null, error: detail.error, summary: shownJob.summary, scanned: row.total, now: now, onNavigate: onNavigate })) : null, shown === 'activity' ? (_jsx(DrawerActivity, { events: events, job: shownJob, row: row, now: now })) : null, shown === 'details' ? (_jsxs(_Fragment, { children: [_jsx("p", { className: "text-meta text-sub m-0 leading-[1.5]", children: "The raw job row, for developers. Read only." }), _jsx("pre", { tabIndex: 0, "aria-label": "Job row as JSON", className: "bg-code-bg text-code-txt rounded-10 text-hint m-0 overflow-auto px-3.5 py-3 font-mono leading-[1.6] whitespace-pre", children: detailsJson(shownJob) })] })) : null] }, shown), _jsxs("div", { className: "border-bdr mobile:pb-[calc(12px+env(safe-area-inset-bottom,0px))] flex flex-wrap items-center gap-2 border-t px-[18px] py-3", children: [actions.cancel ? (_jsx(Button, { variant: "danger", "aria-haspopup": "dialog", leftIcon: _jsx(JobIcons.stop, { size: 12 }), onClick: onCancel, children: "Cancel job" })) : null, actions.retry ? (_jsxs(BusyButton, { leftIcon: _jsx(JobIcons.retry, { size: 13 }), busy: retrying, onClick: () => void retryHere(false), children: ["Retry from ", retryPoint(row)] })) : null, actions.retryNow ? (_jsx(BusyButton, { variant: "secondary", leftIcon: _jsx(JobIcons.retry, { size: 13 }), busy: retrying, onClick: () => void retryHere(true), children: "Retry now" })) : null, _jsx("span", { className: "flex-1" }), canReview && counts.pending > 0 ? (_jsx(BusyButton, { leftIcon: shown === 'review' ? _jsx(JobIcons.check, { size: 13 }) : undefined, busy: approvingAll, "aria-disabled": shown === 'review' && review.status !== 'ready' ? true : undefined, onKeyDown: (event) => {
359
+ keyRepeating.current = event.repeat;
360
+ }, onKeyUp: () => {
361
+ keyRepeating.current = false;
362
+ }, onBlur: () => {
363
+ keyRepeating.current = false;
364
+ }, onClick: () => {
365
+ if (shown !== 'review')
366
+ return showTab('review');
367
+ // Not on a held key's repeats, not right after this button
368
+ // opened Review, and not before the changes are on screen.
369
+ if (keyRepeating.current || Date.now() < approveAllFrom.current)
370
+ return;
371
+ if (review.status !== 'ready')
372
+ return;
373
+ void approveAll();
374
+ }, children: shown === 'review'
375
+ ? `Approve all ${counts.pending}`
376
+ : `Review ${counts.pending} change${counts.pending === 1 ? '' : 's'}` })) : null] }), _jsx("div", { role: "status", "aria-live": "polite", className: "sr-only", children: _jsx("span", { children: announcement.text }, announcement.n) })] })] }) }));
377
+ }
378
+ //# sourceMappingURL=JobDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobDrawer.js","sourceRoot":"","sources":["../../../src/views/Jobs/JobDrawer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type JobFilter, type JobRow as JobRowModel, type JobViewer } from '../../lib/job-view.js';
2
+ /** The drawer tab a control opens (jobs-drawer.jsx); null opens the default one. */
3
+ export type JobDrawerTab = 'overview' | 'review' | null;
4
+ export interface JobsTableProps {
5
+ rows: JobRowModel[];
6
+ filter: JobFilter;
7
+ selectedId: string | null;
8
+ /** The job whose retry request is out. */
9
+ retryingId: string | null;
10
+ /** Who's looking: Cancel and Retry show only to someone who may use them. */
11
+ viewer: JobViewer;
12
+ status: 'loading' | 'ready' | 'error';
13
+ error: string | null;
14
+ onOpen: (id: string, tab: JobDrawerTab) => void;
15
+ onCancel: (row: JobRowModel) => void;
16
+ onRetry: (row: JobRowModel) => void;
17
+ onReload: () => Promise<void>;
18
+ }
19
+ /** jobs-view.jsx table card: header, rows, and the footnote about other crons. */
20
+ export declare function JobsTable({ rows, filter, selectedId, retryingId, viewer, status, error, onOpen, onCancel, onRetry, onReload, }: JobsTableProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=JobsTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobsTable.d.ts","sourceRoot":"","sources":["../../../src/views/Jobs/JobsTable.tsx"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,MAAM,IAAI,WAAW,EAC1B,KAAK,SAAS,EACf,MAAM,uBAAuB,CAAA;AAM9B,oFAAoF;AACpF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAA;AA6IvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,EAAE,CAAA;IACnB,MAAM,EAAE,SAAS,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,6EAA6E;IAC7E,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAA;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;IAC/C,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAA;IACpC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAA;IACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9B;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,UAAU,EACV,UAAU,EACV,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,EAAE,cAAc,2CA4EhB"}
@@ -0,0 +1,81 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { Button } from '../../components/ui/Button.js';
5
+ import { Card } from '../../components/ui/Card.js';
6
+ import { Skeleton } from '../../components/ui/Skeleton.js';
7
+ import { hasReviewAction, jobActions, view, } from '../../lib/job-view.js';
8
+ import { Bar, Pill, TypeTile } from './atoms.js';
9
+ import { BusyButton } from './BusyButton.js';
10
+ import { focusJobsFallback, focusLost, jobOpenButtonId } from './focus.js';
11
+ import { JobIcons } from './icons.js';
12
+ /**
13
+ * `.jb-row` columns: Job, Status, Progress, Started by, actions. Every row is
14
+ * its own grid with fixed or fractional tracks, so no cell's content moves
15
+ * another. ≤1100px drops Started by; ≤768px stacks status beside the job and
16
+ * progress under both. The kit's ≤1100px actions track is 80px, too narrow
17
+ * for Review beside a 30px button, so it stays 96px (CONFLICTS.md §4).
18
+ */
19
+ const ROW_GRID = 'grid items-center gap-[14px] grid-cols-[minmax(240px,1.6fr)_minmax(150px,.9fr)_minmax(170px,1fr)_minmax(120px,.7fr)_96px] max-[1101px]:grid-cols-[minmax(0,1.6fr)_minmax(0,1fr)_minmax(0,1fr)_96px] mobile:grid-cols-[minmax(0,1fr)_auto] mobile:gap-y-2.5';
20
+ const WHO_CELL = 'max-[1101px]:hidden';
21
+ const PROGRESS_CELL = 'mobile:col-span-full';
22
+ const ACTIONS_CELL = 'mobile:hidden';
23
+ /** `.jb-row.hd`: column names for sighted users; each row reads on its own. */
24
+ function HeaderRow() {
25
+ return (_jsxs("div", { "aria-hidden": "true", className: `${ROW_GRID} text-micro text-faint mobile:hidden px-4 py-[9px] font-bold tracking-[.4px] uppercase`, children: [_jsx("span", { children: "Job" }), _jsx("span", { children: "Status" }), _jsx("span", { className: PROGRESS_CELL, children: "Progress" }), _jsx("span", { className: WHO_CELL, children: "Started by" }), _jsx("span", { className: ACTIONS_CELL })] }));
26
+ }
27
+ /**
28
+ * One job. The kit makes the whole row a `role="button"`; here the title is
29
+ * the button and its `::after` covers the row, so the Review, Cancel and Retry
30
+ * buttons aren't nested inside another control. They sit above that layer.
31
+ */
32
+ function JobRowItem({ j, selected, retrying, viewer, onOpen, onCancel, onRetry }) {
33
+ const v = view(j);
34
+ const statusId = `job-status-${j.id}`;
35
+ const review = hasReviewAction(j);
36
+ const actions = jobActions(j, viewer);
37
+ return (_jsxs("li", { className: `${ROW_GRID} border-bdr relative border-t px-4 py-3 ${selected ? 'bg-acc-l' : 'hover:bg-[color-mix(in_srgb,var(--acc-l)_45%,transparent)]'}`, children: [_jsxs("div", { className: "flex min-w-0 items-center gap-[11px]", children: [_jsx(TypeTile, { type: j.type }), _jsxs("div", { className: "min-w-0", children: [_jsx("button", { id: jobOpenButtonId(j.id), "data-job-open": "", type: "button", "aria-haspopup": "dialog", "aria-describedby": statusId, onClick: () => onOpen(j.id, null), className: "text-card-title text-txt block w-full cursor-pointer truncate border-0 bg-transparent p-0 text-left leading-[normal] font-semibold after:absolute after:inset-0 focus-visible:outline-none! focus-visible:after:outline-2 focus-visible:after:-outline-offset-2 focus-visible:after:outline-[var(--acc)] focus-visible:after:outline-solid", children: j.title }), _jsxs("div", { className: "text-meta text-faint mt-px truncate", children: [j.scope, " \u00B7 ", _jsx("code", { className: "text-hint font-mono", children: j.type })] })] })] }), _jsxs("div", { id: statusId, className: "flex min-w-0 flex-col items-start gap-[3px]", children: [_jsx(Pill, { v: v }), v.sub ? _jsx("small", { className: "text-hint text-sub whitespace-nowrap", children: v.sub }) : null] }), _jsx("div", { className: PROGRESS_CELL, children: _jsx(Bar, { j: j }) }), _jsxs("div", { className: `text-sm2 text-txt min-w-0 ${WHO_CELL}`, children: [j.by, _jsx("small", { className: "text-hint text-faint mt-px block", children: j.created })] }), _jsxs("div", { className: `relative z-10 flex justify-end gap-1 ${ACTIONS_CELL}`, children: [review ? (_jsx(Button, { variant: "secondary", size: "sm", "aria-label": `Review: ${j.title}`, onClick: () => onOpen(j.id, 'review'), children: "Review" })) : null, actions.cancel ? (_jsx(Button, { variant: "icon", size: "icon", "aria-label": `Cancel ${j.title}`, title: "Cancel", className: "hover:bg-err-l! hover:text-err!", onClick: () => onCancel(j), children: _jsx(JobIcons.stop, { size: 13 }) })) : null, actions.retry ? (_jsx(BusyButton, { variant: "icon", size: "icon", "aria-label": `Retry ${j.title}`, title: "Retry", busy: retrying, leftIcon: _jsx(JobIcons.retry, { size: 14 }), onClick: () => onRetry(j) })) : null, review ? null : (_jsx("span", { "aria-hidden": "true", className: "text-sub inline-flex size-[30px] shrink-0 items-center justify-center", children: _jsx(JobIcons.chev, { size: 14 }) }))] })] }));
38
+ }
39
+ const EMPTY_HINT = {
40
+ dead: 'Nothing has failed.',
41
+ review: 'Every AI change has been reviewed.',
42
+ };
43
+ /** jobs-view.jsx table card: header, rows, and the footnote about other crons. */
44
+ export function JobsTable({ rows, filter, selectedId, retryingId, viewer, status, error, onOpen, onCancel, onRetry, onReload, }) {
45
+ const [reloading, setReloading] = useState(false);
46
+ // Try again unmounts with the error once the list loads, so focus moves to
47
+ // the list. Only after Try again: a refresh that recovers on its own leaves
48
+ // focus alone.
49
+ const triedAgain = useRef(false);
50
+ useEffect(() => {
51
+ if (status === 'error')
52
+ return;
53
+ if (triedAgain.current && focusLost())
54
+ focusJobsFallback();
55
+ triedAgain.current = false;
56
+ }, [status]);
57
+ let body;
58
+ if (status === 'loading') {
59
+ body = _jsx(Skeleton, { variant: "table-row", lines: 4, className: "border-bdr border-t" });
60
+ }
61
+ else if (status === 'error') {
62
+ body = (_jsxs("div", { role: "alert", className: "text-body text-sub flex flex-col items-center gap-3 px-4 py-10 text-center", children: [_jsxs("p", { className: "m-0", children: ["Jobs couldn\u2019t be loaded. ", error] }), _jsx(BusyButton, { variant: "secondary", size: "sm", busy: reloading, onClick: async () => {
63
+ triedAgain.current = true;
64
+ setReloading(true);
65
+ try {
66
+ await onReload();
67
+ }
68
+ finally {
69
+ setReloading(false);
70
+ }
71
+ }, children: "Try again" })] }));
72
+ }
73
+ else if (rows.length === 0) {
74
+ body = (_jsx("p", { className: "text-body text-sub m-0 px-4 py-10 text-center", children: ['No jobs here.', EMPTY_HINT[filter]].filter(Boolean).join(' ') }));
75
+ }
76
+ else {
77
+ body = (_jsx("ul", { "aria-label": "Jobs", className: "m-0 list-none p-0", children: rows.map((j) => (_jsx(JobRowItem, { j: j, selected: selectedId === j.id, retrying: retryingId === j.id, viewer: viewer, onOpen: onOpen, onCancel: onCancel, onRetry: onRetry }, j.id))) }));
78
+ }
79
+ return (_jsxs(Card, { children: [_jsx(HeaderRow, {}), body, _jsx("div", { className: "border-bdr text-meta text-faint flex flex-wrap gap-2.5 border-t px-4 py-2.5", children: "Publishing, cleanup, search sync and SEO autopilot run on their own schedules and don\u2019t appear here." })] }));
80
+ }
81
+ //# sourceMappingURL=JobsTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobsTable.js","sourceRoot":"","sources":["../../../src/views/Jobs/JobsTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Job } from '@prenta/core';
2
+ import { type BatchOperation, type BatchSelection } from '../../lib/batch-wizard.js';
3
+ export interface NewBatchJobProps {
4
+ /** The signed-in user's role. Only OWNER and ADMIN may apply changes automatically. */
5
+ role?: string | null;
6
+ /** The CMS config; its page and post collections fill the Content select. */
7
+ config?: unknown;
8
+ /**
9
+ * Documents picked in a list (P-21's "Run with AI…"). Step 2 then shows
10
+ * "{n} selected", Content is locked to their source, and they run without
11
+ * the operation's "Only where" preset.
12
+ */
13
+ selection?: BatchSelection | null;
14
+ /** The operation to start on. Defaults to alt text for picked images, else meta descriptions. */
15
+ operation?: BatchOperation;
16
+ onClose: () => void;
17
+ /** The job the server queued. The wizard closes after this. */
18
+ onQueued: (job: Job) => void;
19
+ /**
20
+ * Where focus goes on close when the control that opened the wizard is
21
+ * gone, or after a job was queued (the Jobs list focuses its new row).
22
+ */
23
+ onFocusFallback?: (job: Job | null) => void;
24
+ }
25
+ /**
26
+ * The New batch AI job wizard (jobs-new.jsx, TRACKING P-20): what to change,
27
+ * which documents, then review and queue. A centred modal, 680px wide; a
28
+ * full-screen sheet on phones. The match count and sample come from
29
+ * `/jobs/batch-ai/estimate`, Try it from `/preview`, and Queue posts to
30
+ * `/jobs/batch-ai`. Radix traps focus and closes on Esc, except while the
31
+ * job is being queued.
32
+ */
33
+ export declare function NewBatchJob({ role, config, selection, operation: initialOperation, onClose, onQueued, onFocusFallback, }: NewBatchJobProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=NewBatchJob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewBatchJob.d.ts","sourceRoot":"","sources":["../../../src/views/Jobs/NewBatchJob.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAyD,GAAG,EAAE,MAAM,cAAc,CAAA;AAE9F,OAAO,EAiBL,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAA;AA4ClC,MAAM,WAAW,gBAAgB;IAC/B,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IACjC,iGAAiG;IACjG,SAAS,CAAC,EAAE,cAAc,CAAA;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;IAC5B;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,IAAI,CAAA;CAC5C;AA8CD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,SAAgB,EAChB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EACP,QAAQ,EACR,eAAe,GAChB,EAAE,gBAAgB,2CA+hBlB"}