@jini-ai/admin 0.3.10 → 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 (399) 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.hooks.d.ts +17 -3
  243. package/dist/react/components/ConfirmDialog/ConfirmDialog.hooks.js +3 -3
  244. package/dist/react/components/ConfirmDialog/ConfirmDialog.js +5 -5
  245. package/dist/react/components/InteractiveHtmlEditor/InteractiveHtmlEditor.d.ts +6 -2
  246. package/dist/react/components/InteractiveHtmlEditor/InteractiveHtmlEditor.js +7 -8
  247. package/dist/react/components/RowMenu/RowMenu.d.ts +5 -1
  248. package/dist/react/components/RowMenu/RowMenu.hooks.d.ts +8 -2
  249. package/dist/react/components/RowMenu/RowMenu.hooks.js +4 -4
  250. package/dist/react/components/RowMenu/RowMenu.js +6 -6
  251. package/dist/react/components/Sidebar.d.ts +1 -1
  252. package/dist/react/components/Sidebar.js +103 -7
  253. package/dist/react/entities/EntityCell.d.ts +10 -0
  254. package/dist/react/entities/EntityCell.js +18 -0
  255. package/dist/react/entities/EntityDetail.d.ts +3 -0
  256. package/dist/react/entities/EntityDetail.js +21 -0
  257. package/dist/react/entities/EntityEdit.d.ts +13 -0
  258. package/dist/react/entities/EntityEdit.js +45 -0
  259. package/dist/react/entities/EntityField.d.ts +20 -0
  260. package/dist/react/entities/EntityField.js +31 -0
  261. package/dist/react/entities/EntityIndex.d.ts +3 -0
  262. package/dist/react/entities/EntityIndex.js +10 -0
  263. package/dist/react/entities/EntityList.d.ts +7 -0
  264. package/dist/react/entities/EntityList.js +52 -0
  265. package/dist/react/entities/contribution.d.ts +26 -0
  266. package/dist/react/entities/contribution.js +78 -0
  267. package/dist/react/entities/index.d.ts +10 -0
  268. package/dist/react/entities/index.js +7 -0
  269. package/dist/react/entities/rules.d.ts +179 -0
  270. package/dist/react/entities/rules.js +224 -0
  271. package/dist/react/entities/types.d.ts +45 -0
  272. package/dist/react/entities/types.js +5 -0
  273. package/dist/react/entities/use-entity-edit.d.ts +35 -0
  274. package/dist/react/entities/use-entity-edit.js +98 -0
  275. package/dist/react/entities/use-entity-read.d.ts +22 -0
  276. package/dist/react/entities/use-entity-read.js +27 -0
  277. package/dist/react/hooks/use-nav-sections.d.ts +12 -3
  278. package/dist/react/hooks/use-nav-sections.js +14 -14
  279. package/dist/react/hooks/use-sidebar-rail.d.ts +7 -1
  280. package/dist/react/hooks/use-sidebar-rail.js +11 -11
  281. package/dist/react/index.d.ts +3 -1
  282. package/dist/react/index.js +5 -2
  283. package/dist/react/kit/Kit.hooks.d.ts +13 -0
  284. package/dist/react/kit/Kit.hooks.js +10 -0
  285. package/dist/react/kit/Native.hooks.d.ts +38 -0
  286. package/dist/react/kit/Native.hooks.js +65 -0
  287. package/dist/react/kit/index.d.ts +12 -0
  288. package/dist/react/kit/index.js +21 -0
  289. package/dist/react/kit/native.d.ts +3 -0
  290. package/dist/react/kit/native.js +21 -0
  291. package/dist/react/kit/types.d.ts +40 -0
  292. package/dist/react/kit/types.js +2 -0
  293. package/dist/react/overlay.d.ts +36 -0
  294. package/dist/react/overlay.js +35 -0
  295. package/dist/react/overlays.d.ts +38 -0
  296. package/dist/react/overlays.js +46 -0
  297. package/dist/react/shell/AdminShell.d.ts +9 -0
  298. package/dist/react/shell/AdminShell.hooks.d.ts +15 -0
  299. package/dist/react/shell/AdminShell.hooks.js +27 -0
  300. package/dist/react/shell/AdminShell.js +46 -0
  301. package/dist/react/shell/index.d.ts +7 -0
  302. package/dist/react/shell/index.js +5 -0
  303. package/dist/react/shell/model.d.ts +25 -0
  304. package/dist/react/shell/model.js +29 -0
  305. package/dist/react/shell/theme-ports.d.ts +28 -0
  306. package/dist/react/shell/theme-ports.js +2 -0
  307. package/dist/react/shell/types.d.ts +99 -0
  308. package/dist/react/shell/types.js +2 -0
  309. package/dist/react/shell/use-admin-shell-session.d.ts +13 -0
  310. package/dist/react/shell/use-admin-shell-session.js +81 -0
  311. package/dist/react/shell/use-admin-theme.d.ts +16 -0
  312. package/dist/react/shell/use-admin-theme.js +57 -0
  313. package/dist/react/types.d.ts +6 -4
  314. package/dist/react/types.js +2 -2
  315. package/dist/react/use-controller.d.ts +16 -0
  316. package/dist/react/use-controller.js +18 -0
  317. package/dist/security/adapters/http.d.ts +16 -0
  318. package/dist/security/adapters/http.js +94 -0
  319. package/dist/security/adapters/memory.d.ts +15 -0
  320. package/dist/security/adapters/memory.js +60 -0
  321. package/dist/security/conformance/security-api.conformance.d.ts +10 -0
  322. package/dist/security/conformance/security-api.conformance.js +48 -0
  323. package/dist/security/controllers/access-tokens.controller.d.ts +44 -0
  324. package/dist/security/controllers/access-tokens.controller.js +112 -0
  325. package/dist/security/controllers/other-credentials.controller.d.ts +30 -0
  326. package/dist/security/controllers/other-credentials.controller.js +74 -0
  327. package/dist/security/controllers/root-key.controller.d.ts +35 -0
  328. package/dist/security/controllers/root-key.controller.js +90 -0
  329. package/dist/security/index.d.ts +9 -0
  330. package/dist/security/index.js +9 -0
  331. package/dist/security/messages.en.d.ts +12 -0
  332. package/dist/security/messages.en.js +2 -0
  333. package/dist/security/models.d.ts +112 -0
  334. package/dist/security/models.js +2 -0
  335. package/dist/security/ports.d.ts +58 -0
  336. package/dist/security/ports.js +5 -0
  337. package/dist/security/react/components/CredentialEditor.d.ts +3 -0
  338. package/dist/security/react/components/CredentialEditor.js +8 -0
  339. package/dist/security/react/hooks/AccessTokensTab.hooks.d.ts +94 -0
  340. package/dist/security/react/hooks/AccessTokensTab.hooks.js +36 -0
  341. package/dist/security/react/hooks/CredentialEditor.hooks.d.ts +49 -0
  342. package/dist/security/react/hooks/CredentialEditor.hooks.js +14 -0
  343. package/dist/security/react/hooks/RootKeyTab.hooks.d.ts +29 -0
  344. package/dist/security/react/hooks/RootKeyTab.hooks.js +19 -0
  345. package/dist/security/react/hooks/SecurityPage.hooks.d.ts +17 -0
  346. package/dist/security/react/hooks/SecurityPage.hooks.js +12 -0
  347. package/dist/security/react/hooks/SecurityPorts.hooks.d.ts +9 -0
  348. package/dist/security/react/hooks/SecurityPorts.hooks.js +6 -0
  349. package/dist/security/react/index.d.ts +215 -0
  350. package/dist/security/react/index.js +10 -0
  351. package/dist/security/react/pages/SecurityPage.d.ts +4 -0
  352. package/dist/security/react/pages/SecurityPage.js +10 -0
  353. package/dist/security/react/tabs/AccessTokensTab.d.ts +4 -0
  354. package/dist/security/react/tabs/AccessTokensTab.js +10 -0
  355. package/dist/security/react/tabs/RootKeyTab.d.ts +4 -0
  356. package/dist/security/react/tabs/RootKeyTab.js +9 -0
  357. package/dist/security/rules.d.ts +57 -0
  358. package/dist/security/rules.js +63 -0
  359. package/dist/security/security.module.d.ts +45 -0
  360. package/dist/security/security.module.js +5 -0
  361. package/dist/source-control/adapters/http.d.ts +6 -0
  362. package/dist/source-control/adapters/http.js +13 -0
  363. package/dist/source-control/adapters/memory.d.ts +9 -0
  364. package/dist/source-control/adapters/memory.js +35 -0
  365. package/dist/source-control/conformance/source-control-api.conformance.d.ts +10 -0
  366. package/dist/source-control/conformance/source-control-api.conformance.js +48 -0
  367. package/dist/source-control/controllers/source-control.controller.d.ts +26 -0
  368. package/dist/source-control/controllers/source-control.controller.js +70 -0
  369. package/dist/source-control/index.d.ts +8 -0
  370. package/dist/source-control/index.js +6 -0
  371. package/dist/source-control/messages.en.d.ts +11 -0
  372. package/dist/source-control/messages.en.js +2 -0
  373. package/dist/source-control/models.d.ts +70 -0
  374. package/dist/source-control/models.js +2 -0
  375. package/dist/source-control/ports.d.ts +23 -0
  376. package/dist/source-control/ports.js +3 -0
  377. package/dist/source-control/react/components/SourceControlCredentialFields.d.ts +5 -0
  378. package/dist/source-control/react/components/SourceControlCredentialFields.js +8 -0
  379. package/dist/source-control/react/components/SourceControlProviderRow.d.ts +5 -0
  380. package/dist/source-control/react/components/SourceControlProviderRow.js +7 -0
  381. package/dist/source-control/react/hooks/ProvidersTab.hooks.d.ts +45 -0
  382. package/dist/source-control/react/hooks/ProvidersTab.hooks.js +20 -0
  383. package/dist/source-control/react/hooks/SourceControlCredentialFields.hooks.d.ts +43 -0
  384. package/dist/source-control/react/hooks/SourceControlCredentialFields.hooks.js +9 -0
  385. package/dist/source-control/react/hooks/SourceControlPage.hooks.d.ts +17 -0
  386. package/dist/source-control/react/hooks/SourceControlPage.hooks.js +5 -0
  387. package/dist/source-control/react/hooks/SourceControlPorts.hooks.d.ts +9 -0
  388. package/dist/source-control/react/hooks/SourceControlPorts.hooks.js +6 -0
  389. package/dist/source-control/react/index.d.ts +156 -0
  390. package/dist/source-control/react/index.js +10 -0
  391. package/dist/source-control/react/pages/SourceControlPage.d.ts +4 -0
  392. package/dist/source-control/react/pages/SourceControlPage.js +11 -0
  393. package/dist/source-control/react/tabs/ProvidersTab.d.ts +4 -0
  394. package/dist/source-control/react/tabs/ProvidersTab.js +10 -0
  395. package/dist/source-control/rules.d.ts +32 -0
  396. package/dist/source-control/rules.js +35 -0
  397. package/dist/source-control/source-control.module.d.ts +36 -0
  398. package/dist/source-control/source-control.module.js +6 -0
  399. package/package.json +207 -4
