@jini-ai/admin 0.3.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +71 -37
  3. package/dist/agent-plugins/adapters/http.d.ts +7 -0
  4. package/dist/agent-plugins/adapters/http.js +15 -0
  5. package/dist/agent-plugins/adapters/memory.d.ts +8 -0
  6. package/dist/agent-plugins/adapters/memory.js +25 -0
  7. package/dist/agent-plugins/agent-plugins.module.d.ts +51 -0
  8. package/dist/agent-plugins/agent-plugins.module.js +6 -0
  9. package/dist/agent-plugins/conformance/agent-plugins-api.conformance.d.ts +12 -0
  10. package/dist/agent-plugins/conformance/agent-plugins-api.conformance.js +47 -0
  11. package/dist/agent-plugins/controllers/agent-plugin-files.controller.d.ts +20 -0
  12. package/dist/agent-plugins/controllers/agent-plugin-files.controller.js +43 -0
  13. package/dist/agent-plugins/controllers/agent-plugins.controller.d.ts +25 -0
  14. package/dist/agent-plugins/controllers/agent-plugins.controller.js +91 -0
  15. package/dist/agent-plugins/index.d.ts +9 -0
  16. package/dist/agent-plugins/index.js +9 -0
  17. package/dist/agent-plugins/messages.en.d.ts +23 -0
  18. package/dist/agent-plugins/messages.en.js +14 -0
  19. package/dist/agent-plugins/models.d.ts +57 -0
  20. package/dist/agent-plugins/models.js +2 -0
  21. package/dist/agent-plugins/package-file-tree.d.ts +111 -0
  22. package/dist/agent-plugins/package-file-tree.js +188 -0
  23. package/dist/agent-plugins/ports.d.ts +18 -0
  24. package/dist/agent-plugins/ports.js +3 -0
  25. package/dist/agent-plugins/react/components/AgentPluginFileContent.d.ts +5 -0
  26. package/dist/agent-plugins/react/components/AgentPluginFileContent.js +9 -0
  27. package/dist/agent-plugins/react/components/AgentPluginFileTree.d.ts +9 -0
  28. package/dist/agent-plugins/react/components/AgentPluginFileTree.js +7 -0
  29. package/dist/agent-plugins/react/components/AgentPluginInspector.d.ts +3 -0
  30. package/dist/agent-plugins/react/components/AgentPluginInspector.js +11 -0
  31. package/dist/agent-plugins/react/components/AgentPluginListPanel.d.ts +6 -0
  32. package/dist/agent-plugins/react/components/AgentPluginListPanel.js +10 -0
  33. package/dist/agent-plugins/react/components/AgentPluginRow.d.ts +5 -0
  34. package/dist/agent-plugins/react/components/AgentPluginRow.js +8 -0
  35. package/dist/agent-plugins/react/hooks/AgentPluginInspector.hooks.d.ts +90 -0
  36. package/dist/agent-plugins/react/hooks/AgentPluginInspector.hooks.js +74 -0
  37. package/dist/agent-plugins/react/hooks/AgentPluginPanel.hooks.d.ts +67 -0
  38. package/dist/agent-plugins/react/hooks/AgentPluginPanel.hooks.js +50 -0
  39. package/dist/agent-plugins/react/hooks/AgentPluginRow.hooks.d.ts +55 -0
  40. package/dist/agent-plugins/react/hooks/AgentPluginRow.hooks.js +6 -0
  41. package/dist/agent-plugins/react/hooks/AgentPluginsPage.hooks.d.ts +64 -0
  42. package/dist/agent-plugins/react/hooks/AgentPluginsPage.hooks.js +39 -0
  43. package/dist/agent-plugins/react/hooks/AgentPluginsPorts.hooks.d.ts +7 -0
  44. package/dist/agent-plugins/react/hooks/AgentPluginsPorts.hooks.js +10 -0
  45. package/dist/agent-plugins/react/hooks/MarketplaceTab.hooks.d.ts +6 -0
  46. package/dist/agent-plugins/react/hooks/MarketplaceTab.hooks.js +3 -0
  47. package/dist/agent-plugins/react/index.d.ts +245 -0
  48. package/dist/agent-plugins/react/index.js +13 -0
  49. package/dist/agent-plugins/react/pages/AgentPluginsPage.d.ts +4 -0
  50. package/dist/agent-plugins/react/pages/AgentPluginsPage.js +12 -0
  51. package/dist/agent-plugins/react/tabs/DownloadedTab.d.ts +4 -0
  52. package/dist/agent-plugins/react/tabs/DownloadedTab.js +5 -0
  53. package/dist/agent-plugins/react/tabs/InstalledTab.d.ts +4 -0
  54. package/dist/agent-plugins/react/tabs/InstalledTab.js +5 -0
  55. package/dist/agent-plugins/react/tabs/MarketplaceTab.d.ts +4 -0
  56. package/dist/agent-plugins/react/tabs/MarketplaceTab.js +10 -0
  57. package/dist/agent-plugins/rules.d.ts +33 -0
  58. package/dist/agent-plugins/rules.js +51 -0
  59. package/dist/browser/index.d.ts +1 -0
  60. package/dist/browser/index.js +1 -0
  61. package/dist/browser/navigation.d.ts +19 -4
  62. package/dist/browser/navigation.js +8 -8
  63. package/dist/browser/shell-navigation.d.ts +12 -0
  64. package/dist/browser/shell-navigation.js +16 -0
  65. package/dist/contracts/credential-management.d.ts +8 -0
  66. package/dist/contracts/credential-management.js +3 -0
  67. package/dist/contracts/media-picker.d.ts +17 -0
  68. package/dist/contracts/media-picker.js +5 -0
  69. package/dist/contracts/playground-render-target.d.ts +18 -0
  70. package/dist/contracts/playground-render-target.js +3 -0
  71. package/dist/core/entities/rules.d.ts +138 -0
  72. package/dist/core/entities/rules.js +344 -0
  73. package/dist/core/gated/types.d.ts +8 -4
  74. package/dist/core/index.d.ts +4 -0
  75. package/dist/core/index.js +1 -0
  76. package/dist/core/manifest/rules.d.ts +24 -6
  77. package/dist/core/manifest/rules.js +12 -11
  78. package/dist/core/module/controller-store.d.ts +22 -0
  79. package/dist/core/module/controller-store.js +32 -0
  80. package/dist/core/module/create-admin.d.ts +41 -0
  81. package/dist/core/module/create-admin.js +187 -0
  82. package/dist/core/module/define-admin-module.d.ts +4 -0
  83. package/dist/core/module/define-admin-module.js +5 -0
  84. package/dist/core/module/index.d.ts +7 -0
  85. package/dist/core/module/index.js +4 -0
  86. package/dist/core/module/token.d.ts +19 -0
  87. package/dist/core/module/token.js +4 -0
  88. package/dist/core/module/types.d.ts +79 -0
  89. package/dist/core/module/types.js +2 -0
  90. package/dist/core/permissions/rules.d.ts +4 -1
  91. package/dist/core/permissions/rules.js +1 -1
  92. package/dist/core/ports/analytics.d.ts +1 -1
  93. package/dist/core/ports/auth.d.ts +2 -2
  94. package/dist/core/ports/comments.d.ts +9 -6
  95. package/dist/core/ports/database.d.ts +13 -10
  96. package/dist/core/ports/entities.d.ts +302 -0
  97. package/dist/core/ports/entities.js +47 -0
  98. package/dist/core/ports/forms.d.ts +19 -7
  99. package/dist/core/ports/identity.d.ts +42 -17
  100. package/dist/core/ports/index.d.ts +2 -0
  101. package/dist/core/ports/integrations.d.ts +9 -4
  102. package/dist/core/ports/media.d.ts +16 -7
  103. package/dist/core/ports/members.d.ts +7 -3
  104. package/dist/core/ports/menus.d.ts +43 -0
  105. package/dist/core/ports/menus.js +43 -0
  106. package/dist/core/ports/plugins.d.ts +3 -2
  107. package/dist/core/ports/recovery.d.ts +10 -6
  108. package/dist/core/ports/redirects.d.ts +17 -7
  109. package/dist/core/ports/seo.d.ts +12 -6
  110. package/dist/core/ports/shell.d.ts +41 -0
  111. package/dist/core/ports/shell.js +2 -0
  112. package/dist/core/ports/workspace.d.ts +3 -3
  113. package/dist/core/routing/rules.d.ts +17 -4
  114. package/dist/core/routing/rules.js +4 -4
  115. package/dist/core/transport/errors.d.ts +13 -4
  116. package/dist/core/transport/errors.js +4 -4
  117. package/dist/core/transport/http.d.ts +26 -16
  118. package/dist/core/transport/http.js +59 -21
  119. package/dist/core/transport/types.d.ts +26 -14
  120. package/dist/core/transport/types.js +9 -7
  121. package/dist/media/adapters/http.d.ts +27 -0
  122. package/dist/media/adapters/http.js +44 -0
  123. package/dist/media/adapters/memory.d.ts +11 -0
  124. package/dist/media/adapters/memory.js +139 -0
  125. package/dist/media/conformance/media-api.conformance.d.ts +7 -0
  126. package/dist/media/conformance/media-api.conformance.js +69 -0
  127. package/dist/media/controllers/edit-media.controller.d.ts +24 -0
  128. package/dist/media/controllers/edit-media.controller.js +69 -0
  129. package/dist/media/controllers/library.controller.d.ts +47 -0
  130. package/dist/media/controllers/library.controller.js +173 -0
  131. package/dist/media/controllers/providers.controller.d.ts +30 -0
  132. package/dist/media/controllers/providers.controller.js +76 -0
  133. package/dist/media/html-attributes.d.ts +82 -0
  134. package/dist/media/html-attributes.js +204 -0
  135. package/dist/media/index.d.ts +12 -0
  136. package/dist/media/index.js +9 -0
  137. package/dist/media/media.module.d.ts +83 -0
  138. package/dist/media/media.module.js +43 -0
  139. package/dist/media/messages.en.d.ts +24 -0
  140. package/dist/media/messages.en.js +24 -0
  141. package/dist/media/models.d.ts +72 -0
  142. package/dist/media/models.js +2 -0
  143. package/dist/media/ports.d.ts +75 -0
  144. package/dist/media/ports.js +7 -0
  145. package/dist/media/react/components/EditMediaPanel.d.ts +3 -0
  146. package/dist/media/react/components/EditMediaPanel.js +10 -0
  147. package/dist/media/react/components/MediaCard.d.ts +5 -0
  148. package/dist/media/react/components/MediaCard.js +17 -0
  149. package/dist/media/react/components/MediaDialog.d.ts +3 -0
  150. package/dist/media/react/components/MediaDialog.js +8 -0
  151. package/dist/media/react/components/MediaGrid.d.ts +4 -0
  152. package/dist/media/react/components/MediaGrid.js +8 -0
  153. package/dist/media/react/components/MediaIcons.d.ts +14 -0
  154. package/dist/media/react/components/MediaIcons.js +39 -0
  155. package/dist/media/react/components/MediaLightbox.d.ts +5 -0
  156. package/dist/media/react/components/MediaLightbox.js +12 -0
  157. package/dist/media/react/components/MediaPicker.d.ts +3 -0
  158. package/dist/media/react/components/MediaPicker.js +10 -0
  159. package/dist/media/react/components/MediaPurgeDialog.d.ts +4 -0
  160. package/dist/media/react/components/MediaPurgeDialog.js +9 -0
  161. package/dist/media/react/components/UploadButton.d.ts +3 -0
  162. package/dist/media/react/components/UploadButton.js +8 -0
  163. package/dist/media/react/hooks/EditMediaPanel.hooks.d.ts +84 -0
  164. package/dist/media/react/hooks/EditMediaPanel.hooks.js +105 -0
  165. package/dist/media/react/hooks/LibraryTab.hooks.d.ts +103 -0
  166. package/dist/media/react/hooks/LibraryTab.hooks.js +164 -0
  167. package/dist/media/react/hooks/MediaCard.hooks.d.ts +79 -0
  168. package/dist/media/react/hooks/MediaCard.hooks.js +63 -0
  169. package/dist/media/react/hooks/MediaDialog.hooks.d.ts +10 -0
  170. package/dist/media/react/hooks/MediaDialog.hooks.js +20 -0
  171. package/dist/media/react/hooks/MediaGrid.hooks.d.ts +28 -0
  172. package/dist/media/react/hooks/MediaGrid.hooks.js +6 -0
  173. package/dist/media/react/hooks/MediaLightbox.hooks.d.ts +27 -0
  174. package/dist/media/react/hooks/MediaLightbox.hooks.js +64 -0
  175. package/dist/media/react/hooks/MediaPage.hooks.d.ts +68 -0
  176. package/dist/media/react/hooks/MediaPage.hooks.js +68 -0
  177. package/dist/media/react/hooks/MediaPicker.hooks.d.ts +26 -0
  178. package/dist/media/react/hooks/MediaPicker.hooks.js +25 -0
  179. package/dist/media/react/hooks/MediaPorts.hooks.d.ts +9 -0
  180. package/dist/media/react/hooks/MediaPorts.hooks.js +10 -0
  181. package/dist/media/react/hooks/MediaPurgeDialog.hooks.d.ts +22 -0
  182. package/dist/media/react/hooks/MediaPurgeDialog.hooks.js +6 -0
  183. package/dist/media/react/hooks/ProvidersTab.hooks.d.ts +55 -0
  184. package/dist/media/react/hooks/ProvidersTab.hooks.js +124 -0
  185. package/dist/media/react/hooks/UploadButton.hooks.d.ts +48 -0
  186. package/dist/media/react/hooks/UploadButton.hooks.js +118 -0
  187. package/dist/media/react/index.d.ts +373 -0
  188. package/dist/media/react/index.js +73 -0
  189. package/dist/media/react/pages/MediaPage.d.ts +4 -0
  190. package/dist/media/react/pages/MediaPage.js +9 -0
  191. package/dist/media/react/tabs/LibraryTab.d.ts +4 -0
  192. package/dist/media/react/tabs/LibraryTab.js +14 -0
  193. package/dist/media/react/tabs/ProvidersTab.d.ts +4 -0
  194. package/dist/media/react/tabs/ProvidersTab.js +10 -0
  195. package/dist/media/rules.d.ts +80 -0
  196. package/dist/media/rules.js +127 -0
  197. package/dist/media/styles.d.ts +4 -0
  198. package/dist/media/styles.js +5 -0
  199. package/dist/playground/adapters/http.d.ts +8 -0
  200. package/dist/playground/adapters/http.js +4 -0
  201. package/dist/playground/adapters/memory.d.ts +10 -0
  202. package/dist/playground/adapters/memory.js +30 -0
  203. package/dist/playground/conformance/playground-api.conformance.d.ts +6 -0
  204. package/dist/playground/conformance/playground-api.conformance.js +37 -0
  205. package/dist/playground/controllers/playground.controller.d.ts +16 -0
  206. package/dist/playground/controllers/playground.controller.js +21 -0
  207. package/dist/playground/index.d.ts +7 -0
  208. package/dist/playground/index.js +5 -0
  209. package/dist/playground/messages.en.d.ts +9 -0
  210. package/dist/playground/messages.en.js +2 -0
  211. package/dist/playground/models.d.ts +4 -0
  212. package/dist/playground/models.js +2 -0
  213. package/dist/playground/playground.module.d.ts +31 -0
  214. package/dist/playground/playground.module.js +5 -0
  215. package/dist/playground/ports.d.ts +5 -0
  216. package/dist/playground/ports.js +2 -0
  217. package/dist/playground/react/components/Canvas.d.ts +3 -0
  218. package/dist/playground/react/components/Canvas.js +9 -0
  219. package/dist/playground/react/hooks/Canvas.hooks.d.ts +7 -0
  220. package/dist/playground/react/hooks/Canvas.hooks.js +18 -0
  221. package/dist/playground/react/hooks/PlaygroundPage.hooks.d.ts +8 -0
  222. package/dist/playground/react/hooks/PlaygroundPage.hooks.js +2 -0
  223. package/dist/playground/react/hooks/PlaygroundPorts.hooks.d.ts +4 -0
  224. package/dist/playground/react/hooks/PlaygroundPorts.hooks.js +6 -0
  225. package/dist/playground/react/index.d.ts +136 -0
  226. package/dist/playground/react/index.js +10 -0
  227. package/dist/playground/react/pages/PlaygroundPage.d.ts +4 -0
  228. package/dist/playground/react/pages/PlaygroundPage.js +11 -0
  229. package/dist/playground/react/tabs/CanvasTab.d.ts +4 -0
  230. package/dist/playground/react/tabs/CanvasTab.js +5 -0
  231. package/dist/playground/rules.d.ts +4 -0
  232. package/dist/playground/rules.js +2 -0
  233. package/dist/react/OverlayHost.d.ts +3 -0
  234. package/dist/react/OverlayHost.hooks.d.ts +9 -0
  235. package/dist/react/OverlayHost.hooks.js +9 -0
  236. package/dist/react/OverlayHost.js +7 -0
  237. package/dist/react/bind-react.d.ts +46 -0
  238. package/dist/react/bind-react.js +28 -0
  239. package/dist/react/components/ConfirmButton/ConfirmButton.hooks.d.ts +7 -1
  240. package/dist/react/components/ConfirmButton/ConfirmButton.hooks.js +2 -2
  241. package/dist/react/components/ConfirmButton/ConfirmButton.js +1 -1
  242. package/dist/react/components/ConfirmDialog/ConfirmDialog.d.ts +15 -3
  243. package/dist/react/components/ConfirmDialog/ConfirmDialog.hooks.d.ts +17 -3
  244. package/dist/react/components/ConfirmDialog/ConfirmDialog.hooks.js +3 -3
  245. package/dist/react/components/ConfirmDialog/ConfirmDialog.js +6 -6
  246. package/dist/react/components/InteractiveHtmlEditor/InteractiveHtmlEditor.d.ts +6 -2
  247. package/dist/react/components/InteractiveHtmlEditor/InteractiveHtmlEditor.js +7 -8
  248. package/dist/react/components/RowMenu/RowMenu.d.ts +5 -1
  249. package/dist/react/components/RowMenu/RowMenu.hooks.d.ts +8 -2
  250. package/dist/react/components/RowMenu/RowMenu.hooks.js +4 -4
  251. package/dist/react/components/RowMenu/RowMenu.js +6 -6
  252. package/dist/react/components/Sidebar.d.ts +1 -1
  253. package/dist/react/components/Sidebar.js +103 -7
  254. package/dist/react/entities/EntityCell.d.ts +10 -0
  255. package/dist/react/entities/EntityCell.js +18 -0
  256. package/dist/react/entities/EntityDetail.d.ts +3 -0
  257. package/dist/react/entities/EntityDetail.js +21 -0
  258. package/dist/react/entities/EntityEdit.d.ts +13 -0
  259. package/dist/react/entities/EntityEdit.js +45 -0
  260. package/dist/react/entities/EntityField.d.ts +20 -0
  261. package/dist/react/entities/EntityField.js +31 -0
  262. package/dist/react/entities/EntityIndex.d.ts +3 -0
  263. package/dist/react/entities/EntityIndex.js +10 -0
  264. package/dist/react/entities/EntityList.d.ts +7 -0
  265. package/dist/react/entities/EntityList.js +52 -0
  266. package/dist/react/entities/contribution.d.ts +26 -0
  267. package/dist/react/entities/contribution.js +78 -0
  268. package/dist/react/entities/index.d.ts +10 -0
  269. package/dist/react/entities/index.js +7 -0
  270. package/dist/react/entities/rules.d.ts +179 -0
  271. package/dist/react/entities/rules.js +224 -0
  272. package/dist/react/entities/types.d.ts +45 -0
  273. package/dist/react/entities/types.js +5 -0
  274. package/dist/react/entities/use-entity-edit.d.ts +35 -0
  275. package/dist/react/entities/use-entity-edit.js +98 -0
  276. package/dist/react/entities/use-entity-read.d.ts +22 -0
  277. package/dist/react/entities/use-entity-read.js +27 -0
  278. package/dist/react/hooks/use-nav-sections.d.ts +12 -3
  279. package/dist/react/hooks/use-nav-sections.js +14 -14
  280. package/dist/react/hooks/use-sidebar-rail.d.ts +7 -1
  281. package/dist/react/hooks/use-sidebar-rail.js +11 -11
  282. package/dist/react/index.d.ts +3 -1
  283. package/dist/react/index.js +5 -2
  284. package/dist/react/kit/Kit.hooks.d.ts +13 -0
  285. package/dist/react/kit/Kit.hooks.js +10 -0
  286. package/dist/react/kit/Native.hooks.d.ts +38 -0
  287. package/dist/react/kit/Native.hooks.js +65 -0
  288. package/dist/react/kit/index.d.ts +12 -0
  289. package/dist/react/kit/index.js +21 -0
  290. package/dist/react/kit/native.d.ts +3 -0
  291. package/dist/react/kit/native.js +21 -0
  292. package/dist/react/kit/types.d.ts +40 -0
  293. package/dist/react/kit/types.js +2 -0
  294. package/dist/react/overlay.d.ts +36 -0
  295. package/dist/react/overlay.js +35 -0
  296. package/dist/react/overlays.d.ts +38 -0
  297. package/dist/react/overlays.js +46 -0
  298. package/dist/react/shell/AdminShell.d.ts +9 -0
  299. package/dist/react/shell/AdminShell.hooks.d.ts +15 -0
  300. package/dist/react/shell/AdminShell.hooks.js +27 -0
  301. package/dist/react/shell/AdminShell.js +46 -0
  302. package/dist/react/shell/index.d.ts +7 -0
  303. package/dist/react/shell/index.js +5 -0
  304. package/dist/react/shell/model.d.ts +25 -0
  305. package/dist/react/shell/model.js +29 -0
  306. package/dist/react/shell/theme-ports.d.ts +28 -0
  307. package/dist/react/shell/theme-ports.js +2 -0
  308. package/dist/react/shell/types.d.ts +99 -0
  309. package/dist/react/shell/types.js +2 -0
  310. package/dist/react/shell/use-admin-shell-session.d.ts +13 -0
  311. package/dist/react/shell/use-admin-shell-session.js +81 -0
  312. package/dist/react/shell/use-admin-theme.d.ts +16 -0
  313. package/dist/react/shell/use-admin-theme.js +57 -0
  314. package/dist/react/types.d.ts +6 -4
  315. package/dist/react/types.js +2 -2
  316. package/dist/react/use-controller.d.ts +16 -0
  317. package/dist/react/use-controller.js +18 -0
  318. package/dist/security/adapters/http.d.ts +16 -0
  319. package/dist/security/adapters/http.js +94 -0
  320. package/dist/security/adapters/memory.d.ts +15 -0
  321. package/dist/security/adapters/memory.js +60 -0
  322. package/dist/security/conformance/security-api.conformance.d.ts +10 -0
  323. package/dist/security/conformance/security-api.conformance.js +48 -0
  324. package/dist/security/controllers/access-tokens.controller.d.ts +44 -0
  325. package/dist/security/controllers/access-tokens.controller.js +112 -0
  326. package/dist/security/controllers/other-credentials.controller.d.ts +30 -0
  327. package/dist/security/controllers/other-credentials.controller.js +74 -0
  328. package/dist/security/controllers/root-key.controller.d.ts +35 -0
  329. package/dist/security/controllers/root-key.controller.js +90 -0
  330. package/dist/security/index.d.ts +9 -0
  331. package/dist/security/index.js +9 -0
  332. package/dist/security/messages.en.d.ts +12 -0
  333. package/dist/security/messages.en.js +2 -0
  334. package/dist/security/models.d.ts +112 -0
  335. package/dist/security/models.js +2 -0
  336. package/dist/security/ports.d.ts +58 -0
  337. package/dist/security/ports.js +5 -0
  338. package/dist/security/react/components/CredentialEditor.d.ts +3 -0
  339. package/dist/security/react/components/CredentialEditor.js +8 -0
  340. package/dist/security/react/hooks/AccessTokensTab.hooks.d.ts +94 -0
  341. package/dist/security/react/hooks/AccessTokensTab.hooks.js +36 -0
  342. package/dist/security/react/hooks/CredentialEditor.hooks.d.ts +49 -0
  343. package/dist/security/react/hooks/CredentialEditor.hooks.js +14 -0
  344. package/dist/security/react/hooks/RootKeyTab.hooks.d.ts +29 -0
  345. package/dist/security/react/hooks/RootKeyTab.hooks.js +19 -0
  346. package/dist/security/react/hooks/SecurityPage.hooks.d.ts +17 -0
  347. package/dist/security/react/hooks/SecurityPage.hooks.js +12 -0
  348. package/dist/security/react/hooks/SecurityPorts.hooks.d.ts +9 -0
  349. package/dist/security/react/hooks/SecurityPorts.hooks.js +6 -0
  350. package/dist/security/react/index.d.ts +215 -0
  351. package/dist/security/react/index.js +10 -0
  352. package/dist/security/react/pages/SecurityPage.d.ts +4 -0
  353. package/dist/security/react/pages/SecurityPage.js +10 -0
  354. package/dist/security/react/tabs/AccessTokensTab.d.ts +4 -0
  355. package/dist/security/react/tabs/AccessTokensTab.js +10 -0
  356. package/dist/security/react/tabs/RootKeyTab.d.ts +4 -0
  357. package/dist/security/react/tabs/RootKeyTab.js +9 -0
  358. package/dist/security/rules.d.ts +57 -0
  359. package/dist/security/rules.js +63 -0
  360. package/dist/security/security.module.d.ts +45 -0
  361. package/dist/security/security.module.js +5 -0
  362. package/dist/source-control/adapters/http.d.ts +6 -0
  363. package/dist/source-control/adapters/http.js +13 -0
  364. package/dist/source-control/adapters/memory.d.ts +9 -0
  365. package/dist/source-control/adapters/memory.js +35 -0
  366. package/dist/source-control/conformance/source-control-api.conformance.d.ts +10 -0
  367. package/dist/source-control/conformance/source-control-api.conformance.js +48 -0
  368. package/dist/source-control/controllers/source-control.controller.d.ts +26 -0
  369. package/dist/source-control/controllers/source-control.controller.js +70 -0
  370. package/dist/source-control/index.d.ts +8 -0
  371. package/dist/source-control/index.js +6 -0
  372. package/dist/source-control/messages.en.d.ts +11 -0
  373. package/dist/source-control/messages.en.js +2 -0
  374. package/dist/source-control/models.d.ts +70 -0
  375. package/dist/source-control/models.js +2 -0
  376. package/dist/source-control/ports.d.ts +23 -0
  377. package/dist/source-control/ports.js +3 -0
  378. package/dist/source-control/react/components/SourceControlCredentialFields.d.ts +5 -0
  379. package/dist/source-control/react/components/SourceControlCredentialFields.js +8 -0
  380. package/dist/source-control/react/components/SourceControlProviderRow.d.ts +5 -0
  381. package/dist/source-control/react/components/SourceControlProviderRow.js +7 -0
  382. package/dist/source-control/react/hooks/ProvidersTab.hooks.d.ts +45 -0
  383. package/dist/source-control/react/hooks/ProvidersTab.hooks.js +20 -0
  384. package/dist/source-control/react/hooks/SourceControlCredentialFields.hooks.d.ts +43 -0
  385. package/dist/source-control/react/hooks/SourceControlCredentialFields.hooks.js +9 -0
  386. package/dist/source-control/react/hooks/SourceControlPage.hooks.d.ts +17 -0
  387. package/dist/source-control/react/hooks/SourceControlPage.hooks.js +5 -0
  388. package/dist/source-control/react/hooks/SourceControlPorts.hooks.d.ts +9 -0
  389. package/dist/source-control/react/hooks/SourceControlPorts.hooks.js +6 -0
  390. package/dist/source-control/react/index.d.ts +156 -0
  391. package/dist/source-control/react/index.js +10 -0
  392. package/dist/source-control/react/pages/SourceControlPage.d.ts +4 -0
  393. package/dist/source-control/react/pages/SourceControlPage.js +11 -0
  394. package/dist/source-control/react/tabs/ProvidersTab.d.ts +4 -0
  395. package/dist/source-control/react/tabs/ProvidersTab.js +10 -0
  396. package/dist/source-control/rules.d.ts +32 -0
  397. package/dist/source-control/rules.js +35 -0
  398. package/dist/source-control/source-control.module.d.ts +36 -0
  399. package/dist/source-control/source-control.module.js +6 -0
  400. package/package.json +207 -4
