@jini-ai/admin 0.4.2 → 0.4.3

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 (360) hide show
  1. package/CHANGELOG.md +11 -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 +137 -0
  96. package/dist/forms/forms.module.js +17 -0
  97. package/dist/forms/html-rules.d.ts +20 -0
  98. package/dist/forms/html-rules.js +24 -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 +100 -0
  102. package/dist/forms/messages.en.js +104 -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 +13 -0
  122. package/dist/forms/react/components/FormSubmissionDetail.js +29 -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 +122 -0
  128. package/dist/forms/react/hooks/forms-view.hooks.js +79 -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 +449 -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 +55 -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/use-controller.d.ts +1 -15
  176. package/dist/react/use-controller.js +2 -17
  177. package/dist/redirects/adapters/http.d.ts +20 -0
  178. package/dist/redirects/adapters/http.js +31 -0
  179. package/dist/redirects/adapters/memory.d.ts +13 -0
  180. package/dist/redirects/adapters/memory.js +83 -0
  181. package/dist/redirects/conformance/redirects-api.conformance.d.ts +12 -0
  182. package/dist/redirects/conformance/redirects-api.conformance.js +66 -0
  183. package/dist/redirects/controllers/hit-count.controller.d.ts +14 -0
  184. package/dist/redirects/controllers/hit-count.controller.js +10 -0
  185. package/dist/redirects/controllers/import-redirects.controller.d.ts +28 -0
  186. package/dist/redirects/controllers/import-redirects.controller.js +29 -0
  187. package/dist/redirects/controllers/redirects.controller.d.ts +37 -0
  188. package/dist/redirects/controllers/redirects.controller.js +38 -0
  189. package/dist/redirects/index.d.ts +11 -0
  190. package/dist/redirects/index.js +10 -0
  191. package/dist/redirects/messages.en.d.ts +56 -0
  192. package/dist/redirects/messages.en.js +55 -0
  193. package/dist/redirects/models.d.ts +14 -0
  194. package/dist/redirects/models.js +2 -0
  195. package/dist/redirects/ports.d.ts +9 -0
  196. package/dist/redirects/ports.js +4 -0
  197. package/dist/redirects/react/components/HitCountCell.d.ts +19 -0
  198. package/dist/redirects/react/components/HitCountCell.js +19 -0
  199. package/dist/redirects/react/components/ImportRedirectsForm.d.ts +17 -0
  200. package/dist/redirects/react/components/ImportRedirectsForm.js +12 -0
  201. package/dist/redirects/react/hooks/RedirectsOptions.hooks.d.ts +27 -0
  202. package/dist/redirects/react/hooks/RedirectsOptions.hooks.js +15 -0
  203. package/dist/redirects/react/hooks/RedirectsPage.hooks.d.ts +50 -0
  204. package/dist/redirects/react/hooks/RedirectsPage.hooks.js +30 -0
  205. package/dist/redirects/react/hooks/RedirectsPorts.hooks.d.ts +10 -0
  206. package/dist/redirects/react/hooks/RedirectsPorts.hooks.js +11 -0
  207. package/dist/redirects/react/hooks/use-hit-count-cell.hooks.d.ts +19 -0
  208. package/dist/redirects/react/hooks/use-hit-count-cell.hooks.js +15 -0
  209. package/dist/redirects/react/hooks/use-import-redirects-form.hooks.d.ts +21 -0
  210. package/dist/redirects/react/hooks/use-import-redirects-form.hooks.js +25 -0
  211. package/dist/redirects/react/hooks/use-redirects.hooks.d.ts +34 -0
  212. package/dist/redirects/react/hooks/use-redirects.hooks.js +63 -0
  213. package/dist/redirects/react/hooks/wired.hooks.d.ts +55 -0
  214. package/dist/redirects/react/hooks/wired.hooks.js +31 -0
  215. package/dist/redirects/react/index.d.ts +316 -0
  216. package/dist/redirects/react/index.js +28 -0
  217. package/dist/redirects/react/pages/RedirectsPage.d.ts +15 -0
  218. package/dist/redirects/react/pages/RedirectsPage.js +20 -0
  219. package/dist/redirects/redirects.module.d.ts +75 -0
  220. package/dist/redirects/redirects.module.js +13 -0
  221. package/dist/redirects/rules.d.ts +131 -0
  222. package/dist/redirects/rules.js +134 -0
  223. package/dist/security/react/hooks/AccessTokensTab.hooks.d.ts +1 -1
  224. package/dist/security/react/hooks/AccessTokensTab.hooks.js +1 -1
  225. package/dist/security/react/hooks/RootKeyTab.hooks.d.ts +1 -1
  226. package/dist/security/react/hooks/RootKeyTab.hooks.js +1 -1
  227. package/dist/security/react/hooks/SecurityPage.hooks.d.ts +1 -1
  228. package/dist/security/react/index.js +1 -1
  229. package/dist/security/react/pages/SecurityPage.d.ts +1 -1
  230. package/dist/security/react/tabs/AccessTokensTab.d.ts +1 -1
  231. package/dist/security/react/tabs/RootKeyTab.d.ts +1 -1
  232. package/dist/seo/adapters/http.d.ts +31 -0
  233. package/dist/seo/adapters/http.js +37 -0
  234. package/dist/seo/adapters/memory.d.ts +28 -0
  235. package/dist/seo/adapters/memory.js +129 -0
  236. package/dist/seo/conformance/seo-api.conformance.d.ts +8 -0
  237. package/dist/seo/conformance/seo-api.conformance.js +44 -0
  238. package/dist/seo/controllers/entry-picker.controller.d.ts +21 -0
  239. package/dist/seo/controllers/entry-picker.controller.js +17 -0
  240. package/dist/seo/controllers/entry-section.controller.d.ts +20 -0
  241. package/dist/seo/controllers/entry-section.controller.js +7 -0
  242. package/dist/seo/controllers/media-ref.controller.d.ts +26 -0
  243. package/dist/seo/controllers/media-ref.controller.js +14 -0
  244. package/dist/seo/controllers/seo-entry.controller.d.ts +31 -0
  245. package/dist/seo/controllers/seo-entry.controller.js +52 -0
  246. package/dist/seo/controllers/seo.controller.d.ts +29 -0
  247. package/dist/seo/controllers/seo.controller.js +50 -0
  248. package/dist/seo/controllers/sitemap.controller.d.ts +25 -0
  249. package/dist/seo/controllers/sitemap.controller.js +27 -0
  250. package/dist/seo/index.d.ts +14 -0
  251. package/dist/seo/index.js +12 -0
  252. package/dist/seo/messages.en.d.ts +78 -0
  253. package/dist/seo/messages.en.js +78 -0
  254. package/dist/seo/models.d.ts +179 -0
  255. package/dist/seo/models.js +8 -0
  256. package/dist/seo/ports.d.ts +11 -0
  257. package/dist/seo/ports.js +4 -0
  258. package/dist/seo/react/components/MediaPickerBridge.d.ts +4 -0
  259. package/dist/seo/react/components/MediaPickerBridge.js +8 -0
  260. package/dist/seo/react/components/MediaRefField.d.ts +36 -0
  261. package/dist/seo/react/components/MediaRefField.js +12 -0
  262. package/dist/seo/react/components/SeoIcons.d.ts +13 -0
  263. package/dist/seo/react/components/SeoIcons.js +32 -0
  264. package/dist/seo/react/components/SitemapModal.d.ts +48 -0
  265. package/dist/seo/react/components/SitemapModal.js +70 -0
  266. package/dist/seo/react/hooks/MediaPickerBridge.hooks.d.ts +6 -0
  267. package/dist/seo/react/hooks/MediaPickerBridge.hooks.js +27 -0
  268. package/dist/seo/react/hooks/MediaRefField.hooks.d.ts +22 -0
  269. package/dist/seo/react/hooks/MediaRefField.hooks.js +30 -0
  270. package/dist/seo/react/hooks/SeoModuleTabs.d.ts +14 -0
  271. package/dist/seo/react/hooks/SeoModuleTabs.js +18 -0
  272. package/dist/seo/react/hooks/SeoPage.hooks.d.ts +69 -0
  273. package/dist/seo/react/hooks/SeoPage.hooks.js +37 -0
  274. package/dist/seo/react/hooks/SeoPorts.hooks.d.ts +19 -0
  275. package/dist/seo/react/hooks/SeoPorts.hooks.js +22 -0
  276. package/dist/seo/react/hooks/SitemapModal.hooks.d.ts +26 -0
  277. package/dist/seo/react/hooks/SitemapModal.hooks.js +20 -0
  278. package/dist/seo/react/hooks/use-entry-picker.hooks.d.ts +11 -0
  279. package/dist/seo/react/hooks/use-entry-picker.hooks.js +20 -0
  280. package/dist/seo/react/hooks/use-seo-entry-panel.hooks.d.ts +14 -0
  281. package/dist/seo/react/hooks/use-seo-entry-panel.hooks.js +26 -0
  282. package/dist/seo/react/hooks/use-seo-entry-section.hooks.d.ts +4 -0
  283. package/dist/seo/react/hooks/use-seo-entry-section.hooks.js +7 -0
  284. package/dist/seo/react/hooks/use-seo.hooks.d.ts +11 -0
  285. package/dist/seo/react/hooks/use-seo.hooks.js +29 -0
  286. package/dist/seo/react/hooks/use-sitemap-modal.hooks.d.ts +10 -0
  287. package/dist/seo/react/hooks/use-sitemap-modal.hooks.js +18 -0
  288. package/dist/seo/react/index.d.ts +366 -0
  289. package/dist/seo/react/index.js +30 -0
  290. package/dist/seo/react/options.d.ts +19 -0
  291. package/dist/seo/react/options.js +2 -0
  292. package/dist/seo/react/pages/SeoPage.d.ts +161 -0
  293. package/dist/seo/react/pages/SeoPage.js +215 -0
  294. package/dist/seo/rules.d.ts +136 -0
  295. package/dist/seo/rules.js +212 -0
  296. package/dist/seo/seo.module.d.ts +114 -0
  297. package/dist/seo/seo.module.js +14 -0
  298. package/dist/source-control/react/hooks/ProvidersTab.hooks.d.ts +1 -1
  299. package/dist/source-control/react/hooks/ProvidersTab.hooks.js +1 -1
  300. package/dist/source-control/react/hooks/SourceControlPage.hooks.d.ts +1 -1
  301. package/dist/source-control/react/index.js +1 -1
  302. package/dist/source-control/react/pages/SourceControlPage.d.ts +1 -1
  303. package/dist/source-control/react/tabs/ProvidersTab.d.ts +1 -1
  304. package/dist/widgets/adapters/http.d.ts +19 -0
  305. package/dist/widgets/adapters/http.js +33 -0
  306. package/dist/widgets/adapters/memory.d.ts +22 -0
  307. package/dist/widgets/adapters/memory.js +93 -0
  308. package/dist/widgets/conformance/widgets-api.conformance.d.ts +6 -0
  309. package/dist/widgets/conformance/widgets-api.conformance.js +55 -0
  310. package/dist/widgets/controllers/instance-editor.controller.d.ts +49 -0
  311. package/dist/widgets/controllers/instance-editor.controller.js +87 -0
  312. package/dist/widgets/controllers/library.controller.d.ts +33 -0
  313. package/dist/widgets/controllers/library.controller.js +53 -0
  314. package/dist/widgets/controllers/region-editor.controller.d.ts +42 -0
  315. package/dist/widgets/controllers/region-editor.controller.js +69 -0
  316. package/dist/widgets/controllers/regions.controller.d.ts +27 -0
  317. package/dist/widgets/controllers/regions.controller.js +44 -0
  318. package/dist/widgets/index.d.ts +11 -0
  319. package/dist/widgets/index.js +9 -0
  320. package/dist/widgets/messages.en.d.ts +78 -0
  321. package/dist/widgets/messages.en.js +83 -0
  322. package/dist/widgets/models.d.ts +62 -0
  323. package/dist/widgets/models.js +2 -0
  324. package/dist/widgets/ports.d.ts +79 -0
  325. package/dist/widgets/ports.js +5 -0
  326. package/dist/widgets/react/components/WidgetInstanceNotices.d.ts +14 -0
  327. package/dist/widgets/react/components/WidgetInstanceNotices.js +25 -0
  328. package/dist/widgets/react/components/WidgetRegionEditorHeaderActions.d.ts +22 -0
  329. package/dist/widgets/react/components/WidgetRegionEditorHeaderActions.js +18 -0
  330. package/dist/widgets/react/components/WidgetsLibraryNotices.d.ts +13 -0
  331. package/dist/widgets/react/components/WidgetsLibraryNotices.js +10 -0
  332. package/dist/widgets/react/hooks/WidgetsPorts.hooks.d.ts +270 -0
  333. package/dist/widgets/react/hooks/WidgetsPorts.hooks.js +17 -0
  334. package/dist/widgets/react/hooks/navigation.hooks.d.ts +9 -0
  335. package/dist/widgets/react/hooks/navigation.hooks.js +6 -0
  336. package/dist/widgets/react/hooks/page-views.hooks.d.ts +87 -0
  337. package/dist/widgets/react/hooks/page-views.hooks.js +30 -0
  338. package/dist/widgets/react/hooks/use-widget-instance-editor.hooks.d.ts +56 -0
  339. package/dist/widgets/react/hooks/use-widget-instance-editor.hooks.js +38 -0
  340. package/dist/widgets/react/hooks/use-widget-region-editor.hooks.d.ts +32 -0
  341. package/dist/widgets/react/hooks/use-widget-region-editor.hooks.js +22 -0
  342. package/dist/widgets/react/hooks/use-widget-regions.hooks.d.ts +23 -0
  343. package/dist/widgets/react/hooks/use-widget-regions.hooks.js +22 -0
  344. package/dist/widgets/react/hooks/use-widgets-library.hooks.d.ts +37 -0
  345. package/dist/widgets/react/hooks/use-widgets-library.hooks.js +23 -0
  346. package/dist/widgets/react/index.d.ts +391 -0
  347. package/dist/widgets/react/index.js +31 -0
  348. package/dist/widgets/react/pages/WidgetInstanceEditor.d.ts +23 -0
  349. package/dist/widgets/react/pages/WidgetInstanceEditor.js +37 -0
  350. package/dist/widgets/react/pages/WidgetRegionEditor.d.ts +22 -0
  351. package/dist/widgets/react/pages/WidgetRegionEditor.js +25 -0
  352. package/dist/widgets/react/pages/WidgetRegions.d.ts +21 -0
  353. package/dist/widgets/react/pages/WidgetRegions.js +31 -0
  354. package/dist/widgets/react/pages/WidgetsLibrary.d.ts +24 -0
  355. package/dist/widgets/react/pages/WidgetsLibrary.js +61 -0
  356. package/dist/widgets/rules.d.ts +94 -0
  357. package/dist/widgets/rules.js +83 -0
  358. package/dist/widgets/widgets.module.d.ts +122 -0
  359. package/dist/widgets/widgets.module.js +21 -0
  360. package/package.json +206 -9