@@ -43,9 +43,9 @@ export const DEFAULT_NAV_SECTIONS_STORAGE_KEY = 'jini-admin-nav-sections';
43
43
  * Non-boolean entries are dropped individually rather than rejecting the whole map, so one bad key
44
44
  * cannot discard a user's other sections.
45
45
  */
46
- function readPersisted(storageKey) {
46
+ function readPersisted(storageKey, storage) {
47
47
  try {
48
- const raw = localStorage.getItem(storageKey);
48
+ const raw = storage.getItem(storageKey);
49
49
  if (raw === null)
50
50
  return {};
51
51
  const parsed = JSON.parse(raw);
@@ -62,9 +62,9 @@ function readPersisted(storageKey) {
62
62
  return {};
63
63
  }
64
64
  }
65
- function writePersisted(storageKey, state) {
65
+ function writePersisted(storageKey, state, storage) {
66
66
  try {
67
- localStorage.setItem(storageKey, JSON.stringify(state));
67
+ storage.setItem(storageKey, JSON.stringify(state));
68
68
  }
69
69
  catch {
70
70
  // Best-effort, exactly as in `use-sidebar-rail.ts`: a user who cannot persist still gets a
@@ -81,19 +81,19 @@ function writePersisted(storageKey, state) {
81
81
  * handful, fixed by the host's panel manifest, never user-variable.
82
82
  * @overallScore 100
83
83
  */
84
- export function useNavSections(storageKey = DEFAULT_NAV_SECTIONS_STORAGE_KEY) {
85
- const [state, setState] = useState(() => readPersisted(storageKey));
86
- const isOpen = useCallback((groupLabel) => state[groupLabel] ?? true, [state]);
87
- const toggle = useCallback((groupLabel) => {
84
+ export function useNavSections({ storage, events }, { storageKey = DEFAULT_NAV_SECTIONS_STORAGE_KEY } = {}) {
85
+ const [state, setState] = useState(() => readPersisted(storageKey, storage));
86
+ const isOpen = useCallback(({ groupLabel }) => state[groupLabel] ?? true, [state]);
87
+ const toggle = useCallback(({ groupLabel }) => {
88
88
  setState((current) => {
89
89
  // `?? true` here and in `isOpen` must agree: toggling a section that has never been stored
90
90
  // has to close it (it is currently rendered open), not open an already-open section — which
91
91
  // is what a bare `!current[label]` would do on the `undefined` first press.
92
92
  const next = { ...current, [groupLabel]: !(current[groupLabel] ?? true) };
93
- writePersisted(storageKey, next);
93
+ writePersisted(storageKey, next, storage);
94
94
  return next;
95
95
  });
96
- }, [storageKey]);
96
+ }, [storageKey, storage]);
97
97
  /** Cross-tab sync — two admin tabs should agree on the layout rather than diverging the moment
98
98
  * either one collapses a section. Mirrors `useSidebarRail`'s listener, including treating a
99
99
  * removed key (`newValue === null`, another tab clearing storage) as "no stored preference"
@@ -102,11 +102,11 @@ export function useNavSections(storageKey = DEFAULT_NAV_SECTIONS_STORAGE_KEY) {
102
102
  function onStorage(event) {
103
103
  if (event.key !== storageKey)
104
104
  return;
105
- setState(event.newValue === null ? {} : readPersisted(storageKey));
105
+ setState(event.newValue === null ? {} : readPersisted(storageKey, storage));
106
106
  }
107
- window.addEventListener('storage', onStorage);
108
- return () => window.removeEventListener('storage', onStorage);
109
- }, [storageKey]);
107
+ events.addEventListener('storage', onStorage);
108
+ return () => events.removeEventListener('storage', onStorage);
109
+ }, [storageKey, storage, events]);
110
110
  return { isOpen, toggle };
111
111
  }
112
112
  //# sourceMappingURL=use-nav-sections.js.map
@@ -35,5 +35,11 @@ export interface SidebarRail {
35
35
  *
36
36
  * @complexity O(1) — one state read/write per toggle, no derived computation.
37
37
  */
38
- export declare function useSidebarRail(storageKey?: string, defaultCollapsed?: boolean): SidebarRail;
38
+ export declare function useSidebarRail({ storage, events }: {
39
+ readonly storage: Pick<Storage, 'getItem' | 'setItem'>;
40
+ readonly events: Pick<Window, 'addEventListener' | 'removeEventListener'>;
41
+ }, { storageKey, defaultCollapsed }?: {
42
+ readonly storageKey?: string | undefined;
43
+ readonly defaultCollapsed?: boolean | undefined;
44
+ }): SidebarRail;
39
45
  //# sourceMappingURL=use-sidebar-rail.d.ts.map
@@ -32,9 +32,9 @@ export const DEFAULT_SIDEBAR_RAIL_STORAGE_KEY = 'jini-admin-sidebar-rail-collaps
32
32
  * it collapsed again on every reload, because their explicit `'0'` would be indistinguishable from
33
33
  * never having chosen. A stored value always wins over the default; only its absence defers.
34
34
  */
35
- function readPersisted(storageKey) {
35
+ function readPersisted(storageKey, storage) {
36
36
  try {
37
- const raw = localStorage.getItem(storageKey);
37
+ const raw = storage.getItem(storageKey);
38
38
  if (raw === null)
39
39
  return undefined;
40
40
  return raw === '1';
@@ -43,9 +43,9 @@ function readPersisted(storageKey) {
43
43
  return undefined;
44
44
  }
45
45
  }
46
- function writePersisted(storageKey, collapsed) {
46
+ function writePersisted(storageKey, collapsed, storage) {
47
47
  try {
48
- localStorage.setItem(storageKey, collapsed ? '1' : '0');
48
+ storage.setItem(storageKey, collapsed ? '1' : '0');
49
49
  }
50
50
  catch {
51
51
  // Best-effort — a user who cannot persist the preference still gets a working toggle for the
@@ -64,15 +64,15 @@ function writePersisted(storageKey, collapsed) {
64
64
  *
65
65
  * @complexity O(1) — one state read/write per toggle, no derived computation.
66
66
  */
67
- export function useSidebarRail(storageKey = DEFAULT_SIDEBAR_RAIL_STORAGE_KEY, defaultCollapsed = false) {
68
- const [collapsed, setCollapsed] = useState(() => readPersisted(storageKey) ?? defaultCollapsed);
67
+ export function useSidebarRail({ storage, events }, { storageKey = DEFAULT_SIDEBAR_RAIL_STORAGE_KEY, defaultCollapsed = false } = {}) {
68
+ const [collapsed, setCollapsed] = useState(() => readPersisted(storageKey, storage) ?? defaultCollapsed);
69
69
  const toggle = useCallback(() => {
70
70
  setCollapsed((current) => {
71
71
  const next = !current;
72
- writePersisted(storageKey, next);
72
+ writePersisted(storageKey, next, storage);
73
73
  return next;
74
74
  });
75
- }, [storageKey]);
75
+ }, [storageKey, storage]);
76
76
  /** Cross-tab sync: two admin tabs open side by side should agree on the rail state rather than
77
77
  * silently diverging the moment either one is toggled. */
78
78
  useEffect(() => {
@@ -85,9 +85,9 @@ export function useSidebarRail(storageKey = DEFAULT_SIDEBAR_RAIL_STORAGE_KEY, de
85
85
  // collapsed-by-default host in every other one.
86
86
  setCollapsed(event.newValue === null ? defaultCollapsed : event.newValue === '1');
87
87
  }
88
- window.addEventListener('storage', onStorage);
89
- return () => window.removeEventListener('storage', onStorage);
90
- }, [storageKey, defaultCollapsed]);
88
+ events.addEventListener('storage', onStorage);
89
+ return () => events.removeEventListener('storage', onStorage);
90
+ }, [storageKey, defaultCollapsed, events]);
91
91
  return { collapsed, toggle };
92
92
  }
93
93
  //# sourceMappingURL=use-sidebar-rail.js.map
@@ -41,7 +41,7 @@ export type { ConfirmDialogController, UseConfirmDialog } from './components/Con
41
41
  export { ConfirmDialogDefaultsProvider } from './components/ConfirmDialog/ConfirmDialog.hooks.js';
42
42
  export type { ConfirmDialogDefaults, ConfirmDialogDefaultsProviderProps, } from './components/ConfirmDialog/ConfirmDialog.hooks.js';
43
43
  export { DataTable } from './components/DataTable.js';
44
- export type { DataTableColumn, DataTableProps } from './components/DataTable.js';
44
+ export type { DataTableColumn, DataTableColumnSort, DataTableProps, DataTableSortDirection, DataTableSortState, } from './components/DataTable.js';
45
45
  export { InteractiveHtmlEditor } from './components/InteractiveHtmlEditor/InteractiveHtmlEditor.js';
46
46
  export type { InteractiveHtmlEditorProps } from './components/InteractiveHtmlEditor/InteractiveHtmlEditor.js';
47
47
  export { RowMenu } from './components/RowMenu/RowMenu.js';
@@ -52,4 +52,6 @@ export { DEFAULT_SIDEBAR_RAIL_STORAGE_KEY, useSidebarRail } from './hooks/use-si
52
52
  export type { SidebarRail } from './hooks/use-sidebar-rail.js';
53
53
  export { DEFAULT_NAV_SECTIONS_STORAGE_KEY, useNavSections } from './hooks/use-nav-sections.js';
54
54
  export type { NavSections, NavSectionState } from './hooks/use-nav-sections.js';
55
+ export * from './shell/index.js';
56
+ export * from './entities/index.js';
55
57
  //# sourceMappingURL=index.d.ts.map
@@ -39,8 +39,9 @@ export { ConfirmDialog } from './components/ConfirmDialog/ConfirmDialog.js';
39
39
  // Host-wide `ConfirmDialog` defaults (today just a translated `cancelLabel`), set once at an app
40
40
  // root rather than passed at every call site — see `ConfirmDialogDefaultsProvider`'s doc comment.
41
41
  export { ConfirmDialogDefaultsProvider } from './components/ConfirmDialog/ConfirmDialog.hooks.js';
42
- // The list table. Deliberately has no sorting, pagination or row selection — see its file header
43
- // for the corpus evidence behind each omission.
42
+ // The list table. Sorting is opt-in per column (`DataTableColumn.sort`); pagination and row
43
+ // selection are still deliberately absent — see its file header for the corpus evidence behind
44
+ // every one of these decisions.
44
45
  export { DataTable } from './components/DataTable.js';
45
46
  // Visual click-into-text editing surface for a bespoke HTML document, built on GrapesJS. See its
46
47
  // own file header for the styling-contract exception it carries (vendor CSS import) and the
@@ -53,4 +54,6 @@ export { RowMenu } from './components/RowMenu/RowMenu.js';
53
54
  export { Sidebar, useSidebar } from './components/Sidebar.js';
54
55
  export { DEFAULT_SIDEBAR_RAIL_STORAGE_KEY, useSidebarRail } from './hooks/use-sidebar-rail.js';
55
56
  export { DEFAULT_NAV_SECTIONS_STORAGE_KEY, useNavSections } from './hooks/use-nav-sections.js';
57
+ export * from './shell/index.js';
58
+ export * from './entities/index.js';
56
59
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,13 @@
1
+ import type { ReactAdminKit } from './types.js';
2
+ export declare const KitContext: import("react").Context<ReactAdminKit>;
3
+ export declare function useKitComponent<K extends keyof ReactAdminKit>({ name }: {
4
+ name: K;
5
+ }, _optional?: Record<string, never>): ReactAdminKit[K];
6
+ export declare function useKitProvider({ kit }: {
7
+ kit?: Partial<ReactAdminKit>;
8
+ }, _optional?: Record<string, never>): {
9
+ Button: import("react").ComponentType<import("./types.js").ButtonProps>;
10
+ Dialog: import("react").ComponentType<import("./types.js").DialogProps>;
11
+ TextField: import("react").ComponentType<import("./types.js").TextFieldProps>;
12
+ };
13
+ //# sourceMappingURL=Kit.hooks.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { createContext, useContext, useMemo } from 'react';
2
+ import { nativeKit } from './native.js';
3
+ export const KitContext = createContext(nativeKit);
4
+ export function useKitComponent({ name }, _optional = {}) {
5
+ return useContext(KitContext)[name];
6
+ }
7
+ export function useKitProvider({ kit = {} }, _optional = {}) {
8
+ return useMemo(() => ({ ...nativeKit, ...kit }), [kit]);
9
+ }
10
+ //# sourceMappingURL=Kit.hooks.js.map
@@ -0,0 +1,38 @@
1
+ import type { ChangeEvent, MouseEvent, SyntheticEvent } from 'react';
2
+ import type { ButtonProps, DialogProps, TextFieldProps } from './types.js';
3
+ export declare function useNativeButton(props: ButtonProps, _optional?: Record<string, never>): {
4
+ disabled: boolean;
5
+ onClick: () => void;
6
+ attrs: import("./types.js").KitAttrs;
7
+ children: import("react").ReactNode;
8
+ onPress?: () => void;
9
+ pending?: boolean;
10
+ variant?: "primary" | "secondary" | "danger";
11
+ type?: "button" | "submit";
12
+ ref?: import("react").Ref<HTMLButtonElement>;
13
+ };
14
+ export declare function useNativeTextField(props: TextFieldProps, _optional?: Record<string, never>): {
15
+ id: string;
16
+ onChange: (event: ChangeEvent<HTMLInputElement>) => void;
17
+ attrs: import("./types.js").KitAttrs;
18
+ label: string;
19
+ value: string;
20
+ onValueChange: (value: string) => void;
21
+ disabled?: boolean;
22
+ type?: "text" | "password" | "search";
23
+ ref?: import("react").Ref<HTMLInputElement>;
24
+ };
25
+ export declare function useNativeDialog(props: DialogProps, _optional?: Record<string, never>): {
26
+ dialogRef: import("react").RefObject<HTMLDialogElement | null>;
27
+ titleId: string;
28
+ onCancel: (event: SyntheticEvent<HTMLDialogElement>) => void;
29
+ onClick: (event: MouseEvent<HTMLDialogElement>) => void;
30
+ attrs: import("./types.js").KitAttrs;
31
+ title: string;
32
+ open: boolean;
33
+ children: import("react").ReactNode;
34
+ onClose: () => void;
35
+ pending?: boolean;
36
+ ref?: import("react").Ref<HTMLDialogElement>;
37
+ };
38
+ //# sourceMappingURL=Native.hooks.d.ts.map
@@ -0,0 +1,65 @@
1
+ import { useEffect, useRef, useId, useImperativeHandle } from 'react';
2
+ export function useNativeButton(props, _optional = {}) {
3
+ return {
4
+ ...props,
5
+ disabled: props.disabled === true || props.pending === true,
6
+ onClick: () => {
7
+ if (!props.disabled && !props.pending)
8
+ props.onPress?.();
9
+ },
10
+ };
11
+ }
12
+ export function useNativeTextField(props, _optional = {}) {
13
+ const generated = useId();
14
+ const id = props.attrs.id ?? generated;
15
+ return {
16
+ ...props,
17
+ id,
18
+ onChange: (event) => props.onValueChange(event.currentTarget.value),
19
+ };
20
+ }
21
+ export function useNativeDialog(props, _optional = {}) {
22
+ const dialogRef = useRef(null), trigger = useRef(null), titleId = useId();
23
+ useImperativeHandle(props.ref, () => dialogRef.current, []);
24
+ useEffect(() => {
25
+ const dialog = dialogRef.current;
26
+ if (!dialog || !props.open)
27
+ return;
28
+ trigger.current = document.activeElement;
29
+ // <dialog> may not support showModal() in tests/older browsers. Guard already-open
30
+ // calls, which throw InvalidStateError in real browsers, and fall back to open.
31
+ if (typeof dialog.showModal === 'function') {
32
+ if (!dialog.open)
33
+ dialog.showModal();
34
+ }
35
+ else
36
+ dialog.setAttribute('open', '');
37
+ // Focus Cancel/Close, the always-available action, rather than a destructive control.
38
+ const focus = dialog.querySelector('[data-jini-autofocus]') ?? dialog;
39
+ focus.focus();
40
+ return () => {
41
+ if (typeof dialog.close === 'function') {
42
+ if (dialog.open)
43
+ dialog.close();
44
+ }
45
+ else
46
+ dialog.removeAttribute('open');
47
+ if (trigger.current instanceof HTMLElement)
48
+ trigger.current.focus();
49
+ };
50
+ // Deliberately keyed on open, not content: navigation while already open must
51
+ // not reopen the dialog or capture a different trigger for focus restoration.
52
+ }, [props.open]);
53
+ function onCancel(event) {
54
+ // Always prevented so the effect stays the single source of truth for open/closed.
55
+ event.preventDefault();
56
+ if (!props.pending)
57
+ props.onClose();
58
+ }
59
+ function onClick(event) {
60
+ if (!props.pending && event.target === event.currentTarget)
61
+ props.onClose();
62
+ }
63
+ return { ...props, dialogRef, titleId, onCancel, onClick };
64
+ }
65
+ //# sourceMappingURL=Native.hooks.js.map
@@ -0,0 +1,12 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ReactAdminKit, ButtonProps, TextFieldProps, DialogProps } from './types.js';
3
+ export type { ReactAdminKit, ButtonProps, TextFieldProps, DialogProps, KitAttrs } from './types.js';
4
+ export { KIT_CONTRACT_VERSION } from './types.js';
5
+ export declare function KitProvider(props: {
6
+ kit?: Partial<ReactAdminKit>;
7
+ children: ReactNode;
8
+ }, _optional?: Record<string, never>): import("react").JSX.Element;
9
+ export declare const Button: import("react").ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
10
+ export declare const TextField: import("react").ForwardRefExoticComponent<Omit<TextFieldProps, "ref"> & import("react").RefAttributes<HTMLInputElement>>;
11
+ export declare const Dialog: import("react").ForwardRefExoticComponent<Omit<DialogProps, "ref"> & import("react").RefAttributes<HTMLDialogElement>>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { KitContext, useKitComponent, useKitProvider } from './Kit.hooks.js';
4
+ export { KIT_CONTRACT_VERSION } from './types.js';
5
+ export function KitProvider(props, _optional = {}) {
6
+ const kit = useKitProvider(props);
7
+ return _jsx(KitContext.Provider, { value: kit, children: props.children });
8
+ }
9
+ export const Button = forwardRef(function Button(props, ref) {
10
+ const Component = useKitComponent({ name: 'Button' });
11
+ return _jsx(Component, { ...props, ref: ref });
12
+ });
13
+ export const TextField = forwardRef(function TextField(props, ref) {
14
+ const Component = useKitComponent({ name: 'TextField' });
15
+ return _jsx(Component, { ...props, ref: ref });
16
+ });
17
+ export const Dialog = forwardRef(function Dialog(props, ref) {
18
+ const Component = useKitComponent({ name: 'Dialog' });
19
+ return _jsx(Component, { ...props, ref: ref });
20
+ });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import type { ReactAdminKit } from './types.js';
2
+ export declare const nativeKit: ReactAdminKit;
3
+ //# sourceMappingURL=native.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from 'react';
3
+ import { useNativeButton, useNativeDialog, useNativeTextField } from './Native.hooks.js';
4
+ const NativeButton = forwardRef(function NativeButton(props, ref) {
5
+ const vm = useNativeButton({ ...props, ref });
6
+ return (_jsx("button", { ...vm.attrs, ref: vm.ref, type: vm.type ?? 'button', disabled: vm.disabled, "aria-busy": vm.pending, "data-jini-variant": vm.variant, onClick: vm.onClick, children: vm.children }));
7
+ });
8
+ const NativeTextField = forwardRef(function NativeTextField(props, ref) {
9
+ const vm = useNativeTextField({ ...props, ref });
10
+ return (_jsxs("label", { htmlFor: vm.id, children: [vm.label, _jsx("input", { ...vm.attrs, id: vm.id, ref: vm.ref, type: vm.type ?? 'text', value: vm.value, disabled: vm.disabled, onChange: vm.onChange })] }));
11
+ });
12
+ const NativeDialog = forwardRef(function NativeDialog(props, ref) {
13
+ const vm = useNativeDialog({ ...props, ref });
14
+ return (_jsxs("dialog", { ...vm.attrs, ref: vm.dialogRef, tabIndex: -1, "aria-labelledby": vm.titleId, "aria-busy": vm.pending, onCancel: vm.onCancel, onClick: vm.onClick, children: [_jsx("h2", { id: vm.titleId, children: vm.title }), vm.children] }));
15
+ });
16
+ export const nativeKit = Object.freeze({
17
+ Button: NativeButton,
18
+ Dialog: NativeDialog,
19
+ TextField: NativeTextField,
20
+ });
21
+ //# sourceMappingURL=native.js.map
@@ -0,0 +1,40 @@
1
+ import type { ComponentType, ReactNode, Ref } from 'react';
2
+ export type KitAttrs = {
3
+ readonly 'data-jini-part': string;
4
+ readonly id?: string;
5
+ } & Readonly<Partial<Record<`data-${string}` | `aria-${string}`, string | number | boolean>>>;
6
+ export interface ButtonProps {
7
+ readonly attrs: KitAttrs;
8
+ readonly children: ReactNode;
9
+ readonly onPress?: () => void;
10
+ readonly disabled?: boolean;
11
+ readonly pending?: boolean;
12
+ readonly variant?: 'primary' | 'secondary' | 'danger';
13
+ readonly type?: 'button' | 'submit';
14
+ readonly ref?: Ref<HTMLButtonElement>;
15
+ }
16
+ export interface TextFieldProps {
17
+ readonly attrs: KitAttrs;
18
+ readonly label: string;
19
+ readonly value: string;
20
+ readonly onValueChange: (value: string) => void;
21
+ readonly disabled?: boolean;
22
+ readonly type?: 'text' | 'password' | 'search';
23
+ readonly ref?: Ref<HTMLInputElement>;
24
+ }
25
+ export interface DialogProps {
26
+ readonly attrs: KitAttrs;
27
+ readonly title: string;
28
+ readonly open: boolean;
29
+ readonly children: ReactNode;
30
+ readonly onClose: () => void;
31
+ readonly pending?: boolean;
32
+ readonly ref?: Ref<HTMLDialogElement>;
33
+ }
34
+ export interface ReactAdminKit {
35
+ readonly Button: ComponentType<ButtonProps>;
36
+ readonly Dialog: ComponentType<DialogProps>;
37
+ readonly TextField: ComponentType<TextFieldProps>;
38
+ }
39
+ export declare const KIT_CONTRACT_VERSION = "1.0.0";
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ export const KIT_CONTRACT_VERSION = '1.0.0';
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,36 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface OverlayEntry {
3
+ readonly id: number;
4
+ readonly render: () => ReactNode;
5
+ }
6
+ export interface OverlayPort {
7
+ open<T>(required: {
8
+ render: (required: {
9
+ resolve: (value: T | null) => void;
10
+ cancel: () => void;
11
+ }) => ReactNode;
12
+ }, optional?: {
13
+ signal?: AbortSignal;
14
+ }): Promise<T | null>;
15
+ }
16
+ /** One active overlay per host. A second request rejects instead of stealing the first
17
+ * caller's promise; abort/dispose settle null and release every event listener. */
18
+ export declare function createOverlayController(_required?: Record<string, never>, _optional?: Record<string, never>): {
19
+ getSnapshot: () => Readonly<{
20
+ entries: readonly OverlayEntry[];
21
+ }>;
22
+ subscribe: ({ listener }: {
23
+ listener: () => void;
24
+ }) => () => void;
25
+ open<T>({ render }: {
26
+ render: (required: {
27
+ resolve: (value: T | null) => void;
28
+ cancel: () => void;
29
+ }) => ReactNode;
30
+ }, { signal }?: {
31
+ signal?: AbortSignal;
32
+ }): Promise<T | null>;
33
+ cancel(_required?: Record<string, never>, _optional?: Record<string, never>): void;
34
+ dispose(_required?: Record<string, never>, _optional?: Record<string, never>): void;
35
+ };
36
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { createControllerStore } from '../core/module/controller-store.js';
2
+ /** One active overlay per host. A second request rejects instead of stealing the first
3
+ * caller's promise; abort/dispose settle null and release every event listener. */
4
+ export function createOverlayController(_required = {}, _optional = {}) {
5
+ const store = createControllerStore({ initial: { entries: [] } });
6
+ let sequence = 0, cancelActive = null;
7
+ return {
8
+ getSnapshot: store.getSnapshot, subscribe: store.subscribe,
9
+ open({ render }, { signal } = {}) {
10
+ if (store.signal.aborted || signal?.aborted)
11
+ return Promise.resolve(null);
12
+ if (cancelActive)
13
+ return Promise.reject(new Error('An overlay is already open'));
14
+ return new Promise(resolve => {
15
+ let settled = false;
16
+ const finish = (value) => {
17
+ if (settled)
18
+ return;
19
+ settled = true;
20
+ signal?.removeEventListener('abort', cancel);
21
+ cancelActive = null;
22
+ store.set({ patch: { entries: [] } });
23
+ resolve(value);
24
+ };
25
+ const cancel = () => finish(null);
26
+ cancelActive = cancel;
27
+ signal?.addEventListener('abort', cancel, { once: true });
28
+ store.set({ patch: { entries: [{ id: ++sequence, render: () => render({ resolve: finish, cancel }) }] } });
29
+ });
30
+ },
31
+ cancel(_required = {}, _optional = {}) { cancelActive?.(); },
32
+ dispose(_required = {}, _optional = {}) { cancelActive?.(); store.dispose(); },
33
+ };
34
+ }
35
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1,38 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface OverlayEntry {
3
+ readonly id: number;
4
+ readonly render: () => ReactNode;
5
+ }
6
+ export interface OverlayPort {
7
+ open<T>(required: {
8
+ render: (required: {
9
+ resolve: (value: T | null) => void;
10
+ cancel: () => void;
11
+ }) => ReactNode;
12
+ }, optional?: {
13
+ signal?: AbortSignal;
14
+ }): Promise<T | null>;
15
+ }
16
+ /** One active overlay per host. A second request rejects instead of stealing the first
17
+ * caller's promise; abort/dispose settle null and release every event listener. */
18
+ export declare function createOverlayController(_required?: Record<string, never>, _optional?: Record<string, never>): {
19
+ getSnapshot: () => Readonly<{
20
+ entries: readonly OverlayEntry[];
21
+ }>;
22
+ subscribe: ({ listener }: {
23
+ listener: () => void;
24
+ }) => () => void;
25
+ open<T>({ render, }: {
26
+ render: (required: {
27
+ resolve: (value: T | null) => void;
28
+ cancel: () => void;
29
+ }) => ReactNode;
30
+ }, { signal }?: {
31
+ signal?: AbortSignal;
32
+ }): Promise<T | null>;
33
+ cancel(_required?: Record<string, never>, _optional?: Record<string, never>): void;
34
+ dispose(_required?: Record<string, never>, _optional?: Record<string, never>): void;
35
+ };
36
+ export { OverlayHost } from './OverlayHost.js';
37
+ export type { OverlayHostProps } from './OverlayHost.hooks.js';
38
+ //# sourceMappingURL=overlays.d.ts.map
@@ -0,0 +1,46 @@
1
+ import { createControllerStore } from '../core/module/controller-store.js';
2
+ /** One active overlay per host. A second request rejects instead of stealing the first
3
+ * caller's promise; abort/dispose settle null and release every event listener. */
4
+ export function createOverlayController(_required = {}, _optional = {}) {
5
+ const store = createControllerStore({ initial: { entries: [] } });
6
+ let sequence = 0, cancelActive = null;
7
+ return {
8
+ getSnapshot: store.getSnapshot,
9
+ subscribe: store.subscribe,
10
+ open({ render, }, { signal } = {}) {
11
+ if (store.signal.aborted || signal?.aborted)
12
+ return Promise.resolve(null);
13
+ if (cancelActive)
14
+ return Promise.reject(new Error('An overlay is already open'));
15
+ return new Promise((resolve) => {
16
+ let settled = false;
17
+ const finish = (value) => {
18
+ if (settled)
19
+ return;
20
+ settled = true;
21
+ signal?.removeEventListener('abort', cancel);
22
+ cancelActive = null;
23
+ store.set({ patch: { entries: [] } });
24
+ resolve(value);
25
+ };
26
+ const cancel = () => finish(null);
27
+ cancelActive = cancel;
28
+ signal?.addEventListener('abort', cancel, { once: true });
29
+ store.set({
30
+ patch: {
31
+ entries: [{ id: ++sequence, render: () => render({ resolve: finish, cancel }) }],
32
+ },
33
+ });
34
+ });
35
+ },
36
+ cancel(_required = {}, _optional = {}) {
37
+ cancelActive?.();
38
+ },
39
+ dispose(_required = {}, _optional = {}) {
40
+ cancelActive?.();
41
+ store.dispose();
42
+ },
43
+ };
44
+ }
45
+ export { OverlayHost } from './OverlayHost.js';
46
+ //# sourceMappingURL=overlays.js.map
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { AdminShellProps } from './types.js';
3
+ /**
4
+ * A host-composed admin layout with manifest navigation and a session gate.
5
+ * @param props Required host scope, ports, contributions, labels and slots; optional layout settings.
6
+ * @returns Loading/login/error UI or the authenticated sidebar, feature screen and pane slots.
7
+ */
8
+ export declare function AdminShell(props: AdminShellProps): ReactNode;
9
+ //# sourceMappingURL=AdminShell.d.ts.map
@@ -0,0 +1,15 @@
1
+ import { type Dispatch, type SetStateAction } from 'react';
2
+ import type { AdminShellNavigationPort } from './types.js';
3
+ /** Internal shell wiring: a route snapshot and host-installed SPA link interception. */
4
+ export declare function useShellRoute(args: {
5
+ readonly navigation: AdminShellNavigationPort;
6
+ readonly base: string;
7
+ }): string;
8
+ /** Mobile overlay state, independent of the Sidebar's persisted desktop rail state. */
9
+ export declare function useShellDrawer(args: {
10
+ readonly routePath: string;
11
+ }): {
12
+ readonly open: boolean;
13
+ readonly setOpen: Dispatch<SetStateAction<boolean>>;
14
+ };
15
+ //# sourceMappingURL=AdminShell.hooks.d.ts.map
@@ -0,0 +1,27 @@
1
+ import { useCallback, useEffect, useState, useSyncExternalStore } from 'react';
2
+ /** Internal shell wiring: a route snapshot and host-installed SPA link interception. */
3
+ export function useShellRoute(args) {
4
+ const { navigation, base } = args;
5
+ const subscribe = useCallback((onChange) => navigation.subscribe({ base, onChange }), [navigation, base]);
6
+ const read = useCallback(() => navigation.readRoute({ base }), [navigation, base]);
7
+ const routePath = useSyncExternalStore(subscribe, read, read);
8
+ useEffect(() => navigation.installLinkInterceptor({ base }), [navigation, base]);
9
+ return routePath;
10
+ }
11
+ /** Mobile overlay state, independent of the Sidebar's persisted desktop rail state. */
12
+ export function useShellDrawer(args) {
13
+ const [open, setOpen] = useState(false);
14
+ useEffect(() => setOpen(false), [args.routePath]);
15
+ useEffect(() => {
16
+ if (!open)
17
+ return;
18
+ const onKeyDown = (event) => {
19
+ if (event.key === 'Escape')
20
+ setOpen(false);
21
+ };
22
+ document.addEventListener('keydown', onKeyDown);
23
+ return () => document.removeEventListener('keydown', onKeyDown);
24
+ }, [open]);
25
+ return { open, setOpen };
26
+ }
27
+ //# sourceMappingURL=AdminShell.hooks.js.map