@prenta/admin 2.6.0 → 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 (801) hide show
  1. package/CHANGELOG.md +104 -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/mcp-connect.render.test.js +1 -0
  143. package/dist/__tests__/views/mcp-connect.render.test.js.map +1 -1
  144. package/dist/__tests__/views/post-section-editor.test.js +3 -1
  145. package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
  146. package/dist/__tests__/views/script-tags.render.test.js +25 -0
  147. package/dist/__tests__/views/script-tags.render.test.js.map +1 -1
  148. package/dist/__tests__/views/security-settings.render.test.js +9 -8
  149. package/dist/__tests__/views/security-settings.render.test.js.map +1 -1
  150. package/dist/__tests__/views/seo-settings.render.test.js +7 -7
  151. package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
  152. package/dist/__tests__/views/settings-save-bar.render.test.d.ts +2 -0
  153. package/dist/__tests__/views/settings-save-bar.render.test.d.ts.map +1 -0
  154. package/dist/__tests__/views/settings-save-bar.render.test.js +68 -0
  155. package/dist/__tests__/views/settings-save-bar.render.test.js.map +1 -0
  156. package/dist/__tests__/views/settings-save-footer.render.test.js +23 -15
  157. package/dist/__tests__/views/settings-save-footer.render.test.js.map +1 -1
  158. package/dist/__tests__/views/settings-tabs.render.test.d.ts +2 -0
  159. package/dist/__tests__/views/settings-tabs.render.test.d.ts.map +1 -0
  160. package/dist/__tests__/views/settings-tabs.render.test.js +319 -0
  161. package/dist/__tests__/views/settings-tabs.render.test.js.map +1 -0
  162. package/dist/__tests__/views/updates-tab.render.test.js +4 -3
  163. package/dist/__tests__/views/updates-tab.render.test.js.map +1 -1
  164. package/dist/components/Breadcrumbs.d.ts +8 -1
  165. package/dist/components/Breadcrumbs.d.ts.map +1 -1
  166. package/dist/components/Breadcrumbs.js +6 -0
  167. package/dist/components/Breadcrumbs.js.map +1 -1
  168. package/dist/components/CommandPalette.d.ts.map +1 -1
  169. package/dist/components/CommandPalette.js +40 -4
  170. package/dist/components/CommandPalette.js.map +1 -1
  171. package/dist/components/LocaleSwitcher.d.ts.map +1 -1
  172. package/dist/components/LocaleSwitcher.js +1 -1
  173. package/dist/components/LocaleSwitcher.js.map +1 -1
  174. package/dist/components/NotificationBell.d.ts.map +1 -1
  175. package/dist/components/NotificationBell.js +44 -3
  176. package/dist/components/NotificationBell.js.map +1 -1
  177. package/dist/components/OfflineStatus.js +1 -1
  178. package/dist/components/OfflineStatus.js.map +1 -1
  179. package/dist/components/PresenceIndicator.d.ts.map +1 -1
  180. package/dist/components/PresenceIndicator.js +2 -1
  181. package/dist/components/PresenceIndicator.js.map +1 -1
  182. package/dist/components/ReflowMeter.js +2 -2
  183. package/dist/components/ReflowMeter.js.map +1 -1
  184. package/dist/components/SEOPanel.js +2 -2
  185. package/dist/components/SEOPanel.js.map +1 -1
  186. package/dist/components/ThemeProvider.d.ts +24 -4
  187. package/dist/components/ThemeProvider.d.ts.map +1 -1
  188. package/dist/components/ThemeProvider.js +80 -22
  189. package/dist/components/ThemeProvider.js.map +1 -1
  190. package/dist/components/TipTapEditor.d.ts.map +1 -1
  191. package/dist/components/TipTapEditor.js +3 -4
  192. package/dist/components/TipTapEditor.js.map +1 -1
  193. package/dist/components/forms/EmbedPanel.js +1 -1
  194. package/dist/components/forms/EmbedPanel.js.map +1 -1
  195. package/dist/components/forms/FormEntryDetailPane.js +6 -1
  196. package/dist/components/forms/FormEntryDetailPane.js.map +1 -1
  197. package/dist/components/forms/ShortcodeGlossary.d.ts.map +1 -1
  198. package/dist/components/forms/ShortcodeGlossary.js +6 -1
  199. package/dist/components/forms/ShortcodeGlossary.js.map +1 -1
  200. package/dist/components/forms/primitives.d.ts +15 -5
  201. package/dist/components/forms/primitives.d.ts.map +1 -1
  202. package/dist/components/forms/primitives.js +11 -11
  203. package/dist/components/forms/primitives.js.map +1 -1
  204. package/dist/components/pages/tag-badges.d.ts +2 -1
  205. package/dist/components/pages/tag-badges.d.ts.map +1 -1
  206. package/dist/components/pages/tag-badges.js +4 -3
  207. package/dist/components/pages/tag-badges.js.map +1 -1
  208. package/dist/components/seo/PageAuditPanel.js +2 -2
  209. package/dist/components/seo/PageAuditPanel.js.map +1 -1
  210. package/dist/components/seo/SerpPreview.d.ts +4 -4
  211. package/dist/components/seo/SerpPreview.js +1 -1
  212. package/dist/components/seo/SerpPreview.js.map +1 -1
  213. package/dist/components/seo/primitives.js +2 -2
  214. package/dist/components/seo/primitives.js.map +1 -1
  215. package/dist/components/ui/AuthorAvatar.d.ts +4 -4
  216. package/dist/components/ui/AuthorAvatar.d.ts.map +1 -1
  217. package/dist/components/ui/AuthorAvatar.js +11 -10
  218. package/dist/components/ui/AuthorAvatar.js.map +1 -1
  219. package/dist/components/ui/Badge.d.ts +1 -1
  220. package/dist/components/ui/Badge.js +1 -1
  221. package/dist/components/ui/Badge.js.map +1 -1
  222. package/dist/components/ui/Breadcrumb.d.ts +27 -0
  223. package/dist/components/ui/Breadcrumb.d.ts.map +1 -0
  224. package/dist/components/ui/Breadcrumb.js +41 -0
  225. package/dist/components/ui/Breadcrumb.js.map +1 -0
  226. package/dist/components/ui/Button.d.ts +2 -2
  227. package/dist/components/ui/Button.d.ts.map +1 -1
  228. package/dist/components/ui/Button.js +31 -16
  229. package/dist/components/ui/Button.js.map +1 -1
  230. package/dist/components/ui/Card.d.ts +8 -4
  231. package/dist/components/ui/Card.d.ts.map +1 -1
  232. package/dist/components/ui/Card.js +21 -13
  233. package/dist/components/ui/Card.js.map +1 -1
  234. package/dist/components/ui/CardListControls.d.ts +34 -0
  235. package/dist/components/ui/CardListControls.d.ts.map +1 -0
  236. package/dist/components/ui/CardListControls.js +25 -0
  237. package/dist/components/ui/CardListControls.js.map +1 -0
  238. package/dist/components/ui/CountChip.d.ts +20 -0
  239. package/dist/components/ui/CountChip.d.ts.map +1 -0
  240. package/dist/components/ui/CountChip.js +48 -0
  241. package/dist/components/ui/CountChip.js.map +1 -0
  242. package/dist/components/ui/FilterPill.d.ts +2 -1
  243. package/dist/components/ui/FilterPill.d.ts.map +1 -1
  244. package/dist/components/ui/FilterPill.js +3 -2
  245. package/dist/components/ui/FilterPill.js.map +1 -1
  246. package/dist/components/ui/Input.d.ts +1 -1
  247. package/dist/components/ui/InspectorPane.d.ts +1 -1
  248. package/dist/components/ui/InspectorPane.d.ts.map +1 -1
  249. package/dist/components/ui/InspectorPane.js +15 -4
  250. package/dist/components/ui/InspectorPane.js.map +1 -1
  251. package/dist/components/ui/Modal.d.ts.map +1 -1
  252. package/dist/components/ui/Modal.js +10 -2
  253. package/dist/components/ui/Modal.js.map +1 -1
  254. package/dist/components/ui/PageHeader.d.ts +28 -0
  255. package/dist/components/ui/PageHeader.d.ts.map +1 -0
  256. package/dist/components/ui/PageHeader.js +18 -0
  257. package/dist/components/ui/PageHeader.js.map +1 -0
  258. package/dist/components/ui/RowActions.d.ts +5 -0
  259. package/dist/components/ui/RowActions.d.ts.map +1 -1
  260. package/dist/components/ui/RowActions.js +7 -2
  261. package/dist/components/ui/RowActions.js.map +1 -1
  262. package/dist/components/ui/Segmented.d.ts +21 -0
  263. package/dist/components/ui/Segmented.d.ts.map +1 -0
  264. package/dist/components/ui/Segmented.js +41 -0
  265. package/dist/components/ui/Segmented.js.map +1 -0
  266. package/dist/components/ui/Toaster.d.ts +12 -0
  267. package/dist/components/ui/Toaster.d.ts.map +1 -0
  268. package/dist/components/ui/Toaster.js +103 -0
  269. package/dist/components/ui/Toaster.js.map +1 -0
  270. package/dist/components/ui/Toggle.d.ts +4 -3
  271. package/dist/components/ui/Toggle.d.ts.map +1 -1
  272. package/dist/components/ui/Toggle.js +16 -12
  273. package/dist/components/ui/Toggle.js.map +1 -1
  274. package/dist/components/ui/UnderlineTabs.d.ts +56 -0
  275. package/dist/components/ui/UnderlineTabs.d.ts.map +1 -0
  276. package/dist/components/ui/UnderlineTabs.js +205 -0
  277. package/dist/components/ui/UnderlineTabs.js.map +1 -0
  278. package/dist/components/ui/UnsavedBar.d.ts +25 -0
  279. package/dist/components/ui/UnsavedBar.d.ts.map +1 -0
  280. package/dist/components/ui/UnsavedBar.js +22 -0
  281. package/dist/components/ui/UnsavedBar.js.map +1 -0
  282. package/dist/components/ui/admin-links.d.ts +11 -0
  283. package/dist/components/ui/admin-links.d.ts.map +1 -0
  284. package/dist/components/ui/admin-links.js +10 -0
  285. package/dist/components/ui/admin-links.js.map +1 -0
  286. package/dist/components/ui/card-table.d.ts +43 -0
  287. package/dist/components/ui/card-table.d.ts.map +1 -0
  288. package/dist/components/ui/card-table.js +31 -0
  289. package/dist/components/ui/card-table.js.map +1 -0
  290. package/dist/components/virtual-window.d.ts +7 -0
  291. package/dist/components/virtual-window.d.ts.map +1 -1
  292. package/dist/components/virtual-window.js +5 -2
  293. package/dist/components/virtual-window.js.map +1 -1
  294. package/dist/fields/RelationshipField.js +1 -1
  295. package/dist/fields/RelationshipField.js.map +1 -1
  296. package/dist/files/dm-mono-latin-400-normal.woff +0 -0
  297. package/dist/files/dm-mono-latin-400-normal.woff2 +0 -0
  298. package/dist/files/dm-mono-latin-500-normal.woff +0 -0
  299. package/dist/files/dm-mono-latin-500-normal.woff2 +0 -0
  300. package/dist/files/dm-mono-latin-ext-400-normal.woff +0 -0
  301. package/dist/files/dm-mono-latin-ext-400-normal.woff2 +0 -0
  302. package/dist/files/dm-mono-latin-ext-500-normal.woff +0 -0
  303. package/dist/files/dm-mono-latin-ext-500-normal.woff2 +0 -0
  304. package/dist/files/dm-sans-latin-400-normal.woff +0 -0
  305. package/dist/files/dm-sans-latin-400-normal.woff2 +0 -0
  306. package/dist/files/dm-sans-latin-500-normal.woff +0 -0
  307. package/dist/files/dm-sans-latin-500-normal.woff2 +0 -0
  308. package/dist/files/dm-sans-latin-600-normal.woff +0 -0
  309. package/dist/files/dm-sans-latin-600-normal.woff2 +0 -0
  310. package/dist/files/dm-sans-latin-700-normal.woff +0 -0
  311. package/dist/files/dm-sans-latin-700-normal.woff2 +0 -0
  312. package/dist/files/dm-sans-latin-ext-400-normal.woff +0 -0
  313. package/dist/files/dm-sans-latin-ext-400-normal.woff2 +0 -0
  314. package/dist/files/dm-sans-latin-ext-500-normal.woff +0 -0
  315. package/dist/files/dm-sans-latin-ext-500-normal.woff2 +0 -0
  316. package/dist/files/dm-sans-latin-ext-600-normal.woff +0 -0
  317. package/dist/files/dm-sans-latin-ext-600-normal.woff2 +0 -0
  318. package/dist/files/dm-sans-latin-ext-700-normal.woff +0 -0
  319. package/dist/files/dm-sans-latin-ext-700-normal.woff2 +0 -0
  320. package/dist/hooks/useAppearanceBootstrap.d.ts.map +1 -1
  321. package/dist/hooks/useAppearanceBootstrap.js +9 -3
  322. package/dist/hooks/useAppearanceBootstrap.js.map +1 -1
  323. package/dist/index.d.ts +15 -0
  324. package/dist/index.d.ts.map +1 -1
  325. package/dist/index.js +8 -0
  326. package/dist/index.js.map +1 -1
  327. package/dist/layout/Header.d.ts +14 -5
  328. package/dist/layout/Header.d.ts.map +1 -1
  329. package/dist/layout/Header.js +78 -13
  330. package/dist/layout/Header.js.map +1 -1
  331. package/dist/layout/Layout.d.ts +5 -3
  332. package/dist/layout/Layout.d.ts.map +1 -1
  333. package/dist/layout/Layout.js +45 -54
  334. package/dist/layout/Layout.js.map +1 -1
  335. package/dist/layout/MobileTabBar.d.ts +20 -0
  336. package/dist/layout/MobileTabBar.d.ts.map +1 -0
  337. package/dist/layout/MobileTabBar.js +29 -0
  338. package/dist/layout/MobileTabBar.js.map +1 -0
  339. package/dist/layout/Sidebar.d.ts +8 -26
  340. package/dist/layout/Sidebar.d.ts.map +1 -1
  341. package/dist/layout/Sidebar.js +309 -345
  342. package/dist/layout/Sidebar.js.map +1 -1
  343. package/dist/layout/nav-config.d.ts +101 -0
  344. package/dist/layout/nav-config.d.ts.map +1 -0
  345. package/dist/layout/nav-config.js +297 -0
  346. package/dist/layout/nav-config.js.map +1 -0
  347. package/dist/layout/primitives/AdminShell.d.ts +10 -2
  348. package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
  349. package/dist/layout/primitives/AdminShell.js +114 -6
  350. package/dist/layout/primitives/AdminShell.js.map +1 -1
  351. package/dist/layout/topbar-classes.d.ts +8 -0
  352. package/dist/layout/topbar-classes.d.ts.map +1 -0
  353. package/dist/layout/topbar-classes.js +8 -0
  354. package/dist/layout/topbar-classes.js.map +1 -0
  355. package/dist/layout/use-nav-items.d.ts +10 -0
  356. package/dist/layout/use-nav-items.d.ts.map +1 -0
  357. package/dist/layout/use-nav-items.js +39 -0
  358. package/dist/layout/use-nav-items.js.map +1 -0
  359. package/dist/lib/api.d.ts +6 -0
  360. package/dist/lib/api.d.ts.map +1 -1
  361. package/dist/lib/api.js +1 -1
  362. package/dist/lib/api.js.map +1 -1
  363. package/dist/lib/appearance-api.d.ts +3 -1
  364. package/dist/lib/appearance-api.d.ts.map +1 -1
  365. package/dist/lib/appearance-api.js +1 -0
  366. package/dist/lib/appearance-api.js.map +1 -1
  367. package/dist/lib/job-drawer.d.ts +128 -0
  368. package/dist/lib/job-drawer.d.ts.map +1 -0
  369. package/dist/lib/job-drawer.js +351 -0
  370. package/dist/lib/job-drawer.js.map +1 -0
  371. package/dist/lib/job-view.d.ts +187 -0
  372. package/dist/lib/job-view.d.ts.map +1 -0
  373. package/dist/lib/job-view.js +363 -0
  374. package/dist/lib/job-view.js.map +1 -0
  375. package/dist/lib/jobs-service.d.ts +134 -0
  376. package/dist/lib/jobs-service.d.ts.map +1 -0
  377. package/dist/lib/jobs-service.js +179 -0
  378. package/dist/lib/jobs-service.js.map +1 -0
  379. package/dist/lib/sheet-focus.d.ts +24 -0
  380. package/dist/lib/sheet-focus.d.ts.map +1 -0
  381. package/dist/lib/sheet-focus.js +61 -0
  382. package/dist/lib/sheet-focus.js.map +1 -0
  383. package/dist/lib/tiers.d.ts +30 -0
  384. package/dist/lib/tiers.d.ts.map +1 -0
  385. package/dist/lib/tiers.js +43 -0
  386. package/dist/lib/tiers.js.map +1 -0
  387. package/dist/prenta-admin.css +1 -1
  388. package/dist/router/admin-routes.d.ts.map +1 -1
  389. package/dist/router/admin-routes.js +8 -0
  390. package/dist/router/admin-routes.js.map +1 -1
  391. package/dist/router/index.d.ts +5 -1
  392. package/dist/router/index.d.ts.map +1 -1
  393. package/dist/router/index.js +7 -0
  394. package/dist/router/index.js.map +1 -1
  395. package/dist/views/ApiKeys.js +2 -2
  396. package/dist/views/ApiKeys.js.map +1 -1
  397. package/dist/views/AppearanceChrome.d.ts +6 -0
  398. package/dist/views/AppearanceChrome.d.ts.map +1 -0
  399. package/dist/views/AppearanceChrome.js +25 -0
  400. package/dist/views/AppearanceChrome.js.map +1 -0
  401. package/dist/views/CollectionList.d.ts.map +1 -1
  402. package/dist/views/CollectionList.js +73 -53
  403. package/dist/views/CollectionList.js.map +1 -1
  404. package/dist/views/Dashboard.d.ts.map +1 -1
  405. package/dist/views/Dashboard.js +14 -8
  406. package/dist/views/Dashboard.js.map +1 -1
  407. package/dist/views/DocumentEdit.d.ts +6 -1
  408. package/dist/views/DocumentEdit.d.ts.map +1 -1
  409. package/dist/views/DocumentEdit.js +44 -8
  410. package/dist/views/DocumentEdit.js.map +1 -1
  411. package/dist/views/FormDeliveries.d.ts.map +1 -1
  412. package/dist/views/FormDeliveries.js +7 -1
  413. package/dist/views/FormDeliveries.js.map +1 -1
  414. package/dist/views/FormEntries.d.ts.map +1 -1
  415. package/dist/views/FormEntries.js +11 -2
  416. package/dist/views/FormEntries.js.map +1 -1
  417. package/dist/views/FormSubmissions.d.ts +1 -1
  418. package/dist/views/FormSubmissions.d.ts.map +1 -1
  419. package/dist/views/FormSubmissions.js +15 -4
  420. package/dist/views/FormSubmissions.js.map +1 -1
  421. package/dist/views/Forms.d.ts.map +1 -1
  422. package/dist/views/Forms.js +6 -4
  423. package/dist/views/Forms.js.map +1 -1
  424. package/dist/views/FormsSettings.d.ts +2 -0
  425. package/dist/views/FormsSettings.d.ts.map +1 -0
  426. package/dist/views/FormsSettings.js +37 -0
  427. package/dist/views/FormsSettings.js.map +1 -0
  428. package/dist/views/Jobs/BusyButton.d.ts +15 -0
  429. package/dist/views/Jobs/BusyButton.d.ts.map +1 -0
  430. package/dist/views/Jobs/BusyButton.js +26 -0
  431. package/dist/views/Jobs/BusyButton.js.map +1 -0
  432. package/dist/views/Jobs/CancelJobDialog.d.ts +21 -0
  433. package/dist/views/Jobs/CancelJobDialog.d.ts.map +1 -0
  434. package/dist/views/Jobs/CancelJobDialog.js +66 -0
  435. package/dist/views/Jobs/CancelJobDialog.js.map +1 -0
  436. package/dist/views/Jobs/DrawerActivity.d.ts +16 -0
  437. package/dist/views/Jobs/DrawerActivity.d.ts.map +1 -0
  438. package/dist/views/Jobs/DrawerActivity.js +59 -0
  439. package/dist/views/Jobs/DrawerActivity.js.map +1 -0
  440. package/dist/views/Jobs/DrawerOverview.d.ts +28 -0
  441. package/dist/views/Jobs/DrawerOverview.d.ts.map +1 -0
  442. package/dist/views/Jobs/DrawerOverview.js +32 -0
  443. package/dist/views/Jobs/DrawerOverview.js.map +1 -0
  444. package/dist/views/Jobs/DrawerResults.d.ts +25 -0
  445. package/dist/views/Jobs/DrawerResults.d.ts.map +1 -0
  446. package/dist/views/Jobs/DrawerResults.js +50 -0
  447. package/dist/views/Jobs/DrawerResults.js.map +1 -0
  448. package/dist/views/Jobs/DrawerReview.d.ts +44 -0
  449. package/dist/views/Jobs/DrawerReview.d.ts.map +1 -0
  450. package/dist/views/Jobs/DrawerReview.js +110 -0
  451. package/dist/views/Jobs/DrawerReview.js.map +1 -0
  452. package/dist/views/Jobs/JobDrawer.d.ts +31 -0
  453. package/dist/views/Jobs/JobDrawer.d.ts.map +1 -0
  454. package/dist/views/Jobs/JobDrawer.js +353 -0
  455. package/dist/views/Jobs/JobDrawer.js.map +1 -0
  456. package/dist/views/Jobs/JobsTable.d.ts +19 -0
  457. package/dist/views/Jobs/JobsTable.d.ts.map +1 -0
  458. package/dist/views/Jobs/JobsTable.js +80 -0
  459. package/dist/views/Jobs/JobsTable.js.map +1 -0
  460. package/dist/views/Jobs/WorkerStrip.d.ts +22 -0
  461. package/dist/views/Jobs/WorkerStrip.d.ts.map +1 -0
  462. package/dist/views/Jobs/WorkerStrip.js +63 -0
  463. package/dist/views/Jobs/WorkerStrip.js.map +1 -0
  464. package/dist/views/Jobs/atoms.d.ts +19 -0
  465. package/dist/views/Jobs/atoms.d.ts.map +1 -0
  466. package/dist/views/Jobs/atoms.js +52 -0
  467. package/dist/views/Jobs/atoms.js.map +1 -0
  468. package/dist/views/Jobs/focus.d.ts +23 -0
  469. package/dist/views/Jobs/focus.d.ts.map +1 -0
  470. package/dist/views/Jobs/focus.js +54 -0
  471. package/dist/views/Jobs/focus.js.map +1 -0
  472. package/dist/views/Jobs/icons.d.ts +22 -0
  473. package/dist/views/Jobs/icons.d.ts.map +1 -0
  474. package/dist/views/Jobs/icons.js +23 -0
  475. package/dist/views/Jobs/icons.js.map +1 -0
  476. package/dist/views/Jobs/placeholders.d.ts +6 -0
  477. package/dist/views/Jobs/placeholders.d.ts.map +1 -0
  478. package/dist/views/Jobs/placeholders.js +20 -0
  479. package/dist/views/Jobs/placeholders.js.map +1 -0
  480. package/dist/views/Jobs/useJobDetail.d.ts +21 -0
  481. package/dist/views/Jobs/useJobDetail.d.ts.map +1 -0
  482. package/dist/views/Jobs/useJobDetail.js +39 -0
  483. package/dist/views/Jobs/useJobDetail.js.map +1 -0
  484. package/dist/views/Jobs/useJobsFeed.d.ts +35 -0
  485. package/dist/views/Jobs/useJobsFeed.d.ts.map +1 -0
  486. package/dist/views/Jobs/useJobsFeed.js +231 -0
  487. package/dist/views/Jobs/useJobsFeed.js.map +1 -0
  488. package/dist/views/Jobs/useReviewItems.d.ts +39 -0
  489. package/dist/views/Jobs/useReviewItems.d.ts.map +1 -0
  490. package/dist/views/Jobs/useReviewItems.js +140 -0
  491. package/dist/views/Jobs/useReviewItems.js.map +1 -0
  492. package/dist/views/Jobs.d.ts +10 -1
  493. package/dist/views/Jobs.d.ts.map +1 -1
  494. package/dist/views/Jobs.js +126 -35
  495. package/dist/views/Jobs.js.map +1 -1
  496. package/dist/views/MediaBrowser.d.ts.map +1 -1
  497. package/dist/views/MediaBrowser.js +37 -9
  498. package/dist/views/MediaBrowser.js.map +1 -1
  499. package/dist/views/Pages/PagesListView.d.ts +1 -1
  500. package/dist/views/Pages/PagesListView.d.ts.map +1 -1
  501. package/dist/views/Pages/PagesListView.js +34 -5
  502. package/dist/views/Pages/PagesListView.js.map +1 -1
  503. package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -1
  504. package/dist/views/Posts/NewPostTypeInstructions.js +12 -2
  505. package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -1
  506. package/dist/views/Posts/PostTypesView.d.ts.map +1 -1
  507. package/dist/views/Posts/PostTypesView.js +10 -1
  508. package/dist/views/Posts/PostTypesView.js.map +1 -1
  509. package/dist/views/Posts/PostsListView.d.ts +1 -2
  510. package/dist/views/Posts/PostsListView.d.ts.map +1 -1
  511. package/dist/views/Posts/PostsListView.js +31 -3
  512. package/dist/views/Posts/PostsListView.js.map +1 -1
  513. package/dist/views/SEO.d.ts.map +1 -1
  514. package/dist/views/SEO.js +3 -3
  515. package/dist/views/SEO.js.map +1 -1
  516. package/dist/views/ScriptTags.d.ts.map +1 -1
  517. package/dist/views/ScriptTags.js +20 -15
  518. package/dist/views/ScriptTags.js.map +1 -1
  519. package/dist/views/Settings.d.ts.map +1 -1
  520. package/dist/views/Settings.js +115 -51
  521. package/dist/views/Settings.js.map +1 -1
  522. package/dist/views/SpamFolder.d.ts +2 -0
  523. package/dist/views/SpamFolder.d.ts.map +1 -0
  524. package/dist/views/SpamFolder.js +14 -0
  525. package/dist/views/SpamFolder.js.map +1 -0
  526. package/dist/views/Trash.d.ts +6 -1
  527. package/dist/views/Trash.d.ts.map +1 -1
  528. package/dist/views/Trash.js +7 -2
  529. package/dist/views/Trash.js.map +1 -1
  530. package/dist/views/Users.js +2 -2
  531. package/dist/views/Users.js.map +1 -1
  532. package/dist/views/WidgetsPlaceholder.d.ts +2 -0
  533. package/dist/views/WidgetsPlaceholder.d.ts.map +1 -0
  534. package/dist/views/WidgetsPlaceholder.js +15 -0
  535. package/dist/views/WidgetsPlaceholder.js.map +1 -0
  536. package/dist/views/dashboard/kpi-grid.d.ts +18 -0
  537. package/dist/views/dashboard/kpi-grid.d.ts.map +1 -0
  538. package/dist/views/dashboard/kpi-grid.js +36 -0
  539. package/dist/views/dashboard/kpi-grid.js.map +1 -0
  540. package/dist/views/lazy-views.d.ts +4 -0
  541. package/dist/views/lazy-views.d.ts.map +1 -1
  542. package/dist/views/lazy-views.js +4 -0
  543. package/dist/views/lazy-views.js.map +1 -1
  544. package/dist/views/page-editor/PageTab.js +1 -1
  545. package/dist/views/page-editor/PageTab.js.map +1 -1
  546. package/dist/views/page-editor/ReviewBar.js +1 -1
  547. package/dist/views/page-editor/ReviewBar.js.map +1 -1
  548. package/dist/views/page-editor/VersionHistoryPanel.js +1 -1
  549. package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -1
  550. package/dist/views/seo/AuditTab.js +1 -1
  551. package/dist/views/seo/AuditTab.js.map +1 -1
  552. package/dist/views/seo/OverviewTab.d.ts.map +1 -1
  553. package/dist/views/seo/OverviewTab.js +2 -2
  554. package/dist/views/seo/OverviewTab.js.map +1 -1
  555. package/dist/views/seo/ProposalsTab.js +1 -1
  556. package/dist/views/seo/ProposalsTab.js.map +1 -1
  557. package/dist/views/settings/AISettingsTab.d.ts.map +1 -1
  558. package/dist/views/settings/AISettingsTab.js +4 -2
  559. package/dist/views/settings/AISettingsTab.js.map +1 -1
  560. package/dist/views/settings/AccessProtectionCard.js +1 -1
  561. package/dist/views/settings/AccessProtectionCard.js.map +1 -1
  562. package/dist/views/settings/AdminThemeCard.d.ts.map +1 -1
  563. package/dist/views/settings/AdminThemeCard.js +63 -15
  564. package/dist/views/settings/AdminThemeCard.js.map +1 -1
  565. package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
  566. package/dist/views/settings/AppearanceTab.js +4 -2
  567. package/dist/views/settings/AppearanceTab.js.map +1 -1
  568. package/dist/views/settings/BrandPreviewCard.js +1 -1
  569. package/dist/views/settings/BrandPreviewCard.js.map +1 -1
  570. package/dist/views/settings/BrandVoiceCard.js +1 -1
  571. package/dist/views/settings/BrandVoiceCard.js.map +1 -1
  572. package/dist/views/settings/EmailSettingsTab.d.ts.map +1 -1
  573. package/dist/views/settings/EmailSettingsTab.js +5 -3
  574. package/dist/views/settings/EmailSettingsTab.js.map +1 -1
  575. package/dist/views/settings/GeneralSettingsTab.d.ts.map +1 -1
  576. package/dist/views/settings/GeneralSettingsTab.js +4 -2
  577. package/dist/views/settings/GeneralSettingsTab.js.map +1 -1
  578. package/dist/views/settings/McpConnectTab.d.ts.map +1 -1
  579. package/dist/views/settings/McpConnectTab.js +1 -1
  580. package/dist/views/settings/McpConnectTab.js.map +1 -1
  581. package/dist/views/settings/ProviderConnectionCard.js +1 -1
  582. package/dist/views/settings/ProviderConnectionCard.js.map +1 -1
  583. package/dist/views/settings/SearchDataCard.js +1 -1
  584. package/dist/views/settings/SearchDataCard.js.map +1 -1
  585. package/dist/views/settings/SecurityStatusCard.js +2 -2
  586. package/dist/views/settings/SecurityStatusCard.js.map +1 -1
  587. package/dist/views/settings/SecurityTab.d.ts.map +1 -1
  588. package/dist/views/settings/SecurityTab.js +4 -2
  589. package/dist/views/settings/SecurityTab.js.map +1 -1
  590. package/dist/views/settings/SeoAutopilotCard.js +2 -2
  591. package/dist/views/settings/SeoAutopilotCard.js.map +1 -1
  592. package/dist/views/settings/SeoSettingsTab.d.ts.map +1 -1
  593. package/dist/views/settings/SeoSettingsTab.js +5 -3
  594. package/dist/views/settings/SeoSettingsTab.js.map +1 -1
  595. package/dist/views/settings/SiteIndexStatusCard.js +1 -1
  596. package/dist/views/settings/SiteIndexStatusCard.js.map +1 -1
  597. package/dist/views/settings/SiteThemeCard.js +1 -1
  598. package/dist/views/settings/UpdatesTab.d.ts.map +1 -1
  599. package/dist/views/settings/UpdatesTab.js +6 -5
  600. package/dist/views/settings/UpdatesTab.js.map +1 -1
  601. package/dist/views/settings/components.d.ts +7 -11
  602. package/dist/views/settings/components.d.ts.map +1 -1
  603. package/dist/views/settings/components.js +18 -12
  604. package/dist/views/settings/components.js.map +1 -1
  605. package/dist/views/settings/useAppearanceSettings.d.ts +7 -1
  606. package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
  607. package/dist/views/settings/useAppearanceSettings.js +89 -22
  608. package/dist/views/settings/useAppearanceSettings.js.map +1 -1
  609. package/dist/views/users/UserDetailDrawer.js +1 -1
  610. package/dist/views/users/UserDetailDrawer.js.map +1 -1
  611. package/package.json +11 -9
  612. package/src/AdminRoot.tsx +88 -30
  613. package/src/LoginRoot.tsx +2 -1
  614. package/src/__tests__/components/author-avatar.test.tsx +3 -20
  615. package/src/__tests__/components/notification-bell.test.tsx +146 -14
  616. package/src/__tests__/components/responsive-tiers.render.test.tsx +461 -0
  617. package/src/__tests__/components/serp-preview.render.test.tsx +6 -3
  618. package/src/__tests__/components/shell-primitives.render.test.tsx +951 -0
  619. package/src/__tests__/components/theme-provider-accent.test.tsx +83 -8
  620. package/src/__tests__/components/toggle.test.tsx +11 -3
  621. package/src/__tests__/components/ui-primitives.test.tsx +5 -8
  622. package/src/__tests__/layout/build-nav-items.test.ts +1 -1
  623. package/src/__tests__/layout/shell-nav.render.test.tsx +983 -0
  624. package/src/__tests__/layout/sidebar-forms-submenu.render.test.tsx +8 -4
  625. package/src/__tests__/layout/sidebar-groups.render.test.tsx +116 -0
  626. package/src/__tests__/layout/sidebar-menus.render.test.tsx +116 -0
  627. package/src/__tests__/layout/sidebar-plugin-nav.test.ts +1 -1
  628. package/src/__tests__/layout/sidebar-posts.test.ts +48 -40
  629. package/src/__tests__/layout/sidebar-submenu.render.test.tsx +35 -10
  630. package/src/__tests__/layout/topbar.render.test.tsx +464 -0
  631. package/src/__tests__/lib/api.test.ts +2 -0
  632. package/src/__tests__/lib/job-drawer.test.ts +493 -0
  633. package/src/__tests__/lib/job-view.test.ts +437 -0
  634. package/src/__tests__/lib/jobs-service.test.ts +98 -0
  635. package/src/__tests__/router/admin-route-order.test.ts +39 -0
  636. package/src/__tests__/styles/ai-gradient-contrast.test.ts +135 -0
  637. package/src/__tests__/styles/breakpoint-order.test.ts +68 -0
  638. package/src/__tests__/styles/responsive-layer.test.ts +367 -12
  639. package/src/__tests__/styles/tailwind-preset.test.ts +154 -0
  640. package/src/__tests__/styles/theme-token-scope.test.ts +10 -3
  641. package/src/__tests__/styles/tiers.test.ts +136 -0
  642. package/src/__tests__/styles/tokens-drift.test.ts +67 -6
  643. package/src/__tests__/views/admin-lazy-route.render.test.tsx +41 -1
  644. package/src/__tests__/views/ai-settings.render.test.tsx +4 -4
  645. package/src/__tests__/views/appearance-menus-route.render.test.tsx +58 -0
  646. package/src/__tests__/views/appearance-settings.render.test.tsx +10 -8
  647. package/src/__tests__/views/appearance-theme-provider.render.test.tsx +347 -0
  648. package/src/__tests__/views/dashboard.test.tsx +48 -0
  649. package/src/__tests__/views/document-edit-navigation.render.test.tsx +130 -0
  650. package/src/__tests__/views/document-edit-routes.render.test.tsx +130 -0
  651. package/src/__tests__/views/email-settings.render.test.tsx +2 -2
  652. package/src/__tests__/views/form-entries.render.test.tsx +22 -0
  653. package/src/__tests__/views/form-submissions.render.test.tsx +22 -0
  654. package/src/__tests__/views/forms-list.render.test.tsx +13 -0
  655. package/src/__tests__/views/general-settings.render.test.tsx +38 -11
  656. package/src/__tests__/views/jobs-drawer.render.test.tsx +1047 -0
  657. package/src/__tests__/views/jobs-list.render.test.tsx +850 -0
  658. package/src/__tests__/views/kpi-grid.test.ts +29 -0
  659. package/src/__tests__/views/mcp-connect.render.test.tsx +1 -0
  660. package/src/__tests__/views/post-section-editor.test.tsx +5 -1
  661. package/src/__tests__/views/script-tags.render.test.tsx +29 -0
  662. package/src/__tests__/views/security-settings.render.test.tsx +9 -10
  663. package/src/__tests__/views/seo-settings.render.test.tsx +7 -9
  664. package/src/__tests__/views/settings-save-bar.render.test.tsx +91 -0
  665. package/src/__tests__/views/settings-save-footer.render.test.tsx +25 -15
  666. package/src/__tests__/views/settings-tabs.render.test.tsx +371 -0
  667. package/src/__tests__/views/updates-tab.render.test.tsx +4 -3
  668. package/src/components/Breadcrumbs.tsx +7 -1
  669. package/src/components/CommandPalette.tsx +51 -3
  670. package/src/components/LocaleSwitcher.tsx +5 -6
  671. package/src/components/NotificationBell.tsx +74 -18
  672. package/src/components/OfflineStatus.tsx +1 -1
  673. package/src/components/PresenceIndicator.tsx +2 -1
  674. package/src/components/ReflowMeter.tsx +3 -3
  675. package/src/components/SEOPanel.tsx +2 -2
  676. package/src/components/ThemeProvider.tsx +122 -42
  677. package/src/components/TipTapEditor.tsx +3 -4
  678. package/src/components/forms/EmbedPanel.tsx +1 -1
  679. package/src/components/forms/FormEntryDetailPane.tsx +7 -1
  680. package/src/components/forms/ShortcodeGlossary.tsx +7 -1
  681. package/src/components/forms/primitives.tsx +37 -21
  682. package/src/components/pages/tag-badges.tsx +4 -3
  683. package/src/components/seo/PageAuditPanel.tsx +2 -2
  684. package/src/components/seo/SerpPreview.tsx +5 -5
  685. package/src/components/seo/primitives.tsx +2 -2
  686. package/src/components/ui/AuthorAvatar.tsx +11 -10
  687. package/src/components/ui/Badge.tsx +1 -1
  688. package/src/components/ui/Breadcrumb.tsx +109 -0
  689. package/src/components/ui/Button.tsx +40 -15
  690. package/src/components/ui/Card.tsx +35 -32
  691. package/src/components/ui/CardListControls.tsx +90 -0
  692. package/src/components/ui/CountChip.tsx +90 -0
  693. package/src/components/ui/FilterPill.tsx +5 -3
  694. package/src/components/ui/InspectorPane.tsx +21 -7
  695. package/src/components/ui/Modal.tsx +20 -6
  696. package/src/components/ui/PageHeader.tsx +63 -0
  697. package/src/components/ui/RowActions.tsx +7 -2
  698. package/src/components/ui/Segmented.tsx +97 -0
  699. package/src/components/ui/Toaster.tsx +139 -0
  700. package/src/components/ui/Toggle.tsx +18 -14
  701. package/src/components/ui/UnderlineTabs.tsx +373 -0
  702. package/src/components/ui/UnsavedBar.tsx +119 -0
  703. package/src/components/ui/admin-links.tsx +20 -0
  704. package/src/components/ui/card-table.ts +34 -0
  705. package/src/components/virtual-window.tsx +13 -2
  706. package/src/fields/RelationshipField.tsx +1 -1
  707. package/src/hooks/useAppearanceBootstrap.ts +9 -3
  708. package/src/index.ts +19 -0
  709. package/src/layout/Header.tsx +210 -135
  710. package/src/layout/Layout.tsx +61 -108
  711. package/src/layout/MobileTabBar.tsx +92 -0
  712. package/src/layout/Sidebar.tsx +555 -593
  713. package/src/layout/nav-config.tsx +425 -0
  714. package/src/layout/primitives/AdminShell.tsx +154 -6
  715. package/src/layout/topbar-classes.ts +8 -0
  716. package/src/layout/use-nav-items.ts +40 -0
  717. package/src/lib/api.ts +7 -1
  718. package/src/lib/appearance-api.ts +4 -0
  719. package/src/lib/job-drawer.ts +424 -0
  720. package/src/lib/job-view.ts +456 -0
  721. package/src/lib/jobs-service.ts +290 -0
  722. package/src/lib/sheet-focus.ts +71 -0
  723. package/src/lib/tiers.ts +43 -0
  724. package/src/router/admin-routes.ts +8 -0
  725. package/src/router/index.ts +9 -1
  726. package/src/styles/prenta-tokens.css +263 -82
  727. package/src/styles/responsive.css +460 -22
  728. package/src/styles/theme.css +177 -28
  729. package/src/views/ApiKeys.tsx +2 -2
  730. package/src/views/AppearanceChrome.tsx +74 -0
  731. package/src/views/CollectionList.tsx +264 -205
  732. package/src/views/Dashboard.tsx +26 -13
  733. package/src/views/DocumentEdit.tsx +111 -56
  734. package/src/views/FormDeliveries.tsx +30 -17
  735. package/src/views/FormEntries.tsx +28 -20
  736. package/src/views/FormSubmissions.tsx +32 -34
  737. package/src/views/Forms.tsx +55 -34
  738. package/src/views/FormsSettings.tsx +94 -0
  739. package/src/views/Jobs/BusyButton.tsx +56 -0
  740. package/src/views/Jobs/CancelJobDialog.tsx +127 -0
  741. package/src/views/Jobs/DrawerActivity.tsx +142 -0
  742. package/src/views/Jobs/DrawerOverview.tsx +139 -0
  743. package/src/views/Jobs/DrawerResults.tsx +155 -0
  744. package/src/views/Jobs/DrawerReview.tsx +464 -0
  745. package/src/views/Jobs/JobDrawer.tsx +556 -0
  746. package/src/views/Jobs/JobsTable.tsx +260 -0
  747. package/src/views/Jobs/WorkerStrip.tsx +144 -0
  748. package/src/views/Jobs/atoms.tsx +93 -0
  749. package/src/views/Jobs/focus.ts +56 -0
  750. package/src/views/Jobs/icons.tsx +111 -0
  751. package/src/views/Jobs/placeholders.tsx +66 -0
  752. package/src/views/Jobs/useJobDetail.ts +64 -0
  753. package/src/views/Jobs/useJobsFeed.ts +249 -0
  754. package/src/views/Jobs/useReviewItems.ts +187 -0
  755. package/src/views/Jobs.tsx +282 -105
  756. package/src/views/MediaBrowser.tsx +71 -21
  757. package/src/views/Pages/PagesListView.tsx +115 -39
  758. package/src/views/Posts/NewPostTypeInstructions.tsx +15 -10
  759. package/src/views/Posts/PostTypesView.tsx +28 -6
  760. package/src/views/Posts/PostsListView.tsx +130 -40
  761. package/src/views/SEO.tsx +23 -8
  762. package/src/views/ScriptTags.tsx +233 -153
  763. package/src/views/Settings.tsx +215 -256
  764. package/src/views/SpamFolder.tsx +32 -0
  765. package/src/views/Trash.tsx +12 -1
  766. package/src/views/Users.tsx +2 -2
  767. package/src/views/WidgetsPlaceholder.tsx +33 -0
  768. package/src/views/dashboard/kpi-grid.ts +38 -0
  769. package/src/views/lazy-views.tsx +12 -0
  770. package/src/views/page-editor/PageTab.tsx +2 -2
  771. package/src/views/page-editor/ReviewBar.tsx +1 -1
  772. package/src/views/page-editor/VersionHistoryPanel.tsx +1 -1
  773. package/src/views/seo/AuditTab.tsx +1 -1
  774. package/src/views/seo/OverviewTab.tsx +6 -5
  775. package/src/views/seo/ProposalsTab.tsx +1 -1
  776. package/src/views/settings/AISettingsTab.tsx +10 -6
  777. package/src/views/settings/AccessProtectionCard.tsx +1 -1
  778. package/src/views/settings/AdminThemeCard.tsx +228 -35
  779. package/src/views/settings/AppearanceTab.tsx +10 -6
  780. package/src/views/settings/BrandPreviewCard.tsx +1 -1
  781. package/src/views/settings/BrandVoiceCard.tsx +1 -1
  782. package/src/views/settings/EmailSettingsTab.tsx +11 -7
  783. package/src/views/settings/GeneralSettingsTab.tsx +10 -6
  784. package/src/views/settings/McpConnectTab.tsx +2 -1
  785. package/src/views/settings/ProviderConnectionCard.tsx +1 -1
  786. package/src/views/settings/SearchDataCard.tsx +1 -1
  787. package/src/views/settings/SecurityStatusCard.tsx +2 -2
  788. package/src/views/settings/SecurityTab.tsx +10 -6
  789. package/src/views/settings/SeoAutopilotCard.tsx +2 -2
  790. package/src/views/settings/SeoSettingsTab.tsx +13 -9
  791. package/src/views/settings/SiteIndexStatusCard.tsx +1 -1
  792. package/src/views/settings/SiteThemeCard.tsx +1 -1
  793. package/src/views/settings/UpdatesTab.tsx +107 -101
  794. package/src/views/settings/components.tsx +26 -62
  795. package/src/views/settings/useAppearanceSettings.ts +116 -25
  796. package/src/views/users/UserDetailDrawer.tsx +1 -1
  797. package/dist/components/ui/StatPill.d.ts +0 -18
  798. package/dist/components/ui/StatPill.d.ts.map +0 -1
  799. package/dist/components/ui/StatPill.js +0 -5
  800. package/dist/components/ui/StatPill.js.map +0 -1
  801. package/src/components/ui/StatPill.tsx +0 -37