@@ -0,0 +1,63 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+ import { useFetchQuery, useFetchMutation, useInvalidate } from '@jini-ai/ui/fetch-query';
3
+ import { buildAgentListHandles } from '@jini-ai/agentic';
4
+ import { useController } from '../../../core/react/use-controller.js';
5
+ import { createRedirectsController } from '../../controllers/redirects.controller.js';
6
+ import { KEYS, buildCreateRedirectPayload, nextRedirectStatus, firstWriteError, isAnyWritePending, visibleRedirectsError } from '../../rules.js';
7
+ import { translateRedirectsEn } from '../../messages.en.js';
8
+ /** Preserve the fetch-query pilot's cache/invalidation lifecycle and first-load-only screen guard.
9
+ * One list read, three independent writes, the same error precedence and no form reset on failure.
10
+ * Localization arrives once from the host, preventing N independent settings reads per table row.
11
+ */
12
+ export function useRedirects({ api }, { t = translateRedirectsEn, locale = 'en', events } = {}) {
13
+ const list = useFetchQuery({ key: KEYS.list, fetch: () => api.listRedirects({}) });
14
+ const invalidate = useInvalidate();
15
+ const invalidateList = useCallback(() => invalidate({ key: KEYS.list }), [invalidate]);
16
+ useEffect(() => events?.subscribe(invalidateList), [events, invalidateList]);
17
+ // Writes name their cache rather than calling a loader. Other views of the key refresh too,
18
+ // and background reads keep the last successful table on screen.
19
+ const createRule = useFetchMutation({ run: ({ input: form }) => api.createRedirect(buildCreateRedirectPayload({ form })) }, { invalidates: [KEYS.list] });
20
+ const toggleStatus = useFetchMutation({ run: ({ input: rule }) => api.updateRedirect({ id: rule.id }, { status: nextRedirectStatus({ currentStatus: rule.status }) }) }, { invalidates: [KEYS.list] });
21
+ const removeRule = useFetchMutation({ run: ({ input: rule }) => api.tombstoneRedirect({ id: rule.id }) }, { invalidates: [KEYS.list] });
22
+ const writes = [createRule, toggleStatus, removeRule];
23
+ const saving = isAnyWritePending({ writes });
24
+ const error = visibleRedirectsError({ writeError: firstWriteError({ writes }), saving, listError: list.error });
25
+ const actions = useRef(null);
26
+ actions.current = {
27
+ saving,
28
+ create: form => createRule.mutate({ input: form }),
29
+ toggle: rule => toggleStatus.mutate({ input: rule }),
30
+ remove: rule => removeRule.mutate({ input: rule }),
31
+ resetOthers(active) {
32
+ const activeWrite = { create: createRule, toggle: toggleStatus, remove: removeRule }[active];
33
+ // A new write used to clear one shared error. Reset siblings so an earlier create failure
34
+ // cannot blame a later successful toggle merely because create is first in the array.
35
+ for (const write of writes)
36
+ if (write !== activeWrite)
37
+ write.reset();
38
+ },
39
+ };
40
+ const { controller, snapshot } = useController({ create: () => createRedirectsController({ actions: () => actions.current }), dependencies: [] });
41
+ const redirects = list.data;
42
+ const createRedirect = (form) => controller?.createRedirect({ form }) ?? Promise.resolve(false);
43
+ function submitCreate(e) {
44
+ e.preventDefault();
45
+ // Capture synchronously: React clears currentTarget after dispatch. Reset only on success.
46
+ const form = e.currentTarget;
47
+ void createRedirect(new FormData(form)).then(succeeded => { if (succeeded)
48
+ form.reset(); });
49
+ }
50
+ return {
51
+ redirects, listStatus: list.status, listError: list.error, error, saving,
52
+ pendingDelete: snapshot?.pendingDelete ?? null,
53
+ setPendingDelete: (rule) => controller?.setPendingDelete({ rule }),
54
+ confirmDelete: () => controller?.confirmDelete(), deletePending: removeRule.status === 'pending',
55
+ createRedirect, submitCreate,
56
+ onToggleStatus: (rule) => controller?.onToggleStatus({ rule }),
57
+ onRequestDelete: (rule) => controller?.onRequestDelete({ rule }),
58
+ t, locale,
59
+ // Stable, unique ids disambiguate every row's action menu and lazy hits button.
60
+ rowMenuHandles: buildAgentListHandles({ prefix: 'redirects-row', ids: (redirects ?? []).map(rule => rule.id) }),
61
+ };
62
+ }
63
+ //# sourceMappingURL=use-redirects.hooks.js.map
@@ -0,0 +1,55 @@
1
+ import type { ChangeEvent } from 'react';
2
+ import type { AdminRedirectImportFailure } from '../../../core/ports/redirects.js';
3
+ import type { RedirectsTranslate } from '../../models.js';
4
+ /** Resolve localization once for the list; every row receives that bound translator. */
5
+ export declare function useWiredRedirects(_required?: Record<string, never>, _optional?: {}): {
6
+ redirects: readonly import("../../index.js").AdminRedirect[] | undefined;
7
+ listStatus: import("@jini-ai/ui").QueryStatus;
8
+ listError: Error | null;
9
+ error: Error | null;
10
+ saving: boolean;
11
+ pendingDelete: import("../../index.js").AdminRedirect | null;
12
+ setPendingDelete: (rule: import("../../index.js").AdminRedirect | null) => void | undefined;
13
+ confirmDelete: () => void | undefined;
14
+ deletePending: boolean;
15
+ createRedirect: (form: FormData) => Promise<boolean>;
16
+ submitCreate: (e: import("react").FormEvent<HTMLFormElement>) => void;
17
+ onToggleStatus: (rule: import("../../index.js").AdminRedirect) => void | undefined;
18
+ onRequestDelete: (rule: import("../../index.js").AdminRedirect) => void | undefined;
19
+ t: RedirectsTranslate;
20
+ locale: string;
21
+ rowMenuHandles: string[];
22
+ };
23
+ /** Hit counts stay gesture-gated and use the same scoped resource port as list and import. */
24
+ export declare function useWiredHitCountCell({ redirectId, t }: {
25
+ redirectId: string;
26
+ t: RedirectsTranslate;
27
+ }, _optional?: {}): {
28
+ error: Error | null;
29
+ data: {
30
+ data: import("../../index.js").AdminRedirectHitStats;
31
+ } | undefined;
32
+ isFetching: boolean;
33
+ request: () => void | undefined;
34
+ t: RedirectsTranslate;
35
+ };
36
+ /** Derive copy and input handlers outside TSX. Partial results remain individual created/failed rows. */
37
+ export declare function useWiredImportRedirectsForm({ t, locale }: {
38
+ t: RedirectsTranslate;
39
+ locale: string;
40
+ }, _optional?: {}): {
41
+ changeRaw: (event: ChangeEvent<HTMLTextAreaElement>) => void | undefined;
42
+ rulesLabel: import("react").ReactNode;
43
+ resultSummary: string;
44
+ createdText: string;
45
+ failedLabel: (failure: AdminRedirectImportFailure) => string;
46
+ raw: string;
47
+ setRaw: (raw: string) => void | undefined;
48
+ error: string | null;
49
+ result: import("../../index.js").AdminRedirectImportResult | null;
50
+ importing: boolean;
51
+ submit: (e: import("react").FormEvent) => Promise<void>;
52
+ t: RedirectsTranslate;
53
+ locale: string;
54
+ };
55
+ //# sourceMappingURL=wired.hooks.d.ts.map
@@ -0,0 +1,31 @@
1
+ import { createElement } from 'react';
2
+ import { useRedirectsPorts } from './RedirectsPorts.hooks.js';
3
+ import { useRedirectsOptions } from './RedirectsOptions.hooks.js';
4
+ import { useRedirects } from './use-redirects.hooks.js';
5
+ import { useHitCountCell } from './use-hit-count-cell.hooks.js';
6
+ import { useImportRedirectsForm } from './use-import-redirects-form.hooks.js';
7
+ /** Resolve localization once for the list; every row receives that bound translator. */
8
+ export function useWiredRedirects(_required = {}, _optional = {}) {
9
+ const { redirectsApi: api, redirectsEvents: events } = useRedirectsPorts();
10
+ const { t, locale } = useRedirectsOptions();
11
+ return useRedirects({ api }, { t, locale, ...(events ? { events } : {}) });
12
+ }
13
+ /** Hit counts stay gesture-gated and use the same scoped resource port as list and import. */
14
+ export function useWiredHitCountCell({ redirectId, t }, _optional = {}) {
15
+ const { redirectsApi: api } = useRedirectsPorts();
16
+ return useHitCountCell({ redirectId, api }, { t });
17
+ }
18
+ /** Derive copy and input handlers outside TSX. Partial results remain individual created/failed rows. */
19
+ export function useWiredImportRedirectsForm({ t, locale }, _optional = {}) {
20
+ const { redirectsApi: api } = useRedirectsPorts();
21
+ const { renderMessage } = useRedirectsOptions();
22
+ const form = useImportRedirectsForm({ api }, { t, locale });
23
+ return { ...form,
24
+ changeRaw: (event) => form.setRaw(event.target.value),
25
+ rulesLabel: renderMessage({ key: 'importRulesLabel', shapeCode: createElement('code', { key: 'shape' }, '{matchType, fromPattern, toTarget, statusCode, override?, priority?}') }),
26
+ resultSummary: form.result ? t('{created} created, {failed} failed.', { created: form.result.created.length, failed: form.result.failed.length }) : '',
27
+ createdText: t('Created'),
28
+ failedLabel: (failure) => t('Item {index} ({code})', { index: failure.index, code: failure.code }),
29
+ };
30
+ }
31
+ //# sourceMappingURL=wired.hooks.js.map
@@ -0,0 +1,316 @@
1
+ import type { RedirectsReactOptions } from './hooks/RedirectsOptions.hooks.js';
2
+ export type { RedirectsReactOptions, RedirectsRenderMessageInput } from './hooks/RedirectsOptions.hooks.js';
3
+ export { useRedirectsPorts } from './hooks/RedirectsPorts.hooks.js';
4
+ export { useRedirects } from './hooks/use-redirects.hooks.js';
5
+ export { useHitCountCell } from './hooks/use-hit-count-cell.hooks.js';
6
+ export { useImportRedirectsForm } from './hooks/use-import-redirects-form.hooks.js';
7
+ /** Instance-scoped options and lazy list page; host supplies publish action and localized markup.
8
+ * @example redirects({}, { t, headerActions, slots: { renderMessage } });
9
+ */
10
+ export declare function redirects(_required: Record<string, never>, options?: RedirectsReactOptions): {
11
+ id: "redirects";
12
+ requires: {
13
+ readonly redirectsApi: import("../../core/module/token.js").AdminPortToken<import("../ports.js").AdminRedirectsPort, "admin.redirects.api">;
14
+ };
15
+ optional: {
16
+ readonly redirectsEvents: import("../../core/module/token.js").AdminPortToken<import("../ports.js").RedirectsEventsPort, "admin.redirects.events">;
17
+ };
18
+ messages: {
19
+ readonly "Loading\u2026": "Loading…";
20
+ readonly "Load hits": "Load hits";
21
+ readonly "Bulk import": "Bulk import";
22
+ readonly "rule objects (1-500 items)": "rule objects (1-500 items)";
23
+ readonly "Importing\u2026": "Importing…";
24
+ readonly Import: "Import";
25
+ readonly Marketing: "Marketing";
26
+ readonly Redirects: "Redirects";
27
+ readonly "Manual URL redirect rules. Rules created automatically from a slug change (source": "Manual URL redirect rules. Rules created automatically from a slug change (source";
28
+ readonly ") also show up here.": ") also show up here.";
29
+ readonly "Match type": "Match type";
30
+ readonly "From path": "From path";
31
+ readonly "To target": "To target";
32
+ readonly "Status code": "Status code";
33
+ readonly "301 (permanent)": "301 (permanent)";
34
+ readonly "302 (temporary)": "302 (temporary)";
35
+ readonly "307 (temporary, method-preserving)": "307 (temporary, method-preserving)";
36
+ readonly "308 (permanent, method-preserving)": "308 (permanent, method-preserving)";
37
+ readonly "Add redirect": "Add redirect";
38
+ readonly "No redirect rules yet.": "No redirect rules yet.";
39
+ readonly From: "From";
40
+ readonly To: "To";
41
+ readonly Type: "Type";
42
+ readonly Code: "Code";
43
+ readonly Source: "Source";
44
+ readonly Hits: "Hits";
45
+ readonly "Delete redirect rule?": "Delete redirect rule?";
46
+ readonly "Loading redirects\u2026": "Loading redirects…";
47
+ readonly "Not valid JSON.": "Not valid JSON.";
48
+ readonly "Must be a JSON array of rule objects.": "Must be a JSON array of rule objects.";
49
+ readonly exact: "exact";
50
+ readonly prefix: "prefix";
51
+ readonly wildcard: "wildcard";
52
+ readonly Status: "Status";
53
+ readonly More: "More";
54
+ readonly Delete: "Delete";
55
+ readonly Disable: "Disable";
56
+ readonly Enable: "Enable";
57
+ readonly "Saving\u2026": "Saving…";
58
+ readonly Created: "Created";
59
+ readonly active: "active";
60
+ readonly disabled: "disabled";
61
+ readonly "{created} created, {failed} failed.": "{created} created, {failed} failed.";
62
+ readonly "Item {index} ({code})": "Item {index} ({code})";
63
+ readonly "Actions for redirect rule from \"{fromPattern}\"": "Actions for redirect rule from \"{fromPattern}\"";
64
+ readonly "Paste a JSON array of ": "Paste a JSON array of ";
65
+ readonly " rule objects (1-500 items)": " rule objects (1-500 items)";
66
+ readonly "Delete the redirect rule from \"": "Delete the redirect rule from \"";
67
+ readonly "\"?": "\"?";
68
+ };
69
+ pages: {
70
+ readonly list: {
71
+ readonly path: "/redirects";
72
+ readonly label: "Redirects";
73
+ readonly permissions: readonly ["admin.redirects.manage"];
74
+ readonly agentReachable: true;
75
+ readonly nav: {
76
+ readonly group: "marketing";
77
+ readonly icon: "arrow-right";
78
+ };
79
+ readonly tabs: {};
80
+ };
81
+ };
82
+ } & {
83
+ react: {
84
+ Provider: ({ admin, children, options: currentOptions }: Parameters<({ admin, children }: {
85
+ admin: import("../../core/module/types.js").AdminInstance;
86
+ children: import("react").ReactNode;
87
+ }, _optional?: Record<string, never>) => import("react").FunctionComponentElement<import("react").ProviderProps<import("../../core/module/types.js").ScopedPorts<{
88
+ readonly id: "redirects";
89
+ readonly requires: {
90
+ readonly redirectsApi: import("../../core/module/token.js").AdminPortToken<import("../ports.js").AdminRedirectsPort, "admin.redirects.api">;
91
+ };
92
+ readonly optional: {
93
+ readonly redirectsEvents: import("../../core/module/token.js").AdminPortToken<import("../ports.js").RedirectsEventsPort, "admin.redirects.events">;
94
+ };
95
+ readonly messages: {
96
+ readonly "Loading\u2026": "Loading…";
97
+ readonly "Load hits": "Load hits";
98
+ readonly "Bulk import": "Bulk import";
99
+ readonly "rule objects (1-500 items)": "rule objects (1-500 items)";
100
+ readonly "Importing\u2026": "Importing…";
101
+ readonly Import: "Import";
102
+ readonly Marketing: "Marketing";
103
+ readonly Redirects: "Redirects";
104
+ readonly "Manual URL redirect rules. Rules created automatically from a slug change (source": "Manual URL redirect rules. Rules created automatically from a slug change (source";
105
+ readonly ") also show up here.": ") also show up here.";
106
+ readonly "Match type": "Match type";
107
+ readonly "From path": "From path";
108
+ readonly "To target": "To target";
109
+ readonly "Status code": "Status code";
110
+ readonly "301 (permanent)": "301 (permanent)";
111
+ readonly "302 (temporary)": "302 (temporary)";
112
+ readonly "307 (temporary, method-preserving)": "307 (temporary, method-preserving)";
113
+ readonly "308 (permanent, method-preserving)": "308 (permanent, method-preserving)";
114
+ readonly "Add redirect": "Add redirect";
115
+ readonly "No redirect rules yet.": "No redirect rules yet.";
116
+ readonly From: "From";
117
+ readonly To: "To";
118
+ readonly Type: "Type";
119
+ readonly Code: "Code";
120
+ readonly Source: "Source";
121
+ readonly Hits: "Hits";
122
+ readonly "Delete redirect rule?": "Delete redirect rule?";
123
+ readonly "Loading redirects\u2026": "Loading redirects…";
124
+ readonly "Not valid JSON.": "Not valid JSON.";
125
+ readonly "Must be a JSON array of rule objects.": "Must be a JSON array of rule objects.";
126
+ readonly exact: "exact";
127
+ readonly prefix: "prefix";
128
+ readonly wildcard: "wildcard";
129
+ readonly Status: "Status";
130
+ readonly More: "More";
131
+ readonly Delete: "Delete";
132
+ readonly Disable: "Disable";
133
+ readonly Enable: "Enable";
134
+ readonly "Saving\u2026": "Saving…";
135
+ readonly Created: "Created";
136
+ readonly active: "active";
137
+ readonly disabled: "disabled";
138
+ readonly "{created} created, {failed} failed.": "{created} created, {failed} failed.";
139
+ readonly "Item {index} ({code})": "Item {index} ({code})";
140
+ readonly "Actions for redirect rule from \"{fromPattern}\"": "Actions for redirect rule from \"{fromPattern}\"";
141
+ readonly "Paste a JSON array of ": "Paste a JSON array of ";
142
+ readonly " rule objects (1-500 items)": " rule objects (1-500 items)";
143
+ readonly "Delete the redirect rule from \"": "Delete the redirect rule from \"";
144
+ readonly "\"?": "\"?";
145
+ };
146
+ readonly pages: {
147
+ readonly list: {
148
+ readonly path: "/redirects";
149
+ readonly label: "Redirects";
150
+ readonly permissions: readonly ["admin.redirects.manage"];
151
+ readonly agentReachable: true;
152
+ readonly nav: {
153
+ readonly group: "marketing";
154
+ readonly icon: "arrow-right";
155
+ };
156
+ readonly tabs: {};
157
+ };
158
+ };
159
+ }> | null>>>[0] & {
160
+ options?: RedirectsReactOptions;
161
+ }) => import("react").FunctionComponentElement<import("react").ProviderProps<RedirectsReactOptions>>;
162
+ module: {
163
+ readonly id: "redirects";
164
+ readonly requires: {
165
+ readonly redirectsApi: import("../../core/module/token.js").AdminPortToken<import("../ports.js").AdminRedirectsPort, "admin.redirects.api">;
166
+ };
167
+ readonly optional: {
168
+ readonly redirectsEvents: import("../../core/module/token.js").AdminPortToken<import("../ports.js").RedirectsEventsPort, "admin.redirects.events">;
169
+ };
170
+ readonly messages: {
171
+ readonly "Loading\u2026": "Loading…";
172
+ readonly "Load hits": "Load hits";
173
+ readonly "Bulk import": "Bulk import";
174
+ readonly "rule objects (1-500 items)": "rule objects (1-500 items)";
175
+ readonly "Importing\u2026": "Importing…";
176
+ readonly Import: "Import";
177
+ readonly Marketing: "Marketing";
178
+ readonly Redirects: "Redirects";
179
+ readonly "Manual URL redirect rules. Rules created automatically from a slug change (source": "Manual URL redirect rules. Rules created automatically from a slug change (source";
180
+ readonly ") also show up here.": ") also show up here.";
181
+ readonly "Match type": "Match type";
182
+ readonly "From path": "From path";
183
+ readonly "To target": "To target";
184
+ readonly "Status code": "Status code";
185
+ readonly "301 (permanent)": "301 (permanent)";
186
+ readonly "302 (temporary)": "302 (temporary)";
187
+ readonly "307 (temporary, method-preserving)": "307 (temporary, method-preserving)";
188
+ readonly "308 (permanent, method-preserving)": "308 (permanent, method-preserving)";
189
+ readonly "Add redirect": "Add redirect";
190
+ readonly "No redirect rules yet.": "No redirect rules yet.";
191
+ readonly From: "From";
192
+ readonly To: "To";
193
+ readonly Type: "Type";
194
+ readonly Code: "Code";
195
+ readonly Source: "Source";
196
+ readonly Hits: "Hits";
197
+ readonly "Delete redirect rule?": "Delete redirect rule?";
198
+ readonly "Loading redirects\u2026": "Loading redirects…";
199
+ readonly "Not valid JSON.": "Not valid JSON.";
200
+ readonly "Must be a JSON array of rule objects.": "Must be a JSON array of rule objects.";
201
+ readonly exact: "exact";
202
+ readonly prefix: "prefix";
203
+ readonly wildcard: "wildcard";
204
+ readonly Status: "Status";
205
+ readonly More: "More";
206
+ readonly Delete: "Delete";
207
+ readonly Disable: "Disable";
208
+ readonly Enable: "Enable";
209
+ readonly "Saving\u2026": "Saving…";
210
+ readonly Created: "Created";
211
+ readonly active: "active";
212
+ readonly disabled: "disabled";
213
+ readonly "{created} created, {failed} failed.": "{created} created, {failed} failed.";
214
+ readonly "Item {index} ({code})": "Item {index} ({code})";
215
+ readonly "Actions for redirect rule from \"{fromPattern}\"": "Actions for redirect rule from \"{fromPattern}\"";
216
+ readonly "Paste a JSON array of ": "Paste a JSON array of ";
217
+ readonly " rule objects (1-500 items)": " rule objects (1-500 items)";
218
+ readonly "Delete the redirect rule from \"": "Delete the redirect rule from \"";
219
+ readonly "\"?": "\"?";
220
+ };
221
+ readonly pages: {
222
+ readonly list: {
223
+ readonly path: "/redirects";
224
+ readonly label: "Redirects";
225
+ readonly permissions: readonly ["admin.redirects.manage"];
226
+ readonly agentReachable: true;
227
+ readonly nav: {
228
+ readonly group: "marketing";
229
+ readonly icon: "arrow-right";
230
+ };
231
+ readonly tabs: {};
232
+ };
233
+ };
234
+ };
235
+ pages: {
236
+ readonly list: {
237
+ Page: import("react").LazyExoticComponent<import("react").ComponentType<import("../../react/bind-react.js").ModulePageProps>>;
238
+ tabs: {};
239
+ };
240
+ };
241
+ usePorts: (_required?: Record<string, never>, _optional?: Record<string, never>) => import("../../core/module/types.js").ScopedPorts<{
242
+ readonly id: "redirects";
243
+ readonly requires: {
244
+ readonly redirectsApi: import("../../core/module/token.js").AdminPortToken<import("../ports.js").AdminRedirectsPort, "admin.redirects.api">;
245
+ };
246
+ readonly optional: {
247
+ readonly redirectsEvents: import("../../core/module/token.js").AdminPortToken<import("../ports.js").RedirectsEventsPort, "admin.redirects.events">;
248
+ };
249
+ readonly messages: {
250
+ readonly "Loading\u2026": "Loading…";
251
+ readonly "Load hits": "Load hits";
252
+ readonly "Bulk import": "Bulk import";
253
+ readonly "rule objects (1-500 items)": "rule objects (1-500 items)";
254
+ readonly "Importing\u2026": "Importing…";
255
+ readonly Import: "Import";
256
+ readonly Marketing: "Marketing";
257
+ readonly Redirects: "Redirects";
258
+ readonly "Manual URL redirect rules. Rules created automatically from a slug change (source": "Manual URL redirect rules. Rules created automatically from a slug change (source";
259
+ readonly ") also show up here.": ") also show up here.";
260
+ readonly "Match type": "Match type";
261
+ readonly "From path": "From path";
262
+ readonly "To target": "To target";
263
+ readonly "Status code": "Status code";
264
+ readonly "301 (permanent)": "301 (permanent)";
265
+ readonly "302 (temporary)": "302 (temporary)";
266
+ readonly "307 (temporary, method-preserving)": "307 (temporary, method-preserving)";
267
+ readonly "308 (permanent, method-preserving)": "308 (permanent, method-preserving)";
268
+ readonly "Add redirect": "Add redirect";
269
+ readonly "No redirect rules yet.": "No redirect rules yet.";
270
+ readonly From: "From";
271
+ readonly To: "To";
272
+ readonly Type: "Type";
273
+ readonly Code: "Code";
274
+ readonly Source: "Source";
275
+ readonly Hits: "Hits";
276
+ readonly "Delete redirect rule?": "Delete redirect rule?";
277
+ readonly "Loading redirects\u2026": "Loading redirects…";
278
+ readonly "Not valid JSON.": "Not valid JSON.";
279
+ readonly "Must be a JSON array of rule objects.": "Must be a JSON array of rule objects.";
280
+ readonly exact: "exact";
281
+ readonly prefix: "prefix";
282
+ readonly wildcard: "wildcard";
283
+ readonly Status: "Status";
284
+ readonly More: "More";
285
+ readonly Delete: "Delete";
286
+ readonly Disable: "Disable";
287
+ readonly Enable: "Enable";
288
+ readonly "Saving\u2026": "Saving…";
289
+ readonly Created: "Created";
290
+ readonly active: "active";
291
+ readonly disabled: "disabled";
292
+ readonly "{created} created, {failed} failed.": "{created} created, {failed} failed.";
293
+ readonly "Item {index} ({code})": "Item {index} ({code})";
294
+ readonly "Actions for redirect rule from \"{fromPattern}\"": "Actions for redirect rule from \"{fromPattern}\"";
295
+ readonly "Paste a JSON array of ": "Paste a JSON array of ";
296
+ readonly " rule objects (1-500 items)": " rule objects (1-500 items)";
297
+ readonly "Delete the redirect rule from \"": "Delete the redirect rule from \"";
298
+ readonly "\"?": "\"?";
299
+ };
300
+ readonly pages: {
301
+ readonly list: {
302
+ readonly path: "/redirects";
303
+ readonly label: "Redirects";
304
+ readonly permissions: readonly ["admin.redirects.manage"];
305
+ readonly agentReachable: true;
306
+ readonly nav: {
307
+ readonly group: "marketing";
308
+ readonly icon: "arrow-right";
309
+ };
310
+ readonly tabs: {};
311
+ };
312
+ };
313
+ }>;
314
+ };
315
+ };
316
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { createElement } from 'react';
2
+ import { bindReact } from '../../core/react/bind-react.js';
3
+ import { redirectsModule } from '../redirects.module.js';
4
+ import { RedirectsPortsContext } from './hooks/RedirectsPorts.hooks.js';
5
+ import { RedirectsOptionsContext } from './hooks/RedirectsOptions.hooks.js';
6
+ export { useRedirectsPorts } from './hooks/RedirectsPorts.hooks.js';
7
+ export { useRedirects } from './hooks/use-redirects.hooks.js';
8
+ export { useHitCountCell } from './hooks/use-hit-count-cell.hooks.js';
9
+ export { useImportRedirectsForm } from './hooks/use-import-redirects-form.hooks.js';
10
+ /** Instance-scoped options and lazy list page; host supplies publish action and localized markup.
11
+ * @example redirects({}, { t, headerActions, slots: { renderMessage } });
12
+ */
13
+ export function redirects(_required, options = {}) {
14
+ const react = bindReact({ module: redirectsModule, views: { list: { tabs: {}, page: async () => {
15
+ const { RedirectsPage } = await import('./pages/RedirectsPage.js');
16
+ return { default: () => createElement(RedirectsPage) };
17
+ } } } }, { context: RedirectsPortsContext });
18
+ const ScopeProvider = react.Provider;
19
+ /** Live host options keep the mounted page and its drafts intact across locale changes.
20
+ * Factory options remain the default for hosts without a live override.
21
+ * @example createElement(feature.react.Provider, { admin, options: localizedOptions, children });
22
+ */
23
+ function Provider({ admin, children, options: currentOptions = options }) {
24
+ return createElement(RedirectsOptionsContext.Provider, { value: currentOptions }, createElement(ScopeProvider, { admin, children }));
25
+ }
26
+ return Object.assign({ ...redirectsModule }, { react: { ...react, Provider } });
27
+ }
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,15 @@
1
+ import { useWiredRedirects } from '../hooks/wired.hooks.js';
2
+ /** Redirects list markup. The original fetch-query pilot rationale is retained in SOURCE-RATIONALE.md.
3
+ * Controllers own local state; hooks bind query effects, table projections and the host's translator.
4
+ * Locale is supplied once per scope, never fetched independently by each row.
5
+ */
6
+ export interface RedirectsProps {
7
+ /**
8
+ * Dependency injection seam for tests — the same convention `@jini-ai/ui`'s `CustomSelect` uses
9
+ * for `useCustomSelect`. Defaulted to the real hook, so production callers (`panels.tsx`) pass
10
+ * nothing and behave exactly as before. See `PostsProps.usePostsHook` for the full rationale.
11
+ */
12
+ useRedirectsHook?: typeof useWiredRedirects;
13
+ }
14
+ export declare function RedirectsPage({ useRedirectsHook }?: RedirectsProps): import("react").JSX.Element;
15
+ //# sourceMappingURL=RedirectsPage.d.ts.map
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DataTable, ConfirmDialog } from '../../../react/index.js';
3
+ import { agentHandle } from '@jini-ai/agentic';
4
+ import { describeApiError } from '../../../core/transport/errors.js';
5
+ import { ImportRedirectsForm } from '../components/ImportRedirectsForm.js';
6
+ import { useWiredRedirects } from '../hooks/wired.hooks.js';
7
+ import { useRedirectsPage } from '../hooks/RedirectsPage.hooks.js';
8
+ export function RedirectsPage({ useRedirectsHook = useWiredRedirects } = {}) {
9
+ const { redirects, listStatus, listError, error, saving, pendingDelete, confirmDelete, deletePending, submitCreate, t, locale, columns, deleteBody, cancelDelete, headerActions } = useRedirectsPage({ useRedirectsHook });
10
+ // Only a FIRST load blocks the screen. A refetch triggered by a write keeps
11
+ // the table on screen (`status` stays `'success'`), where the old
12
+ // `if (!redirects)` guard blanked the whole page after every single edit.
13
+ if (listStatus === "error" && !redirects) {
14
+ return _jsx("div", { className: "notice error", children: describeApiError({ e: listError, fallback: "failed to load redirects" }) });
15
+ }
16
+ if (!redirects)
17
+ return _jsx("div", { className: "notice", children: t("Loading redirects…") });
18
+ return (_jsxs("div", { className: "page", children: [_jsxs("div", { className: "page-header", children: [_jsxs("div", { className: "page-header-text", children: [_jsx("p", { className: "page-kicker", children: t("Marketing") }), _jsx("h1", { className: "page-title", children: t("Redirects") }), _jsxs("p", { className: "page-description", children: [t("Manual URL redirect rules. Rules created automatically from a slug change (source"), _jsx("code", { children: " auto_slug_change" }), t(") also show up here.")] })] }), _jsx("div", { className: "page-actions", children: headerActions })] }), error ? _jsx("div", { className: "notice error", children: describeApiError({ e: error, fallback: "request failed" }) }) : null, _jsxs("form", { className: "card form-measure", onSubmit: submitCreate, children: [_jsx("div", { className: "field-group", children: _jsxs("div", { className: "field-row", children: [_jsxs("div", { className: "field", children: [_jsx("label", { className: "field-label", htmlFor: "redirect-match-type", children: t("Match type") }), _jsxs("select", { id: "redirect-match-type", name: "matchType", defaultValue: "exact", ...agentHandle({ handle: "redirects-create-match-type" }, { role: "field", label: "New redirect's match type" }), children: [_jsx("option", { value: "exact", children: t("exact") }), _jsx("option", { value: "prefix", children: t("prefix") }), _jsx("option", { value: "wildcard", children: t("wildcard") })] })] }), _jsxs("div", { className: "field", children: [_jsx("label", { className: "field-label", htmlFor: "redirect-from-pattern", children: t("From path") }), _jsx("input", { id: "redirect-from-pattern", name: "fromPattern", placeholder: "/old-path", required: true, ...agentHandle({ handle: "redirects-create-from-pattern" }, { role: "field", label: "New redirect's source path or pattern" }) })] }), _jsxs("div", { className: "field", children: [_jsx("label", { className: "field-label", htmlFor: "redirect-to-target", children: t("To target") }), _jsx("input", { id: "redirect-to-target", name: "toTarget", placeholder: "/new-path or https://example.com/...", required: true, ...agentHandle({ handle: "redirects-create-to-target" }, { role: "field", label: "New redirect's destination path or URL" }) })] }), _jsxs("div", { className: "field", children: [_jsx("label", { className: "field-label", htmlFor: "redirect-status-code", children: t("Status code") }), _jsxs("select", { id: "redirect-status-code", name: "statusCode", defaultValue: "301", ...agentHandle({ handle: "redirects-create-status-code" }, { role: "field", label: "New redirect's HTTP status code" }), children: [_jsx("option", { value: "301", children: t("301 (permanent)") }), _jsx("option", { value: "302", children: t("302 (temporary)") }), _jsx("option", { value: "307", children: t("307 (temporary, method-preserving)") }), _jsx("option", { value: "308", children: t("308 (permanent, method-preserving)") })] })] })] }) }), _jsx("div", { className: "editor-actions form-actions", children: _jsx("button", { type: "submit", disabled: saving, ...agentHandle({ handle: "redirects-create-submit" }, { role: "button", label: "Add this redirect rule" }), children: saving ? t("Saving…") : t("Add redirect") }) })] }), _jsx(ImportRedirectsForm, { t: t, locale: locale }), _jsx(DataTable, { rows: redirects, rowKey: (rule) => rule.id, empty: _jsx("div", { className: "card", children: _jsx("div", { className: "empty-state", children: _jsx("p", { children: t("No redirect rules yet.") }) }) }), columns: columns }), _jsx(ConfirmDialog, { open: pendingDelete !== null, agentHandle: "redirects-delete", title: t("Delete redirect rule?"), body: deleteBody, confirmLabel: t("Delete"), destructive: true, pending: deletePending, onConfirm: confirmDelete, onCancel: cancelDelete })] }));
19
+ }
20
+ //# sourceMappingURL=RedirectsPage.js.map
@@ -0,0 +1,75 @@
1
+ /** Existing route identity and permission are part of the host's navigation contract. */
2
+ export declare const redirectsModule: {
3
+ readonly id: "redirects";
4
+ readonly requires: {
5
+ readonly redirectsApi: import("../core/module/token.js").AdminPortToken<import("./ports.js").AdminRedirectsPort, "admin.redirects.api">;
6
+ };
7
+ readonly optional: {
8
+ readonly redirectsEvents: import("../core/module/token.js").AdminPortToken<import("./ports.js").RedirectsEventsPort, "admin.redirects.events">;
9
+ };
10
+ readonly messages: {
11
+ readonly "Loading\u2026": "Loading…";
12
+ readonly "Load hits": "Load hits";
13
+ readonly "Bulk import": "Bulk import";
14
+ readonly "rule objects (1-500 items)": "rule objects (1-500 items)";
15
+ readonly "Importing\u2026": "Importing…";
16
+ readonly Import: "Import";
17
+ readonly Marketing: "Marketing";
18
+ readonly Redirects: "Redirects";
19
+ readonly "Manual URL redirect rules. Rules created automatically from a slug change (source": "Manual URL redirect rules. Rules created automatically from a slug change (source";
20
+ readonly ") also show up here.": ") also show up here.";
21
+ readonly "Match type": "Match type";
22
+ readonly "From path": "From path";
23
+ readonly "To target": "To target";
24
+ readonly "Status code": "Status code";
25
+ readonly "301 (permanent)": "301 (permanent)";
26
+ readonly "302 (temporary)": "302 (temporary)";
27
+ readonly "307 (temporary, method-preserving)": "307 (temporary, method-preserving)";
28
+ readonly "308 (permanent, method-preserving)": "308 (permanent, method-preserving)";
29
+ readonly "Add redirect": "Add redirect";
30
+ readonly "No redirect rules yet.": "No redirect rules yet.";
31
+ readonly From: "From";
32
+ readonly To: "To";
33
+ readonly Type: "Type";
34
+ readonly Code: "Code";
35
+ readonly Source: "Source";
36
+ readonly Hits: "Hits";
37
+ readonly "Delete redirect rule?": "Delete redirect rule?";
38
+ readonly "Loading redirects\u2026": "Loading redirects…";
39
+ readonly "Not valid JSON.": "Not valid JSON.";
40
+ readonly "Must be a JSON array of rule objects.": "Must be a JSON array of rule objects.";
41
+ readonly exact: "exact";
42
+ readonly prefix: "prefix";
43
+ readonly wildcard: "wildcard";
44
+ readonly Status: "Status";
45
+ readonly More: "More";
46
+ readonly Delete: "Delete";
47
+ readonly Disable: "Disable";
48
+ readonly Enable: "Enable";
49
+ readonly "Saving\u2026": "Saving…";
50
+ readonly Created: "Created";
51
+ readonly active: "active";
52
+ readonly disabled: "disabled";
53
+ readonly "{created} created, {failed} failed.": "{created} created, {failed} failed.";
54
+ readonly "Item {index} ({code})": "Item {index} ({code})";
55
+ readonly "Actions for redirect rule from \"{fromPattern}\"": "Actions for redirect rule from \"{fromPattern}\"";
56
+ readonly "Paste a JSON array of ": "Paste a JSON array of ";
57
+ readonly " rule objects (1-500 items)": " rule objects (1-500 items)";
58
+ readonly "Delete the redirect rule from \"": "Delete the redirect rule from \"";
59
+ readonly "\"?": "\"?";
60
+ };
61
+ readonly pages: {
62
+ readonly list: {
63
+ readonly path: "/redirects";
64
+ readonly label: "Redirects";
65
+ readonly permissions: readonly ["admin.redirects.manage"];
66
+ readonly agentReachable: true;
67
+ readonly nav: {
68
+ readonly group: "marketing";
69
+ readonly icon: "arrow-right";
70
+ };
71
+ readonly tabs: {};
72
+ };
73
+ };
74
+ };
75
+ //# sourceMappingURL=redirects.module.d.ts.map
@@ -0,0 +1,13 @@
1
+ import { defineAdminModule } from '../core/module/index.js';
2
+ import { redirectsApiToken, redirectsEventsToken } from './ports.js';
3
+ import { redirectsMessagesEn } from './messages.en.js';
4
+ /** Existing route identity and permission are part of the host's navigation contract. */
5
+ export const redirectsModule = defineAdminModule({
6
+ id: 'redirects',
7
+ requires: { redirectsApi: redirectsApiToken },
8
+ optional: { redirectsEvents: redirectsEventsToken },
9
+ messages: redirectsMessagesEn,
10
+ pages: { list: { path: '/redirects', label: 'Redirects', permissions: ['admin.redirects.manage'],
11
+ agentReachable: true, nav: { group: 'marketing', icon: 'arrow-right' }, tabs: {} } },
12
+ });
13
+ //# sourceMappingURL=redirects.module.js.map