@rakun-kit/manager-react 1.5.10 → 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 (261) hide show
  1. package/README.md +348 -295
  2. package/dist/cjs/components/app-sidebar.js +10 -0
  3. package/dist/cjs/components/app-sidebar.js.map +1 -1
  4. package/dist/cjs/components/media/MediaLibrary.js +10 -1
  5. package/dist/cjs/components/media/MediaLibrary.js.map +1 -1
  6. package/dist/cjs/components/media/contexts/MediaLibraryContext.js +1 -1
  7. package/dist/cjs/components/media/contexts/MediaLibraryContext.js.map +1 -1
  8. package/dist/cjs/components/media/previews/MediaContextMenuContent.js +68 -15
  9. package/dist/cjs/components/media/previews/MediaContextMenuContent.js.map +1 -1
  10. package/dist/cjs/components/media/previews/Previews.js +89 -35
  11. package/dist/cjs/components/media/previews/Previews.js.map +1 -1
  12. package/dist/cjs/components/media/previews/context/MediaPreviewContext.js.map +1 -1
  13. package/dist/cjs/components/media/previews/dialogs/ExpandedPreviewDialog.js +7 -10
  14. package/dist/cjs/components/media/previews/dialogs/ExpandedPreviewDialog.js.map +1 -1
  15. package/dist/cjs/components/media/previews/hooks/useMediaPreviewRenderer.js +3 -1
  16. package/dist/cjs/components/media/previews/hooks/useMediaPreviewRenderer.js.map +1 -1
  17. package/dist/cjs/components/media/previews/toolbar/PreviewsToolbar.js +16 -9
  18. package/dist/cjs/components/media/previews/toolbar/PreviewsToolbar.js.map +1 -1
  19. package/dist/cjs/components/media/previews/utils/mediaDownload.js +54 -0
  20. package/dist/cjs/components/media/previews/utils/mediaDownload.js.map +1 -0
  21. package/dist/cjs/components/media/previews/views/PreviewsListView.js +1 -1
  22. package/dist/cjs/components/media/previews/views/PreviewsListView.js.map +1 -1
  23. package/dist/cjs/components/rakun-logo.js +4 -9
  24. package/dist/cjs/components/rakun-logo.js.map +1 -1
  25. package/dist/cjs/components/ui/context-menu.js +1 -1
  26. package/dist/cjs/components/ui/context-menu.js.map +1 -1
  27. package/dist/cjs/i18n/catalog.js +343 -9
  28. package/dist/cjs/i18n/catalog.js.map +1 -1
  29. package/dist/cjs/lib/media.js +1 -0
  30. package/dist/cjs/lib/media.js.map +1 -1
  31. package/dist/cjs/media.js +45 -0
  32. package/dist/cjs/media.js.map +1 -1
  33. package/dist/cjs/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js +15 -4
  34. package/dist/cjs/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js.map +1 -1
  35. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js +11 -6
  36. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/ContentCommentsDrawer.js.map +1 -1
  37. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js +2 -1
  38. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js.map +1 -1
  39. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js +2 -1
  40. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js.map +1 -1
  41. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js +1 -1
  42. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js.map +1 -1
  43. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js +290 -0
  44. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js.map +1 -0
  45. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js +88 -0
  46. package/dist/cjs/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js.map +1 -0
  47. package/dist/cjs/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js +1 -1
  48. package/dist/cjs/router/dashboard/[contentType]/[edit]/_context/EditPageContext.js.map +1 -1
  49. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js +15 -2
  50. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js.map +1 -1
  51. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js +222 -232
  52. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js.map +1 -1
  53. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js +20 -1
  54. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js.map +1 -1
  55. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js +27 -21
  56. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js.map +1 -1
  57. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.js.map +1 -1
  58. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js +25 -0
  59. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js.map +1 -0
  60. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js +10 -1
  61. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js.map +1 -1
  62. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js +38 -11
  63. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js.map +1 -1
  64. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js +135 -0
  65. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js.map +1 -0
  66. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js +10 -0
  67. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js.map +1 -0
  68. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js +113 -0
  69. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js.map +1 -0
  70. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js +15 -2
  71. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js.map +1 -1
  72. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js +22 -0
  73. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js.map +1 -0
  74. package/dist/cjs/router/dashboard/[contentType]/[edit]/_fields/shared/index.js.map +1 -1
  75. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js +1 -0
  76. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentDocumentActions.js.map +1 -1
  77. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js +198 -0
  78. package/dist/cjs/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js.map +1 -1
  79. package/dist/cjs/router/dashboard/[contentType]/[edit]/edit.js +10 -1
  80. package/dist/cjs/router/dashboard/[contentType]/[edit]/edit.js.map +1 -1
  81. package/dist/cjs/router/dashboard/debugging/api-routes/ApiTest.js +2 -2
  82. package/dist/cjs/router/dashboard/debugging/api-routes/ApiTest.js.map +1 -1
  83. package/dist/cjs/router/dashboard/debugging/api-routes/JsonViewer.js +17 -0
  84. package/dist/cjs/router/dashboard/debugging/api-routes/JsonViewer.js.map +1 -0
  85. package/dist/cjs/router/dashboard/debugging/api-routes/SchemaViewer.js +40 -26
  86. package/dist/cjs/router/dashboard/debugging/api-routes/SchemaViewer.js.map +1 -1
  87. package/dist/cjs/router/dashboard/debugging/api-routes/test.js +6 -5
  88. package/dist/cjs/router/dashboard/debugging/api-routes/test.js.map +1 -1
  89. package/dist/cjs/router/dashboard/seo/index.js +6 -0
  90. package/dist/cjs/router/dashboard/seo/index.js.map +1 -0
  91. package/dist/cjs/router/dashboard/seo/screen.js +219 -0
  92. package/dist/cjs/router/dashboard/seo/screen.js.map +1 -0
  93. package/dist/cjs/router/dashboard/seo/site-analysis.js +153 -0
  94. package/dist/cjs/router/dashboard/seo/site-analysis.js.map +1 -0
  95. package/dist/cjs/router/shared/route-list.js +10 -2
  96. package/dist/cjs/router/shared/route-list.js.map +1 -1
  97. package/dist/docs/index.md +283 -194
  98. package/dist/esm/components/app-sidebar.d.ts.map +1 -1
  99. package/dist/esm/components/app-sidebar.js +11 -1
  100. package/dist/esm/components/app-sidebar.js.map +1 -1
  101. package/dist/esm/components/media/MediaLibrary.d.ts.map +1 -1
  102. package/dist/esm/components/media/MediaLibrary.js +11 -2
  103. package/dist/esm/components/media/MediaLibrary.js.map +1 -1
  104. package/dist/esm/components/media/contexts/MediaLibraryContext.d.ts +2 -0
  105. package/dist/esm/components/media/contexts/MediaLibraryContext.d.ts.map +1 -1
  106. package/dist/esm/components/media/contexts/MediaLibraryContext.js +1 -1
  107. package/dist/esm/components/media/contexts/MediaLibraryContext.js.map +1 -1
  108. package/dist/esm/components/media/previews/MediaContextMenuContent.d.ts.map +1 -1
  109. package/dist/esm/components/media/previews/MediaContextMenuContent.js +70 -17
  110. package/dist/esm/components/media/previews/MediaContextMenuContent.js.map +1 -1
  111. package/dist/esm/components/media/previews/Previews.d.ts.map +1 -1
  112. package/dist/esm/components/media/previews/Previews.js +90 -36
  113. package/dist/esm/components/media/previews/Previews.js.map +1 -1
  114. package/dist/esm/components/media/previews/context/MediaPreviewContext.d.ts +2 -0
  115. package/dist/esm/components/media/previews/context/MediaPreviewContext.d.ts.map +1 -1
  116. package/dist/esm/components/media/previews/context/MediaPreviewContext.js.map +1 -1
  117. package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.d.ts.map +1 -1
  118. package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.js +7 -10
  119. package/dist/esm/components/media/previews/dialogs/ExpandedPreviewDialog.js.map +1 -1
  120. package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.d.ts.map +1 -1
  121. package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.js +3 -1
  122. package/dist/esm/components/media/previews/hooks/useMediaPreviewRenderer.js.map +1 -1
  123. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.d.ts +4 -1
  124. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.d.ts.map +1 -1
  125. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.js +17 -10
  126. package/dist/esm/components/media/previews/toolbar/PreviewsToolbar.js.map +1 -1
  127. package/dist/esm/components/media/previews/utils/mediaDownload.d.ts +13 -0
  128. package/dist/esm/components/media/previews/utils/mediaDownload.d.ts.map +1 -0
  129. package/dist/esm/components/media/previews/utils/mediaDownload.js +49 -0
  130. package/dist/esm/components/media/previews/utils/mediaDownload.js.map +1 -0
  131. package/dist/esm/components/media/previews/views/PreviewsListView.js +1 -1
  132. package/dist/esm/components/media/previews/views/PreviewsListView.js.map +1 -1
  133. package/dist/esm/components/rakun-logo.d.ts +1 -5
  134. package/dist/esm/components/rakun-logo.d.ts.map +1 -1
  135. package/dist/esm/components/rakun-logo.js +1 -6
  136. package/dist/esm/components/rakun-logo.js.map +1 -1
  137. package/dist/esm/components/ui/context-menu.js +1 -1
  138. package/dist/esm/components/ui/context-menu.js.map +1 -1
  139. package/dist/esm/i18n/catalog.d.ts +564 -9
  140. package/dist/esm/i18n/catalog.d.ts.map +1 -1
  141. package/dist/esm/i18n/catalog.js +327 -7
  142. package/dist/esm/i18n/catalog.js.map +1 -1
  143. package/dist/esm/lib/media.d.ts +8 -0
  144. package/dist/esm/lib/media.d.ts.map +1 -1
  145. package/dist/esm/lib/media.js +1 -0
  146. package/dist/esm/lib/media.js.map +1 -1
  147. package/dist/esm/media.d.ts +19 -1
  148. package/dist/esm/media.d.ts.map +1 -1
  149. package/dist/esm/media.js +44 -0
  150. package/dist/esm/media.js.map +1 -1
  151. package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.d.ts.map +1 -1
  152. package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js +18 -7
  153. package/dist/esm/router/dashboard/[contentType]/[edit]/ContentTypeEdit.js.map +1 -1
  154. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.d.ts.map +1 -1
  155. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js +2 -1
  156. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditTabPanels.js.map +1 -1
  157. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.d.ts.map +1 -1
  158. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js +2 -1
  159. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/EditToolbar.js.map +1 -1
  160. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.d.ts.map +1 -1
  161. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js +1 -1
  162. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/PreviewPanel.js.map +1 -1
  163. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.d.ts +2 -0
  164. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.d.ts.map +1 -0
  165. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js +283 -0
  166. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.js.map +1 -0
  167. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.d.ts +10 -0
  168. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.d.ts.map +1 -0
  169. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js +83 -0
  170. package/dist/esm/router/dashboard/[contentType]/[edit]/_components/seo-analysis.js.map +1 -0
  171. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.d.ts.map +1 -1
  172. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js +15 -2
  173. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.js.map +1 -1
  174. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.d.ts +6 -2
  175. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.d.ts.map +1 -1
  176. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js +221 -234
  177. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.js.map +1 -1
  178. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.d.ts.map +1 -1
  179. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js +20 -1
  180. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/FileField/index.js.map +1 -1
  181. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.d.ts.map +1 -1
  182. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js +16 -19
  183. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/LinkUI.js.map +1 -1
  184. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.d.ts +2 -0
  185. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.d.ts.map +1 -1
  186. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/index.js.map +1 -1
  187. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.d.ts +4 -0
  188. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.d.ts.map +1 -0
  189. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js +21 -0
  190. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/LinkField/linkValue.js.map +1 -0
  191. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.d.ts.map +1 -1
  192. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js +11 -2
  193. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/IteratorModulePicker.js.map +1 -1
  194. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.d.ts.map +1 -1
  195. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js +38 -11
  196. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/ListField/SimpleListUI.js.map +1 -1
  197. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.d.ts +4 -0
  198. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.d.ts.map +1 -0
  199. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js +130 -0
  200. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/MenuUI.js.map +1 -0
  201. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.d.ts +14 -0
  202. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.d.ts.map +1 -0
  203. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js +5 -0
  204. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/index.js.map +1 -0
  205. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.d.ts +23 -0
  206. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.d.ts.map +1 -0
  207. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js +103 -0
  208. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/MenuField/menuTree.js.map +1 -0
  209. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.d.ts.map +1 -1
  210. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js +15 -2
  211. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/Select/MultiSelectUI.js.map +1 -1
  212. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.d.ts +6 -0
  213. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.d.ts.map +1 -0
  214. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js +18 -0
  215. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/ItemLimitStatus.js.map +1 -0
  216. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.d.ts +2 -1
  217. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.d.ts.map +1 -1
  218. package/dist/esm/router/dashboard/[contentType]/[edit]/_fields/shared/index.js.map +1 -1
  219. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.d.ts +43 -0
  220. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.d.ts.map +1 -1
  221. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js +198 -0
  222. package/dist/esm/router/dashboard/[contentType]/[edit]/_hooks/useContentPreview.js.map +1 -1
  223. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.d.ts.map +1 -1
  224. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.js +10 -1
  225. package/dist/esm/router/dashboard/[contentType]/[edit]/edit.js.map +1 -1
  226. package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.d.ts.map +1 -1
  227. package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.js +2 -2
  228. package/dist/esm/router/dashboard/debugging/api-routes/ApiTest.js.map +1 -1
  229. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.d.ts +5 -0
  230. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.d.ts.map +1 -0
  231. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.js +14 -0
  232. package/dist/esm/router/dashboard/debugging/api-routes/JsonViewer.js.map +1 -0
  233. package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.d.ts.map +1 -1
  234. package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.js +42 -28
  235. package/dist/esm/router/dashboard/debugging/api-routes/SchemaViewer.js.map +1 -1
  236. package/dist/esm/router/dashboard/debugging/api-routes/test.d.ts.map +1 -1
  237. package/dist/esm/router/dashboard/debugging/api-routes/test.js +6 -5
  238. package/dist/esm/router/dashboard/debugging/api-routes/test.js.map +1 -1
  239. package/dist/esm/router/dashboard/seo/index.d.ts +2 -0
  240. package/dist/esm/router/dashboard/seo/index.d.ts.map +1 -0
  241. package/dist/esm/router/dashboard/seo/index.js +2 -0
  242. package/dist/esm/router/dashboard/seo/index.js.map +1 -0
  243. package/dist/esm/router/dashboard/seo/screen.d.ts +6 -0
  244. package/dist/esm/router/dashboard/seo/screen.d.ts.map +1 -0
  245. package/dist/esm/router/dashboard/seo/screen.js +212 -0
  246. package/dist/esm/router/dashboard/seo/screen.js.map +1 -0
  247. package/dist/esm/router/dashboard/seo/site-analysis.d.ts +40 -0
  248. package/dist/esm/router/dashboard/seo/site-analysis.d.ts.map +1 -0
  249. package/dist/esm/router/dashboard/seo/site-analysis.js +148 -0
  250. package/dist/esm/router/dashboard/seo/site-analysis.js.map +1 -0
  251. package/dist/esm/router/shared/route-definitions.d.ts +4 -2
  252. package/dist/esm/router/shared/route-definitions.d.ts.map +1 -1
  253. package/dist/esm/router/shared/route-list.d.ts +1 -1
  254. package/dist/esm/router/shared/route-list.d.ts.map +1 -1
  255. package/dist/esm/router/shared/route-list.js +8 -0
  256. package/dist/esm/router/shared/route-list.js.map +1 -1
  257. package/dist/esm/router/shared/types.d.ts +2 -0
  258. package/dist/esm/router/shared/types.d.ts.map +1 -1
  259. package/dist/styles.css +237 -6
  260. package/dist/tsconfig.build.tsbuildinfo +1 -1
  261. package/package.json +3 -3
