@rakun-kit/manager-react 1.5.9 → 1.6.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 (318) hide show
  1. package/README.md +366 -297
  2. package/dist/cjs/app/runtime-app.js +4 -1
  3. package/dist/cjs/app/runtime-app.js.map +1 -1
  4. package/dist/cjs/components/app-sidebar.js +13 -2
  5. package/dist/cjs/components/app-sidebar.js.map +1 -1
  6. package/dist/cjs/components/media/MediaLibrary.js +10 -1
  7. package/dist/cjs/components/media/MediaLibrary.js.map +1 -1
  8. package/dist/cjs/components/media/contexts/MediaLibraryContext.js +1 -1
  9. package/dist/cjs/components/media/contexts/MediaLibraryContext.js.map +1 -1
  10. package/dist/cjs/components/media/previews/MediaContextMenuContent.js +68 -15
  11. package/dist/cjs/components/media/previews/MediaContextMenuContent.js.map +1 -1
  12. package/dist/cjs/components/media/previews/Previews.js +89 -35
  13. package/dist/cjs/components/media/previews/Previews.js.map +1 -1
  14. package/dist/cjs/components/media/previews/context/MediaPreviewContext.js.map +1 -1
  15. package/dist/cjs/components/media/previews/dialogs/ExpandedPreviewDialog.js +7 -10
  16. package/dist/cjs/components/media/previews/dialogs/ExpandedPreviewDialog.js.map +1 -1
  17. package/dist/cjs/components/media/previews/hooks/useMediaPreviewRenderer.js +3 -1
  18. package/dist/cjs/components/media/previews/hooks/useMediaPreviewRenderer.js.map +1 -1
  19. package/dist/cjs/components/media/previews/toolbar/PreviewsToolbar.js +16 -9
  20. package/dist/cjs/components/media/previews/toolbar/PreviewsToolbar.js.map +1 -1
  21. package/dist/cjs/components/media/previews/utils/mediaDownload.js +54 -0
  22. package/dist/cjs/components/media/previews/utils/mediaDownload.js.map +1 -0
  23. package/dist/cjs/components/media/previews/views/PreviewsListView.js +1 -1
  24. package/dist/cjs/components/media/previews/views/PreviewsListView.js.map +1 -1
  25. package/dist/cjs/components/rakun-logo.js +4 -9
  26. package/dist/cjs/components/rakun-logo.js.map +1 -1
  27. package/dist/cjs/components/ui/context-menu.js +1 -1
  28. package/dist/cjs/components/ui/context-menu.js.map +1 -1
  29. package/dist/cjs/i18n/catalog.js +366 -6
  30. package/dist/cjs/i18n/catalog.js.map +1 -1
  31. package/dist/cjs/layouts.js +2 -2
  32. package/dist/cjs/layouts.js.map +1 -1
  33. package/dist/cjs/lib/media.js +1 -0
  34. package/dist/cjs/lib/media.js.map +1 -1
  35. package/dist/cjs/media.js +45 -0
  36. package/dist/cjs/media.js.map +1 -1
  37. package/dist/cjs/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js +15 -4
  38. package/dist/cjs/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js.map +1 -1
  39. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js +11 -6
  40. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js.map +1 -1
  41. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js +2 -1
  42. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js.map +1 -1
  43. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js +3 -2
  44. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js.map +1 -1
  45. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js +1 -1
  46. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js.map +1 -1
  47. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js +290 -0
  48. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js.map +1 -0
  49. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js +88 -0
  50. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js.map +1 -0
  51. package/dist/cjs/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js +9 -1
  52. package/dist/cjs/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js.map +1 -1
  53. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js +15 -2
  54. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js.map +1 -1
  55. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js +222 -232
  56. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js.map +1 -1
  57. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js +20 -1
  58. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js.map +1 -1
  59. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js +27 -21
  60. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js.map +1 -1
  61. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.js.map +1 -1
  62. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js +25 -0
  63. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js.map +1 -0
  64. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js +10 -1
  65. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js.map +1 -1
  66. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js +38 -11
  67. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js.map +1 -1
  68. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js +135 -0
  69. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js.map +1 -0
  70. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js +10 -0
  71. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js.map +1 -0
  72. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js +113 -0
  73. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js.map +1 -0
  74. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js +15 -2
  75. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js.map +1 -1
  76. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js +22 -0
  77. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js.map +1 -0
  78. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/index.js.map +1 -1
  79. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js +2 -0
  80. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js.map +1 -1
  81. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js +198 -0
  82. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js.map +1 -1
  83. package/dist/cjs/router/dashboard/[contentType]/[edit]/edit.js +10 -1
  84. package/dist/cjs/router/dashboard/[contentType]/[edit]/edit.js.map +1 -1
  85. package/dist/cjs/router/dashboard/[contentType]/[edit]/screen.js +2 -2
  86. package/dist/cjs/router/dashboard/[contentType]/[edit]/screen.js.map +1 -1
  87. package/dist/cjs/router/dashboard/debugging/api-routes/ApiTest.js +2 -2
  88. package/dist/cjs/router/dashboard/debugging/api-routes/ApiTest.js.map +1 -1
  89. package/dist/cjs/router/dashboard/debugging/api-routes/JsonViewer.js +17 -0
  90. package/dist/cjs/router/dashboard/debugging/api-routes/JsonViewer.js.map +1 -0
  91. package/dist/cjs/router/dashboard/debugging/api-routes/SchemaViewer.js +40 -26
  92. package/dist/cjs/router/dashboard/debugging/api-routes/SchemaViewer.js.map +1 -1
  93. package/dist/cjs/router/dashboard/debugging/api-routes/test.js +6 -5
  94. package/dist/cjs/router/dashboard/debugging/api-routes/test.js.map +1 -1
  95. package/dist/cjs/router/dashboard/seo/index.js +6 -0
  96. package/dist/cjs/router/dashboard/seo/index.js.map +1 -0
  97. package/dist/cjs/router/dashboard/seo/screen.js +219 -0
  98. package/dist/cjs/router/dashboard/seo/screen.js.map +1 -0
  99. package/dist/cjs/router/dashboard/seo/site-analysis.js +153 -0
  100. package/dist/cjs/router/dashboard/seo/site-analysis.js.map +1 -0
  101. package/dist/cjs/router/dashboard/settings/llms/index.js +6 -0
  102. package/dist/cjs/router/dashboard/settings/llms/index.js.map +1 -0
  103. package/dist/cjs/router/dashboard/settings/llms/screen.js +122 -0
  104. package/dist/cjs/router/dashboard/settings/llms/screen.js.map +1 -0
  105. package/dist/cjs/router/dashboard/settings/screen.js +7 -0
  106. package/dist/cjs/router/dashboard/settings/screen.js.map +1 -1
  107. package/dist/cjs/router/shared/route-definitions.js +3 -2
  108. package/dist/cjs/router/shared/route-definitions.js.map +1 -1
  109. package/dist/cjs/router/shared/route-list.js +19 -3
  110. package/dist/cjs/router/shared/route-list.js.map +1 -1
  111. package/dist/cjs/router/shared/route-renderer.js +2 -1
  112. package/dist/cjs/router/shared/route-renderer.js.map +1 -1
  113. package/dist/docs/index.md +294 -192
  114. package/dist/esm/app/runtime-app.d.ts.map +1 -1
  115. package/dist/esm/app/runtime-app.js +4 -1
  116. package/dist/esm/app/runtime-app.js.map +1 -1
  117. package/dist/esm/components/app-sidebar.d.ts +2 -1
  118. package/dist/esm/components/app-sidebar.d.ts.map +1 -1
  119. package/dist/esm/components/app-sidebar.js +15 -4
  120. package/dist/esm/components/app-sidebar.js.map +1 -1
  121. package/dist/esm/components/media/MediaLibrary.d.ts.map +1 -1
  122. package/dist/esm/components/media/MediaLibrary.js +11 -2
  123. package/dist/esm/components/media/MediaLibrary.js.map +1 -1
  124. package/dist/esm/components/media/contexts/MediaLibraryContext.d.ts +2 -0
  125. package/dist/esm/components/media/contexts/MediaLibraryContext.d.ts.map +1 -1
  126. package/dist/esm/components/media/contexts/MediaLibraryContext.js +1 -1
  127. package/dist/esm/components/media/contexts/MediaLibraryContext.js.map +1 -1
  128. package/dist/esm/components/media/previews/MediaContextMenuContent.d.ts.map +1 -1
  129. package/dist/esm/components/media/previews/MediaContextMenuContent.js +70 -17
  130. package/dist/esm/components/media/previews/MediaContextMenuContent.js.map +1 -1
  131. package/dist/esm/components/media/previews/Previews.d.ts.map +1 -1
  132. package/dist/esm/components/media/previews/Previews.js +90 -36
  133. package/dist/esm/components/media/previews/Previews.js.map +1 -1
  134. package/dist/esm/components/media/previews/context/MediaPreviewContext.d.ts +2 -0
  135. package/dist/esm/components/media/previews/context/MediaPreviewContext.d.ts.map +1 -1
  136. package/dist/esm/components/media/previews/context/MediaPreviewContext.js.map +1 -1
  137. package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.d.ts.map +1 -1
  138. package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.js +7 -10
  139. package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.js.map +1 -1
  140. package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.d.ts.map +1 -1
  141. package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.js +3 -1
  142. package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.js.map +1 -1
  143. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.d.ts +4 -1
  144. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.d.ts.map +1 -1
  145. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.js +17 -10
  146. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.js.map +1 -1
  147. package/dist/esm/components/media/previews/utils/mediaDownload.d.ts +13 -0
  148. package/dist/esm/components/media/previews/utils/mediaDownload.d.ts.map +1 -0
  149. package/dist/esm/components/media/previews/utils/mediaDownload.js +49 -0
  150. package/dist/esm/components/media/previews/utils/mediaDownload.js.map +1 -0
  151. package/dist/esm/components/media/previews/views/PreviewsListView.js +1 -1
  152. package/dist/esm/components/media/previews/views/PreviewsListView.js.map +1 -1
  153. package/dist/esm/components/rakun-logo.d.ts +1 -5
  154. package/dist/esm/components/rakun-logo.d.ts.map +1 -1
  155. package/dist/esm/components/rakun-logo.js +1 -6
  156. package/dist/esm/components/rakun-logo.js.map +1 -1
  157. package/dist/esm/components/ui/context-menu.js +1 -1
  158. package/dist/esm/components/ui/context-menu.js.map +1 -1
  159. package/dist/esm/i18n/catalog.d.ts +645 -6
  160. package/dist/esm/i18n/catalog.d.ts.map +1 -1
  161. package/dist/esm/i18n/catalog.js +366 -6
  162. package/dist/esm/i18n/catalog.js.map +1 -1
  163. package/dist/esm/layouts.d.ts +3 -1
  164. package/dist/esm/layouts.d.ts.map +1 -1
  165. package/dist/esm/layouts.js +2 -2
  166. package/dist/esm/layouts.js.map +1 -1
  167. package/dist/esm/lib/media.d.ts +8 -0
  168. package/dist/esm/lib/media.d.ts.map +1 -1
  169. package/dist/esm/lib/media.js +1 -0
  170. package/dist/esm/lib/media.js.map +1 -1
  171. package/dist/esm/media.d.ts +19 -1
  172. package/dist/esm/media.d.ts.map +1 -1
  173. package/dist/esm/media.js +44 -0
  174. package/dist/esm/media.js.map +1 -1
  175. package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.d.ts.map +1 -1
  176. package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js +18 -7
  177. package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js.map +1 -1
  178. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.d.ts.map +1 -1
  179. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js +11 -6
  180. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js.map +1 -1
  181. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.d.ts.map +1 -1
  182. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js +2 -1
  183. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js.map +1 -1
  184. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.d.ts.map +1 -1
  185. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js +4 -3
  186. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js.map +1 -1
  187. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.d.ts.map +1 -1
  188. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js +1 -1
  189. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js.map +1 -1
  190. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.d.ts +2 -0
  191. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.d.ts.map +1 -0
  192. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js +283 -0
  193. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js.map +1 -0
  194. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.d.ts +10 -0
  195. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.d.ts.map +1 -0
  196. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js +83 -0
  197. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js.map +1 -0
  198. package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.d.ts +2 -1
  199. package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.d.ts.map +1 -1
  200. package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js +9 -1
  201. package/dist/esm/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js.map +1 -1
  202. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.d.ts.map +1 -1
  203. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js +15 -2
  204. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js.map +1 -1
  205. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.d.ts +6 -2
  206. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.d.ts.map +1 -1
  207. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js +221 -234
  208. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js.map +1 -1
  209. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.d.ts.map +1 -1
  210. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js +20 -1
  211. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js.map +1 -1
  212. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.d.ts.map +1 -1
  213. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js +27 -21
  214. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js.map +1 -1
  215. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.d.ts +4 -1
  216. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.d.ts.map +1 -1
  217. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.js.map +1 -1
  218. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.d.ts +4 -0
  219. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.d.ts.map +1 -0
  220. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js +21 -0
  221. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js.map +1 -0
  222. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.d.ts.map +1 -1
  223. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js +11 -2
  224. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js.map +1 -1
  225. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.d.ts.map +1 -1
  226. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js +38 -11
  227. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js.map +1 -1
  228. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.d.ts +4 -0
  229. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.d.ts.map +1 -0
  230. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js +130 -0
  231. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js.map +1 -0
  232. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.d.ts +14 -0
  233. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.d.ts.map +1 -0
  234. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js +5 -0
  235. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js.map +1 -0
  236. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.d.ts +23 -0
  237. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.d.ts.map +1 -0
  238. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js +103 -0
  239. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js.map +1 -0
  240. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.d.ts.map +1 -1
  241. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js +15 -2
  242. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js.map +1 -1
  243. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.d.ts +6 -0
  244. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.d.ts.map +1 -0
  245. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js +18 -0
  246. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js.map +1 -0
  247. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.d.ts +2 -1
  248. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.d.ts.map +1 -1
  249. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.js.map +1 -1
  250. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.d.ts.map +1 -1
  251. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js +2 -0
  252. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js.map +1 -1
  253. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.d.ts +43 -0
  254. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.d.ts.map +1 -1
  255. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js +198 -0
  256. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js.map +1 -1
  257. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useRouteLayoutData.d.ts.map +1 -1
  258. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.d.ts.map +1 -1
  259. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.js +10 -1
  260. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.js.map +1 -1
  261. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.types.d.ts +1 -0
  262. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.types.d.ts.map +1 -1
  263. package/dist/esm/router/dashboard/[contentType]/[edit]/screen.d.ts +2 -1
  264. package/dist/esm/router/dashboard/[contentType]/[edit]/screen.d.ts.map +1 -1
  265. package/dist/esm/router/dashboard/[contentType]/[edit]/screen.js +2 -2
  266. package/dist/esm/router/dashboard/[contentType]/[edit]/screen.js.map +1 -1
  267. package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.d.ts.map +1 -1
  268. package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.js +2 -2
  269. package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.js.map +1 -1
  270. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.d.ts +5 -0
  271. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.d.ts.map +1 -0
  272. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.js +14 -0
  273. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.js.map +1 -0
  274. package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.d.ts.map +1 -1
  275. package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.js +42 -28
  276. package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.js.map +1 -1
  277. package/dist/esm/router/dashboard/debugging/api-routes/test.d.ts.map +1 -1
  278. package/dist/esm/router/dashboard/debugging/api-routes/test.js +6 -5
  279. package/dist/esm/router/dashboard/debugging/api-routes/test.js.map +1 -1
  280. package/dist/esm/router/dashboard/seo/index.d.ts +2 -0
  281. package/dist/esm/router/dashboard/seo/index.d.ts.map +1 -0
  282. package/dist/esm/router/dashboard/seo/index.js +2 -0
  283. package/dist/esm/router/dashboard/seo/index.js.map +1 -0
  284. package/dist/esm/router/dashboard/seo/screen.d.ts +6 -0
  285. package/dist/esm/router/dashboard/seo/screen.d.ts.map +1 -0
  286. package/dist/esm/router/dashboard/seo/screen.js +212 -0
  287. package/dist/esm/router/dashboard/seo/screen.js.map +1 -0
  288. package/dist/esm/router/dashboard/seo/site-analysis.d.ts +40 -0
  289. package/dist/esm/router/dashboard/seo/site-analysis.d.ts.map +1 -0
  290. package/dist/esm/router/dashboard/seo/site-analysis.js +148 -0
  291. package/dist/esm/router/dashboard/seo/site-analysis.js.map +1 -0
  292. package/dist/esm/router/dashboard/settings/llms/index.d.ts +2 -0
  293. package/dist/esm/router/dashboard/settings/llms/index.d.ts.map +1 -0
  294. package/dist/esm/router/dashboard/settings/llms/index.js +2 -0
  295. package/dist/esm/router/dashboard/settings/llms/index.js.map +1 -0
  296. package/dist/esm/router/dashboard/settings/llms/screen.d.ts +2 -0
  297. package/dist/esm/router/dashboard/settings/llms/screen.d.ts.map +1 -0
  298. package/dist/esm/router/dashboard/settings/llms/screen.js +115 -0
  299. package/dist/esm/router/dashboard/settings/llms/screen.js.map +1 -0
  300. package/dist/esm/router/dashboard/settings/screen.d.ts.map +1 -1
  301. package/dist/esm/router/dashboard/settings/screen.js +8 -1
  302. package/dist/esm/router/dashboard/settings/screen.js.map +1 -1
  303. package/dist/esm/router/shared/route-definitions.d.ts +6 -2
  304. package/dist/esm/router/shared/route-definitions.d.ts.map +1 -1
  305. package/dist/esm/router/shared/route-definitions.js +3 -2
  306. package/dist/esm/router/shared/route-definitions.js.map +1 -1
  307. package/dist/esm/router/shared/route-list.d.ts +1 -1
  308. package/dist/esm/router/shared/route-list.d.ts.map +1 -1
  309. package/dist/esm/router/shared/route-list.js +17 -1
  310. package/dist/esm/router/shared/route-list.js.map +1 -1
  311. package/dist/esm/router/shared/route-renderer.d.ts.map +1 -1
  312. package/dist/esm/router/shared/route-renderer.js +2 -1
  313. package/dist/esm/router/shared/route-renderer.js.map +1 -1
  314. package/dist/esm/router/shared/types.d.ts +5 -0
  315. package/dist/esm/router/shared/types.d.ts.map +1 -1
  316. package/dist/styles.css +237 -6
  317. package/dist/tsconfig.build.tsbuildinfo +1 -1
  318. package/package.json +3 -3
