@alneas/appkit-react 0.1.0 → 0.2.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 (659) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +85 -15
  3. package/consumer-ai/SKILL.md +12 -0
  4. package/consumer-ai/api-index.json +103754 -0
  5. package/consumer-ai/package-context.json +409 -0
  6. package/dist/ai/action/ExecutionHistory.cjs.map +1 -1
  7. package/dist/ai/action/ExecutionHistory.d.cts +32 -2
  8. package/dist/ai/action/ExecutionHistory.d.ts +32 -2
  9. package/dist/ai/action/ExecutionHistory.js.map +1 -1
  10. package/dist/ai/action/ScreenActionContext.cjs.map +1 -1
  11. package/dist/ai/action/ScreenActionContext.d.cts +15 -2
  12. package/dist/ai/action/ScreenActionContext.d.ts +15 -2
  13. package/dist/ai/action/ScreenActionContext.js.map +1 -1
  14. package/dist/ai/action/context.cjs.map +1 -1
  15. package/dist/ai/action/context.d.cts +19 -3
  16. package/dist/ai/action/context.d.ts +19 -3
  17. package/dist/ai/action/context.js.map +1 -1
  18. package/dist/ai/action/types.d.cts +35 -3
  19. package/dist/ai/action/types.d.ts +35 -3
  20. package/dist/ai/action/use-execution-session.cjs.map +1 -1
  21. package/dist/ai/action/use-execution-session.d.cts +17 -1
  22. package/dist/ai/action/use-execution-session.d.ts +17 -1
  23. package/dist/ai/action/use-execution-session.js.map +1 -1
  24. package/dist/ai/action/use-screen-action-registry.cjs.map +1 -1
  25. package/dist/ai/action/use-screen-action-registry.d.cts +77 -8
  26. package/dist/ai/action/use-screen-action-registry.d.ts +77 -8
  27. package/dist/ai/action/use-screen-action-registry.js.map +1 -1
  28. package/dist/ai/action/use-screen-action.cjs.map +1 -1
  29. package/dist/ai/action/use-screen-action.d.cts +23 -6
  30. package/dist/ai/action/use-screen-action.d.ts +23 -6
  31. package/dist/ai/action/use-screen-action.js.map +1 -1
  32. package/dist/ai/action/use-screen-context.cjs.map +1 -1
  33. package/dist/ai/action/use-screen-context.d.cts +42 -5
  34. package/dist/ai/action/use-screen-context.d.ts +42 -5
  35. package/dist/ai/action/use-screen-context.js.map +1 -1
  36. package/dist/ai/ai-chat/transport.cjs.map +1 -1
  37. package/dist/ai/ai-chat/transport.d.cts +35 -8
  38. package/dist/ai/ai-chat/transport.d.ts +35 -8
  39. package/dist/ai/ai-chat/transport.js.map +1 -1
  40. package/dist/ai/generative-ui/GenerativeUIRenderer.cjs.map +1 -1
  41. package/dist/ai/generative-ui/GenerativeUIRenderer.d.cts +21 -3
  42. package/dist/ai/generative-ui/GenerativeUIRenderer.d.ts +21 -3
  43. package/dist/ai/generative-ui/GenerativeUIRenderer.js.map +1 -1
  44. package/dist/ai/generative-ui/error-boundary.cjs.map +1 -1
  45. package/dist/ai/generative-ui/error-boundary.d.cts +98 -2
  46. package/dist/ai/generative-ui/error-boundary.d.ts +98 -2
  47. package/dist/ai/generative-ui/error-boundary.js.map +1 -1
  48. package/dist/ai/generative-ui/registry.cjs.map +1 -1
  49. package/dist/ai/generative-ui/registry.d.cts +96 -7
  50. package/dist/ai/generative-ui/registry.d.ts +96 -7
  51. package/dist/ai/generative-ui/registry.js.map +1 -1
  52. package/dist/ai/proposal/ProposalFieldReview.cjs.map +1 -1
  53. package/dist/ai/proposal/ProposalFieldReview.d.cts +170 -8
  54. package/dist/ai/proposal/ProposalFieldReview.d.ts +170 -8
  55. package/dist/ai/proposal/ProposalFieldReview.js.map +1 -1
  56. package/dist/ai/proposal/types.d.cts +97 -26
  57. package/dist/ai/proposal/types.d.ts +97 -26
  58. package/dist/ai/proposal/use-proposal-batch-review.cjs.map +1 -1
  59. package/dist/ai/proposal/use-proposal-batch-review.d.cts +133 -7
  60. package/dist/ai/proposal/use-proposal-batch-review.d.ts +133 -7
  61. package/dist/ai/proposal/use-proposal-batch-review.js.map +1 -1
  62. package/dist/ai/proposal/use-proposal-review.cjs.map +1 -1
  63. package/dist/ai/proposal/use-proposal-review.d.cts +47 -5
  64. package/dist/ai/proposal/use-proposal-review.d.ts +47 -5
  65. package/dist/ai/proposal/use-proposal-review.js.map +1 -1
  66. package/dist/avatar.svg +1 -0
  67. package/dist/consumer-ai/SKILL.md +6 -0
  68. package/dist/consumer-ai/api-index.json +103754 -0
  69. package/dist/consumer-ai/package-context.json +5 -3
  70. package/dist/mockServiceWorker.js +361 -0
  71. package/dist/styles.css +1 -1
  72. package/dist/tools/components/auth/AuthForms.cjs.map +1 -1
  73. package/dist/tools/components/auth/AuthForms.d.cts +131 -81
  74. package/dist/tools/components/auth/AuthForms.d.ts +131 -81
  75. package/dist/tools/components/auth/AuthForms.js.map +1 -1
  76. package/dist/tools/components/auth/AuthGuard.cjs.map +1 -1
  77. package/dist/tools/components/auth/AuthGuard.d.cts +31 -4
  78. package/dist/tools/components/auth/AuthGuard.d.ts +31 -4
  79. package/dist/tools/components/auth/AuthGuard.js.map +1 -1
  80. package/dist/tools/components/auth/AuthProvider.cjs.map +1 -1
  81. package/dist/tools/components/auth/AuthProvider.d.cts +39 -42
  82. package/dist/tools/components/auth/AuthProvider.d.ts +39 -42
  83. package/dist/tools/components/auth/AuthProvider.js.map +1 -1
  84. package/dist/tools/components/auth/ProtectedRoute.cjs.map +1 -1
  85. package/dist/tools/components/auth/ProtectedRoute.d.cts +75 -60
  86. package/dist/tools/components/auth/ProtectedRoute.d.ts +75 -60
  87. package/dist/tools/components/auth/ProtectedRoute.js.map +1 -1
  88. package/dist/tools/components/auth/SignInButton.cjs.map +1 -1
  89. package/dist/tools/components/auth/SignInButton.d.cts +26 -18
  90. package/dist/tools/components/auth/SignInButton.d.ts +26 -18
  91. package/dist/tools/components/auth/SignInButton.js.map +1 -1
  92. package/dist/tools/components/auth/UserProfileProvider.cjs.map +1 -1
  93. package/dist/tools/components/auth/UserProfileProvider.d.cts +48 -20
  94. package/dist/tools/components/auth/UserProfileProvider.d.ts +48 -20
  95. package/dist/tools/components/auth/UserProfileProvider.js.map +1 -1
  96. package/dist/tools/components/auth/adapters/better-auth-adapter.cjs.map +1 -1
  97. package/dist/tools/components/auth/adapters/better-auth-adapter.d.cts +371 -51
  98. package/dist/tools/components/auth/adapters/better-auth-adapter.d.ts +371 -51
  99. package/dist/tools/components/auth/adapters/better-auth-adapter.js.map +1 -1
  100. package/dist/tools/components/auth/adapters/mock-adapter.cjs.map +1 -1
  101. package/dist/tools/components/auth/adapters/mock-adapter.d.cts +149 -28
  102. package/dist/tools/components/auth/adapters/mock-adapter.d.ts +149 -28
  103. package/dist/tools/components/auth/adapters/mock-adapter.js.map +1 -1
  104. package/dist/tools/components/auth/auth-session.cjs.map +1 -1
  105. package/dist/tools/components/auth/auth-session.d.cts +147 -1
  106. package/dist/tools/components/auth/auth-session.d.ts +147 -1
  107. package/dist/tools/components/auth/auth-session.js.map +1 -1
  108. package/dist/tools/components/auth/session-cache.cjs.map +1 -1
  109. package/dist/tools/components/auth/session-cache.d.cts +88 -24
  110. package/dist/tools/components/auth/session-cache.d.ts +88 -24
  111. package/dist/tools/components/auth/session-cache.js.map +1 -1
  112. package/dist/tools/components/auth/types.cjs.map +1 -1
  113. package/dist/tools/components/auth/types.d.cts +329 -106
  114. package/dist/tools/components/auth/types.d.ts +329 -106
  115. package/dist/tools/components/auth/types.js.map +1 -1
  116. package/dist/tools/components/auth/useAuth.cjs.map +1 -1
  117. package/dist/tools/components/auth/useAuth.d.cts +110 -17
  118. package/dist/tools/components/auth/useAuth.d.ts +110 -17
  119. package/dist/tools/components/auth/useAuth.js.map +1 -1
  120. package/dist/tools/components/auth/useAuthGuard.cjs.map +1 -1
  121. package/dist/tools/components/auth/useAuthGuard.d.cts +49 -38
  122. package/dist/tools/components/auth/useAuthGuard.d.ts +49 -38
  123. package/dist/tools/components/auth/useAuthGuard.js.map +1 -1
  124. package/dist/tools/components/auth/useRoleCheck.cjs.map +1 -1
  125. package/dist/tools/components/auth/useRoleCheck.d.cts +48 -1
  126. package/dist/tools/components/auth/useRoleCheck.d.ts +48 -1
  127. package/dist/tools/components/auth/useRoleCheck.js.map +1 -1
  128. package/dist/tools/components/auth/useUserProfile.cjs.map +1 -1
  129. package/dist/tools/components/auth/useUserProfile.d.cts +66 -1
  130. package/dist/tools/components/auth/useUserProfile.d.ts +66 -1
  131. package/dist/tools/components/auth/useUserProfile.js.map +1 -1
  132. package/dist/tools/components/barcode/BarcodeGenerator.cjs.map +1 -1
  133. package/dist/tools/components/barcode/BarcodeGenerator.d.cts +32 -18
  134. package/dist/tools/components/barcode/BarcodeGenerator.d.ts +32 -18
  135. package/dist/tools/components/barcode/BarcodeGenerator.js.map +1 -1
  136. package/dist/tools/components/barcode/QRCodeGenerator.cjs +1 -1
  137. package/dist/tools/components/barcode/QRCodeGenerator.cjs.map +1 -1
  138. package/dist/tools/components/barcode/QRCodeGenerator.d.cts +20 -13
  139. package/dist/tools/components/barcode/QRCodeGenerator.d.ts +20 -13
  140. package/dist/tools/components/barcode/QRCodeGenerator.js +1 -1
  141. package/dist/tools/components/barcode/QRCodeGenerator.js.map +1 -1
  142. package/dist/tools/components/barcode/QRCodeScanner.cjs.map +1 -1
  143. package/dist/tools/components/barcode/QRCodeScanner.d.cts +32 -1
  144. package/dist/tools/components/barcode/QRCodeScanner.d.ts +32 -1
  145. package/dist/tools/components/barcode/QRCodeScanner.js.map +1 -1
  146. package/dist/tools/components/calendar/ResourceCalendar.cjs.map +1 -1
  147. package/dist/tools/components/calendar/ResourceCalendar.d.cts +17 -42
  148. package/dist/tools/components/calendar/ResourceCalendar.d.ts +17 -42
  149. package/dist/tools/components/calendar/ResourceCalendar.js.map +1 -1
  150. package/dist/tools/components/calendar/views/ResourceView.cjs +1 -1
  151. package/dist/tools/components/calendar/views/ResourceView.cjs.map +1 -1
  152. package/dist/tools/components/calendar/views/ResourceView.js +2 -2
  153. package/dist/tools/components/calendar/views/ResourceView.js.map +1 -1
  154. package/dist/tools/components/chart/ComposedChart.cjs.map +1 -1
  155. package/dist/tools/components/chart/ComposedChart.d.cts +54 -1
  156. package/dist/tools/components/chart/ComposedChart.d.ts +54 -1
  157. package/dist/tools/components/chart/ComposedChart.js.map +1 -1
  158. package/dist/tools/components/chart/SimpleAreaChart.cjs.map +1 -1
  159. package/dist/tools/components/chart/SimpleAreaChart.d.cts +41 -1
  160. package/dist/tools/components/chart/SimpleAreaChart.d.ts +41 -1
  161. package/dist/tools/components/chart/SimpleAreaChart.js.map +1 -1
  162. package/dist/tools/components/chart/SimpleBarChart.cjs.map +1 -1
  163. package/dist/tools/components/chart/SimpleBarChart.d.cts +34 -24
  164. package/dist/tools/components/chart/SimpleBarChart.d.ts +34 -24
  165. package/dist/tools/components/chart/SimpleBarChart.js.map +1 -1
  166. package/dist/tools/components/chart/SimpleLineChart.cjs.map +1 -1
  167. package/dist/tools/components/chart/SimpleLineChart.d.cts +31 -28
  168. package/dist/tools/components/chart/SimpleLineChart.d.ts +31 -28
  169. package/dist/tools/components/chart/SimpleLineChart.js.map +1 -1
  170. package/dist/tools/components/chart/SimplePieChart.cjs.map +1 -1
  171. package/dist/tools/components/chart/SimplePieChart.d.cts +28 -22
  172. package/dist/tools/components/chart/SimplePieChart.d.ts +28 -22
  173. package/dist/tools/components/chart/SimplePieChart.js.map +1 -1
  174. package/dist/tools/components/chart/SimpleRadarChart.cjs.map +1 -1
  175. package/dist/tools/components/chart/SimpleRadarChart.d.cts +38 -1
  176. package/dist/tools/components/chart/SimpleRadarChart.d.ts +38 -1
  177. package/dist/tools/components/chart/SimpleRadarChart.js.map +1 -1
  178. package/dist/tools/components/chart/SimpleScatterChart.cjs.map +1 -1
  179. package/dist/tools/components/chart/SimpleScatterChart.d.cts +44 -1
  180. package/dist/tools/components/chart/SimpleScatterChart.d.ts +44 -1
  181. package/dist/tools/components/chart/SimpleScatterChart.js.map +1 -1
  182. package/dist/tools/components/chart/StackedBarChart.cjs.map +1 -1
  183. package/dist/tools/components/chart/StackedBarChart.d.cts +38 -1
  184. package/dist/tools/components/chart/StackedBarChart.d.ts +38 -1
  185. package/dist/tools/components/chart/StackedBarChart.js.map +1 -1
  186. package/dist/tools/components/data-table/data-table.cjs +1 -1
  187. package/dist/tools/components/data-table/data-table.cjs.map +1 -1
  188. package/dist/tools/components/data-table/data-table.js +286 -263
  189. package/dist/tools/components/data-table/data-table.js.map +1 -1
  190. package/dist/tools/components/data-table/table-utils.cjs.map +1 -1
  191. package/dist/tools/components/data-table/table-utils.d.cts +45 -35
  192. package/dist/tools/components/data-table/table-utils.d.ts +45 -35
  193. package/dist/tools/components/data-table/table-utils.js.map +1 -1
  194. package/dist/tools/components/editable-table/editable-table.cjs +1 -1
  195. package/dist/tools/components/editable-table/editable-table.cjs.map +1 -1
  196. package/dist/tools/components/editable-table/editable-table.js +15 -2
  197. package/dist/tools/components/editable-table/editable-table.js.map +1 -1
  198. package/dist/tools/components/error/ErrorDialog.cjs +1 -1
  199. package/dist/tools/components/error/ErrorDialog.cjs.map +1 -1
  200. package/dist/tools/components/error/ErrorDialog.js +1 -1
  201. package/dist/tools/components/error/ErrorDialog.js.map +1 -1
  202. package/dist/tools/components/error/ErrorInline.cjs +1 -1
  203. package/dist/tools/components/error/ErrorInline.cjs.map +1 -1
  204. package/dist/tools/components/error/ErrorInline.js +1 -1
  205. package/dist/tools/components/error/ErrorInline.js.map +1 -1
  206. package/dist/tools/components/error/ErrorNotification.cjs +1 -1
  207. package/dist/tools/components/error/ErrorNotification.cjs.map +1 -1
  208. package/dist/tools/components/error/ErrorNotification.js +10 -10
  209. package/dist/tools/components/error/ErrorNotification.js.map +1 -1
  210. package/dist/tools/components/file-browser/FilePreview.cjs +1 -1
  211. package/dist/tools/components/file-browser/FilePreview.cjs.map +1 -1
  212. package/dist/tools/components/file-browser/FilePreview.js +28 -26
  213. package/dist/tools/components/file-browser/FilePreview.js.map +1 -1
  214. package/dist/tools/components/filter/filter.cjs.map +1 -1
  215. package/dist/tools/components/filter/filter.d.cts +23 -34
  216. package/dist/tools/components/filter/filter.d.ts +23 -34
  217. package/dist/tools/components/filter/filter.js.map +1 -1
  218. package/dist/tools/components/form/EnhancedDetailPage.cjs.map +1 -1
  219. package/dist/tools/components/form/EnhancedDetailPage.d.cts +47 -42
  220. package/dist/tools/components/form/EnhancedDetailPage.d.ts +47 -42
  221. package/dist/tools/components/form/EnhancedDetailPage.js.map +1 -1
  222. package/dist/tools/components/form/form-grid.cjs.map +1 -1
  223. package/dist/tools/components/form/form-grid.d.cts +44 -22
  224. package/dist/tools/components/form/form-grid.d.ts +44 -22
  225. package/dist/tools/components/form/form-grid.js.map +1 -1
  226. package/dist/tools/components/gantt/GanttChart.cjs +1 -1
  227. package/dist/tools/components/gantt/GanttChart.cjs.map +1 -1
  228. package/dist/tools/components/gantt/GanttChart.d.cts +20 -1
  229. package/dist/tools/components/gantt/GanttChart.d.ts +20 -1
  230. package/dist/tools/components/gantt/GanttChart.js +3 -0
  231. package/dist/tools/components/gantt/GanttChart.js.map +1 -1
  232. package/dist/tools/components/gantt/components/GanttTaskBar.cjs +1 -1
  233. package/dist/tools/components/gantt/components/GanttTaskBar.cjs.map +1 -1
  234. package/dist/tools/components/gantt/components/GanttTaskBar.js +2 -1
  235. package/dist/tools/components/gantt/components/GanttTaskBar.js.map +1 -1
  236. package/dist/tools/components/header/header.cjs +1 -1
  237. package/dist/tools/components/header/header.cjs.map +1 -1
  238. package/dist/tools/components/header/header.d.cts +103 -40
  239. package/dist/tools/components/header/header.d.ts +103 -40
  240. package/dist/tools/components/header/header.js +1 -1
  241. package/dist/tools/components/header/header.js.map +1 -1
  242. package/dist/tools/components/i18n/LanguageSwitcher.cjs.map +1 -1
  243. package/dist/tools/components/i18n/LanguageSwitcher.d.cts +18 -14
  244. package/dist/tools/components/i18n/LanguageSwitcher.d.ts +18 -14
  245. package/dist/tools/components/i18n/LanguageSwitcher.js.map +1 -1
  246. package/dist/tools/components/kanban/KanbanBoard.cjs +1 -1
  247. package/dist/tools/components/kanban/KanbanBoard.cjs.map +1 -1
  248. package/dist/tools/components/kanban/KanbanBoard.d.cts +16 -34
  249. package/dist/tools/components/kanban/KanbanBoard.d.ts +16 -34
  250. package/dist/tools/components/kanban/KanbanBoard.js +3 -0
  251. package/dist/tools/components/kanban/KanbanBoard.js.map +1 -1
  252. package/dist/tools/components/kanban/KanbanColumn.cjs +1 -1
  253. package/dist/tools/components/kanban/KanbanColumn.cjs.map +1 -1
  254. package/dist/tools/components/kanban/KanbanColumn.js +1 -1
  255. package/dist/tools/components/kanban/KanbanColumn.js.map +1 -1
  256. package/dist/tools/components/kanban/kanban-compound.cjs +1 -1
  257. package/dist/tools/components/kanban/kanban-compound.cjs.map +1 -1
  258. package/dist/tools/components/kanban/kanban-compound.js +4 -1
  259. package/dist/tools/components/kanban/kanban-compound.js.map +1 -1
  260. package/dist/tools/components/kanban/kanban-primitives.cjs +1 -1
  261. package/dist/tools/components/kanban/kanban-primitives.cjs.map +1 -1
  262. package/dist/tools/components/kanban/kanban-primitives.js +0 -1
  263. package/dist/tools/components/kanban/kanban-primitives.js.map +1 -1
  264. package/dist/tools/components/priority-queue/PriorityCard.cjs +1 -1
  265. package/dist/tools/components/priority-queue/PriorityCard.cjs.map +1 -1
  266. package/dist/tools/components/priority-queue/PriorityCard.js +3 -1
  267. package/dist/tools/components/priority-queue/PriorityCard.js.map +1 -1
  268. package/dist/tools/components/sidebar/SmartSidebar.cjs.map +1 -1
  269. package/dist/tools/components/sidebar/SmartSidebar.d.cts +41 -43
  270. package/dist/tools/components/sidebar/SmartSidebar.d.ts +41 -43
  271. package/dist/tools/components/sidebar/SmartSidebar.js.map +1 -1
  272. package/dist/tools/components/splash/SplashScreen.cjs.map +1 -1
  273. package/dist/tools/components/splash/SplashScreen.d.cts +43 -68
  274. package/dist/tools/components/splash/SplashScreen.d.ts +43 -68
  275. package/dist/tools/components/splash/SplashScreen.js.map +1 -1
  276. package/dist/tools/components/workflow/WorkflowStatusPanel.cjs +1 -1
  277. package/dist/tools/components/workflow/WorkflowStatusPanel.cjs.map +1 -1
  278. package/dist/tools/components/workflow/WorkflowStatusPanel.js +2 -2
  279. package/dist/tools/components/workflow/WorkflowStatusPanel.js.map +1 -1
  280. package/dist/tools/lib/data-access/data-access-context.cjs.map +1 -1
  281. package/dist/tools/lib/data-access/data-access-context.d.cts +15 -6
  282. package/dist/tools/lib/data-access/data-access-context.d.ts +15 -6
  283. package/dist/tools/lib/data-access/data-access-context.js.map +1 -1
  284. package/dist/tools/lib/data-access/react-query-provider.cjs.map +1 -1
  285. package/dist/tools/lib/data-access/react-query-provider.d.cts +19 -2
  286. package/dist/tools/lib/data-access/react-query-provider.d.ts +19 -2
  287. package/dist/tools/lib/data-access/react-query-provider.js.map +1 -1
  288. package/dist/tools/lib/data-access/react-query.cjs.map +1 -1
  289. package/dist/tools/lib/data-access/react-query.d.cts +365 -90
  290. package/dist/tools/lib/data-access/react-query.d.ts +365 -90
  291. package/dist/tools/lib/data-access/react-query.js.map +1 -1
  292. package/dist/tools/lib/error/AppError.cjs.map +1 -1
  293. package/dist/tools/lib/error/AppError.d.cts +157 -63
  294. package/dist/tools/lib/error/AppError.d.ts +157 -63
  295. package/dist/tools/lib/error/AppError.js.map +1 -1
  296. package/dist/tools/lib/hooks/useAsyncWithTimeout.cjs.map +1 -1
  297. package/dist/tools/lib/hooks/useAsyncWithTimeout.d.cts +79 -26
  298. package/dist/tools/lib/hooks/useAsyncWithTimeout.d.ts +79 -26
  299. package/dist/tools/lib/hooks/useAsyncWithTimeout.js.map +1 -1
  300. package/dist/tools/lib/hooks/useError.cjs.map +1 -1
  301. package/dist/tools/lib/hooks/useError.d.cts +51 -16
  302. package/dist/tools/lib/hooks/useError.d.ts +51 -16
  303. package/dist/tools/lib/hooks/useError.js.map +1 -1
  304. package/dist/tools/lib/schema/ajv.cjs +1 -1
  305. package/dist/tools/lib/schema/ajv.cjs.map +1 -1
  306. package/dist/tools/lib/schema/ajv.d.cts +19 -8
  307. package/dist/tools/lib/schema/ajv.d.ts +19 -8
  308. package/dist/tools/lib/schema/ajv.js +2 -1
  309. package/dist/tools/lib/schema/ajv.js.map +1 -1
  310. package/dist/tools/lib/state/error-store.cjs.map +1 -1
  311. package/dist/tools/lib/state/error-store.d.cts +61 -10
  312. package/dist/tools/lib/state/error-store.d.ts +61 -10
  313. package/dist/tools/lib/state/error-store.js.map +1 -1
  314. package/dist/tools/lib/state/store-factory.cjs.map +1 -1
  315. package/dist/tools/lib/state/store-factory.d.cts +25 -4
  316. package/dist/tools/lib/state/store-factory.d.ts +25 -4
  317. package/dist/tools/lib/state/store-factory.js.map +1 -1
  318. package/dist/tools/lib/state/ui-store.cjs.map +1 -1
  319. package/dist/tools/lib/state/ui-store.d.cts +39 -0
  320. package/dist/tools/lib/state/ui-store.d.ts +39 -0
  321. package/dist/tools/lib/state/ui-store.js.map +1 -1
  322. package/dist/ui/components/theme/theme-context.cjs.map +1 -1
  323. package/dist/ui/components/theme/theme-context.d.cts +171 -1
  324. package/dist/ui/components/theme/theme-context.d.ts +171 -1
  325. package/dist/ui/components/theme/theme-context.js.map +1 -1
  326. package/dist/ui/components/theme/theme-provider.cjs.map +1 -1
  327. package/dist/ui/components/theme/theme-provider.d.cts +31 -19
  328. package/dist/ui/components/theme/theme-provider.d.ts +31 -19
  329. package/dist/ui/components/theme/theme-provider.js.map +1 -1
  330. package/dist/ui/components/theme/theme-script.cjs.map +1 -1
  331. package/dist/ui/components/theme/theme-script.d.cts +16 -1
  332. package/dist/ui/components/theme/theme-script.d.ts +16 -1
  333. package/dist/ui/components/theme/theme-script.js.map +1 -1
  334. package/dist/ui/components/theme/theme-switcher.cjs +1 -1
  335. package/dist/ui/components/theme/theme-switcher.cjs.map +1 -1
  336. package/dist/ui/components/theme/theme-switcher.d.cts +82 -13
  337. package/dist/ui/components/theme/theme-switcher.d.ts +82 -13
  338. package/dist/ui/components/theme/theme-switcher.js +8 -0
  339. package/dist/ui/components/theme/theme-switcher.js.map +1 -1
  340. package/dist/ui/components/ui/accordion.cjs.map +1 -1
  341. package/dist/ui/components/ui/accordion.d.cts +60 -0
  342. package/dist/ui/components/ui/accordion.d.ts +60 -0
  343. package/dist/ui/components/ui/accordion.js.map +1 -1
  344. package/dist/ui/components/ui/adjustable-pane.cjs.map +1 -1
  345. package/dist/ui/components/ui/adjustable-pane.d.cts +44 -26
  346. package/dist/ui/components/ui/adjustable-pane.d.ts +44 -26
  347. package/dist/ui/components/ui/adjustable-pane.js.map +1 -1
  348. package/dist/ui/components/ui/alert-dialog.cjs.map +1 -1
  349. package/dist/ui/components/ui/alert-dialog.d.cts +179 -2
  350. package/dist/ui/components/ui/alert-dialog.d.ts +179 -2
  351. package/dist/ui/components/ui/alert-dialog.js.map +1 -1
  352. package/dist/ui/components/ui/alert.cjs.map +1 -1
  353. package/dist/ui/components/ui/alert.d.cts +52 -4
  354. package/dist/ui/components/ui/alert.d.ts +52 -4
  355. package/dist/ui/components/ui/alert.js.map +1 -1
  356. package/dist/ui/components/ui/aspect-ratio.cjs.map +1 -1
  357. package/dist/ui/components/ui/aspect-ratio.d.cts +16 -1
  358. package/dist/ui/components/ui/aspect-ratio.d.ts +16 -1
  359. package/dist/ui/components/ui/aspect-ratio.js.map +1 -1
  360. package/dist/ui/components/ui/avatar.cjs.map +1 -1
  361. package/dist/ui/components/ui/avatar.d.cts +87 -3
  362. package/dist/ui/components/ui/avatar.d.ts +87 -3
  363. package/dist/ui/components/ui/avatar.js.map +1 -1
  364. package/dist/ui/components/ui/badge-components.cjs.map +1 -1
  365. package/dist/ui/components/ui/badge-components.d.cts +13 -1
  366. package/dist/ui/components/ui/badge-components.d.ts +13 -1
  367. package/dist/ui/components/ui/badge-components.js.map +1 -1
  368. package/dist/ui/components/ui/badge-variants.cjs.map +1 -1
  369. package/dist/ui/components/ui/badge-variants.d.cts +15 -0
  370. package/dist/ui/components/ui/badge-variants.d.ts +15 -0
  371. package/dist/ui/components/ui/badge-variants.js.map +1 -1
  372. package/dist/ui/components/ui/breadcrumb.cjs.map +1 -1
  373. package/dist/ui/components/ui/breadcrumb.d.cts +91 -7
  374. package/dist/ui/components/ui/breadcrumb.d.ts +91 -7
  375. package/dist/ui/components/ui/breadcrumb.js.map +1 -1
  376. package/dist/ui/components/ui/button-components.cjs.map +1 -1
  377. package/dist/ui/components/ui/button-components.d.cts +18 -6
  378. package/dist/ui/components/ui/button-components.d.ts +18 -6
  379. package/dist/ui/components/ui/button-components.js.map +1 -1
  380. package/dist/ui/components/ui/button-group-components.cjs.map +1 -1
  381. package/dist/ui/components/ui/button-group-components.d.cts +39 -3
  382. package/dist/ui/components/ui/button-group-components.d.ts +39 -3
  383. package/dist/ui/components/ui/button-group-components.js.map +1 -1
  384. package/dist/ui/components/ui/button-group-variants.cjs.map +1 -1
  385. package/dist/ui/components/ui/button-group-variants.d.cts +15 -0
  386. package/dist/ui/components/ui/button-group-variants.d.ts +15 -0
  387. package/dist/ui/components/ui/button-group-variants.js.map +1 -1
  388. package/dist/ui/components/ui/button-variants.cjs.map +1 -1
  389. package/dist/ui/components/ui/button-variants.d.cts +13 -2
  390. package/dist/ui/components/ui/button-variants.d.ts +13 -2
  391. package/dist/ui/components/ui/button-variants.js.map +1 -1
  392. package/dist/ui/components/ui/card.cjs.map +1 -1
  393. package/dist/ui/components/ui/card.d.cts +106 -2
  394. package/dist/ui/components/ui/card.d.ts +106 -2
  395. package/dist/ui/components/ui/card.js.map +1 -1
  396. package/dist/ui/components/ui/checkbox-group.cjs.map +1 -1
  397. package/dist/ui/components/ui/checkbox-group.d.cts +13 -1
  398. package/dist/ui/components/ui/checkbox-group.d.ts +13 -1
  399. package/dist/ui/components/ui/checkbox-group.js.map +1 -1
  400. package/dist/ui/components/ui/checkbox.cjs.map +1 -1
  401. package/dist/ui/components/ui/checkbox.d.cts +17 -6
  402. package/dist/ui/components/ui/checkbox.d.ts +17 -6
  403. package/dist/ui/components/ui/checkbox.js.map +1 -1
  404. package/dist/ui/components/ui/collapsible.cjs.map +1 -1
  405. package/dist/ui/components/ui/collapsible.d.cts +39 -3
  406. package/dist/ui/components/ui/collapsible.d.ts +39 -3
  407. package/dist/ui/components/ui/collapsible.js.map +1 -1
  408. package/dist/ui/components/ui/combobox-components.cjs.map +1 -1
  409. package/dist/ui/components/ui/combobox-components.d.cts +209 -14
  410. package/dist/ui/components/ui/combobox-components.d.ts +209 -14
  411. package/dist/ui/components/ui/combobox-components.js.map +1 -1
  412. package/dist/ui/components/ui/combobox-hooks.cjs.map +1 -1
  413. package/dist/ui/components/ui/combobox-hooks.d.cts +13 -1
  414. package/dist/ui/components/ui/combobox-hooks.d.ts +13 -1
  415. package/dist/ui/components/ui/combobox-hooks.js.map +1 -1
  416. package/dist/ui/components/ui/command.cjs.map +1 -1
  417. package/dist/ui/components/ui/command.d.cts +132 -9
  418. package/dist/ui/components/ui/command.d.ts +132 -9
  419. package/dist/ui/components/ui/command.js.map +1 -1
  420. package/dist/ui/components/ui/context-menu.cjs.map +1 -1
  421. package/dist/ui/components/ui/context-menu.d.cts +233 -2
  422. package/dist/ui/components/ui/context-menu.d.ts +233 -2
  423. package/dist/ui/components/ui/context-menu.js.map +1 -1
  424. package/dist/ui/components/ui/dialog.cjs.map +1 -1
  425. package/dist/ui/components/ui/dialog.d.cts +157 -5
  426. package/dist/ui/components/ui/dialog.d.ts +157 -5
  427. package/dist/ui/components/ui/dialog.js.map +1 -1
  428. package/dist/ui/components/ui/drawer.cjs.map +1 -1
  429. package/dist/ui/components/ui/drawer.d.cts +130 -10
  430. package/dist/ui/components/ui/drawer.d.ts +130 -10
  431. package/dist/ui/components/ui/drawer.js.map +1 -1
  432. package/dist/ui/components/ui/dropdown-menu.cjs.map +1 -1
  433. package/dist/ui/components/ui/dropdown-menu.d.cts +225 -6
  434. package/dist/ui/components/ui/dropdown-menu.d.ts +225 -6
  435. package/dist/ui/components/ui/dropdown-menu.js.map +1 -1
  436. package/dist/ui/components/ui/empty.cjs.map +1 -1
  437. package/dist/ui/components/ui/empty.d.cts +78 -6
  438. package/dist/ui/components/ui/empty.d.ts +78 -6
  439. package/dist/ui/components/ui/empty.js.map +1 -1
  440. package/dist/ui/components/ui/field.cjs.map +1 -1
  441. package/dist/ui/components/ui/field.d.cts +180 -6
  442. package/dist/ui/components/ui/field.d.ts +180 -6
  443. package/dist/ui/components/ui/field.js.map +1 -1
  444. package/dist/ui/components/ui/file-icon.cjs.map +1 -1
  445. package/dist/ui/components/ui/file-icon.d.cts +32 -4
  446. package/dist/ui/components/ui/file-icon.d.ts +32 -4
  447. package/dist/ui/components/ui/file-icon.js.map +1 -1
  448. package/dist/ui/components/ui/hover-card.cjs.map +1 -1
  449. package/dist/ui/components/ui/hover-card.d.cts +39 -3
  450. package/dist/ui/components/ui/hover-card.d.ts +39 -3
  451. package/dist/ui/components/ui/hover-card.js.map +1 -1
  452. package/dist/ui/components/ui/input-group.cjs.map +1 -1
  453. package/dist/ui/components/ui/input-group.d.cts +84 -6
  454. package/dist/ui/components/ui/input-group.d.ts +84 -6
  455. package/dist/ui/components/ui/input-group.js.map +1 -1
  456. package/dist/ui/components/ui/input-otp.cjs.map +1 -1
  457. package/dist/ui/components/ui/input-otp.d.cts +58 -4
  458. package/dist/ui/components/ui/input-otp.d.ts +58 -4
  459. package/dist/ui/components/ui/input-otp.js.map +1 -1
  460. package/dist/ui/components/ui/input.cjs.map +1 -1
  461. package/dist/ui/components/ui/input.d.cts +18 -10
  462. package/dist/ui/components/ui/input.d.ts +18 -10
  463. package/dist/ui/components/ui/input.js.map +1 -1
  464. package/dist/ui/components/ui/item.cjs.map +1 -1
  465. package/dist/ui/components/ui/item.d.cts +130 -10
  466. package/dist/ui/components/ui/item.d.ts +130 -10
  467. package/dist/ui/components/ui/item.js.map +1 -1
  468. package/dist/ui/components/ui/kbd.cjs.map +1 -1
  469. package/dist/ui/components/ui/kbd.d.cts +26 -2
  470. package/dist/ui/components/ui/kbd.d.ts +26 -2
  471. package/dist/ui/components/ui/kbd.js.map +1 -1
  472. package/dist/ui/components/ui/label.cjs.map +1 -1
  473. package/dist/ui/components/ui/label.d.cts +15 -0
  474. package/dist/ui/components/ui/label.d.ts +15 -0
  475. package/dist/ui/components/ui/label.js.map +1 -1
  476. package/dist/ui/components/ui/layout.cjs +1 -1
  477. package/dist/ui/components/ui/layout.cjs.map +1 -1
  478. package/dist/ui/components/ui/layout.d.cts +45 -11
  479. package/dist/ui/components/ui/layout.d.ts +45 -11
  480. package/dist/ui/components/ui/layout.js +22 -20
  481. package/dist/ui/components/ui/layout.js.map +1 -1
  482. package/dist/ui/components/ui/menubar.cjs.map +1 -1
  483. package/dist/ui/components/ui/menubar.d.cts +220 -16
  484. package/dist/ui/components/ui/menubar.d.ts +220 -16
  485. package/dist/ui/components/ui/menubar.js.map +1 -1
  486. package/dist/ui/components/ui/meter.cjs.map +1 -1
  487. package/dist/ui/components/ui/meter.d.cts +52 -4
  488. package/dist/ui/components/ui/meter.d.ts +52 -4
  489. package/dist/ui/components/ui/meter.js.map +1 -1
  490. package/dist/ui/components/ui/mobile-form-variants.cjs.map +1 -1
  491. package/dist/ui/components/ui/mobile-form-variants.d.cts +30 -0
  492. package/dist/ui/components/ui/mobile-form-variants.d.ts +30 -0
  493. package/dist/ui/components/ui/mobile-form-variants.js.map +1 -1
  494. package/dist/ui/components/ui/mobile-form.cjs.map +1 -1
  495. package/dist/ui/components/ui/mobile-form.d.cts +186 -9
  496. package/dist/ui/components/ui/mobile-form.d.ts +186 -9
  497. package/dist/ui/components/ui/mobile-form.js.map +1 -1
  498. package/dist/ui/components/ui/navigation-menu-components.cjs.map +1 -1
  499. package/dist/ui/components/ui/navigation-menu-components.d.cts +104 -8
  500. package/dist/ui/components/ui/navigation-menu-components.d.ts +104 -8
  501. package/dist/ui/components/ui/navigation-menu-components.js.map +1 -1
  502. package/dist/ui/components/ui/navigation-menu-variants.cjs.map +1 -1
  503. package/dist/ui/components/ui/navigation-menu-variants.d.cts +15 -0
  504. package/dist/ui/components/ui/navigation-menu-variants.d.ts +15 -0
  505. package/dist/ui/components/ui/navigation-menu-variants.js.map +1 -1
  506. package/dist/ui/components/ui/number-field.cjs.map +1 -1
  507. package/dist/ui/components/ui/number-field.d.cts +78 -6
  508. package/dist/ui/components/ui/number-field.d.ts +78 -6
  509. package/dist/ui/components/ui/number-field.js.map +1 -1
  510. package/dist/ui/components/ui/pagination.cjs.map +1 -1
  511. package/dist/ui/components/ui/pagination.d.cts +99 -7
  512. package/dist/ui/components/ui/pagination.d.ts +99 -7
  513. package/dist/ui/components/ui/pagination.js.map +1 -1
  514. package/dist/ui/components/ui/password-input.cjs.map +1 -1
  515. package/dist/ui/components/ui/password-input.d.cts +10 -7
  516. package/dist/ui/components/ui/password-input.d.ts +10 -7
  517. package/dist/ui/components/ui/password-input.js.map +1 -1
  518. package/dist/ui/components/ui/popover.cjs.map +1 -1
  519. package/dist/ui/components/ui/popover.d.cts +86 -2
  520. package/dist/ui/components/ui/popover.d.ts +86 -2
  521. package/dist/ui/components/ui/popover.js.map +1 -1
  522. package/dist/ui/components/ui/progress.cjs.map +1 -1
  523. package/dist/ui/components/ui/progress.d.cts +72 -2
  524. package/dist/ui/components/ui/progress.d.ts +72 -2
  525. package/dist/ui/components/ui/progress.js.map +1 -1
  526. package/dist/ui/components/ui/radio-card.cjs.map +1 -1
  527. package/dist/ui/components/ui/radio-card.d.cts +32 -4
  528. package/dist/ui/components/ui/radio-card.d.ts +32 -4
  529. package/dist/ui/components/ui/radio-card.js.map +1 -1
  530. package/dist/ui/components/ui/radio-group.cjs.map +1 -1
  531. package/dist/ui/components/ui/radio-group.d.cts +28 -2
  532. package/dist/ui/components/ui/radio-group.d.ts +28 -2
  533. package/dist/ui/components/ui/radio-group.js.map +1 -1
  534. package/dist/ui/components/ui/resizable.cjs.map +1 -1
  535. package/dist/ui/components/ui/resizable.d.cts +42 -3
  536. package/dist/ui/components/ui/resizable.d.ts +42 -3
  537. package/dist/ui/components/ui/resizable.js.map +1 -1
  538. package/dist/ui/components/ui/responsive-list.cjs.map +1 -1
  539. package/dist/ui/components/ui/responsive-list.d.cts +176 -13
  540. package/dist/ui/components/ui/responsive-list.d.ts +176 -13
  541. package/dist/ui/components/ui/responsive-list.js.map +1 -1
  542. package/dist/ui/components/ui/scroll-area.cjs.map +1 -1
  543. package/dist/ui/components/ui/scroll-area.d.cts +28 -1
  544. package/dist/ui/components/ui/scroll-area.d.ts +28 -1
  545. package/dist/ui/components/ui/scroll-area.js.map +1 -1
  546. package/dist/ui/components/ui/searchable-select-input.cjs.map +1 -1
  547. package/dist/ui/components/ui/searchable-select-input.d.cts +199 -49
  548. package/dist/ui/components/ui/searchable-select-input.d.ts +199 -49
  549. package/dist/ui/components/ui/searchable-select-input.js.map +1 -1
  550. package/dist/ui/components/ui/select.cjs.map +1 -1
  551. package/dist/ui/components/ui/select.d.cts +205 -40
  552. package/dist/ui/components/ui/select.d.ts +205 -40
  553. package/dist/ui/components/ui/select.js.map +1 -1
  554. package/dist/ui/components/ui/separator.cjs.map +1 -1
  555. package/dist/ui/components/ui/separator.d.cts +13 -2
  556. package/dist/ui/components/ui/separator.d.ts +13 -2
  557. package/dist/ui/components/ui/separator.js.map +1 -1
  558. package/dist/ui/components/ui/sheet.cjs.map +1 -1
  559. package/dist/ui/components/ui/sheet.d.cts +128 -3
  560. package/dist/ui/components/ui/sheet.d.ts +128 -3
  561. package/dist/ui/components/ui/sheet.js.map +1 -1
  562. package/dist/ui/components/ui/skeleton.cjs.map +1 -1
  563. package/dist/ui/components/ui/skeleton.d.cts +13 -1
  564. package/dist/ui/components/ui/skeleton.d.ts +13 -1
  565. package/dist/ui/components/ui/skeleton.js.map +1 -1
  566. package/dist/ui/components/ui/slider.cjs.map +1 -1
  567. package/dist/ui/components/ui/slider.d.cts +13 -7
  568. package/dist/ui/components/ui/slider.d.ts +13 -7
  569. package/dist/ui/components/ui/slider.js.map +1 -1
  570. package/dist/ui/components/ui/spinner.cjs.map +1 -1
  571. package/dist/ui/components/ui/spinner.d.cts +13 -1
  572. package/dist/ui/components/ui/spinner.d.ts +13 -1
  573. package/dist/ui/components/ui/spinner.js.map +1 -1
  574. package/dist/ui/components/ui/switch.cjs.map +1 -1
  575. package/dist/ui/components/ui/switch.d.cts +26 -0
  576. package/dist/ui/components/ui/switch.d.ts +26 -0
  577. package/dist/ui/components/ui/switch.js.map +1 -1
  578. package/dist/ui/components/ui/table.cjs.map +1 -1
  579. package/dist/ui/components/ui/table.d.cts +118 -2
  580. package/dist/ui/components/ui/table.d.ts +118 -2
  581. package/dist/ui/components/ui/table.js.map +1 -1
  582. package/dist/ui/components/ui/tabs-components.cjs.map +1 -1
  583. package/dist/ui/components/ui/tabs-components.d.cts +52 -5
  584. package/dist/ui/components/ui/tabs-components.d.ts +52 -5
  585. package/dist/ui/components/ui/tabs-components.js.map +1 -1
  586. package/dist/ui/components/ui/tabs-variants.cjs.map +1 -1
  587. package/dist/ui/components/ui/tabs-variants.d.cts +15 -0
  588. package/dist/ui/components/ui/tabs-variants.d.ts +15 -0
  589. package/dist/ui/components/ui/tabs-variants.js.map +1 -1
  590. package/dist/ui/components/ui/textarea.cjs.map +1 -1
  591. package/dist/ui/components/ui/textarea.d.cts +23 -0
  592. package/dist/ui/components/ui/textarea.d.ts +23 -0
  593. package/dist/ui/components/ui/textarea.js.map +1 -1
  594. package/dist/ui/components/ui/toast.cjs.map +1 -1
  595. package/dist/ui/components/ui/toast.d.cts +136 -0
  596. package/dist/ui/components/ui/toast.d.ts +136 -0
  597. package/dist/ui/components/ui/toast.js.map +1 -1
  598. package/dist/ui/components/ui/toaster.cjs.map +1 -1
  599. package/dist/ui/components/ui/toaster.d.cts +12 -3
  600. package/dist/ui/components/ui/toaster.d.ts +12 -3
  601. package/dist/ui/components/ui/toaster.js.map +1 -1
  602. package/dist/ui/components/ui/toggle-components.cjs.map +1 -1
  603. package/dist/ui/components/ui/toggle-components.d.cts +15 -0
  604. package/dist/ui/components/ui/toggle-components.d.ts +15 -0
  605. package/dist/ui/components/ui/toggle-components.js.map +1 -1
  606. package/dist/ui/components/ui/toggle-group.cjs.map +1 -1
  607. package/dist/ui/components/ui/toggle-group.d.cts +33 -0
  608. package/dist/ui/components/ui/toggle-group.d.ts +33 -0
  609. package/dist/ui/components/ui/toggle-group.js.map +1 -1
  610. package/dist/ui/components/ui/toggle-variants.cjs.map +1 -1
  611. package/dist/ui/components/ui/toggle-variants.d.cts +15 -0
  612. package/dist/ui/components/ui/toggle-variants.d.ts +15 -0
  613. package/dist/ui/components/ui/toggle-variants.js.map +1 -1
  614. package/dist/ui/components/ui/toolbar.cjs.map +1 -1
  615. package/dist/ui/components/ui/toolbar.d.cts +94 -7
  616. package/dist/ui/components/ui/toolbar.d.ts +94 -7
  617. package/dist/ui/components/ui/toolbar.js.map +1 -1
  618. package/dist/ui/components/ui/tooltip.cjs.map +1 -1
  619. package/dist/ui/components/ui/tooltip.d.cts +54 -3
  620. package/dist/ui/components/ui/tooltip.d.ts +54 -3
  621. package/dist/ui/components/ui/tooltip.js.map +1 -1
  622. package/dist/ui/lib/hooks/use-gps.cjs.map +1 -1
  623. package/dist/ui/lib/hooks/use-gps.d.cts +29 -4
  624. package/dist/ui/lib/hooks/use-gps.d.ts +29 -4
  625. package/dist/ui/lib/hooks/use-gps.js.map +1 -1
  626. package/dist/ui/lib/hooks/use-is-client.cjs.map +1 -1
  627. package/dist/ui/lib/hooks/use-is-client.d.cts +11 -2
  628. package/dist/ui/lib/hooks/use-is-client.d.ts +11 -2
  629. package/dist/ui/lib/hooks/use-is-client.js.map +1 -1
  630. package/dist/ui/lib/hooks/use-keyboard-shortcut.cjs.map +1 -1
  631. package/dist/ui/lib/hooks/use-keyboard-shortcut.d.cts +48 -18
  632. package/dist/ui/lib/hooks/use-keyboard-shortcut.d.ts +48 -18
  633. package/dist/ui/lib/hooks/use-keyboard-shortcut.js.map +1 -1
  634. package/dist/ui/lib/hooks/use-mobile.cjs.map +1 -1
  635. package/dist/ui/lib/hooks/use-mobile.d.cts +11 -3
  636. package/dist/ui/lib/hooks/use-mobile.d.ts +11 -3
  637. package/dist/ui/lib/hooks/use-mobile.js.map +1 -1
  638. package/dist/ui/lib/hooks/use-toast.cjs.map +1 -1
  639. package/dist/ui/lib/hooks/use-toast.d.cts +184 -15
  640. package/dist/ui/lib/hooks/use-toast.d.ts +184 -15
  641. package/dist/ui/lib/hooks/use-toast.js.map +1 -1
  642. package/dist/ui/lib/ime-utils.cjs.map +1 -1
  643. package/dist/ui/lib/ime-utils.d.cts +40 -13
  644. package/dist/ui/lib/ime-utils.d.ts +40 -13
  645. package/dist/ui/lib/ime-utils.js.map +1 -1
  646. package/dist/ui/lib/utils.cjs.map +1 -1
  647. package/dist/ui/lib/utils.d.cts +9 -6
  648. package/dist/ui/lib/utils.d.ts +9 -6
  649. package/dist/ui/lib/utils.js.map +1 -1
  650. package/docs/ai.md +34 -1
  651. package/docs/exports.md +5 -1
  652. package/docs/index.md +89 -16
  653. package/docs/migration.md +268 -0
  654. package/docs/request-form.md +4 -1
  655. package/docs/tools.md +4 -1
  656. package/docs/ui.md +4 -1
  657. package/llms-full.txt +499 -36
  658. package/llms.txt +4 -0
  659. package/package.json +35 -5
