@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,42 @@
1
+ import type { AdminWidgetsPort } from '../ports.js';
2
+ import type { AdminWidgetArea, AdminWidgetPlacement, WidgetsTranslate } from '../models.js';
3
+ export interface WidgetRegionEditorState {
4
+ area: AdminWidgetArea | null;
5
+ placements: AdminWidgetPlacement[];
6
+ message: string | null;
7
+ error: string | null;
8
+ loading: boolean;
9
+ saving: boolean;
10
+ }
11
+ /** One generation guards both load call sites (route changes and post-save rereads). */
12
+ export declare function createWidgetRegionEditorController({ api, regionKey: initialKey }: {
13
+ api: AdminWidgetsPort;
14
+ regionKey: string;
15
+ }, { t }?: {
16
+ t?: WidgetsTranslate | undefined;
17
+ }): {
18
+ getSnapshot: () => Readonly<WidgetRegionEditorState>;
19
+ subscribe: ({ listener }: {
20
+ listener: () => void;
21
+ }) => () => void;
22
+ load: (_required?: Record<string, never>, _optional?: Record<string, never>) => Promise<void>;
23
+ save: (_required?: Record<string, never>, _optional?: Record<string, never>) => Promise<void>;
24
+ addPlacement: ({ widgetInstanceId }: {
25
+ widgetInstanceId: string;
26
+ }, _optional?: Record<string, never>) => void;
27
+ setRegionKey({ regionKey: next }: {
28
+ regionKey: string;
29
+ }, _optional?: Record<string, never>): void;
30
+ removeAt({ placementId }: {
31
+ placementId: string;
32
+ }, _optional?: Record<string, never>): void;
33
+ moveAt({ index, direction }: {
34
+ index: number;
35
+ direction: -1 | 1;
36
+ }, _optional?: Record<string, never>): void;
37
+ toggleEnabled({ placementId }: {
38
+ placementId: string;
39
+ }, _optional?: Record<string, never>): void;
40
+ dispose(_required?: Record<string, never>, _optional?: Record<string, never>): void;
41
+ };
42
+ //# sourceMappingURL=region-editor.controller.d.ts.map
@@ -0,0 +1,69 @@
1
+ import { createControllerStore } from '../../core/module/controller-store.js';
2
+ import { describeApiError } from '../../core/transport/errors.js';
3
+ import { buildDraftPlacement, movePlacement, resolveWidgetRegionSaveError, widgetApiError } from '../rules.js';
4
+ import { widgetsEnglish } from '../messages.en.js';
5
+ /** One generation guards both load call sites (route changes and post-save rereads). */
6
+ export function createWidgetRegionEditorController({ api, regionKey: initialKey }, { t = widgetsEnglish } = {}) {
7
+ const store = createControllerStore({ initial: { area: null, placements: [], message: null, error: null, loading: true, saving: false } });
8
+ let regionKey = initialKey, generation = 0;
9
+ async function load(_required = {}, _optional = {}) {
10
+ const ticket = ++generation;
11
+ store.set({ patch: { loading: true, error: null, saving: false } });
12
+ try {
13
+ const result = await api.getWidgetRegion({ regionKey }, { signal: store.signal });
14
+ if (ticket === generation && !store.signal.aborted)
15
+ store.set({ patch: { area: result.area, placements: result.placements } });
16
+ }
17
+ catch (error) {
18
+ if (ticket === generation && !store.signal.aborted)
19
+ store.set({ patch: { error: describeApiError({ e: widgetApiError({ error }) ?? error, fallback: t('failed to load region') }) } });
20
+ }
21
+ finally {
22
+ if (ticket === generation && !store.signal.aborted)
23
+ store.set({ patch: { loading: false } });
24
+ }
25
+ }
26
+ function addPlacement({ widgetInstanceId }, _optional = {}) {
27
+ const draft = buildDraftPlacement({ widgetInstanceId });
28
+ store.set({ patch: { placements: [...store.getSnapshot().placements, draft] } });
29
+ // A failed lookup keeps the draft saveable; the post-save reread supplies its title/type.
30
+ void api.getWidget({ id: widgetInstanceId }, { signal: store.signal }).then(({ widget }) => {
31
+ store.set({ patch: { placements: store.getSnapshot().placements.map(p => p.placementId === draft.placementId ? { ...p, widgetTitle: widget.title, widgetType: widget.widgetType } : p) } });
32
+ }).catch(() => { });
33
+ }
34
+ async function save(_required = {}, _optional = {}) {
35
+ const { area, placements } = store.getSnapshot();
36
+ if (!area)
37
+ return;
38
+ const ticket = generation;
39
+ store.set({ patch: { saving: true, message: null, error: null } });
40
+ let stale = false;
41
+ try {
42
+ const { area: saved } = await api.mutateWidgetRegionPlacements({ regionKey, baseVersion: area.version, placements: placements.map(p => ({ placementId: p.placementId, widgetEntryId: p.widgetEntryId, enabled: p.enabled })) }, { signal: store.signal });
43
+ stale = ticket !== generation || store.signal.aborted;
44
+ if (stale)
45
+ return;
46
+ store.set({ patch: { area: saved, message: t('Saved · version {version}').replace('{version}', String(saved.version)) } });
47
+ // A stale save must never mint a read generation that supersedes the new region's load.
48
+ void load();
49
+ }
50
+ catch (error) {
51
+ stale = ticket !== generation || store.signal.aborted;
52
+ if (!stale)
53
+ store.set({ patch: { error: resolveWidgetRegionSaveError({ error }, { t }) } });
54
+ }
55
+ finally {
56
+ if (!stale)
57
+ store.set({ patch: { saving: false } });
58
+ }
59
+ }
60
+ return {
61
+ getSnapshot: store.getSnapshot, subscribe: store.subscribe, load, save, addPlacement,
62
+ setRegionKey({ regionKey: next }, _optional = {}) { regionKey = next; void load(); },
63
+ removeAt({ placementId }, _optional = {}) { store.set({ patch: { placements: store.getSnapshot().placements.filter(p => p.placementId !== placementId) } }); },
64
+ moveAt({ index, direction }, _optional = {}) { store.set({ patch: { placements: movePlacement({ items: store.getSnapshot().placements, index, direction }) } }); },
65
+ toggleEnabled({ placementId }, _optional = {}) { store.set({ patch: { placements: store.getSnapshot().placements.map(p => p.placementId === placementId ? { ...p, enabled: !p.enabled } : p) } }); },
66
+ dispose(_required = {}, _optional = {}) { generation++; store.dispose(); },
67
+ };
68
+ }
69
+ //# sourceMappingURL=region-editor.controller.js.map
@@ -0,0 +1,27 @@
1
+ import type { AdminWidgetsPort } from '../ports.js';
2
+ import type { AdminWidgetRegionBinding, WidgetsTranslate } from '../models.js';
3
+ export interface WidgetRegionsState {
4
+ regions: AdminWidgetRegionBinding[] | null;
5
+ error: string | null;
6
+ newRegionKey: string;
7
+ binding: boolean;
8
+ }
9
+ /** Region keys stay free text: no admin-listable theme registry exists. Latest refresh wins. */
10
+ export declare function createWidgetRegionsController({ api }: {
11
+ api: AdminWidgetsPort;
12
+ }, { t, navigate }?: {
13
+ t?: WidgetsTranslate | undefined;
14
+ navigate?: ((path: string) => void) | undefined;
15
+ }): {
16
+ getSnapshot: () => Readonly<WidgetRegionsState>;
17
+ subscribe: ({ listener }: {
18
+ listener: () => void;
19
+ }) => () => void;
20
+ load: (_required?: Record<string, never>, _optional?: Record<string, never>) => Promise<void>;
21
+ bind: (_required?: Record<string, never>, _optional?: Record<string, never>) => Promise<void>;
22
+ setNewRegionKey({ value }: {
23
+ value: string;
24
+ }, _optional?: Record<string, never>): void;
25
+ dispose(_required?: Record<string, never>, _optional?: Record<string, never>): void;
26
+ };
27
+ //# sourceMappingURL=regions.controller.d.ts.map
@@ -0,0 +1,44 @@
1
+ import { createControllerStore } from '../../core/module/controller-store.js';
2
+ import { describeApiError } from '../../core/transport/errors.js';
3
+ import { widgetApiError } from '../rules.js';
4
+ import { widgetsEnglish } from '../messages.en.js';
5
+ /** Region keys stay free text: no admin-listable theme registry exists. Latest refresh wins. */
6
+ export function createWidgetRegionsController({ api }, { t = widgetsEnglish, navigate } = {}) {
7
+ const store = createControllerStore({ initial: { regions: null, error: null, newRegionKey: '', binding: false } });
8
+ let generation = 0;
9
+ async function load(_required = {}, _optional = {}) {
10
+ const ticket = ++generation;
11
+ try {
12
+ const result = await api.listWidgetRegions({}, { signal: store.signal });
13
+ if (ticket === generation && !store.signal.aborted)
14
+ store.set({ patch: { regions: result.regions } });
15
+ }
16
+ catch (error) {
17
+ if (ticket === generation && !store.signal.aborted)
18
+ store.set({ patch: { error: describeApiError({ e: widgetApiError({ error }) ?? error, fallback: t('failed to load regions') }) } });
19
+ }
20
+ }
21
+ async function bind(_required = {}, _optional = {}) {
22
+ const regionKey = store.getSnapshot().newRegionKey.trim();
23
+ if (!regionKey)
24
+ return;
25
+ store.set({ patch: { binding: true, error: null } });
26
+ try {
27
+ await api.bindWidgetRegion({ regionKey }, { signal: store.signal });
28
+ store.set({ patch: { newRegionKey: '' } });
29
+ navigate?.(`/widgets/regions/${regionKey}`);
30
+ }
31
+ catch (error) {
32
+ store.set({ patch: { error: describeApiError({ e: widgetApiError({ error }) ?? error, fallback: t('bind failed') }) } });
33
+ }
34
+ finally {
35
+ store.set({ patch: { binding: false } });
36
+ }
37
+ }
38
+ return {
39
+ getSnapshot: store.getSnapshot, subscribe: store.subscribe, load, bind,
40
+ setNewRegionKey({ value }, _optional = {}) { store.set({ patch: { newRegionKey: value } }); },
41
+ dispose(_required = {}, _optional = {}) { generation++; store.dispose(); },
42
+ };
43
+ }
44
+ //# sourceMappingURL=regions.controller.js.map
@@ -0,0 +1,11 @@
1
+ export { widgetsModule, widgetsAgentPageIds, widgetsEditorPaths } from './widgets.module.js';
2
+ export { widgetsApiToken, widgetsEventsToken, widgetsNavigationToken } from './ports.js';
3
+ export type { AdminWidgetsPort, WidgetsEventsPort, WidgetsNavigationPort } from './ports.js';
4
+ export type * from './models.js';
5
+ export * from './rules.js';
6
+ export { widgetsMessagesEn, widgetsEnglish } from './messages.en.js';
7
+ export { createWidgetsLibraryController } from './controllers/library.controller.js';
8
+ export { createWidgetInstanceEditorController } from './controllers/instance-editor.controller.js';
9
+ export { createWidgetRegionsController } from './controllers/regions.controller.js';
10
+ export { createWidgetRegionEditorController } from './controllers/region-editor.controller.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,9 @@
1
+ export { widgetsModule, widgetsAgentPageIds, widgetsEditorPaths } from './widgets.module.js';
2
+ export { widgetsApiToken, widgetsEventsToken, widgetsNavigationToken } from './ports.js';
3
+ export * from './rules.js';
4
+ export { widgetsMessagesEn, widgetsEnglish } from './messages.en.js';
5
+ export { createWidgetsLibraryController } from './controllers/library.controller.js';
6
+ export { createWidgetInstanceEditorController } from './controllers/instance-editor.controller.js';
7
+ export { createWidgetRegionsController } from './controllers/regions.controller.js';
8
+ export { createWidgetRegionEditorController } from './controllers/region-editor.controller.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,78 @@
1
+ /** English source keys translated by the host widgets dictionary. */
2
+ export declare const widgetsMessagesEn: {
3
+ readonly Back: "Back";
4
+ readonly "Widget type to create": "Widget type to create";
5
+ readonly Content: "Content";
6
+ readonly Text: "Text";
7
+ readonly "Social Links": "Social Links";
8
+ readonly "Collection list": "Collection list";
9
+ readonly Menu: "Menu";
10
+ readonly "Contact Form": "Contact Form";
11
+ readonly Widgets: "Widgets";
12
+ readonly "Widget Regions": "Widget Regions";
13
+ readonly "A region is a theme-declared placement area (e.g. \"header\", \"footer\", \"sidebar\"). Bind a region by its key to start placing widgets in it.": "A region is a theme-declared placement area (e.g. \"header\", \"footer\", \"sidebar\"). Bind a region by its key to start placing widgets in it.";
14
+ readonly "Binding\u2026": "Binding…";
15
+ readonly "Bind region": "Bind region";
16
+ readonly "No regions bound yet.": "No regions bound yet.";
17
+ readonly "Region key": "Region key";
18
+ readonly Placements: "Placements";
19
+ readonly Manage: "Manage";
20
+ readonly "Create reusable content blocks and place them into your theme's widget regions.": "Create reusable content blocks and place them into your theme's widget regions.";
21
+ readonly "Regions \u2192": "Regions →";
22
+ readonly "Add New": "Add New";
23
+ readonly "1 widget record in this workspace could not be read.": "1 widget record in this workspace could not be read.";
24
+ readonly "{n} widget records in this workspace could not be read.": "{n} widget records in this workspace could not be read.";
25
+ readonly "Show ids": "Show ids";
26
+ readonly "No widgets yet.": "No widgets yet.";
27
+ readonly "Create one above to get started.": "Create one above to get started.";
28
+ readonly Title: "Title";
29
+ readonly Type: "Type";
30
+ readonly Slug: "Slug";
31
+ readonly Status: "Status";
32
+ readonly Actions: "Actions";
33
+ readonly Trash: "Trash";
34
+ readonly "Move to trash?": "Move to trash?";
35
+ readonly "Move to trash": "Move to trash";
36
+ readonly "Move \"{title}\" to trash?": "Move \"{title}\" to trash?";
37
+ readonly Regions: "Regions";
38
+ readonly "Saving\u2026": "Saving…";
39
+ readonly Save: "Save";
40
+ readonly "Region:": "Region:";
41
+ readonly "Manage which widgets appear in this region and their order.": "Manage which widgets appear in this region and their order.";
42
+ readonly "No widgets placed in this region yet.": "No widgets placed in this region yet.";
43
+ readonly Enabled: "Enabled";
44
+ readonly "\u26A0 Broken reference": "⚠ Broken reference";
45
+ readonly "+ Add widget": "+ Add widget";
46
+ readonly "New widget": "New widget";
47
+ readonly "Edit widget": "Edit widget";
48
+ readonly "Configure this widget's title and settings.": "Configure this widget's title and settings.";
49
+ readonly "Widget title": "Widget title";
50
+ readonly "Type:": "Type:";
51
+ readonly "Region area": "Region area";
52
+ readonly "Inline embed": "Inline embed";
53
+ readonly "Used in 1 place:": "Used in 1 place:";
54
+ readonly "Used in {count} places:": "Used in {count} places:";
55
+ readonly "failed to load widget": "failed to load widget";
56
+ readonly "save failed": "save failed";
57
+ readonly "This widget changed since you loaded it, refresh and try again.": "This widget changed since you loaded it, refresh and try again.";
58
+ readonly "This region changed since you loaded it, refresh and try again.": "This region changed since you loaded it, refresh and try again.";
59
+ readonly "failed to load region": "failed to load region";
60
+ readonly "failed to load widgets": "failed to load widgets";
61
+ readonly "delete failed": "delete failed";
62
+ readonly "This item changed since you loaded it. Reload and try again.": "This item changed since you loaded it. Reload and try again.";
63
+ readonly "failed to load regions": "failed to load regions";
64
+ readonly "bind failed": "bind failed";
65
+ readonly "Loading widget\u2026": "Loading widget…";
66
+ readonly "No widget type specified.": "No widget type specified.";
67
+ readonly "Unknown widget type \"": "Unknown widget type \"";
68
+ readonly "Loading region\u2026": "Loading region…";
69
+ readonly "Move up": "Move up";
70
+ readonly "Move down": "Move down";
71
+ readonly Remove: "Remove";
72
+ readonly "Loading regions\u2026": "Loading regions…";
73
+ readonly "Loading widgets\u2026": "Loading widgets…";
74
+ readonly "Saved \u00B7 version {version}": "Saved · version {version}";
75
+ };
76
+ /** English fallback with the same interpolation convention as the host. */
77
+ export declare function widgetsEnglish(key: string, vars?: Record<string, string | number> | undefined): string;
78
+ //# sourceMappingURL=messages.en.d.ts.map
@@ -0,0 +1,83 @@
1
+ /** English source keys translated by the host widgets dictionary. */
2
+ export const widgetsMessagesEn = {
3
+ "Back": "Back",
4
+ "Widget type to create": "Widget type to create",
5
+ "Content": "Content",
6
+ "Text": "Text",
7
+ "Social Links": "Social Links",
8
+ "Collection list": "Collection list",
9
+ "Menu": "Menu",
10
+ "Contact Form": "Contact Form",
11
+ "Widgets": "Widgets",
12
+ "Widget Regions": "Widget Regions",
13
+ "A region is a theme-declared placement area (e.g. \"header\", \"footer\", \"sidebar\"). Bind a region by its key to start placing widgets in it.": "A region is a theme-declared placement area (e.g. \"header\", \"footer\", \"sidebar\"). Bind a region by its key to start placing widgets in it.",
14
+ "Binding…": "Binding…",
15
+ "Bind region": "Bind region",
16
+ "No regions bound yet.": "No regions bound yet.",
17
+ "Region key": "Region key",
18
+ "Placements": "Placements",
19
+ "Manage": "Manage",
20
+ "Create reusable content blocks and place them into your theme's widget regions.": "Create reusable content blocks and place them into your theme's widget regions.",
21
+ "Regions →": "Regions →",
22
+ "Add New": "Add New",
23
+ "1 widget record in this workspace could not be read.": "1 widget record in this workspace could not be read.",
24
+ "{n} widget records in this workspace could not be read.": "{n} widget records in this workspace could not be read.",
25
+ "Show ids": "Show ids",
26
+ "No widgets yet.": "No widgets yet.",
27
+ "Create one above to get started.": "Create one above to get started.",
28
+ "Title": "Title",
29
+ "Type": "Type",
30
+ "Slug": "Slug",
31
+ "Status": "Status",
32
+ "Actions": "Actions",
33
+ "Trash": "Trash",
34
+ "Move to trash?": "Move to trash?",
35
+ "Move to trash": "Move to trash",
36
+ "Move \"{title}\" to trash?": "Move \"{title}\" to trash?",
37
+ "Regions": "Regions",
38
+ "Saving…": "Saving…",
39
+ "Save": "Save",
40
+ "Region:": "Region:",
41
+ "Manage which widgets appear in this region and their order.": "Manage which widgets appear in this region and their order.",
42
+ "No widgets placed in this region yet.": "No widgets placed in this region yet.",
43
+ "Enabled": "Enabled",
44
+ "⚠ Broken reference": "⚠ Broken reference",
45
+ "+ Add widget": "+ Add widget",
46
+ "New widget": "New widget",
47
+ "Edit widget": "Edit widget",
48
+ "Configure this widget's title and settings.": "Configure this widget's title and settings.",
49
+ "Widget title": "Widget title",
50
+ "Type:": "Type:",
51
+ "Region area": "Region area",
52
+ "Inline embed": "Inline embed",
53
+ "Used in 1 place:": "Used in 1 place:",
54
+ "Used in {count} places:": "Used in {count} places:",
55
+ "failed to load widget": "failed to load widget",
56
+ "save failed": "save failed",
57
+ "This widget changed since you loaded it, refresh and try again.": "This widget changed since you loaded it, refresh and try again.",
58
+ "This region changed since you loaded it, refresh and try again.": "This region changed since you loaded it, refresh and try again.",
59
+ "failed to load region": "failed to load region",
60
+ "failed to load widgets": "failed to load widgets",
61
+ "delete failed": "delete failed",
62
+ "This item changed since you loaded it. Reload and try again.": "This item changed since you loaded it. Reload and try again.",
63
+ "failed to load regions": "failed to load regions",
64
+ "bind failed": "bind failed",
65
+ "Loading widget…": "Loading widget…",
66
+ "No widget type specified.": "No widget type specified.",
67
+ "Unknown widget type \"": "Unknown widget type \"",
68
+ "Loading region…": "Loading region…",
69
+ "Move up": "Move up",
70
+ "Move down": "Move down",
71
+ "Remove": "Remove",
72
+ "Loading regions…": "Loading regions…",
73
+ "Loading widgets…": "Loading widgets…",
74
+ "Saved · version {version}": "Saved · version {version}"
75
+ };
76
+ /** English fallback with the same interpolation convention as the host. */
77
+ export function widgetsEnglish(key, vars) {
78
+ let message = widgetsMessagesEn[key] ?? key;
79
+ for (const [name, value] of Object.entries(vars ?? {}))
80
+ message = message.replaceAll(`{${name}}`, String(value));
81
+ return message;
82
+ }
83
+ //# sourceMappingURL=messages.en.js.map
@@ -0,0 +1,62 @@
1
+ /** Host-defined widget types/status/reference kinds are open; the supplied catalog controls creation. */
2
+ export type AdminWidgetType = 'text' | 'social-links' | 'recent-entries' | 'menu' | 'contact-form' | (string & {});
3
+ export type AdminWidgetStatus = 'active' | 'trash' | 'purged' | (string & {});
4
+ export interface AdminWidget {
5
+ id: string;
6
+ workspaceId: string;
7
+ slug: string;
8
+ title: string;
9
+ status: AdminWidgetStatus;
10
+ widgetType: AdminWidgetType;
11
+ config: Record<string, unknown>;
12
+ updatedAt: string;
13
+ version: number;
14
+ }
15
+ export interface AdminWidgetWhereUsedReference {
16
+ kind: 'region' | 'embed' | (string & {});
17
+ sourceEntryId: string;
18
+ fieldPath: string;
19
+ }
20
+ export interface AdminWidgetWhereUsed {
21
+ count: number;
22
+ references: AdminWidgetWhereUsedReference[];
23
+ }
24
+ export interface AdminWidgetPlacement {
25
+ placementId: string;
26
+ widgetEntryId: string;
27
+ enabled: boolean;
28
+ widgetTitle: string | null;
29
+ widgetType: string | null;
30
+ broken: boolean;
31
+ }
32
+ export interface AdminWidgetArea {
33
+ id: string;
34
+ workspaceId: string;
35
+ regionKey: string;
36
+ updatedAt: string;
37
+ version: number;
38
+ }
39
+ export interface AdminWidgetRegionBinding {
40
+ workspaceId: string;
41
+ regionKey: string;
42
+ areaEntryId: string;
43
+ updatedAt: string;
44
+ placementCount: number;
45
+ }
46
+ export type WidgetsTranslate = (key: string, vars?: Record<string, string | number> | undefined) => string;
47
+ export interface WidgetTypeOption {
48
+ value: AdminWidgetType;
49
+ label: string;
50
+ }
51
+ export interface WidgetsRequestOptions {
52
+ signal?: AbortSignal | undefined;
53
+ }
54
+ export interface WidgetEditorParams {
55
+ widgetId: string | null;
56
+ widgetType: string | null;
57
+ }
58
+ export type WidgetSlugRedirectPath = (base: string, requestedId: string, item: {
59
+ id: string;
60
+ slug: string;
61
+ }) => string | null;
62
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1,79 @@
1
+ import type { AdminShellNavigationPort } from '../core/ports/shell.js';
2
+ import type { AdminWidget, AdminWidgetWhereUsed, AdminWidgetArea, AdminWidgetPlacement, AdminWidgetRegionBinding, AdminWidgetType, WidgetsRequestOptions } from './models.js';
3
+ /** Instance and region administration share one workspace-scoped API. Hosts authorize widgets.*,
4
+ * validate configs and placement caps, and enforce baseVersion on writes. No purge or embed-write
5
+ * operation is exposed: the four screens never call one; embeds appear in whereUsed only. */
6
+ export interface AdminWidgetsPort {
7
+ listWidgets(required: {
8
+ widgetType?: string | undefined;
9
+ includeInactive?: boolean | undefined;
10
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
11
+ widgets: AdminWidget[];
12
+ skippedCount?: number | undefined;
13
+ skippedIds?: string[] | undefined;
14
+ }>;
15
+ getWidget(required: {
16
+ id: string;
17
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
18
+ widget: AdminWidget;
19
+ whereUsed: AdminWidgetWhereUsed;
20
+ }>;
21
+ createWidget(required: {
22
+ widgetType: AdminWidgetType;
23
+ title: string;
24
+ config: Record<string, unknown>;
25
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
26
+ widget: AdminWidget;
27
+ }>;
28
+ updateWidget(required: {
29
+ id: string;
30
+ baseVersion: number;
31
+ config: Record<string, unknown>;
32
+ title?: string | undefined;
33
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
34
+ widget: AdminWidget;
35
+ }>;
36
+ trashWidget(required: {
37
+ id: string;
38
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
39
+ ok: true;
40
+ version: number | null;
41
+ }>;
42
+ listWidgetRegions(required: Record<string, never>, optional?: WidgetsRequestOptions | undefined): Promise<{
43
+ regions: AdminWidgetRegionBinding[];
44
+ }>;
45
+ bindWidgetRegion(required: {
46
+ regionKey: string;
47
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
48
+ area: AdminWidgetArea;
49
+ }>;
50
+ getWidgetRegion(required: {
51
+ regionKey: string;
52
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
53
+ area: AdminWidgetArea;
54
+ placements: AdminWidgetPlacement[];
55
+ }>;
56
+ mutateWidgetRegionPlacements(required: {
57
+ regionKey: string;
58
+ baseVersion: number;
59
+ placements: Array<{
60
+ placementId: string;
61
+ widgetEntryId: string;
62
+ enabled: boolean;
63
+ }>;
64
+ }, optional?: WidgetsRequestOptions | undefined): Promise<{
65
+ area: AdminWidgetArea;
66
+ }>;
67
+ }
68
+ /** The host filters refresh scope by resource, including null = all resources. */
69
+ export interface WidgetsEventsPort {
70
+ subscribe(required: {
71
+ resource: string;
72
+ onRefresh: () => void;
73
+ }, optional?: Record<string, never> | undefined): () => void;
74
+ }
75
+ export type WidgetsNavigationPort = Pick<AdminShellNavigationPort, 'navigate'>;
76
+ export declare const widgetsApiToken: import("../core/module/token.js").AdminPortToken<AdminWidgetsPort, "admin.widgets.api">;
77
+ export declare const widgetsEventsToken: import("../core/module/token.js").AdminPortToken<WidgetsEventsPort, "admin.widgets.events">;
78
+ export declare const widgetsNavigationToken: import("../core/module/token.js").AdminPortToken<WidgetsNavigationPort, "admin.widgets.navigation">;
79
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1,5 @@
1
+ import { adminPort } from '../core/module/token.js';
2
+ export const widgetsApiToken = adminPort({ id: 'admin.widgets.api' });
3
+ export const widgetsEventsToken = adminPort({ id: 'admin.widgets.events' });
4
+ export const widgetsNavigationToken = adminPort({ id: 'admin.widgets.navigation' });
5
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1,14 @@
1
+ import type { AdminWidgetWhereUsed, WidgetsTranslate as Translate } from "../../models.js";
2
+ /** REQ-34/`ui.spec.md` §3.5 — rendered only when `references.length > 0`, before the config form. */
3
+ export declare function WhereUsedBanner(props: {
4
+ whereUsed: AdminWidgetWhereUsed;
5
+ t: Translate;
6
+ }): import("react").JSX.Element | null;
7
+ import type { WidgetInstanceGuard } from '../../rules.js';
8
+ /** Renders the notice for whichever guard applies — split from `widgetInstanceGuard` itself so the
9
+ * decision (data in, data out) and the rendering stay separately testable. */
10
+ export declare function WidgetInstanceGuardNotice({ guard, t }: {
11
+ guard: WidgetInstanceGuard;
12
+ t: (key: string) => string;
13
+ }): import("react").JSX.Element;
14
+ //# sourceMappingURL=WidgetInstanceNotices.d.ts.map
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** REQ-34/`ui.spec.md` §3.5 — rendered only when `references.length > 0`, before the config form. */
3
+ export function WhereUsedBanner(props) {
4
+ const { t } = props;
5
+ if (props.whereUsed.count === 0)
6
+ return null;
7
+ return (_jsxs("div", { className: "notice widget-where-used-banner", children: [_jsx("strong", { children: props.whereUsed.count === 1
8
+ ? t("Used in 1 place:")
9
+ : t("Used in {count} places:").replace("{count}", String(props.whereUsed.count)) }), _jsx("ul", { children: props.whereUsed.references.map((ref, i) => (_jsxs("li", { children: [ref.kind === "region" ? t("Region area") : t("Inline embed"), " (", ref.sourceEntryId, ")"] }, i))) })] }));
10
+ }
11
+ /** Renders the notice for whichever guard applies — split from `widgetInstanceGuard` itself so the
12
+ * decision (data in, data out) and the rendering stay separately testable. */
13
+ export function WidgetInstanceGuardNotice({ guard, t }) {
14
+ switch (guard.kind) {
15
+ case "fetch-error":
16
+ return _jsx("div", { className: "notice error", children: guard.message });
17
+ case "loading":
18
+ return _jsx("div", { className: "notice", children: t("Loading widget…") });
19
+ case "no-type":
20
+ return _jsx("div", { className: "notice error", children: t("No widget type specified.") });
21
+ case "unknown-type":
22
+ return _jsxs("div", { className: "notice error", children: [t('Unknown widget type "'), guard.widgetType, "\"."] });
23
+ }
24
+ }
25
+ //# sourceMappingURL=WidgetInstanceNotices.js.map
@@ -0,0 +1,22 @@
1
+ /** The page header's Save-side actions cluster — the save-status message/error and the Save
2
+ * button — pulled out of `WidgetRegionEditor`'s own render body as a top-level component under
3
+ * the tightened ≤9/≤9 pass. Each of the three spans below is its own independent conditional (a
4
+ * save succeeded, a save failed, the save is in flight); extracting the whole cluster moves all
5
+ * three out of the parent's own scope at once.
6
+ *
7
+ * The "back to regions" link used to live in this same cluster (both sat together at the header's
8
+ * right edge). It moved out to `WidgetRegionEditor`'s own `.page-header-lead` (2026-09-22, split
9
+ * header pass — see that render's own comment) because the split header needs the back link and
10
+ * this actions cluster on OPPOSITE rails, not adjacent — a single component can't render into two
11
+ * non-adjacent grid cells with the title between them without breaking DOM/tab order, so the
12
+ * cluster shed the one piece that had to move. */
13
+ export declare function WidgetRegionEditorHeaderActions({ message, error, saving, onSave, t, }: {
14
+ message: string | null;
15
+ error: string | null;
16
+ saving: boolean;
17
+ onSave: () => void;
18
+ /** Translator closure — see `WidgetRegionEditor()`'s own `t`. Optional (identity default) since
19
+ * this component is exported and unit-tested directly without one. */
20
+ t?: ((key: string) => string) | undefined;
21
+ }): import("react").JSX.Element;
22
+ //# sourceMappingURL=WidgetRegionEditorHeaderActions.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { agentHandle } from "@jini-ai/agentic";
3
+ /** The page header's Save-side actions cluster — the save-status message/error and the Save
4
+ * button — pulled out of `WidgetRegionEditor`'s own render body as a top-level component under
5
+ * the tightened ≤9/≤9 pass. Each of the three spans below is its own independent conditional (a
6
+ * save succeeded, a save failed, the save is in flight); extracting the whole cluster moves all
7
+ * three out of the parent's own scope at once.
8
+ *
9
+ * The "back to regions" link used to live in this same cluster (both sat together at the header's
10
+ * right edge). It moved out to `WidgetRegionEditor`'s own `.page-header-lead` (2026-09-22, split
11
+ * header pass — see that render's own comment) because the split header needs the back link and
12
+ * this actions cluster on OPPOSITE rails, not adjacent — a single component can't render into two
13
+ * non-adjacent grid cells with the title between them without breaking DOM/tab order, so the
14
+ * cluster shed the one piece that had to move. */
15
+ export function WidgetRegionEditorHeaderActions({ message, error, saving, onSave, t = (key) => key, }) {
16
+ return (_jsxs("div", { className: "page-header-actions page-actions", children: [message ? _jsx("span", { className: "save-ok", children: message }) : null, error ? (_jsx("span", { className: "save-error", role: "alert", children: error })) : null, _jsx("button", { onClick: onSave, disabled: saving, ...agentHandle({ handle: "widget-region-editor-save" }, { role: "button", label: "Save this region's placements" }), children: saving ? t("Saving…") : t("Save") })] }));
17
+ }
18
+ //# sourceMappingURL=WidgetRegionEditorHeaderActions.js.map
@@ -0,0 +1,13 @@
1
+ /** The list screen's two independent notices — a fetch/action error, and malformed widget records
2
+ * the server could not read — pulled out of `WidgetsLibrary`'s own render body as a top-level
3
+ * component under the tightened ≤9/≤9 pass. */
4
+ export declare function WidgetsLibraryNotices({ error, skippedCount, skippedIds, t, }: {
5
+ error: string | null;
6
+ skippedCount: number;
7
+ skippedIds?: string[] | undefined;
8
+ /** Translator closure — see `WidgetsLibrary()`'s own `t`. Optional (identity default) since this
9
+ * component is exported and unit-tested directly without one — same "default to the real thing,
10
+ * a stub renders English" convention every `use*Hook` prop in this app already follows. */
11
+ t?: ((key: string) => string) | undefined;
12
+ }): import("react").JSX.Element;
13
+ //# sourceMappingURL=WidgetsLibraryNotices.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /** The list screen's two independent notices — a fetch/action error, and malformed widget records
3
+ * the server could not read — pulled out of `WidgetsLibrary`'s own render body as a top-level
4
+ * component under the tightened ≤9/≤9 pass. */
5
+ export function WidgetsLibraryNotices({ error, skippedCount, skippedIds = [], t = (key) => key, }) {
6
+ return (_jsxs(_Fragment, { children: [error ? _jsx("div", { className: "notice error", children: error }) : null, skippedCount > 0 ? (_jsxs("div", { className: "notice", children: [skippedCount === 1
7
+ ? t("1 widget record in this workspace could not be read.")
8
+ : t("{n} widget records in this workspace could not be read.").replace("{n}", String(skippedCount)), skippedIds.length > 0 ? (_jsxs("details", { children: [_jsx("summary", { children: t("Show ids") }), _jsx("ul", { children: skippedIds.map((id) => _jsx("li", { children: _jsx("code", { children: id }) }, id)) })] })) : null] })) : null] }));
9
+ }
10
+ //# sourceMappingURL=WidgetsLibraryNotices.js.map