@jini-ai/admin 0.4.2 → 0.4.4

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 (361) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +7 -0
  3. package/dist/agent-plugins/react/components/AgentPluginListPanel.d.ts +1 -1
  4. package/dist/agent-plugins/react/hooks/AgentPluginInspector.hooks.js +1 -1
  5. package/dist/agent-plugins/react/hooks/AgentPluginPanel.hooks.d.ts +1 -1
  6. package/dist/agent-plugins/react/hooks/AgentPluginsPage.hooks.d.ts +1 -1
  7. package/dist/agent-plugins/react/hooks/AgentPluginsPage.hooks.js +1 -1
  8. package/dist/agent-plugins/react/hooks/MarketplaceTab.hooks.d.ts +1 -1
  9. package/dist/agent-plugins/react/index.js +1 -1
  10. package/dist/agent-plugins/react/pages/AgentPluginsPage.d.ts +1 -1
  11. package/dist/agent-plugins/react/tabs/DownloadedTab.d.ts +1 -1
  12. package/dist/agent-plugins/react/tabs/InstalledTab.d.ts +1 -1
  13. package/dist/agent-plugins/react/tabs/MarketplaceTab.d.ts +1 -1
  14. package/dist/comments/adapters/http.d.ts +29 -0
  15. package/dist/comments/adapters/http.js +50 -0
  16. package/dist/comments/adapters/memory.d.ts +17 -0
  17. package/dist/comments/adapters/memory.js +61 -0
  18. package/dist/comments/comments.module.d.ts +73 -0
  19. package/dist/comments/comments.module.js +16 -0
  20. package/dist/comments/conformance/comments-api.conformance.d.ts +9 -0
  21. package/dist/comments/conformance/comments-api.conformance.js +63 -0
  22. package/dist/comments/controllers/comment-queue.controller.d.ts +48 -0
  23. package/dist/comments/controllers/comment-queue.controller.js +164 -0
  24. package/dist/comments/controllers/comment-settings.controller.d.ts +32 -0
  25. package/dist/comments/controllers/comment-settings.controller.js +77 -0
  26. package/dist/comments/controllers/comments.controller.d.ts +16 -0
  27. package/dist/comments/controllers/comments.controller.js +16 -0
  28. package/dist/comments/index.d.ts +13 -0
  29. package/dist/comments/index.js +8 -0
  30. package/dist/comments/messages.en.d.ts +54 -0
  31. package/dist/comments/messages.en.js +56 -0
  32. package/dist/comments/models.d.ts +22 -0
  33. package/dist/comments/models.js +2 -0
  34. package/dist/comments/ports.d.ts +14 -0
  35. package/dist/comments/ports.js +5 -0
  36. package/dist/comments/react/components/QueueSection.d.ts +30 -0
  37. package/dist/comments/react/components/QueueSection.js +57 -0
  38. package/dist/comments/react/components/SettingsSection.d.ts +14 -0
  39. package/dist/comments/react/components/SettingsSection.js +23 -0
  40. package/dist/comments/react/hooks/CommentsPage.hooks.d.ts +9 -0
  41. package/dist/comments/react/hooks/CommentsPage.hooks.js +10 -0
  42. package/dist/comments/react/hooks/CommentsPorts.hooks.d.ts +13 -0
  43. package/dist/comments/react/hooks/CommentsPorts.hooks.js +15 -0
  44. package/dist/comments/react/hooks/QueueSection.hooks.d.ts +62 -0
  45. package/dist/comments/react/hooks/QueueSection.hooks.js +57 -0
  46. package/dist/comments/react/hooks/SettingsSection.hooks.d.ts +12 -0
  47. package/dist/comments/react/hooks/SettingsSection.hooks.js +21 -0
  48. package/dist/comments/react/hooks/use-comment-queue.hooks.d.ts +34 -0
  49. package/dist/comments/react/hooks/use-comment-queue.hooks.js +47 -0
  50. package/dist/comments/react/hooks/use-comment-settings.hooks.d.ts +22 -0
  51. package/dist/comments/react/hooks/use-comment-settings.hooks.js +30 -0
  52. package/dist/comments/react/hooks/use-comments.hooks.d.ts +15 -0
  53. package/dist/comments/react/hooks/use-comments.hooks.js +20 -0
  54. package/dist/comments/react/index.d.ts +316 -0
  55. package/dist/comments/react/index.js +35 -0
  56. package/dist/comments/react/pages/CommentsPage.d.ts +12 -0
  57. package/dist/comments/react/pages/CommentsPage.js +15 -0
  58. package/dist/comments/rules.d.ts +140 -0
  59. package/dist/comments/rules.js +199 -0
  60. package/dist/core/index.d.ts +3 -1
  61. package/dist/core/index.js +1 -0
  62. package/dist/core/ledger-slice.d.ts +90 -0
  63. package/dist/core/ledger-slice.js +81 -0
  64. package/dist/core/ports/comments.d.ts +2 -0
  65. package/dist/core/ports/forms.d.ts +19 -7
  66. package/dist/core/ports/forms.js +4 -4
  67. package/dist/core/ports/index.d.ts +1 -1
  68. package/dist/core/ports/seo.d.ts +33 -6
  69. package/dist/core/react/bind-react.d.ts +46 -0
  70. package/dist/core/react/bind-react.js +28 -0
  71. package/dist/core/react/index.d.ts +3 -0
  72. package/dist/core/react/index.js +3 -0
  73. package/dist/core/react/use-controller.d.ts +16 -0
  74. package/dist/core/react/use-controller.js +18 -0
  75. package/dist/forms/adapters/http.d.ts +26 -0
  76. package/dist/forms/adapters/http.js +43 -0
  77. package/dist/forms/adapters/memory.d.ts +14 -0
  78. package/dist/forms/adapters/memory.js +77 -0
  79. package/dist/forms/conformance/forms-api.conformance.d.ts +17 -0
  80. package/dist/forms/conformance/forms-api.conformance.js +71 -0
  81. package/dist/forms/controllers/draft-store.d.ts +18 -0
  82. package/dist/forms/controllers/draft-store.js +17 -0
  83. package/dist/forms/controllers/field-attributes-dialog.controller.d.ts +37 -0
  84. package/dist/forms/controllers/field-attributes-dialog.controller.js +27 -0
  85. package/dist/forms/controllers/form-editor.controller.d.ts +36 -0
  86. package/dist/forms/controllers/form-editor.controller.js +22 -0
  87. package/dist/forms/controllers/form-fields-editor.controller.d.ts +20 -0
  88. package/dist/forms/controllers/form-fields-editor.controller.js +10 -0
  89. package/dist/forms/controllers/form-submission-detail.controller.d.ts +20 -0
  90. package/dist/forms/controllers/form-submission-detail.controller.js +10 -0
  91. package/dist/forms/controllers/form-submissions.controller.d.ts +25 -0
  92. package/dist/forms/controllers/form-submissions.controller.js +10 -0
  93. package/dist/forms/controllers/forms-list.controller.d.ts +22 -0
  94. package/dist/forms/controllers/forms-list.controller.js +10 -0
  95. package/dist/forms/forms.module.d.ts +138 -0
  96. package/dist/forms/forms.module.js +17 -0
  97. package/dist/forms/html-rules.d.ts +34 -0
  98. package/dist/forms/html-rules.js +34 -0
  99. package/dist/forms/index.d.ts +14 -0
  100. package/dist/forms/index.js +12 -0
  101. package/dist/forms/messages.en.d.ts +101 -0
  102. package/dist/forms/messages.en.js +105 -0
  103. package/dist/forms/models.d.ts +29 -0
  104. package/dist/forms/models.js +8 -0
  105. package/dist/forms/ports.d.ts +26 -0
  106. package/dist/forms/ports.js +6 -0
  107. package/dist/forms/react/components/FieldAttributesDialog.d.ts +14 -0
  108. package/dist/forms/react/components/FieldAttributesDialog.js +47 -0
  109. package/dist/forms/react/components/FormEditorFieldsBody.d.ts +28 -0
  110. package/dist/forms/react/components/FormEditorFieldsBody.js +24 -0
  111. package/dist/forms/react/components/FormEditorHeaderText.d.ts +7 -0
  112. package/dist/forms/react/components/FormEditorHeaderText.js +8 -0
  113. package/dist/forms/react/components/FormEditorMainPanel.d.ts +12 -0
  114. package/dist/forms/react/components/FormEditorMainPanel.js +13 -0
  115. package/dist/forms/react/components/FormEditorTabStrip.d.ts +13 -0
  116. package/dist/forms/react/components/FormEditorTabStrip.js +14 -0
  117. package/dist/forms/react/components/FormFieldsEditor.d.ts +13 -0
  118. package/dist/forms/react/components/FormFieldsEditor.js +39 -0
  119. package/dist/forms/react/components/FormSubmissionDate.d.ts +8 -0
  120. package/dist/forms/react/components/FormSubmissionDate.js +5 -0
  121. package/dist/forms/react/components/FormSubmissionDetail.d.ts +15 -0
  122. package/dist/forms/react/components/FormSubmissionDetail.js +30 -0
  123. package/dist/forms/react/components/FormSubmissions.d.ts +12 -0
  124. package/dist/forms/react/components/FormSubmissions.js +46 -0
  125. package/dist/forms/react/hooks/FormsPorts.hooks.d.ts +41 -0
  126. package/dist/forms/react/hooks/FormsPorts.hooks.js +16 -0
  127. package/dist/forms/react/hooks/forms-view.hooks.d.ts +117 -0
  128. package/dist/forms/react/hooks/forms-view.hooks.js +78 -0
  129. package/dist/forms/react/hooks/use-field-attributes-dialog.hooks.d.ts +31 -0
  130. package/dist/forms/react/hooks/use-field-attributes-dialog.hooks.js +22 -0
  131. package/dist/forms/react/hooks/use-form-editor.hooks.d.ts +118 -0
  132. package/dist/forms/react/hooks/use-form-editor.hooks.js +208 -0
  133. package/dist/forms/react/hooks/use-form-fields-editor.hooks.d.ts +34 -0
  134. package/dist/forms/react/hooks/use-form-fields-editor.hooks.js +36 -0
  135. package/dist/forms/react/hooks/use-form-submission-date.hooks.d.ts +12 -0
  136. package/dist/forms/react/hooks/use-form-submission-date.hooks.js +9 -0
  137. package/dist/forms/react/hooks/use-form-submission-detail.hooks.d.ts +68 -0
  138. package/dist/forms/react/hooks/use-form-submission-detail.hooks.js +81 -0
  139. package/dist/forms/react/hooks/use-form-submissions.hooks.d.ts +67 -0
  140. package/dist/forms/react/hooks/use-form-submissions.hooks.js +110 -0
  141. package/dist/forms/react/hooks/use-forms-list.hooks.d.ts +78 -0
  142. package/dist/forms/react/hooks/use-forms-list.hooks.js +103 -0
  143. package/dist/forms/react/index.d.ts +452 -0
  144. package/dist/forms/react/index.js +35 -0
  145. package/dist/forms/react/pages/FormEditor.d.ts +19 -0
  146. package/dist/forms/react/pages/FormEditor.js +40 -0
  147. package/dist/forms/react/pages/FormsList.d.ts +39 -0
  148. package/dist/forms/react/pages/FormsList.js +50 -0
  149. package/dist/forms/rules.d.ts +291 -0
  150. package/dist/forms/rules.js +338 -0
  151. package/dist/media/react/hooks/EditMediaPanel.hooks.js +1 -1
  152. package/dist/media/react/hooks/LibraryTab.hooks.d.ts +1 -1
  153. package/dist/media/react/hooks/LibraryTab.hooks.js +1 -1
  154. package/dist/media/react/hooks/MediaCard.hooks.js +6 -20
  155. package/dist/media/react/hooks/MediaGrid.hooks.d.ts +2 -2
  156. package/dist/media/react/hooks/MediaPage.hooks.d.ts +1 -1
  157. package/dist/media/react/hooks/MediaPage.hooks.js +1 -1
  158. package/dist/media/react/hooks/MediaPicker.hooks.js +1 -1
  159. package/dist/media/react/index.js +1 -1
  160. package/dist/media/react/tabs/LibraryTab.d.ts +1 -1
  161. package/dist/media/react/tabs/ProvidersTab.d.ts +1 -1
  162. package/dist/playground/react/components/Canvas.d.ts +1 -1
  163. package/dist/playground/react/hooks/Canvas.hooks.d.ts +1 -1
  164. package/dist/playground/react/hooks/Canvas.hooks.js +1 -1
  165. package/dist/playground/react/hooks/PlaygroundPage.hooks.d.ts +1 -1
  166. package/dist/playground/react/index.js +1 -1
  167. package/dist/playground/react/pages/PlaygroundPage.d.ts +1 -1
  168. package/dist/playground/react/tabs/CanvasTab.d.ts +1 -1
  169. package/dist/react/bind-react.d.ts +1 -45
  170. package/dist/react/bind-react.js +2 -27
  171. package/dist/react/components/ConfirmDialog/ConfirmDialog.d.ts +22 -5
  172. package/dist/react/components/ConfirmDialog/ConfirmDialog.hooks.d.ts +2 -2
  173. package/dist/react/components/ConfirmDialog/ConfirmDialog.hooks.js +17 -55
  174. package/dist/react/components/ConfirmDialog/ConfirmDialog.js +33 -70
  175. package/dist/react/components/RowMenu/RowMenu.hooks.js +14 -3
  176. package/dist/react/use-controller.d.ts +1 -15
  177. package/dist/react/use-controller.js +2 -17
  178. package/dist/redirects/adapters/http.d.ts +20 -0
  179. package/dist/redirects/adapters/http.js +31 -0
  180. package/dist/redirects/adapters/memory.d.ts +13 -0
  181. package/dist/redirects/adapters/memory.js +83 -0
  182. package/dist/redirects/conformance/redirects-api.conformance.d.ts +12 -0
  183. package/dist/redirects/conformance/redirects-api.conformance.js +66 -0
  184. package/dist/redirects/controllers/hit-count.controller.d.ts +14 -0
  185. package/dist/redirects/controllers/hit-count.controller.js +10 -0
  186. package/dist/redirects/controllers/import-redirects.controller.d.ts +28 -0
  187. package/dist/redirects/controllers/import-redirects.controller.js +29 -0
  188. package/dist/redirects/controllers/redirects.controller.d.ts +37 -0
  189. package/dist/redirects/controllers/redirects.controller.js +38 -0
  190. package/dist/redirects/index.d.ts +11 -0
  191. package/dist/redirects/index.js +10 -0
  192. package/dist/redirects/messages.en.d.ts +58 -0
  193. package/dist/redirects/messages.en.js +60 -0
  194. package/dist/redirects/models.d.ts +14 -0
  195. package/dist/redirects/models.js +2 -0
  196. package/dist/redirects/ports.d.ts +9 -0
  197. package/dist/redirects/ports.js +4 -0
  198. package/dist/redirects/react/components/HitCountCell.d.ts +19 -0
  199. package/dist/redirects/react/components/HitCountCell.js +19 -0
  200. package/dist/redirects/react/components/ImportRedirectsForm.d.ts +17 -0
  201. package/dist/redirects/react/components/ImportRedirectsForm.js +12 -0
  202. package/dist/redirects/react/hooks/RedirectsOptions.hooks.d.ts +27 -0
  203. package/dist/redirects/react/hooks/RedirectsOptions.hooks.js +15 -0
  204. package/dist/redirects/react/hooks/RedirectsPage.hooks.d.ts +50 -0
  205. package/dist/redirects/react/hooks/RedirectsPage.hooks.js +30 -0
  206. package/dist/redirects/react/hooks/RedirectsPorts.hooks.d.ts +10 -0
  207. package/dist/redirects/react/hooks/RedirectsPorts.hooks.js +11 -0
  208. package/dist/redirects/react/hooks/use-hit-count-cell.hooks.d.ts +19 -0
  209. package/dist/redirects/react/hooks/use-hit-count-cell.hooks.js +15 -0
  210. package/dist/redirects/react/hooks/use-import-redirects-form.hooks.d.ts +21 -0
  211. package/dist/redirects/react/hooks/use-import-redirects-form.hooks.js +25 -0
  212. package/dist/redirects/react/hooks/use-redirects.hooks.d.ts +34 -0
  213. package/dist/redirects/react/hooks/use-redirects.hooks.js +63 -0
  214. package/dist/redirects/react/hooks/wired.hooks.d.ts +55 -0
  215. package/dist/redirects/react/hooks/wired.hooks.js +31 -0
  216. package/dist/redirects/react/index.d.ts +324 -0
  217. package/dist/redirects/react/index.js +28 -0
  218. package/dist/redirects/react/pages/RedirectsPage.d.ts +15 -0
  219. package/dist/redirects/react/pages/RedirectsPage.js +20 -0
  220. package/dist/redirects/redirects.module.d.ts +77 -0
  221. package/dist/redirects/redirects.module.js +13 -0
  222. package/dist/redirects/rules.d.ts +131 -0
  223. package/dist/redirects/rules.js +134 -0
  224. package/dist/security/react/hooks/AccessTokensTab.hooks.d.ts +1 -1
  225. package/dist/security/react/hooks/AccessTokensTab.hooks.js +1 -1
  226. package/dist/security/react/hooks/RootKeyTab.hooks.d.ts +1 -1
  227. package/dist/security/react/hooks/RootKeyTab.hooks.js +1 -1
  228. package/dist/security/react/hooks/SecurityPage.hooks.d.ts +1 -1
  229. package/dist/security/react/index.js +1 -1
  230. package/dist/security/react/pages/SecurityPage.d.ts +1 -1
  231. package/dist/security/react/tabs/AccessTokensTab.d.ts +1 -1
  232. package/dist/security/react/tabs/RootKeyTab.d.ts +1 -1
  233. package/dist/seo/adapters/http.d.ts +31 -0
  234. package/dist/seo/adapters/http.js +37 -0
  235. package/dist/seo/adapters/memory.d.ts +28 -0
  236. package/dist/seo/adapters/memory.js +129 -0
  237. package/dist/seo/conformance/seo-api.conformance.d.ts +8 -0
  238. package/dist/seo/conformance/seo-api.conformance.js +44 -0
  239. package/dist/seo/controllers/entry-picker.controller.d.ts +21 -0
  240. package/dist/seo/controllers/entry-picker.controller.js +17 -0
  241. package/dist/seo/controllers/entry-section.controller.d.ts +20 -0
  242. package/dist/seo/controllers/entry-section.controller.js +7 -0
  243. package/dist/seo/controllers/media-ref.controller.d.ts +26 -0
  244. package/dist/seo/controllers/media-ref.controller.js +14 -0
  245. package/dist/seo/controllers/seo-entry.controller.d.ts +31 -0
  246. package/dist/seo/controllers/seo-entry.controller.js +52 -0
  247. package/dist/seo/controllers/seo.controller.d.ts +29 -0
  248. package/dist/seo/controllers/seo.controller.js +50 -0
  249. package/dist/seo/controllers/sitemap.controller.d.ts +25 -0
  250. package/dist/seo/controllers/sitemap.controller.js +27 -0
  251. package/dist/seo/index.d.ts +14 -0
  252. package/dist/seo/index.js +12 -0
  253. package/dist/seo/messages.en.d.ts +79 -0
  254. package/dist/seo/messages.en.js +79 -0
  255. package/dist/seo/models.d.ts +179 -0
  256. package/dist/seo/models.js +8 -0
  257. package/dist/seo/ports.d.ts +11 -0
  258. package/dist/seo/ports.js +4 -0
  259. package/dist/seo/react/components/MediaPickerBridge.d.ts +4 -0
  260. package/dist/seo/react/components/MediaPickerBridge.js +8 -0
  261. package/dist/seo/react/components/MediaRefField.d.ts +40 -0
  262. package/dist/seo/react/components/MediaRefField.js +12 -0
  263. package/dist/seo/react/components/SeoIcons.d.ts +13 -0
  264. package/dist/seo/react/components/SeoIcons.js +32 -0
  265. package/dist/seo/react/components/SitemapModal.d.ts +48 -0
  266. package/dist/seo/react/components/SitemapModal.js +72 -0
  267. package/dist/seo/react/hooks/MediaPickerBridge.hooks.d.ts +6 -0
  268. package/dist/seo/react/hooks/MediaPickerBridge.hooks.js +27 -0
  269. package/dist/seo/react/hooks/MediaRefField.hooks.d.ts +25 -0
  270. package/dist/seo/react/hooks/MediaRefField.hooks.js +30 -0
  271. package/dist/seo/react/hooks/SeoModuleTabs.d.ts +14 -0
  272. package/dist/seo/react/hooks/SeoModuleTabs.js +18 -0
  273. package/dist/seo/react/hooks/SeoPage.hooks.d.ts +69 -0
  274. package/dist/seo/react/hooks/SeoPage.hooks.js +37 -0
  275. package/dist/seo/react/hooks/SeoPorts.hooks.d.ts +19 -0
  276. package/dist/seo/react/hooks/SeoPorts.hooks.js +22 -0
  277. package/dist/seo/react/hooks/SitemapModal.hooks.d.ts +26 -0
  278. package/dist/seo/react/hooks/SitemapModal.hooks.js +20 -0
  279. package/dist/seo/react/hooks/use-entry-picker.hooks.d.ts +11 -0
  280. package/dist/seo/react/hooks/use-entry-picker.hooks.js +20 -0
  281. package/dist/seo/react/hooks/use-seo-entry-panel.hooks.d.ts +14 -0
  282. package/dist/seo/react/hooks/use-seo-entry-panel.hooks.js +26 -0
  283. package/dist/seo/react/hooks/use-seo-entry-section.hooks.d.ts +4 -0
  284. package/dist/seo/react/hooks/use-seo-entry-section.hooks.js +7 -0
  285. package/dist/seo/react/hooks/use-seo.hooks.d.ts +11 -0
  286. package/dist/seo/react/hooks/use-seo.hooks.js +29 -0
  287. package/dist/seo/react/hooks/use-sitemap-modal.hooks.d.ts +10 -0
  288. package/dist/seo/react/hooks/use-sitemap-modal.hooks.js +18 -0
  289. package/dist/seo/react/index.d.ts +369 -0
  290. package/dist/seo/react/index.js +30 -0
  291. package/dist/seo/react/options.d.ts +26 -0
  292. package/dist/seo/react/options.js +2 -0
  293. package/dist/seo/react/pages/SeoPage.d.ts +161 -0
  294. package/dist/seo/react/pages/SeoPage.js +215 -0
  295. package/dist/seo/rules.d.ts +142 -0
  296. package/dist/seo/rules.js +220 -0
  297. package/dist/seo/seo.module.d.ts +115 -0
  298. package/dist/seo/seo.module.js +14 -0
  299. package/dist/source-control/react/hooks/ProvidersTab.hooks.d.ts +1 -1
  300. package/dist/source-control/react/hooks/ProvidersTab.hooks.js +1 -1
  301. package/dist/source-control/react/hooks/SourceControlPage.hooks.d.ts +1 -1
  302. package/dist/source-control/react/index.js +1 -1
  303. package/dist/source-control/react/pages/SourceControlPage.d.ts +1 -1
  304. package/dist/source-control/react/tabs/ProvidersTab.d.ts +1 -1
  305. package/dist/widgets/adapters/http.d.ts +19 -0
  306. package/dist/widgets/adapters/http.js +33 -0
  307. package/dist/widgets/adapters/memory.d.ts +22 -0
  308. package/dist/widgets/adapters/memory.js +93 -0
  309. package/dist/widgets/conformance/widgets-api.conformance.d.ts +6 -0
  310. package/dist/widgets/conformance/widgets-api.conformance.js +55 -0
  311. package/dist/widgets/controllers/instance-editor.controller.d.ts +49 -0
  312. package/dist/widgets/controllers/instance-editor.controller.js +87 -0
  313. package/dist/widgets/controllers/library.controller.d.ts +33 -0
  314. package/dist/widgets/controllers/library.controller.js +53 -0
  315. package/dist/widgets/controllers/region-editor.controller.d.ts +42 -0
  316. package/dist/widgets/controllers/region-editor.controller.js +69 -0
  317. package/dist/widgets/controllers/regions.controller.d.ts +27 -0
  318. package/dist/widgets/controllers/regions.controller.js +44 -0
  319. package/dist/widgets/index.d.ts +11 -0
  320. package/dist/widgets/index.js +9 -0
  321. package/dist/widgets/messages.en.d.ts +78 -0
  322. package/dist/widgets/messages.en.js +83 -0
  323. package/dist/widgets/models.d.ts +62 -0
  324. package/dist/widgets/models.js +2 -0
  325. package/dist/widgets/ports.d.ts +79 -0
  326. package/dist/widgets/ports.js +5 -0
  327. package/dist/widgets/react/components/WidgetInstanceNotices.d.ts +14 -0
  328. package/dist/widgets/react/components/WidgetInstanceNotices.js +25 -0
  329. package/dist/widgets/react/components/WidgetRegionEditorHeaderActions.d.ts +22 -0
  330. package/dist/widgets/react/components/WidgetRegionEditorHeaderActions.js +18 -0
  331. package/dist/widgets/react/components/WidgetsLibraryNotices.d.ts +13 -0
  332. package/dist/widgets/react/components/WidgetsLibraryNotices.js +10 -0
  333. package/dist/widgets/react/hooks/WidgetsPorts.hooks.d.ts +270 -0
  334. package/dist/widgets/react/hooks/WidgetsPorts.hooks.js +17 -0
  335. package/dist/widgets/react/hooks/navigation.hooks.d.ts +9 -0
  336. package/dist/widgets/react/hooks/navigation.hooks.js +6 -0
  337. package/dist/widgets/react/hooks/page-views.hooks.d.ts +87 -0
  338. package/dist/widgets/react/hooks/page-views.hooks.js +30 -0
  339. package/dist/widgets/react/hooks/use-widget-instance-editor.hooks.d.ts +56 -0
  340. package/dist/widgets/react/hooks/use-widget-instance-editor.hooks.js +38 -0
  341. package/dist/widgets/react/hooks/use-widget-region-editor.hooks.d.ts +32 -0
  342. package/dist/widgets/react/hooks/use-widget-region-editor.hooks.js +22 -0
  343. package/dist/widgets/react/hooks/use-widget-regions.hooks.d.ts +23 -0
  344. package/dist/widgets/react/hooks/use-widget-regions.hooks.js +22 -0
  345. package/dist/widgets/react/hooks/use-widgets-library.hooks.d.ts +37 -0
  346. package/dist/widgets/react/hooks/use-widgets-library.hooks.js +23 -0
  347. package/dist/widgets/react/index.d.ts +391 -0
  348. package/dist/widgets/react/index.js +31 -0
  349. package/dist/widgets/react/pages/WidgetInstanceEditor.d.ts +23 -0
  350. package/dist/widgets/react/pages/WidgetInstanceEditor.js +37 -0
  351. package/dist/widgets/react/pages/WidgetRegionEditor.d.ts +22 -0
  352. package/dist/widgets/react/pages/WidgetRegionEditor.js +25 -0
  353. package/dist/widgets/react/pages/WidgetRegions.d.ts +21 -0
  354. package/dist/widgets/react/pages/WidgetRegions.js +31 -0
  355. package/dist/widgets/react/pages/WidgetsLibrary.d.ts +24 -0
  356. package/dist/widgets/react/pages/WidgetsLibrary.js +61 -0
  357. package/dist/widgets/rules.d.ts +94 -0
  358. package/dist/widgets/rules.js +83 -0
  359. package/dist/widgets/widgets.module.d.ts +122 -0
  360. package/dist/widgets/widgets.module.js +21 -0
  361. package/package.json +206 -9