@@ -1 +1 @@
1
- {"version":3,"file":"auth-session.cjs","names":["CancelledError","_tanstack_react_query","createAuthSession","principal","revision","epoch","active","listeners","sessionFilter","accept","nextPrincipal","user","filter","query","queryClient","queryKey","listener","publish","started","adapter","signal","result","action","loggedOut"],"sources":["../../../../src/tools/components/auth/auth-session.ts"],"sourcesContent":["import { CancelledError, type QueryClient } from '@tanstack/react-query';\nimport type { AuthAdapter, User } from './types';\n\n/** Internal session coordinator. Only verified adapter results determine principal changes. */\nexport function createAuthSession(\n queryClient: QueryClient,\n adapter: AuthAdapter,\n queryKey: readonly string[],\n) {\n let principal: string | null | undefined;\n let revision = 0;\n let epoch = 0;\n let active = true;\n const listeners = new Set<() => void>();\n const sessionFilter = { queryKey, exact: true };\n\n const accept = (user: User | null) => {\n const nextPrincipal = user?.id ?? null;\n if (principal !== nextPrincipal) {\n // A QueryClient is an auth boundary: arbitrary application query keys can contain private data.\n // Preserve other isolated session queries, but cancel/remove all application queries before\n // exposing the new principal. Cancellation prevents even signal-ignoring promises writing back.\n const filter = {\n predicate: (query: { queryKey: readonly unknown[] }) =>\n !(query.queryKey[0] === 'session' && query.queryKey[1] === 'react-tools.auth'),\n };\n void queryClient.cancelQueries(filter);\n queryClient.removeQueries(filter);\n principal = nextPrincipal;\n epoch += 1;\n queryClient.setQueryData(queryKey, user);\n listeners.forEach((listener) => listener());\n } else {\n queryClient.setQueryData(queryKey, user);\n }\n return user;\n };\n\n const publish = (user: User | null) => {\n if (!active) return;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n accept(user);\n };\n\n return {\n queryKey,\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => epoch,\n getServerSnapshot: () => 0,\n activate() {\n active = true;\n },\n deactivate() {\n active = false;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n },\n publish,\n async read(signal: AbortSignal) {\n const started = revision;\n const user = await adapter.getCurrentUser();\n if (!active || signal.aborted || revision !== started) {\n throw new CancelledError({ revert: true });\n }\n return accept(user);\n },\n async run<T extends User | null | void>(\n action: () => Promise<T>,\n loggedOut = false,\n ): Promise<T> {\n const started = ++revision;\n void queryClient.cancelQueries(sessionFilter);\n try {\n const result = await action();\n // An intervening auth event/action is newer than this operation's result.\n if (active && revision === started) {\n if (loggedOut) publish(null);\n else if (result) publish(result);\n }\n return result;\n } finally {\n // Failed actions or redirect-only OAuth results must not strand the cancelled initial read.\n if (active && revision === started) {\n void queryClient.invalidateQueries(sessionFilter);\n }\n }\n },\n };\n}\n"],"mappings":"A,uHAIA,SAAgBE,EACd,EACA,EACA,EACA,CACA,IAAIC,EACAC,EAAW,EACXC,EAAQ,EACRC,EAAS,GACPC,EAAY,IAAI,IAChBC,EAAgB,CAAE,WAAU,MAAO,EAAK,EAExCC,EAAU,GAAsB,CACpC,IAAMC,EAAgBC,GAAM,IAAM,KAClC,GAAIR,IAAcO,EAAe,CAI/B,IAAME,EAAS,CACb,UAAY,GACRC,EAAM,SAAS,KAAO,WAAaA,EAAM,SAAS,KAAO,kBAC/D,EACAC,EAAiB,cAAcF,CAAM,EACrCE,EAAY,cAAcF,CAAM,EAChC,EAAYF,EACZ,GAAS,EACTI,EAAY,aAAaC,EAAUJ,CAAI,EACvCJ,EAAU,QAAS,GAAaS,EAAS,CAAC,CAC5C,MACEF,EAAY,aAAaC,EAAUJ,CAAI,EAEzC,OAAOA,CACT,EAEMM,EAAW,GAAsB,CAChCX,IACL,GAAY,EACZQ,EAAiB,cAAcN,CAAa,EAC5CC,EAAOE,CAAI,EACb,EAEA,MAAO,CACL,WACA,UAAU,EAAsB,CAE9B,OADAJ,EAAU,IAAIS,CAAQ,MACT,CACXT,EAAU,OAAOS,CAAQ,CAC3B,CACF,EACA,gBAAmBX,EACnB,sBAAyB,EACzB,UAAW,CACT,EAAS,EACX,EACA,YAAa,CACX,EAAS,GACT,GAAY,EACZS,EAAiB,cAAcN,CAAa,CAC9C,EACA,UACA,MAAM,KAAK,EAAqB,CAC9B,IAAMU,EAAUd,EACVO,EAAO,MAAMQ,EAAQ,eAAe,EAC1C,GAAI,CAACb,GAAUc,EAAO,SAAWhB,IAAac,EAC5C,MAAM,IAAIlB,EAAAA,eAAe,CAAE,OAAQ,EAAK,CAAC,EAE3C,OAAOS,EAAOE,CAAI,CACpB,EACA,MAAM,IACJ,EACA,EAAY,GACA,CACZ,IAAMO,EAAU,EAAEd,EAClBU,EAAiB,cAAcN,CAAa,EAC5C,GAAI,CACF,IAAMa,EAAS,MAAMC,EAAO,EAM5B,OAJIhB,GAAUF,IAAac,IACrBK,EAAWN,EAAQ,IAAI,EAClBI,GAAQJ,EAAQI,CAAM,GAE1BA,CACT,QAAU,CAEJf,GAAUF,IAAac,GACzBJ,EAAiB,kBAAkBN,CAAa,CAEpD,CACF,CACF,CACF,C"}
1
+ {"version":3,"file":"auth-session.cjs","names":["CancelledError","_tanstack_react_query","createAuthSession","principal","revision","epoch","active","listeners","sessionFilter","accept","nextPrincipal","user","filter","query","queryClient","queryKey","listener","publish","started","adapter","signal","result","action","loggedOut"],"sources":["../../../../src/tools/components/auth/auth-session.ts"],"sourcesContent":["import { CancelledError, type QueryClient } from '@tanstack/react-query';\nimport type { AuthAdapter, User } from './types';\n\n/**\n * Creates a principal-transition coordinator for one AuthProvider session query.\n *\n * @param queryClient - Auth-domain query cache; application queries are removed on initial/principal verification.\n *\n * @param adapter - Host authentication adapter supplying the verified user.\n *\n * @param queryKey - Exact session query key owned by this coordinator.\n *\n * @returns Coordinator with subscription, epoch snapshots, lifecycle, verified reads and tracked actions.\n *\n * @remarks Although exported, this is a low-level provider helper. Principal changes cancel\n * and remove non-session queries, then publish the user and increment epoch. Same-user\n * refreshes preserve application state. Revisions discard stale reads/actions but cannot\n * undo backend work. Backend authorization is host-owned. No styles are required.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function verify(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try { return await session.read(new AbortController().signal); }\n * finally { session.deactivate(); }\n * }\n * ```\n */\nexport function createAuthSession(\n queryClient: QueryClient,\n adapter: AuthAdapter,\n queryKey: readonly string[],\n) {\n let principal: string | null | undefined;\n let revision = 0;\n let epoch = 0;\n let active = true;\n const listeners = new Set<() => void>();\n const sessionFilter = { queryKey, exact: true };\n\n const accept = (user: User | null) => {\n const nextPrincipal = user?.id ?? null;\n if (principal !== nextPrincipal) {\n // A QueryClient is an auth boundary: arbitrary application query keys can contain private data.\n // Preserve other isolated session queries, but cancel/remove all application queries before\n // exposing the new principal. Cancellation prevents even signal-ignoring promises writing back.\n const filter = {\n predicate: (query: { queryKey: readonly unknown[] }) =>\n !(query.queryKey[0] === 'session' && query.queryKey[1] === 'react-tools.auth'),\n };\n void queryClient.cancelQueries(filter);\n queryClient.removeQueries(filter);\n principal = nextPrincipal;\n epoch += 1;\n queryClient.setQueryData(queryKey, user);\n listeners.forEach((listener) => listener());\n } else {\n queryClient.setQueryData(queryKey, user);\n }\n return user;\n };\n\n/**\n * Accepts a verified adapter event when active, superseding any pending session read.\n *\n * @param user - Adapter-confirmed user or null.\n *\n * @returns No value; inactive coordinators ignore the event.\n *\n * @remarks Current-user changes reset application query state; backend validity is host-owned.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter, type User } from '@alneas/appkit-react/tools/auth';\n * export function publishVerified(adapter: AuthAdapter, user: User | null) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'events']);\n * session.publish(user);\n * session.deactivate();\n * }\n * ```\n */\n const publish = (user: User | null) => {\n if (!active) return;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n accept(user);\n };\n\n return {\n /**\n * Exact session query key supplied by the caller.\n */\n queryKey,\n /**\n * Observe principal epoch changes.\n *\n * @param listener - Synchronous callback after a changed principal is accepted.\n *\n * @returns Cleanup removing this listener.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * const stop = session.subscribe(() => console.log(session.getSnapshot()));\n * stop();\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n /**\n * Read the current principal-transition epoch.\n *\n * @returns Monotonic epoch starting at zero.\n */\n getSnapshot: () => epoch,\n /**\n * Supply the stable server epoch.\n *\n * @returns Zero for SSR.\n */\n getServerSnapshot: () => 0,\n /**\n * Enable publication of adapter results.\n *\n * @returns No value; future verified reads/events may publish.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * session.activate();\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n activate() {\n active = true;\n },\n /**\n * Disable publication and cancel this session query.\n *\n * @returns No value; in-flight backend work is not rolled back.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * session.deactivate();\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n deactivate() {\n active = false;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n },\n /**\n * Publish an adapter auth event when active, cancelling any older session read.\n *\n * @param user - Verified user or null supplied by the adapter.\n *\n * @returns No value.\n */\n publish,\n /**\n * Read and accept the latest adapter user.\n *\n * @param signal - Query abort signal checked after the adapter request completes.\n *\n * @returns Verified user or null.\n *\n * @throws Rejects on adapter errors or cancellation/stale revision via CancelledError.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * await session.read(new AbortController().signal);\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n async read(signal: AbortSignal) {\n const started = revision;\n const user = await adapter.getCurrentUser();\n if (!active || signal.aborted || revision !== started) {\n throw new CancelledError({ revert: true });\n }\n return accept(user);\n },\n /**\n * Run a host auth action and publish its result if still current.\n *\n * @typeParam T - User, null or void result of the host auth action.\n *\n * @param action - Asynchronous adapter operation, invoked once.\n *\n * @param loggedOut - Publish null on success instead of a user result; defaults to false.\n *\n * @returns Original host operation result, even if a newer revision prevents publication.\n *\n * @throws Rejects with the host action error; pending verification is invalidated afterward.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * await session.run(() => adapter.getCurrentUser());\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n async run<T extends User | null | void>(\n action: () => Promise<T>,\n loggedOut = false,\n ): Promise<T> {\n const started = ++revision;\n void queryClient.cancelQueries(sessionFilter);\n try {\n const result = await action();\n // An intervening auth event/action is newer than this operation's result.\n if (active && revision === started) {\n if (loggedOut) publish(null);\n else if (result) publish(result);\n }\n return result;\n } finally {\n // Failed actions or redirect-only OAuth results must not strand the cancelled initial read.\n if (active && revision === started) {\n void queryClient.invalidateQueries(sessionFilter);\n }\n }\n },\n };\n}\n"],"mappings":"A,uHA8BA,SAAgBE,EACd,EACA,EACA,EACA,CACA,IAAIC,EACAC,EAAW,EACXC,EAAQ,EACRC,EAAS,GACPC,EAAY,IAAI,IAChBC,EAAgB,CAAE,WAAU,MAAO,EAAK,EAExCC,EAAU,GAAsB,CACpC,IAAMC,EAAgBC,GAAM,IAAM,KAClC,GAAIR,IAAcO,EAAe,CAI/B,IAAME,EAAS,CACb,UAAY,GACRC,EAAM,SAAS,KAAO,WAAaA,EAAM,SAAS,KAAO,kBAC/D,EACAC,EAAiB,cAAcF,CAAM,EACrCE,EAAY,cAAcF,CAAM,EAChC,EAAYF,EACZ,GAAS,EACTI,EAAY,aAAaC,EAAUJ,CAAI,EACvCJ,EAAU,QAAS,GAAaS,EAAS,CAAC,CAC5C,MACEF,EAAY,aAAaC,EAAUJ,CAAI,EAEzC,OAAOA,CACT,EAsBMM,EAAW,GAAsB,CAChCX,IACL,GAAY,EACZQ,EAAiB,cAAcN,CAAa,EAC5CC,EAAOE,CAAI,EACb,EAEA,MAAO,CAIL,WAqBA,UAAU,EAAsB,CAE9B,OADAJ,EAAU,IAAIS,CAAQ,MACT,CACXT,EAAU,OAAOS,CAAQ,CAC3B,CACF,EAMA,gBAAmBX,EAMnB,sBAAyB,EAkBzB,UAAW,CACT,EAAS,EACX,EAkBA,YAAa,CACX,EAAS,GACT,GAAY,EACZS,EAAiB,cAAcN,CAAa,CAC9C,EAQA,UAsBA,MAAM,KAAK,EAAqB,CAC9B,IAAMU,EAAUd,EACVO,EAAO,MAAMQ,EAAQ,eAAe,EAC1C,GAAI,CAACb,GAAUc,EAAO,SAAWhB,IAAac,EAC5C,MAAM,IAAIlB,EAAAA,eAAe,CAAE,OAAQ,EAAK,CAAC,EAE3C,OAAOS,EAAOE,CAAI,CACpB,EA0BA,MAAM,IACJ,EACA,EAAY,GACA,CACZ,IAAMO,EAAU,EAAEd,EAClBU,EAAiB,cAAcN,CAAa,EAC5C,GAAI,CACF,IAAMa,EAAS,MAAMC,EAAO,EAM5B,OAJIhB,GAAUF,IAAac,IACrBK,EAAWN,EAAQ,IAAI,EAClBI,GAAQJ,EAAQI,CAAM,GAE1BA,CACT,QAAU,CAEJf,GAAUF,IAAac,GACzBJ,EAAiB,kBAAkBN,CAAa,CAEpD,CACF,CACF,CACF,C"}
@@ -1,14 +1,135 @@
1
1
  import { QueryClient } from '@tanstack/react-query';