@@ -0,0 +1,28 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface PageHeaderProps {
3
+ /** Page title. It equals the screen's sidebar label. */
4
+ title: string;
5
+ subtitle?: ReactNode;
6
+ /** Right-aligned header actions (buttons, AI button, live toggle). */
7
+ actions?: ReactNode;
8
+ /** A `<Breadcrumb>`, on second-level screens only. */
9
+ breadcrumb?: ReactNode;
10
+ /**
11
+ * Drop the page gutter padding, for screens whose wrapper already pads the
12
+ * content (the kit's Jobs and Appearance layouts, `padding: 22px 28px`).
13
+ */
14
+ flush?: boolean;
15
+ }
16
+ /**
17
+ * Page title row (SHELL.md §4): padding 14px var(--gut) 0; title 21 / 700 /
18
+ * -0.5px; subtitle 13px --sub, max 640px; actions right-aligned, gap 8.
19
+ *
20
+ * Tiers (cms-layouts.css): the title is 19px at tablet, 18px on mobile and
21
+ * 26px at 4K; the subtitle 12.5px on mobile, 14.5px at 4K, and a plain-text
22
+ * subtitle hides below 461px. On mobile the actions wrap under the title
23
+ * (row gap 10px). The actions cluster is `data-header-actions`, so its
24
+ * buttons collapse to icons at tablet and mobile and its `data-fab` action
25
+ * floats on mobile (responsive.css).
26
+ */
27
+ export declare function PageHeader({ title, subtitle, actions, breadcrumb, flush, }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=PageHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,sEAAsE;IACtE,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,KAAa,GACd,EAAE,eAAe,2CA4BjB"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Page title row (SHELL.md §4): padding 14px var(--gut) 0; title 21 / 700 /
4
+ * -0.5px; subtitle 13px --sub, max 640px; actions right-aligned, gap 8.
5
+ *
6
+ * Tiers (cms-layouts.css): the title is 19px at tablet, 18px on mobile and
7
+ * 26px at 4K; the subtitle 12.5px on mobile, 14.5px at 4K, and a plain-text
8
+ * subtitle hides below 461px. On mobile the actions wrap under the title
9
+ * (row gap 10px). The actions cluster is `data-header-actions`, so its
10
+ * buttons collapse to icons at tablet and mobile and its `data-fab` action
11
+ * floats on mobile (responsive.css).
12
+ */
13
+ export function PageHeader({ title, subtitle, actions, breadcrumb, flush = false, }) {
14
+ return (_jsxs("header", { className: `mobile:gap-y-2.5 flex flex-wrap items-start gap-4 ${flush ? '' : 'px-[var(--gut)] pt-3.5'}`, children: [_jsxs("div", { className: "min-w-0 flex-[1_1_360px]", children: [breadcrumb ? _jsx("div", { className: "mb-1", children: breadcrumb }) : null, _jsx("h1", { className: "text-page text-txt tablet:text-[19px] mobile:text-[18px] 4k:text-[26px] m-0 leading-[normal]", children: title }), typeof subtitle === 'string' ? (_jsx("p", { className: "text-body text-sub mobile:text-[12.5px] 4k:text-[14.5px] m-0 mt-[3px] max-w-[640px] leading-[normal] text-pretty [@media(width<461px)]:hidden", children: subtitle })) : subtitle ? (
15
+ // Rich subtitles (status pills, presence) may hold block elements.
16
+ _jsx("div", { className: "text-body text-sub mobile:text-[12.5px] 4k:text-[14.5px] mt-[3px] flex flex-wrap items-center gap-3 leading-[normal]", children: subtitle })) : null] }), actions ? (_jsx("div", { "data-header-actions": "", className: "ml-auto flex flex-wrap items-center gap-2", children: actions })) : null] }));
17
+ }
18
+ //# sourceMappingURL=PageHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageHeader.js","sourceRoot":"","sources":["../../../src/components/ui/PageHeader.tsx"],"names":[],"mappings":";AAiBA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,UAAU,EACV,KAAK,GAAG,KAAK,GACG;IAChB,OAAO,CACL,kBACE,SAAS,EAAE,qDAAqD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,EAAE,aAEvG,eAAK,SAAS,EAAC,0BAA0B,aACtC,UAAU,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,MAAM,YAAE,UAAU,GAAO,CAAC,CAAC,CAAC,IAAI,EAC7D,aAAI,SAAS,EAAC,8FAA8F,YACzG,KAAK,GACH,EACJ,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC9B,YAAG,SAAS,EAAC,+IAA+I,YACzJ,QAAQ,GACP,CACL,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACb,mEAAmE;oBACnE,cAAK,SAAS,EAAC,sHAAsH,YAClI,QAAQ,GACL,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,OAAO,CAAC,CAAC,CAAC,CACT,qCAAyB,EAAE,EAAC,SAAS,EAAC,2CAA2C,YAC9E,OAAO,GACJ,CACP,CAAC,CAAC,CAAC,IAAI,IACD,CACV,CAAA;AACH,CAAC"}
@@ -3,6 +3,11 @@ import type { ButtonHTMLAttributes, ReactNode } from 'react';
3
3
  * Design-system table row actions (`.row-actions` / `.ra-icon-btn`): a
4
4
  * right-aligned cluster of 27px bordered icon buttons that fades in on row
5
5
  * hover (the row must have the `group` class) and on keyboard focus.
6
+ *
7
+ * At 1024px and below, and on screens that can't hover, the actions are
8
+ * always shown (cms-layouts.css): there is no hover to reveal them. On a
9
+ * mobile card they line up at the start of its actions row, 44px each
10
+ * (responsive.css); on touch screens they are 44px everywhere.
6
11
  */
7
12
  export declare function RowActions({ children, className }: {
8
13
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"RowActions.d.ts","sourceRoot":"","sources":["../../../src/components/ui/RowActions.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5D;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAQ9F;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,CACP;IACC,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAc,EACd,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,oBAAoB,2CActB"}
1
+ {"version":3,"file":"RowActions.d.ts","sourceRoot":"","sources":["../../../src/components/ui/RowActions.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5D;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAQ9F;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,CACP;IACC,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAc,EACd,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,oBAAoB,2CActB"}
@@ -4,12 +4,17 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  * Design-system table row actions (`.row-actions` / `.ra-icon-btn`): a
5
5
  * right-aligned cluster of 27px bordered icon buttons that fades in on row
6
6
  * hover (the row must have the `group` class) and on keyboard focus.
7
+ *
8
+ * At 1024px and below, and on screens that can't hover, the actions are
9
+ * always shown (cms-layouts.css): there is no hover to reveal them. On a
10
+ * mobile card they line up at the start of its actions row, 44px each
11
+ * (responsive.css); on touch screens they are 44px everywhere.
7
12
  */
8
13
  export function RowActions({ children, className }) {
9
- return (_jsx("div", { className: `flex items-center justify-end gap-1 opacity-0 transition-opacity duration-[var(--motion-fast)] group-hover:opacity-100 focus-within:opacity-100 ${className ?? ''}`, children: children }));
14
+ return (_jsx("div", { className: `narrow:opacity-100 mobile:justify-start flex items-center justify-end gap-1 opacity-0 transition-opacity duration-[var(--motion-fast)] group-hover:opacity-100 focus-within:opacity-100 [@media(hover:none)]:opacity-100 ${className ?? ''}`, children: children }));
10
15
  }
11
16
  export function RowActionButton({ danger = false, className, children, ...rest }) {
12
- return (_jsx("button", { type: "button", className: `flex h-[27px] w-[27px] items-center justify-center rounded-[6px] border border-[var(--bdr)] bg-[var(--card)] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 ${danger
17
+ return (_jsx("button", { type: "button", className: `prenta-touch-target flex h-[27px] w-[27px] items-center justify-center rounded-[6px] border border-[var(--bdr)] bg-[var(--card)] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 ${danger
13
18
  ? 'hover:border-[var(--err)] hover:bg-[var(--err-l)] hover:text-[var(--err)]'
14
19
  : 'hover:border-[var(--acc-m)] hover:bg-[var(--acc-l)] hover:text-[var(--acc)]'} ${className ?? ''}`, ...rest, children: children }));
15
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RowActions.js","sourceRoot":"","sources":["../../../src/components/ui/RowActions.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAIZ;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC7F,OAAO,CACL,cACE,SAAS,EAAE,mJAAmJ,SAAS,IAAI,EAAE,EAAE,YAE9K,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAaD,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAAG,KAAK,EACd,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACc;IACrB,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,qTACT,MAAM;YACJ,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,6EACN,IAAI,SAAS,IAAI,EAAE,EAAE,KACjB,IAAI,YAEP,QAAQ,GACF,CACV,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"RowActions.js","sourceRoot":"","sources":["../../../src/components/ui/RowActions.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAIZ;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC7F,OAAO,CACL,cACE,SAAS,EAAE,4NAA4N,SAAS,IAAI,EAAE,EAAE,YAEvP,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAaD,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAAG,KAAK,EACd,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACc;IACrB,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,yUACT,MAAM;YACJ,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,6EACN,IAAI,SAAS,IAAI,EAAE,EAAE,KACjB,IAAI,YAEP,QAAQ,GACF,CACV,CAAA;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface SegmentedOption {
2
+ id: string;
3
+ label: string;
4
+ count?: number;
5
+ }
6
+ export interface SegmentedProps {
7
+ options: SegmentedOption[];
8
+ value: string;
9
+ onChange: (id: string) => void;
10
+ /** Accessible name for the control. */
11
+ label: string;
12
+ /** Optional counts by option id; an option's own `count` wins. */
13
+ counts?: Record<string, number | undefined>;
14
+ className?: string;
15
+ }
16
+ /**
17
+ * Segmented control (SHELL.md §6, `.jb-seg`). The active segment is a raised
18
+ * card, not a filled accent. Arrow keys, Home and End move between segments.
19
+ */
20
+ export declare function Segmented({ options, value, onChange, label, counts, className, }: SegmentedProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=Segmented.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Segmented.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Segmented.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,SAAc,GACf,EAAE,cAAc,2CAgEhB"}
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRef } from 'react';
4
+ /**
5
+ * Segmented control (SHELL.md §6, `.jb-seg`). The active segment is a raised
6
+ * card, not a filled accent. Arrow keys, Home and End move between segments.
7
+ */
8
+ export function Segmented({ options, value, onChange, label, counts, className = '', }) {
9
+ const refs = useRef([]);
10
+ // Roving tab stop only: with no matching value no option is selected, but
11
+ // the first one still takes focus.
12
+ const selectedIndex = Math.max(0, options.findIndex((option) => option.id === value));
13
+ function onKeyDown(event) {
14
+ const last = options.length - 1;
15
+ let next;
16
+ if (event.key === 'ArrowRight' || event.key === 'ArrowDown')
17
+ next = selectedIndex === last ? 0 : selectedIndex + 1;
18
+ else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp')
19
+ next = selectedIndex === 0 ? last : selectedIndex - 1;
20
+ else if (event.key === 'Home')
21
+ next = 0;
22
+ else if (event.key === 'End')
23
+ next = last;
24
+ else
25
+ return;
26
+ event.preventDefault();
27
+ const option = options[next];
28
+ if (!option)
29
+ return;
30
+ onChange(option.id);
31
+ refs.current[next]?.focus();
32
+ }
33
+ return (_jsx("div", { role: "tablist", "aria-label": label, onKeyDown: onKeyDown, className: `rounded-9 border-bdr bg-bg inline-flex w-fit max-w-full gap-0.5 overflow-x-auto border p-0.5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden ${className}`, children: options.map((option, index) => {
34
+ const selected = option.id === value;
35
+ const count = option.count ?? counts?.[option.id];
36
+ return (_jsxs("button", { ref: (el) => {
37
+ refs.current[index] = el;
38
+ }, type: "button", role: "tab", "aria-selected": selected, tabIndex: index === selectedIndex ? 0 : -1, onClick: () => onChange(option.id), className: `rounded-7 text-sm2 flex cursor-pointer items-center gap-1.5 border-0 px-[11px] py-[5px] leading-[normal] font-semibold whitespace-nowrap ${selected ? 'bg-card text-txt shadow-shd' : 'text-sub hover:text-txt bg-transparent'}`, children: [option.label, typeof count === 'number' ? (_jsx("b", { className: `text-micro font-bold tabular-nums ${selected ? 'text-acc' : 'text-faint'}`, children: count })) : null] }, option.id));
39
+ }) }));
40
+ }
41
+ //# sourceMappingURL=Segmented.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Segmented.js","sourceRoot":"","sources":["../../../src/components/ui/Segmented.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The admin's toast host: sonner, unstyled, painted as the kit toast
3
+ * (SHELL.md §7, `.jb-toast`): fixed 24px above the bottom, centred, --txt
4
+ * background with --bg text, padding 10px 16px, radius 9, 13px / 500.
5
+ * Call sites keep using `toast()` from `sonner`.
6
+ *
7
+ * `aboveTabBar`: lift the toasts clear of the mobile tab bar.
8
+ */
9
+ export declare function Toaster({ aboveTabBar }?: {
10
+ aboveTabBar?: boolean;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=Toaster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toaster.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Toaster.tsx"],"names":[],"mappings":"AA0FA;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,EAAE,WAAmB,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,2CAwC9E"}
@@ -0,0 +1,103 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { isValidElement, useEffect } from 'react';
4
+ import { Toaster as SonnerToaster, toast } from 'sonner';
5
+ /** Kit toast lifetime (SHELL.md §7: auto-hides after 2–2.6s). */
6
+ const TOAST_DURATION_MS = 2400;
7
+ /**
8
+ * Errors and warnings (the kit shows none) often carry a server message;
9
+ * 2.4s is too short to read one.
10
+ */
11
+ const ALERT_TOAST_DURATION_MS = 6000;
12
+ /**
13
+ * `toast.promise`'s `error` option, resolved to settings with the longer
14
+ * lifetime. A `duration` the caller set, on the error result or for the whole
15
+ * promise toast, still wins.
16
+ */
17
+ function longerError(error, callerDuration) {
18
+ const duration = callerDuration ?? ALERT_TOAST_DURATION_MS;
19
+ const withDuration = (result) => typeof result === 'object' && result !== null && !isValidElement(result)
20
+ ? { duration, ...result }
21
+ : { message: result, duration };
22
+ if (error === undefined)
23
+ return undefined;
24
+ return (async (reason) => withDuration(typeof error === 'function' ? await error(reason) : error));
25
+ }
26
+ let installs = 0;
27
+ let installed = null;
28
+ /**
29
+ * Sonner has no per-type default duration, so while an admin toaster is
30
+ * mounted, `toast.error`, `toast.warning` and the error state of
31
+ * `toast.promise` default to the longer lifetime. A duration passed by the
32
+ * caller still wins. Installed once however many toasters mount, and on the
33
+ * last unmount each function is restored only if ours is still in place.
34
+ */
35
+ function useAlertDurations() {
36
+ useEffect(() => {
37
+ if (installs++ === 0) {
38
+ const originals = { error: toast.error, warning: toast.warning, promise: toast.promise };
39
+ const longer = (fn) => (message, data) => fn(message, { duration: ALERT_TOAST_DURATION_MS, ...data });
40
+ const promise = ((p, data) => originals.promise(p, data && { ...data, error: longerError(data.error, data.duration) }));
41
+ const wrappers = {
42
+ error: longer(originals.error),
43
+ warning: longer(originals.warning),
44
+ promise,
45
+ };
46
+ Object.assign(toast, wrappers);
47
+ installed = { originals, wrappers };
48
+ }
49
+ return () => {
50
+ if (--installs > 0 || !installed)
51
+ return;
52
+ const { originals, wrappers } = installed;
53
+ for (const key of ['error', 'warning', 'promise']) {
54
+ if (toast[key] === wrappers[key])
55
+ Object.assign(toast, { [key]: originals[key] });
56
+ }
57
+ installed = null;
58
+ };
59
+ }, []);
60
+ }
61
+ // Above the mobile tab bar and the home indicator. sonner switches to
62
+ // `mobileOffset` at 600px and below, where its own gap is 16px and a toast
63
+ // is as wide as the screen, so it also clears a floating action button
64
+ // (`--fab-clear`, set in responsive.css while a page has one). Wider than
65
+ // that, a centred 356px toast doesn't reach the FAB's corner.
66
+ const ABOVE_TAB_BAR = 'var(--tabbar-h) + env(safe-area-inset-bottom)';
67
+ /**
68
+ * The admin's toast host: sonner, unstyled, painted as the kit toast
69
+ * (SHELL.md §7, `.jb-toast`): fixed 24px above the bottom, centred, --txt
70
+ * background with --bg text, padding 10px 16px, radius 9, 13px / 500.
71
+ * Call sites keep using `toast()` from `sonner`.
72
+ *
73
+ * `aboveTabBar`: lift the toasts clear of the mobile tab bar.
74
+ */
75
+ export function Toaster({ aboveTabBar = false } = {}) {
76
+ useAlertDurations();
77
+ return (_jsx(SonnerToaster, { position: "bottom-center", offset: aboveTabBar ? { bottom: `calc(${ABOVE_TAB_BAR} + 24px)` } : 24, mobileOffset: aboveTabBar
78
+ ? { bottom: `calc(${ABOVE_TAB_BAR} + 16px + var(--fab-clear, 0px))` }
79
+ : undefined, duration: TOAST_DURATION_MS,
80
+ // Inline, because sonner's injected stylesheet is unlayered and would beat
81
+ // utilities: the admin font (it sets a system stack) and the kit toast layer.
82
+ style: { fontFamily: 'inherit', zIndex: 'var(--z-toast)' }, toastOptions: {
83
+ unstyled: true,
84
+ classNames: {
85
+ // `prenta-inverse`: focus rings on the dark toast use --bg. Toasts
86
+ // stacked behind the front one hide their content, as sonner's own
87
+ // styles do for styled toasts.
88
+ toast: 'prenta-inverse right-0 left-0 mx-auto flex w-fit max-w-[calc(100vw-32px)] items-center gap-2 rounded-9 bg-txt px-4 py-2.5 text-body leading-[normal] font-medium text-bg shadow-shd2 [&[data-expanded=false][data-front=false]>*]:opacity-0',
89
+ content: 'flex min-w-0 flex-col gap-0.5',
90
+ description: 'text-meta opacity-80',
91
+ // Unstyled sonner drops the icon slot's box; loading spinners need it.
92
+ icon: 'relative flex size-4 shrink-0 items-center justify-center text-bg',
93
+ // The kit toast is text only. Success and info drop sonner's icon;
94
+ // error and warning (which the kit doesn't show) keep theirs.
95
+ success: '[&_[data-icon]]:hidden!',
96
+ info: '[&_[data-icon]]:hidden!',
97
+ actionButton: 'ml-1 inline-flex h-7 shrink-0 cursor-pointer items-center rounded-7 border-0 bg-acc px-2.5 text-meta font-semibold text-acc-on hover:brightness-[1.07]',
98
+ cancelButton: 'inline-flex h-7 shrink-0 cursor-pointer items-center rounded-7 border-0 bg-transparent px-2.5 text-meta font-semibold text-bg opacity-85 hover:opacity-100 focus-visible:opacity-100',
99
+ closeButton: 'text-bg',
100
+ },
101
+ } }));
102
+ }
103
+ //# sourceMappingURL=Toaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toaster.js","sourceRoot":"","sources":["../../../src/components/ui/Toaster.tsx"],"names":[],"mappings":"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"}
@@ -17,9 +17,10 @@ export interface ToggleProps extends ToggleVariants {
17
17
  'aria-describedby'?: string;
18
18
  }
19
19
  /**
20
- * Design-system toggle (`.tog-track` / `.tog-thumb`). Use `variant="enabled"`
21
- * for on/off tables where green communicates active state.
20
+ * Design-system switch (`role="switch"`). Use `variant="enabled"` for on/off
21
+ * tables where green communicates active state. Also exported as `Switch`.
22
22
  */
23
23
  export declare function Toggle({ checked, onCheckedChange, disabled, variant, size, id, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, }: ToggleProps): import("react/jsx-runtime").JSX.Element;
24
- export {};
24
+ /** The kit's name for {@link Toggle}. */
25
+ export { Toggle as Switch };
25
26
  //# sourceMappingURL=Toggle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Toggle.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEvD,QAAA,MAAM,WAAW;;;;;;yBAoBhB,CAAA;AAiBD,KAAK,cAAc,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAA;AAEtD,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,eAAe,EACf,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,EAAE,EACF,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,GACpC,EAAE,WAAW,2CAeb"}
1
+ {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Toggle.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAIvD,QAAA,MAAM,WAAW;;;;;;yBAoBhB,CAAA;AAgBD,KAAK,cAAc,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAA;AAEtD,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,eAAe,EACf,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,EAAE,EACF,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,GACpC,EAAE,WAAW,2CAeb;AAED,yCAAyC;AACzC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,CAAA"}
@@ -1,18 +1,21 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import * as Switch from '@radix-ui/react-switch';
3
+ import * as SwitchPrimitive from '@radix-ui/react-switch';
4
4
  import { cv } from '../../lib/cv.js';
5
- const toggleTrack = cv('relative inline-block shrink-0 cursor-pointer rounded-[var(--r-pill)] border-0 p-0 transition-colors duration-[var(--motion-base)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50', {
5
+ // Kit switch (SHELL.md §7, `.ap-sw`): 34×19 track, 15px knob at left 2px
6
+ // (17px when on), .15s. Radix renders role="switch" with aria-checked.
7
+ const toggleTrack = cv(
8
+ // `prenta-touch-hit` grows the hit area to 44px on touch without stretching the track.
9
+ 'prenta-touch-hit rounded-pill relative inline-block shrink-0 cursor-pointer border-0 p-0 transition-[background-color] duration-[var(--mo-base)] disabled:cursor-not-allowed disabled:opacity-50', {
6
10
  variants: {
7
11
  variant: {
8
12
  /** Design system default — accent when on. */
9
- accent: 'bg-[var(--bdr)] data-[state=checked]:bg-[var(--acc)]',
13
+ accent: 'bg-bdr data-[state=checked]:bg-acc',
10
14
  /** Semantic enable/disable — success green when on (tables, script tags). */
11
- enabled: 'bg-[var(--bdr)] data-[state=checked]:bg-[var(--suc)]',
15
+ enabled: 'bg-bdr data-[state=checked]:bg-suc',
12
16
  },
13
17
  size: {
14
- /** Matches `.tog-track` in the design system handoff (38×21). */
15
- md: 'h-[21px] w-[38px]',
18
+ md: 'h-[19px] w-[34px]',
16
19
  },
17
20
  },
18
21
  defaultVariants: {
@@ -20,11 +23,10 @@ const toggleTrack = cv('relative inline-block shrink-0 cursor-pointer rounded-[v
20
23
  size: 'md',
21
24
  },
22
25
  });
23
- const toggleThumb = cv('pointer-events-none absolute top-[2.5px] left-[2.5px] block rounded-full bg-[var(--toggle-thumb)] shadow-[0_1px_3px_rgba(0,0,0,0.2)] transition-[left] duration-[var(--motion-base)] data-[state=checked]:left-[19.5px]', {
26
+ const toggleThumb = cv('shadow-knob pointer-events-none absolute top-0.5 left-0.5 block rounded-full bg-[var(--toggle-thumb)] transition-[left] duration-[var(--mo-base)]', {
24
27
  variants: {
25
28
  size: {
26
- /** Matches `.tog-thumb` in the design system handoff (16×16). */
27
- md: 'h-4 w-4',
29
+ md: 'h-[15px] w-[15px] data-[state=checked]:left-[17px]',
28
30
  },
29
31
  },
30
32
  defaultVariants: {
@@ -32,10 +34,12 @@ const toggleThumb = cv('pointer-events-none absolute top-[2.5px] left-[2.5px] bl
32
34
  },
33
35
  });
34
36
  /**
35
- * Design-system toggle (`.tog-track` / `.tog-thumb`). Use `variant="enabled"`
36
- * for on/off tables where green communicates active state.
37
+ * Design-system switch (`role="switch"`). Use `variant="enabled"` for on/off
38
+ * tables where green communicates active state. Also exported as `Switch`.
37
39
  */
38
40
  export function Toggle({ checked, onCheckedChange, disabled, variant, size, id, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, }) {
39
- return (_jsx(Switch.Root, { id: id, checked: checked, onCheckedChange: onCheckedChange, disabled: disabled, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, className: toggleTrack({ variant, size }), children: _jsx(Switch.Thumb, { className: toggleThumb({ size }) }) }));
41
+ return (_jsx(SwitchPrimitive.Root, { id: id, checked: checked, onCheckedChange: onCheckedChange, disabled: disabled, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, className: toggleTrack({ variant, size }), children: _jsx(SwitchPrimitive.Thumb, { className: toggleThumb({ size }) }) }));
40
42
  }
43
+ /** The kit's name for {@link Toggle}. */
44
+ export { Toggle as Switch };
41
45
  //# sourceMappingURL=Toggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.js","sourceRoot":"","sources":["../../../src/components/ui/Toggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,EAAE,EAAqB,MAAM,iBAAiB,CAAA;AAEvD,MAAM,WAAW,GAAG,EAAE,CACpB,qQAAqQ,EACrQ;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,8CAA8C;YAC9C,MAAM,EAAE,sDAAsD;YAC9D,6EAA6E;YAC7E,OAAO,EAAE,sDAAsD;SAChE;QACD,IAAI,EAAE;YACJ,iEAAiE;YACjE,EAAE,EAAE,mBAAmB;SACxB;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,IAAI;KACX;CACF,CACF,CAAA;AAED,MAAM,WAAW,GAAG,EAAE,CACpB,yNAAyN,EACzN;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,iEAAiE;YACjE,EAAE,EAAE,SAAS;SACd;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;KACX;CACF,CACF,CAAA;AAcD;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,eAAe,EACf,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,EAAE,EACF,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,GACvB;IACZ,OAAO,CACL,KAAC,MAAM,CAAC,IAAI,IACV,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,QAAQ,gBACN,SAAS,qBACJ,cAAc,sBACb,eAAe,EACjC,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,YAEzC,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,GAAI,GACtC,CACf,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Toggle.js","sourceRoot":"","sources":["../../../src/components/ui/Toggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,EAAE,EAAqB,MAAM,iBAAiB,CAAA;AAEvD,yEAAyE;AACzE,uEAAuE;AACvE,MAAM,WAAW,GAAG,EAAE;AACpB,uFAAuF;AACvF,kMAAkM,EAClM;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,8CAA8C;YAC9C,MAAM,EAAE,oCAAoC;YAC5C,6EAA6E;YAC7E,OAAO,EAAE,oCAAoC;SAC9C;QACD,IAAI,EAAE;YACJ,EAAE,EAAE,mBAAmB;SACxB;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,IAAI;KACX;CACF,CACF,CAAA;AAED,MAAM,WAAW,GAAG,EAAE,CACpB,mJAAmJ,EACnJ;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,oDAAoD;SACzD;KACF;IACD,eAAe,EAAE;QACf,IAAI,EAAE,IAAI;KACX;CACF,CACF,CAAA;AAcD;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,EACrB,OAAO,EACP,eAAe,EACf,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,EAAE,EACF,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,GACvB;IACZ,OAAO,CACL,KAAC,eAAe,CAAC,IAAI,IACnB,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,QAAQ,gBACN,SAAS,qBACJ,cAAc,sBACb,eAAe,EACjC,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,YAEzC,KAAC,eAAe,CAAC,KAAK,IAAC,SAAS,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,GAAI,GACtC,CACxB,CAAA;AACH,CAAC;AAED,yCAAyC;AACzC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ export interface UnderlineTab {
3
+ id: string;
4
+ label: string;
5
+ /** Leading icon, 15px (Settings and Form Settings tabs). */
6
+ icon?: ReactNode;
7
+ count?: number;
8
+ /** Trailing badge, e.g. a "Live" pill. Rendered after the count. */
9
+ badge?: ReactNode;
10
+ }
11
+ export interface UnderlineTabsProps {
12
+ tabs: UnderlineTab[];
13
+ value: string;
14
+ onChange: (id: string) => void;
15
+ /** Accessible name for the tab list. */
16
+ label: string;
17
+ /**
18
+ * Prefix for the tab and panel ids. Pass the same value to `UnderlineTabPanel`
19
+ * so each tab's `aria-controls` points at its panel. Defaults to a generated id.
20
+ */
21
+ idBase?: string;
22
+ /**
23
+ * `page` is a page-level strip (Settings.html `.pg-tabs`): 13px / 500 tabs
24
+ * in `--muted`, 10px 16px, no gap. `drawer` is the Jobs drawer's `.jd-tabs`:
25
+ * 9px 11px with a 6px gap and no divider of its own, because the drawer
26
+ * header draws the line under it (its edges still fade when tabs are
27
+ * hidden, as every strip's do). The default is SHELL.md §6: 13px / 600
28
+ * in `--sub`, 10px 12px.
29
+ */
30
+ variant?: 'default' | 'page' | 'drawer';
31
+ /** Classes for the scrolling strip (e.g. the page gutter as padding). */
32
+ className?: string;
33
+ }
34
+ /**
35
+ * Underline tabs (SHELL.md §6). The active mark is `box-shadow: inset 0 -2px 0`,
36
+ * never a border with a negative margin, so the strip can scroll without a
37
+ * vertical scrollbar. Arrow keys, Home and End move between tabs.
38
+ *
39
+ * When the tabs don't fit, the strip scrolls with its scrollbar hidden, and
40
+ * each edge that hides tabs fades out over 48px. The kit fades the right edge
41
+ * at ≤1280px unless the last tab is active; here the fade follows what is
42
+ * actually hidden, so it also shows on wide screens with more tabs and goes
43
+ * once the strip is scrolled to its end. Over each fade sits a chevron button
44
+ * that scrolls the strip for mouse users without a horizontal wheel; keyboard
45
+ * and screen-reader users reach every tab through the tab list itself, so the
46
+ * buttons are `aria-hidden` and out of the Tab order.
47
+ */
48
+ export declare function UnderlineTabs({ tabs, value, onChange, label, idBase, variant, className, }: UnderlineTabsProps): import("react/jsx-runtime").JSX.Element;
49
+ export interface UnderlineTabPanelProps extends HTMLAttributes<HTMLDivElement> {
50
+ /** Same `idBase` as the `UnderlineTabs` it belongs to. */
51
+ idBase: string;
52
+ tabId: string;
53
+ }
54
+ /** The panel for one underline tab: `role="tabpanel"`, labelled by its tab. */
55
+ export declare function UnderlineTabPanel({ idBase, tabId, children, ...rest }: UnderlineTabPanelProps): import("react/jsx-runtime").JSX.Element;
56
+ //# sourceMappingURL=UnderlineTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnderlineTabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/UnderlineTabs.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAGd,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAA;IACvC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA8BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAmB,EACnB,SAAc,GACf,EAAE,kBAAkB,2CAuNpB;AAuCD,MAAM,WAAW,sBAAuB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC5E,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,sBAAsB,2CAY7F"}