@@ -0,0 +1,283 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Braces, CheckCircle2, CircleX, History, RotateCcw, Search, Share2, Tags, TriangleAlert, } from 'lucide-react';
4
+ import { useEffect, useMemo, useState } from 'react';
5
+ import ContentTypeEdit from '../ContentTypeEdit.js';
6
+ import { useEditPageContext } from '../_context/EditPageContext.js';
7
+ import { buildSeoChecks, getSeoScore } from './seo-analysis.js';
8
+ import { useManagerQuery } from '../../../../../client/react.js';
9
+ import { Badge } from '../../../../../components/ui/badge.js';
10
+ import { Button } from '../../../../../components/ui/button.js';
11
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../../../../components/ui/card.js';
12
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../../../../components/ui/tabs.js';
13
+ import { cn } from '../../../../../lib/utils.js';
14
+ import { useTranslations } from '../../../../../i18n/index.js';
15
+ import { formatDate } from '../../../../../helpers/formatDate.js';
16
+ import { getActionErrorMessage } from '../../../../../helpers/get-action-error-message.js';
17
+ import { useSession } from '../../../../../state/session.js';
18
+ const statusStyles = {
19
+ good: 'border-emerald-500/30 bg-emerald-500/5 text-emerald-700 dark:text-emerald-300',
20
+ warning: 'border-amber-500/30 bg-amber-500/5 text-amber-700 dark:text-amber-300',
21
+ error: 'border-destructive/30 bg-destructive/5 text-destructive',
22
+ };
23
+ const StatusIcon = ({ status }) => {
24
+ if (status === 'good')
25
+ return _jsx(CheckCircle2, { className: "size-4" });
26
+ if (status === 'warning')
27
+ return _jsx(TriangleAlert, { className: "size-4" });
28
+ return _jsx(CircleX, { className: "size-4" });
29
+ };
30
+ const getDisplayUrl = (value) => {
31
+ try {
32
+ const url = new URL(value);
33
+ return `${url.host}${url.pathname}`;
34
+ }
35
+ catch {
36
+ return value;
37
+ }
38
+ };
39
+ const formatJsonLd = (value) => {
40
+ try {
41
+ return JSON.stringify(JSON.parse(value), null, 2);
42
+ }
43
+ catch {
44
+ return value;
45
+ }
46
+ };
47
+ const readSavedReport = (value) => {
48
+ if (!value || typeof value !== 'object')
49
+ return null;
50
+ const report = value;
51
+ if (typeof report.url !== 'string' ||
52
+ typeof report.title !== 'string' ||
53
+ typeof report.description !== 'string' ||
54
+ typeof report.canonical !== 'string' ||
55
+ typeof report.siteUrl !== 'string' ||
56
+ typeof report.robots !== 'string' ||
57
+ typeof report.language !== 'string' ||
58
+ !Array.isArray(report.headings) ||
59
+ !report.images ||
60
+ !Array.isArray(report.structuredData) ||
61
+ !report.openGraph ||
62
+ !report.twitter) {
63
+ return null;
64
+ }
65
+ return report;
66
+ };
67
+ const readSavedChecks = (value) => {
68
+ if (!Array.isArray(value))
69
+ return [];
70
+ return value.flatMap((item) => {
71
+ if (!item || typeof item !== 'object')
72
+ return [];
73
+ const check = item;
74
+ if (typeof check.id !== 'string' ||
75
+ !['good', 'warning', 'error'].includes(check.status) ||
76
+ typeof check.value !== 'number') {
77
+ return [];
78
+ }
79
+ return [check];
80
+ });
81
+ };
82
+ const readPageSeoAuditSnapshot = (payload) => {
83
+ try {
84
+ const value = JSON.parse(payload);
85
+ return {
86
+ report: readSavedReport(value.report),
87
+ checks: readSavedChecks(value.checks),
88
+ };
89
+ }
90
+ catch {
91
+ return { report: null, checks: [] };
92
+ }
93
+ };
94
+ export const SeoTabContent = () => {
95
+ const t = useTranslations();
96
+ const [view, setView] = useState('metadata');
97
+ const [selectedAuditId, setSelectedAuditId] = useState(null);
98
+ const { canPreview, contentType, contentTypeId, contentTypeName, form, languageCode, localeVariantRoute, previewState, sections, } = useEditPageContext();
99
+ const { hasAnyPermission } = useSession();
100
+ const canReadHistory = hasAnyPermission([
101
+ 'content.SeoSettings.own',
102
+ 'content.SeoSettings.readAny',
103
+ ]);
104
+ const historyQuery = useManagerQuery({
105
+ name: 'manager.list',
106
+ input: {
107
+ contentType: 'SeoAudit',
108
+ query: {
109
+ filter: {
110
+ kind: 'page',
111
+ contentType: contentTypeName,
112
+ documentId: contentTypeId ?? '',
113
+ languageCode,
114
+ ...(localeVariantRoute ? { routeKey: localeVariantRoute.key } : {}),
115
+ },
116
+ options: { limit: 20, sort: { createdAt: 'desc' } },
117
+ },
118
+ },
119
+ enabled: Boolean(canReadHistory && contentTypeId),
120
+ });
121
+ const history = (historyQuery.data?.items ?? []);
122
+ const selectedAudit = history.find((audit) => audit._id === selectedAuditId);
123
+ const selectedSnapshot = useMemo(() => (selectedAudit ? readPageSeoAuditSnapshot(selectedAudit.payload) : null), [selectedAudit]);
124
+ const liveReport = previewState.seoAnalysis;
125
+ const report = selectedAudit ? selectedSnapshot?.report ?? null : liveReport;
126
+ const checks = selectedAudit
127
+ ? selectedSnapshot?.checks ?? []
128
+ : report
129
+ ? buildSeoChecks(report)
130
+ : [];
131
+ const score = selectedAudit?.score ?? getSeoScore(checks);
132
+ useEffect(() => {
133
+ setSelectedAuditId(null);
134
+ }, [liveReport]);
135
+ useEffect(() => {
136
+ setSelectedAuditId(null);
137
+ }, [contentTypeId, languageCode, localeVariantRoute?.key]);
138
+ useEffect(() => {
139
+ if (previewState.seoAnalysisHistoryRevision === 0)
140
+ return;
141
+ void historyQuery.refetch();
142
+ }, [historyQuery.refetch, previewState.seoAnalysisHistoryRevision]);
143
+ const missingSocialFields = [
144
+ [report?.openGraph.title, t('contentEdit.seoSocialFieldTitle')],
145
+ [report?.openGraph.description, t('contentEdit.seoSocialFieldDescription')],
146
+ [report?.openGraph.image, t('contentEdit.seoSocialFieldImage')],
147
+ ]
148
+ .filter(([value]) => !value)
149
+ .map(([, label]) => label);
150
+ const getCheckCopy = (check) => {
151
+ switch (check.id) {
152
+ case 'title':
153
+ return {
154
+ title: t('contentEdit.seoCheckTitle'),
155
+ description: check.status === 'error'
156
+ ? t('contentEdit.seoTitleMissing')
157
+ : check.status === 'good'
158
+ ? t('contentEdit.seoTitleGood', { count: check.value })
159
+ : t('contentEdit.seoTitleImprove', { count: check.value }),
160
+ };
161
+ case 'description':
162
+ return {
163
+ title: t('contentEdit.seoCheckDescription'),
164
+ description: check.status === 'error'
165
+ ? t('contentEdit.seoDescriptionMissing')
166
+ : check.status === 'good'
167
+ ? t('contentEdit.seoDescriptionGood', { count: check.value })
168
+ : t('contentEdit.seoDescriptionImprove', { count: check.value }),
169
+ };
170
+ case 'h1':
171
+ return {
172
+ title: t('contentEdit.seoCheckH1'),
173
+ description: check.value === 1
174
+ ? t('contentEdit.seoH1Good')
175
+ : check.value === 0
176
+ ? t('contentEdit.seoH1Missing')
177
+ : t('contentEdit.seoH1Multiple', { count: check.value }),
178
+ };
179
+ case 'headings':
180
+ return {
181
+ title: t('contentEdit.seoCheckHeadings'),
182
+ description: !report?.headings.length
183
+ ? t('contentEdit.seoHeadingsMissing')
184
+ : check.value === 0
185
+ ? t('contentEdit.seoHeadingsGood')
186
+ : t('contentEdit.seoHeadingsSkipped', { count: check.value }),
187
+ };
188
+ case 'images':
189
+ return {
190
+ title: t('contentEdit.seoCheckImages'),
191
+ description: check.value === 0
192
+ ? t('contentEdit.seoImagesGood', { count: report?.images.total ?? 0 })
193
+ : t('contentEdit.seoImagesMissingAlt', { count: check.value }),
194
+ };
195
+ case 'canonical':
196
+ return {
197
+ title: t('contentEdit.seoCheckCanonical'),
198
+ description: report?.canonical
199
+ ? t('contentEdit.seoCanonicalGood')
200
+ : report?.siteUrl
201
+ ? t('contentEdit.seoCanonicalMissing')
202
+ : t('contentEdit.seoCanonicalSiteUrlMissing'),
203
+ };
204
+ case 'language':
205
+ return {
206
+ title: t('contentEdit.seoCheckLanguage'),
207
+ description: report?.language
208
+ ? t('contentEdit.seoLanguageGood', { language: report.language })
209
+ : t('contentEdit.seoLanguageMissing'),
210
+ };
211
+ case 'indexing':
212
+ return {
213
+ title: t('contentEdit.seoCheckIndexing'),
214
+ description: check.status === 'good'
215
+ ? t('contentEdit.seoIndexingGood')
216
+ : t('contentEdit.seoIndexingBlocked'),
217
+ };
218
+ case 'social':
219
+ return {
220
+ title: t('contentEdit.seoCheckSocial'),
221
+ description: check.value === 0
222
+ ? t('contentEdit.seoSocialGood')
223
+ : t('contentEdit.seoSocialMissing', {
224
+ fields: missingSocialFields.join(', '),
225
+ }),
226
+ };
227
+ case 'structuredData':
228
+ return {
229
+ title: t('contentEdit.seoCheckStructuredData'),
230
+ description: report?.structuredData.length === 0
231
+ ? t('contentEdit.seoStructuredDataNone')
232
+ : check.status === 'good'
233
+ ? t('contentEdit.seoStructuredDataGood', {
234
+ count: report?.structuredData.length ?? 0,
235
+ })
236
+ : t('contentEdit.seoStructuredDataInvalid', { count: check.value }),
237
+ };
238
+ }
239
+ };
240
+ const socialTitle = report?.openGraph.title || report?.twitter.title || report?.title || '';
241
+ const socialDescription = report?.openGraph.description || report?.twitter.description || report?.description || '';
242
+ const socialImage = report?.openGraph.image || report?.twitter.image || '';
243
+ const resultUrl = report?.canonical || report?.url || '';
244
+ return (_jsxs(Tabs, { value: view, onValueChange: (value) => {
245
+ form.saveState();
246
+ setView(value);
247
+ }, className: "min-h-full gap-0", children: [_jsxs(TabsList, { variant: "line", className: "sticky top-0 z-20 h-auto w-full justify-start gap-6 rounded-none border-b bg-background/95 p-0 backdrop-blur supports-[backdrop-filter]:bg-background/80", children: [_jsxs(TabsTrigger, { value: "metadata", className: "-mb-px h-auto flex-none rounded-none border-x-0 border-t-0 border-b-2 border-b-transparent px-0 pt-1 pb-3 after:hidden data-[state=active]:border-b-primary dark:data-[state=active]:border-b-primary", children: [_jsx(Tags, {}), t('contentEdit.seoMetadataView')] }), _jsxs(TabsTrigger, { value: "analysis", className: "-mb-px h-auto flex-none rounded-none border-x-0 border-t-0 border-b-2 border-b-transparent px-0 pt-1 pb-3 after:hidden data-[state=active]:border-b-primary dark:data-[state=active]:border-b-primary", children: [_jsx(Search, {}), t('contentEdit.seoAnalysisView')] })] }), _jsx(TabsContent, { value: "metadata", forceMount: true, hidden: view !== 'metadata', className: "min-h-0 pt-5", children: _jsx(ContentTypeEdit, { defaultData: form.draft.current, ref: form.seoRef, contentType: sections.seo, parentContentType: contentType, initializeSeoBindings: !contentTypeId, id: contentTypeName, hideTitle: true }, `seo:${form.formRevision}`) }), _jsxs(TabsContent, { value: "analysis", forceMount: true, hidden: view !== 'analysis', className: "space-y-5 pt-5 pb-6", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { className: "gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(CardTitle, { children: t('contentEdit.seoAnalysisTitle') }), _jsx(CardDescription, { children: t('contentEdit.seoAnalysisDescription') })] }), _jsxs(Button, { className: "shrink-0", disabled: !canPreview || previewState.isPreviewPending || previewState.isSeoAnalysisPending, loading: previewState.isSeoAnalysisPending, onClick: () => void previewState.handleSeoAnalysis(), children: [_jsx(Search, {}), liveReport
248
+ ? t('contentEdit.seoRegenerateReport')
249
+ : t('contentEdit.seoGenerateReport')] })] }), !canPreview ? (_jsx(CardContent, { className: "text-muted-foreground text-sm", children: t('contentEdit.seoAnalysisUnavailable') })) : null, previewState.seoAnalysisError ? (_jsx(CardContent, { className: "text-destructive text-sm", children: previewState.seoAnalysisError })) : null] }), contentTypeId && canReadHistory ? (_jsxs(Card, { children: [_jsxs(CardHeader, { className: 'gap-3 sm:flex-row sm:items-center sm:justify-between', children: [_jsxs("div", { className: 'space-y-1.5', children: [_jsxs(CardTitle, { className: 'flex items-center gap-2', children: [_jsx(History, { className: 'size-4' }), t('contentEdit.seoHistoryTitle')] }), _jsx(CardDescription, { children: t('contentEdit.seoHistoryDescription') })] }), selectedAudit ? (_jsxs(Button, { variant: 'outline', size: 'sm', onClick: () => setSelectedAuditId(null), children: [_jsx(RotateCcw, {}), t('contentEdit.seoHistoryCurrent')] })) : null] }), _jsx(CardContent, { children: historyQuery.isLoading ? (_jsx("p", { className: 'text-sm text-muted-foreground', children: t('contentEdit.seoHistoryLoading') })) : historyQuery.isError ? (_jsx("p", { className: 'text-sm text-destructive', children: getActionErrorMessage(historyQuery.error, t('contentEdit.seoHistoryLoadError')) })) : history.length ? (_jsx("div", { className: 'flex gap-3 overflow-x-auto pb-1', children: history.map((audit) => (_jsxs("button", { type: 'button', className: cn('min-w-48 rounded-lg border p-3 text-left transition-colors hover:bg-accent', selectedAuditId === audit._id && 'border-primary bg-primary/5'), onClick: () => setSelectedAuditId(audit._id), children: [_jsx("span", { className: 'block text-xs text-muted-foreground', children: audit.createdAt
250
+ ? formatDate(new Date(audit.createdAt))
251
+ : t('common.unknown') }), _jsxs("span", { className: 'mt-2 flex items-center justify-between gap-3', children: [_jsx("strong", { children: t('contentEdit.seoHistoryScore', { score: audit.score }) }), _jsxs("span", { className: 'flex gap-1', children: [audit.errorCount ? (_jsx(Badge, { variant: 'destructive', children: audit.errorCount })) : null, audit.warningCount ? (_jsx(Badge, { variant: 'secondary', children: audit.warningCount })) : null] })] })] }, audit._id))) })) : (_jsx("p", { className: 'text-sm text-muted-foreground', children: t('contentEdit.seoHistoryEmpty') })) })] })) : null, selectedAudit ? (_jsxs("div", { className: 'flex flex-wrap items-center gap-3 rounded-lg border border-primary/30 bg-primary/5 p-3 text-sm', children: [_jsx(History, { className: 'size-4 text-primary' }), _jsx("span", { className: 'font-medium', children: t('contentEdit.seoHistoryViewing') }), _jsx("span", { className: 'text-muted-foreground', children: selectedAudit.createdAt
252
+ ? formatDate(new Date(selectedAudit.createdAt))
253
+ : t('common.unknown') })] })) : null, !report && selectedAudit && checks.length ? (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: t('contentEdit.seoHistorySnapshotTitle') }), _jsx(CardDescription, { children: t('contentEdit.seoHistorySnapshotDescription') })] }), _jsx(CardContent, { className: 'grid gap-3 md:grid-cols-2 xl:grid-cols-3', children: checks.map((check) => {
254
+ const copy = getCheckCopy(check);
255
+ return (_jsx("div", { className: cn('rounded-lg border p-4', statusStyles[check.status]), children: _jsxs("div", { className: 'flex items-center gap-2 font-medium', children: [_jsx(StatusIcon, { status: check.status }), copy.title] }) }, check.id));
256
+ }) })] })) : !report ? (_jsxs("div", { className: "text-muted-foreground flex min-h-64 flex-col items-center justify-center gap-3 rounded-lg border border-dashed p-8 text-center", children: [_jsx(Search, { className: "size-9" }), _jsxs("div", { children: [_jsx("p", { className: "font-medium text-foreground", children: t('contentEdit.seoNoReportTitle') }), _jsx("p", { className: "mt-1 max-w-lg text-sm", children: t('contentEdit.seoNoReportDescription') })] })] })) : (_jsxs(_Fragment, { children: [_jsx(Card, { children: _jsxs(CardContent, { className: "flex flex-col gap-5 pt-6 sm:flex-row sm:items-center", children: [_jsx("div", { className: cn('flex size-24 shrink-0 items-center justify-center rounded-full border-8 text-2xl font-semibold', score >= 80
257
+ ? statusStyles.good
258
+ : score >= 50
259
+ ? statusStyles.warning
260
+ : statusStyles.error), children: score }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold", children: t('contentEdit.seoScoreTitle') }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: t('contentEdit.seoScoreDescription') }), _jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: ['good', 'warning', 'error'].map((status) => (_jsxs(Badge, { variant: "outline", className: statusStyles[status], children: [_jsx(StatusIcon, { status: status }), t(`contentEdit.seoStatus${status === 'good' ? 'Good' : status === 'warning' ? 'Warning' : 'Error'}`), ' · ', checks.filter((check) => check.status === status).length] }, status))) })] })] }) }), _jsx("div", { className: "grid gap-3 md:grid-cols-2 xl:grid-cols-3", children: checks.map((check) => {
261
+ const copy = getCheckCopy(check);
262
+ return (_jsxs("div", { className: cn('rounded-lg border p-4', statusStyles[check.status]), children: [_jsxs("div", { className: "flex items-center gap-2 font-medium", children: [_jsx(StatusIcon, { status: check.status }), copy.title] }), _jsx("p", { className: "mt-2 text-sm text-foreground/75", children: copy.description })] }, check.id));
263
+ }) }), _jsxs("div", { className: "grid items-start gap-5 xl:grid-cols-[minmax(0,3fr)_minmax(18rem,2fr)]", children: [_jsxs("div", { className: "grid gap-5", children: [_jsxs(Card, { className: "overflow-hidden", children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Search, { className: "size-4" }), t('contentEdit.seoGooglePreview')] }) }), _jsx(CardContent, { children: _jsxs("div", { className: "rounded-lg border bg-white p-5 text-slate-900 shadow-sm", children: [_jsx("p", { className: "truncate text-sm text-emerald-800", children: getDisplayUrl(resultUrl) }), _jsx("p", { className: "mt-1 line-clamp-1 text-xl text-blue-800", children: report.title }), _jsx("p", { className: "mt-1 line-clamp-2 text-sm leading-5 text-slate-600", children: report.description })] }) })] }), _jsxs(Card, { className: "overflow-hidden", children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Share2, { className: "size-4" }), t('contentEdit.seoSocialPreview')] }) }), _jsx(CardContent, { children: _jsxs("div", { className: "overflow-hidden rounded-lg border bg-muted/30", children: [socialImage ? (_jsx("img", { src: socialImage, alt: "", className: "aspect-[1.91/1] w-full bg-muted object-cover" })) : null, _jsxs("div", { className: "space-y-1 p-4", children: [_jsx("p", { className: "text-muted-foreground truncate text-xs uppercase", children: getDisplayUrl(report.openGraph.url || report.url) }), _jsx("p", { className: "line-clamp-1 font-semibold", children: socialTitle }), _jsx("p", { className: "text-muted-foreground line-clamp-2 text-sm", children: socialDescription })] })] }) })] })] }), _jsxs("div", { className: "grid gap-5", children: [_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: t('contentEdit.seoHeadingOutline') }), _jsx(CardDescription, { children: t('contentEdit.seoHeadingCount', { count: report.headings.length }) })] }), _jsx(CardContent, { className: "xl:max-h-[36rem] xl:overflow-y-auto", children: report.headings.length ? (_jsx("ol", { className: "space-y-2", children: report.headings.map((heading, index) => (_jsxs("li", { className: "flex min-w-0 items-center gap-3 text-sm", style: {
264
+ paddingInlineStart: `${Math.max(0, heading.level - 1) * 1.25}rem`,
265
+ }, children: [_jsx(Badge, { variant: "outline", children: t('contentEdit.seoHeadingLevel', { level: heading.level }) }), _jsx("span", { className: "truncate", children: heading.text || t('contentEdit.seoEmptyHeading') })] }, `${heading.level}:${index}`))) })) : (_jsx("p", { className: "text-muted-foreground text-sm", children: t('contentEdit.seoHeadingsMissing') })) })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Braces, { className: "size-4" }), t('contentEdit.seoStructuredDataTitle')] }), _jsx(CardDescription, { children: t('contentEdit.seoStructuredDataCount', {
266
+ count: report.structuredData.length,
267
+ }) })] }), _jsx(CardContent, { children: report.structuredData.length ? (_jsx("div", { className: "space-y-3", children: report.structuredData.map((item, index) => {
268
+ const issues = [
269
+ !item.valid ? t('contentEdit.seoStructuredDataInvalidJson') : null,
270
+ item.valid && !item.hasContext
271
+ ? t('contentEdit.seoStructuredDataMissingContext')
272
+ : null,
273
+ item.valid && item.types.length === 0
274
+ ? t('contentEdit.seoStructuredDataMissingType')
275
+ : null,
276
+ ].filter(Boolean);
277
+ const valid = issues.length === 0;
278
+ return (_jsxs("div", { className: "rounded-lg border p-3", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(Badge, { variant: "outline", className: valid ? statusStyles.good : statusStyles.error, children: [_jsx(StatusIcon, { status: valid ? 'good' : 'error' }), valid
279
+ ? t('contentEdit.seoStructuredDataValid')
280
+ : t('contentEdit.seoStructuredDataNeedsAttention')] }), item.types.map((type) => (_jsx(Badge, { variant: "secondary", children: type }, type)))] }), issues.length ? (_jsxs("ul", { className: "mt-3 space-y-1 text-sm text-destructive", children: [issues.map((issue) => (_jsx("li", { children: issue }, issue))), !item.valid && item.error ? (_jsx("li", { className: "font-mono text-xs", children: item.error })) : null] })) : null, _jsxs("details", { className: "mt-3", children: [_jsx("summary", { className: "text-muted-foreground cursor-pointer text-sm", children: t('contentEdit.seoStructuredDataViewJson') }), _jsx("pre", { className: "mt-2 max-h-80 overflow-auto rounded-md bg-muted p-3 text-xs whitespace-pre-wrap", children: formatJsonLd(item.raw) })] })] }, index));
281
+ }) })) : (_jsx("p", { className: "text-muted-foreground text-sm", children: t('contentEdit.seoStructuredDataNone') })) })] })] })] })] }))] })] }));
282
+ };
283
+ //# sourceMappingURL=SeoTabContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeoTabContent.js","sourceRoot":"","sources":["../../../../../../../src/router/dashboard/[contentType]/[edit]/_components/SeoTabContent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { SeoAnalysisReport } from '../_hooks/useContentPreview.js';
2
+ export type SeoCheckStatus = 'good' | 'warning' | 'error';
3
+ export type SeoCheck = {
4
+ id: 'title' | 'description' | 'h1' | 'headings' | 'images' | 'canonical' | 'language' | 'indexing' | 'social' | 'structuredData';
5
+ status: SeoCheckStatus;
6
+ value: number;
7
+ };
8
+ export declare const buildSeoChecks: (report: SeoAnalysisReport) => SeoCheck[];
9
+ export declare const getSeoScore: (checks: SeoCheck[]) => number;
10
+ //# sourceMappingURL=seo-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo-analysis.d.ts","sourceRoot":"","sources":["../../../../../../../src/router/dashboard/[contentType]/[edit]/_components/seo-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAEzD,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EACE,OAAO,GACP,aAAa,GACb,IAAI,GACJ,UAAU,GACV,QAAQ,GACR,WAAW,GACX,UAAU,GACV,UAAU,GACV,QAAQ,GACR,gBAAgB,CAAA;IACpB,MAAM,EAAE,cAAc,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AASD,eAAO,MAAM,cAAc,GAAI,QAAQ,iBAAiB,KAAG,QAAQ,EA6ElE,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,QAAQ,QAAQ,EAAE,WAS7C,CAAA"}
@@ -0,0 +1,83 @@
1
+ const getHeadingSkips = (headings) => headings.reduce((skips, heading, index) => {
2
+ const previousLevel = index === 0 ? 0 : (headings[index - 1]?.level ?? 0);
3
+ return heading.level > previousLevel + 1 ? skips + 1 : skips;
4
+ }, 0);
5
+ export const buildSeoChecks = (report) => {
6
+ const titleLength = report.title.length;
7
+ const descriptionLength = report.description.length;
8
+ const h1Count = report.headings.filter((heading) => heading.level === 1).length;
9
+ const headingSkips = getHeadingSkips(report.headings);
10
+ const missingSocialFields = [
11
+ report.openGraph.title,
12
+ report.openGraph.description,
13
+ report.openGraph.image,
14
+ ].filter((value) => !value).length;
15
+ const invalidStructuredData = report.structuredData.filter((item) => !item.valid || !item.hasContext || item.types.length === 0).length;
16
+ return [
17
+ {
18
+ id: 'title',
19
+ status: titleLength === 0 ? 'error' : titleLength >= 30 && titleLength <= 60 ? 'good' : 'warning',
20
+ value: titleLength,
21
+ },
22
+ {
23
+ id: 'description',
24
+ status: descriptionLength === 0
25
+ ? 'error'
26
+ : descriptionLength >= 120 && descriptionLength <= 160
27
+ ? 'good'
28
+ : 'warning',
29
+ value: descriptionLength,
30
+ },
31
+ {
32
+ id: 'h1',
33
+ status: h1Count === 1 ? 'good' : h1Count === 0 ? 'error' : 'warning',
34
+ value: h1Count,
35
+ },
36
+ {
37
+ id: 'headings',
38
+ status: report.headings.length === 0 || headingSkips > 0 ? 'warning' : 'good',
39
+ value: headingSkips,
40
+ },
41
+ {
42
+ id: 'images',
43
+ status: report.images.missingAlt > 0 ? 'error' : 'good',
44
+ value: report.images.missingAlt,
45
+ },
46
+ {
47
+ id: 'canonical',
48
+ status: report.canonical ? 'good' : 'warning',
49
+ value: report.canonical ? 1 : 0,
50
+ },
51
+ {
52
+ id: 'language',
53
+ status: report.language ? 'good' : 'warning',
54
+ value: report.language ? 1 : 0,
55
+ },
56
+ {
57
+ id: 'indexing',
58
+ status: /(?:^|,)\s*noindex\b/i.test(report.robots) ? 'error' : 'good',
59
+ value: /(?:^|,)\s*noindex\b/i.test(report.robots) ? 0 : 1,
60
+ },
61
+ {
62
+ id: 'social',
63
+ status: missingSocialFields === 0 ? 'good' : 'warning',
64
+ value: missingSocialFields,
65
+ },
66
+ {
67
+ id: 'structuredData',
68
+ status: report.structuredData.length === 0
69
+ ? 'warning'
70
+ : invalidStructuredData > 0
71
+ ? 'error'
72
+ : 'good',
73
+ value: invalidStructuredData,
74
+ },
75
+ ];
76
+ };
77
+ export const getSeoScore = (checks) => {
78
+ if (checks.length === 0)
79
+ return 0;
80
+ const points = checks.reduce((total, check) => total + (check.status === 'good' ? 1 : check.status === 'warning' ? 0.5 : 0), 0);
81
+ return Math.round((points / checks.length) * 100);
82
+ };
83
+ //# sourceMappingURL=seo-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo-analysis.js","sourceRoot":"","sources":["../../../../../../../src/router/dashboard/[contentType]/[edit]/_components/seo-analysis.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ContentReferenceMultiSelectUI.d.ts","sourceRoot":"","sources":["../../../../../../../../src/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,GAAG,CAAA;AAejD,QAAA,MAAM,6BAA6B,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAqFrE,CAAA;AAED,eAAe,6BAA6B,CAAA"}
1
+ {"version":3,"file":"ContentReferenceMultiSelectUI.d.ts","sourceRoot":"","sources":["../../../../../../../../src/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,GAAG,CAAA;AAgBjD,QAAA,MAAM,6BAA6B,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA2GrE,CAAA;AAED,eAAe,6BAA6B,CAAA"}
@@ -3,9 +3,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { CheckIcon } from 'lucide-react';
4
4
  import { useFieldValues } from '../shared/index.js';
5
5
  import { FieldWrapper } from '../shared/FieldWrapper.js';
6
+ import { ItemLimitStatus } from '../shared/ItemLimitStatus.js';
6
7
  import { useContentReferenceOptions } from './index.js';
8
+ import { useTranslations } from '../../../../../../i18n/index.js';
7
9
  import { Tags, TagsContent, TagsEmpty, TagsGroup, TagsInput, TagsItem, TagsList, TagsTrigger, TagsValue, } from '../../../../../../components/ui/shadcn-io/tags/index.js';
8
- const ContentReferenceMultiSelectUI = ({ id, isRequired, isTranslatable, defaultData, dynamicFallbackPlaceholder, ref, contentType, }) => {
10
+ const ContentReferenceMultiSelectUI = ({ id, isRequired, isTranslatable, defaultData, dynamicFallbackPlaceholder, ref, contentType, minItems, maxItems, }) => {
11
+ const t = useTranslations();
9
12
  const { value, getValue, errors, cleanErrors, getState, onValueChange } = useFieldValues({
10
13
  id,
11
14
  isRequired,
@@ -13,6 +16,12 @@ const ContentReferenceMultiSelectUI = ({ id, isRequired, isTranslatable, default
13
16
  defaultData: defaultData,
14
17
  defaultValue: [],
15
18
  validateValue: (nextValue) => {
19
+ if (minItems !== undefined && nextValue.length < minItems) {
20
+ return t('contentEdit.minimumItemsError', { count: minItems });
21
+ }
22
+ if (maxItems !== undefined && nextValue.length > maxItems) {
23
+ return t('contentEdit.maximumItemsError', { count: maxItems });
24
+ }
16
25
  if (isRequired && nextValue.length === 0) {
17
26
  return 'This field is required';
18
27
  }
@@ -32,10 +41,14 @@ const ContentReferenceMultiSelectUI = ({ id, isRequired, isTranslatable, default
32
41
  handleRemove(toggleId);
33
42
  return;
34
43
  }
44
+ if (maxItems !== undefined && value.length >= maxItems)
45
+ return;
35
46
  onValueChange([...value, toggleId]);
36
47
  cleanErrors();
37
48
  };
38
- return (_jsx(FieldWrapper, { id: id, errors: errors, getValue: getValue, getState: getState, ref: ref, children: _jsxs(Tags, { children: [_jsx(TagsTrigger, { children: value.map((selectedId) => (_jsx(TagsValue, { onRemove: () => handleRemove(selectedId), children: labelsById.get(selectedId) || selectedId }, selectedId))) }), _jsxs(TagsContent, { children: [_jsx(TagsInput, { placeholder: dynamicFallbackPlaceholder ?? `Search ${contentTypeName}...` }), _jsxs(TagsList, { children: [_jsx(TagsEmpty, {}), _jsx(TagsGroup, { children: options.map((option) => (_jsxs(TagsItem, { value: option.value, onSelect: handleToggle, children: [option.label, value.includes(option.value) ? (_jsx(CheckIcon, { className: 'text-muted-foreground', size: 14 })) : null] }, option.value))) })] })] })] }) }));
49
+ return (_jsx(FieldWrapper, { id: id, errors: errors, getValue: getValue, getState: getState, ref: ref, children: _jsxs("div", { className: 'grid gap-1.5', children: [_jsxs(Tags, { children: [_jsx(TagsTrigger, { children: value.map((selectedId) => (_jsx(TagsValue, { onRemove: () => handleRemove(selectedId), children: labelsById.get(selectedId) || selectedId }, selectedId))) }), _jsxs(TagsContent, { children: [_jsx(TagsInput, { placeholder: dynamicFallbackPlaceholder ?? `Search ${contentTypeName}...` }), _jsxs(TagsList, { children: [_jsx(TagsEmpty, {}), _jsx(TagsGroup, { children: options.map((option) => (_jsxs(TagsItem, { disabled: !value.includes(option.value) &&
50
+ maxItems !== undefined &&
51
+ value.length >= maxItems, value: option.value, onSelect: handleToggle, children: [option.label, value.includes(option.value) ? (_jsx(CheckIcon, { className: 'text-muted-foreground', size: 14 })) : null] }, option.value))) })] })] })] }), _jsx(ItemLimitStatus, { count: value.length, minItems: minItems, maxItems: maxItems })] }) }));
39
52
  };
40
53
  export default ContentReferenceMultiSelectUI;
41
54
  //# sourceMappingURL=ContentReferenceMultiSelectUI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContentReferenceMultiSelectUI.js","sourceRoot":"","sources":["../../../../../../../../src/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContentReferenceMultiSelectUI.js","sourceRoot":"","sources":["../../../../../../../../src/router/dashboard/[contentType]/[edit]/_fields/ContentReferenceField/ContentReferenceMultiSelectUI.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { DynamicDocumentBindings, EncodedContentType, EncodedFieldUnknown } from '@rakun-kit/core/client';
1
+ import type { DynamicDocumentBindings, EncodedContentType, EncodedFieldUnknown, EncodedListField, EncodedSimpleListField, FieldValueKind } from '@rakun-kit/core/client';
2
2
  export declare const isDynamicFallbackRequired: (field: Pick<EncodedFieldUnknown, "isRequired">, binding: unknown) => boolean;
3
3
  type FilterOperator = 'equals' | 'notEquals' | 'contains' | 'in' | 'notIn' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'true' | 'false' | 'exists' | 'notExists';
4
4
  type FilterCondition = {
@@ -11,7 +11,7 @@ type FilterState = {
11
11
  combinator: 'and' | 'or';
12
12
  conditions: FilterCondition[];
13
13
  };
14
- type SourceFieldKind = 'string' | 'richText' | 'number' | 'boolean' | 'date' | 'object' | 'array' | 'unknown';
14
+ type SourceFieldKind = FieldValueKind;
15
15
  type SourceFieldOption = {
16
16
  label: string;
17
17
  value: string;
@@ -24,11 +24,15 @@ type CurrentDocumentListSourceOption = {
24
24
  path: string;
25
25
  itemName?: string;
26
26
  };
27
+ type MappableListField = EncodedListField | EncodedSimpleListField;
28
+ export declare const isMappableDynamicListField: (field: EncodedFieldUnknown) => field is MappableListField;
29
+ export declare const targetMappingFields: (contentType?: EncodedContentType) => Array<[string, EncodedFieldUnknown]>;
27
30
  export declare const isDynamicFieldEnabled: (contentType: EncodedContentType, field: EncodedFieldUnknown) => boolean;
28
31
  export declare const sourceFieldOptions: (contentType?: EncodedContentType, targetField?: EncodedFieldUnknown) => SourceFieldOption[];
29
32
  export declare const currentDocumentListSourceOptions: (contentType: EncodedContentType) => CurrentDocumentListSourceOption[];
30
33
  export declare const readFilterState: (filter: Record<string, unknown> | undefined) => FilterState;
31
34
  export declare const buildFilter: (state: FilterState, fieldOptions?: SourceFieldOption[]) => Record<string, unknown> | undefined;
35
+ export declare const listItemTargetFields: (field: MappableListField, itemName: string) => [string, EncodedFieldUnknown][];
32
36
  export declare const DynamicDataControl: ({ contentType, documentContentType, fieldName, field, contentTypes, bindings, onChange, open, onOpenChange, mode, }: {
33
37
  contentType: EncodedContentType;
34
38
  documentContentType?: EncodedContentType;
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicDataControl.d.ts","sourceRoot":"","sources":["../../../../../../../src/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,uBAAuB,EAMvB,kBAAkB,EAElB,mBAAmB,EAIpB,MAAM,wBAAwB,CAAA;AA0D/B,eAAO,MAAM,yBAAyB,GACpC,OAAO,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAC9C,SAAS,OAAO,YACe,CAAA;AAEjC,KAAK,cAAc,GACf,QAAQ,GACR,WAAW,GACX,UAAU,GACV,IAAI,GACJ,OAAO,GACP,aAAa,GACb,oBAAoB,GACpB,UAAU,GACV,iBAAiB,GACjB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,WAAW,CAAA;AACf,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAA;CACjD,CAAA;AACD,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,KAAK,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B,CAAA;AACD,KAAK,eAAe,GAChB,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,GACP,SAAS,CAAA;AACb,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,eAAe,CAAA;CACtB,CAAA;AACD,KAAK,+BAA+B,GAAG;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,kBAAkB,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAsDD,eAAO,MAAM,qBAAqB,GAChC,aAAa,kBAAkB,EAC/B,OAAO,mBAAmB,YAM3B,CAAA;AAwMD,eAAO,MAAM,kBAAkB,GAC7B,cAAc,kBAAkB,EAChC,cAAc,mBAAmB,KAChC,iBAAiB,EAWnB,CAAA;AAKD,eAAO,MAAM,gCAAgC,GAC3C,aAAa,kBAAkB,KAC9B,+BAA+B,EAsC9B,CAAA;AAsJJ,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAC1C,WAyBF,CAAA;AAkED,eAAO,MAAM,WAAW,GACtB,OAAO,WAAW,EAClB,eAAc,iBAAiB,EAAO,wCAavC,CAAA;AA4/CD,eAAO,MAAM,kBAAkB,GAAI,qHAWhC;IACD,WAAW,EAAE,kBAAkB,CAAA;IAC/B,mBAAmB,CAAC,EAAE,kBAAkB,CAAA;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,mBAAmB,CAAA;IAC1B,YAAY,EAAE,kBAAkB,EAAE,CAAA;IAClC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,CAAA;IAC7C,QAAQ,EAAE,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,KAAK,IAAI,CAAA;IACjE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;CAC/C,mDAqOA,CAAA"}
1
+ {"version":3,"file":"DynamicDataControl.d.ts","sourceRoot":"","sources":["../../../../../../../src/router/dashboard/[contentType]/[edit]/_fields/DynamicDataControl.tsx"],"names":[],"mappings":"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"}