@@ -0,0 +1,83 @@
1
+ /** "External Providers": credentials for outside media generation services belong
2
+ * beside the media they generate, not beside MCP/webhook plumbing. Last in the list —
3
+ * an operator reaches for All/Images/Videos far more often than provider credentials,
4
+ * and the three content tabs read as one group with this one set apart. */
5
+ export declare const mediaModule: {
6
+ readonly id: "media";
7
+ readonly requires: {
8
+ readonly mediaApi: import("../core/module/token.js").AdminPortToken<import("./ports.js").MediaApiPort, "admin.media.api">;
9
+ };
10
+ readonly optional: {
11
+ readonly mediaProviders: import("../core/module/token.js").AdminPortToken<import("./ports.js").MediaProvidersPort, "admin.media.providers">;
12
+ readonly mediaEvents: import("../core/module/token.js").AdminPortToken<import("./ports.js").MediaEventsPort, "admin.media.events">;
13
+ };
14
+ readonly provides: {
15
+ readonly mediaPicker: import("../core/module/token.js").AdminPortToken<import("../contracts/media-picker.js").MediaPickerPort, "admin.media.picker">;
16
+ };
17
+ readonly messages: {
18
+ readonly media: "Media";
19
+ readonly all: "All";
20
+ readonly images: "Images";
21
+ readonly videos: "Videos";
22
+ readonly providers: "External Providers";
23
+ readonly upload: "Upload";
24
+ readonly title: "Title";
25
+ readonly alt: "Alt text";
26
+ readonly save: "Save";
27
+ readonly cancel: "Cancel";
28
+ readonly empty: "No media found";
29
+ readonly loading: "Loading media…";
30
+ readonly choose: "Choose media";
31
+ readonly trash: "Trash";
32
+ readonly purge: "Delete permanently";
33
+ readonly purgeWarning: "This permanently deletes the file. This cannot be undone.";
34
+ readonly edit: "Edit metadata";
35
+ readonly preview: "View larger";
36
+ readonly replace: "Replace file";
37
+ readonly unavailable: "Provider service unavailable";
38
+ readonly untyped: "Some assets have no recorded content type and only appear under All.";
39
+ };
40
+ readonly pages: {
41
+ readonly library: {
42
+ readonly path: "/media";
43
+ readonly label: "Media";
44
+ readonly permissions: readonly ["media.read"];
45
+ readonly agentReachable: true;
46
+ readonly nav: {
47
+ readonly group: "content";
48
+ readonly icon: "image";
49
+ };
50
+ readonly tabs: {
51
+ readonly all: {
52
+ readonly label: "All";
53
+ readonly params: {
54
+ readonly filter: "all";
55
+ };
56
+ readonly agentReachable: true;
57
+ };
58
+ readonly images: {
59
+ readonly label: "Images";
60
+ readonly params: {
61
+ readonly filter: "images";
62
+ };
63
+ readonly agentReachable: true;
64
+ };
65
+ readonly videos: {
66
+ readonly label: "Videos";
67
+ readonly params: {
68
+ readonly filter: "videos";
69
+ };
70
+ readonly agentReachable: true;
71
+ };
72
+ readonly 'external-providers': {
73
+ readonly label: "External Providers";
74
+ readonly permissions: readonly ["media.providers"];
75
+ readonly optional: {
76
+ readonly mediaProviders: import("../core/module/token.js").AdminPortToken<import("./ports.js").MediaProvidersPort, "admin.media.providers">;
77
+ };
78
+ };
79
+ };
80
+ };
81
+ };
82
+ };
83
+ //# sourceMappingURL=media.module.d.ts.map
@@ -0,0 +1,43 @@
1
+ import { defineAdminModule } from '../core/module/index.js';
2
+ import { mediaPickerToken } from '../contracts/media-picker.js';
3
+ import { mediaApiToken, mediaProvidersToken, mediaEventsToken } from './ports.js';
4
+ import { mediaMessagesEn } from './messages.en.js';
5
+ /** "External Providers": credentials for outside media generation services belong
6
+ * beside the media they generate, not beside MCP/webhook plumbing. Last in the list —
7
+ * an operator reaches for All/Images/Videos far more often than provider credentials,
8
+ * and the three content tabs read as one group with this one set apart. */
9
+ export const mediaModule = defineAdminModule({
10
+ id: 'media',
11
+ requires: { mediaApi: mediaApiToken },
12
+ optional: { mediaProviders: mediaProvidersToken, mediaEvents: mediaEventsToken },
13
+ provides: { mediaPicker: mediaPickerToken },
14
+ messages: mediaMessagesEn,
15
+ pages: {
16
+ library: {
17
+ path: '/media',
18
+ label: mediaMessagesEn.media,
19
+ permissions: ['media.read'],
20
+ agentReachable: true,
21
+ nav: { group: 'content', icon: 'image' },
22
+ tabs: {
23
+ all: { label: mediaMessagesEn.all, params: { filter: 'all' }, agentReachable: true },
24
+ images: {
25
+ label: mediaMessagesEn.images,
26
+ params: { filter: 'images' },
27
+ agentReachable: true,
28
+ },
29
+ videos: {
30
+ label: mediaMessagesEn.videos,
31
+ params: { filter: 'videos' },
32
+ agentReachable: true,
33
+ },
34
+ 'external-providers': {
35
+ label: mediaMessagesEn.providers,
36
+ permissions: ['media.providers'],
37
+ optional: { mediaProviders: mediaProvidersToken },
38
+ },
39
+ },
40
+ },
41
+ },
42
+ });
43
+ //# sourceMappingURL=media.module.js.map
@@ -0,0 +1,24 @@
1
+ export declare const mediaMessagesEn: {
2
+ readonly media: "Media";
3
+ readonly all: "All";
4
+ readonly images: "Images";
5
+ readonly videos: "Videos";
6
+ readonly providers: "External Providers";
7
+ readonly upload: "Upload";
8
+ readonly title: "Title";
9
+ readonly alt: "Alt text";
10
+ readonly save: "Save";
11
+ readonly cancel: "Cancel";
12
+ readonly empty: "No media found";
13
+ readonly loading: "Loading media…";
14
+ readonly choose: "Choose media";
15
+ readonly trash: "Trash";
16
+ readonly purge: "Delete permanently";
17
+ readonly purgeWarning: "This permanently deletes the file. This cannot be undone.";
18
+ readonly edit: "Edit metadata";
19
+ readonly preview: "View larger";
20
+ readonly replace: "Replace file";
21
+ readonly unavailable: "Provider service unavailable";
22
+ readonly untyped: "Some assets have no recorded content type and only appear under All.";
23
+ };
24
+ //# sourceMappingURL=messages.en.d.ts.map
@@ -0,0 +1,24 @@
1
+ export const mediaMessagesEn = {
2
+ media: 'Media',
3
+ all: 'All',
4
+ images: 'Images',
5
+ videos: 'Videos',
6
+ providers: 'External Providers',
7
+ upload: 'Upload',
8
+ title: 'Title',
9
+ alt: 'Alt text',
10
+ save: 'Save',
11
+ cancel: 'Cancel',
12
+ empty: 'No media found',
13
+ loading: 'Loading media…',
14
+ choose: 'Choose media',
15
+ trash: 'Trash',
16
+ purge: 'Delete permanently',
17
+ purgeWarning: 'This permanently deletes the file. This cannot be undone.',
18
+ edit: 'Edit metadata',
19
+ preview: 'View larger',
20
+ replace: 'Replace file',
21
+ unavailable: 'Provider service unavailable',
22
+ untyped: 'Some assets have no recorded content type and only appear under All.',
23
+ };
24
+ //# sourceMappingURL=messages.en.js.map
@@ -0,0 +1,72 @@
1
+ import type { MediaAsset as PickerAsset } from '../contracts/media-picker.js';
2
+ export interface MediaAsset extends PickerAsset {
3
+ /** Optional for hosts without CMS metadata; blank dimensions mean native size, never inferred. */
4
+ readonly slug?: string;
5
+ readonly width?: number | null;
6
+ readonly height?: number | null;
7
+ readonly cssClass?: string | null;
8
+ readonly htmlAttributes?: string | null;
9
+ readonly byteSize?: number;
10
+ readonly status: 'active' | 'trashed';
11
+ readonly sha256: string;
12
+ readonly caption: string;
13
+ readonly credit: string;
14
+ readonly createdAt: string;
15
+ readonly updatedAt: string;
16
+ readonly version: number;
17
+ }
18
+ export type MediaTabId = 'all' | 'images' | 'videos' | 'external-providers';
19
+ export type MediaContentTabId = Exclude<MediaTabId, 'external-providers'>;
20
+ export type MediaOrderBy = 'created' | 'alphabetical';
21
+ export interface MediaQuery {
22
+ /** All retains the legacy mixed library; Trash is an explicit status filter. */
23
+ readonly status?: 'active' | 'trashed';
24
+ readonly filter?: MediaContentTabId;
25
+ readonly search?: string;
26
+ readonly orderBy?: MediaOrderBy;
27
+ }
28
+ export interface UploadInput {
29
+ readonly filename: string;
30
+ readonly contentType: string;
31
+ readonly dataBase64: string;
32
+ }
33
+ export interface MediaMetadataPatch {
34
+ /** Independent of title; clearing a title must never rewrite a readable reference. */
35
+ readonly slug?: string;
36
+ readonly width?: number | null;
37
+ readonly height?: number | null;
38
+ readonly cssClass?: string | null;
39
+ readonly htmlAttributes?: string | null;
40
+ readonly title?: string;
41
+ readonly alt?: string;
42
+ readonly caption?: string;
43
+ readonly credit?: string;
44
+ }
45
+ export interface MediaRequestOptions {
46
+ readonly signal?: AbortSignal;
47
+ }
48
+ export interface MediaProvider {
49
+ readonly id: string;
50
+ readonly label: string;
51
+ readonly configured: boolean;
52
+ readonly baseUrl?: string;
53
+ readonly model?: string;
54
+ /** A display-only tail, never recoverable credential material. */
55
+ readonly apiKeyTail?: string;
56
+ }
57
+ export interface MediaProviderOption {
58
+ readonly id: string;
59
+ readonly label: string;
60
+ readonly defaultBaseUrl?: string;
61
+ readonly models?: readonly string[];
62
+ }
63
+ /** Only operator-entered keys travel to the host; reads return markers and tails. */
64
+ export interface MediaProviderConfiguration {
65
+ apiKey?: string;
66
+ apiKeyConfigured?: boolean;
67
+ apiKeyTail?: string;
68
+ baseUrl?: string;
69
+ model?: string;
70
+ }
71
+ export type MediaProviderConfigurationMap = Record<string, MediaProviderConfiguration>;
72
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1,75 @@
1
+ import type { MediaAsset, MediaQuery, UploadInput, MediaMetadataPatch, MediaRequestOptions, MediaProvider, MediaProviderOption, MediaProviderConfigurationMap } from './models.js';
2
+ /** One shared port rather than one per hook — all three hooks read/write the same
3
+ * resource, and a test double for one is a test double for the resource, not for a single screen.
4
+ * Every synchronous URL builder goes through its consumer's port uniformly, so a test can
5
+ * prove a URL came from the injected port rather than the consumer calling the client itself. */
6
+ export interface MediaApiPort {
7
+ readonly replaceSupported?: boolean;
8
+ readonly restoreSupported?: boolean;
9
+ list(required: MediaQuery, optional?: MediaRequestOptions): Promise<readonly MediaAsset[]>;
10
+ upload(required: UploadInput, optional?: MediaRequestOptions & MediaMetadataPatch): Promise<MediaAsset>;
11
+ update(required: {
12
+ id: string;
13
+ patch: MediaMetadataPatch;
14
+ }, optional?: MediaRequestOptions): Promise<MediaAsset>;
15
+ /** Optional: replacement preserves identity and references; never upload then trash. */
16
+ replace?(required: {
17
+ id: string;
18
+ upload: UploadInput;
19
+ }, optional?: MediaRequestOptions): Promise<MediaAsset>;
20
+ trash(required: {
21
+ id: string;
22
+ }, optional?: MediaRequestOptions): Promise<MediaAsset>;
23
+ /** Optional reversible recovery. Absence or explicit disable must hide the action. */
24
+ restore?(required: {
25
+ id: string;
26
+ }, optional?: MediaRequestOptions): Promise<MediaAsset>;
27
+ /** Genuine irreversible purge; requires a previously trashed asset. No undo affordance. */
28
+ delete(required: {
29
+ id: string;
30
+ }, optional?: MediaRequestOptions): Promise<{
31
+ purged: boolean;
32
+ }>;
33
+ originalUrl(required: {
34
+ id: string;
35
+ version?: number;
36
+ }, optional?: Record<string, never>): string;
37
+ }
38
+ export interface MediaProvidersPort {
39
+ /** Host-owned vendor metadata, available even when the credential service is unreachable. */
40
+ readonly catalog?: readonly MediaProviderOption[];
41
+ readonly pinnedProviderIds?: readonly string[];
42
+ /** One serialized whole-set save. Omission removes an entry; blank keys retain stored keys.
43
+ * Hosts preserve providers outside their catalog and return only public markers. */
44
+ saveChanges?(required: {
45
+ providers: MediaProviderConfigurationMap;
46
+ }, optional?: MediaRequestOptions): Promise<readonly MediaProvider[]>;
47
+ /** null leaves local edits untouched, while [] is a real answer that can legitimately
48
+ * drop stale local markers. Collapsing an unreachable server to [] would make a transient
49
+ * network blip read as "the server manages nothing" and wipe edits only null protects. */
50
+ list(required: Record<string, never>, optional?: MediaRequestOptions): Promise<readonly MediaProvider[] | null>;
51
+ /** Optional endpoint/model configuration, without credential material. */
52
+ saveSettings?(required: {
53
+ id: string;
54
+ baseUrl: string;
55
+ model: string;
56
+ }, optional?: MediaRequestOptions): Promise<MediaProvider>;
57
+ /** Never returns secrets. The server owns credential storage, validation and authorization. */
58
+ saveCredential(required: {
59
+ id: string;
60
+ credential: string;
61
+ }, optional?: MediaRequestOptions): Promise<MediaProvider>;
62
+ removeCredential(required: {
63
+ id: string;
64
+ }, optional?: MediaRequestOptions): Promise<MediaProvider>;
65
+ }
66
+ export declare const mediaApiToken: import("../core/module/token.js").AdminPortToken<MediaApiPort, "admin.media.api">;
67
+ export declare const mediaProvidersToken: import("../core/module/token.js").AdminPortToken<MediaProvidersPort, "admin.media.providers">;
68
+ /** A host refresh carries no rows; the controller rereads through its own authorized API. */
69
+ export interface MediaEventsPort {
70
+ subscribe(required: {
71
+ onRefresh: () => void;
72
+ }, optional?: Record<string, never>): () => void;
73
+ }
74
+ export declare const mediaEventsToken: import("../core/module/token.js").AdminPortToken<MediaEventsPort, "admin.media.events">;
75
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { adminPort } from '../core/module/token.js';
2
+ export const mediaApiToken = adminPort({ id: 'admin.media.api' });
3
+ export const mediaProvidersToken = adminPort({
4
+ id: 'admin.media.providers',
5
+ });
6
+ export const mediaEventsToken = adminPort({ id: 'admin.media.events' });
7
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1,3 @@
1
+ import type { EditMediaPanelProps } from '../hooks/EditMediaPanel.hooks.js';
2
+ export declare function EditMediaPanel(props: EditMediaPanelProps, _optional?: Record<string, never>): import("react").JSX.Element;
3
+ //# sourceMappingURL=EditMediaPanel.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MediaDialog } from './MediaDialog.js';
3
+ import { Button, TextField } from '@jini-ai/ui-kit/react';
4
+ import { useEditMediaPanel } from '../hooks/EditMediaPanel.hooks.js';
5
+ import { UploadButton } from './UploadButton.js';
6
+ export function EditMediaPanel(props, _optional = {}) {
7
+ const vm = useEditMediaPanel(props);
8
+ return (_jsx(MediaDialog, { className: "jini-media-edit-dialog", attrs: { 'data-jini-part': 'media.editor', 'data-agent-element': 'media-edit-dialog' }, title: vm.title, open: true, onClose: vm.close, pending: vm.saving, children: _jsxs("section", { className: "jini-media-edit-modal-body", "data-agent-element": "media-edit-panel", children: [_jsx("div", { className: "jini-field-group", children: vm.fieldRows.map(row => _jsx("div", { className: row.className, children: row.fields.map(field => _jsx(TextField, { ...field, disabled: vm.saving }, field.fieldId)) }, row.id)) }), vm.hint && _jsx("p", { className: "jini-field-error", role: "status", children: vm.hint }), vm.copies.map(row => _jsxs("div", { className: "jini-field", "data-jini-part": "media.editor.reference", children: [_jsx("span", { className: "jini-field-label", children: row.label }), _jsxs("div", { className: "jini-field-readonly-row", children: [row.isLink ? _jsx("a", { className: "jini-field-mono jini-field-readonly", href: row.value, target: "_blank", rel: "noreferrer", children: row.value }) : _jsx("code", { className: "jini-field-mono jini-field-readonly", children: row.value }), _jsx(Button, { variant: "ghost", attrs: row.attrs, onPress: row.copy, children: row.buttonLabel })] })] }, row.id)), vm.canReplace && _jsx("div", { className: "jini-media-replace-controls", "data-jini-part": "media.editor.replace", children: _jsx(UploadButton, { multiple: false, label: "Replace file", upload: vm.replace, withAlt: false, disabled: vm.saving }) }), vm.snapshot?.error && _jsx("p", { className: "jini-save-error", role: "alert", children: vm.snapshot.error }), _jsxs("div", { className: "jini-editor-actions", "data-jini-part": "media.actions", children: [_jsx(Button, { attrs: { 'data-jini-part': 'media.editor.save', 'data-agent-element': 'media-edit-save' }, onPress: vm.onSave, pending: vm.saving, children: "Save" }), _jsx(Button, { variant: "secondary", attrs: { 'data-jini-part': 'media.editor.cancel', 'data-agent-element': 'media-edit-cancel' }, onPress: vm.close, disabled: vm.saving, children: "Cancel" })] })] }) }));
9
+ }
10
+ //# sourceMappingURL=EditMediaPanel.js.map
@@ -0,0 +1,5 @@
1
+ import type { MediaCardProps } from '../hooks/MediaCard.hooks.js';
2
+ /** The lightbox uses the same fallback chain without the grid's metadata and actions. */
3
+ export declare function MediaPreview(props: MediaCardProps, _optional?: Record<string, never>): import("react").JSX.Element;
4
+ export declare function MediaCard(props: MediaCardProps, _optional?: Record<string, never>): import("react").JSX.Element;
5
+ //# sourceMappingURL=MediaCard.d.ts.map
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Badge, Button, Menu } from '@jini-ai/ui-kit/react';
3
+ import { useMediaCard } from '../hooks/MediaCard.hooks.js';
4
+ import { EyeIcon, ExpandIcon, DocumentIcon } from './MediaIcons.js';
5
+ function PreviewMarkup(vm, _optional = {}) {
6
+ return _jsxs(_Fragment, { children: [vm.image ? (vm.imagePreview ? _jsxs(Button, { className: "jini-media-card-expand jini-media-card-expand-fill", variant: "ghost", attrs: vm.previewAttrs, onPress: vm.preview, children: [_jsx("img", { className: "jini-media-card-media", src: vm.src, alt: vm.alt, loading: "lazy", onError: vm.onImageError }), _jsx(ExpandIcon, {})] }) : _jsx("img", { className: "jini-media-card-media", src: vm.src, alt: vm.alt, loading: "lazy", onError: vm.onImageError })) : vm.video ? (_jsx("video", { className: "jini-media-card-media", src: vm.src, controls: true, preload: "metadata", "aria-label": vm.alt, onError: vm.onVideoError })) : (_jsxs("div", { className: "jini-media-card-placeholder", children: [_jsx(DocumentIcon, {}), _jsx("p", { className: "jini-media-card-placeholder-text", children: "Preview not available" }), vm.src && _jsx("a", { className: "jini-media-card-placeholder-link", href: vm.src, target: "_blank", rel: "noreferrer", children: "Download original" })] })), vm.onEdit && _jsxs(Button, { className: "jini-media-card-edit", variant: "ghost", attrs: vm.editAttrs, onPress: vm.onEdit, disabled: vm.busy, children: [_jsx(EyeIcon, {}), _jsx("span", { className: "jini-visually-hidden", children: "Edit metadata" })] }), vm.canPreview && !vm.imagePreview && _jsxs(Button, { className: "jini-media-card-expand", variant: "ghost", attrs: vm.previewAttrs, onPress: vm.preview, children: [_jsx(ExpandIcon, {}), _jsx("span", { className: "jini-visually-hidden", children: "View larger" })] })] });
7
+ }
8
+ /** The lightbox uses the same fallback chain without the grid's metadata and actions. */
9
+ export function MediaPreview(props, _optional = {}) {
10
+ const vm = useMediaCard(props);
11
+ return _jsx(PreviewMarkup, { ...vm });
12
+ }
13
+ export function MediaCard(props, _optional = {}) {
14
+ const vm = useMediaCard(props);
15
+ return _jsxs("article", { className: "jini-media-card", "data-jini-part": "media.card", "data-media-id": vm.item.id, tabIndex: -1, children: [_jsx("div", { className: "jini-media-card-preview", "data-jini-part": "media.preview.frame", children: _jsx(PreviewMarkup, { ...vm }) }), _jsxs("div", { className: "jini-media-card-body", children: [_jsx("h3", { className: "jini-media-card-title", title: vm.item.title, children: vm.item.title }), _jsxs("div", { className: "jini-media-card-meta", children: [_jsx(Badge, { className: vm.statusClassName, attrs: { 'data-jini-part': 'media.status' }, tone: vm.statusTone, children: vm.statusLabel }), vm.menuItems.length > 0 && _jsx(Menu, { label: vm.menuLabel, attrs: vm.menuAttrs, items: vm.menuItems, disabled: vm.busy })] }), vm.byteSize && _jsx("p", { className: "jini-media-card-size", hidden: true, children: vm.byteSize }), vm.onChoose && _jsx(Button, { attrs: { 'data-jini-part': 'media.choose', 'data-agent-element': `media-choose-${vm.item.id}` }, onPress: vm.onChoose, children: "Choose" })] })] });
16
+ }
17
+ //# sourceMappingURL=MediaCard.js.map
@@ -0,0 +1,3 @@
1
+ import type { MediaDialogProps } from '../hooks/MediaDialog.hooks.js';
2
+ export declare function MediaDialog(props: MediaDialogProps, _optional?: Record<string, never>): import("react").JSX.Element | null;
3
+ //# sourceMappingURL=MediaDialog.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Dialog } from '@jini-ai/ui-kit/react';
3
+ import { useMediaDialog } from '../hooks/MediaDialog.hooks.js';
4
+ export function MediaDialog(props, _optional = {}) {
5
+ const vm = useMediaDialog(props);
6
+ return vm.open ? _jsx(Dialog, { ...vm.dialogProps }) : null;
7
+ }
8
+ //# sourceMappingURL=MediaDialog.js.map
@@ -0,0 +1,4 @@
1
+ import type { MediaGridProps } from '../hooks/MediaGrid.hooks.js';
2
+ export type { MediaGridProps } from '../hooks/MediaGrid.hooks.js';
3
+ export declare function MediaGrid(props: MediaGridProps, _optional?: Record<string, never>): import("react").JSX.Element;
4
+ //# sourceMappingURL=MediaGrid.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MediaCard } from './MediaCard.js';
3
+ import { useMediaGrid } from '../hooks/MediaGrid.hooks.js';
4
+ export function MediaGrid(props, _optional = {}) {
5
+ const vm = useMediaGrid(props);
6
+ return (_jsx("div", { className: vm.className, "data-jini-part": "media.grid", ref: vm.gridRef, tabIndex: -1, "aria-label": "Media library", children: vm.actions.length ? (vm.actions.map((action) => (_jsx(MediaCard, { ...action, api: vm.api, ...(vm.busy === undefined ? {} : { busy: vm.busy }) }, action.item.id)))) : (_jsx("div", { className: "jini-card", children: _jsx("div", { className: "jini-empty-state", children: _jsx("p", { className: "jini-empty-state-title", children: vm.emptyLabel ?? 'No media found' }) }) })) }));
7
+ }
8
+ //# sourceMappingURL=MediaGrid.js.map
@@ -0,0 +1,14 @@
1
+ /** Small native SVGs travel with the markup; the host chooses their presentation. */
2
+ export declare function DocumentIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
3
+ export declare function ReloadIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
4
+ export declare function HiddenEyeIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
5
+ export declare function EyeIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
6
+ export declare function ExpandIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
7
+ export declare function CloseIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
8
+ export declare function PreviousIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
9
+ export declare function NextIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
10
+ export declare function AllIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
11
+ export declare function ImageIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
12
+ export declare function VideoIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
13
+ export declare function CloudIcon(_required: Record<string, never>, _optional?: Record<string, never>): import("react").JSX.Element;
14
+ //# sourceMappingURL=MediaIcons.d.ts.map
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Small native SVGs travel with the markup; the host chooses their presentation. */
3
+ export function DocumentIcon(_required, _optional = {}) {
4
+ return _jsxs("svg", { className: "jini-icon", viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: [_jsx("path", { className: "jini-icon-path", d: "M5 2h6l3 3v11H5V2z", strokeLinejoin: "round" }), _jsx("path", { className: "jini-icon-path", d: "M11 2v3h3", strokeLinejoin: "round" })] });
5
+ }
6
+ export function ReloadIcon(_required, _optional = {}) {
7
+ return _jsxs("svg", { className: "jini-icon", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", focusable: "false", children: [_jsx("path", { className: "jini-icon-path", d: "M3 12a9 9 0 0 1 15.9-5.7L21 8" }), _jsx("path", { className: "jini-icon-path", d: "M21 3v5h-5" }), _jsx("path", { className: "jini-icon-path", d: "M21 12a9 9 0 0 1-15.9 5.7L3 16" }), _jsx("path", { className: "jini-icon-path", d: "M3 21v-5h5" })] });
8
+ }
9
+ export function HiddenEyeIcon(_required, _optional = {}) {
10
+ return _jsx("svg", { className: "jini-icon", viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { className: "jini-icon-path", d: "m2 2 14 14M7 3.8A8 8 0 0 1 9 3.5c4.5 0 7.5 5.5 7.5 5.5a13 13 0 0 1-2.2 2.8M11 14.2a8 8 0 0 1-2 .3C4.5 14.5 1.5 9 1.5 9a13 13 0 0 1 2.2-2.8", strokeLinecap: "round", strokeLinejoin: "round" }) });
11
+ }
12
+ export function EyeIcon(_required, _optional = {}) {
13
+ return _jsxs("svg", { className: "jini-icon", viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: [_jsx("path", { className: "jini-icon-path", d: "M1.5 9S4.5 3.5 9 3.5 16.5 9 16.5 9 13.5 14.5 9 14.5 1.5 9 1.5 9Z" }), _jsx("circle", { className: "jini-icon-circle", cx: "9", cy: "9", r: "2.25" })] });
14
+ }
15
+ export function ExpandIcon(_required, _optional = {}) {
16
+ return _jsx("svg", { className: "jini-icon", viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { className: "jini-icon-path", d: "M6 2H2v4m10-4h4v4M2 12v4h4m10-4v4h-4" }) });
17
+ }
18
+ export function CloseIcon(_required, _optional = {}) {
19
+ return _jsx("svg", { className: "jini-icon", viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { className: "jini-icon-path", d: "m4 4 10 10M14 4 4 14" }) });
20
+ }
21
+ export function PreviousIcon(_required, _optional = {}) {
22
+ return _jsx("svg", { className: "jini-icon", viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { className: "jini-icon-path", d: "m11 4-5 5 5 5" }) });
23
+ }
24
+ export function NextIcon(_required, _optional = {}) {
25
+ return _jsx("svg", { className: "jini-icon", viewBox: "0 0 18 18", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: _jsx("path", { className: "jini-icon-path", d: "m7 4 5 5-5 5" }) });
26
+ }
27
+ export function AllIcon(_required, _optional = {}) {
28
+ return _jsxs("svg", { className: "jini-icon", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("rect", { className: "jini-icon-rect", x: "4", y: "4", width: "6.5", height: "6.5", rx: "1.2" }), _jsx("rect", { className: "jini-icon-rect", x: "13.5", y: "4", width: "6.5", height: "6.5", rx: "1.2" }), _jsx("rect", { className: "jini-icon-rect", x: "4", y: "13.5", width: "6.5", height: "6.5", rx: "1.2" }), _jsx("rect", { className: "jini-icon-rect", x: "13.5", y: "13.5", width: "6.5", height: "6.5", rx: "1.2" })] });
29
+ }
30
+ export function ImageIcon(_required, _optional = {}) {
31
+ return _jsxs("svg", { className: "jini-icon", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("rect", { className: "jini-icon-rect", x: "3.5", y: "5", width: "17", height: "14", rx: "2" }), _jsx("circle", { className: "jini-icon-circle", cx: "8.5", cy: "9.5", r: "1.5" }), _jsx("path", { className: "jini-icon-path", d: "M20.5 15.5 16 11l-6.5 6.5M3.5 17l3.5-3.5 2.5 2.5" })] });
32
+ }
33
+ export function VideoIcon(_required, _optional = {}) {
34
+ return _jsxs("svg", { className: "jini-icon", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("rect", { className: "jini-icon-rect", x: "3.5", y: "5", width: "17", height: "14", rx: "2" }), _jsx("path", { className: "jini-icon-path", d: "M10.25 9.25v5.5l4.5-2.75z" })] });
35
+ }
36
+ export function CloudIcon(_required, _optional = {}) {
37
+ return _jsx("svg", { className: "jini-icon", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { className: "jini-icon-path", d: "M7 16h9.5a3.5 3.5 0 0 0 .4-6.98A4.75 4.75 0 0 0 7.7 7.2 3.5 3.5 0 0 0 7 16Z" }) });
38
+ }
39
+ //# sourceMappingURL=MediaIcons.js.map
@@ -0,0 +1,5 @@
1
+ import type { MediaLightboxProps } from '../hooks/MediaLightbox.hooks.js';
2
+ /** One shared dialog for the grid: mounting N real dialogs to show at most one open
3
+ * at a time buys nothing and costs N DOM subtrees. */
4
+ export declare function MediaLightbox(props: MediaLightboxProps, _optional?: Record<string, never>): import("react").JSX.Element;
5
+ //# sourceMappingURL=MediaLightbox.d.ts.map
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MediaDialog } from './MediaDialog.js';
3
+ import { useMediaLightbox } from '../hooks/MediaLightbox.hooks.js';
4
+ import { CloseIcon, PreviousIcon, NextIcon } from './MediaIcons.js';
5
+ import { MediaPreview } from './MediaCard.js';
6
+ /** One shared dialog for the grid: mounting N real dialogs to show at most one open
7
+ * at a time buys nothing and costs N DOM subtrees. */
8
+ export function MediaLightbox(props, _optional = {}) {
9
+ const vm = useMediaLightbox(props);
10
+ return (_jsxs(MediaDialog, { className: "jini-media-lightbox", dialogRef: vm.dialogRef, attrs: { 'data-jini-part': 'media.lightbox', 'data-jini-size': 'large' }, title: vm.title, open: vm.open, onClose: vm.onClose, children: [_jsxs("div", { className: "jini-media-lightbox-header", children: [_jsx("span", { className: "jini-media-lightbox-title", "aria-hidden": "true", children: vm.item?.title }), _jsx("span", { className: "jini-media-lightbox-counter", children: vm.position }), _jsxs("button", { type: "button", className: "jini-media-lightbox-close", ref: vm.closeRef, "data-jini-part": "media.lightbox.close", "data-agent-element": "media-lightbox-close", "data-jini-autofocus": true, onClick: vm.onClose, children: [_jsx(CloseIcon, {}), _jsx("span", { className: "jini-visually-hidden", children: "Close" })] })] }), _jsxs("div", { className: "jini-media-lightbox-stage", children: [vm.hasPrev && _jsxs("button", { type: "button", className: "jini-media-lightbox-nav jini-media-lightbox-nav-prev", "data-jini-part": "media.lightbox.previous", "data-agent-element": "media-lightbox-prev", onClick: vm.previous, children: [_jsx(PreviousIcon, {}), _jsx("span", { className: "jini-visually-hidden", children: "Previous" })] }), _jsx("div", { className: "jini-media-lightbox-media", children: vm.item && _jsx(MediaPreview, { item: vm.item, api: vm.api }, vm.item.id) }), vm.hasNext && _jsxs("button", { type: "button", className: "jini-media-lightbox-nav jini-media-lightbox-nav-next", "data-jini-part": "media.lightbox.next", "data-agent-element": "media-lightbox-next", onClick: vm.next, children: [_jsx(NextIcon, {}), _jsx("span", { className: "jini-visually-hidden", children: "Next" })] })] })] }));
11
+ }
12
+ //# sourceMappingURL=MediaLightbox.js.map
@@ -0,0 +1,3 @@
1
+ import type { MediaPickerProps } from '../hooks/MediaPicker.hooks.js';
2
+ export declare function MediaPicker(props: MediaPickerProps, _optional?: Record<string, never>): import("react").JSX.Element;
3
+ //# sourceMappingURL=MediaPicker.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MediaDialog } from './MediaDialog.js';
3
+ import { Button, TextField } from '@jini-ai/ui-kit/react';
4
+ import { useMediaPicker } from '../hooks/MediaPicker.hooks.js';
5
+ import { MediaGrid } from './MediaGrid.js';
6
+ export function MediaPicker(props, _optional = {}) {
7
+ const vm = useMediaPicker(props);
8
+ return (_jsxs(MediaDialog, { className: "jini-media-picker-dialog", attrs: { 'data-jini-part': 'media.picker' }, title: "Choose media", open: true, onClose: vm.onClose, children: [_jsx(TextField, { attrs: { 'data-jini-part': 'media.picker.search' }, label: "Search media", value: vm.search, onValueChange: vm.onSearch }), vm.snapshot?.error && _jsxs("div", { className: "jini-notice jini-notice-error", children: [_jsx("p", { className: "jini-notice-text", role: "alert", children: vm.snapshot.error }), _jsx(Button, { onPress: vm.onRetry, children: "Retry" })] }), vm.loading ? (_jsx("p", { className: "jini-notice", role: "status", children: "Loading media\u2026" })) : (_jsx(MediaGrid, { actions: vm.actions, api: vm.api })), _jsx(Button, { attrs: { 'data-jini-part': 'media.picker.cancel', 'data-jini-autofocus': true }, onPress: vm.onClose, children: "Cancel" })] }));
9
+ }
10
+ //# sourceMappingURL=MediaPicker.js.map
@@ -0,0 +1,4 @@
1
+ import type { MediaPurgeDialogProps } from '../hooks/MediaPurgeDialog.hooks.js';
2
+ /** Views are overridable; ui-kit owns cancel-first focus and pending/agent guards. */
3
+ export declare function MediaPurgeDialog(props: MediaPurgeDialogProps, _optional?: Record<string, never>): import("react").JSX.Element;
4
+ //# sourceMappingURL=MediaPurgeDialog.d.ts.map
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ConfirmDialog } from '@jini-ai/ui-kit/react';
3
+ import { useMediaPurgeDialog } from '../hooks/MediaPurgeDialog.hooks.js';
4
+ /** Views are overridable; ui-kit owns cancel-first focus and pending/agent guards. */
5
+ export function MediaPurgeDialog(props, _optional = {}) {
6
+ const vm = useMediaPurgeDialog(props);
7
+ return _jsx(ConfirmDialog, { open: props.open, pending: props.pending, title: "Delete permanently?", agentHandle: "media-purge", confirmLabel: "Delete permanently", tone: "danger", agentMayConfirm: false, consequence: vm.consequence, actionAccessibleNames: vm.actionAccessibleNames, attrs: { 'data-jini-part': 'media.purge', 'data-agent-element': 'media-purge' }, onCancel: props.onCancel, onConfirm: props.onConfirm });
8
+ }
9
+ //# sourceMappingURL=MediaPurgeDialog.js.map
@@ -0,0 +1,3 @@
1
+ import type { UploadButtonProps } from '../hooks/UploadButton.hooks.js';
2
+ export declare function UploadButton(props: UploadButtonProps, _optional?: Record<string, never>): import("react").JSX.Element;
3
+ //# sourceMappingURL=UploadButton.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, TextField } from '@jini-ai/ui-kit/react';
3
+ import { useUploadButton } from '../hooks/UploadButton.hooks.js';
4
+ export function UploadButton(props, _optional = {}) {
5
+ const vm = useUploadButton(props);
6
+ return (_jsxs("div", { className: "jini-toolbar jini-media-upload", "data-jini-part": "media.upload", "data-agent-element": vm.handles.toolbar, onDragOver: vm.onDragOver, onDrop: vm.onDrop, children: [_jsx(Button, { variant: "secondary", onPress: vm.onPress, disabled: vm.disabled, children: vm.chooseLabel }), _jsx("span", { className: "jini-media-upload-filename", "aria-live": "polite", children: vm.selectedFileName }), vm.withAlt && _jsx(TextField, { attrs: { 'data-jini-part': 'media.upload.alt', 'data-agent-element': vm.handles.alt }, className: "jini-media-upload-alt", placeholder: "Alt text (optional)", label: vm.altLabel, value: vm.alt, onValueChange: vm.setAlt }), _jsx("input", { className: "jini-media-upload-file", "data-jini-part": "media.upload.file", "data-agent-element": vm.handles.file, accept: "image/jpeg,image/png,image/webp,image/gif,image/avif,video/mp4,video/webm", ref: vm.inputRef, "aria-label": "File to upload", type: "file", hidden: true, multiple: vm.multiple, onChange: vm.onFile, disabled: vm.disabled }), _jsx(Button, { attrs: { 'data-jini-part': 'media.upload.button', 'data-agent-element': vm.handles.submit }, onPress: vm.onUpload, disabled: vm.uploadDisabled, children: vm.label }), _jsx("p", { className: "jini-media-success", role: "status", "aria-live": "polite", "aria-atomic": "true", children: vm.success }), vm.error && _jsx("p", { className: "jini-notice jini-notice-error", role: "alert", children: vm.error })] }));
7
+ }
8
+ //# sourceMappingURL=UploadButton.js.map