@@ -0,0 +1,369 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { AdminInstance } from '../../core/module/types.js';
3
+ import type { SeoReactOptions } from './options.js';
4
+ export type { SeoReactOptions, SeoMediaPickerSlotProps } from './options.js';
5
+ export { useSeoPorts } from './hooks/SeoPorts.hooks.js';
6
+ export { resolveSeoTabs, sitemapStateLabel } from './hooks/SeoPage.hooks.js';
7
+ export type { SeoProps } from './pages/SeoPage.js';
8
+ /** One binding per admin scope. Site origin is host-owned; all views are loaded on demand. */
9
+ export declare function seo({ siteUrl }: Pick<SeoReactOptions, 'siteUrl'>, optional?: Omit<SeoReactOptions, 'siteUrl'>): {
10
+ id: "seo";
11
+ requires: {
12
+ readonly seoApi: import("../../core/module/token.js").AdminPortToken<import("../ports.js").AdminSeoPort, "admin.seo.api">;
13
+ };
14
+ optional: {
15
+ readonly seoEvents: import("../../core/module/token.js").AdminPortToken<import("../ports.js").SeoEventsPort, "admin.seo.events">;
16
+ readonly mediaPicker: import("../../core/module/token.js").AdminPortToken<import("../../contracts/media-picker.js").MediaPickerPort, "admin.media.picker">;
17
+ };
18
+ messages: {
19
+ readonly "Site defaults": "Site defaults";
20
+ readonly Sitemap: "Sitemap";
21
+ readonly "Pages & posts": "Pages & posts";
22
+ readonly "This site publishes a sitemap.": "This site publishes a sitemap.";
23
+ readonly "This site does not publish a sitemap. Turn it on under Site defaults.": "This site does not publish a sitemap. Turn it on under Site defaults.";
24
+ readonly "Loading entries\u2026": "Loading entries…";
25
+ readonly Entry: "Entry";
26
+ readonly "Choose an entry\u2026": "Choose an entry…";
27
+ readonly Analysis: "Analysis";
28
+ readonly "Score:": "Score:";
29
+ readonly "No issues.": "No issues.";
30
+ readonly "Loading entry SEO\u2026": "Loading entry SEO…";
31
+ readonly "Per-entry overrides": "Per-entry overrides";
32
+ readonly "Fields show the currently-effective value (author override, or site default, or derived from the entry). Only fields you change here are saved as overrides.": "Fields show the currently-effective value (author override, or site default, or derived from the entry). Only fields you change here are saved as overrides.";
33
+ readonly "Empty a field and save to remove its override \u2014 the entry falls back to the site default.": "Empty a field and save to remove its override — the entry falls back to the site default.";
34
+ readonly Title: "Title";
35
+ readonly Description: "Description";
36
+ readonly "Canonical URL": "Canonical URL";
37
+ readonly Noindex: "Noindex";
38
+ readonly Nofollow: "Nofollow";
39
+ readonly "OG title": "OG title";
40
+ readonly "OG description": "OG description";
41
+ readonly "OG image": "OG image";
42
+ readonly "Twitter title": "Twitter title";
43
+ readonly "Twitter description": "Twitter description";
44
+ readonly "Twitter image": "Twitter image";
45
+ readonly "Saving\u2026": "Saving…";
46
+ readonly "Save overrides": "Save overrides";
47
+ readonly "Per-entry SEO": "Per-entry SEO";
48
+ readonly "Search appearance": "Search appearance";
49
+ readonly "Title template (must contain %s)": "Title template (must contain %s)";
50
+ readonly "Default meta description": "Default meta description";
51
+ readonly "Social sharing": "Social sharing";
52
+ readonly "Default Open Graph / Twitter image": "Default Open Graph / Twitter image";
53
+ readonly "Twitter @site handle": "Twitter @site handle";
54
+ readonly Crawling: "Crawling";
55
+ readonly "Default noindex": "Default noindex";
56
+ readonly "Default nofollow": "Default nofollow";
57
+ readonly "Sitemap enabled": "Sitemap enabled";
58
+ readonly "Save settings": "Save settings";
59
+ readonly "Cached sitemap": "Cached sitemap";
60
+ readonly "Rebuild the sitemap now to include the latest published content.": "Rebuild the sitemap now to include the latest published content.";
61
+ readonly "Working\u2026": "Working…";
62
+ readonly "Regenerate sitemap": "Regenerate sitemap";
63
+ readonly "View sitemap": "View sitemap";
64
+ readonly "Loading SEO settings\u2026": "Loading SEO settings…";
65
+ readonly Marketing: "Marketing";
66
+ readonly "Site-wide defaults for meta titles, descriptions, Open Graph/Twitter cards, and robots directives.": "Site-wide defaults for meta titles, descriptions, Open Graph/Twitter cards, and robots directives.";
67
+ readonly "Choose image": "Choose image";
68
+ readonly Remove: "Remove";
69
+ readonly "Sitemap \u00B7 {count} URLs": "Sitemap · {count} URLs";
70
+ readonly "sitemap.xml \u2197": "sitemap.xml ↗";
71
+ readonly Table: "Table";
72
+ readonly "Raw XML": "Raw XML";
73
+ readonly "The sitemap has no URLs yet.": "The sitemap has no URLs yet.";
74
+ readonly "Filter sitemap URLs": "Filter sitemap URLs";
75
+ readonly "Filter by URL\u2026": "Filter by URL…";
76
+ readonly "No URLs match this filter.": "No URLs match this filter.";
77
+ readonly URL: "URL";
78
+ readonly "Last modified": "Last modified";
79
+ readonly "\u2014": "—";
80
+ readonly "Sitemap is off. Turn on \"Sitemap enabled\" above to publish one.": "Sitemap is off. Turn on \"Sitemap enabled\" above to publish one.";
81
+ readonly "Loading sitemap\u2026": "Loading sitemap…";
82
+ readonly Close: "Close";
83
+ readonly "failed to load entries": "failed to load entries";
84
+ readonly "failed to load entry SEO data": "failed to load entry SEO data";
85
+ readonly "Saved.": "Saved.";
86
+ readonly "failed to save SEO overrides": "failed to save SEO overrides";
87
+ readonly "failed to load SEO settings": "failed to load SEO settings";
88
+ readonly "failed to save SEO settings": "failed to save SEO settings";
89
+ readonly "Sitemap regeneration accepted.": "Sitemap regeneration accepted.";
90
+ readonly "failed to regenerate sitemap": "failed to regenerate sitemap";
91
+ readonly "failed to load the sitemap": "failed to load the sitemap";
92
+ readonly "Could not load the sitemap (HTTP {status}).": "Could not load the sitemap (HTTP {status}).";
93
+ readonly "Selected image": "Selected image";
94
+ };
95
+ pages: {
96
+ readonly settings: {
97
+ readonly path: "/seo";
98
+ readonly label: "SEO";
99
+ readonly permissions: readonly ["admin.seo.manage"];
100
+ readonly agentReachable: true;
101
+ readonly nav: {
102
+ readonly group: "content";
103
+ readonly icon: "search";
104
+ };
105
+ readonly tabs: {
106
+ readonly defaults: {
107
+ readonly label: "Site defaults";
108
+ readonly agentReachable: true;
109
+ };
110
+ readonly sitemap: {
111
+ readonly label: "Sitemap";
112
+ readonly agentReachable: true;
113
+ };
114
+ readonly entries: {
115
+ readonly label: "Pages & posts";
116
+ readonly agentReachable: true;
117
+ };
118
+ };
119
+ };
120
+ };
121
+ } & {
122
+ react: {
123
+ Provider: ({ admin, children, options }: {
124
+ admin: AdminInstance;
125
+ children: ReactNode;
126
+ options?: SeoReactOptions;
127
+ }, _optional?: Record<string, never>) => import("react").FunctionComponentElement<{
128
+ admin: AdminInstance;
129
+ children: ReactNode;
130
+ }>;
131
+ module: {
132
+ readonly id: "seo";
133
+ readonly requires: {
134
+ readonly seoApi: import("../../core/module/token.js").AdminPortToken<import("../ports.js").AdminSeoPort, "admin.seo.api">;
135
+ };
136
+ readonly optional: {
137
+ readonly seoEvents: import("../../core/module/token.js").AdminPortToken<import("../ports.js").SeoEventsPort, "admin.seo.events">;
138
+ readonly mediaPicker: import("../../core/module/token.js").AdminPortToken<import("../../contracts/media-picker.js").MediaPickerPort, "admin.media.picker">;
139
+ };
140
+ readonly messages: {
141
+ readonly "Site defaults": "Site defaults";
142
+ readonly Sitemap: "Sitemap";
143
+ readonly "Pages & posts": "Pages & posts";
144
+ readonly "This site publishes a sitemap.": "This site publishes a sitemap.";
145
+ readonly "This site does not publish a sitemap. Turn it on under Site defaults.": "This site does not publish a sitemap. Turn it on under Site defaults.";
146
+ readonly "Loading entries\u2026": "Loading entries…";
147
+ readonly Entry: "Entry";
148
+ readonly "Choose an entry\u2026": "Choose an entry…";
149
+ readonly Analysis: "Analysis";
150
+ readonly "Score:": "Score:";
151
+ readonly "No issues.": "No issues.";
152
+ readonly "Loading entry SEO\u2026": "Loading entry SEO…";
153
+ readonly "Per-entry overrides": "Per-entry overrides";
154
+ readonly "Fields show the currently-effective value (author override, or site default, or derived from the entry). Only fields you change here are saved as overrides.": "Fields show the currently-effective value (author override, or site default, or derived from the entry). Only fields you change here are saved as overrides.";
155
+ readonly "Empty a field and save to remove its override \u2014 the entry falls back to the site default.": "Empty a field and save to remove its override — the entry falls back to the site default.";
156
+ readonly Title: "Title";
157
+ readonly Description: "Description";
158
+ readonly "Canonical URL": "Canonical URL";
159
+ readonly Noindex: "Noindex";
160
+ readonly Nofollow: "Nofollow";
161
+ readonly "OG title": "OG title";
162
+ readonly "OG description": "OG description";
163
+ readonly "OG image": "OG image";
164
+ readonly "Twitter title": "Twitter title";
165
+ readonly "Twitter description": "Twitter description";
166
+ readonly "Twitter image": "Twitter image";
167
+ readonly "Saving\u2026": "Saving…";
168
+ readonly "Save overrides": "Save overrides";
169
+ readonly "Per-entry SEO": "Per-entry SEO";
170
+ readonly "Search appearance": "Search appearance";
171
+ readonly "Title template (must contain %s)": "Title template (must contain %s)";
172
+ readonly "Default meta description": "Default meta description";
173
+ readonly "Social sharing": "Social sharing";
174
+ readonly "Default Open Graph / Twitter image": "Default Open Graph / Twitter image";
175
+ readonly "Twitter @site handle": "Twitter @site handle";
176
+ readonly Crawling: "Crawling";
177
+ readonly "Default noindex": "Default noindex";
178
+ readonly "Default nofollow": "Default nofollow";
179
+ readonly "Sitemap enabled": "Sitemap enabled";
180
+ readonly "Save settings": "Save settings";
181
+ readonly "Cached sitemap": "Cached sitemap";
182
+ readonly "Rebuild the sitemap now to include the latest published content.": "Rebuild the sitemap now to include the latest published content.";
183
+ readonly "Working\u2026": "Working…";
184
+ readonly "Regenerate sitemap": "Regenerate sitemap";
185
+ readonly "View sitemap": "View sitemap";
186
+ readonly "Loading SEO settings\u2026": "Loading SEO settings…";
187
+ readonly Marketing: "Marketing";
188
+ readonly "Site-wide defaults for meta titles, descriptions, Open Graph/Twitter cards, and robots directives.": "Site-wide defaults for meta titles, descriptions, Open Graph/Twitter cards, and robots directives.";
189
+ readonly "Choose image": "Choose image";
190
+ readonly Remove: "Remove";
191
+ readonly "Sitemap \u00B7 {count} URLs": "Sitemap · {count} URLs";
192
+ readonly "sitemap.xml \u2197": "sitemap.xml ↗";
193
+ readonly Table: "Table";
194
+ readonly "Raw XML": "Raw XML";
195
+ readonly "The sitemap has no URLs yet.": "The sitemap has no URLs yet.";
196
+ readonly "Filter sitemap URLs": "Filter sitemap URLs";
197
+ readonly "Filter by URL\u2026": "Filter by URL…";
198
+ readonly "No URLs match this filter.": "No URLs match this filter.";
199
+ readonly URL: "URL";
200
+ readonly "Last modified": "Last modified";
201
+ readonly "\u2014": "—";
202
+ readonly "Sitemap is off. Turn on \"Sitemap enabled\" above to publish one.": "Sitemap is off. Turn on \"Sitemap enabled\" above to publish one.";
203
+ readonly "Loading sitemap\u2026": "Loading sitemap…";
204
+ readonly Close: "Close";
205
+ readonly "failed to load entries": "failed to load entries";
206
+ readonly "failed to load entry SEO data": "failed to load entry SEO data";
207
+ readonly "Saved.": "Saved.";
208
+ readonly "failed to save SEO overrides": "failed to save SEO overrides";
209
+ readonly "failed to load SEO settings": "failed to load SEO settings";
210
+ readonly "failed to save SEO settings": "failed to save SEO settings";
211
+ readonly "Sitemap regeneration accepted.": "Sitemap regeneration accepted.";
212
+ readonly "failed to regenerate sitemap": "failed to regenerate sitemap";
213
+ readonly "failed to load the sitemap": "failed to load the sitemap";
214
+ readonly "Could not load the sitemap (HTTP {status}).": "Could not load the sitemap (HTTP {status}).";
215
+ readonly "Selected image": "Selected image";
216
+ };
217
+ readonly pages: {
218
+ readonly settings: {
219
+ readonly path: "/seo";
220
+ readonly label: "SEO";
221
+ readonly permissions: readonly ["admin.seo.manage"];
222
+ readonly agentReachable: true;
223
+ readonly nav: {
224
+ readonly group: "content";
225
+ readonly icon: "search";
226
+ };
227
+ readonly tabs: {
228
+ readonly defaults: {
229
+ readonly label: "Site defaults";
230
+ readonly agentReachable: true;
231
+ };
232
+ readonly sitemap: {
233
+ readonly label: "Sitemap";
234
+ readonly agentReachable: true;
235
+ };
236
+ readonly entries: {
237
+ readonly label: "Pages & posts";
238
+ readonly agentReachable: true;
239
+ };
240
+ };
241
+ };
242
+ };
243
+ };
244
+ pages: {
245
+ readonly settings: {
246
+ Page: import("react").LazyExoticComponent<import("react").ComponentType<import("../../react/bind-react.js").ModulePageProps>>;
247
+ tabs: {
248
+ readonly defaults: import("react").LazyExoticComponent<import("react").ComponentType<import("../../react/bind-react.js").TabViewProps>>;
249
+ readonly sitemap: import("react").LazyExoticComponent<import("react").ComponentType<import("../../react/bind-react.js").TabViewProps>>;
250
+ readonly entries: import("react").LazyExoticComponent<import("react").ComponentType<import("../../react/bind-react.js").TabViewProps>>;
251
+ };
252
+ };
253
+ };
254
+ usePorts: (_required?: Record<string, never>, _optional?: Record<string, never>) => import("../../core/module/types.js").ScopedPorts<{
255
+ readonly id: "seo";
256
+ readonly requires: {
257
+ readonly seoApi: import("../../core/module/token.js").AdminPortToken<import("../ports.js").AdminSeoPort, "admin.seo.api">;
258
+ };
259
+ readonly optional: {
260
+ readonly seoEvents: import("../../core/module/token.js").AdminPortToken<import("../ports.js").SeoEventsPort, "admin.seo.events">;
261
+ readonly mediaPicker: import("../../core/module/token.js").AdminPortToken<import("../../contracts/media-picker.js").MediaPickerPort, "admin.media.picker">;
262
+ };
263
+ readonly messages: {
264
+ readonly "Site defaults": "Site defaults";
265
+ readonly Sitemap: "Sitemap";
266
+ readonly "Pages & posts": "Pages & posts";
267
+ readonly "This site publishes a sitemap.": "This site publishes a sitemap.";
268
+ readonly "This site does not publish a sitemap. Turn it on under Site defaults.": "This site does not publish a sitemap. Turn it on under Site defaults.";
269
+ readonly "Loading entries\u2026": "Loading entries…";
270
+ readonly Entry: "Entry";
271
+ readonly "Choose an entry\u2026": "Choose an entry…";
272
+ readonly Analysis: "Analysis";
273
+ readonly "Score:": "Score:";
274
+ readonly "No issues.": "No issues.";
275
+ readonly "Loading entry SEO\u2026": "Loading entry SEO…";
276
+ readonly "Per-entry overrides": "Per-entry overrides";
277
+ readonly "Fields show the currently-effective value (author override, or site default, or derived from the entry). Only fields you change here are saved as overrides.": "Fields show the currently-effective value (author override, or site default, or derived from the entry). Only fields you change here are saved as overrides.";
278
+ readonly "Empty a field and save to remove its override \u2014 the entry falls back to the site default.": "Empty a field and save to remove its override — the entry falls back to the site default.";
279
+ readonly Title: "Title";
280
+ readonly Description: "Description";
281
+ readonly "Canonical URL": "Canonical URL";
282
+ readonly Noindex: "Noindex";
283
+ readonly Nofollow: "Nofollow";
284
+ readonly "OG title": "OG title";
285
+ readonly "OG description": "OG description";
286
+ readonly "OG image": "OG image";
287
+ readonly "Twitter title": "Twitter title";
288
+ readonly "Twitter description": "Twitter description";
289
+ readonly "Twitter image": "Twitter image";
290
+ readonly "Saving\u2026": "Saving…";
291
+ readonly "Save overrides": "Save overrides";
292
+ readonly "Per-entry SEO": "Per-entry SEO";
293
+ readonly "Search appearance": "Search appearance";
294
+ readonly "Title template (must contain %s)": "Title template (must contain %s)";
295
+ readonly "Default meta description": "Default meta description";
296
+ readonly "Social sharing": "Social sharing";
297
+ readonly "Default Open Graph / Twitter image": "Default Open Graph / Twitter image";
298
+ readonly "Twitter @site handle": "Twitter @site handle";
299
+ readonly Crawling: "Crawling";
300
+ readonly "Default noindex": "Default noindex";
301
+ readonly "Default nofollow": "Default nofollow";
302
+ readonly "Sitemap enabled": "Sitemap enabled";
303
+ readonly "Save settings": "Save settings";
304
+ readonly "Cached sitemap": "Cached sitemap";
305
+ readonly "Rebuild the sitemap now to include the latest published content.": "Rebuild the sitemap now to include the latest published content.";
306
+ readonly "Working\u2026": "Working…";
307
+ readonly "Regenerate sitemap": "Regenerate sitemap";
308
+ readonly "View sitemap": "View sitemap";
309
+ readonly "Loading SEO settings\u2026": "Loading SEO settings…";
310
+ readonly Marketing: "Marketing";
311
+ readonly "Site-wide defaults for meta titles, descriptions, Open Graph/Twitter cards, and robots directives.": "Site-wide defaults for meta titles, descriptions, Open Graph/Twitter cards, and robots directives.";
312
+ readonly "Choose image": "Choose image";
313
+ readonly Remove: "Remove";
314
+ readonly "Sitemap \u00B7 {count} URLs": "Sitemap · {count} URLs";
315
+ readonly "sitemap.xml \u2197": "sitemap.xml ↗";
316
+ readonly Table: "Table";
317
+ readonly "Raw XML": "Raw XML";
318
+ readonly "The sitemap has no URLs yet.": "The sitemap has no URLs yet.";
319
+ readonly "Filter sitemap URLs": "Filter sitemap URLs";
320
+ readonly "Filter by URL\u2026": "Filter by URL…";
321
+ readonly "No URLs match this filter.": "No URLs match this filter.";
322
+ readonly URL: "URL";
323
+ readonly "Last modified": "Last modified";
324
+ readonly "\u2014": "—";
325
+ readonly "Sitemap is off. Turn on \"Sitemap enabled\" above to publish one.": "Sitemap is off. Turn on \"Sitemap enabled\" above to publish one.";
326
+ readonly "Loading sitemap\u2026": "Loading sitemap…";
327
+ readonly Close: "Close";
328
+ readonly "failed to load entries": "failed to load entries";
329
+ readonly "failed to load entry SEO data": "failed to load entry SEO data";
330
+ readonly "Saved.": "Saved.";
331
+ readonly "failed to save SEO overrides": "failed to save SEO overrides";
332
+ readonly "failed to load SEO settings": "failed to load SEO settings";
333
+ readonly "failed to save SEO settings": "failed to save SEO settings";
334
+ readonly "Sitemap regeneration accepted.": "Sitemap regeneration accepted.";
335
+ readonly "failed to regenerate sitemap": "failed to regenerate sitemap";
336
+ readonly "failed to load the sitemap": "failed to load the sitemap";
337
+ readonly "Could not load the sitemap (HTTP {status}).": "Could not load the sitemap (HTTP {status}).";
338
+ readonly "Selected image": "Selected image";
339
+ };
340
+ readonly pages: {
341
+ readonly settings: {
342
+ readonly path: "/seo";
343
+ readonly label: "SEO";
344
+ readonly permissions: readonly ["admin.seo.manage"];
345
+ readonly agentReachable: true;
346
+ readonly nav: {
347
+ readonly group: "content";
348
+ readonly icon: "search";
349
+ };
350
+ readonly tabs: {
351
+ readonly defaults: {
352
+ readonly label: "Site defaults";
353
+ readonly agentReachable: true;
354
+ };
355
+ readonly sitemap: {
356
+ readonly label: "Sitemap";
357
+ readonly agentReachable: true;
358
+ };
359
+ readonly entries: {
360
+ readonly label: "Pages & posts";
361
+ readonly agentReachable: true;
362
+ };
363
+ };
364
+ };
365
+ };
366
+ }>;
367
+ };
368
+ };
369
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { createElement } from 'react';
2
+ import { bindReact } from '../../core/react/bind-react.js';
3
+ import { seoModule } from '../seo.module.js';
4
+ import { SeoPortsContext, SeoOptionsContext } from './hooks/SeoPorts.hooks.js';
5
+ export { useSeoPorts } from './hooks/SeoPorts.hooks.js';
6
+ export { resolveSeoTabs, sitemapStateLabel } from './hooks/SeoPage.hooks.js';
7
+ /** One binding per admin scope. Site origin is host-owned; all views are loaded on demand. */
8
+ export function seo({ siteUrl }, optional = {}) {
9
+ const defaults = { siteUrl, ...optional };
10
+ const page = async () => {
11
+ const { SeoPage } = await import('./pages/SeoPage.js');
12
+ return { default: (props) => createElement(SeoPage, { tabId: props.requestedTab, onTabChange: props.onTabChange }) };
13
+ };
14
+ const tab = (id) => async () => {
15
+ const views = await import('./hooks/SeoModuleTabs.js');
16
+ return { default: (props) => createElement(views[id], props) };
17
+ };
18
+ // The unchanged shell owns its active panel and banners. Standalone lazy tab mounts reuse those
19
+ // same panel functions rather than introducing a second markup owner.
20
+ const react = bindReact({ module: seoModule, views: { settings: { page, tabs: { defaults: tab('SeoDefaultsModuleTab'), sitemap: tab('SeoSitemapModuleTab'), entries: tab('SeoEntriesModuleTab') } } } }, { context: SeoPortsContext });
21
+ /** Host options may refresh without replacing lazy views or controller state.
22
+ * @returns The existing port scope plus the current options; factory defaults remain supported.
23
+ * @example <Provider admin={admin} options={localizedOptions}>{children}</Provider>
24
+ */
25
+ function Provider({ admin, children, options = defaults }, _optional = {}) {
26
+ return createElement(react.Provider, { admin, children: createElement(SeoOptionsContext.Provider, { value: options }, children) });
27
+ }
28
+ return Object.assign({ ...seoModule }, { react: { ...react, Provider } });
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,26 @@
1
+ import type { ComponentType, ReactNode } from 'react';
2
+ import type { SeoMediaSelection, SeoTranslator, SeoErrorFormatter } from '../models.js';
3
+ /** Host dialog wrapper keeps its existing media service, DOM and caller-specific handle ids. */
4
+ export interface SeoMediaPickerSlotProps {
5
+ onSelect: (item: SeoMediaSelection) => void;
6
+ onCancel: () => void;
7
+ accept?: readonly string[];
8
+ agentHandle?: string | undefined;
9
+ }
10
+ export interface SeoReactOptions {
11
+ siteUrl: () => string;
12
+ t?: SeoTranslator | undefined;
13
+ describeError?: SeoErrorFormatter | undefined;
14
+ /** Format parsed lastmod values in the host's live locale/timezone; raw XML remains untouched.
15
+ * Omit to use the shared compact ISO timestamp display.
16
+ * @example ({ iso }) => formDateDisplay({ iso, locale }).text
17
+ */
18
+ formatDate?: ((required: {
19
+ iso: string;
20
+ }, optional?: Record<string, never>) => string) | undefined;
21
+ headerActions?: ReactNode;
22
+ slots?: {
23
+ MediaPickerDialog?: ComponentType<SeoMediaPickerSlotProps>;
24
+ };
25
+ }
26
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1,161 @@
1
+ import type { ReactNode } from "react";
2
+ import type { SeoTabController } from "../hooks/SeoPage.hooks.js";
3
+ import { useWiredEntryPicker } from "../hooks/use-entry-picker.hooks.js";
4
+ import { useWiredSeoEntryPanel } from "../hooks/use-seo-entry-panel.hooks.js";
5
+ import { useSeoEntrySection } from "../hooks/use-seo-entry-section.hooks.js";
6
+ import { useWiredSeo } from "../hooks/use-seo.hooks.js";
7
+ /**
8
+ * `SeoSettingsScreen` (SPEC-008 ui.spec.md §2.4) — the site-wide `seo.*` settings form +
9
+ * `SitemapRegenerateButton` (§2.6). Coordinator-authored 2026-07-13, post-session-limit resume.
10
+ * Markup only.
11
+ *
12
+ * State and API calls live in one hook per component: `hooks/use-seo.hooks.ts` (top-level
13
+ * defaults form + sitemap button), `hooks/use-entry-picker.hooks.ts`, `hooks/use-seo-entry-panel
14
+ * .hooks.ts`, `hooks/use-seo-entry-section.hooks.ts`. The issue-severity sort lives in `rules.ts`.
15
+ *
16
+ * SPEC-037 REQ-06/07/08: `SeoEntryPanel` closes the deferred per-entry gap this file's own header
17
+ * used to disclose — a standalone entry picker (dropdown over `listPosts`/`listPages`, cheaper
18
+ * than threading a new panel through `PostEditor.tsx`, per REQ-06's own "implementer's choice")
19
+ * plus a partial-override edit form and a read-only analyze view. `RobotsRuleEditor` (§2.5) is
20
+ * still a minimal textarea-per-rule form (unchanged from the original disclosed scope note).
21
+ *
22
+ * Copy comes from the module's injected t function. Legacy locale props remain render-contract
23
+ * metadata only; Tovu retains its dictionaries and passes the bound translator through the module.
24
+ * Host publish behavior is injected as headerActions, and media selection uses its existing slot
25
+ * or the shared mediaPickerToken service. The original rationale is archived in SOURCE-RATIONALE.
26
+ *
27
+ * ## Tabs (2026-09-06)
28
+ *
29
+ * The three sections above are now three `?tab=` tabs — Site defaults, Sitemap, Pages & posts —
30
+ * built on the shared `@jini-ai/ui/tab-strip` that `Deployment.tsx`, `Sites.tsx`, `Themes.tsx`,
31
+ * `Security.tsx`, `SourceControl.tsx` and `Database.tsx` already use. Nothing new was written for
32
+ * the tab mechanism: the shell was ALREADY extracted (`@jini-ai/ui/tab-strip` for the strip,
33
+ * `lib/resolve-active-tab-id.ts` for the `?tab=` guard), so this screen reuses it rather than
34
+ * becoming a third implementation. The reasoning for the grouping, the tab NAMES, and the one
35
+ * cut that was considered and rejected all live in `react/hooks/SeoPage.hooks.ts`'s header.
36
+ *
37
+ * Everything below the shell is unchanged markup, only relocated: `SeoDefaultsTab` holds the form
38
+ * verbatim (with two field-group headings added, which it never had), `SeoSitemapTab` holds the
39
+ * sitemap actions plus a new state line, and the Pages & posts panel IS the existing
40
+ * `SeoEntrySection`, rendered directly rather than wrapped in a new component that would add
41
+ * nothing.
42
+ * No component was split or merged, so `SeoEntryPanel` — the one function in this file carrying a
43
+ * recorded complexity exemption (`development/scripts/admin-complexity-debt.json`, keyed by
44
+ * `{rule, file, reason}`) — stays in THIS file at its recorded measurement. Moving it to a tab
45
+ * file of its own, the way `Deployment.tsx` gives each tab a file, would have made its debt entry
46
+ * name a path that no longer exists and required adding a NEW entry for the new file, growing a
47
+ * baseline that JSON's own instructions say must only shrink. One file, top-level components: the
48
+ * ESLint gate scores functions independently of which file they sit in, so the ceiling is
49
+ * satisfied either way — only the organizational preference differs, and the debt key decides it.
50
+ *
51
+ * ## Out of the cards (2026-09-06, same day)
52
+ *
53
+ * Owner, on the screen the section above describes: "for seo can you take the stuff out of the
54
+ * cards?" Every panel here was a `.card` (Site defaults, Sitemap) or a `.notice` (the two
55
+ * per-entry panels) and is now content laid directly on the page, held together by `SeoSection`'s
56
+ * heading rail and one hairline per seam. `styles/seo.css`'s header carries the measurements and
57
+ * the full reasoning, including why the card was never what grouped the three field groups.
58
+ *
59
+ * Two claims in the paragraph above are now stale and are corrected here rather than rewritten in
60
+ * place, since the tab conversion's own reasoning is still the reason the tabs exist: the defaults
61
+ * form has THREE field-group headings, not two ("Social sharing" was split out in the same
62
+ * commit), and those groups are `SeoSection`s rather than `.field-group` divs. What has NOT
63
+ * changed is the constraint that matters — all seven fields still live in one `<form>`, submitted
64
+ * as one `FormData`, with nothing about them conditional.
65
+ */
66
+ export interface SeoSectionProps {
67
+ title: string;
68
+ children: ReactNode;
69
+ }
70
+ export interface EntryPickerProps {
71
+ locale: string;
72
+ entryId: string;
73
+ onChange: (entryId: string) => void;
74
+ /** Dependency injection seam for tests — the same convention `@jini-ai/ui`'s `CustomSelect` uses
75
+ * for `useCustomSelect`. */
76
+ useEntryPickerHook?: typeof useWiredEntryPicker;
77
+ }
78
+ export interface SeoEntryPanelProps {
79
+ locale: string;
80
+ entryId: string;
81
+ useSeoEntryPanelHook?: typeof useWiredSeoEntryPanel;
82
+ }
83
+ export interface SeoEntrySectionProps {
84
+ locale: string;
85
+ useSeoEntrySectionHook?: typeof useSeoEntrySection;
86
+ }
87
+ /** Section wrapper (REQ-06/07) — entry picker over the per-entry edit + analyze panels. This IS the
88
+ * "Pages & posts" tab panel; it kept its name and its markup, because nothing about it changed
89
+ * except that a tab now selects it.
90
+ *
91
+ * The `<h2>` stays, and deliberately so — dropping it as "redundant with the tab label" was tried
92
+ * and reverted. A tab label is not a heading: `TabBar` emits `role="tab"` buttons, which do not
93
+ * appear in a screen reader's heading list at all, so removing this left the whole panel with `H1`
94
+ * and nothing else — the exact regression `deployment/HistoryTab.tsx`'s own comment records
95
+ * measuring live on its tab. It is also not a duplicate: the tab reads "Pages & posts" (what you
96
+ * pick from), the heading reads "Per-entry SEO" (what you are editing). */
97
+ export declare function SeoEntrySection({ locale, useSeoEntrySectionHook }: SeoEntrySectionProps, _optional?: Record<string, never>): import("react").JSX.Element;
98
+ /** What the two site-wide tab panels need from `useWiredSeo()`. Named as one object rather than
99
+ * passed as six loose props for the same reason `Roles.tsx`'s `RoleCreateFormController` documents:
100
+ * none of these is meaningful without the others, so naming the group is what lets a test hand a
101
+ * panel a controller instead of assembling one out of parts. */
102
+ /**
103
+ * The "Site defaults" tab — the site-wide `seo.*` settings form, moved here verbatim from `Seo`'s
104
+ * own body.
105
+ *
106
+ * ONE addition beyond relocation: the two `.field-group`s now carry headings ("Search appearance",
107
+ * "Crawling"). They are the grouping an operator already thinks in — every SEO tool they have used
108
+ * separates what search/social show from whether to be indexed at all — and the form had no
109
+ * internal hierarchy whatsoever before, just seven controls in a row. Expressing it as headings
110
+ * INSIDE one tab rather than as more tabs is deliberate and load-bearing: see `react/hooks/SeoPage.hooks.ts`'s
111
+ * header for why splitting this form across panels would silently blank fields on save.
112
+ *
113
+ * The submit handler is now one call to `buildSeoSettingsPatch` (`react/hooks/SeoPage.hooks.ts`) rather than seven
114
+ * inline `??`/`||` field reads — same fields, same fallbacks, same payload, just not written in the
115
+ * `.tsx`.
116
+ */
117
+ export declare function SeoDefaultsTab({ controller }: {
118
+ controller: SeoTabController;
119
+ }, _optional?: Record<string, never>): import("react").JSX.Element;
120
+ /**
121
+ * The "Sitemap" tab — the two sitemap actions, moved here verbatim, plus one line this screen never
122
+ * had: whether a sitemap is being published at all.
123
+ *
124
+ * That line is the reason this is a tab rather than a footnote on Site defaults. The switch
125
+ * ("Sitemap enabled") cannot move here — it belongs to the defaults form's `FormData` submit, see
126
+ * `react/hooks/SeoPage.hooks.ts`'s header — so without a state read, an operator who had sitemaps switched off
127
+ * would find a Regenerate button that appears live and reports success while publishing nothing.
128
+ * Reporting the state instead of duplicating the control keeps exactly one switch on the screen.
129
+ *
130
+ * Wrapped in a `.card` like the defaults form beside it, rather than left as loose text on the
131
+ * page — rendered side by side the uncontained version read as an unfinished panel next to a
132
+ * carded one. The heading is "Cached sitemap", not "Sitemap": it names what the card acts on
133
+ * without restating the tab label, the same way `deployment/OverviewTab.tsx`'s cards are titled.
134
+ * It also has to exist at all — a `role="tab"` button is not in a screen reader's heading list, so
135
+ * a panel with no `<h2>` leaves that reader nothing but the page `H1`.
136
+ */
137
+ export declare function SeoSitemapTab({ controller }: {
138
+ controller: SeoTabController;
139
+ }, _optional?: Record<string, never>): import("react").JSX.Element;
140
+ /** Dispatches the one active tab's panel as a flat if-chain — a plain function rather than a
141
+ * ternary written directly in `Seo`'s JSX, which would be counted against that component's own
142
+ * complexity. Same split `Deployment.tsx`'s `deploymentTabPanel` and `Sites.tsx`'s `sitesTabPanel`
143
+ * make for the identical gate.
144
+ * @complexity O(1) — three mutually exclusive branches, no iteration. */
145
+ export interface SeoProps {
146
+ /** The `?tab=` query value from `panels.tsx`'s `seo` route (`URLSearchParams.get` returns `null`
147
+ * when the param is absent). Guarded by `resolveSeoTabId`, so a stale link or a typo opens Site
148
+ * defaults rather than a blank panel. */
149
+ tabId?: string | null | undefined;
150
+ /** Dependency injection seam for tests — the same convention `@jini-ai/ui`'s `CustomSelect` uses
151
+ * for `useCustomSelect`. Defaulted to the real hook, so production callers (`panels.tsx`) pass
152
+ * nothing and behave exactly as before. */
153
+ useSeoHook?: typeof useWiredSeo;
154
+ onTabChange?: ((required: {
155
+ tab: string;
156
+ }, optional?: Record<string, never>) => void) | undefined;
157
+ }
158
+ export declare function Seo({ tabId, onTabChange, useSeoHook }?: SeoProps, _optional?: Record<string, never>): import("react").JSX.Element;
159
+ export { Seo as SeoPage };
160
+ export default Seo;
161
+ //# sourceMappingURL=SeoPage.d.ts.map