2
2
  import { AuthAdapter, User } from './types.cjs';
3
- /** Internal session coordinator. Only verified adapter results determine principal changes. */
3
+ /**
4
+ * Creates a principal-transition coordinator for one AuthProvider session query.
5
+ *
6
+ * @param queryClient - Auth-domain query cache; application queries are removed on initial/principal verification.
7
+ *
8
+ * @param adapter - Host authentication adapter supplying the verified user.
9
+ *
10
+ * @param queryKey - Exact session query key owned by this coordinator.
11
+ *
12
+ * @returns Coordinator with subscription, epoch snapshots, lifecycle, verified reads and tracked actions.
13
+ *
14
+ * @remarks Although exported, this is a low-level provider helper. Principal changes cancel
15
+ * and remove non-session queries, then publish the user and increment epoch. Same-user
16
+ * refreshes preserve application state. Revisions discard stale reads/actions but cannot
17
+ * undo backend work. Backend authorization is host-owned. No styles are required.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { QueryClient } from '@tanstack/react-query';
22
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
23
+ * export async function verify(adapter: AuthAdapter) {
24
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
25
+ * try { return await session.read(new AbortController().signal); }
26
+ * finally { session.deactivate(); }
27
+ * }
28
+ * ```
29
+ */
4
30
  export declare function createAuthSession(queryClient: QueryClient, adapter: AuthAdapter, queryKey: readonly string[]): {
31
+ /**
32
+ * Exact session query key supplied by the caller.
33
+ */
5
34
  queryKey: readonly string[];
35
+ /**
36
+ * Observe principal epoch changes.
37
+ *
38
+ * @param listener - Synchronous callback after a changed principal is accepted.
39
+ *
40
+ * @returns Cleanup removing this listener.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * import { QueryClient } from '@tanstack/react-query';
45
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
46
+ * export async function coordinate(adapter: AuthAdapter) {
47
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
48
+ * try {
49
+ * const stop = session.subscribe(() => console.log(session.getSnapshot()));
50
+ * stop();
51
+ * } finally { session.deactivate(); }
52
+ * }
53
+ * ```
54
+ */
6
55
  subscribe(listener: () => void): () => void;
56
+ /**
57
+ * Read the current principal-transition epoch.
58
+ *
59
+ * @returns Monotonic epoch starting at zero.
60
+ */
7
61
  getSnapshot: () => number;
62
+ /**
63
+ * Supply the stable server epoch.
64
+ *
65
+ * @returns Zero for SSR.
66
+ */
8
67
  getServerSnapshot: () => number;
68
+ /**
69
+ * Enable publication of adapter results.
70
+ *
71
+ * @returns No value; future verified reads/events may publish.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * import { QueryClient } from '@tanstack/react-query';
76
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
77
+ * export async function coordinate(adapter: AuthAdapter) {
78
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
79
+ * try {
80
+ * session.activate();
81
+ * } finally { session.deactivate(); }
82
+ * }
83
+ * ```
84
+ */
9
85
  activate(): void;
86
+ /**
87
+ * Disable publication and cancel this session query.
88
+ *
89
+ * @returns No value; in-flight backend work is not rolled back.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * import { QueryClient } from '@tanstack/react-query';
94
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
95
+ * export async function coordinate(adapter: AuthAdapter) {
96
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
97
+ * try {
98
+ * session.deactivate();
99
+ * } finally { session.deactivate(); }
100
+ * }
101
+ * ```
102
+ */
10
103
  deactivate(): void;
104
+ /**
105
+ * Publish an adapter auth event when active, cancelling any older session read.
106
+ *
107
+ * @param user - Verified user or null supplied by the adapter.
108
+ *
109
+ * @returns No value.
110
+ */
11
111
  publish: (user: User | null) => void;
112
+ /**
113
+ * Read and accept the latest adapter user.
114
+ *
115
+ * @param signal - Query abort signal checked after the adapter request completes.
116
+ *
117
+ * @returns Verified user or null.
118
+ *
119
+ * @throws Rejects on adapter errors or cancellation/stale revision via CancelledError.
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * import { QueryClient } from '@tanstack/react-query';
124
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
125
+ * export async function coordinate(adapter: AuthAdapter) {
126
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
127
+ * try {
128
+ * await session.read(new AbortController().signal);
129
+ * } finally { session.deactivate(); }
130
+ * }
131
+ * ```
132
+ */
12
133
  read(signal: AbortSignal): Promise<{
13
134
  id: string;
14
135
  email: string;
@@ -18,5 +139,30 @@ export declare function createAuthSession(queryClient: QueryClient, adapter: Aut
18
139
  emailVerified?: boolean | undefined;
19
140
  metadata?: Record<string, any> | undefined;
20
141
  } | null>;
142
+ /**
143
+ * Run a host auth action and publish its result if still current.
144
+ *
145
+ * @typeParam T - User, null or void result of the host auth action.
146
+ *
147
+ * @param action - Asynchronous adapter operation, invoked once.
148
+ *
149
+ * @param loggedOut - Publish null on success instead of a user result; defaults to false.
150
+ *
151
+ * @returns Original host operation result, even if a newer revision prevents publication.
152
+ *
153
+ * @throws Rejects with the host action error; pending verification is invalidated afterward.
154
+ *
155
+ * @example
156
+ * ```ts
157
+ * import { QueryClient } from '@tanstack/react-query';
158
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
159
+ * export async function coordinate(adapter: AuthAdapter) {
160
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
161
+ * try {
162
+ * await session.run(() => adapter.getCurrentUser());
163
+ * } finally { session.deactivate(); }
164
+ * }
165
+ * ```
166
+ */
21
167
  run<T extends User | null | void>(action: () => Promise<T>, loggedOut?: boolean): Promise<T>;
22
168
  };
@@ -1,14 +1,135 @@
1
1
  import { QueryClient } from '@tanstack/react-query';
2
2
  import { AuthAdapter, User } from './types.js';
3
- /** Internal session coordinator. Only verified adapter results determine principal changes. */
3
+ /**
4
+ * Creates a principal-transition coordinator for one AuthProvider session query.
5
+ *
6
+ * @param queryClient - Auth-domain query cache; application queries are removed on initial/principal verification.
7
+ *
8
+ * @param adapter - Host authentication adapter supplying the verified user.
9
+ *
10
+ * @param queryKey - Exact session query key owned by this coordinator.
11
+ *
12
+ * @returns Coordinator with subscription, epoch snapshots, lifecycle, verified reads and tracked actions.
13
+ *
14
+ * @remarks Although exported, this is a low-level provider helper. Principal changes cancel
15
+ * and remove non-session queries, then publish the user and increment epoch. Same-user
16
+ * refreshes preserve application state. Revisions discard stale reads/actions but cannot
17
+ * undo backend work. Backend authorization is host-owned. No styles are required.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { QueryClient } from '@tanstack/react-query';
22
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
23
+ * export async function verify(adapter: AuthAdapter) {
24
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
25
+ * try { return await session.read(new AbortController().signal); }
26
+ * finally { session.deactivate(); }
27
+ * }
28
+ * ```
29
+ */
4
30
  export declare function createAuthSession(queryClient: QueryClient, adapter: AuthAdapter, queryKey: readonly string[]): {
31
+ /**
32
+ * Exact session query key supplied by the caller.
33
+ */
5
34
  queryKey: readonly string[];
35
+ /**
36
+ * Observe principal epoch changes.
37
+ *
38
+ * @param listener - Synchronous callback after a changed principal is accepted.
39
+ *
40
+ * @returns Cleanup removing this listener.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * import { QueryClient } from '@tanstack/react-query';
45
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
46
+ * export async function coordinate(adapter: AuthAdapter) {
47
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
48
+ * try {
49
+ * const stop = session.subscribe(() => console.log(session.getSnapshot()));
50
+ * stop();
51
+ * } finally { session.deactivate(); }
52
+ * }
53
+ * ```
54
+ */
6
55
  subscribe(listener: () => void): () => void;
56
+ /**
57
+ * Read the current principal-transition epoch.
58
+ *
59
+ * @returns Monotonic epoch starting at zero.
60
+ */
7
61
  getSnapshot: () => number;
62
+ /**
63
+ * Supply the stable server epoch.
64
+ *
65
+ * @returns Zero for SSR.
66
+ */
8
67
  getServerSnapshot: () => number;
68
+ /**
69
+ * Enable publication of adapter results.
70
+ *
71
+ * @returns No value; future verified reads/events may publish.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * import { QueryClient } from '@tanstack/react-query';
76
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
77
+ * export async function coordinate(adapter: AuthAdapter) {
78
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
79
+ * try {
80
+ * session.activate();
81
+ * } finally { session.deactivate(); }
82
+ * }
83
+ * ```
84
+ */
9
85
  activate(): void;
86
+ /**
87
+ * Disable publication and cancel this session query.
88
+ *
89
+ * @returns No value; in-flight backend work is not rolled back.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * import { QueryClient } from '@tanstack/react-query';
94
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
95
+ * export async function coordinate(adapter: AuthAdapter) {
96
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
97
+ * try {
98
+ * session.deactivate();
99
+ * } finally { session.deactivate(); }
100
+ * }
101
+ * ```
102
+ */
10
103
  deactivate(): void;
104
+ /**
105
+ * Publish an adapter auth event when active, cancelling any older session read.
106
+ *
107
+ * @param user - Verified user or null supplied by the adapter.
108
+ *
109
+ * @returns No value.
110
+ */
11
111
  publish: (user: User | null) => void;
112
+ /**
113
+ * Read and accept the latest adapter user.
114
+ *
115
+ * @param signal - Query abort signal checked after the adapter request completes.
116
+ *
117
+ * @returns Verified user or null.
118
+ *
119
+ * @throws Rejects on adapter errors or cancellation/stale revision via CancelledError.
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * import { QueryClient } from '@tanstack/react-query';
124
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
125
+ * export async function coordinate(adapter: AuthAdapter) {
126
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
127
+ * try {
128
+ * await session.read(new AbortController().signal);
129
+ * } finally { session.deactivate(); }
130
+ * }
131
+ * ```
132
+ */
12
133
  read(signal: AbortSignal): Promise<{
13
134
  id: string;
14
135
  email: string;
@@ -18,5 +139,30 @@ export declare function createAuthSession(queryClient: QueryClient, adapter: Aut
18
139
  emailVerified?: boolean | undefined;
19
140
  metadata?: Record<string, any> | undefined;
20
141
  } | null>;
142
+ /**
143
+ * Run a host auth action and publish its result if still current.
144
+ *
145
+ * @typeParam T - User, null or void result of the host auth action.
146
+ *
147
+ * @param action - Asynchronous adapter operation, invoked once.
148
+ *
149
+ * @param loggedOut - Publish null on success instead of a user result; defaults to false.
150
+ *
151
+ * @returns Original host operation result, even if a newer revision prevents publication.
152
+ *
153
+ * @throws Rejects with the host action error; pending verification is invalidated afterward.
154
+ *
155
+ * @example
156
+ * ```ts
157
+ * import { QueryClient } from '@tanstack/react-query';
158
+ * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';
159
+ * export async function coordinate(adapter: AuthAdapter) {
160
+ * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);
161
+ * try {
162
+ * await session.run(() => adapter.getCurrentUser());
163
+ * } finally { session.deactivate(); }
164
+ * }
165
+ * ```
166
+ */
21
167
  run<T extends User | null | void>(action: () => Promise<T>, loggedOut?: boolean): Promise<T>;
22
168
  };
@@ -1 +1 @@
1
- {"version":3,"file":"auth-session.js","names":["createAuthSession","principal","revision","epoch","active","listeners","sessionFilter","accept","nextPrincipal","user","filter","query","queryClient","queryKey","listener","publish","started","adapter","signal","CancelledError","result","action","loggedOut"],"sources":["../../../../src/tools/components/auth/auth-session.ts"],"sourcesContent":["import { CancelledError, type QueryClient } from '@tanstack/react-query';\nimport type { AuthAdapter, User } from './types';\n\n/** Internal session coordinator. Only verified adapter results determine principal changes. */\nexport function createAuthSession(\n queryClient: QueryClient,\n adapter: AuthAdapter,\n queryKey: readonly string[],\n) {\n let principal: string | null | undefined;\n let revision = 0;\n let epoch = 0;\n let active = true;\n const listeners = new Set<() => void>();\n const sessionFilter = { queryKey, exact: true };\n\n const accept = (user: User | null) => {\n const nextPrincipal = user?.id ?? null;\n if (principal !== nextPrincipal) {\n // A QueryClient is an auth boundary: arbitrary application query keys can contain private data.\n // Preserve other isolated session queries, but cancel/remove all application queries before\n // exposing the new principal. Cancellation prevents even signal-ignoring promises writing back.\n const filter = {\n predicate: (query: { queryKey: readonly unknown[] }) =>\n !(query.queryKey[0] === 'session' && query.queryKey[1] === 'react-tools.auth'),\n };\n void queryClient.cancelQueries(filter);\n queryClient.removeQueries(filter);\n principal = nextPrincipal;\n epoch += 1;\n queryClient.setQueryData(queryKey, user);\n listeners.forEach((listener) => listener());\n } else {\n queryClient.setQueryData(queryKey, user);\n }\n return user;\n };\n\n const publish = (user: User | null) => {\n if (!active) return;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n accept(user);\n };\n\n return {\n queryKey,\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => epoch,\n getServerSnapshot: () => 0,\n activate() {\n active = true;\n },\n deactivate() {\n active = false;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n },\n publish,\n async read(signal: AbortSignal) {\n const started = revision;\n const user = await adapter.getCurrentUser();\n if (!active || signal.aborted || revision !== started) {\n throw new CancelledError({ revert: true });\n }\n return accept(user);\n },\n async run<T extends User | null | void>(\n action: () => Promise<T>,\n loggedOut = false,\n ): Promise<T> {\n const started = ++revision;\n void queryClient.cancelQueries(sessionFilter);\n try {\n const result = await action();\n // An intervening auth event/action is newer than this operation's result.\n if (active && revision === started) {\n if (loggedOut) publish(null);\n else if (result) publish(result);\n }\n return result;\n } finally {\n // Failed actions or redirect-only OAuth results must not strand the cancelled initial read.\n if (active && revision === started) {\n void queryClient.invalidateQueries(sessionFilter);\n }\n }\n },\n };\n}\n"],"mappings":";;;AAIA,SAAgBA,EACd,GACA,GACA,GACA;CACA,IAAIC,GACAC,IAAW,GACXC,IAAQ,GACRC,IAAS,IACPC,oBAAY,IAAI,IAAgB,GAChCC,IAAgB;EAAE;EAAU,OAAO;CAAK,GAExCC,KAAU,MAAsB;EACpC,IAAMC,IAAgBC,GAAM,MAAM;EAClC,IAAIR,MAAcO,GAAe;GAI/B,IAAME,IAAS,EACb,YAAY,MACRC,EAAM,SAAS,OAAO,aAAaA,EAAM,SAAS,OAAO,mBAC/D;GAMA,AALAC,EAAiB,cAAcF,CAAM,GACrCE,EAAY,cAAcF,CAAM,GAChC,IAAYF,GACZ,KAAS,GACTI,EAAY,aAAaC,GAAUJ,CAAI,GACvCJ,EAAU,SAAS,MAAaS,EAAS,CAAC;EAC5C,OACE,EAAY,aAAaD,GAAUJ,CAAI;EAEzC,OAAOA;CACT,GAEMM,KAAW,MAAsB;EACrC,AAAKX,MACL,KAAY,GACZQ,EAAiB,cAAcN,CAAa,GAC5CC,EAAOE,CAAI;CACb;CAEA,OAAO;EACL;EACA,UAAU,GAAsB;GAE9B,OADAJ,EAAU,IAAIS,CAAQ,SACT;IACX,EAAU,OAAOA,CAAQ;GAC3B;EACF;EACA,mBAAmBX;EACnB,yBAAyB;EACzB,WAAW;GACT,IAAS;EACX;EACA,aAAa;GAGX,AAFA,IAAS,IACT,KAAY,GACZS,EAAiB,cAAcN,CAAa;EAC9C;EACA;EACA,MAAM,KAAK,GAAqB;GAC9B,IAAMU,IAAUd,GACVO,IAAO,MAAMQ,EAAQ,eAAe;GAC1C,IAAI,CAACb,KAAUc,EAAO,WAAWhB,MAAac,GAC5C,MAAM,IAAIG,EAAe,EAAE,QAAQ,GAAK,CAAC;GAE3C,OAAOZ,EAAOE,CAAI;EACpB;EACA,MAAM,IACJ,GACA,IAAY,IACA;GACZ,IAAMO,IAAU,EAAEd;GAClB,EAAiB,cAAcI,CAAa;GAC5C,IAAI;IACF,IAAMc,IAAS,MAAMC,EAAO;IAM5B,OAJIjB,KAAUF,MAAac,MACrBM,IAAWP,EAAQ,IAAI,IAClBK,KAAQL,EAAQK,CAAM,IAE1BA;GACT,UAAU;IAER,AAAIhB,KAAUF,MAAac,KACzBJ,EAAiB,kBAAkBN,CAAa;GAEpD;EACF;CACF;AACF"}
1
+ {"version":3,"file":"auth-session.js","names":["createAuthSession","principal","revision","epoch","active","listeners","sessionFilter","accept","nextPrincipal","user","filter","query","queryClient","queryKey","listener","publish","started","adapter","signal","CancelledError","result","action","loggedOut"],"sources":["../../../../src/tools/components/auth/auth-session.ts"],"sourcesContent":["import { CancelledError, type QueryClient } from '@tanstack/react-query';\nimport type { AuthAdapter, User } from './types';\n\n/**\n * Creates a principal-transition coordinator for one AuthProvider session query.\n *\n * @param queryClient - Auth-domain query cache; application queries are removed on initial/principal verification.\n *\n * @param adapter - Host authentication adapter supplying the verified user.\n *\n * @param queryKey - Exact session query key owned by this coordinator.\n *\n * @returns Coordinator with subscription, epoch snapshots, lifecycle, verified reads and tracked actions.\n *\n * @remarks Although exported, this is a low-level provider helper. Principal changes cancel\n * and remove non-session queries, then publish the user and increment epoch. Same-user\n * refreshes preserve application state. Revisions discard stale reads/actions but cannot\n * undo backend work. Backend authorization is host-owned. No styles are required.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function verify(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try { return await session.read(new AbortController().signal); }\n * finally { session.deactivate(); }\n * }\n * ```\n */\nexport function createAuthSession(\n queryClient: QueryClient,\n adapter: AuthAdapter,\n queryKey: readonly string[],\n) {\n let principal: string | null | undefined;\n let revision = 0;\n let epoch = 0;\n let active = true;\n const listeners = new Set<() => void>();\n const sessionFilter = { queryKey, exact: true };\n\n const accept = (user: User | null) => {\n const nextPrincipal = user?.id ?? null;\n if (principal !== nextPrincipal) {\n // A QueryClient is an auth boundary: arbitrary application query keys can contain private data.\n // Preserve other isolated session queries, but cancel/remove all application queries before\n // exposing the new principal. Cancellation prevents even signal-ignoring promises writing back.\n const filter = {\n predicate: (query: { queryKey: readonly unknown[] }) =>\n !(query.queryKey[0] === 'session' && query.queryKey[1] === 'react-tools.auth'),\n };\n void queryClient.cancelQueries(filter);\n queryClient.removeQueries(filter);\n principal = nextPrincipal;\n epoch += 1;\n queryClient.setQueryData(queryKey, user);\n listeners.forEach((listener) => listener());\n } else {\n queryClient.setQueryData(queryKey, user);\n }\n return user;\n };\n\n/**\n * Accepts a verified adapter event when active, superseding any pending session read.\n *\n * @param user - Adapter-confirmed user or null.\n *\n * @returns No value; inactive coordinators ignore the event.\n *\n * @remarks Current-user changes reset application query state; backend validity is host-owned.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter, type User } from '@alneas/appkit-react/tools/auth';\n * export function publishVerified(adapter: AuthAdapter, user: User | null) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'events']);\n * session.publish(user);\n * session.deactivate();\n * }\n * ```\n */\n const publish = (user: User | null) => {\n if (!active) return;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n accept(user);\n };\n\n return {\n /**\n * Exact session query key supplied by the caller.\n */\n queryKey,\n /**\n * Observe principal epoch changes.\n *\n * @param listener - Synchronous callback after a changed principal is accepted.\n *\n * @returns Cleanup removing this listener.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * const stop = session.subscribe(() => console.log(session.getSnapshot()));\n * stop();\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n /**\n * Read the current principal-transition epoch.\n *\n * @returns Monotonic epoch starting at zero.\n */\n getSnapshot: () => epoch,\n /**\n * Supply the stable server epoch.\n *\n * @returns Zero for SSR.\n */\n getServerSnapshot: () => 0,\n /**\n * Enable publication of adapter results.\n *\n * @returns No value; future verified reads/events may publish.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * session.activate();\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n activate() {\n active = true;\n },\n /**\n * Disable publication and cancel this session query.\n *\n * @returns No value; in-flight backend work is not rolled back.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * session.deactivate();\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n deactivate() {\n active = false;\n revision += 1;\n void queryClient.cancelQueries(sessionFilter);\n },\n /**\n * Publish an adapter auth event when active, cancelling any older session read.\n *\n * @param user - Verified user or null supplied by the adapter.\n *\n * @returns No value.\n */\n publish,\n /**\n * Read and accept the latest adapter user.\n *\n * @param signal - Query abort signal checked after the adapter request completes.\n *\n * @returns Verified user or null.\n *\n * @throws Rejects on adapter errors or cancellation/stale revision via CancelledError.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * await session.read(new AbortController().signal);\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n async read(signal: AbortSignal) {\n const started = revision;\n const user = await adapter.getCurrentUser();\n if (!active || signal.aborted || revision !== started) {\n throw new CancelledError({ revert: true });\n }\n return accept(user);\n },\n /**\n * Run a host auth action and publish its result if still current.\n *\n * @typeParam T - User, null or void result of the host auth action.\n *\n * @param action - Asynchronous adapter operation, invoked once.\n *\n * @param loggedOut - Publish null on success instead of a user result; defaults to false.\n *\n * @returns Original host operation result, even if a newer revision prevents publication.\n *\n * @throws Rejects with the host action error; pending verification is invalidated afterward.\n *\n * @example\n * ```ts\n * import { QueryClient } from '@tanstack/react-query';\n * import { createAuthSession, type AuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function coordinate(adapter: AuthAdapter) {\n * const session = createAuthSession(new QueryClient(), adapter, ['session', 'react-tools.auth', 'example']);\n * try {\n * await session.run(() => adapter.getCurrentUser());\n * } finally { session.deactivate(); }\n * }\n * ```\n */\n async run<T extends User | null | void>(\n action: () => Promise<T>,\n loggedOut = false,\n ): Promise<T> {\n const started = ++revision;\n void queryClient.cancelQueries(sessionFilter);\n try {\n const result = await action();\n // An intervening auth event/action is newer than this operation's result.\n if (active && revision === started) {\n if (loggedOut) publish(null);\n else if (result) publish(result);\n }\n return result;\n } finally {\n // Failed actions or redirect-only OAuth results must not strand the cancelled initial read.\n if (active && revision === started) {\n void queryClient.invalidateQueries(sessionFilter);\n }\n }\n },\n };\n}\n"],"mappings":";;;AA8BA,SAAgBA,EACd,GACA,GACA,GACA;CACA,IAAIC,GACAC,IAAW,GACXC,IAAQ,GACRC,IAAS,IACPC,oBAAY,IAAI,IAAgB,GAChCC,IAAgB;EAAE;EAAU,OAAO;CAAK,GAExCC,KAAU,MAAsB;EACpC,IAAMC,IAAgBC,GAAM,MAAM;EAClC,IAAIR,MAAcO,GAAe;GAI/B,IAAME,IAAS,EACb,YAAY,MACRC,EAAM,SAAS,OAAO,aAAaA,EAAM,SAAS,OAAO,mBAC/D;GAMA,AALAC,EAAiB,cAAcF,CAAM,GACrCE,EAAY,cAAcF,CAAM,GAChC,IAAYF,GACZ,KAAS,GACTI,EAAY,aAAaC,GAAUJ,CAAI,GACvCJ,EAAU,SAAS,MAAaS,EAAS,CAAC;EAC5C,OACE,EAAY,aAAaD,GAAUJ,CAAI;EAEzC,OAAOA;CACT,GAsBMM,KAAW,MAAsB;EACrC,AAAKX,MACL,KAAY,GACZQ,EAAiB,cAAcN,CAAa,GAC5CC,EAAOE,CAAI;CACb;CAEA,OAAO;EAIL;EAqBA,UAAU,GAAsB;GAE9B,OADAJ,EAAU,IAAIS,CAAQ,SACT;IACX,EAAU,OAAOA,CAAQ;GAC3B;EACF;EAMA,mBAAmBX;EAMnB,yBAAyB;EAkBzB,WAAW;GACT,IAAS;EACX;EAkBA,aAAa;GAGX,AAFA,IAAS,IACT,KAAY,GACZS,EAAiB,cAAcN,CAAa;EAC9C;EAQA;EAsBA,MAAM,KAAK,GAAqB;GAC9B,IAAMU,IAAUd,GACVO,IAAO,MAAMQ,EAAQ,eAAe;GAC1C,IAAI,CAACb,KAAUc,EAAO,WAAWhB,MAAac,GAC5C,MAAM,IAAIG,EAAe,EAAE,QAAQ,GAAK,CAAC;GAE3C,OAAOZ,EAAOE,CAAI;EACpB;EA0BA,MAAM,IACJ,GACA,IAAY,IACA;GACZ,IAAMO,IAAU,EAAEd;GAClB,EAAiB,cAAcI,CAAa;GAC5C,IAAI;IACF,IAAMc,IAAS,MAAMC,EAAO;IAM5B,OAJIjB,KAAUF,MAAac,MACrBM,IAAWP,EAAQ,IAAI,IAClBK,KAAQL,EAAQK,CAAM,IAE1BA;GACT,UAAU;IAER,AAAIhB,KAAUF,MAAac,KACzBJ,EAAiB,kBAAkBN,CAAa;GAEpD;EACF;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-cache.cjs","names":["DEFAULT_KEY","DEFAULT_TTL","createSessionCache","key","options","ttl","read","raw","parsed","entry","hit","subscribeSessionCacheStorageEvent","handler","e","onChanged"],"sources":["../../../../src/tools/components/auth/session-cache.ts"],"sourcesContent":["import type { User } from './types';\n\n/**\n * 楽観セッションキャッシュ(stale-while-revalidate)\n *\n * 認証は httpOnly クッキー等で実体を持つため、クライアントはセッション状態を知りません。\n * そのままだとリロードのたびにサーバー検証(whoami 等)が終わるまで画面がブロックされます。\n *\n * このモジュールは「最後に確定したセッション状態」を localStorage に保持し、\n * 次回ロード時に即座に描画(楽観表示)しつつ、裏で検証させるためのヘルパーです。\n *\n * 保存するのは表示用プロフィール(`User`)のみ。トークン等の機密は含めません。\n * クッキーが無効なら検証時に即座にログイン画面へフォールバックします。\n *\n * @example\n * ```ts\n * const cache = createSessionCache({ ttl: 7 * 24 * 60 * 60 * 1000 });\n * cache.write(user); // ログイン成功 / 検証成功時\n * cache.writeLoggedOut(); // 明示的な未ログイン確定時\n * const hit = cache.read(); // { user: User|null, exp: number } | null\n * ```\n */\n\nexport interface SessionCacheEntry {\n /** 最後に確定したユーザー。null は「明示的に未ログイン」を意味する */\n user: User | null;\n /** 有効期限のエポックミリ秒 */\n exp: number;\n}\n\nexport interface SessionCacheOptions {\n /** localStorage キー(デフォルト: dataarthub.auth.last-session) */\n key?: string;\n /** キャッシュの有効期間(ミリ秒)。デフォルト 7 日 */\n ttl?: number;\n}\n\nconst DEFAULT_KEY = 'dataarthub.auth.last-session';\nconst DEFAULT_TTL = 7 * 24 * 60 * 60 * 1000;\n\nexport interface SessionCache {\n readonly key: string;\n read(): SessionCacheEntry | null;\n write(user: User | null): void;\n clear(): void;\n /** キャッシュが存在し、かつ未期限切れなら true */\n hasValid(): boolean;\n}\n\n/**\n *\n */\nexport function createSessionCache(options: SessionCacheOptions = {}): SessionCache {\n const key = options.key ?? DEFAULT_KEY;\n const ttl = options.ttl ?? DEFAULT_TTL;\n\n const read = (): SessionCacheEntry | null => {\n if (typeof window === 'undefined') return null;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as SessionCacheEntry;\n if (typeof parsed?.exp !== 'number') return null;\n return parsed;\n } catch {\n return null;\n }\n };\n\n const write = (user: User | null): void => {\n if (typeof window === 'undefined') return;\n try {\n const entry: SessionCacheEntry = { user, exp: Date.now() + ttl };\n window.localStorage.setItem(key, JSON.stringify(entry));\n } catch {\n /* storage が無効 (private mode 等) でも致命的ではない */\n }\n };\n\n const clear = (): void => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.removeItem(key);\n } catch {\n /* noop */\n }\n };\n\n return {\n key,\n read,\n write,\n clear,\n hasValid: () => {\n const hit = read();\n return hit != null && hit.exp > Date.now();\n },\n };\n}\n\n/**\n * 他タブでのログアウト/ログインを検知するための storage イベント監視。\n *\n * @returns クリーンアップ関数\n */\nexport function subscribeSessionCacheStorageEvent(\n key: string,\n onChanged: () => void,\n): () => void {\n if (typeof window === 'undefined') return () => {};\n const handler = (e: StorageEvent) => {\n if (e.key === key) onChanged();\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n}\n"],"mappings":"A,gFAqCA,IAAMA,EAAc,+BACdC,EAAc,OAcpB,SAAgBC,EAAmB,EAA+B,CAAC,EAAiB,CAClF,IAAMC,EAAMC,EAAQ,KAAOJ,EACrBK,EAAMD,EAAQ,KAAOH,EAErBK,MAAuC,CAC3C,GAAI,OAAO,OAAW,IAAa,OAAO,KAC1C,GAAI,CACF,IAAMC,EAAM,OAAO,aAAa,QAAQJ,CAAG,EAC3C,GAAI,CAACI,EAAK,OAAO,KACjB,IAAMC,EAAS,KAAK,MAAMD,CAAG,EAE7B,OADI,OAAOC,GAAQ,KAAQ,SACpBA,EADqC,IAE9C,MAAQ,CACN,OAAO,IACT,CACF,EAqBA,MAAO,CACL,MACA,OACA,MAtBa,GAA4B,CACzC,GAAI,OAAO,OAAW,IACtB,GAAI,CACF,IAAMC,EAA2B,CAAE,OAAM,IAAK,KAAK,IAAI,EAAIJ,CAAI,EAC/D,OAAO,aAAa,QAAQF,EAAK,KAAK,UAAUM,CAAK,CAAC,CACxD,MAAQ,CAER,CACF,EAeE,UAbwB,CACxB,GAAI,OAAO,OAAW,IACtB,GAAI,CACF,OAAO,aAAa,WAAWN,CAAG,CACpC,MAAQ,CAER,CACF,EAOE,aAAgB,CACd,IAAMO,EAAMJ,EAAK,EACjB,OAAOI,GAAO,MAAQA,EAAI,IAAM,KAAK,IAAI,CAC3C,CACF,CACF,CAOA,SAAgBC,EACd,EACA,EACY,CACZ,GAAI,OAAO,OAAW,IAAa,UAAa,CAAC,EACjD,IAAMC,EAAW,GAAoB,CAC/BC,EAAE,MAAQV,GAAKW,EAAU,CAC/B,EAEA,OADA,OAAO,iBAAiB,UAAWF,CAAO,MAC7B,OAAO,oBAAoB,UAAWA,CAAO,CAC5D,C"}
1
+ {"version":3,"file":"session-cache.cjs","names":["DEFAULT_KEY","DEFAULT_TTL","createSessionCache","key","options","ttl","read","raw","parsed","entry","hit","subscribeSessionCacheStorageEvent","handler","e","onChanged"],"sources":["../../../../src/tools/components/auth/session-cache.ts"],"sourcesContent":["import type { User } from './types';\n\n/**\n * A stored display snapshot, not proof of a valid authenticated session.\n * See createSessionCache for writes, expiration checks and host verification.\n *\n * @see createSessionCache for the canonical usage example.\n */\nexport interface SessionCacheEntry {\n /** Last confirmed display user; null records an explicitly logged-out state. */\n user: User | null;\n /** Expiration timestamp in milliseconds since the Unix epoch. */\n exp: number;\n}\n\n/**\n * Storage settings for createSessionCache; no providers or CSS are required.\n * @see createSessionCache for the canonical usage example.\n */\nexport interface SessionCacheOptions {\n /** localStorage key; defaults to dataarthub.auth.last-session. */\n key?: string;\n /** Snapshot lifetime in milliseconds; defaults to seven days. */\n ttl?: number;\n}\n\nconst DEFAULT_KEY = 'dataarthub.auth.last-session';\nconst DEFAULT_TTL = 7 * 24 * 60 * 60 * 1000;\n\n/**\n * Best-effort browser snapshot storage; see createSessionCache for usage.\n * @see createSessionCache for the canonical usage example.\n */\nexport interface SessionCache {\n /** Resolved storage key shared with storage-event subscribers. */\n readonly key: string;\n /**\n * Read the stored snapshot without enforcing expiration.\n *\n * @returns Parsed entry (possibly expired), or null on server, missing data or parse/storage failure.\n *\n * @remarks See createSessionCache for the write/read usage pattern.\n */\n read(): SessionCacheEntry | null;\n /**\n * Store display state with a fresh expiration.\n *\n * @param user - Display user or null for confirmed logout; exclude secrets.\n *\n * @returns No value; storage failures and server writes are ignored.\n *\n * @remarks See createSessionCache for the write/read usage pattern.\n */\n write(user: User | null): void;\n /**\n * Remove the snapshot for this key.\n *\n * @returns No value; server calls and storage failures are ignored.\n *\n * @remarks Obtain this helper from createSessionCache, then call cache.clear().\n */\n clear(): void;\n /**\n * Check whether the stored expiration is still in the future.\n *\n * @returns True for a readable snapshot with exp greater than Date.now(), including a logged-out snapshot.\n *\n * @remarks See createSessionCache for a guarded read example.\n */\n hasValid(): boolean;\n}\n\n/**\n * Creates best-effort localStorage helpers for optimistic session display.\n *\n * @param options - Optional storage key and lifetime; defaults to the shared key and seven days.\n *\n * @returns Helpers that read, write, clear and check expiration without authenticating a user.\n *\n * @remarks read() validates only the numeric exp field and does not reject expired data;\n * hasValid() checks expiration. Server reads return null and writes/clears do nothing.\n * Browser storage/JSON failures are swallowed. Store display fields only, never tokens\n * or secrets; verify the actual session with the backend before allowing protected work.\n *\n * @example\n * ```ts\n * import { createSessionCache, type User } from '@alneas/appkit-react/tools/auth';\n * export function rememberSession(user: User | null) {\n * const cache = createSessionCache({ ttl: 24 * 60 * 60 * 1000 });\n * cache.write(user); // null records confirmed logout.\n * const snapshot = cache.hasValid() ? cache.read() : null;\n * return snapshot;\n * }\n * ```\n */\nexport function createSessionCache(options: SessionCacheOptions = {}): SessionCache {\n const key = options.key ?? DEFAULT_KEY;\n const ttl = options.ttl ?? DEFAULT_TTL;\n\n const read = (): SessionCacheEntry | null => {\n if (typeof window === 'undefined') return null;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as SessionCacheEntry;\n if (typeof parsed?.exp !== 'number') return null;\n return parsed;\n } catch {\n return null;\n }\n };\n\n const write = (user: User | null): void => {\n if (typeof window === 'undefined') return;\n try {\n const entry: SessionCacheEntry = { user, exp: Date.now() + ttl };\n window.localStorage.setItem(key, JSON.stringify(entry));\n } catch {\n /* storage が無効 (private mode 等) でも致命的ではない */\n }\n };\n\n const clear = (): void => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.removeItem(key);\n } catch {\n /* noop */\n }\n };\n\n return {\n key,\n read,\n write,\n clear,\n hasValid: () => {\n const hit = read();\n return hit != null && hit.exp > Date.now();\n },\n };\n}\n\n/**\n * Subscribes to browser storage events for one session-cache key.\n *\n * @param key - Exact localStorage key to observe.\n *\n * @param onChanged - Synchronous callback invoked when a storage event has this exact key.\n *\n * @returns Cleanup that removes the listener; a no-op function on the server.\n *\n * @remarks Browser storage events generally come from other documents, not the writing\n * window. Events with key null (including storage.clear()) do not match. The callback\n * should reverify the session; its errors are not caught by this listener.\n *\n * @example\n * ```ts\n * import {\n * createSessionCache, subscribeSessionCacheStorageEvent,\n * } from '@alneas/appkit-react/tools/auth';\n * export function watchSession(reverify: () => void) {\n * const cache = createSessionCache();\n * return subscribeSessionCacheStorageEvent(cache.key, reverify);\n * }\n * // Call the returned cleanup when the host subscription is disposed.\n * ```\n */\nexport function subscribeSessionCacheStorageEvent(\n key: string,\n onChanged: () => void,\n): () => void {\n if (typeof window === 'undefined') return () => {};\n const handler = (e: StorageEvent) => {\n if (e.key === key) onChanged();\n };\n window.addEventListener('storage', handler);\n return () => window.removeEventListener('storage', handler);\n}\n"],"mappings":"A,gFA0BA,IAAMA,EAAc,+BACdC,EAAc,OAoEpB,SAAgBC,EAAmB,EAA+B,CAAC,EAAiB,CAClF,IAAMC,EAAMC,EAAQ,KAAOJ,EACrBK,EAAMD,EAAQ,KAAOH,EAErBK,MAAuC,CAC3C,GAAI,OAAO,OAAW,IAAa,OAAO,KAC1C,GAAI,CACF,IAAMC,EAAM,OAAO,aAAa,QAAQJ,CAAG,EAC3C,GAAI,CAACI,EAAK,OAAO,KACjB,IAAMC,EAAS,KAAK,MAAMD,CAAG,EAE7B,OADI,OAAOC,GAAQ,KAAQ,SACpBA,EADqC,IAE9C,MAAQ,CACN,OAAO,IACT,CACF,EAqBA,MAAO,CACL,MACA,OACA,MAtBa,GAA4B,CACzC,GAAI,OAAO,OAAW,IACtB,GAAI,CACF,IAAMC,EAA2B,CAAE,OAAM,IAAK,KAAK,IAAI,EAAIJ,CAAI,EAC/D,OAAO,aAAa,QAAQF,EAAK,KAAK,UAAUM,CAAK,CAAC,CACxD,MAAQ,CAER,CACF,EAeE,UAbwB,CACxB,GAAI,OAAO,OAAW,IACtB,GAAI,CACF,OAAO,aAAa,WAAWN,CAAG,CACpC,MAAQ,CAER,CACF,EAOE,aAAgB,CACd,IAAMO,EAAMJ,EAAK,EACjB,OAAOI,GAAO,MAAQA,EAAI,IAAM,KAAK,IAAI,CAC3C,CACF,CACF,CA2BA,SAAgBC,EACd,EACA,EACY,CACZ,GAAI,OAAO,OAAW,IAAa,UAAa,CAAC,EACjD,IAAMC,EAAW,GAAoB,CAC/BC,EAAE,MAAQV,GAAKW,EAAU,CAC/B,EAEA,OADA,OAAO,iBAAiB,UAAWF,CAAO,MAC7B,OAAO,oBAAoB,UAAWA,CAAO,CAC5D,C"}
@@ -1,51 +1,115 @@
1
1
  import { User } from './types.cjs';
2
2
  /**
3
- * 楽観セッションキャッシュ(stale-while-revalidate)
3
+ * A stored display snapshot, not proof of a valid authenticated session.
4
+ * See createSessionCache for writes, expiration checks and host verification.
4
5
  *
5
- * 認証は httpOnly クッキー等で実体を持つため、クライアントはセッション状態を知りません。
6
- * そのままだとリロードのたびにサーバー検証(whoami 等)が終わるまで画面がブロックされます。
7
- *
8
- * このモジュールは「最後に確定したセッション状態」を localStorage に保持し、
9
- * 次回ロード時に即座に描画(楽観表示)しつつ、裏で検証させるためのヘルパーです。
10
- *
11
- * 保存するのは表示用プロフィール(`User`)のみ。トークン等の機密は含めません。
12
- * クッキーが無効なら検証時に即座にログイン画面へフォールバックします。
13
- *
14
- * @example
15
- * ```ts
16
- * const cache = createSessionCache({ ttl: 7 * 24 * 60 * 60 * 1000 });
17
- * cache.write(user); // ログイン成功 / 検証成功時
18
- * cache.writeLoggedOut(); // 明示的な未ログイン確定時
19
- * const hit = cache.read(); // { user: User|null, exp: number } | null
20
- * ```
6
+ * @see createSessionCache for the canonical usage example.
21
7
  */
22
8
  export interface SessionCacheEntry {
23
- /** 最後に確定したユーザー。null は「明示的に未ログイン」を意味する */
9
+ /** Last confirmed display user; null records an explicitly logged-out state. */
24
10
  user: User | null;
25
- /** 有効期限のエポックミリ秒 */
11
+ /** Expiration timestamp in milliseconds since the Unix epoch. */
26
12
  exp: number;
27
13
  }
14
+ /**
15
+ * Storage settings for createSessionCache; no providers or CSS are required.
16
+ * @see createSessionCache for the canonical usage example.
17
+ */
28
18
  export interface SessionCacheOptions {
29
- /** localStorage キー(デフォルト: dataarthub.auth.last-session) */
19
+ /** localStorage key; defaults to dataarthub.auth.last-session. */
30
20
  key?: string;
31
- /** キャッシュの有効期間(ミリ秒)。デフォルト 7 日 */
21
+ /** Snapshot lifetime in milliseconds; defaults to seven days. */
32
22
  ttl?: number;
33
23
  }
24
+ /**
25
+ * Best-effort browser snapshot storage; see createSessionCache for usage.
26
+ * @see createSessionCache for the canonical usage example.
27
+ */
34
28
  export interface SessionCache {
29
+ /** Resolved storage key shared with storage-event subscribers. */
35
30
  readonly key: string;
31
+ /**
32
+ * Read the stored snapshot without enforcing expiration.
33
+ *
34
+ * @returns Parsed entry (possibly expired), or null on server, missing data or parse/storage failure.
35
+ *
36
+ * @remarks See createSessionCache for the write/read usage pattern.
37
+ */
36
38
  read(): SessionCacheEntry | null;
39
+ /**
40
+ * Store display state with a fresh expiration.
41
+ *
42
+ * @param user - Display user or null for confirmed logout; exclude secrets.
43
+ *
44
+ * @returns No value; storage failures and server writes are ignored.
45
+ *
46
+ * @remarks See createSessionCache for the write/read usage pattern.
47
+ */
37
48
  write(user: User | null): void;
49
+ /**
50
+ * Remove the snapshot for this key.
51
+ *
52
+ * @returns No value; server calls and storage failures are ignored.
53
+ *
54
+ * @remarks Obtain this helper from createSessionCache, then call cache.clear().
55
+ */
38
56
  clear(): void;
39
- /** キャッシュが存在し、かつ未期限切れなら true */
57
+ /**
58
+ * Check whether the stored expiration is still in the future.
59
+ *
60
+ * @returns True for a readable snapshot with exp greater than Date.now(), including a logged-out snapshot.
61
+ *
62
+ * @remarks See createSessionCache for a guarded read example.
63
+ */
40
64
  hasValid(): boolean;
41
65
  }
42
66
  /**
67
+ * Creates best-effort localStorage helpers for optimistic session display.
68
+ *
69
+ * @param options - Optional storage key and lifetime; defaults to the shared key and seven days.
70
+ *
71
+ * @returns Helpers that read, write, clear and check expiration without authenticating a user.
43
72
  *
73
+ * @remarks read() validates only the numeric exp field and does not reject expired data;
74
+ * hasValid() checks expiration. Server reads return null and writes/clears do nothing.
75
+ * Browser storage/JSON failures are swallowed. Store display fields only, never tokens
76
+ * or secrets; verify the actual session with the backend before allowing protected work.
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * import { createSessionCache, type User } from '@alneas/appkit-react/tools/auth';
81
+ * export function rememberSession(user: User | null) {
82
+ * const cache = createSessionCache({ ttl: 24 * 60 * 60 * 1000 });
83
+ * cache.write(user); // null records confirmed logout.
84
+ * const snapshot = cache.hasValid() ? cache.read() : null;
85
+ * return snapshot;
86
+ * }
87
+ * ```
44
88
  */
45
89
  export declare function createSessionCache(options?: SessionCacheOptions): SessionCache;
46
90
  /**
47
- * 他タブでのログアウト/ログインを検知するための storage イベント監視。
91
+ * Subscribes to browser storage events for one session-cache key.
92
+ *
93
+ * @param key - Exact localStorage key to observe.
94
+ *
95
+ * @param onChanged - Synchronous callback invoked when a storage event has this exact key.
48
96
  *
49
- * @returns クリーンアップ関数
97
+ * @returns Cleanup that removes the listener; a no-op function on the server.
98
+ *
99
+ * @remarks Browser storage events generally come from other documents, not the writing
100
+ * window. Events with key null (including storage.clear()) do not match. The callback
101
+ * should reverify the session; its errors are not caught by this listener.
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * import {
106
+ * createSessionCache, subscribeSessionCacheStorageEvent,
107
+ * } from '@alneas/appkit-react/tools/auth';
108
+ * export function watchSession(reverify: () => void) {
109
+ * const cache = createSessionCache();
110
+ * return subscribeSessionCacheStorageEvent(cache.key, reverify);
111
+ * }
112
+ * // Call the returned cleanup when the host subscription is disposed.
113
+ * ```
50
114
  */
51
115
  export declare function subscribeSessionCacheStorageEvent(key: string, onChanged: () => void): () => void;