package/README.md CHANGED
@@ -1,302 +1,371 @@
1
- # @rakun-kit/manager-react
2
-
3
- React manager UI and client utilities for Rakun.
4
-
5
- Most apps use this package through framework adapters such as
6
- `@rakun-kit/next/manager`, but the runtime components and clients are also
7
- published for custom integrations.
8
-
9
- ## Browser App
10
-
11
- Render the manager with a manager client and navigation implementation:
12
-
13
- ```tsx
14
- import {
15
- ManagerBrowserApp,
16
- createHttpManagerClient,
17
- } from "@rakun-kit/manager-react";
18
- import "@rakun-kit/manager-react/styles.css";
19
-
20
- const client = createHttpManagerClient({
21
- baseUrl: "/api/rakun",
22
- });
23
-
24
- export function ManagerPage() {
25
- return (
26
- <ManagerBrowserApp
27
- client={client}
28
- pathname={window.location.pathname}
29
- basePath="/backend"
30
- />
31
- );
32
- }
33
- ```
34
-
35
- `ManagerBrowserApp` creates browser path navigation by default. Use
36
- `ManagerRuntimeApp` when you need to provide custom navigation.
37
-
38
- ## Clients
39
-
40
- HTTP client:
41
-
42
- ```ts
43
- import { createHttpManagerClient } from "@rakun-kit/manager-react/client/http";
44
-
45
- const client = createHttpManagerClient({
46
- baseUrl: "/api/rakun",
47
- });
48
-
49
- const contentTypes = await client.request("manager.contentTypes");
50
- ```
51
-
52
- tRPC client adapter:
53
-
54
- ```ts
55
- import { createTrpcManagerClient } from "@rakun-kit/manager-react/client/trpc";
56
-
57
- const managerClient = createTrpcManagerClient(trpcProxyClient);
58
- ```
59
-
60
- Custom client:
61
-
62
- ```ts
63
- import { createManagerClient } from "@rakun-kit/manager-react/client/request";
64
-
65
- const client = createManagerClient(async (name, input, options) => {
66
- // call your transport here
67
- });
68
- ```
69
-
70
- ## Navigation
71
-
72
- Use `createPathManagerNavigation` for router integrations:
73
-
74
- ```ts
75
- import { createPathManagerNavigation } from "@rakun-kit/manager-react/state/navigation";
76
-
77
- const navigation = createPathManagerNavigation({
78
- basePath: "/backend",
79
- push: (href) => router.push(href),
80
- replace: (href) => router.replace(href),
81
- });
82
- ```
83
-
84
- ## Link fields
85
-
86
- The `f.link()` editor shows a title alongside its destination. Users can paste
87
- or type a direct URL, choose the home page, or browse configured page-route
88
- types and select one of their entries. Internal selections automatically use
89
- the item label when the title is empty. Direct links are stored as
90
- `{ href, title }`; internal links as `{ routeId, contentTypeId, title }` so core
91
- can resolve localized paths. Legacy values remain editable.
92
-
93
- Compound arrays such as `f.array(f.link())` are reorderable from their drag
94
- handles in the Info editor, without losing unsaved values inside each item.
95
-
96
- ## Media uploads
97
-
98
- Original file names may contain accents, non-Latin scripts, or emoji. The
99
- manager transports those names through ASCII-safe upload headers and core
100
- restores them before saving media metadata.
101
-
102
- With optimization enabled in the media toolbar, an image's context menu offers
103
- `Reimport with current optimization`. It regenerates the configured variants
104
- while retaining the existing media record and all relations to it. Multi-select
105
- supports the same reimport action from the selection toolbar. Optimization is
106
- on by default, and generated previews are stored as inline `data:image/...`
107
- LQIP values on the media record.
108
-
109
- ## Dynamic data mappings
110
-
111
- The list mapping editor supports recursive `blocks` targets. Select
112
- `Nested list` for a mapped list property to configure its own source, query,
113
- filters, item type, and field mapping. `Current document` query values inside
1
+ # @rakun-kit/manager-react
2
+
3
+ React manager UI and client utilities for Rakun.
4
+
5
+ Most apps use this package through framework adapters such as
6
+ `@rakun-kit/next/manager`, but the runtime components and clients are also
7
+ published for custom integrations.
8
+
9
+ ## Browser App
10
+
11
+ Render the manager with a manager client and navigation implementation:
12
+
13
+ ```tsx
14
+ import {
15
+ ManagerBrowserApp,
16
+ createHttpManagerClient,
17
+ } from "@rakun-kit/manager-react";
18
+ import "@rakun-kit/manager-react/styles.css";
19
+
20
+ const client = createHttpManagerClient({
21
+ baseUrl: "/api/rakun",
22
+ });
23
+
24
+ export function ManagerPage() {
25
+ return (
26
+ <ManagerBrowserApp
27
+ client={client}
28
+ pathname={window.location.pathname}
29
+ basePath="/backend"
30
+ />
31
+ );
32
+ }
33
+ ```
34
+
35
+ `ManagerBrowserApp` creates browser path navigation by default. Use
36
+ `ManagerRuntimeApp` when you need to provide custom navigation.
37
+
38
+ ## Clients
39
+
40
+ HTTP client:
41
+
42
+ ```ts
43
+ import { createHttpManagerClient } from "@rakun-kit/manager-react/client/http";
44
+
45
+ const client = createHttpManagerClient({
46
+ baseUrl: "/api/rakun",
47
+ });
48
+
49
+ const contentTypes = await client.request("manager.contentTypes");
50
+ ```
51
+
52
+ tRPC client adapter:
53
+
54
+ ```ts
55
+ import { createTrpcManagerClient } from "@rakun-kit/manager-react/client/trpc";
56
+
57
+ const managerClient = createTrpcManagerClient(trpcProxyClient);
58
+ ```
59
+
60
+ Custom client:
61
+
62
+ ```ts
63
+ import { createManagerClient } from "@rakun-kit/manager-react/client/request";
64
+
65
+ const client = createManagerClient(async (name, input, options) => {
66
+ // call your transport here
67
+ });
68
+ ```
69
+
70
+ ## Navigation
71
+
72
+ Use `createPathManagerNavigation` for router integrations:
73
+
74
+ ```ts
75
+ import { createPathManagerNavigation } from "@rakun-kit/manager-react/state/navigation";
76
+
77
+ const navigation = createPathManagerNavigation({
78
+ basePath: "/backend",
79
+ push: (href) => router.push(href),
80
+ replace: (href) => router.replace(href),
81
+ });
82
+ ```
83
+
84
+ ## Link fields
85
+
86
+ The `f.link()` editor shows a title alongside its destination. Users can paste
87
+ or type a direct URL, choose the home page, or browse configured page-route
88
+ types and select one of their entries. Internal selections automatically use
89
+ the item label when the title is empty. Direct links are stored as
90
+ `{ href, title }`; internal links as `{ routeId, contentTypeId, title }` so core
91
+ can resolve localized paths. Persisted legacy URL strings are normalized to
92
+ `{ href, title: '' }` when loaded and remain editable.
93
+
94
+ Compound arrays such as `f.array(f.link())` are reorderable from their drag
95
+ handles in the Info editor, without losing unsaved values inside each item.
96
+
97
+ `f.menu()` provides a navigation-tree editor intended especially for headers.
98
+ Every item uses the same internal/direct destination picker as `f.link()` and
99
+ can contain child items. Drag vertically to reorder and horizontally to nest or
100
+ outdent; the level buttons provide the same operations for keyboard users.
101
+ Removing an item also removes its descendant subtree.
102
+
103
+ ## Media uploads
104
+
105
+ Original file names may contain accents, non-Latin scripts, or emoji. The
106
+ manager transports those names through ASCII-safe upload headers and core
107
+ restores them before saving media metadata.
108
+
109
+ The optimization popover separates Image and Video settings through its Format
110
+ selector. Images retain their normal format and responsive-image controls;
111
+ videos have their own quality and are converted to both MP4 and WebM.
112
+
113
+ With optimization enabled in the media toolbar, an image or video's context
114
+ menu offers `Reimport`. It regenerates the configured outputs while retaining
115
+ the existing media record and all relations to it. Multi-select supports the
116
+ same reimport action from the selection toolbar. Optimization is on by default,
117
+ and generated image previews are stored as inline `data:image/...` LQIP values
118
+ on the media record.
119
+
120
+ An image's context menu also offers `Replace image`. The selected file replaces
121
+ the stored image and generated variants while retaining the existing media ID,
122
+ name, title, alt text, folder, status, and every relation to it. Rakun also
123
+ revalidates directly referencing pages when route revalidation is configured.
124
+
125
+ ## Dynamic data mappings
126
+
127
+ Fields configured with core `.help(text)` show a compact help icon beside their
128
+ label. Activating it opens the guidance in a popover, including for inline
129
+ modules and nested content types. Translation keys are resolved with the active
130
+ manager locale, while unregistered strings are displayed directly.
131
+
132
+ The list mapping editor supports recursive `blocks` targets. Select
133
+ `Nested list` for a mapped list property to configure its own source, query,
134
+ filters, item type, and field mapping. `Current document` query values inside
114
135
  that nested editor resolve against the parent source item.
115
136
 
137
+ Arrays of links and arrays of relations, including `relation().multiple()`, can
138
+ choose `Direct field` to bind the whole array or `Nested list` to map every
139
+ source item. Link items show `title` and `href`; relation items show the fields
140
+ of the related content type. Unlike `blocks`, these homogeneous arrays do not
141
+ add a `{ name, value }` wrapper to resolved items.
142
+
143
+ When an array or `.multiple()` relation, file, select, or content-reference field
144
+ declares core `.min(count)` or `.max(count)` limits, its editor shows the current
145
+ count and configured range. It reports values outside that range and prevents
146
+ confirming or adding beyond the maximum.
147
+
148
+ A target link appears as separate `<field>.title` and `<field>.href` mapping
149
+ rows, so its label and destination can come from different source fields.
150
+
116
151
  SEO field mappings can use compatible fields from the full current document.
117
152
  New documents also honor core string-field `.seo('<seoField>')` configuration
118
153
  as an editable initial dynamic data binding.
119
-
120
- ## Styles
121
-
122
- Import the package stylesheet once:
123
-
124
- ```ts
125
- import "@rakun-kit/manager-react/styles.css";
126
- ```
127
-
128
- ## Manager languages
129
-
130
- English and the locale runtime are built into this package. Extra translations
131
- ship from a separate package:
132
-
133
- ```sh
134
- bun add @rakun-kit/manager-locales
135
- # or: npm install @rakun-kit/manager-locales
136
- ```
137
-
138
- Import only the locale needed by the server bootstrap:
139
-
140
- ```ts
141
- import { esManagerLocalePack } from '@rakun-kit/manager-locales/es'
142
-
143
- rakunBootstrap({
144
- // ...
145
- managerLanguages: [esManagerLocalePack],
146
- })
147
- ```
148
-
149
- Each language has an independent subpath, so application bundlers only include
150
- the locales explicitly imported by the host.
151
-
152
- Content-type titles and categories can use project-defined message keys without
153
- adding them to the built-in `ManagerMessageKey` union. Add an English partial
154
- pack and extend installed locales through `managerLanguages`:
155
-
156
- ```ts
157
- import { extendManagerLanguagePack } from '@rakun-kit/core/contracts'
158
- import { esManagerLocalePack } from '@rakun-kit/manager-locales/es'
159
-
160
- const managerLanguages = [
161
- {
162
- code: 'en',
163
- name: 'English',
164
- messages: {
165
- 'field.title': 'Title',
166
- 'layoutModule.header': 'Header',
167
- 'project.contentTypes.article.menu': 'Articles',
168
- },
169
- },
170
- extendManagerLanguagePack(esManagerLocalePack, {
171
- 'field.title': 'Título',
172
- 'layoutModule.header': 'Cabecera',
173
- 'project.contentTypes.article.menu': 'Artículos',
174
- }),
175
- ]
176
- ```
177
-
178
- Then set `menu.title` or `menu.category` to that arbitrary key. Project keys are
179
- resolved at runtime but remain outside the static manager catalog.
180
-
181
- Field labels use the dynamic `field.<fieldName>` namespace. A content-type field
182
- named `title`, for example, automatically resolves `field.title` in edit forms
183
- and list columns without adding it to `ManagerMessageKey`.
184
-
185
- Layout module labels follow `layoutModule.<layoutKey>`. For example, the
186
- `header` slot automatically resolves `layoutModule.header` in its tab and
187
- configuration panel.
188
-
189
- ## Event Logs
190
-
191
- Settings Logs displays the persistent Rakun event stream through the native
192
- `manager.logs.list` operation. The screen supports filters, cursor pagination,
193
- and structured event details. Both the settings card and the operation require
194
- the `system.eventLog.read` permission, which can be assigned from Settings →
195
- User Roles.
196
-
197
- ## Manager Plugins
198
-
199
- Manager plugins run inside the normal providers and can add dashboard routes,
200
- sidebar items, and custom field editors:
201
-
202
- ```tsx
203
- import {
204
- defineRakunManagerPlugin,
205
- ManagerBrowserApp,
206
- } from '@rakun-kit/manager-react'
207
-
208
- const analyticsManagerPlugin = defineRakunManagerPlugin({
209
- id: '@acme/rakun-analytics',
210
- routes: [{
211
- id: 'dashboard',
212
- path: '/analytics',
213
- component: AnalyticsScreen,
214
- permissions: ['plugin.analytics.view'],
215
- }],
216
- sidebar: [{
217
- id: 'analytics',
218
- title: 'Analytics',
219
- routeId: 'dashboard',
220
- position: 'primary',
221
- group: 'Plugins',
222
- }],
223
- fieldEditors: {
224
- '@acme/rakun-analytics.query': QueryEditor,
225
- },
226
- })
227
-
228
- <ManagerBrowserApp plugins={[analyticsManagerPlugin]} {...props} />
229
- ```
230
-
231
- Use `ManagerFieldEditorProps`, `ManagerFieldEditorRef`, and
232
- `useManagerFieldValue` from `@rakun-kit/manager-react/plugins` when implementing
233
- field editors. Next.js applications should import plugin objects inside a
234
- `'use client'` wrapper around `RakunManagerClientPage`; `RakunManagerPage` accepts
235
- that wrapper through `managerComponent`.
236
-
237
- ### Extending the RichText editor
238
-
239
- Manager plugins can register Lexical nodes and React plugins for every
240
- `RichText` field, including fields rendered inside relations, blocks, and
241
- modules:
242
-
243
- ```tsx
244
- 'use client'
245
-
246
- import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
247
- import {
248
- defineRakunManagerPlugin,
249
- type ManagerRichTextPluginProps,
250
- } from '@rakun-kit/manager-react/plugins'
251
- import { MentionNode } from './MentionNode'
252
-
253
- const MentionsPlugin = ({ id }: ManagerRichTextPluginProps) => {
254
- const [editor] = useLexicalComposerContext()
255
-
256
- // Register commands and listeners on `editor` here.
257
- return null
258
- }
259
-
260
- export const mentionsManagerPlugin = defineRakunManagerPlugin({
261
- id: '@acme/rakun-mentions',
262
- richText: {
263
- nodes: [MentionNode],
264
- plugins: [
265
- {
266
- id: '@acme/rakun-mentions.plugin',
267
- component: MentionsPlugin,
268
- placement: 'editor',
269
- },
270
- ],
271
- },
272
- })
273
- ```
274
-
275
- Lexical plugin components receive `ManagerRichTextPluginProps` (the field id,
276
- configuration, current content type, and related field metadata) and render
277
- inside `LexicalComposer`, so they can use the normal Lexical React hooks.
278
- Supported placements are `toolbar`, `block-format`, `editor` (the default),
279
- `actions-start`, and `actions-end`. `block-format` components render inside the
280
- manager's block selector and can use `ManagerRichTextBlockFormatItem` from
281
- `@rakun-kit/manager-react/rich-text`. Contributions keep declaration order
282
- unless an explicit `order` is provided. Node types and plugin ids must be unique;
283
- conflicts report both plugin owners. Node replacements use Lexical's standard
284
- `LexicalNodeReplacement` configuration.
285
-
286
- ## Exports
287
-
288
- - `@rakun-kit/manager-react`: manager app, providers, clients, navigation, router, layout, media, and state helpers.
289
- - `@rakun-kit/manager-react/client/http`: HTTP manager client.
290
- - `@rakun-kit/manager-react/client/request`: transport-agnostic manager client.
291
- - `@rakun-kit/manager-react/client/trpc`: tRPC proxy client adapter.
292
- - `@rakun-kit/manager-react/app/runtime-app`: `ManagerRuntimeApp`, `ManagerBrowserApp`.
293
- - `@rakun-kit/manager-react/state/navigation`: navigation helpers and provider.
294
- - `@rakun-kit/manager-react/link`: link component provider.
295
- - `@rakun-kit/manager-react/i18n`: locale runtime, catalog, and locale types.
296
- - `@rakun-kit/manager-react/styles.css`: bundled manager styles.
297
-
298
- ## Build
299
-
300
- ```sh
301
- bun run build --workspace @rakun-kit/manager-react
302
- ```
154
+
155
+ ## llms.txt settings
156
+
157
+ Settings → AI content manages the optional, site-level `llms.txt` Markdown guide served to
158
+ AI tools. Editors can enable publishing, override the SEO-derived title and
159
+ summary, add guidance, and order sections containing internal pages or external
160
+ URLs. Marking a section as Secondary content places it under `## Optional`
161
+ while preserving its title as a subsection in the generated document. For content types with publication states, the internal
162
+ page picker only offers published documents. Nothing is added automatically
163
+ from the sitemap.
164
+
165
+ Authenticated manager layouts place a Visit site action at the top-right of the
166
+ logo block. It opens SEO `siteUrl` in a new tab, falling back to `/` on the
167
+ manager host until that setting is configured. A published document with a
168
+ resolved page route also gets a contextual View page button in its edit toolbar;
169
+ the URL follows the selected manager language and locale variant.
170
+
171
+ Routeable content splits its SEO tab into Metadata and Analysis. Generate
172
+ report renders the current unsaved form through the configured preview and
173
+ reports metadata lengths, heading structure, missing image alt attributes,
174
+ indexability, social metadata, rendered JSON-LD blocks, and Google and sharing
175
+ previews. JSON-LD results identify invalid JSON and missing `@context` or
176
+ `@type`. For saved documents, the report is stored with its score and date when
177
+ the editor can create SEO reports. Previous reports for the active language and
178
+ route can be reopened directly from the document's Analysis view. A protective
179
+ `noindex` on the temporary preview URL does not affect the content's
180
+ indexability result.
181
+
182
+ The secondary sidebar also includes a site-wide SEO screen above the media
183
+ library. It audits stored metadata for published routeable documents in the
184
+ active language, highlights duplicates and incomplete custom Open Graph data,
185
+ and stores every run so its score can be followed over time. Access and report
186
+ creation reuse the `SeoSettings` read and own permissions. Evolution snapshots
187
+ and recent page reports are fetched and displayed in bounded, paginated groups.
188
+
189
+ ## Styles
190
+
191
+ Import the package stylesheet once:
192
+
193
+ ```ts
194
+ import "@rakun-kit/manager-react/styles.css";
195
+ ```
196
+
197
+ ## Manager languages
198
+
199
+ English and the locale runtime are built into this package. Extra translations
200
+ ship from a separate package:
201
+
202
+ ```sh
203
+ bun add @rakun-kit/manager-locales
204
+ # or: npm install @rakun-kit/manager-locales
205
+ ```
206
+
207
+ Import only the locale needed by the server bootstrap:
208
+
209
+ ```ts
210
+ import { esManagerLocalePack } from '@rakun-kit/manager-locales/es'
211
+
212
+ rakunBootstrap({
213
+ // ...
214
+ managerLanguages: [esManagerLocalePack],
215
+ })
216
+ ```
217
+
218
+ Each language has an independent subpath, so application bundlers only include
219
+ the locales explicitly imported by the host.
220
+
221
+ Content-type titles and categories can use project-defined message keys without
222
+ adding them to the built-in `ManagerMessageKey` union. Add an English partial
223
+ pack and extend installed locales through `managerLanguages`:
224
+
225
+ ```ts
226
+ import { extendManagerLanguagePack } from '@rakun-kit/core/contracts'
227
+ import { esManagerLocalePack } from '@rakun-kit/manager-locales/es'
228
+
229
+ const managerLanguages = [
230
+ {
231
+ code: 'en',
232
+ name: 'English',
233
+ messages: {
234
+ 'field.title': 'Title',
235
+ 'layoutModule.header': 'Header',
236
+ 'project.contentTypes.article.menu': 'Articles',
237
+ },
238
+ },
239
+ extendManagerLanguagePack(esManagerLocalePack, {
240
+ 'field.title': 'Título',
241
+ 'layoutModule.header': 'Cabecera',
242
+ 'project.contentTypes.article.menu': 'Artículos',
243
+ }),
244
+ ]
245
+ ```
246
+
247
+ Then set `menu.title` or `menu.category` to that arbitrary key. Project keys are
248
+ resolved at runtime but remain outside the static manager catalog.
249
+
250
+ Field labels use the dynamic `field.<fieldName>` namespace. A content-type field
251
+ named `title`, for example, automatically resolves `field.title` in edit forms
252
+ and list columns without adding it to `ManagerMessageKey`.
253
+
254
+ Layout module labels follow `layoutModule.<layoutKey>`. For example, the
255
+ `header` slot automatically resolves `layoutModule.header` in its tab and
256
+ configuration panel.
257
+
258
+ ## Event Logs
259
+
260
+ Settings → Logs displays the persistent Rakun event stream through the native
261
+ `manager.logs.list` operation. The screen supports filters, cursor pagination,
262
+ and structured event details. Both the settings card and the operation require
263
+ the `system.eventLog.read` permission, which can be assigned from Settings →
264
+ User Roles.
265
+
266
+ ## Manager Plugins
267
+
268
+ Manager plugins run inside the normal providers and can add dashboard routes,
269
+ sidebar items, and custom field editors:
270
+
271
+ ```tsx
272
+ import {
273
+ defineRakunManagerPlugin,
274
+ ManagerBrowserApp,
275
+ } from '@rakun-kit/manager-react'
276
+
277
+ const analyticsManagerPlugin = defineRakunManagerPlugin({
278
+ id: '@acme/rakun-analytics',
279
+ routes: [{
280
+ id: 'dashboard',
281
+ path: '/analytics',
282
+ component: AnalyticsScreen,
283
+ permissions: ['plugin.analytics.view'],
284
+ }],
285
+ sidebar: [{
286
+ id: 'analytics',
287
+ title: 'Analytics',
288
+ routeId: 'dashboard',
289
+ position: 'primary',
290
+ group: 'Plugins',
291
+ }],
292
+ fieldEditors: {
293
+ '@acme/rakun-analytics.query': QueryEditor,
294
+ },
295
+ })
296
+
297
+ <ManagerBrowserApp plugins={[analyticsManagerPlugin]} {...props} />
298
+ ```
299
+
300
+ Use `ManagerFieldEditorProps`, `ManagerFieldEditorRef`, and
301
+ `useManagerFieldValue` from `@rakun-kit/manager-react/plugins` when implementing
302
+ field editors. Next.js applications should import plugin objects inside a
303
+ `'use client'` wrapper around `RakunManagerClientPage`; `RakunManagerPage` accepts
304
+ that wrapper through `managerComponent`.
305
+
306
+ ### Extending the RichText editor
307
+
308
+ Manager plugins can register Lexical nodes and React plugins for every
309
+ `RichText` field, including fields rendered inside relations, blocks, and
310
+ modules:
311
+
312
+ ```tsx
313
+ 'use client'
314
+
315
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
316
+ import {
317
+ defineRakunManagerPlugin,
318
+ type ManagerRichTextPluginProps,
319
+ } from '@rakun-kit/manager-react/plugins'
320
+ import { MentionNode } from './MentionNode'
321
+
322
+ const MentionsPlugin = ({ id }: ManagerRichTextPluginProps) => {
323
+ const [editor] = useLexicalComposerContext()
324
+
325
+ // Register commands and listeners on `editor` here.
326
+ return null
327
+ }
328
+
329
+ export const mentionsManagerPlugin = defineRakunManagerPlugin({
330
+ id: '@acme/rakun-mentions',
331
+ richText: {
332
+ nodes: [MentionNode],
333
+ plugins: [
334
+ {
335
+ id: '@acme/rakun-mentions.plugin',
336
+ component: MentionsPlugin,
337
+ placement: 'editor',
338
+ },
339
+ ],
340
+ },
341
+ })
342
+ ```
343
+
344
+ Lexical plugin components receive `ManagerRichTextPluginProps` (the field id,
345
+ configuration, current content type, and related field metadata) and render
346
+ inside `LexicalComposer`, so they can use the normal Lexical React hooks.
347
+ Supported placements are `toolbar`, `block-format`, `editor` (the default),
348
+ `actions-start`, and `actions-end`. `block-format` components render inside the
349
+ manager's block selector and can use `ManagerRichTextBlockFormatItem` from
350
+ `@rakun-kit/manager-react/rich-text`. Contributions keep declaration order
351
+ unless an explicit `order` is provided. Node types and plugin ids must be unique;
352
+ conflicts report both plugin owners. Node replacements use Lexical's standard
353
+ `LexicalNodeReplacement` configuration.
354
+
355
+ ## Exports
356
+
357
+ - `@rakun-kit/manager-react`: manager app, providers, clients, navigation, router, layout, media, and state helpers.
358
+ - `@rakun-kit/manager-react/client/http`: HTTP manager client.
359
+ - `@rakun-kit/manager-react/client/request`: transport-agnostic manager client.
360
+ - `@rakun-kit/manager-react/client/trpc`: tRPC proxy client adapter.
361
+ - `@rakun-kit/manager-react/app/runtime-app`: `ManagerRuntimeApp`, `ManagerBrowserApp`.
362
+ - `@rakun-kit/manager-react/state/navigation`: navigation helpers and provider.
363
+ - `@rakun-kit/manager-react/link`: link component provider.
364
+ - `@rakun-kit/manager-react/i18n`: locale runtime, catalog, and locale types.
365
+ - `@rakun-kit/manager-react/styles.css`: bundled manager styles.
366
+
367
+ ## Build
368
+
369
+ ```sh
370
+ bun run build --workspace @rakun-kit/manager-react
371
+ ```